diff --git a/README.md b/README.md index 633a22b..1c88c1f 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ **dBASE III is back. In your browser. `USE customers` like it's 1984.** -![WebBase-III demo — USE, LIST, SEEK, BROWSE](docs/screenshots/demo.gif) +![WebBase-III demo — USE, LIST, SEEK, BROWSE, and a LOOKUP column dropdown](docs/screenshots/demo.gif) Remember the dot prompt? Before SQL won, before ORMs, before anyone said "full-stack" — there was dBASE III. You typed `USE customers`, then `LIST`, and your data was just *there*. WebBase-III brings that whole world back: the terminal, the language, `BROWSE`, `@ SAY GET` forms, `.prg` programs, indexes, reports — rebuilt from scratch as a modern web app with its own interpreter in TypeScript, backed by Node.js, WebSockets, and SQLite. diff --git a/docs/screenshots/demo.gif b/docs/screenshots/demo.gif index 7f0dd96..2abc4cc 100644 Binary files a/docs/screenshots/demo.gif and b/docs/screenshots/demo.gif differ diff --git a/scripts/make-demo-gif.mjs b/scripts/make-demo-gif.mjs index a2a263a..7bf4da1 100644 --- a/scripts/make-demo-gif.mjs +++ b/scripts/make-demo-gif.mjs @@ -77,7 +77,31 @@ for (const key of ['ArrowDown', 'ArrowDown', 'ArrowRight']) { await page.waitForTimeout(150); await snap(450); } -await snap(3200); // hold final frame +await snap(1200); + +// ---- v1.3.0: LOOKUP columns — a column can pick from a list instead of typing ---- +await page.keyboard.press('Escape'); +await page.waitForTimeout(400); +await snap(500); +await typeAndRun('ALTER TABLE customers ADD SEGMENT CHAR(10) LOOKUP ("Startup","Enterprise")', 1600); +await typeAndRun('BROWSE', 1200); +for (const key of ['ArrowRight', 'ArrowRight', 'ArrowRight']) { + await page.keyboard.press(key); + await page.waitForTimeout(150); + await snap(350); +} +await page.keyboard.press('Enter'); // opens the SEGMENT dropdown +await page.waitForTimeout(300); +await snap(1400); +await page.keyboard.press('ArrowDown'); // picks "Startup" +await page.waitForTimeout(150); +await snap(500); +await page.keyboard.press('Enter'); // commits +await page.waitForTimeout(300); +await snap(1400); +await page.keyboard.press('Escape'); // leave the grid +await page.waitForTimeout(300); +await snap(3000); // hold final frame writeFileSync(`${OUT}/frames.json`, JSON.stringify(frames, null, 2)); await browser.close();