{"version":3,"sources":["../src/text.ts","../src/text/textGeometry.ts","../src/text/font.ts"],"sourcesContent":["// SCENA — text: lettering carved from an embedded font\n//\n// A sub-path entry point. `import from 'scena3d'` still gives you everything;\n// this exists so a bundler can see module boundaries, and so an import says\n// what part of the library it depends on.\n//\n// GENERATED from src/index.ts by scripts/entries.mjs — every statement below\n// is the root barrel's own, partitioned by source directory. `npm run\n// entries:check` fails if this file and the barrel disagree.\n\nexport {\n  buildTextGeometry,\n  measureText,\n  type TextOptions,\n  type TextGeometry,\n  type TextAlign,\n} from './text/textGeometry';\n","import { BufferAttribute, BufferGeometry } from 'three';\nimport { CAP, FONT, MISSING, type Glyph } from './font';\n\nexport type TextAlign = 'left' | 'center' | 'right';\n\nexport interface TextOptions {\n  /** Cap height in metres. Default 0.5. */\n  size?: number;\n  /** Stroke width as a fraction of cap height. Default 0.22 (bold, signage-weight). */\n  weight?: number;\n  /** Relief depth in metres (how far the letters stand off the board). Default size*0.12. */\n  depth?: number;\n  /** Extra gap between letters, in grid units. Default 0.6. */\n  tracking?: number;\n  /** Horizontal anchor. Default 'center'. */\n  align?: TextAlign;\n  /** Vertical placement: 'baseline' puts y=0 at the baseline; 'center' centres the cap band on y=0. Default 'center'. */\n  baseline?: 'baseline' | 'center';\n}\n\nexport interface TextGeometry {\n  geometry: BufferGeometry;\n  /** Total advance width in metres. */\n  width: number;\n  /** Cap height in metres. */\n  height: number;\n}\n\nfunction glyphFor(ch: string): Glyph {\n  return FONT[ch] ?? FONT[ch.toUpperCase()] ?? MISSING;\n}\n\n/** Total pen advance of a string in grid units (before scaling), for measuring. */\nfunction advanceUnits(text: string, tracking: number): number {\n  let w = 0;\n  for (let i = 0; i < text.length; i++) {\n    w += glyphFor(text[i]).advance + (i < text.length - 1 ? tracking : 0);\n  }\n  return w;\n}\n\n/**\n * Turn a string into a single carved-relief `BufferGeometry`. Each polyline\n * stroke of the vector font becomes a **solid, constant-width ribbon** with\n * mitred corners — the way a bold typeface is drawn — extruded into a shallow\n * slab (front face, side walls and a back face) and merged into one draw call.\n * Butt ends are extended by half a stroke so crossing strokes (the bar of an H,\n * the arms of an E) weld into a solid joint instead of cracking open.\n *\n * It's pure geometry built from the embedded font, so it renders the same in a\n * browser, a headless capture and a Node test — no textures, no font files, no\n * loaders. The result sits in the XY plane facing +Z, ready to lay onto a\n * board; origin follows `align` (default centred) and `baseline` (default the\n * cap band centred on y=0).\n */\nexport function buildTextGeometry(text: string, options: TextOptions = {}): TextGeometry {\n  const size = options.size ?? 0.5;\n  const weight = options.weight ?? 0.22;\n  const depth = options.depth ?? size * 0.12;\n  const tracking = options.tracking ?? 0.6;\n  const align = options.align ?? 'center';\n  const baseline = options.baseline ?? 'center';\n\n  const unit = size / CAP; // grid units → metres\n  const hw = (weight * size) / 2; // half stroke width in metres\n  const widthUnits = advanceUnits(text, tracking);\n  const width = widthUnits * unit;\n\n  const xShift = align === 'center' ? -width / 2 : align === 'right' ? -width : 0;\n  const yShift = baseline === 'center' ? -size / 2 : 0;\n\n  const pos: number[] = [];\n  const idx: number[] = [];\n  let base = 0;\n\n  /**\n   * One stroke → a mitred ribbon slab. Cross-section i contributes four\n   * vertices at base+i*4: 0 right-front, 1 left-front, 2 right-back, 3\n   * left-back (\"left\" is +perpendicular of the travel direction). All\n   * windings are CCW from outside, verified against +X travel.\n   */\n  const ribbon = (stroke: number[], gx: number): void => {\n    const n = stroke.length / 2;\n    if (n < 2) return;\n    // Points in metres, with butt ends extended by hw to weld joints.\n    const px = new Float64Array(n);\n    const py = new Float64Array(n);\n    for (let i = 0; i < n; i++) {\n      px[i] = stroke[i * 2] * unit + gx;\n      py[i] = stroke[i * 2 + 1] * unit + yShift;\n    }\n    const d0x = px[1] - px[0];\n    const d0y = py[1] - py[0];\n    const l0 = Math.hypot(d0x, d0y) || 1e-6;\n    px[0] -= (d0x / l0) * hw;\n    py[0] -= (d0y / l0) * hw;\n    const dmx = px[n - 1] - px[n - 2];\n    const dmy = py[n - 1] - py[n - 2];\n    const lm = Math.hypot(dmx, dmy) || 1e-6;\n    px[n - 1] += (dmx / lm) * hw;\n    py[n - 1] += (dmy / lm) * hw;\n\n    // Unit direction of each segment.\n    const dx = new Float64Array(n - 1);\n    const dy = new Float64Array(n - 1);\n    for (let i = 0; i < n - 1; i++) {\n      const ex = px[i + 1] - px[i];\n      const ey = py[i + 1] - py[i];\n      const l = Math.hypot(ex, ey) || 1e-6;\n      dx[i] = ex / l;\n      dy[i] = ey / l;\n    }\n\n    // Offset each vertex along its (mitred) normal; clamp the miter so sharp\n    // corners thicken instead of spiking.\n    for (let i = 0; i < n; i++) {\n      const s0 = i === 0 ? 0 : i - 1;\n      const s1 = i === n - 1 ? n - 2 : i;\n      let mx = -dy[s0] - dy[s1];\n      let my = dx[s0] + dx[s1];\n      let ml = Math.hypot(mx, my);\n      if (ml < 1e-6) {\n        mx = -dy[s1];\n        my = dx[s1];\n        ml = 1;\n      }\n      mx /= ml;\n      my /= ml;\n      const scale = hw / Math.max(0.35, mx * -dy[s1] + my * dx[s1]);\n      const lx = px[i] + mx * scale;\n      const ly = py[i] + my * scale;\n      const rx = px[i] - mx * scale;\n      const ry = py[i] - my * scale;\n      // 0 right-front, 1 left-front, 2 right-back, 3 left-back\n      pos.push(rx, ry, depth, lx, ly, depth, rx, ry, 0, lx, ly, 0);\n    }\n\n    const v = (i: number, k: number) => base + i * 4 + k;\n    for (let i = 0; i < n - 1; i++) {\n      const j = i + 1;\n      // front face (+Z)\n      idx.push(v(i, 0), v(j, 0), v(j, 1), v(i, 0), v(j, 1), v(i, 1));\n      // back face (−Z)\n      idx.push(v(i, 2), v(j, 3), v(j, 2), v(i, 2), v(i, 3), v(j, 3));\n      // right wall\n      idx.push(v(i, 0), v(i, 2), v(j, 2), v(i, 0), v(j, 2), v(j, 0));\n      // left wall\n      idx.push(v(i, 1), v(j, 3), v(i, 3), v(i, 1), v(j, 1), v(j, 3));\n    }\n    // end caps\n    const m = n - 1;\n    idx.push(v(0, 0), v(0, 1), v(0, 3), v(0, 0), v(0, 3), v(0, 2));\n    idx.push(v(m, 0), v(m, 2), v(m, 3), v(m, 0), v(m, 3), v(m, 1));\n    base += n * 4;\n  };\n\n  let penUnits = 0;\n  for (let i = 0; i < text.length; i++) {\n    const glyph = glyphFor(text[i]);\n    const gx = penUnits * unit + xShift;\n    for (const stroke of glyph.strokes) ribbon(stroke, gx);\n    penUnits += glyph.advance + tracking;\n  }\n\n  const geometry = new BufferGeometry();\n  geometry.setAttribute('position', new BufferAttribute(new Float32Array(pos), 3));\n  geometry.setIndex(idx);\n  geometry.computeVertexNormals();\n  geometry.computeBoundingBox();\n  geometry.computeBoundingSphere();\n  return { geometry, width, height: size };\n}\n\n/** Measure a string without building geometry (metres). */\nexport function measureText(text: string, options: TextOptions = {}): number {\n  const size = options.size ?? 0.5;\n  const tracking = options.tracking ?? 0.6;\n  return advanceUnits(text, tracking) * (size / CAP);\n}\n","/**\n * A compact single-stroke vector font — the kind carved into a wooden sign or\n * a milestone. Each glyph is a set of polyline strokes on a fixed grid, so it\n * turns into geometry (no textures, no font files, no `three/examples` loaders)\n * and works identically in a browser, a headless render and a Node test.\n *\n * Grid: x runs left→right from 0, y is the baseline at 0 up to the cap height\n * (`CAP`). Commas and the tail of a `Q`/`J`/`,` dip below the baseline. Every\n * glyph also carries an `advance` (how far the pen moves on to the next\n * letter), so proportional spacing falls out for free.\n */\n\nexport const CAP = 7;\n\n/** A glyph: its polyline strokes (each a flat [x,y,x,y,…] run) and pen advance. */\nexport interface Glyph {\n  strokes: number[][];\n  advance: number;\n}\n\n// Authoring helper: strokes are written as arrays of [x, y] pairs for\n// legibility, then flattened once at module load.\ntype Pt = [number, number];\nfunction g(advance: number, ...strokes: Pt[][]): Glyph {\n  return { advance, strokes: strokes.map((s) => s.flat()) };\n}\n\n// A tiny filled dot (period, colon, the foot of ! and :) — a little square\n// loop so the stroke-thickener gives it body.\nconst DOT = (x: number, y: number): Pt[] => [\n  [x - 0.25, y],\n  [x + 0.25, y],\n  [x + 0.25, y + 0.5],\n  [x - 0.25, y + 0.5],\n  [x - 0.25, y],\n];\n\n/**\n * The glyph table — humanist capitals, digits and the punctuation a signpost\n * actually needs. Lowercase is mapped onto capitals at build time, so a mixed-\n * case string still renders (medieval signage is caps anyway).\n */\nexport const FONT: Record<string, Glyph> = {\n  ' ': g(3),\n  A: g(6, [[0, 0], [2.75, 7], [5.5, 0]], [[1.15, 2.6], [4.35, 2.6]]),\n  B: g(5.6,\n    [[0, 0], [0, 7]],\n    [[0, 7], [3.5, 7], [4.6, 6.2], [4.6, 4.7], [3.5, 3.9], [0, 3.9]],\n    [[0, 3.9], [3.9, 3.9], [5, 3], [5, 0.9], [3.9, 0], [0, 0]]),\n  C: g(5.6, [[5.2, 5.4], [4.1, 6.7], [2.2, 7], [0.7, 5.9], [0, 4], [0, 3], [0.7, 1.1], [2.2, 0], [4.1, 0.3], [5.2, 1.6]]),\n  D: g(5.8, [[0, 0], [0, 7]], [[0, 7], [2.8, 7], [4.6, 5.7], [5.2, 3.5], [4.6, 1.3], [2.8, 0], [0, 0]]),\n  E: g(5.2, [[5, 7], [0, 7], [0, 0], [5, 0]], [[0, 3.5], [3.6, 3.5]]),\n  F: g(5, [[5, 7], [0, 7], [0, 0]], [[0, 3.5], [3.4, 3.5]]),\n  G: g(6, [[5.2, 5.4], [4.1, 6.7], [2.2, 7], [0.7, 5.9], [0, 4], [0, 3], [0.7, 1.1], [2.2, 0], [4.2, 0.2], [5.2, 1.4], [5.2, 3], [3.2, 3]]),\n  H: g(5.6, [[0, 0], [0, 7]], [[5.4, 0], [5.4, 7]], [[0, 3.6], [5.4, 3.6]]),\n  I: g(2, [[1, 0], [1, 7]]),\n  J: g(4.6, [[4, 7], [4, 1.7], [3.2, 0.3], [1.9, 0], [0.7, 0.7], [0, 2]]),\n  K: g(5.4, [[0, 0], [0, 7]], [[5.2, 7], [0, 3.2]], [[1.7, 4.3], [5.4, 0]]),\n  L: g(4.8, [[0, 7], [0, 0], [4.8, 0]]),\n  M: g(6.6, [[0, 0], [0, 7], [3.3, 2.4], [6.6, 7], [6.6, 0]]),\n  N: g(5.8, [[0, 0], [0, 7], [5.6, 0], [5.6, 7]]),\n  O: g(6, [[2.3, 7], [0.8, 6.1], [0, 4], [0, 3], [0.8, 0.9], [2.3, 0], [3.3, 0], [4.8, 0.9], [5.6, 3], [5.6, 4], [4.8, 6.1], [3.3, 7], [2.3, 7]]),\n  P: g(5.4, [[0, 0], [0, 7]], [[0, 7], [3.7, 7], [4.8, 6], [4.8, 4.5], [3.7, 3.6], [0, 3.6]]),\n  Q: g(6,\n    [[2.3, 7], [0.8, 6.1], [0, 4], [0, 3], [0.8, 0.9], [2.3, 0], [3.3, 0], [4.8, 0.9], [5.6, 3], [5.6, 4], [4.8, 6.1], [3.3, 7], [2.3, 7]],\n    [[3.4, 1.9], [5.8, -0.5]]),\n  R: g(5.6,\n    [[0, 0], [0, 7]],\n    [[0, 7], [3.7, 7], [4.8, 6], [4.8, 4.5], [3.7, 3.6], [0, 3.6]],\n    [[2.7, 3.6], [5.4, 0]]),\n  S: g(5.2, [[5, 5.6], [3.9, 6.8], [1.7, 7], [0.5, 6], [0.5, 4.7], [1.5, 3.9], [3.7, 3.4], [4.7, 2.6], [4.7, 1], [3.5, 0], [1.2, 0.2], [0.2, 1.4]]),\n  T: g(5, [[0, 7], [5, 7]], [[2.5, 7], [2.5, 0]]),\n  U: g(5.6, [[0, 7], [0, 2], [0.8, 0.5], [2.6, 0], [4.6, 0.5], [5.4, 2], [5.4, 7]]),\n  V: g(5.6, [[0, 7], [2.8, 0], [5.6, 7]]),\n  W: g(7.4, [[0, 7], [1.4, 0], [3.7, 5], [6, 0], [7.4, 7]]),\n  X: g(5.4, [[0, 0], [5.4, 7]], [[0, 7], [5.4, 0]]),\n  Y: g(5.4, [[0, 7], [2.7, 3.5], [5.4, 7]], [[2.7, 3.5], [2.7, 0]]),\n  Z: g(5.2, [[0, 7], [5.2, 7], [0, 0], [5.2, 0]]),\n\n  '0': g(5.4, [[2.1, 7], [0.7, 6], [0, 3.5], [0.7, 1], [2.1, 0], [3.3, 0], [4.7, 1], [5.4, 3.5], [4.7, 6], [3.3, 7], [2.1, 7]], [[0.9, 1.3], [4.5, 5.7]]),\n  '1': g(4, [[1, 5.4], [2.6, 7], [2.6, 0]], [[0.9, 0], [4.2, 0]]),\n  '2': g(5.2, [[0.4, 5.4], [1.1, 6.5], [2.6, 7], [4, 6.7], [4.7, 5.6], [4.6, 4.3], [3.7, 3.1], [0.3, 0], [5, 0]]),\n  '3': g(5.2, [[0.5, 6.2], [2, 7], [3.7, 7], [4.7, 6], [4.7, 4.8], [3.6, 3.8], [2.4, 3.8]], [[3.6, 3.8], [4.9, 2.8], [4.9, 1.1], [3.7, 0], [1.8, 0], [0.3, 1]]),\n  '4': g(5.2, [[3.7, 0], [3.7, 7], [0, 2.4], [5, 2.4]]),\n  '5': g(5.2, [[4.7, 7], [0.9, 7], [0.5, 3.9], [1.6, 4.5], [3.5, 4.5], [4.7, 3.5], [4.7, 1.4], [3.5, 0.1], [1.6, 0.1], [0.4, 1.2]]),\n  '6': g(5.2, [[4.5, 6], [3.1, 7], [1.6, 6.6], [0.6, 4.8], [0.3, 2.6], [0.9, 0.8], [2.2, 0], [3.6, 0.3], [4.6, 1.5], [4.6, 2.9], [3.6, 4], [1.9, 4.2], [0.6, 3.2]]),\n  '7': g(5.2, [[0.4, 7], [5, 7], [2, 0]]),\n  '8': g(5.4,\n    [[2.6, 3.8], [1.3, 4.5], [1.3, 5.9], [2.6, 7], [3.9, 7], [5.1, 5.9], [5.1, 4.5], [3.9, 3.8], [2.6, 3.8]],\n    [[2.6, 3.8], [1, 3], [0.5, 1.6], [1.6, 0.2], [3.6, 0.2], [4.7, 1.6], [4.2, 3], [2.6, 3.8]]),\n  '9': g(5.2, [[0.7, 1], [2.1, 0], [3.6, 0.4], [4.6, 2.2], [4.9, 4.4], [4.3, 6.2], [3, 7], [1.6, 6.7], [0.6, 5.5], [0.6, 4.1], [1.6, 3], [3.3, 2.8], [4.6, 3.8]]),\n\n  '.': g(2, DOT(0.5, 0)),\n  ',': g(2, [[0.9, 0.6], [0.9, 0], [0.2, -1]]),\n  \"'\": g(2, [[0.6, 7], [0.6, 5.3]]),\n  '\"': g(3, [[0.6, 7], [0.6, 5.3]], [[1.9, 7], [1.9, 5.3]]),\n  '!': g(2, [[0.5, 7], [0.5, 2]], DOT(0.5, 0)),\n  '?': g(4.8, [[0.4, 5.6], [1.1, 6.6], [2.5, 7], [3.7, 6.6], [4.3, 5.5], [4.1, 4.3], [2.4, 3.2], [2.4, 2]], DOT(2.4, 0)),\n  '-': g(4, [[0.5, 3.5], [3.5, 3.5]]),\n  '&': g(6,\n    [[5.6, 0], [2, 3.6], [1, 4.8], [1, 5.9], [1.9, 6.8], [3.1, 6.6], [3.5, 5.5], [3, 4.4], [0.6, 1.6], [1.6, 0.1], [3.2, 0.1], [4.6, 1.4], [5.2, 2.9]]),\n  ':': g(2, DOT(0.5, 3.9), DOT(0.5, 0.9)),\n  '/': g(4, [[0, -0.5], [3.6, 7.2]]),\n  '(': g(2.8, [[2.2, 7.4], [0.7, 5], [0.7, 2], [2.2, -0.4]]),\n  ')': g(2.8, [[0.4, 7.4], [1.9, 5], [1.9, 2], [0.4, -0.4]]),\n};\n\n/** Fallback for an unknown character: the pen just advances (like a space). */\nexport const MISSING: Glyph = FONT[' '];\n"],"mappings":"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","names":[]}