@tspro/web-music-score 1.0.0 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (43) hide show
  1. package/CHANGELOG.md +19 -0
  2. package/README.md +271 -224
  3. package/dist/audio/index.d.mts +22 -0
  4. package/dist/audio/index.d.ts +22 -0
  5. package/dist/audio/index.js +147 -0
  6. package/dist/audio/index.mjs +109 -0
  7. package/dist/audio-cg/index.d.mts +4 -0
  8. package/dist/audio-cg/index.d.ts +4 -0
  9. package/dist/audio-cg/index.js +124 -0
  10. package/dist/audio-cg/index.mjs +91 -0
  11. package/dist/chunk-2EPWQZKJ.mjs +9 -0
  12. package/dist/core/index.d.mts +21 -0
  13. package/dist/core/index.d.ts +21 -0
  14. package/dist/core/index.js +72 -0
  15. package/dist/core/index.mjs +45 -0
  16. package/dist/guitar-BIFwFT31.d.ts +24 -0
  17. package/dist/guitar-kbJYu3Am.d.mts +24 -0
  18. package/dist/iife/index.global.js +222 -0
  19. package/dist/note-B5ZtlHc8.d.ts +99 -0
  20. package/dist/note-CraqEy8x.d.mts +99 -0
  21. package/dist/pieces/index.d.mts +15 -0
  22. package/dist/pieces/index.d.ts +15 -0
  23. package/dist/pieces/index.js +104 -0
  24. package/dist/pieces/index.mjs +77 -0
  25. package/dist/react-ui/index.d.mts +169 -0
  26. package/dist/react-ui/index.d.ts +169 -0
  27. package/dist/react-ui/index.js +624 -0
  28. package/dist/react-ui/index.mjs +582 -0
  29. package/dist/score/index.d.mts +1558 -0
  30. package/dist/score/index.d.ts +1558 -0
  31. package/dist/score/index.js +6937 -0
  32. package/dist/score/index.mjs +6863 -0
  33. package/dist/tempo--588tdcv.d.ts +203 -0
  34. package/dist/tempo-BEJBHZ5I.d.mts +203 -0
  35. package/dist/theory/index.d.mts +47 -0
  36. package/dist/theory/index.d.ts +47 -0
  37. package/dist/theory/index.js +1783 -0
  38. package/dist/theory/index.mjs +1716 -0
  39. package/package.json +99 -56
  40. package/dist/index.cjs.js +0 -40708
  41. package/dist/index.d.ts +0 -1258
  42. package/dist/index.esm.mjs +0 -40699
  43. package/dist/index.umd.min.js +0 -9
@@ -0,0 +1,624 @@
1
+ /* WebMusicScore v2.0.0 | (c) 2023 PahkaSoft | MIT License | Includes: Tone.js (MIT License) */
2
+ "use strict";
3
+ var __create = Object.create;
4
+ var __defProp = Object.defineProperty;
5
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
6
+ var __getOwnPropNames = Object.getOwnPropertyNames;
7
+ var __getProtoOf = Object.getPrototypeOf;
8
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
9
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
10
+ var __export = (target, all) => {
11
+ for (var name in all)
12
+ __defProp(target, name, { get: all[name], enumerable: true });
13
+ };
14
+ var __copyProps = (to, from, except, desc) => {
15
+ if (from && typeof from === "object" || typeof from === "function") {
16
+ for (let key of __getOwnPropNames(from))
17
+ if (!__hasOwnProp.call(to, key) && key !== except)
18
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
19
+ }
20
+ return to;
21
+ };
22
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
23
+ // If the importer is in node compatibility mode or this is not an ESM
24
+ // file that has been converted to a CommonJS file using a Babel-
25
+ // compatible transform (i.e. "__esModule" has not been set), then set
26
+ // "default" to the CommonJS "module.exports" for node compatibility.
27
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
28
+ mod
29
+ ));
30
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
31
+ var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
32
+
33
+ // src/react-ui/index.ts
34
+ var react_ui_exports = {};
35
+ __export(react_ui_exports, {
36
+ CircleOfFifths: () => CircleOfFifths,
37
+ FretPosition: () => FretPosition,
38
+ FretPositionData: () => FretPositionData,
39
+ GuitarContext: () => GuitarContext,
40
+ GuitarView: () => GuitarView,
41
+ MusicScoreView: () => MusicScoreView,
42
+ PlaybackButtons: () => PlaybackButtons,
43
+ PlaybackButtonsLayout: () => PlaybackButtonsLayout
44
+ });
45
+ module.exports = __toCommonJS(react_ui_exports);
46
+
47
+ // src/react-ui/circle-of-fifths.tsx
48
+ var React = __toESM(require("react"));
49
+ var import_theory = require("@tspro/web-music-score/theory");
50
+ var import_score = require("@tspro/web-music-score/score");
51
+ var import_ts_utils_lib = require("@tspro/ts-utils-lib");
52
+ var import_jsx_runtime = require("react/jsx-runtime");
53
+ var SelectedColor = "#0A0";
54
+ var MajorScaleTonics = [
55
+ ["C"],
56
+ ["G"],
57
+ ["D"],
58
+ ["A"],
59
+ ["E"],
60
+ ["B", "Cb"],
61
+ ["F#", "Gb"],
62
+ ["C#", "Db"],
63
+ ["Ab"],
64
+ ["Eb"],
65
+ ["Bb"],
66
+ ["F"]
67
+ ];
68
+ var MinorScaleTonics = [
69
+ ["A"],
70
+ ["E"],
71
+ ["B"],
72
+ ["F#"],
73
+ ["C#"],
74
+ ["G#", "Ab"],
75
+ ["D#", "Eb"],
76
+ ["A#", "Bb"],
77
+ ["F"],
78
+ ["C"],
79
+ ["G"],
80
+ ["D"]
81
+ ];
82
+ var CircleOfFifths = class extends React.Component {
83
+ constructor(props) {
84
+ super(props);
85
+ }
86
+ onScaleChange(tonic, scaleType) {
87
+ try {
88
+ let scale = (0, import_theory.getScale)(tonic, scaleType);
89
+ this.props.onScaleChange(scale);
90
+ } catch (err) {
91
+ console.error("Invalid scale", tonic, scaleType);
92
+ }
93
+ }
94
+ render() {
95
+ var _a, _b;
96
+ let { style, scale } = this.props;
97
+ let defaultSize = import_ts_utils_lib.Device.toPx("22em");
98
+ let dim = import_ts_utils_lib.Utils.Dom.getDimension(style);
99
+ let width = (_a = dim.width) != null ? _a : defaultSize;
100
+ let height = (_b = dim.height) != null ? _b : defaultSize;
101
+ style = Object.assign({}, style, { width, height });
102
+ let circleRect = new import_score.DivRect(0, width, 0, height).scaleCopy(0.65);
103
+ let lineWidth = Math.max(1, circleRect.width / 100);
104
+ let fontSize = circleRect.width / 15;
105
+ let tonicSize = fontSize * 2;
106
+ let components = [];
107
+ components.push(/* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { style: {
108
+ position: "absolute",
109
+ left: circleRect.left - lineWidth / 2,
110
+ top: circleRect.top - lineWidth / 2,
111
+ width: circleRect.width + lineWidth,
112
+ height: circleRect.height + lineWidth,
113
+ border: lineWidth + "px solid black",
114
+ borderRadius: "50%"
115
+ } }, "circle"));
116
+ for (let i = 0; i < 12; i++) {
117
+ let rad = 2 * Math.PI * i / 12;
118
+ let dx = Math.sin(rad);
119
+ let dy = -Math.cos(rad);
120
+ let x = circleRect.centerX + dx * circleRect.width / 2;
121
+ let y = circleRect.centerY + dy * circleRect.height / 2;
122
+ components.push(/* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { style: {
123
+ position: "absolute",
124
+ left: x - lineWidth / 2,
125
+ top: y - lineWidth * 4 / 2,
126
+ width: lineWidth,
127
+ height: lineWidth * 4,
128
+ backgroundColor: "black",
129
+ transform: "rotate(" + rad + "rad)"
130
+ } }, "m" + i));
131
+ let tonics = [
132
+ MinorScaleTonics[i][1],
133
+ MinorScaleTonics[i][0],
134
+ void 0,
135
+ MajorScaleTonics[i][0],
136
+ MajorScaleTonics[i][1]
137
+ ];
138
+ for (let k = -2; k <= 2; k++) {
139
+ const tonic = tonics[k + 2];
140
+ if (tonic) {
141
+ const scaleType = k < 0 ? import_theory.ScaleType.NaturalMinor : import_theory.ScaleType.Major;
142
+ let tonicStr = import_theory.Note.getScientificNoteName(tonic, import_theory.SymbolSet.Unicode);
143
+ if (scaleType === import_theory.ScaleType.NaturalMinor) {
144
+ tonicStr += "m";
145
+ }
146
+ let isSelected = scaleType === scale.scaleType && tonic === scale.tonic;
147
+ components.push(/* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { style: {
148
+ position: "absolute",
149
+ cursor: "pointer",
150
+ left: x + dx * fontSize * k * 1.5 - tonicSize / 2,
151
+ top: y + dy * fontSize * k * 1.5 - tonicSize / 2,
152
+ width: tonicSize,
153
+ height: tonicSize,
154
+ backgroundColor: isSelected ? SelectedColor : "",
155
+ borderRadius: isSelected ? "50%" : "",
156
+ fontSize,
157
+ lineHeight: 1,
158
+ display: "flex",
159
+ justifyContent: "center",
160
+ // Align horizontal
161
+ alignItems: "center"
162
+ // Align vertical
163
+ }, onClick: () => this.onScaleChange(tonic, scaleType), children: tonicStr }, "kn_" + i + "_" + (k + 2)));
164
+ }
165
+ }
166
+ }
167
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { style, children: components });
168
+ }
169
+ };
170
+
171
+ // src/react-ui/guitar-context.ts
172
+ var import_theory2 = require("@tspro/web-music-score/theory");
173
+ var import_theory3 = require("@tspro/web-music-score/theory");
174
+
175
+ // src/react-ui/assets/guitar.json
176
+ var guitar_default = {
177
+ width: 1223,
178
+ height: 234,
179
+ maxFret: 18,
180
+ nut: {
181
+ x: 1099,
182
+ topStringY: 59,
183
+ bottomStringY: 162
184
+ },
185
+ fret12: {
186
+ x: 330,
187
+ topStringY: 54,
188
+ bottomStringY: 174
189
+ }
190
+ };
191
+
192
+ // src/react-ui/guitar-context.ts
193
+ var import_core = require("@tspro/web-music-score/core");
194
+ var import_ts_utils_lib2 = require("@tspro/ts-utils-lib");
195
+ var DefaultColors = {
196
+ ScaleNoteColor: "#0A0",
197
+ ScaleRootNoteColor: "#00A",
198
+ NonScaleNoteColor: "#A00",
199
+ DefaultBorderColor: "white",
200
+ TextColor: "white"
201
+ };
202
+ var FretPosition = class {
203
+ constructor(guitarCtx, stringId, fretId, chromaticId) {
204
+ this.guitarCtx = guitarCtx;
205
+ this.stringId = stringId;
206
+ this.fretId = fretId;
207
+ this.chromaticId = chromaticId;
208
+ __publicField(this, "note");
209
+ __publicField(this, "isScaleNote");
210
+ __publicField(this, "isScaleRootNote");
211
+ __publicField(this, "isVisible", false);
212
+ __publicField(this, "text", "");
213
+ __publicField(this, "textColor", DefaultColors.TextColor);
214
+ __publicField(this, "fillColor");
215
+ __publicField(this, "borderColor");
216
+ __publicField(this, "isBarre", false);
217
+ let { scale } = guitarCtx;
218
+ this.note = scale.getPreferredChromaticNote(chromaticId);
219
+ this.isScaleNote = scale.isScaleNote(this.note);
220
+ this.isScaleRootNote = scale.isScaleRootNote(this.note);
221
+ }
222
+ get chromaticClass() {
223
+ return import_theory3.Note.getChromaticClass(this.chromaticId);
224
+ }
225
+ show() {
226
+ this.isVisible = true;
227
+ }
228
+ hide() {
229
+ this.isVisible = false;
230
+ }
231
+ setDefaultText() {
232
+ let { pitchNotation, scale, guitarNoteLabel } = this.guitarCtx;
233
+ switch (guitarNoteLabel) {
234
+ case import_theory2.GuitarNoteLabel.OmitOctave:
235
+ this.text = this.note.formatOmitOctave(import_theory2.SymbolSet.Unicode);
236
+ break;
237
+ case import_theory2.GuitarNoteLabel.Interval:
238
+ this.text = scale.getIntervalFromRootNote(this.note).toAbbrString().replace("P1", "R");
239
+ break;
240
+ default:
241
+ this.text = this.note.format(pitchNotation, import_theory2.SymbolSet.Unicode);
242
+ break;
243
+ }
244
+ }
245
+ setDefaultFillColor() {
246
+ this.fillColor = this.isScaleRootNote ? DefaultColors.ScaleRootNoteColor : this.isScaleNote ? DefaultColors.ScaleNoteColor : DefaultColors.NonScaleNoteColor;
247
+ }
248
+ setDefaultBorderColor(showBorder = false) {
249
+ this.borderColor = showBorder ? DefaultColors.DefaultBorderColor : void 0;
250
+ }
251
+ };
252
+ var GuitarContext = class _GuitarContext {
253
+ constructor(tuningName, scale, handedness, pitchNotation, guitarNoteLabel) {
254
+ this.tuningName = tuningName;
255
+ this.scale = scale;
256
+ this.handedness = handedness;
257
+ this.pitchNotation = pitchNotation;
258
+ this.guitarNoteLabel = guitarNoteLabel;
259
+ __publicField(this, "maxFretId");
260
+ __publicField(this, "fretPositionTable");
261
+ __publicField(this, "tuningStrings");
262
+ this.maxFretId = guitar_default.maxFret;
263
+ this.tuningStrings = (0, import_theory3.getTuningStrings)(tuningName);
264
+ this.fretPositionTable = [[], [], [], [], [], []];
265
+ for (let stringId = 0; stringId < 6; stringId++) {
266
+ let openStringChromaticId = this.tuningStrings[stringId].chromaticId;
267
+ for (let fretId = 0; fretId <= this.maxFretId; fretId++) {
268
+ let chromaticId = openStringChromaticId + fretId;
269
+ this.fretPositionTable[stringId][fretId] = new FretPosition(this, stringId, fretId, chromaticId);
270
+ }
271
+ }
272
+ }
273
+ getFretPosition(stringId, fretId) {
274
+ if (!import_ts_utils_lib2.Utils.Is.isInteger(stringId) || stringId < 0 || stringId > 5) {
275
+ throw new import_core.MusicError(import_core.MusicErrorType.InvalidArg, `Invalid stringId: + ${stringId}`);
276
+ } else if (!import_ts_utils_lib2.Utils.Is.isInteger(fretId) || fretId < 0 || fretId > this.maxFretId) {
277
+ throw new import_core.MusicError(import_core.MusicErrorType.InvalidArg, `Invalid fretId: ${fretId}`);
278
+ } else {
279
+ return this.fretPositionTable[stringId][fretId];
280
+ }
281
+ }
282
+ getStringTuning(stringId) {
283
+ return this.tuningStrings[stringId];
284
+ }
285
+ getTuningOverview() {
286
+ return this.tuningStrings.slice().reverse().map((note) => note.format(this.pitchNotation, import_theory2.SymbolSet.Unicode)).join(" - ");
287
+ }
288
+ alterTuningName(tuningName) {
289
+ return tuningName === this.tuningName ? this : new _GuitarContext(tuningName, this.scale, this.handedness, this.pitchNotation, this.guitarNoteLabel);
290
+ }
291
+ alterScale(scale) {
292
+ return import_theory3.Scale.equals(scale, this.scale) ? this : new _GuitarContext(this.tuningName, scale, this.handedness, this.pitchNotation, this.guitarNoteLabel);
293
+ }
294
+ alterHandedness(handedness) {
295
+ return handedness === this.handedness ? this : new _GuitarContext(this.tuningName, this.scale, handedness, this.pitchNotation, this.guitarNoteLabel);
296
+ }
297
+ alterPitchNotation(pitchNotation) {
298
+ return pitchNotation === this.pitchNotation ? this : new _GuitarContext(this.tuningName, this.scale, this.handedness, pitchNotation, this.guitarNoteLabel);
299
+ }
300
+ alterGuitarNoteLabel(guitarNoteLabel) {
301
+ return guitarNoteLabel === this.guitarNoteLabel ? this : new _GuitarContext(this.tuningName, this.scale, this.handedness, this.pitchNotation, guitarNoteLabel);
302
+ }
303
+ };
304
+
305
+ // src/react-ui/guitar-view.tsx
306
+ var React2 = __toESM(require("react"));
307
+ var import_ts_utils_lib3 = require("@tspro/ts-utils-lib");
308
+ var import_score2 = require("@tspro/web-music-score/score");
309
+ var import_theory4 = require("@tspro/web-music-score/theory");
310
+
311
+ // src/react-ui/assets/guitar.png
312
+ var guitar_default2 = "data:image/png;base64,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";
313
+
314
+ // src/react-ui/guitar-view.tsx
315
+ var import_core2 = require("@tspro/web-music-score/core");
316
+ var import_jsx_runtime2 = require("react/jsx-runtime");
317
+ var t_table = [
318
+ 0,
319
+ /* nut */
320
+ 0.056,
321
+ 0.109,
322
+ 0.159,
323
+ 0.206,
324
+ 0.251,
325
+ 0.293,
326
+ 0.333,
327
+ 0.37,
328
+ 0.405,
329
+ 0.439,
330
+ 0.47,
331
+ 0.5,
332
+ 0.528,
333
+ 0.555,
334
+ 0.58,
335
+ 0.603,
336
+ 0.625,
337
+ 0.646,
338
+ 0.666,
339
+ 0.685,
340
+ 0.703,
341
+ 0.719,
342
+ 0.735,
343
+ 0.75
344
+ ];
345
+ function fret_t(fretId) {
346
+ if (!import_ts_utils_lib3.Utils.Is.isInteger(fretId) || fretId < 0 || fretId > t_table.length - 1) {
347
+ throw new import_core2.MusicError(import_core2.MusicErrorType.InvalidArg, `Invalid fretId: ${fretId}`);
348
+ } else {
349
+ return t_table[fretId] * 2;
350
+ }
351
+ }
352
+ var Fret = class _Fret {
353
+ constructor(x, topStringY, bottomStringY) {
354
+ this.x = x;
355
+ this.topStringY = topStringY;
356
+ this.bottomStringY = bottomStringY;
357
+ }
358
+ static _lerp(from, to, t) {
359
+ return new _Fret(
360
+ from.x * (1 - t) + to.x * t,
361
+ from.topStringY * (1 - t) + to.topStringY * t,
362
+ from.bottomStringY * (1 - t) + to.bottomStringY * t
363
+ );
364
+ }
365
+ static lerp(fret0, fret12, fret) {
366
+ return _Fret._lerp(fret0, fret12, fret_t(fret));
367
+ }
368
+ static scale(fretData, scale) {
369
+ return new _Fret(fretData.x * scale, fretData.topStringY * scale, fretData.bottomStringY * scale);
370
+ }
371
+ };
372
+ var FretPositionData = class {
373
+ constructor(fretPosition, cellRect, noteRect) {
374
+ this.fretPosition = fretPosition;
375
+ this.cellRect = cellRect;
376
+ this.noteRect = noteRect;
377
+ }
378
+ };
379
+ var GuitarView = class extends React2.Component {
380
+ constructor(props) {
381
+ super(props);
382
+ __publicField(this, "state");
383
+ this.state = this.getLayoutState();
384
+ }
385
+ componentDidUpdate(prevProps) {
386
+ let { style, guitarContext: guitarCtx } = this.props;
387
+ if (import_ts_utils_lib3.Utils.Dom.styleLayoutChanged(style, prevProps.style) || guitarCtx !== prevProps.guitarContext) {
388
+ this.setState(this.getLayoutState());
389
+ }
390
+ }
391
+ getLayoutState() {
392
+ var _a, _b;
393
+ let { guitarContext: guitarCtx, style } = this.props;
394
+ let dim = import_ts_utils_lib3.Utils.Dom.getDimension(style);
395
+ let width = (_a = dim.width) != null ? _a : window.innerWidth;
396
+ let height = guitar_default.height * width / guitar_default.width;
397
+ let s = width / guitar_default.width;
398
+ let nut = Fret.scale(guitar_default.nut, s);
399
+ let fret12 = Fret.scale(guitar_default.fret12, s);
400
+ let frets = [];
401
+ for (let fret = 0; fret <= guitarCtx.maxFretId; fret++) {
402
+ frets.push(Fret.lerp(nut, fret12, fret));
403
+ }
404
+ let noteWidth = Math.round(frets[frets.length - 2].x - frets[frets.length - 1].x);
405
+ let table = [[], [], [], [], [], []];
406
+ for (let stringId = 0; stringId < 6; stringId++) {
407
+ for (let fretId = 0; fretId < frets.length; fretId++) {
408
+ let left = frets[fretId];
409
+ let right = (_b = frets[fretId - 1]) != null ? _b : new Fret(width, left.topStringY, left.bottomStringY);
410
+ let cellHeight = (left.bottomStringY - left.topStringY) / 5;
411
+ let cellRect = import_score2.DivRect.create(
412
+ left.x,
413
+ left.bottomStringY - cellHeight * (stringId + 0.5),
414
+ right.x - left.x,
415
+ cellHeight
416
+ );
417
+ if (guitarCtx.handedness === import_theory4.Handedness.LeftHanded) {
418
+ cellRect = new import_score2.DivRect(width - cellRect.right, width - cellRect.left, cellRect.top, cellRect.bottom);
419
+ }
420
+ let noteRect = import_score2.DivRect.create(
421
+ cellRect.left + (guitarCtx.handedness === import_theory4.Handedness.LeftHanded ? cellRect.width - noteWidth : 0),
422
+ cellRect.top,
423
+ noteWidth,
424
+ cellRect.height
425
+ ).scaleCopy(0.75, 0.95);
426
+ let fretPosition = guitarCtx.getFretPosition(stringId, fretId);
427
+ table[stringId][fretId] = new FretPositionData(fretPosition, cellRect, noteRect);
428
+ }
429
+ }
430
+ return { table, width, height };
431
+ }
432
+ onHover(fretPositionData) {
433
+ }
434
+ onClick(fretPositionData) {
435
+ let { onClickFretPosition: onClicFretPosition } = this.props;
436
+ if (fretPositionData && onClicFretPosition) {
437
+ onClicFretPosition(fretPositionData.fretPosition);
438
+ }
439
+ }
440
+ render() {
441
+ let { width, height, table } = this.state;
442
+ let { guitarContext: guitarCtx, onUpdateFretPosition, style } = this.props;
443
+ style = Object.assign({}, style, { width, height });
444
+ let components = [];
445
+ components.push(
446
+ /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(
447
+ "img",
448
+ {
449
+ src: guitar_default2,
450
+ className: guitarCtx.handedness === import_theory4.Handedness.LeftHanded ? "left-handed" : "",
451
+ style: { position: "absolute", width, height, zIndex: 0 }
452
+ },
453
+ "guitar"
454
+ )
455
+ );
456
+ table.forEach((frets) => frets.forEach((fretPositionData) => {
457
+ var _a;
458
+ let { fretPosition, noteRect } = fretPositionData;
459
+ if (onUpdateFretPosition) {
460
+ onUpdateFretPosition(fretPosition);
461
+ }
462
+ if (fretPosition.isVisible) {
463
+ let border = fretPosition.borderColor !== void 0 ? Math.round(noteRect.width / 10) : 0;
464
+ let boxShadow = "0 0 0 " + border + "px " + ((_a = fretPosition.borderColor) != null ? _a : "black");
465
+ components.push(/* @__PURE__ */ (0, import_jsx_runtime2.jsx)(
466
+ "span",
467
+ {
468
+ style: {
469
+ position: "absolute",
470
+ zIndex: fretPosition.borderColor !== void 0 ? 2 : 1,
471
+ cursor: "pointer",
472
+ borderRadius: fretPosition.fretId > 0 ? "50%" : "",
473
+ color: fretPosition.textColor,
474
+ background: fretPosition.fillColor,
475
+ boxShadow,
476
+ WebkitBoxShadow: boxShadow,
477
+ MozBoxShadow: boxShadow,
478
+ left: noteRect.left,
479
+ top: noteRect.top,
480
+ width: noteRect.width,
481
+ height: noteRect.height,
482
+ lineHeight: "0.75",
483
+ fontSize: noteRect.height * 0.6 + "px",
484
+ display: "flex",
485
+ justifyContent: "center",
486
+ // Align horizontal
487
+ alignItems: "center"
488
+ // Align vertical
489
+ },
490
+ children: fretPosition.text
491
+ },
492
+ "sel_" + fretPosition.stringId + "_" + fretPosition.fretId
493
+ ));
494
+ }
495
+ }));
496
+ table.forEach((string, stringId) => string.forEach((cell, fretId) => {
497
+ components.push(/* @__PURE__ */ (0, import_jsx_runtime2.jsx)(
498
+ "div",
499
+ {
500
+ onClick: () => this.onClick(cell),
501
+ onMouseEnter: () => this.onHover(cell),
502
+ onMouseLeave: () => this.onHover(void 0),
503
+ style: {
504
+ position: "absolute",
505
+ zIndex: 3,
506
+ cursor: "pointer",
507
+ left: cell.cellRect.left,
508
+ top: cell.cellRect.top,
509
+ width: cell.cellRect.width,
510
+ height: cell.cellRect.height
511
+ }
512
+ },
513
+ "table_" + stringId + "_" + fretId
514
+ ));
515
+ }));
516
+ return /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("div", { style, children: components });
517
+ }
518
+ };
519
+
520
+ // src/react-ui/music-score-view.tsx
521
+ var React3 = __toESM(require("react"));
522
+ var import_score3 = require("@tspro/web-music-score/score");
523
+ var import_jsx_runtime3 = require("react/jsx-runtime");
524
+ var MusicScoreView = class extends React3.Component {
525
+ constructor(props) {
526
+ super(props);
527
+ __publicField(this, "renderer");
528
+ this.renderer = new import_score3.MRenderer();
529
+ this.renderer.setDocument(props.doc);
530
+ if (props.onScoreEvent) {
531
+ this.renderer.setScoreEventListener(props.onScoreEvent);
532
+ }
533
+ }
534
+ componentDidUpdate(prevProps, prevState) {
535
+ if (prevProps.doc !== this.props.doc) {
536
+ this.renderer.setDocument(this.props.doc);
537
+ this.renderer.draw();
538
+ }
539
+ }
540
+ render() {
541
+ const setCanvas = (canvas) => {
542
+ if (canvas) {
543
+ this.renderer.setCanvas(canvas);
544
+ this.renderer.draw();
545
+ }
546
+ };
547
+ return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("canvas", { style: { position: "relative" }, ref: setCanvas, children: "Canvas error!" });
548
+ }
549
+ };
550
+
551
+ // src/react-ui/playback-buttons.tsx
552
+ var React4 = __toESM(require("react"));
553
+ var import_score4 = require("@tspro/web-music-score/score");
554
+ var import_jsx_runtime4 = require("react/jsx-runtime");
555
+ var PlaybackButtonsLayout = /* @__PURE__ */ ((PlaybackButtonsLayout2) => {
556
+ PlaybackButtonsLayout2[PlaybackButtonsLayout2["PlayStopSingle"] = 0] = "PlayStopSingle";
557
+ PlaybackButtonsLayout2[PlaybackButtonsLayout2["PlayStop"] = 1] = "PlayStop";
558
+ PlaybackButtonsLayout2[PlaybackButtonsLayout2["PlayPauseStop"] = 2] = "PlayPauseStop";
559
+ return PlaybackButtonsLayout2;
560
+ })(PlaybackButtonsLayout || {});
561
+ var PlaybackButtons = class extends React4.Component {
562
+ constructor(props) {
563
+ super(props);
564
+ __publicField(this, "state");
565
+ this.state = {
566
+ controller: new import_score4.MPlaybackButtons().setDocument(props.doc)
567
+ };
568
+ }
569
+ componentDidUpdate(prevProps) {
570
+ if (this.props.doc !== prevProps.doc) {
571
+ this.state.controller.setDocument(this.props.doc);
572
+ }
573
+ }
574
+ render() {
575
+ let { buttonLayout, playLabel, pauseLabel, stopLabel } = this.props;
576
+ let { controller } = this.state;
577
+ buttonLayout = buttonLayout != null ? buttonLayout : 2 /* PlayPauseStop */;
578
+ playLabel = playLabel != null ? playLabel : "Play";
579
+ pauseLabel = pauseLabel != null ? pauseLabel : "Pause";
580
+ stopLabel = stopLabel != null ? stopLabel : "Stop";
581
+ if (buttonLayout === 0 /* PlayStopSingle */) {
582
+ return /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("button", { className: "btn btn-primary", ref: (btn) => {
583
+ if (btn) controller.setPlayStopButton(btn, playLabel, stopLabel);
584
+ } });
585
+ } else if (buttonLayout === 1 /* PlayStop */) {
586
+ return /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("div", { className: "btn-group", children: [
587
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("button", { className: "btn btn-primary", ref: (btn) => {
588
+ if (btn) controller.setPlayButton(btn, playLabel);
589
+ } }),
590
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("button", { className: "btn btn-primary", ref: (btn) => {
591
+ if (btn) controller.setStopButton(btn, stopLabel);
592
+ } })
593
+ ] });
594
+ } else {
595
+ return /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("div", { className: "btn-group", children: [
596
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("button", { className: "btn btn-primary", ref: (btn) => {
597
+ if (btn) controller.setPlayButton(btn, playLabel);
598
+ } }),
599
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("button", { className: "btn btn-primary", ref: (btn) => {
600
+ if (btn) controller.setPauseButton(btn, pauseLabel);
601
+ } }),
602
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("button", { className: "btn btn-primary", ref: (btn) => {
603
+ if (btn) controller.setStopButton(btn, stopLabel);
604
+ } })
605
+ ] });
606
+ }
607
+ }
608
+ };
609
+
610
+ // src/react-ui/index.ts
611
+ var import_core3 = require("@tspro/web-music-score/core");
612
+ (0, import_core3.init)();
613
+ // Annotate the CommonJS export names for ESM import in node:
614
+ 0 && (module.exports = {
615
+ CircleOfFifths,
616
+ FretPosition,
617
+ FretPositionData,
618
+ GuitarContext,
619
+ GuitarView,
620
+ MusicScoreView,
621
+ PlaybackButtons,
622
+ PlaybackButtonsLayout
623
+ });
624
+ //# sourceMappingURL=index.js.map