/** * Layout — every dimension the board uses, and the rules that bind them. * * Rules (enforced by render.ts; see LAYOUT.md for the prose): * R1 Nothing draws outside its box. Text that does not fit is cut with an ellipsis, never overflowed. * R2 A clip's width is measured from its content; a column is as wide as its widest clip. * R3 Columns are handoffs. A clip sits in the column of the last handoff it takes. * R4 Tracks have one height. Two clips in one track-column stack with a fixed offset, never overlap. * R5 Marks sit in one row above the clip's right edge; the pin is last and outermost. * R6 Notes never sit on the board. Pins on the board, notes in the gutter, in pin order. * R7 Wires leave from the right port, arrive at the left port; loops pass underneath; same-column handoffs are vertical. * R8 Gutters, margins and paddings come from this file, never from the renderer. */ export declare const T: { readonly pageMargin: 40; readonly labelColumn: 210; readonly boardInset: 14; readonly columnGutter: 36; readonly columnMinWidth: 120; readonly headerHeight: 40; readonly trackHeight: 64; readonly trackGap: 8; readonly trackNameX: 24; readonly trackGlyph: 16; readonly clipPadX: 12; readonly clipPadTop: 10; readonly clipPadTopSlim: 17; readonly clipHeight: 44; readonly clipHeightSlim: 30; readonly clipRadius: 3; readonly clipStackDx: 14; readonly clipStackDy: 6; readonly compositeShadow: 4; readonly triggerGlyph: 12; readonly kindGlyph: 14; readonly glyphGap: 4; readonly portRadius: 3; readonly notchDepth: 7; readonly notchDepthSingle: 9; readonly gateReserve: 10; readonly markSize: 14; readonly markStep: 17; readonly markRise: 9; readonly pinRadius: 7; readonly titleSize: 12.5; readonly metaSize: 10.5; readonly artifactSize: 10.5; readonly noteSize: 10.5; readonly trackNameSize: 12.5; readonly trackMetaSize: 11; readonly metaMaxChars: 44; readonly em: 0.56; readonly wireLoopDrop: 40; readonly gutterTop: 28; readonly gutterLine: 18; readonly gutterWrap: 120; readonly titleWeight: 600; readonly metaWeight: 400; }; /** Rendered width of a string at a font size and weight, from the embedded font's own metrics. */ export declare function textWidth(s: string, size: number, weight?: number): number; /** Cut a string so it fits in `px` at `size`, with an ellipsis, breaking on a word if one is near. (R1) */ export declare function fit(s: string, px: number, size: number, weight?: number): string; /** Wrap a note into lines of at most `chars`. (R6) */ export declare function wrap(s: string, chars?: 120): string[];