@scorelabs/viewer 1.0.1

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 (83) hide show
  1. package/README.md +5 -0
  2. package/dist/android-chrome-192x192.png +0 -0
  3. package/dist/android-chrome-512x512.png +0 -0
  4. package/dist/apple-touch-icon.png +0 -0
  5. package/dist/audio/AudioPlayer.d.ts +54 -0
  6. package/dist/favicon-16x16.png +0 -0
  7. package/dist/favicon-32x32.png +0 -0
  8. package/dist/favicon-96x96.png +0 -0
  9. package/dist/favicon.ico +0 -0
  10. package/dist/favicon.svg +1 -0
  11. package/dist/importers/MusicXMLParser.d.ts +51 -0
  12. package/dist/importers/index.d.ts +6 -0
  13. package/dist/index.d.ts +2 -0
  14. package/dist/layouts/LayoutConfig.d.ts +62 -0
  15. package/dist/layouts/LayoutUtils.d.ts +10 -0
  16. package/dist/layouts/MeasureLayout.d.ts +20 -0
  17. package/dist/layouts/NoteLayout.d.ts +21 -0
  18. package/dist/layouts/ScoreLayout.d.ts +28 -0
  19. package/dist/layouts/StaffLayout.d.ts +26 -0
  20. package/dist/layouts/StaffSystemLayout.d.ts +18 -0
  21. package/dist/layouts/index.d.ts +6 -0
  22. package/dist/models/Instrument.d.ts +26 -0
  23. package/dist/models/Measure.d.ts +80 -0
  24. package/dist/models/Note.d.ts +122 -0
  25. package/dist/models/Part.d.ts +60 -0
  26. package/dist/models/Pitch.d.ts +45 -0
  27. package/dist/models/Score.d.ts +120 -0
  28. package/dist/models/Staff.d.ts +57 -0
  29. package/dist/models/__tests__/Note.test.d.ts +1 -0
  30. package/dist/models/__tests__/Pitch.test.d.ts +1 -0
  31. package/dist/models/index.d.ts +7 -0
  32. package/dist/models/types.d.ts +163 -0
  33. package/dist/new_score.json +112 -0
  34. package/dist/rendering/NoteRenderer.d.ts +52 -0
  35. package/dist/rendering/ScoreRenderer.d.ts +35 -0
  36. package/dist/rendering/StaffRenderer.d.ts +67 -0
  37. package/dist/rendering/glyphs/AccidentalGlyphs.d.ts +5 -0
  38. package/dist/rendering/glyphs/ClefGlyphs.d.ts +19 -0
  39. package/dist/rendering/glyphs/DecorationGlyphs.d.ts +11 -0
  40. package/dist/rendering/glyphs/NoteGlyphs.d.ts +19 -0
  41. package/dist/rendering/glyphs/RestGlyphs.d.ts +11 -0
  42. package/dist/rendering/glyphs/SignatureGlyphs.d.ts +11 -0
  43. package/dist/rendering/glyphs/index.d.ts +6 -0
  44. package/dist/rendering/index.d.ts +4 -0
  45. package/dist/satb.xml +4 -0
  46. package/dist/score-viewer.js +13234 -0
  47. package/dist/score-viewer.umd.cjs +145 -0
  48. package/dist/scores/canon_pachelbel.xml +4 -0
  49. package/dist/scores/el_cant_dels_ocells.xml +112 -0
  50. package/dist/scores/el_noi_de_la_mare.xml +102 -0
  51. package/dist/scores/els_segadors.xml +110 -0
  52. package/dist/scores/imported/forest.xml +161 -0
  53. package/dist/showcase.json +292 -0
  54. package/dist/site.webmanifest +21 -0
  55. package/dist/src/App.d.ts +1 -0
  56. package/dist/src/components/AboutDialog.d.ts +6 -0
  57. package/dist/src/components/ChordDialog.d.ts +8 -0
  58. package/dist/src/components/ClefDialog.d.ts +9 -0
  59. package/dist/src/components/FloatingToolbar.d.ts +26 -0
  60. package/dist/src/components/InstrumentsDialog.d.ts +22 -0
  61. package/dist/src/components/KeySignatureDialog.d.ts +9 -0
  62. package/dist/src/components/Logo.d.ts +6 -0
  63. package/dist/src/components/MenuBar.d.ts +20 -0
  64. package/dist/src/components/NoteInputToolbar.d.ts +101 -0
  65. package/dist/src/components/PageSetupDialog.d.ts +9 -0
  66. package/dist/src/components/ScoreCanvas.d.ts +49 -0
  67. package/dist/src/components/ScoreInfoDialog.d.ts +19 -0
  68. package/dist/src/components/ScoreLayoutDialog.d.ts +9 -0
  69. package/dist/src/components/TempoDialog.d.ts +11 -0
  70. package/dist/src/components/TextDialog.d.ts +10 -0
  71. package/dist/src/components/TimeSignatureDialog.d.ts +9 -0
  72. package/dist/src/components/TransposeDialog.d.ts +9 -0
  73. package/dist/src/components/VirtualKeyboard.d.ts +10 -0
  74. package/dist/src/exporters/MusicXMLExporter.d.ts +10 -0
  75. package/dist/src/hooks/useHistory.d.ts +14 -0
  76. package/dist/src/index.d.ts +24 -0
  77. package/dist/src/main.d.ts +1 -0
  78. package/dist/src/services/HarmonyService.d.ts +10 -0
  79. package/dist/src/services/VocalSynthesisService.d.ts +13 -0
  80. package/dist/src/utils/pdfToPng.d.ts +5 -0
  81. package/dist/web-app-manifest-192x192.png +0 -0
  82. package/dist/web-app-manifest-512x512.png +0 -0
  83. package/package.json +63 -0
@@ -0,0 +1,292 @@
1
+ {
2
+ "title": "ScoreLabs Feature Showcase v3",
3
+ "composer": "Antigravity AI",
4
+ "timeSignature": {
5
+ "beats": 4,
6
+ "beatType": 4
7
+ },
8
+ "keySignature": {
9
+ "fifths": 1
10
+ },
11
+ "bpm": 120,
12
+ "copyright": "© 2026 ScoreLabs Jordi AI",
13
+ "parts": [
14
+ {
15
+ "name": "Piano",
16
+ "staves": [
17
+ {
18
+ "clef": "treble",
19
+ "measures": [
20
+ {
21
+ "voices": [
22
+ [
23
+ {
24
+ "pitch": {
25
+ "midiNumber": 74
26
+ },
27
+ "duration": "quarter",
28
+ "chord": "G",
29
+ "fretboardDiagram": {
30
+ "strings": 6,
31
+ "frets": 5,
32
+ "dots": [
33
+ {
34
+ "string": 1,
35
+ "fret": 3,
36
+ "label": "3"
37
+ },
38
+ {
39
+ "string": 5,
40
+ "fret": 2,
41
+ "label": "1"
42
+ },
43
+ {
44
+ "string": 6,
45
+ "fret": 3,
46
+ "label": "2"
47
+ }
48
+ ],
49
+ "openStrings": [2, 3, 4]
50
+ },
51
+ "ornament": "trill"
52
+ },
53
+ {
54
+ "pitch": {
55
+ "midiNumber": 74
56
+ },
57
+ "duration": "quarter",
58
+ "arpeggio": "normal"
59
+ },
60
+ {
61
+ "pitch": {
62
+ "midiNumber": 76
63
+ },
64
+ "duration": "quarter",
65
+ "glissando": {
66
+ "type": "wavy",
67
+ "placement": "start"
68
+ }
69
+ },
70
+ {
71
+ "pitch": {
72
+ "midiNumber": 74
73
+ },
74
+ "duration": "quarter"
75
+ }
76
+ ]
77
+ ]
78
+ },
79
+ {
80
+ "voices": [
81
+ [
82
+ {
83
+ "pitch": {
84
+ "midiNumber": 72
85
+ },
86
+ "duration": "quarter",
87
+ "glissando": {
88
+ "type": "wavy",
89
+ "placement": "stop"
90
+ }
91
+ },
92
+ {
93
+ "pitch": {
94
+ "midiNumber": 72
95
+ },
96
+ "duration": "quarter",
97
+ "ottava": {
98
+ "type": "8va",
99
+ "placement": "start"
100
+ }
101
+ },
102
+ {
103
+ "pitch": {
104
+ "midiNumber": 74
105
+ },
106
+ "duration": "quarter"
107
+ },
108
+ {
109
+ "pitch": {
110
+ "midiNumber": 74
111
+ },
112
+ "duration": "quarter",
113
+ "slur": "start"
114
+ }
115
+ ]
116
+ ]
117
+ },
118
+ {
119
+ "systemBreak": true,
120
+ "voices": [
121
+ [
122
+ {
123
+ "pitch": {
124
+ "midiNumber": 79
125
+ },
126
+ "duration": "half",
127
+ "slur": "stop"
128
+ },
129
+ {
130
+ "pitch": {
131
+ "midiNumber": 79
132
+ },
133
+ "duration": "half",
134
+ "ottava": {
135
+ "type": "8va",
136
+ "placement": "stop"
137
+ }
138
+ }
139
+ ]
140
+ ]
141
+ },
142
+ {
143
+ "voices": [
144
+ [
145
+ {
146
+ "pitch": {
147
+ "midiNumber": 67
148
+ },
149
+ "duration": "whole",
150
+ "pedal": {
151
+ "type": "sustain",
152
+ "placement": "start"
153
+ }
154
+ }
155
+ ]
156
+ ]
157
+ },
158
+ {
159
+ "voices": [
160
+ [
161
+ {
162
+ "pitch": {
163
+ "midiNumber": 60
164
+ },
165
+ "duration": "whole",
166
+ "pedal": {
167
+ "type": "sustain",
168
+ "placement": "stop"
169
+ },
170
+ "tie": true
171
+ }
172
+ ]
173
+ ]
174
+ },
175
+ {
176
+ "voices": [
177
+ [
178
+ {
179
+ "pitch": {
180
+ "midiNumber": 59
181
+ },
182
+ "duration": "eighth",
183
+ "isGrace": true,
184
+ "slur": "start"
185
+ },
186
+ {
187
+ "pitch": {
188
+ "midiNumber": 60
189
+ },
190
+ "duration": "quarter",
191
+ "tuplet": {
192
+ "actual": 3,
193
+ "normal": 2,
194
+ "type": "start"
195
+ },
196
+ "slur": "stop"
197
+ },
198
+ {
199
+ "pitch": {
200
+ "midiNumber": 62
201
+ },
202
+ "duration": "quarter",
203
+ "tuplet": {
204
+ "actual": 3,
205
+ "normal": 2,
206
+ "type": "middle"
207
+ }
208
+ },
209
+ {
210
+ "pitch": {
211
+ "midiNumber": 64
212
+ },
213
+ "duration": "quarter",
214
+ "tuplet": {
215
+ "actual": 3,
216
+ "normal": 2,
217
+ "type": "stop"
218
+ }
219
+ },
220
+ {
221
+ "pitch": {
222
+ "midiNumber": 65
223
+ },
224
+ "duration": "quarter",
225
+ "chord": "F"
226
+ },
227
+ {
228
+ "pitch": {
229
+ "midiNumber": 67
230
+ },
231
+ "duration": "quarter",
232
+ "chord": "G7"
233
+ }
234
+ ]
235
+ ]
236
+ },
237
+ {
238
+ "voices": [
239
+ [
240
+ {
241
+ "pitch": {
242
+ "midiNumber": 72
243
+ },
244
+ "duration": "whole",
245
+ "articulation": "fermata"
246
+ }
247
+ ],
248
+ [
249
+ {
250
+ "pitch": {
251
+ "midiNumber": 64
252
+ },
253
+ "duration": "whole"
254
+ }
255
+ ],
256
+ [
257
+ {
258
+ "pitch": {
259
+ "midiNumber": 60
260
+ },
261
+ "duration": "whole"
262
+ }
263
+ ]
264
+ ]
265
+ },
266
+ {
267
+ "timeSignature": {
268
+ "beats": 3,
269
+ "beatType": 4
270
+ },
271
+ "keySignature": {
272
+ "fifths": -3
273
+ },
274
+ "clef": "bass",
275
+ "voices": [
276
+ [
277
+ {
278
+ "pitch": {
279
+ "midiNumber": 48
280
+ },
281
+ "duration": "half",
282
+ "isDotted": true
283
+ }
284
+ ]
285
+ ]
286
+ }
287
+ ]
288
+ }
289
+ ]
290
+ }
291
+ ]
292
+ }
@@ -0,0 +1,21 @@
1
+ {
2
+ "name": "ScoreLabs",
3
+ "short_name": "ScoreLabs",
4
+ "icons": [
5
+ {
6
+ "src": "/web-app-manifest-192x192.png",
7
+ "sizes": "192x192",
8
+ "type": "image/png",
9
+ "purpose": "maskable"
10
+ },
11
+ {
12
+ "src": "/web-app-manifest-512x512.png",
13
+ "sizes": "512x512",
14
+ "type": "image/png",
15
+ "purpose": "maskable"
16
+ }
17
+ ],
18
+ "theme_color": "#ffffff",
19
+ "background_color": "#ffffff",
20
+ "display": "standalone"
21
+ }
@@ -0,0 +1 @@
1
+ export default function App(): import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,6 @@
1
+ interface AboutDialogProps {
2
+ open: boolean;
3
+ onClose: () => void;
4
+ }
5
+ export declare function AboutDialog({ open, onClose }: AboutDialogProps): import("react/jsx-runtime").JSX.Element;
6
+ export {};
@@ -0,0 +1,8 @@
1
+ interface ChordDialogProps {
2
+ open: boolean;
3
+ onClose: () => void;
4
+ onSave: (chord: string) => void;
5
+ currentChord?: string;
6
+ }
7
+ export declare function ChordDialog({ open, onClose, onSave, currentChord }: ChordDialogProps): import("react/jsx-runtime").JSX.Element;
8
+ export {};
@@ -0,0 +1,9 @@
1
+ import { Clef } from '../../models/types';
2
+ interface ClefDialogProps {
3
+ open: boolean;
4
+ onClose: () => void;
5
+ onSave: (clef: Clef) => void;
6
+ currentClef?: Clef;
7
+ }
8
+ export declare function ClefDialog({ open, onClose, onSave, currentClef }: ClefDialogProps): import("react/jsx-runtime").JSX.Element;
9
+ export {};
@@ -0,0 +1,26 @@
1
+ import { SxProps, Theme } from '@mui/material';
2
+ interface FloatingToolbarProps {
3
+ onOpenFile?: (file: File) => void;
4
+ onImportPDF?: (file: File) => void;
5
+ onAbout?: () => void;
6
+ onPlay?: () => void;
7
+ onStop?: () => void;
8
+ isPlaying?: boolean;
9
+ onTranspose: () => void;
10
+ onInstruments?: () => void;
11
+ onToggleKeyboard?: () => void;
12
+ showKeyboard?: boolean;
13
+ onZoomIn: () => void;
14
+ onZoomOut: () => void;
15
+ onResetZoom: () => void;
16
+ isEditMode?: boolean;
17
+ sx?: SxProps<Theme>;
18
+ isSwing?: boolean;
19
+ onToggleSwing?: () => void;
20
+ isMetronome?: boolean;
21
+ onToggleMetronome?: () => void;
22
+ onSave?: () => void;
23
+ canSave?: boolean;
24
+ }
25
+ export declare function FloatingToolbar({ onOpenFile, onImportPDF, onAbout, onPlay, onStop, isPlaying, onTranspose, onInstruments, onToggleKeyboard, showKeyboard, onZoomIn, onZoomOut, onResetZoom, isEditMode, sx, isSwing, onToggleSwing, isMetronome, onToggleMetronome, onSave, canSave, }: FloatingToolbarProps): import("react/jsx-runtime").JSX.Element;
26
+ export {};
@@ -0,0 +1,22 @@
1
+ import { Score } from '../../models/Score';
2
+ import { StaffJSON } from '../../models/Staff';
3
+ import { Instrument } from '../../models/Instrument';
4
+ interface InstrumentSettings {
5
+ partIndex: number;
6
+ visible: boolean;
7
+ volume: number;
8
+ }
9
+ interface InstrumentsDialogProps {
10
+ open: boolean;
11
+ onClose: () => void;
12
+ score: Score;
13
+ instrumentSettings: InstrumentSettings[];
14
+ onToggleVisibility: (partIndex: number) => void;
15
+ onVolumeChange: (partIndex: number, volume: number) => void;
16
+ onStaffChange: (partIndex: number, staffIndex: number, updates: Partial<StaffJSON>) => void;
17
+ onInstrumentChange: (partIndex: number, instrument: Instrument) => void;
18
+ onAddInstrument: () => void;
19
+ onDeleteInstrument: (partIndex: number) => void;
20
+ }
21
+ export declare function InstrumentsDialog({ open, onClose, score, instrumentSettings, onToggleVisibility, onVolumeChange, onStaffChange, onInstrumentChange, onAddInstrument, onDeleteInstrument, }: InstrumentsDialogProps): import("react/jsx-runtime").JSX.Element;
22
+ export {};
@@ -0,0 +1,9 @@
1
+ import { KeySignature } from '../../models/types';
2
+ interface KeySignatureDialogProps {
3
+ open: boolean;
4
+ onClose: () => void;
5
+ onSave: (keySignature: KeySignature) => void;
6
+ currentKeySignature?: KeySignature;
7
+ }
8
+ export declare function KeySignatureDialog({ open, onClose, onSave, currentKeySignature, }: KeySignatureDialogProps): import("react/jsx-runtime").JSX.Element;
9
+ export {};
@@ -0,0 +1,6 @@
1
+ import { BoxProps } from '@mui/material';
2
+ interface LogoProps extends BoxProps {
3
+ size?: number | string;
4
+ }
5
+ export declare function Logo({ size, sx, ...props }: LogoProps): import("react/jsx-runtime").JSX.Element;
6
+ export {};
@@ -0,0 +1,20 @@
1
+ import { SxProps, Theme } from '@mui/material';
2
+ export interface MenuBarProps {
3
+ onOpenFile: (file: File) => void;
4
+ onZoomIn: () => void;
5
+ onZoomOut: () => void;
6
+ onResetZoom: () => void;
7
+ onTranspose: () => void;
8
+ onAbout: () => void;
9
+ onPageSetup?: () => void;
10
+ onScoreLayout?: () => void;
11
+ onInstruments?: () => void;
12
+ onKeySignature?: () => void;
13
+ onTimeSignature?: () => void;
14
+ onClef?: () => void;
15
+ onTempo?: () => void;
16
+ onLoadSATBTemplate?: () => void;
17
+ onImportPDF?: (file: File) => void;
18
+ sx?: SxProps<Theme>;
19
+ }
20
+ export declare function MenuBar({ onOpenFile, onZoomIn, onZoomOut, onResetZoom, onTranspose, onAbout, onPageSetup, onScoreLayout, onInstruments, onKeySignature, onTimeSignature, onClef, onTempo, onLoadSATBTemplate, onImportPDF, sx, }: MenuBarProps): import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,101 @@
1
+ import { SxProps, Theme } from '@mui/material';
2
+ import { Duration as NoteDuration, Accidental, Articulation, Ornament, Arpeggio, HairpinType, GlissandoType, OttavaType, NoteheadShape, Bowing } from '../../models/types';
3
+ export type { NoteDuration };
4
+ interface NoteInputToolbarProps {
5
+ selectedDuration: NoteDuration;
6
+ onDurationChange: (duration: NoteDuration) => void;
7
+ isRestMode: boolean;
8
+ onRestModeChange: (isRest: boolean) => void;
9
+ selectedAccidental: Accidental | null;
10
+ onAccidentalChange: (accidental: Accidental | null) => void;
11
+ selectedArticulation: Articulation | null;
12
+ onArticulationChange: (articulation: Articulation | null) => void;
13
+ selectedDynamic: string | null;
14
+ onDynamicChange: (dynamic: string | null) => void;
15
+ isTied: boolean;
16
+ onTieChange: (isTied: boolean) => void;
17
+ isSlurred: boolean;
18
+ onSlurChange: (isSlurred: boolean) => void;
19
+ isDotted: boolean;
20
+ onDottedChange: (isDotted: boolean) => void;
21
+ selectedOrnament: Ornament | null;
22
+ onOrnamentChange: (ornament: Ornament | null) => void;
23
+ selectedHairpin: HairpinType | null;
24
+ onHairpinChange: (type: HairpinType | null) => void;
25
+ selectedGlissando: GlissandoType | null;
26
+ onGlissandoChange: (type: GlissandoType | null) => void;
27
+ selectedArpeggio: Arpeggio | null;
28
+ onArpeggioChange: (type: Arpeggio | null) => void;
29
+ selectedOttava: OttavaType | null;
30
+ onOttavaChange: (type: OttavaType | null) => void;
31
+ selectedPedal: 'sustain' | 'una-corda' | null;
32
+ onPedalChange: (type: 'sustain' | 'una-corda' | null) => void;
33
+ isPickup?: boolean;
34
+ onPickupChange?: (isPickup: boolean) => void;
35
+ selectedFret?: number;
36
+ onFretChange?: (fret: number) => void;
37
+ selectedString?: number;
38
+ onStringChange?: (string: number) => void;
39
+ activeVoice?: number;
40
+ onVoiceChange?: (voice: number) => void;
41
+ isGrace?: boolean;
42
+ onGraceChange?: (isGrace: boolean) => void;
43
+ onAddKeySignature?: () => void;
44
+ onAddTimeSignature?: () => void;
45
+ onAddClef?: () => void;
46
+ onAddTempo?: () => void;
47
+ onAddVolta?: (ending: number) => void;
48
+ onAddChordSymbol?: () => void;
49
+ isSystemBreak?: boolean;
50
+ onSystemBreakChange?: (isBreak: boolean) => void;
51
+ isPageBreak?: boolean;
52
+ onPageBreakChange?: (isBreak: boolean) => void;
53
+ onAddRehearsalMark?: () => void;
54
+ onAddSystemText?: () => void;
55
+ onAddStaffText?: () => void;
56
+ onAddMeasureBefore?: () => void;
57
+ onAddMeasureAfter?: () => void;
58
+ onRemoveMeasure?: () => void;
59
+ onAddRepeat?: (type: 'start' | 'end') => void;
60
+ onTupletChange?: (actual: number, normal: number) => void;
61
+ onToggleEnharmonic?: () => void;
62
+ onBeamingChange?: (action: 'join' | 'break') => void;
63
+ selectedColor?: string;
64
+ onColorChange?: (color: string) => void;
65
+ selectedNotehead?: NoteheadShape;
66
+ onNoteheadChange?: (shape: NoteheadShape) => void;
67
+ selectedBowing?: Bowing | null;
68
+ onBowingChange?: (bowing: Bowing | null) => void;
69
+ selectedFingering?: number | null;
70
+ onFingeringChange?: (fingering: number | null) => void;
71
+ onApplyInfill?: () => void;
72
+ aiSuggestionAvailable?: boolean;
73
+ onPageSetup?: () => void;
74
+ onScoreLayout?: () => void;
75
+ onLoadSATBTemplate?: () => void;
76
+ onDownloadMusicXML?: () => void;
77
+ onDownloadPDF?: () => void;
78
+ onSave?: () => void;
79
+ canSave?: boolean;
80
+ onScoreInfo?: () => void;
81
+ onPlay?: () => void;
82
+ onStop?: () => void;
83
+ isPlaying?: boolean;
84
+ isMetronome?: boolean;
85
+ onToggleMetronome?: () => void;
86
+ isSwing?: boolean;
87
+ onToggleSwing?: () => void;
88
+ showKeyboard?: boolean;
89
+ onToggleKeyboard?: () => void;
90
+ onTranspose?: () => void;
91
+ onInstruments?: () => void;
92
+ onResetZoom?: () => void;
93
+ onOpenFile?: (file: File) => void;
94
+ onImportPDF?: (file: File) => void;
95
+ isEditMode?: boolean;
96
+ sx?: SxProps<Theme>;
97
+ userTier?: string;
98
+ onGenerateVocalGuide?: () => void;
99
+ onUpgrade?: () => void;
100
+ }
101
+ export declare function NoteInputToolbar({ selectedDuration, onDurationChange, isRestMode, onRestModeChange, selectedAccidental, onAccidentalChange, selectedArticulation, onArticulationChange, selectedDynamic, onDynamicChange, isTied, onTieChange, isSlurred, onSlurChange, isDotted, onDottedChange, selectedOrnament, onOrnamentChange, selectedHairpin, onHairpinChange, selectedGlissando, onGlissandoChange, selectedArpeggio, onArpeggioChange, selectedOttava, onOttavaChange, selectedPedal, onPedalChange, isPickup, onPickupChange, selectedFret, onFretChange, selectedString, onStringChange, activeVoice, onVoiceChange, isGrace, onGraceChange, onAddKeySignature, onAddTimeSignature, onAddClef, onAddTempo, onAddVolta, onAddChordSymbol, isSystemBreak, onSystemBreakChange, isPageBreak, onPageBreakChange, onAddRehearsalMark, onAddSystemText, onAddStaffText, onAddMeasureBefore, onAddMeasureAfter, onRemoveMeasure, onAddRepeat, onTupletChange, onToggleEnharmonic, onBeamingChange, selectedColor, onColorChange, selectedNotehead, onNoteheadChange, selectedBowing, onBowingChange, selectedFingering, onFingeringChange, onApplyInfill, onPageSetup, onScoreLayout, onLoadSATBTemplate, onDownloadMusicXML, onDownloadPDF, onSave, canSave, onScoreInfo, onPlay, onStop, isPlaying, isMetronome, onToggleMetronome, isSwing, onToggleSwing, showKeyboard, onToggleKeyboard, onTranspose, onInstruments, onOpenFile, onImportPDF, isEditMode, sx, userTier, aiSuggestionAvailable, onGenerateVocalGuide, onUpgrade, }: NoteInputToolbarProps): import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,9 @@
1
+ import { LayoutConfig } from '../../layouts';
2
+ interface PageSetupDialogProps {
3
+ open: boolean;
4
+ onClose: () => void;
5
+ config: LayoutConfig;
6
+ onSave: (newConfig: LayoutConfig) => void;
7
+ }
8
+ export declare function PageSetupDialog({ open, onClose, config, onSave }: PageSetupDialogProps): import("react/jsx-runtime").JSX.Element;
9
+ export {};
@@ -0,0 +1,49 @@
1
+ import { Score } from '../../models/Score';
2
+ import { LayoutConfig } from '../../layouts';
3
+ import { AudioPlayer } from '../../audio/AudioPlayer';
4
+ interface ScoreCanvasProps {
5
+ score: Score;
6
+ zoomLevel: number;
7
+ onZoomIn: () => void;
8
+ onZoomOut: () => void;
9
+ onResetZoom: () => void;
10
+ onOpenFile: (file: File) => void;
11
+ onImportPDF?: (file: File) => void;
12
+ onTranspose: () => void;
13
+ onAbout: () => void;
14
+ onPageSetup?: () => void;
15
+ onScoreLayout?: () => void;
16
+ onInstruments?: () => void;
17
+ onLoadSATBTemplate?: () => void;
18
+ onUpdateScore?: (newScore: Score) => void;
19
+ audioPlayer?: AudioPlayer;
20
+ isPlaying?: boolean;
21
+ layoutConfig?: LayoutConfig;
22
+ onPlay?: (startMeasure?: number) => void;
23
+ onStop?: () => void;
24
+ visiblePartIndices?: number[];
25
+ isMetronome?: boolean;
26
+ onToggleMetronome?: () => void;
27
+ onDownloadMusicXML?: () => void;
28
+ onDownloadPDF?: () => void;
29
+ initialEditMode?: boolean;
30
+ onSave?: () => void;
31
+ canSave?: boolean;
32
+ onUpdateTitle?: (title: string) => void;
33
+ onUpdateComposer?: (composer: string) => void;
34
+ userTier?: string;
35
+ isLoading?: boolean;
36
+ onUpgrade?: () => void;
37
+ onInfill?: (score: Score, selection: NoteSelection[]) => Promise<Score>;
38
+ brandingLabel?: string;
39
+ brandingLink?: string;
40
+ }
41
+ export interface NoteSelection {
42
+ partIndex: number;
43
+ staffIndex: number;
44
+ measureIndex: number;
45
+ noteIndex: number;
46
+ voiceIndex?: number;
47
+ }
48
+ export declare function ScoreCanvas({ score, zoomLevel, onZoomIn, onZoomOut, onResetZoom, onOpenFile, onImportPDF, onTranspose, onInstruments, onUpdateScore, onPlay, onStop, onPageSetup, onScoreLayout, onLoadSATBTemplate, audioPlayer, isPlaying, layoutConfig, visiblePartIndices, isMetronome, onToggleMetronome, onDownloadMusicXML, onDownloadPDF, initialEditMode, onSave, canSave, onUpdateTitle, onUpdateComposer, userTier, isLoading, onUpgrade, onInfill, brandingLabel, brandingLink, }: ScoreCanvasProps): import("react/jsx-runtime").JSX.Element;
49
+ export {};
@@ -0,0 +1,19 @@
1
+ import { default as React } from 'react';
2
+ interface ScoreInfoDialogProps {
3
+ open: boolean;
4
+ onClose: () => void;
5
+ title: string;
6
+ subtitle: string;
7
+ composer: string;
8
+ lyricist: string;
9
+ copyright: string;
10
+ onSave: (info: {
11
+ title: string;
12
+ subtitle: string;
13
+ composer: string;
14
+ lyricist: string;
15
+ copyright: string;
16
+ }) => void;
17
+ }
18
+ export declare const ScoreInfoDialog: React.FC<ScoreInfoDialogProps>;
19
+ export {};
@@ -0,0 +1,9 @@
1
+ import { LayoutConfig } from '../../layouts';
2
+ interface ScoreLayoutDialogProps {
3
+ open: boolean;
4
+ onClose: () => void;
5
+ config: LayoutConfig;
6
+ onSave: (newConfig: LayoutConfig) => void;
7
+ }
8
+ export declare function ScoreLayoutDialog({ open, onClose, config, onSave }: ScoreLayoutDialogProps): import("react/jsx-runtime").JSX.Element;
9
+ export {};
@@ -0,0 +1,11 @@
1
+ import { Duration } from '../../models/types';
2
+ interface TempoDialogProps {
3
+ open: boolean;
4
+ onClose: () => void;
5
+ onSave: (bpm: number, duration: Duration, isDotted: boolean) => void;
6
+ currentBpm: number;
7
+ currentDuration: Duration;
8
+ currentIsDotted: boolean;
9
+ }
10
+ export declare function TempoDialog({ open, onClose, onSave, currentBpm, currentDuration, currentIsDotted, }: TempoDialogProps): import("react/jsx-runtime").JSX.Element;
11
+ export {};
@@ -0,0 +1,10 @@
1
+ interface TextDialogProps {
2
+ open: boolean;
3
+ onClose: () => void;
4
+ onSave: (text: string) => void;
5
+ title: string;
6
+ label: string;
7
+ defaultValue?: string;
8
+ }
9
+ export declare function TextDialog({ open, onClose, onSave, title, label, defaultValue, }: TextDialogProps): import("react/jsx-runtime").JSX.Element;
10
+ export {};
@@ -0,0 +1,9 @@
1
+ import { TimeSignature } from '../../models/types';
2
+ interface TimeSignatureDialogProps {
3
+ open: boolean;
4
+ onClose: () => void;
5
+ onSave: (timeSignature: TimeSignature) => void;
6
+ currentTimeSignature?: TimeSignature;
7
+ }
8
+ export declare function TimeSignatureDialog({ open, onClose, onSave, currentTimeSignature, }: TimeSignatureDialogProps): import("react/jsx-runtime").JSX.Element;
9
+ export {};
@@ -0,0 +1,9 @@
1
+ interface TransposeDialogProps {
2
+ open: boolean;
3
+ onClose: () => void;
4
+ onTranspose: (semitones: number) => void;
5
+ currentKeyFifths: number;
6
+ noteNameMode: 'none' | 'alphabetical' | 'solfege';
7
+ }
8
+ export declare function TransposeDialog({ open, onClose, onTranspose, currentKeyFifths, noteNameMode, }: TransposeDialogProps): import("react/jsx-runtime").JSX.Element;
9
+ export {};