All files / web/src/components/toys/number-line/constants/demos ln2DemoNarration.ts

100% Statements 99/99
100% Branches 0/0
100% Functions 0/0
100% Lines 99/99

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 1001x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x  
/**
 * ln(2) Demo Narration Segments: "The Bouncing Ball"
 *
 * Pure data file — no React. Each segment maps a revealProgress range
 * to a TTS utterance and a minimum animation duration.
 *
 * Progress ranges are derived from ln2Demo.ts's phase constants:
 *
 *   Seg 0  0.00–0.08  Place — ball fades in at 0
 *   Seg 1  0.08–0.35  First bounces — bounces 1–4 with subdivision visual
 *   Seg 2  0.35–0.55  More bounces — bounces 5–12, faster
 *   Seg 3  0.55–0.72  Cascade — accelerating bounces
 *   Seg 4  0.72–0.86  Converge — spiral closes
 *   Seg 5  0.86–1.00  Reveal — star, label, celebration
 */
 
import type { DemoNarrationSegment } from './useConstantDemoNarration'
 
/** Shared voice direction for the ln(2) demo narrator. */
export const LN2_DEMO_TONE =
  'You are a warm, curious guide for a really smart 5-year-old. ' +
  'Help the child notice the PATTERN in the bouncing — each jump is ' +
  'a fraction of the first: the whole, then half, a third, a quarter. ' +
  'Build wonder about where the ball gets trapped. ' +
  'Connect to doubling: ln(2) is the special number hiding inside every time something doubles.'
 
export const LN2_DEMO_SEGMENTS: DemoNarrationSegment[] = [
  // ── Place ───────────────────────────────────────────────────────────
  {
    ttsText: 'Look! Here comes a little ball. ' + "It's sitting right on zero, ready to bounce!",
    startProgress: 0.0,
    endProgress: 0.08,
    animationDurationMs: 3500,
    scrubberLabel: 'The ball appears',
  },
 
  // ── First bounces ──────────────────────────────────────────────────
  {
    ttsText:
      'A big bounce to the right — all the way to ONE! ' +
      'Now it bounces back, but only HALF as far. See? Half of the first jump. ' +
      'Forward again — only a THIRD as far this time! ' +
      'And back — just a QUARTER of the first jump. ' +
      'The whole thing, then half, a third, a quarter... see the pattern?',
    startProgress: 0.08,
    endProgress: 0.35,
    animationDurationMs: 14000,
    scrubberLabel: 'The pattern',
  },
 
  // ── More bounces ───────────────────────────────────────────────────
  {
    ttsText:
      'A fifth, a sixth, a seventh — ' +
      'the jumps keep following the same pattern, and each one is smaller! ' +
      'Back and forth, tighter and tighter.',
    startProgress: 0.35,
    endProgress: 0.55,
    animationDurationMs: 8000,
    scrubberLabel: 'Tighter and tighter',
  },
 
  // ── Cascade ────────────────────────────────────────────────────────
  {
    ttsText:
      'The ball keeps overshooting and coming back, ' +
      "but it's getting trapped — it can't escape! " +
      'Every bounce pulls it closer to one special spot.',
    startProgress: 0.55,
    endProgress: 0.72,
    animationDurationMs: 6000,
    scrubberLabel: 'Getting trapped',
  },
 
  // ── Converge ──────────────────────────────────────────────────────
  {
    ttsText:
      'Can you even see the bounces now? ' +
      'The ball is spiraling in, faster and faster — ' +
      "it can't go anywhere else!",
    startProgress: 0.72,
    endProgress: 0.86,
    animationDurationMs: 6000,
    scrubberLabel: 'Spiraling in',
  },
 
  // ── Reveal ─────────────────────────────────────────────────────────
  {
    ttsText:
      'That spot is called the natural log of two! ' +
      "It's about zero point six nine three. " +
      'Whenever something DOUBLES — like one cookie becoming two — ' +
      'this number is hiding inside, telling you how fast it grew.',
    startProgress: 0.86,
    endProgress: 1.0,
    animationDurationMs: 7000,
    scrubberLabel: 'Natural log of two',
  },
]