From 8417cd4b24cbae1913aab0cc112ca01f795355f5 Mon Sep 17 00:00:00 2001 From: TOMOKI977 Date: Wed, 9 Sep 2026 21:43:07 -0400 Subject: [PATCH] docs(pitch): add honest English pitch deck for Day-D recording Eight slides aligned to what main ships: live demo URLs, real seed agents, testnet hire UI, and an explicit note that Funded receipts are still pending $U. Co-authored-by: Cursor --- package.json | 1 + pitch/README.md | 32 ++++ pitch/build-deck.mjs | 325 +++++++++++++++++++++++++++++++++++++++++ pitch/pulse-pitch.pptx | Bin 0 -> 166391 bytes pnpm-lock.yaml | 66 +++++++++ 5 files changed, 424 insertions(+) create mode 100644 pitch/README.md create mode 100644 pitch/build-deck.mjs create mode 100644 pitch/pulse-pitch.pptx diff --git a/package.json b/package.json index 3098ee2..3f53111 100644 --- a/package.json +++ b/package.json @@ -13,6 +13,7 @@ "brand:export": "pnpm --filter @era/web brand:export" }, "devDependencies": { + "pptxgenjs": "^4.0.1", "turbo": "^2.5.8", "typescript": "^5.9.2" } diff --git a/pitch/README.md b/pitch/README.md new file mode 100644 index 0000000..53896e1 --- /dev/null +++ b/pitch/README.md @@ -0,0 +1,32 @@ +# pitch + +Honest English pitch deck for the BNB Chain Smart Money Era submission. + +## Files + +| File | Purpose | +|------|---------| +| [`pulse-pitch.pptx`](./pulse-pitch.pptx) | 8-slide deck aligned to what `main` ships today | +| [`build-deck.mjs`](./build-deck.mjs) | Regenerates the `.pptx` | + +## Claims this deck makes + +- Public demo + catalog API URLs +- Four equal categories with real seed agent names +- ERC-8004 registrations / Worker endpoints for the four seed agents +- Hire **UI** on BSC testnet (chain 97) via ERC-8183 +- Venus health-factor reader with fixture fallback +- Explicitly **does not** claim a public Funded hire receipt (blocked on `$U` faucet at submit time) + +## Regenerate + +From the repo root (Node 22+, `pptxgenjs` is a root devDependency): + +```bash +pnpm install +node pitch/build-deck.mjs +``` + +## Brand + +Dark field `#0B0E11`, accent `#F0B90B`, paper `#FFFFFF`. Wording: “Building on BNB Chain” — never Official / Partnering. diff --git a/pitch/build-deck.mjs b/pitch/build-deck.mjs new file mode 100644 index 0000000..ab53f56 --- /dev/null +++ b/pitch/build-deck.mjs @@ -0,0 +1,325 @@ +/** + * Generate the honest Day-D pitch deck from facts on main. + * Run: node pitch/build-deck.mjs + */ +import pptxgen from "pptxgenjs"; +import { mkdirSync } from "node:fs"; +import { dirname, join } from "node:path"; +import { fileURLToPath } from "node:url"; + +const __dirname = dirname(fileURLToPath(import.meta.url)); +const outFile = join(__dirname, "pulse-pitch.pptx"); + +const INK = "0B0E11"; +const INK2 = "141820"; +const LINE = "2A2F36"; +const PAPER = "FFFFFF"; +const MUTED = "A7ADB5"; +const ACCENT = "F0B90B"; + +const pres = new pptxgen(); +pres.layout = "LAYOUT_16x9"; +pres.author = "Zer0-Knowledge-Hack"; +pres.title = "pulse — Smart Money Era pitch"; +pres.subject = "Honest marketplace pitch aligned to main"; + +function bg(slide) { + slide.addShape(pres.shapes.RECTANGLE, { + x: 0, y: 0, w: 10, h: 5.625, + fill: { color: INK }, line: { color: INK }, + }); +} + +function footer(slide, page, total = 8) { + slide.addText("Building on BNB Chain", { + x: 0.5, y: 5.25, w: 5, h: 0.25, + fontSize: 10, fontFace: "Arial", color: MUTED, margin: 0, + }); + slide.addText(`${page} / ${total}`, { + x: 8.5, y: 5.25, w: 1, h: 0.25, + fontSize: 10, fontFace: "Arial", color: MUTED, align: "right", margin: 0, + }); +} + +function accentBar(slide) { + slide.addShape(pres.shapes.RECTANGLE, { + x: 0, y: 0, w: 0.12, h: 5.625, + fill: { color: ACCENT }, line: { color: ACCENT }, + }); +} + +// 1 — Title +{ + const s = pres.addSlide(); + bg(s); + accentBar(s); + s.addText("pulse", { + x: 0.6, y: 1.5, w: 8.5, h: 0.9, + fontSize: 54, fontFace: "Arial", bold: true, color: ACCENT, margin: 0, + }); + s.addText("The marketplace where DeFi agents get hired.", { + x: 0.6, y: 2.45, w: 8.5, h: 0.45, + fontSize: 22, fontFace: "Arial", color: PAPER, margin: 0, + }); + s.addText("Discover → Compare → Hire", { + x: 0.6, y: 3.1, w: 8.5, h: 0.35, + fontSize: 16, fontFace: "Arial", color: MUTED, margin: 0, + }); + s.addText("Building on BNB Chain · Smart Money Era", { + x: 0.6, y: 4.5, w: 8.5, h: 0.3, + fontSize: 12, fontFace: "Arial", color: MUTED, margin: 0, + }); + footer(s, 1); +} + +// 2 — Problem +{ + const s = pres.addSlide(); + bg(s); + accentBar(s); + s.addText("Agents exist. Conversion doesn’t.", { + x: 0.6, y: 0.4, w: 8.8, h: 0.55, + fontSize: 28, fontFace: "Arial", bold: true, color: PAPER, margin: 0, + }); + s.addText("Registries show identity. A marketplace must help you choose and activate.", { + x: 0.6, y: 1.05, w: 8.8, h: 0.4, + fontSize: 14, fontFace: "Arial", color: MUTED, margin: 0, + }); + + const left = [ + { t: "ERC-8004 registries", d: "Owner, metadata, endpoints, capability claims" }, + { t: "What they don’t do", d: "Compare jobs, show live signals, or fund work" }, + ]; + const right = [ + { t: "pulse", d: "Find by DeFi job → compare numbers → hire on-chain" }, + { t: "Not an explorer", d: "Featured agents carry the demo; no 200k-agent dump" }, + ]; + left.forEach((item, i) => { + const y = 1.7 + i * 1.35; + s.addShape(pres.shapes.ROUNDED_RECTANGLE, { + x: 0.6, y, w: 4.2, h: 1.15, + fill: { color: INK2 }, line: { color: LINE }, rectRadius: 0.08, + }); + s.addText(item.t, { x: 0.8, y: y + 0.2, w: 3.8, h: 0.35, fontSize: 16, bold: true, color: ACCENT, margin: 0 }); + s.addText(item.d, { x: 0.8, y: y + 0.55, w: 3.8, h: 0.4, fontSize: 13, color: PAPER, margin: 0 }); + }); + right.forEach((item, i) => { + const y = 1.7 + i * 1.35; + s.addShape(pres.shapes.ROUNDED_RECTANGLE, { + x: 5.1, y, w: 4.3, h: 1.15, + fill: { color: INK2 }, line: { color: LINE }, rectRadius: 0.08, + }); + s.addText(item.t, { x: 5.3, y: y + 0.2, w: 3.9, h: 0.35, fontSize: 16, bold: true, color: ACCENT, margin: 0 }); + s.addText(item.d, { x: 5.3, y: y + 0.55, w: 3.9, h: 0.4, fontSize: 13, color: PAPER, margin: 0 }); + }); + footer(s, 2); +} + +// 3 — What ships on main +{ + const s = pres.addSlide(); + bg(s); + accentBar(s); + s.addText("What is live on main today", { + x: 0.6, y: 0.4, w: 8.8, h: 0.5, + fontSize: 28, fontFace: "Arial", bold: true, color: PAPER, margin: 0, + }); + s.addText("Public demo of the conversion loop — no invented TVL, no fake hire receipts.", { + x: 0.6, y: 0.95, w: 8.8, h: 0.35, + fontSize: 13, fontFace: "Arial", color: MUTED, margin: 0, + }); + + const items = [ + ["Web", "Vite + React marketplace at pulse-94i.pages.dev"], + ["Catalog", "Four categories × two featured agents; seed agents use real ERC-8004 ids"], + ["Signals", "Health-factor reader on Venus BSC testnet (fixture fallback if RPC fails)"], + ["Hire UI", "RainbowKit + ERC-8183 path on BSC testnet (chain 97), budget capped at 0.001 $U"], + ["Agents", "hfwatch / rangekeeper / yieldrouter / gridrunner on Workers + registered on chain 97"], + ["API", "Hono catalog Worker: pulse-api…workers.dev"], + ]; + items.forEach((row, i) => { + const y = 1.45 + i * 0.52; + s.addText(row[0], { x: 0.6, y, w: 1.5, h: 0.4, fontSize: 13, bold: true, color: ACCENT, margin: 0 }); + s.addText(row[1], { x: 2.2, y, w: 7.2, h: 0.4, fontSize: 13, color: PAPER, margin: 0 }); + }); + footer(s, 3); +} + +// 4 — Four categories +{ + const s = pres.addSlide(); + bg(s); + accentBar(s); + s.addText("Four categories. Equal depth.", { + x: 0.6, y: 0.35, w: 8.8, h: 0.45, + fontSize: 26, fontFace: "Arial", bold: true, color: PAPER, margin: 0, + }); + const cats = [ + { n: "01", t: "Health factor", a: "HF Watch", m: "Health factor · Liq. price · Venus" }, + { n: "02", t: "Rebalancing", a: "Range Keeper", m: "In-range % · Fees · IL" }, + { n: "03", t: "Yield", a: "Yield Router", m: "Net APR · Venue · Allocation" }, + { n: "04", t: "Grid trading", a: "Grid Runner", m: "Fill rate · Realized PnL · Window" }, + ]; + cats.forEach((c, i) => { + const x = 0.5 + (i % 2) * 4.7; + const y = 1.05 + Math.floor(i / 2) * 1.9; + s.addShape(pres.shapes.ROUNDED_RECTANGLE, { + x, y, w: 4.4, h: 1.7, + fill: { color: INK2 }, line: { color: LINE }, rectRadius: 0.08, + }); + s.addText(c.n, { x: x + 0.25, y: y + 0.2, w: 1, h: 0.3, fontSize: 12, color: ACCENT, margin: 0 }); + s.addText(c.t, { x: x + 0.25, y: y + 0.5, w: 3.9, h: 0.35, fontSize: 18, bold: true, color: PAPER, margin: 0 }); + s.addText(c.a, { x: x + 0.25, y: y + 0.9, w: 3.9, h: 0.28, fontSize: 13, color: ACCENT, margin: 0 }); + s.addText(c.m, { x: x + 0.25, y: y + 1.2, w: 3.9, h: 0.28, fontSize: 12, color: MUTED, margin: 0 }); + }); + footer(s, 4); +} + +// 5 — Signals honesty +{ + const s = pres.addSlide(); + bg(s); + accentBar(s); + s.addText("Compare on signals — with provenance.", { + x: 0.6, y: 0.4, w: 8.8, h: 0.5, + fontSize: 26, fontFace: "Arial", bold: true, color: PAPER, margin: 0, + }); + s.addText("Cards and detail pages render category metrics. Labels stay honest.", { + x: 0.6, y: 0.95, w: 8.8, h: 0.35, + fontSize: 13, fontFace: "Arial", color: MUTED, margin: 0, + }); + + const tags = [ + { k: "LIVE", d: "On-chain read (Venus HF for hf-watch when RPC succeeds)" }, + { k: "FIXTURE", d: "Catalog numbers for non-HF metrics / fallback path" }, + { k: "TESTNET", d: "BSC testnet (chain 97) for agents, hire UI, and demo position" }, + ]; + tags.forEach((tag, i) => { + const y = 1.5 + i * 0.95; + s.addShape(pres.shapes.ROUNDED_RECTANGLE, { + x: 0.6, y, w: 8.8, h: 0.8, + fill: { color: INK2 }, line: { color: LINE }, rectRadius: 0.08, + }); + s.addShape(pres.shapes.ROUNDED_RECTANGLE, { + x: 0.85, y: y + 0.2, w: 1.5, h: 0.4, + fill: { color: ACCENT }, line: { color: ACCENT }, rectRadius: 0.06, + }); + s.addText(tag.k, { + x: 0.85, y: y + 0.2, w: 1.5, h: 0.4, + fontSize: 12, bold: true, color: INK, align: "center", valign: "middle", margin: 0, + }); + s.addText(tag.d, { + x: 2.6, y: y + 0.22, w: 6.5, h: 0.4, + fontSize: 14, color: PAPER, valign: "middle", margin: 0, + }); + }); + footer(s, 5); +} + +// 6 — Hire path (honest) +{ + const s = pres.addSlide(); + bg(s); + accentBar(s); + s.addText("Hire through ERC-8183", { + x: 0.6, y: 0.35, w: 8.8, h: 0.45, + fontSize: 26, fontFace: "Arial", bold: true, color: PAPER, margin: 0, + }); + s.addText("Buyer wallet funds escrow in $U. Marketplace never takes custody.", { + x: 0.6, y: 0.85, w: 8.8, h: 0.3, + fontSize: 13, fontFace: "Arial", color: MUTED, margin: 0, + }); + + const steps = ["Connect", "Create job", "Budget", "Approve $U", "Fund", "Funded"]; + steps.forEach((step, i) => { + const x = 0.5 + i * 1.55; + s.addShape(pres.shapes.ROUNDED_RECTANGLE, { + x, y: 1.4, w: 1.4, h: 0.7, + fill: { color: INK2 }, line: { color: i === 0 || i === 1 ? ACCENT : LINE }, rectRadius: 0.06, + }); + s.addText(step, { + x, y: 1.4, w: 1.4, h: 0.7, + fontSize: 11, bold: true, color: PAPER, align: "center", valign: "middle", margin: 0, + }); + }); + + s.addShape(pres.shapes.ROUNDED_RECTANGLE, { + x: 0.6, y: 2.4, w: 8.8, h: 2.3, + fill: { color: INK2 }, line: { color: LINE }, rectRadius: 0.08, + }); + s.addText("Shipped on main", { + x: 0.85, y: 2.6, w: 8.3, h: 0.3, + fontSize: 14, bold: true, color: ACCENT, margin: 0, + }); + s.addText([ + { text: "Hire panel on BSC Testnet (chain 97) against canonical AgenticCommerce", options: { bullet: true, breakLine: true } }, + { text: "Real provider wallets for seed agents (e.g. HF Watch 0x6d07…fCad)", options: { bullet: true, breakLine: true } }, + { text: "Local mock hire still available when VITE_CHAIN=local", options: { bullet: true, breakLine: true } }, + { text: "Public Funded receipt: pending $U faucet / teammate transfer (not claimed as done)", options: { bullet: true } }, + ], { + x: 0.85, y: 3.0, w: 8.3, h: 1.5, + fontSize: 13, fontFace: "Arial", color: PAPER, margin: 0, + }); + footer(s, 6); +} + +// 7 — Stack +{ + const s = pres.addSlide(); + bg(s); + accentBar(s); + s.addText("Built for real execution", { + x: 0.6, y: 0.4, w: 8.8, h: 0.45, + fontSize: 26, fontFace: "Arial", bold: true, color: PAPER, margin: 0, + }); + const cols = [ + { t: "Web", d: "Vite · React · TanStack Router · wagmi / RainbowKit" }, + { t: "API", d: "Hono on Cloudflare Workers · fixture catalog" }, + { t: "Commerce", d: "ERC-8183 · $U · create → fund path" }, + { t: "Agents", d: "BNB Agent Studio · ERC-8004 · A2A / MCP Workers" }, + { t: "Signals", d: "Venus testnet HF reader · provenance labels" }, + { t: "Evidence", d: "Submission package · TermiX outline (task 1 DIY)" }, + ]; + cols.forEach((c, i) => { + const x = 0.5 + (i % 3) * 3.1; + const y = 1.15 + Math.floor(i / 3) * 1.7; + s.addShape(pres.shapes.ROUNDED_RECTANGLE, { + x, y, w: 2.95, h: 1.45, + fill: { color: INK2 }, line: { color: LINE }, rectRadius: 0.08, + }); + s.addText(c.t, { x: x + 0.2, y: y + 0.25, w: 2.55, h: 0.35, fontSize: 16, bold: true, color: ACCENT, margin: 0 }); + s.addText(c.d, { x: x + 0.2, y: y + 0.7, w: 2.55, h: 0.55, fontSize: 12, color: PAPER, margin: 0 }); + }); + footer(s, 7); +} + +// 8 — Close +{ + const s = pres.addSlide(); + bg(s); + accentBar(s); + s.addText("pulse", { + x: 0.6, y: 1.2, w: 8.8, h: 0.7, + fontSize: 42, fontFace: "Arial", bold: true, color: ACCENT, margin: 0, + }); + s.addText("Agents already exist.\nNow they have somewhere to get hired.", { + x: 0.6, y: 2.0, w: 8.8, h: 0.9, + fontSize: 22, fontFace: "Arial", color: PAPER, margin: 0, + }); + s.addText([ + { text: "Demo ", options: { bold: true, color: ACCENT } }, + { text: "https://pulse-94i.pages.dev/", options: { breakLine: true, color: PAPER } }, + { text: "API ", options: { bold: true, color: ACCENT } }, + { text: "https://pulse-api.juliocesarsevericheorellana.workers.dev/", options: { breakLine: true, color: PAPER } }, + { text: "Repo ", options: { bold: true, color: ACCENT } }, + { text: "https://github.com/Zer0-Knowledge-Hack/pulse", options: { color: PAPER } }, + ], { + x: 0.6, y: 3.2, w: 8.8, h: 1.3, + fontSize: 13, fontFace: "Arial", margin: 0, + }); + footer(s, 8); +} + +mkdirSync(__dirname, { recursive: true }); +await pres.writeFile({ fileName: outFile }); +console.log(`Wrote ${outFile}`); diff --git a/pitch/pulse-pitch.pptx b/pitch/pulse-pitch.pptx new file mode 100644 index 0000000000000000000000000000000000000000..721ecb28f3c42f44377a37397df9860ecdad3e44 GIT binary patch literal 166391 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 ROe6EDZ_Q*D4j`jv{y&S6{x<*s literal 0 HcmV?d00001 diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 4386abf..82ea7ae 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -8,6 +8,9 @@ importers: .: devDependencies: + pptxgenjs: + specifier: ^4.0.1 + version: 4.0.1 turbo: specifier: ^2.5.8 version: 2.10.12 @@ -2991,6 +2994,9 @@ packages: html-entities@2.6.0: resolution: {integrity: sha512-kig+rMn/QOVRvr7c86gQ8lWXq+Hkv6CbAH1hLu+RG338StTpE8Z0b44SDVaqVu7HGKf27frdmUYEs9hTUX/cLQ==} + https@1.0.0: + resolution: {integrity: sha512-4EC57ddXrkaF0x83Oj8sM6SLQHAWXw90Skqu2M4AEWENZ3F02dFJE/GARA8igO79tcgYqGrD7ae4f5L3um2lgg==} + human-signals@2.1.0: resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} engines: {node: '>=10.17.0'} @@ -3010,6 +3016,14 @@ packages: ieee754@1.2.1: resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} + image-size@1.2.1: + resolution: {integrity: sha512-rH+46sQJ2dlwfjfhCyNx5thzrv+dtmBIhPHk0zgRUukHzZ/kRueTJXoYYsclBaKcSMBWuGbOFXtioLpzTb5euw==} + engines: {node: '>=16.x'} + hasBin: true + + immediate@3.0.6: + resolution: {integrity: sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==} + import-fresh@3.3.1: resolution: {integrity: sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==} engines: {node: '>=6'} @@ -3134,6 +3148,9 @@ packages: engines: {node: '>=6'} hasBin: true + jszip@3.10.2: + resolution: {integrity: sha512-3l+rb15IOWtUhU0H5MFqES/T6Kh7abYwjosBey/vD6hDt8zoEffkSC5Ws5SGtgVw3gBx2NEbhTeSW1+kWkpyTQ==} + keccak@3.0.4: resolution: {integrity: sha512-3vKuW0jV8J3XNTzvfyicFR5qvxrSAGl7KIhvgOu5cmWwM7tZRj3fMbj/pfIf4be7aznbc+prBWGjywox/g2Y6Q==} engines: {node: '>=10.0.0'} @@ -3153,6 +3170,9 @@ packages: resolution: {integrity: sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==} engines: {node: '>=6'} + lie@3.3.0: + resolution: {integrity: sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==} + lightningcss-android-arm64@1.32.0: resolution: {integrity: sha512-YK7/ClTt4kAK0vo6w3X+Pnm0D2cf2vPHbhOXdoNti1Ga0al1P4TBZhwjATvjNwLEBCnKvjJc2jQgHXH0NEwlAg==} engines: {node: '>= 12.0.0'} @@ -3451,6 +3471,9 @@ packages: resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} engines: {node: '>=6'} + pako@1.0.11: + resolution: {integrity: sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==} + parent-module@1.0.1: resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} engines: {node: '>=6'} @@ -3594,6 +3617,9 @@ packages: resolution: {integrity: sha512-RRuzqDtt5Y9h3quz5hWhK+TPnsmVs6WwSU6LkJMeY4HstUEDuYTG8UJSdawMRzmzAtV+KEoG8N3Qg2qLy5vM/A==} engines: {node: ^10 || ^12 || >=14} + pptxgenjs@4.0.1: + resolution: {integrity: sha512-TeJISr8wouAuXw4C1F/mC33xbZs/FuEG6nH9FG1Zj+nuPcGMP5YRHl6X+j3HSUnS1f3at6k75ZZXPMZlA5Lj9A==} + preact@10.24.2: resolution: {integrity: sha512-1cSoF0aCC8uaARATfrlz4VCBqE8LwZwRfLgkxJOQwAlQt6ayTmi0D9OF7nXid1POI5SZidFuG9CnlXbDfLqY/Q==} @@ -3643,6 +3669,9 @@ packages: resolution: {integrity: sha512-hh2WYhq4fi8+b+/2Kg9CEge4fDPvHS534aOOvOZeQ3+Vf2mCFsaFBYj0i+iXcAq6I9Vzp5fjMFBlONvayDC1qg==} engines: {node: '>=6'} + queue@6.0.2: + resolution: {integrity: sha512-iHZWu+q3IdFZFX36ro/lKBkSvfkztY5Y7HMiPlOUjhupPcG2JMfst2KKEpu5XndviX/3UhFbRngUPNKtgvtZiA==} + quick-format-unescaped@4.0.4: resolution: {integrity: sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg==} @@ -3789,6 +3818,9 @@ packages: resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==} engines: {node: '>= 0.4'} + setimmediate@1.0.5: + resolution: {integrity: sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==} + sha.js@2.4.12: resolution: {integrity: sha512-8LzC5+bvI45BjpfXU8V5fdU2mfeKiQe1D1gIMn7XUlF3OTUrpdJpPPH4EMAnF0DsHHdSZqCdSss5qCmJKuiO3w==} engines: {node: '>= 0.10'} @@ -8159,6 +8191,8 @@ snapshots: html-entities@2.6.0: {} + https@1.0.0: {} + human-signals@2.1.0: {} icss-utils@5.1.0(postcss@8.5.28): @@ -8171,6 +8205,12 @@ snapshots: ieee754@1.2.1: {} + image-size@1.2.1: + dependencies: + queue: 6.0.2 + + immediate@3.0.6: {} + import-fresh@3.3.1: dependencies: parent-module: 1.0.1 @@ -8271,6 +8311,13 @@ snapshots: json5@2.2.3: {} + jszip@3.10.2: + dependencies: + lie: 3.3.0 + pako: 1.0.11 + readable-stream: 2.3.8 + setimmediate: 1.0.5 + keccak@3.0.4: dependencies: node-addon-api: 2.0.2 @@ -8285,6 +8332,10 @@ snapshots: kleur@4.1.5: {} + lie@3.3.0: + dependencies: + immediate: 3.0.6 + lightningcss-android-arm64@1.32.0: optional: true @@ -8606,6 +8657,8 @@ snapshots: p-try@2.2.0: {} + pako@1.0.11: {} + parent-module@1.0.1: dependencies: callsites: 3.1.0 @@ -8726,6 +8779,13 @@ snapshots: picocolors: 1.1.1 source-map-js: 1.2.1 + pptxgenjs@4.0.1: + dependencies: + '@types/node': 22.20.1 + https: 1.0.0 + image-size: 1.2.1 + jszip: 3.10.2 + preact@10.24.2: {} preact@10.29.8: {} @@ -8766,6 +8826,10 @@ snapshots: split-on-first: 1.1.0 strict-uri-encode: 2.0.0 + queue@6.0.2: + dependencies: + inherits: 2.0.4 + quick-format-unescaped@4.0.4: {} radix3@1.1.2: {} @@ -8925,6 +8989,8 @@ snapshots: gopd: 1.2.0 has-property-descriptors: 1.0.2 + setimmediate@1.0.5: {} + sha.js@2.4.12: dependencies: inherits: 2.0.4