@pepperhorn/chordl-core 0.3.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.
- package/LICENSE +21 -0
- package/dist/audio/midi-export.d.ts +23 -0
- package/dist/audio/midi-export.js +155 -0
- package/dist/audio/midi-export.js.map +1 -0
- package/dist/chord-sheet/codec.d.ts +14 -0
- package/dist/chord-sheet/codec.js +119 -0
- package/dist/chord-sheet/codec.js.map +1 -0
- package/dist/chord-sheet/defaults.d.ts +13 -0
- package/dist/chord-sheet/defaults.js +48 -0
- package/dist/chord-sheet/defaults.js.map +1 -0
- package/dist/chord-sheet/index.d.ts +3 -0
- package/dist/chord-sheet/index.js +4 -0
- package/dist/chord-sheet/index.js.map +1 -0
- package/dist/chord-sheet/schema.d.ts +6 -0
- package/dist/chord-sheet/schema.js +17 -0
- package/dist/chord-sheet/schema.js.map +1 -0
- package/dist/config.d.ts +2 -0
- package/dist/config.js +15 -0
- package/dist/config.js.map +1 -0
- package/dist/engine/auto-fingering.d.ts +36 -0
- package/dist/engine/auto-fingering.js +344 -0
- package/dist/engine/auto-fingering.js.map +1 -0
- package/dist/engine/highlight-mapper.d.ts +3 -0
- package/dist/engine/highlight-mapper.js +46 -0
- package/dist/engine/highlight-mapper.js.map +1 -0
- package/dist/engine/keyboard-layout.d.ts +6 -0
- package/dist/engine/keyboard-layout.js +65 -0
- package/dist/engine/keyboard-layout.js.map +1 -0
- package/dist/engine/note-spelling.d.ts +54 -0
- package/dist/engine/note-spelling.js +103 -0
- package/dist/engine/note-spelling.js.map +1 -0
- package/dist/engine/scale-fingering.d.ts +21 -0
- package/dist/engine/scale-fingering.js +130 -0
- package/dist/engine/scale-fingering.js.map +1 -0
- package/dist/engine/staff-constants.d.ts +16 -0
- package/dist/engine/staff-constants.js +20 -0
- package/dist/engine/staff-constants.js.map +1 -0
- package/dist/engine/staff-glyphs.d.ts +17 -0
- package/dist/engine/staff-glyphs.js +59 -0
- package/dist/engine/staff-glyphs.js.map +1 -0
- package/dist/engine/staff-layout.d.ts +28 -0
- package/dist/engine/staff-layout.js +238 -0
- package/dist/engine/staff-layout.js.map +1 -0
- package/dist/engine/svg-constants.d.ts +19 -0
- package/dist/engine/svg-constants.js +40 -0
- package/dist/engine/svg-constants.js.map +1 -0
- package/dist/index.d.ts +42 -0
- package/dist/index.js +37 -0
- package/dist/index.js.map +1 -0
- package/dist/logging.d.ts +70 -0
- package/dist/logging.js +24 -0
- package/dist/logging.js.map +1 -0
- package/dist/parser/natural-language.d.ts +9 -0
- package/dist/parser/natural-language.js +406 -0
- package/dist/parser/natural-language.js.map +1 -0
- package/dist/parser/progression-parser.d.ts +16 -0
- package/dist/parser/progression-parser.js +97 -0
- package/dist/parser/progression-parser.js.map +1 -0
- package/dist/pipeline.d.ts +33 -0
- package/dist/pipeline.js +203 -0
- package/dist/pipeline.js.map +1 -0
- package/dist/progression/form-templates.d.ts +11 -0
- package/dist/progression/form-templates.js +105 -0
- package/dist/progression/form-templates.js.map +1 -0
- package/dist/progression/index.d.ts +5 -0
- package/dist/progression/index.js +4 -0
- package/dist/progression/index.js.map +1 -0
- package/dist/progression/progression-resolver.d.ts +29 -0
- package/dist/progression/progression-resolver.js +135 -0
- package/dist/progression/progression-resolver.js.map +1 -0
- package/dist/progression/roman-numeral.d.ts +14 -0
- package/dist/progression/roman-numeral.js +78 -0
- package/dist/progression/roman-numeral.js.map +1 -0
- package/dist/resolver/auto-layout.d.ts +20 -0
- package/dist/resolver/auto-layout.js +195 -0
- package/dist/resolver/auto-layout.js.map +1 -0
- package/dist/resolver/chord-resolver.d.ts +8 -0
- package/dist/resolver/chord-resolver.js +172 -0
- package/dist/resolver/chord-resolver.js.map +1 -0
- package/dist/resolver/scale-resolver.d.ts +9 -0
- package/dist/resolver/scale-resolver.js +45 -0
- package/dist/resolver/scale-resolver.js.map +1 -0
- package/dist/themes/boomwhacker.d.ts +2 -0
- package/dist/themes/boomwhacker.js +35 -0
- package/dist/themes/boomwhacker.js.map +1 -0
- package/dist/themes/crf.d.ts +19 -0
- package/dist/themes/crf.js +34 -0
- package/dist/themes/crf.js.map +1 -0
- package/dist/themes/index.d.ts +3 -0
- package/dist/themes/index.js +25 -0
- package/dist/themes/index.js.map +1 -0
- package/dist/themes/simple.d.ts +2 -0
- package/dist/themes/simple.js +13 -0
- package/dist/themes/simple.js.map +1 -0
- package/dist/theory/chord-tones.d.ts +56 -0
- package/dist/theory/chord-tones.js +215 -0
- package/dist/theory/chord-tones.js.map +1 -0
- package/dist/theory/degree-labels.d.ts +31 -0
- package/dist/theory/degree-labels.js +74 -0
- package/dist/theory/degree-labels.js.map +1 -0
- package/dist/types.d.ts +123 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/package.json +37 -0
package/dist/types.d.ts
ADDED
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
export type Format = "compact" | "exact";
|
|
2
|
+
/** Tailwind-inspired text size scale for annotations. */
|
|
3
|
+
export type TextSize = "base" | "lg" | "xl" | "2xl";
|
|
4
|
+
/** Note name display mode. */
|
|
5
|
+
export type NoteNameMode = "pitch-class" | "midi" | "degree" | "pitch-class+degree";
|
|
6
|
+
export type WhiteNote = "C" | "D" | "E" | "F" | "G" | "A" | "B";
|
|
7
|
+
export type NoteName = string;
|
|
8
|
+
export interface ColorTheme {
|
|
9
|
+
name: string;
|
|
10
|
+
whiteKey: (note: string, highlighted: boolean) => string;
|
|
11
|
+
blackKey: (note: string, highlighted: boolean) => string;
|
|
12
|
+
}
|
|
13
|
+
export interface ParsedChordRequest {
|
|
14
|
+
chordName: string;
|
|
15
|
+
inversion?: number;
|
|
16
|
+
/** When true, show all inversions side by side (root, 1st, 2nd, etc.) */
|
|
17
|
+
allInversions?: boolean;
|
|
18
|
+
startingNote?: string;
|
|
19
|
+
startingDegree?: number;
|
|
20
|
+
bassNote?: string;
|
|
21
|
+
bassDegree?: number;
|
|
22
|
+
spanFrom?: string;
|
|
23
|
+
spanTo?: string;
|
|
24
|
+
format?: Format;
|
|
25
|
+
styleHint?: string;
|
|
26
|
+
padding?: number;
|
|
27
|
+
/** Octave shift for the chord: -1 = "down an octave", +1 = "up an octave" */
|
|
28
|
+
chordOctaveShift?: number;
|
|
29
|
+
/** Octave shift for the bass note: +1 = "up an octave", -1 = "down an octave" */
|
|
30
|
+
bassOctaveShift?: number;
|
|
31
|
+
/** Show note names below highlighted keys. */
|
|
32
|
+
showNoteNames?: boolean;
|
|
33
|
+
/** Text size for note name labels. */
|
|
34
|
+
noteNameSize?: TextSize;
|
|
35
|
+
/** Note name display mode: pitch-class (default) or midi (with octave numbers). */
|
|
36
|
+
noteNameMode?: NoteNameMode;
|
|
37
|
+
/** Fingering values (aligned with chord notes). Numbers 1–5 plus extra symbols (0, -, x). Invalid entries become "?". */
|
|
38
|
+
fingering?: (number | string)[];
|
|
39
|
+
/** Auto-compute fingering when true (no explicit numbers given). */
|
|
40
|
+
autoFingering?: boolean;
|
|
41
|
+
/** Custom fingering labels (free-form strings like "A0", "G3"). */
|
|
42
|
+
customFingering?: string[];
|
|
43
|
+
/** Text size for fingering numbers. */
|
|
44
|
+
fingeringSize?: TextSize;
|
|
45
|
+
/** When true, input is a scale (not a chord). */
|
|
46
|
+
isScale?: boolean;
|
|
47
|
+
/** Full scale name for Tonal lookup, e.g. "D major", "C blues". */
|
|
48
|
+
scaleName?: string;
|
|
49
|
+
/** Melodic minor direction. */
|
|
50
|
+
scaleDirection?: "ascending" | "descending";
|
|
51
|
+
/** Number of octaves for scale display. */
|
|
52
|
+
scaleOctaves?: number;
|
|
53
|
+
/** Number of octaves for arpeggio (chord repeated across octaves). */
|
|
54
|
+
chordOctaves?: number;
|
|
55
|
+
/** Show chord/scale name as a heading above the keyboard. */
|
|
56
|
+
showHeading?: boolean;
|
|
57
|
+
/** Color theme name: "boomwhacker", "crf", "rainbow". */
|
|
58
|
+
colorTheme?: string;
|
|
59
|
+
/** Display scale (0–1+ range, e.g. 0.8 = 80%). */
|
|
60
|
+
scale?: number;
|
|
61
|
+
}
|
|
62
|
+
export interface KeyDescriptor {
|
|
63
|
+
note: string;
|
|
64
|
+
/** Relative octave (0-based, increments each time C is crossed) */
|
|
65
|
+
octave: number;
|
|
66
|
+
isBlack: boolean;
|
|
67
|
+
x: number;
|
|
68
|
+
y: number;
|
|
69
|
+
width: number;
|
|
70
|
+
height: number;
|
|
71
|
+
}
|
|
72
|
+
export interface HandBracket {
|
|
73
|
+
label: string;
|
|
74
|
+
/** Indices into the keys array for this hand's notes */
|
|
75
|
+
keyIndices: number[];
|
|
76
|
+
}
|
|
77
|
+
export type DisplayMode = "keyboard" | "staff" | "both";
|
|
78
|
+
export interface DisplayDefaults {
|
|
79
|
+
display?: DisplayMode;
|
|
80
|
+
format?: Format;
|
|
81
|
+
theme?: ColorTheme | string;
|
|
82
|
+
highlightColor?: string;
|
|
83
|
+
padding?: number;
|
|
84
|
+
scale?: number;
|
|
85
|
+
glyphs?: "bravura" | "petaluma";
|
|
86
|
+
showNoteNames?: boolean;
|
|
87
|
+
noteNameSize?: TextSize;
|
|
88
|
+
noteNameMode?: NoteNameMode;
|
|
89
|
+
showFingering?: boolean;
|
|
90
|
+
fingeringSize?: TextSize;
|
|
91
|
+
}
|
|
92
|
+
export interface ChordData {
|
|
93
|
+
/** NL string — source of truth for chord resolution. */
|
|
94
|
+
chord: string;
|
|
95
|
+
/** Display override for the chord symbol heading. */
|
|
96
|
+
chordHeading?: string;
|
|
97
|
+
/** Text below fingering, inside the chord's bounding box. */
|
|
98
|
+
annotationText?: string;
|
|
99
|
+
/** Per-chord display mode override. */
|
|
100
|
+
display?: DisplayMode;
|
|
101
|
+
format?: Format;
|
|
102
|
+
theme?: ColorTheme | string;
|
|
103
|
+
highlightColor?: string;
|
|
104
|
+
padding?: number;
|
|
105
|
+
}
|
|
106
|
+
export interface SectionData {
|
|
107
|
+
/** Section letter ID (auto-assigned "A","B",... if omitted). */
|
|
108
|
+
id?: string;
|
|
109
|
+
heading?: string;
|
|
110
|
+
subheading?: string;
|
|
111
|
+
textAbove?: string;
|
|
112
|
+
textBelow?: string;
|
|
113
|
+
defaults?: DisplayDefaults;
|
|
114
|
+
chords: ChordData[];
|
|
115
|
+
}
|
|
116
|
+
export interface ChordSheetData {
|
|
117
|
+
/** Schema version. */
|
|
118
|
+
v: string;
|
|
119
|
+
heading?: string;
|
|
120
|
+
subheading?: string;
|
|
121
|
+
defaults?: DisplayDefaults;
|
|
122
|
+
sections: SectionData[];
|
|
123
|
+
}
|
package/dist/types.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
|
package/package.json
ADDED
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@pepperhorn/chordl-core",
|
|
3
|
+
"version": "0.3.0",
|
|
4
|
+
"description": "Pure TypeScript chord parsing, resolving, layout, and export engine",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "./dist/index.cjs",
|
|
7
|
+
"module": "./dist/index.js",
|
|
8
|
+
"types": "./dist/index.d.ts",
|
|
9
|
+
"exports": {
|
|
10
|
+
".": {
|
|
11
|
+
"types": "./dist/index.d.ts",
|
|
12
|
+
"import": "./dist/index.js",
|
|
13
|
+
"require": "./dist/index.cjs"
|
|
14
|
+
}
|
|
15
|
+
},
|
|
16
|
+
"files": [
|
|
17
|
+
"dist"
|
|
18
|
+
],
|
|
19
|
+
"dependencies": {
|
|
20
|
+
"tonal": "^6.3.0",
|
|
21
|
+
"@pepperhorn/chordl-voicings": "0.3.0"
|
|
22
|
+
},
|
|
23
|
+
"devDependencies": {
|
|
24
|
+
"typescript": "^5.7.0",
|
|
25
|
+
"vitest": "^4.1.1"
|
|
26
|
+
},
|
|
27
|
+
"publishConfig": {
|
|
28
|
+
"access": "public"
|
|
29
|
+
},
|
|
30
|
+
"license": "MIT",
|
|
31
|
+
"scripts": {
|
|
32
|
+
"build": "tsc",
|
|
33
|
+
"lint": "tsc --noEmit",
|
|
34
|
+
"test": "vitest",
|
|
35
|
+
"test:run": "vitest run"
|
|
36
|
+
}
|
|
37
|
+
}
|