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

0% Statements 0/99
0% Branches 0/1
0% Functions 0/1
0% Lines 0/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 100                                                                                                                                                                                                       
/**
 * 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',
  },
]