pepperscore 0.4.0 → 0.5.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/CHANGELOG.md +46 -2
- package/README.md +198 -12
- package/dist/PdfOverlay-BmBGsMkr.js +249 -0
- package/dist/PdfOverlay-BmBGsMkr.js.map +1 -0
- package/dist/THIRD_PARTY_NOTICES.txt +1234 -1
- package/dist/assets/engrave.worker-D334KQnx.js +5 -0
- package/dist/assets/{import.worker-Rop-z7az.js → import.worker-BAr_ZqtQ.js} +2 -2
- package/dist/assets/verovio.worker-C8LY1lw3.js +7 -0
- package/dist/components/DrawerControls.d.ts +7 -0
- package/dist/components/PdfOverlay.d.ts +19 -0
- package/dist/components/PepperScore.d.ts +6 -1
- package/dist/components/PitchColourTile.d.ts +4 -0
- package/dist/components/SkinBar.d.ts +12 -0
- package/dist/engrave-DpVrifuu.js +32 -0
- package/dist/engrave-DpVrifuu.js.map +1 -0
- package/dist/export-BFhuMW8H.js +320 -0
- package/dist/export-BFhuMW8H.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.js +3567 -2578
- package/dist/index.js.map +1 -1
- package/dist/lib/asset-fonts.d.ts +4 -0
- package/dist/lib/bar-items.d.ts +31 -0
- package/dist/lib/chrome.d.ts +6 -4
- package/dist/lib/file-state.d.ts +1 -0
- package/dist/lib/header-controls.d.ts +2 -2
- package/dist/lib/notation/mei-tab.d.ts +8 -1
- package/dist/lib/notation/mei-view.d.ts +2 -0
- package/dist/lib/notation/musicxml-octave-clef.d.ts +5 -0
- package/dist/lib/pdf/annotations.d.ts +12 -0
- package/dist/lib/pdf/compose.d.ts +8 -0
- package/dist/lib/pdf/engrave.d.ts +29 -0
- package/dist/lib/pdf/export.d.ts +19 -0
- package/dist/lib/pdf/fit.d.ts +2 -0
- package/dist/lib/pdf/fonts.d.ts +3 -0
- package/dist/lib/pdf/normalize.d.ts +7 -0
- package/dist/lib/pdf/paper.d.ts +32 -0
- package/dist/lib/pitch-colours.d.ts +16 -0
- package/dist/lib/prefs.d.ts +7 -2
- package/dist/lib/render.d.ts +52 -0
- package/dist/lib/score.d.ts +6 -0
- package/dist/lib/skin.d.ts +25 -0
- package/dist/lib/tab/string-instruments.d.ts +65 -0
- package/dist/lib/tab/strings/charts.d.ts +29 -0
- package/dist/lib/tab/strings/phrase.d.ts +14 -0
- package/dist/lib/tab/strings/solver.d.ts +29 -0
- package/dist/lib/tab/strings/svg.d.ts +3 -0
- package/dist/lib/tab/tab-parts.d.ts +2 -5
- package/dist/lib/verovio-protocol.d.ts +1 -1
- package/dist/lib/verovio-runtime.d.ts +12 -0
- package/dist/style.css +1 -1
- package/package.json +5 -2
- package/dist/assets/verovio.worker-DQm-ikdG.js +0 -7
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PdfOverlay-BmBGsMkr.js","names":["verovioBaseline","clampBarsPerLine","planStaves","ANNOTATION_SCALE","prepareSnapshot","saved","score","hidden","hiddenPartIds","info","channel","planned","part","PdfOverlay","bars","setBars","useState","busy","setBusy","barsDraft","setBarsDraft","commitBars","number","next","fit","setFit","error","setError","panel","useRef","measure","save","snapshotRef","snapshot","closeRef","onClose","files","verovioBaseUrl","previous","owner","active","onKeyDown","event","items","first","last","controller","request","visible","layout","annotationLayout","metadata","result","engravePages","reduced","line","paper","failure","font","revision","download","maxBars","frame","blob","exportScore","url","anchor","onPaper"],"sources":["../src/components/PdfOverlay.tsx"],"sourcesContent":["import { useEffect, useRef, useState } from 'react';\nimport type { ExportRequest } from '../lib/pdf/export';\nimport type { Score } from '../lib/score';\nimport type { PitchColourPaint } from '../lib/pitch-colours';\nimport { verovioBaseline } from '../lib/verovio-runtime';\nimport { annotationLayout, planStaves } from '../lib/render';\nimport { ANNOTATION_SCALE, BARS_PER_LINE_MAX, clampBarsPerLine, type Prefs } from '../lib/prefs';\n\ntype Snapshot = Omit<ExportRequest, 'options'>;\nexport type PdfCapture = { score: Score; prefs: Prefs; hiddenPartIds: string[]; channel: number; pitchColours?: PitchColourPaint };\nasync function prepareSnapshot({ score, prefs: saved, hiddenPartIds, channel, pitchColours }: PdfCapture): Promise<Snapshot> {\n if (!score.document) throw new Error('This score has no engraving document.');\n const hidden = new Set(hiddenPartIds);\n const info = await verovioBaseline(score.document, channel);\n const planned = planStaves(info, score, hidden, { view: saved.tabView, tuning: saved.tabTuning, capo: saved.capo });\n return { score, input: { data: score.document.engravingText, view: { breakEvery: 0, hiddenStaves: planned.hiddenStaves,\n spelling: planned.spelling, chordSymbols: saved.chordSymbols, ...(planned.tabPlan.spec ? { tab: planned.tabPlan.spec } : {}) } },\n visiblePartIds: planned.visibleParts.map(part => part.id), tabAliases: planned.tabAlias, tabStaves: planned.tabStaves, pitchColours,\n annotations: { showNames: saved.names, showCounts: saved.counts, subdivisions: saved.subdivisions,\n showChordSymbols: saved.chordSymbols, inferChordSymbols: saved.inferChordSymbols,\n scale: { names: ANNOTATION_SCALE[saved.namesSize], chordSymbols: ANNOTATION_SCALE[saved.chordSymbolsSize], counts: ANNOTATION_SCALE[saved.countsSize], subdivisions: ANNOTATION_SCALE[saved.subdivisionsSize] } } };\n}\nexport default function PdfOverlay({ paper, onPaper, snapshot, revision, font, verovioBaseUrl, onClose }: {\n paper: Prefs['pdfPaper']; onPaper: (paper: Prefs['pdfPaper']) => void;\n snapshot: () => PdfCapture; revision: unknown; font: string; verovioBaseUrl?: string; onClose: () => void;\n}) {\n const [bars, setBars] = useState(4), [busy, setBusy] = useState(false);\n const [barsDraft, setBarsDraft] = useState('4');\n const commitBars = () => {\n const number = Number(barsDraft);\n const next = barsDraft.trim() && Number.isFinite(number) ? clampBarsPerLine(number) : bars;\n setBars(next); setBarsDraft(String(next));\n return next;\n };\n const [fit, setFit] = useState('Checking fit…'), [error, setError] = useState('');\n const panel = useRef<HTMLElement>(null), measure = useRef<AbortController | null>(null), save = useRef<AbortController | null>(null);\n const snapshotRef = useRef(snapshot); snapshotRef.current = snapshot;\n const closeRef = useRef(onClose); closeRef.current = onClose;\n const files = verovioBaseUrl ? { module: new URL('verovio-module.mjs', new URL(verovioBaseUrl.replace(/\\/?$/, '/'), document.baseURI)).href,\n toolkit: new URL('verovio.mjs', new URL(verovioBaseUrl.replace(/\\/?$/, '/'), document.baseURI)).href } : undefined;\n useEffect(() => {\n const previous = document.activeElement as HTMLElement | null;\n panel.current?.querySelector<HTMLElement>('select')?.focus({ preventScroll: true });\n const owner = panel.current?.closest('.pepperscore');\n return () => {\n measure.current?.abort(); save.current?.abort();\n const active = document.activeElement;\n if (previous?.isConnected && (active === document.body || (active && owner?.contains(active)))) previous.focus({ preventScroll: true });\n };\n }, []);\n const onKeyDown = (event: React.KeyboardEvent<HTMLElement>) => {\n if (event.key === 'Escape') { event.preventDefault(); event.stopPropagation(); onClose(); return; }\n if (event.key !== 'Tab') return;\n const items = Array.from(panel.current?.querySelectorAll<HTMLElement>('button:not(:disabled),select:not(:disabled),input:not(:disabled),a[href]') ?? []);\n const first = items[0], last = items.at(-1);\n if (event.shiftKey && document.activeElement === first) { event.preventDefault(); last?.focus(); }\n else if (!event.shiftKey && document.activeElement === last) { event.preventDefault(); first?.focus(); }\n };\n useEffect(() => {\n if (busy) return;\n const controller = new AbortController(); measure.current = controller;\n setFit('Checking fit…');\n void (async () => {\n try {\n const request = await prepareSnapshot(snapshotRef.current());\n controller.signal.throwIfAborted();\n const { engravePages } = await import('../lib/pdf/engrave');\n const visible = request.score.parts.filter(part => !request.visiblePartIds || request.visiblePartIds.includes(part.id));\n const layout = annotationLayout(visible, request.annotations ?? {});\n const metadata = [request.score.title, request.score.subtitle, request.score.composer, ...(request.score.credits ?? [])].filter(Boolean);\n const result = await engravePages({ ...request.input, view: { breakEvery: 0, hiddenStaves: [], chordSymbols: false, ...request.input.view, harmSize: layout.harmSize } },\n { paper, maxBars: bars, font, files, spacingStaff: layout.spacingStaff, annotationRoom: layout.laneHeight, headingMm: metadata.length ? 8 + metadata.length * 4 : 0 }, controller.signal);\n if (controller.signal.aborted) return;\n const reduced = result.lines.filter(line => line.count < bars).length;\n setFit(`${reduced} ${reduced === 1 ? 'line will' : 'lines will'} have fewer than ${bars} bars on ${paper.toUpperCase()}.${result.shrunk ? ' A tall system is reduced to fit the page.' : ''}`);\n } catch (failure) { if (!controller.signal.aborted) setFit(`Fit check unavailable: ${failure instanceof Error ? failure.message : String(failure)}. You can still Save.`); }\n })();\n return () => controller.abort();\n }, [paper, bars, font, verovioBaseUrl, revision, busy]);\n const download = async () => {\n const maxBars = commitBars();\n panel.current?.querySelector<HTMLButtonElement>('.pdf-cancel')?.focus({ preventScroll: true });\n measure.current?.abort();\n const controller = new AbortController(); save.current = controller;\n setBusy(true); setError('');\n try {\n // frameElement belongs to the parent's realm; instanceof against this window's\n // HTMLIFrameElement is false even for a same-origin embed.\n const frame = window.frameElement as HTMLIFrameElement | null;\n if (frame?.hasAttribute('sandbox') && !frame.sandbox.contains('allow-downloads')) throw new Error('Downloads are blocked by this embed. Open the score outside the embed or enable downloads.');\n const request = await prepareSnapshot(snapshotRef.current());\n controller.signal.throwIfAborted();\n const { exportScore } = await import('../lib/pdf/export');\n const blob = await exportScore({ ...request, options: { paper, maxBars, font, files } }, controller.signal);\n controller.signal.throwIfAborted();\n const url = URL.createObjectURL(blob), anchor = document.createElement('a');\n anchor.href = url;\n anchor.download = `${request.score.title?.normalize('NFKD').replace(/[\\u0300-\\u036f]/g, '').toLowerCase().replace(/[^a-z0-9]+/g, '-').replace(/^-|-$/g, '') || 'score'}.pdf`;\n document.body.append(anchor);\n try { anchor.click(); } finally { anchor.remove(); window.setTimeout(() => URL.revokeObjectURL(url), 60000); }\n closeRef.current();\n } catch (failure) { if (!controller.signal.aborted) setError(failure instanceof Error ? failure.message : String(failure)); }\n finally { if (!controller.signal.aborted) setBusy(false); }\n };\n return <div className=\"pdf-backdrop\" onMouseDown={event => { if (event.target === event.currentTarget) onClose(); }}>\n <section ref={panel} className=\"pdf-panel\" role=\"dialog\" aria-modal=\"true\" aria-label=\"Export PDF\" aria-busy={busy} onKeyDown={onKeyDown}>\n <h2>Export PDF</h2>\n <label className=\"pdf-field\">Paper size<select className=\"pdf-paper\" value={paper} disabled={busy} onChange={event => onPaper(event.target.value as Prefs['pdfPaper'])}>\n <option value=\"a4\">A4</option><option value=\"a3\">A3</option><option value=\"letter\">Letter</option><option value=\"legal\">Legal</option>\n </select></label>\n <label className=\"pdf-field\">Bars per line<input className=\"pdf-bars\" type=\"number\" min={1} max={BARS_PER_LINE_MAX} value={barsDraft} disabled={busy} onChange={event => setBarsDraft(event.target.value)} onBlur={commitBars}/></label>\n <p className=\"pdf-fit\" role=\"status\">{busy ? 'Building PDF…' : fit}</p>\n {error && <p className=\"pdf-error\" role=\"alert\">{error}</p>}\n <div className=\"pdf-actions\"><button type=\"button\" className=\"pdf-cancel\" onClick={onClose}>Cancel</button>{error && <button type=\"button\" className=\"pdf-reload\" onClick={() => window.history.go(0)}>Reload page</button>}<button type=\"button\" className=\"pdf-save\" disabled={busy} onClick={() => void download()}>Save</button></div>\n </section>\n </div>;\n}\n"],"mappings":"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"}
|