@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,10 @@
1
+ interface VirtualKeyboardProps {
2
+ activeNotes?: number[];
3
+ playedNotes?: number[];
4
+ onNoteClick?: (midi: number) => void;
5
+ minMidi?: number;
6
+ maxMidi?: number;
7
+ }
8
+ export declare function VirtualKeyboard({ activeNotes, playedNotes, onNoteClick, minMidi, // A0
9
+ maxMidi, }: VirtualKeyboardProps): import("react/jsx-runtime").JSX.Element;
10
+ export {};
@@ -0,0 +1,10 @@
1
+ import { Score } from '../../models/Score';
2
+ /**
3
+ * Basic MusicXML Exporter
4
+ */
5
+ export declare class MusicXMLExporter {
6
+ static export(score: Score): string;
7
+ private static noteToXML;
8
+ private static getDurationDivisions;
9
+ private static getXMLNoteType;
10
+ }
@@ -0,0 +1,14 @@
1
+ export interface HistoryState<T> {
2
+ past: T[];
3
+ present: T;
4
+ future: T[];
5
+ }
6
+ export declare function useHistory<T>(initialState: T | (() => T)): {
7
+ state: T;
8
+ set: (newPresent: T) => void;
9
+ undo: () => void;
10
+ redo: () => void;
11
+ canUndo: boolean;
12
+ canRedo: boolean;
13
+ reset: (newPresent: T) => void;
14
+ };
@@ -0,0 +1,24 @@
1
+ export { ScoreCanvas } from './components/ScoreCanvas';
2
+ export type { NoteSelection } from './components/ScoreCanvas';
3
+ export { Score } from '../models/Score';
4
+ export type { ScoreJSON } from '../models/Score';
5
+ export { Part } from '../models/Part';
6
+ export type { PartJSON } from '../models/Part';
7
+ export { Staff } from '../models/Staff';
8
+ export type { StaffJSON } from '../models/Staff';
9
+ export { Measure } from '../models/Measure';
10
+ export type { MeasureJSON } from '../models/Measure';
11
+ export { Note } from '../models/Note';
12
+ export type { NoteJSON } from '../models/Note';
13
+ export { Pitch } from '../models/Pitch';
14
+ export type { Instrument, InstrumentType, InstrumentPreset } from '../models/Instrument';
15
+ export { PRESET_INSTRUMENTS, getInstrumentByProgram } from '../models/Instrument';
16
+ export * from '../models/types';
17
+ export { calculateScoreLayout, DEFAULT_LAYOUT_CONFIG } from '../layouts';
18
+ export type { LayoutConfig } from '../layouts/LayoutConfig';
19
+ export { ScoreRenderer } from '../rendering/ScoreRenderer';
20
+ export { MusicXMLParser } from '../importers/MusicXMLParser';
21
+ export { MusicXMLExporter } from './exporters/MusicXMLExporter';
22
+ export { HarmonyService } from './services/HarmonyService';
23
+ export { VocalSynthesisService } from './services/VocalSynthesisService';
24
+ export { AudioPlayer } from '../audio/AudioPlayer';
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,10 @@
1
+ import { Score } from '../../models/Score';
2
+ export declare class HarmonyService {
3
+ private static model;
4
+ private static MODEL_URL;
5
+ private static init;
6
+ /**
7
+ * Infills harmony for a range of measures in a 4-part SATB score.
8
+ */
9
+ static infill(score: Score, startMeasure: number, endMeasure: number): Promise<Score>;
10
+ }
@@ -0,0 +1,13 @@
1
+ import { Score } from '../../models/Score';
2
+ import { NoteSelection } from '../components/ScoreCanvas';
3
+ /**
4
+ * Service to generate a vocal guide track using Web Speech API synthesis
5
+ * synchronized with the melody.
6
+ */
7
+ export declare class VocalSynthesisService {
8
+ private static synthesis;
9
+ private static isSpeaking;
10
+ private static currentUtterances;
11
+ static play(score: Score, selection: NoteSelection[], onComplete?: () => void): Promise<void>;
12
+ static stop(): void;
13
+ }
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Converts the first page of a PDF file to a PNG Blob.
3
+ * Higher scale is used to improve OCR quality.
4
+ */
5
+ export declare function convertPdfToPng(file: File): Promise<Blob>;
package/package.json ADDED
@@ -0,0 +1,63 @@
1
+ {
2
+ "name": "@scorelabs/viewer",
3
+ "version": "1.0.1",
4
+ "description": "Canvas-based music score viewer",
5
+ "type": "module",
6
+ "main": "./dist/score-viewer.umd.cjs",
7
+ "module": "./dist/score-viewer.js",
8
+ "types": "./dist/index.d.ts",
9
+ "exports": {
10
+ ".": {
11
+ "import": "./dist/score-viewer.js",
12
+ "require": "./dist/score-viewer.umd.cjs",
13
+ "types": "./dist/index.d.ts"
14
+ }
15
+ },
16
+ "files": [
17
+ "dist"
18
+ ],
19
+ "scripts": {
20
+ "dev": "vite",
21
+ "build": "tsc && vite build",
22
+ "preview": "vite preview",
23
+ "lint": "eslint . --ext ts,tsx --report-unused-disable-directives --max-warnings 100",
24
+ "format": "prettier --write .",
25
+ "preversion": "npm run build && npm run lint",
26
+ "postversion": "git push && git push --tags",
27
+ "release": "npm version patch && npm publish --access public"
28
+ },
29
+ "devDependencies": {
30
+ "@testing-library/jest-dom": "^6.9.1",
31
+ "@testing-library/react": "^16.3.2",
32
+ "@testing-library/user-event": "^14.6.1",
33
+ "@types/node": "^25.1.0",
34
+ "@types/react": "^19.2.10",
35
+ "@types/react-dom": "^19.2.3",
36
+ "@typescript-eslint/eslint-plugin": "^8.54.0",
37
+ "@typescript-eslint/parser": "^8.54.0",
38
+ "eslint": "^8.57.0",
39
+ "eslint-config-prettier": "^10.1.8",
40
+ "eslint-plugin-prettier": "^5.5.5",
41
+ "eslint-plugin-react": "^7.37.5",
42
+ "eslint-plugin-react-hooks": "^7.0.1",
43
+ "jsdom": "^27.4.0",
44
+ "prettier": "^3.8.1",
45
+ "typescript": "^5.3.3",
46
+ "vite": "^5.0.12",
47
+ "vite-plugin-dts": "^4.5.4",
48
+ "vitest": "^4.0.18"
49
+ },
50
+ "dependencies": {
51
+ "@magenta/music": "^1.23.1",
52
+ "pdfjs-dist": "^4.10.38",
53
+ "tone": "^15.1.22"
54
+ },
55
+ "peerDependencies": {
56
+ "@emotion/react": "^11.14.0",
57
+ "@emotion/styled": "^11.14.1",
58
+ "@mui/icons-material": "^7.3.7",
59
+ "@mui/material": "^7.3.7",
60
+ "react": "^18.0.0 || ^19.0.0",
61
+ "react-dom": "^18.0.0 || ^19.0.0"
62
+ }
63
+ }