/** * How this author's markdown becomes records: the studio-local conversion * settings (lib/publisher/conversion). Rendered above the file list on * both write surfaces, since both parse files the same way. * * There is no Save button — nothing here goes to the network. A change * writes to localStorage and re-parses the already-picked files, so the * plan preview below updates as the author reads. */ import { SCENE_BREAK_CHOICES, STRATEGY_CHOICES, VERSE_CHOICES, type ConversionSettings, } from '#/lib/publisher/conversion' export function TypesettingPanel({ settings, onChange, disabled, ruleStrategyActive, }: { settings: ConversionSettings onChange(next: ConversionSettings): void disabled?: boolean /** * True when a picked file splits chapters on thematic breaks. Those * rules are consumed as chapter boundaries before the scene-break * setting ever sees them, so say so rather than appear to do nothing. */ ruleStrategyActive?: boolean }) { const set = (key: K, value: ConversionSettings[K]) => onChange({ ...settings, [key]: value }) const verseHint = VERSE_CHOICES.find((c) => c.id === settings.verse)?.hint const sceneHint = SCENE_BREAK_CHOICES.find((c) => c.id === settings.sceneBreak)?.hint return (

Typesetting

How your markdown is read. These stay in this browser — they shape the records the studio writes, not the book itself, and you can change them between releases.

Turning this on changes the text of every chapter you upload from now on. Chapters already published are left alone until you replace them.

The starting point for every file you pick. You can still override it per file below.

{verseHint &&

{verseHint}

} {sceneHint &&

{sceneHint}

} {ruleStrategyActive && (

A file is splitting chapters on its thematic breaks, so those rules become chapter boundaries and never reach this setting.

)}
) }