ReadOnlyInitialProps builds the initialTargets set and the renderInitialSlot function from a contract's frozen manifest plus its stored initials, and returns {} when there are no required sections so callers can spread it unconditionally. Slots use print:break-inside-avoid so an initial never splits across a page break.
Also called: initials on the PDF · signed waiver copy · initials in the printout
- 1Callers write `<ContractMarkdown body={body} {...readOnlyInitialProps(required, initials)} />`.
- 2Each slot renders the stored PNG in a bordered box behind an 'Initialed:' label, or an em dash when absent.
- 3The counter-sign modal overrides the label and missing text to flag gaps in the breach colour.
- 4Because the slots live inside #contract-print, they land in the PDF.
The helper exists to stop the four render surfaces drifting: 'On an executed contract, each numbered waiver section's "Client Initials: ___" line must show the customer's *drawn* initials (captured at signing), not the blank template placeholder… this helper builds both from the frozen `required_sections` manifest + stored `section_initials`, so every place that renders an executed contract stays consistent.'
- Executed waivers printing with empty placeholder lines
- Four render paths drifting apart over time
See it on your own jobs
Twenty minutes, your numbers, no slide deck. We’ll build one of your real buildings in front of you and send you the estimate link at the end — yours to keep either way.
or keep browsing features →