Skip to content

Commit e1c6d44

Browse files
committed
feat(renderer): add quality name as CSS part; tune cursive maj7 triangle position
The chord-quality span now carries the quality key as a second part value (e.g. part="chord-quality maj7"), making each quality independently targetable in CSS with [part~="maj7"] without touching the preset HTML. Two CSS variables in [data-typeface="cursive"] control the triangle's vertical alignment and left margin; they default to browser-native superscript behaviour so sans and serif are unaffected.
1 parent 18e2375 commit e1c6d44

3 files changed

Lines changed: 14 additions & 3 deletions

File tree

packages/grigson/src/element.test.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -126,7 +126,7 @@ describe('GrigsonChart', () => {
126126
expect(shadowRoot.querySelector('[part~="barline"]')).not.toBeNull();
127127
expect(shadowRoot.querySelector('[part="chord"]')).not.toBeNull();
128128
expect(shadowRoot.querySelector('[part="chord-root"]')).not.toBeNull();
129-
expect(shadowRoot.querySelector('[part="chord-quality"]')).not.toBeNull();
129+
expect(shadowRoot.querySelector('[part~="chord-quality"]')).not.toBeNull();
130130
});
131131

132132
it('renders front matter with part attributes', async () => {
@@ -543,7 +543,7 @@ describe('GrigsonHtmlRenderer', () => {
543543
expect(result.querySelector('[part~="barline"]')).not.toBeNull();
544544
expect(result.querySelector('[part="chord"]')).not.toBeNull();
545545
expect(result.querySelector('[part="chord-root"]')).not.toBeNull();
546-
expect(result.querySelector('[part="chord-quality"]')).not.toBeNull();
546+
expect(result.querySelector('[part~="chord-quality"]')).not.toBeNull();
547547
});
548548

549549
it('renderChart() includes frontmatter parts when the song has front matter', () => {

packages/grigson/src/renderers/html.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -448,7 +448,7 @@ function renderChordInner(
448448
const rawQuality = preset[chord.quality as keyof NotationPreset] ?? '';
449449
const qualitySymbol = rawQuality ? wrapQualityAccidentals(rawQuality, mode) : '';
450450
const qualityHtml = qualitySymbol
451-
? `<span part="chord-quality" aria-hidden="true">${qualitySymbol}</span>`
451+
? `<span part="chord-quality ${chord.quality}" aria-hidden="true">${qualitySymbol}</span>`
452452
: '';
453453
return rootHtml + qualityHtml;
454454
}

packages/grigson/src/renderers/renderer-css.ts

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,8 @@ export function getRendererStyles(typeface: string = 'sans'): string {
7373
--grigson-barline-font-size: 2em;
7474
--grigson-barline-glyph-offset: 0.23em;
7575
--grigson-chord-offset: 0.1em;
76+
--grigson-maj7-triangle-valign: 0.7em;
77+
--grigson-maj7-triangle-margin: 0.15em;
7678
}
7779
7880
[data-typeface="serif"] {
@@ -221,6 +223,15 @@ export function getRendererStyles(typeface: string = 'sans'): string {
221223
margin-right: 0.05em;
222224
}
223225
226+
[part~="maj7"] sup {
227+
vertical-align: var(--grigson-maj7-triangle-valign, super);
228+
line-height: 0;
229+
}
230+
231+
[part~="maj7"] {
232+
margin-left: var(--grigson-maj7-triangle-margin, 0em);
233+
}
234+
224235
[part="quality-accidental"][data-glyph="unicode"] {
225236
font-size: 1em;
226237
vertical-align: 0.15em;

0 commit comments

Comments
 (0)