diff --git a/FrontEnd/my-app/app/page.tsx b/FrontEnd/my-app/app/page.tsx index db3696b..c7fa5d3 100644 --- a/FrontEnd/my-app/app/page.tsx +++ b/FrontEnd/my-app/app/page.tsx @@ -1,63 +1,26 @@ "use client"; -import FeaturedQuests from "@/components/homepage/FeaturedQuests"; -import Link from "next/link"; import { motion } from "framer-motion"; +import Link from "next/link"; +import HeroSection from "@/components/homepage/HeroSection"; import { HowItWorks } from "@/components/homepage/HowItWorks"; -import { FAQAccordion } from "@/components/homepage/FAQAccordion"; import FeaturedQuests from "@/components/homepage/FeaturedQuests"; +import { FAQAccordion } from "@/components/homepage/FAQAccordion"; export default function Home() { return (
{/* Hero */} -
- - Turn Work Into{" "} - - On-Chain Achievements - - - - Complete quests, earn rewards, and build your reputation on the - Stellar blockchain. Fast settlements, low fees, global reach. - - - - Explore Quests - - - Connect Wallet - - -
+ {/* How It Works */} + {/* Featured Quests */} + + {/* CTA */} -
+
- Join thousands of contributors completing quests and building - their on-chain reputation. Connect your wallet to get started. + Join thousands of contributors completing quests and building their + on-chain reputation. Connect your wallet to get started.
-
- -
-
- - {/* Featured Quests */} - - {/* FAQ */} ); -} +} \ No newline at end of file diff --git a/FrontEnd/my-app/components/homepage/CTAButtons.tsx b/FrontEnd/my-app/components/homepage/CTAButtons.tsx new file mode 100644 index 0000000..f6d2252 --- /dev/null +++ b/FrontEnd/my-app/components/homepage/CTAButtons.tsx @@ -0,0 +1,43 @@ +"use client"; + +import Link from "next/link"; + +export default function CTAButtons() { + return ( +
+ + Explore Quests + + + + Connect Wallet + +
+ ); +} \ No newline at end of file diff --git a/FrontEnd/my-app/components/homepage/HeroSection.tsx b/FrontEnd/my-app/components/homepage/HeroSection.tsx new file mode 100644 index 0000000..457a2ba --- /dev/null +++ b/FrontEnd/my-app/components/homepage/HeroSection.tsx @@ -0,0 +1,133 @@ +"use client"; + +import { useEffect, useState } from "react"; +import { motion } from "framer-motion"; +import CTAButtons from "./CTAButtons"; +import StatsCounter from "./StatsCounter"; +import TrustIndicators from "./TrustIndicators"; + +const ROTATING_WORDS = ["Achievements", "Rewards", "Reputation", "Income"]; + +export default function HeroSection() { + const [wordIndex, setWordIndex] = useState(0); + const [visible, setVisible] = useState(true); + + useEffect(() => { + const interval = setInterval(() => { + setVisible(false); + setTimeout(() => { + setWordIndex((i) => (i + 1) % ROTATING_WORDS.length); + setVisible(true); + }, 350); + }, 2600); + return () => clearInterval(interval); + }, []); + + return ( +
+ {/* Background grid */} +
+ ); +} \ No newline at end of file diff --git a/FrontEnd/my-app/components/homepage/NetworkVisualization.tsx b/FrontEnd/my-app/components/homepage/NetworkVisualization.tsx new file mode 100644 index 0000000..8074cbe --- /dev/null +++ b/FrontEnd/my-app/components/homepage/NetworkVisualization.tsx @@ -0,0 +1,130 @@ +"use client"; + +import { useEffect, useRef } from "react"; + +interface Node { + x: number; + y: number; + vx: number; + vy: number; + radius: number; + pulse: number; + pulseSpeed: number; +} + +export default function NetworkVisualization() { + const canvasRef = useRef(null); + const animRef = useRef(null); + + useEffect(() => { + const canvas = canvasRef.current; + if (!canvas) return; + const ctx = canvas.getContext("2d"); + if (!ctx) return; + + const setSize = () => { + canvas.width = canvas.offsetWidth; + canvas.height = canvas.offsetHeight; + }; + setSize(); + + const NODE_COUNT = Math.max( + 12, + Math.floor((canvas.width * canvas.height) / 16000) + ); + const MAX_DIST = 120; + // Cyan palette matching the project + const COLORS = ["#22d3ee", "#06b6d4", "#67e8f9", "#a5f3fc", "#0891b2"]; + + const nodes: Node[] = Array.from({ length: NODE_COUNT }, () => ({ + x: Math.random() * canvas.width, + y: Math.random() * canvas.height, + vx: (Math.random() - 0.5) * 0.5, + vy: (Math.random() - 0.5) * 0.5, + radius: 2 + Math.random() * 2.5, + pulse: Math.random() * Math.PI * 2, + pulseSpeed: 0.018 + Math.random() * 0.015, + })); + + // Store colors separately so they don't reset each frame + const nodeColors = nodes.map( + () => COLORS[Math.floor(Math.random() * COLORS.length)] + ); + + const draw = () => { + const W = canvas.width; + const H = canvas.height; + ctx.clearRect(0, 0, W, H); + + // Update + nodes.forEach((n) => { + n.x += n.vx; + n.y += n.vy; + n.pulse += n.pulseSpeed; + if (n.x < 0 || n.x > W) n.vx *= -1; + if (n.y < 0 || n.y > H) n.vy *= -1; + }); + + // Edges + for (let i = 0; i < nodes.length; i++) { + for (let j = i + 1; j < nodes.length; j++) { + const dx = nodes[i].x - nodes[j].x; + const dy = nodes[i].y - nodes[j].y; + const dist = Math.sqrt(dx * dx + dy * dy); + if (dist < MAX_DIST) { + const alpha = (1 - dist / MAX_DIST) * 0.4; + ctx.beginPath(); + ctx.moveTo(nodes[i].x, nodes[i].y); + ctx.lineTo(nodes[j].x, nodes[j].y); + ctx.strokeStyle = `rgba(34, 211, 238, ${alpha})`; + ctx.lineWidth = 0.8; + ctx.stroke(); + } + } + } + + // Nodes + nodes.forEach((n, i) => { + const r = n.radius * (1 + 0.2 * Math.sin(n.pulse)); + const color = nodeColors[i]; + + // Glow + const grd = ctx.createRadialGradient(n.x, n.y, 0, n.x, n.y, r * 4); + grd.addColorStop(0, color + "99"); + grd.addColorStop(1, color + "00"); + ctx.beginPath(); + ctx.arc(n.x, n.y, r * 4, 0, Math.PI * 2); + ctx.fillStyle = grd; + ctx.fill(); + + // Core dot + ctx.beginPath(); + ctx.arc(n.x, n.y, r, 0, Math.PI * 2); + ctx.fillStyle = color; + ctx.fill(); + }); + + animRef.current = requestAnimationFrame(draw); + }; + + draw(); + + const handleResize = () => { + setSize(); + }; + window.addEventListener("resize", handleResize); + + return () => { + if (animRef.current) cancelAnimationFrame(animRef.current); + window.removeEventListener("resize", handleResize); + }; + }, []); + + return ( +
+ + {/* Fade out bottom edge to blend with section */} +
+
+ ); +} \ No newline at end of file diff --git a/FrontEnd/my-app/components/homepage/StatsCounter.tsx b/FrontEnd/my-app/components/homepage/StatsCounter.tsx new file mode 100644 index 0000000..17ddc78 --- /dev/null +++ b/FrontEnd/my-app/components/homepage/StatsCounter.tsx @@ -0,0 +1,97 @@ +"use client"; + +import { useEffect, useRef, useState } from "react"; + +interface Stat { + label: string; + target: number; + prefix?: string; + suffix?: string; + decimals?: number; +} + +const STATS: Stat[] = [ + { label: "XLM Distributed", target: 2.5, prefix: "", suffix: "M+", decimals: 1 }, + { label: "Quests Completed", target: 10, prefix: "", suffix: "K+", decimals: 0 }, + { label: "Active Quests", target: 5, prefix: "", suffix: "K+", decimals: 0 }, +]; + +function useCountUp(target: number, decimals = 0, active: boolean) { + const [count, setCount] = useState(0); + const rafRef = useRef(null); + + useEffect(() => { + if (!active) return; + const duration = 1800; + const start = performance.now(); + + const step = (now: number) => { + const progress = Math.min((now - start) / duration, 1); + const eased = 1 - Math.pow(1 - progress, 3); + setCount(parseFloat((eased * target).toFixed(decimals))); + if (progress < 1) rafRef.current = requestAnimationFrame(step); + }; + + rafRef.current = requestAnimationFrame(step); + return () => { + if (rafRef.current) cancelAnimationFrame(rafRef.current); + }; + }, [target, decimals, active]); + + return count; +} + +function StatItem({ stat, active }: { stat: Stat; active: boolean }) { + const count = useCountUp(stat.target, stat.decimals ?? 0, active); + const display = stat.decimals + ? count.toFixed(stat.decimals) + : Math.round(count).toLocaleString(); + + return ( +
+ + {stat.prefix} + {display} + {stat.suffix} + + {stat.label} +
+ ); +} + +export default function StatsCounter() { + const ref = useRef(null); + const [active, setActive] = useState(false); + + useEffect(() => { + const el = ref.current; + if (!el) return; + const observer = new IntersectionObserver( + ([entry]) => { + if (entry.isIntersecting) { + setActive(true); + observer.disconnect(); + } + }, + { threshold: 0.3 } + ); + observer.observe(el); + return () => observer.disconnect(); + }, []); + + return ( +
+ {STATS.map((stat) => ( + + ))} +
+ ); +} \ No newline at end of file diff --git a/FrontEnd/my-app/components/homepage/TrustIndicators.tsx b/FrontEnd/my-app/components/homepage/TrustIndicators.tsx new file mode 100644 index 0000000..1e900d7 --- /dev/null +++ b/FrontEnd/my-app/components/homepage/TrustIndicators.tsx @@ -0,0 +1,28 @@ +"use client"; + +const INDICATORS = [ + { icon: "⚡", label: "5-Second Settlement" }, + { icon: "✅", label: "On-Chain Verification" }, + { icon: "🏆", label: "Earn XP & Badges" }, +]; + +export default function TrustIndicators() { + return ( +
+ {INDICATORS.map(({ icon, label }) => ( +
+ + {label} +
+ ))} +
+ ); +} \ No newline at end of file diff --git a/FrontEnd/my-app/package-lock.json b/FrontEnd/my-app/package-lock.json index 87bb443..4a2b47d 100644 --- a/FrontEnd/my-app/package-lock.json +++ b/FrontEnd/my-app/package-lock.json @@ -85,6 +85,7 @@ "integrity": "sha512-CGOfOJqWjg2qW/Mb6zNsDm+u5vFQ8DxXfbM09z69p5Z6+mE1ikP2jUXw+j42Pf1XTYED2Rni5f95npYeuwMDQA==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@babel/code-frame": "^7.29.0", "@babel/generator": "^7.29.0", @@ -684,17 +685,6 @@ "@floating-ui/utils": "^0.2.11" } }, - "node_modules/@floating-ui/dom": { - "version": "1.7.6", - "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.7.6.tgz", - "integrity": "sha512-9gZSAI5XM36880PPMm//9dfiEngYoC6Am2izES1FF406YFsjvyBMmeJ2g4SAju3xWwtuynNRFL2s9hgxpLI5SQ==", - "license": "MIT", - "optional": true, - "dependencies": { - "@floating-ui/core": "^1.7.5", - "@floating-ui/utils": "^0.2.11" - } - }, "node_modules/@floating-ui/utils": { "version": "0.2.11", "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.11.tgz", @@ -1487,7 +1477,6 @@ "resolved": "https://registry.npmjs.org/@near-js/accounts/-/accounts-1.4.1.tgz", "integrity": "sha512-ni3QT9H3NdrbVVKyx56yvz93r89Dvpc/vgVtiIK2OdXjkK6jcj+UKMDRQ6F7rd9qJOInLkHZbVBtcR6j1CXLjw==", "license": "ISC", - "peer": true, "dependencies": { "@near-js/crypto": "1.4.2", "@near-js/providers": "1.0.3", @@ -1507,8 +1496,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/borsh/-/borsh-1.0.0.tgz", "integrity": "sha512-fSVWzzemnyfF89EPwlUNsrS5swF5CrtiN4e+h0/lLf4dz2he4L3ndM20PS9wj7ICSkXJe/TQUHdaPTq15b1mNQ==", - "license": "Apache-2.0", - "peer": true + "license": "Apache-2.0" }, "node_modules/@near-js/crypto": { "version": "1.4.2", @@ -1535,7 +1523,6 @@ "resolved": "https://registry.npmjs.org/@near-js/keystores/-/keystores-0.2.2.tgz", "integrity": "sha512-DLhi/3a4qJUY+wgphw2Jl4S+L0AKsUYm1mtU0WxKYV5OBwjOXvbGrXNfdkheYkfh3nHwrQgtjvtszX6LrRXLLw==", "license": "ISC", - "peer": true, "dependencies": { "@near-js/crypto": "1.4.2", "@near-js/types": "0.3.1" @@ -1546,7 +1533,6 @@ "resolved": "https://registry.npmjs.org/@near-js/keystores-browser/-/keystores-browser-0.2.2.tgz", "integrity": "sha512-Pxqm7WGtUu6zj32vGCy9JcEDpZDSB5CCaLQDTQdF3GQyL0flyRv2I/guLAgU5FLoYxU7dJAX9mslJhPW7P2Bfw==", "license": "ISC", - "peer": true, "dependencies": { "@near-js/crypto": "1.4.2", "@near-js/keystores": "0.2.2" @@ -1557,7 +1543,6 @@ "resolved": "https://registry.npmjs.org/@near-js/keystores-node/-/keystores-node-0.1.2.tgz", "integrity": "sha512-MWLvTszZOVziiasqIT/LYNhUyWqOJjDGlsthOsY6dTL4ZcXjjmhmzrbFydIIeQr+CcEl5wukTo68ORI9JrHl6g==", "license": "ISC", - "peer": true, "dependencies": { "@near-js/crypto": "1.4.2", "@near-js/keystores": "0.2.2" @@ -1568,7 +1553,6 @@ "resolved": "https://registry.npmjs.org/@near-js/providers/-/providers-1.0.3.tgz", "integrity": "sha512-VJMboL14R/+MGKnlhhE3UPXCGYvMd1PpvF9OqZ9yBbulV7QVSIdTMfY4U1NnDfmUC2S3/rhAEr+3rMrIcNS7Fg==", "license": "ISC", - "peer": true, "dependencies": { "@near-js/transactions": "1.3.3", "@near-js/types": "0.3.1", @@ -1584,8 +1568,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/borsh/-/borsh-1.0.0.tgz", "integrity": "sha512-fSVWzzemnyfF89EPwlUNsrS5swF5CrtiN4e+h0/lLf4dz2he4L3ndM20PS9wj7ICSkXJe/TQUHdaPTq15b1mNQ==", - "license": "Apache-2.0", - "peer": true + "license": "Apache-2.0" }, "node_modules/@near-js/providers/node_modules/node-fetch": { "version": "2.6.7", @@ -1593,7 +1576,6 @@ "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", "license": "MIT", "optional": true, - "peer": true, "dependencies": { "whatwg-url": "^5.0.0" }, @@ -1614,7 +1596,6 @@ "resolved": "https://registry.npmjs.org/@near-js/signers/-/signers-0.2.2.tgz", "integrity": "sha512-M6ib+af9zXAPRCjH2RyIS0+RhCmd9gxzCeIkQ+I2A3zjgGiEDkBZbYso9aKj8Zh2lPKKSH7h+u8JGymMOSwgyw==", "license": "ISC", - "peer": true, "dependencies": { "@near-js/crypto": "1.4.2", "@near-js/keystores": "0.2.2", @@ -1626,7 +1607,6 @@ "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.3.tgz", "integrity": "sha512-V7/fPHgl+jsVPXqqeOzT8egNj2iBIVt+ECeMMG8TdcnTikP3oaBtUVqpT/gYCR68aEBJSF+XbYUxStjbFMqIIA==", "license": "MIT", - "peer": true, "engines": { "node": ">= 16" }, @@ -1639,7 +1619,6 @@ "resolved": "https://registry.npmjs.org/@near-js/transactions/-/transactions-1.3.3.tgz", "integrity": "sha512-1AXD+HuxlxYQmRTLQlkVmH+RAmV3HwkAT8dyZDu+I2fK/Ec9BQHXakOJUnOBws3ihF+akQhamIBS5T0EXX/Ylw==", "license": "ISC", - "peer": true, "dependencies": { "@near-js/crypto": "1.4.2", "@near-js/signers": "0.2.2", @@ -1653,8 +1632,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/borsh/-/borsh-1.0.0.tgz", "integrity": "sha512-fSVWzzemnyfF89EPwlUNsrS5swF5CrtiN4e+h0/lLf4dz2he4L3ndM20PS9wj7ICSkXJe/TQUHdaPTq15b1mNQ==", - "license": "Apache-2.0", - "peer": true + "license": "Apache-2.0" }, "node_modules/@near-js/types": { "version": "0.3.1", @@ -1679,7 +1657,6 @@ "resolved": "https://registry.npmjs.org/@near-js/wallet-account/-/wallet-account-1.3.3.tgz", "integrity": "sha512-GDzg/Kz0GBYF7tQfyQQQZ3vviwV8yD+8F2lYDzsWJiqIln7R1ov0zaXN4Tii86TeS21KPn2hHAsVu3Y4txa8OQ==", "license": "ISC", - "peer": true, "dependencies": { "@near-js/accounts": "1.4.1", "@near-js/crypto": "1.4.2", @@ -1696,8 +1673,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/borsh/-/borsh-1.0.0.tgz", "integrity": "sha512-fSVWzzemnyfF89EPwlUNsrS5swF5CrtiN4e+h0/lLf4dz2he4L3ndM20PS9wj7ICSkXJe/TQUHdaPTq15b1mNQ==", - "license": "Apache-2.0", - "peer": true + "license": "Apache-2.0" }, "node_modules/@near-wallet-selector/core": { "version": "8.10.2", @@ -1874,6 +1850,7 @@ "resolved": "https://registry.npmjs.org/@ngneat/elf/-/elf-2.5.1.tgz", "integrity": "sha512-13BItNZFgHglTiXuP9XhisNczwQ5QSzH+imAv9nAPsdbCq/3ortqkIYRnlxB8DGPVcuIjLujQ4OcZa+9QWgZtw==", "license": "MIT", + "peer": true, "peerDependencies": { "rxjs": ">=7.0.0" } @@ -1984,6 +1961,7 @@ "integrity": "sha512-akea+6bHYBBfA9uQqSYmlJXn61cTa+jbO87xVLCWbTqbWadRVmhxlXATaOjOgcBaWU4ePo0wB41KMFv3o35IXA==", "devOptional": true, "license": "Apache-2.0", + "peer": true, "dependencies": { "playwright": "1.58.2" }, @@ -2432,6 +2410,7 @@ "resolved": "https://registry.npmjs.org/@solana/kit/-/kit-2.3.0.tgz", "integrity": "sha512-sb6PgwoW2LjE5oTFu4lhlS/cGt/NB3YrShEyx7JgWFWysfgLdJnhwWThgwy/4HjNsmtMrQGWVls0yVBHcMvlMQ==", "license": "MIT", + "peer": true, "dependencies": { "@solana/accounts": "2.3.0", "@solana/addresses": "2.3.0", @@ -2788,6 +2767,7 @@ "resolved": "https://registry.npmjs.org/@solana/sysvars/-/sysvars-2.3.0.tgz", "integrity": "sha512-LvjADZrpZ+CnhlHqfI5cmsRzX9Rpyb1Ox2dMHnbsRNzeKAMhu9w4ZBIaeTdO322zsTr509G1B+k2ABD3whvUBA==", "license": "MIT", + "peer": true, "dependencies": { "@solana/accounts": "2.3.0", "@solana/codecs": "2.3.0", @@ -2910,6 +2890,7 @@ "resolved": "https://registry.npmjs.org/@solana/web3.js/-/web3.js-1.98.4.tgz", "integrity": "sha512-vv9lfnvjUsRiq//+j5pBdXig0IQdtzA0BRZ3bXEP4KaIyF1CcaydWqgyzQgfZMNIsWNWmG+AUHwPy4AHOD6gpw==", "license": "MIT", + "peer": true, "dependencies": { "@babel/runtime": "^7.25.0", "@noble/curves": "^1.4.2", @@ -3114,7 +3095,6 @@ "resolved": "https://registry.npmjs.org/@stellar/stellar-base/-/stellar-base-14.1.0.tgz", "integrity": "sha512-A8kFli6QGy22SRF45IjgPAJfUNGjnI+R7g4DF5NZYVsD1kGf7B4ITyc4OPclLV9tqNI4/lXxafGEw0JEUbHixw==", "license": "Apache-2.0", - "peer": true, "dependencies": { "@noble/curves": "^1.9.6", "@stellar/js-xdr": "^3.1.2", @@ -3132,7 +3112,6 @@ "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.9.7.tgz", "integrity": "sha512-gbKGcRUYIjA3/zCCNaWDciTMFI0dCkvou3TL8Zmy5Nc7sJ47a0jtOeZoTaMxkuqRo9cRhjOdZJXegxYE5FN/xw==", "license": "MIT", - "peer": true, "dependencies": { "@noble/hashes": "1.8.0" }, @@ -3148,7 +3127,6 @@ "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.8.0.tgz", "integrity": "sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A==", "license": "MIT", - "peer": true, "engines": { "node": "^14.21.3 || >=16" }, @@ -3161,6 +3139,7 @@ "resolved": "https://registry.npmjs.org/@stellar/stellar-sdk/-/stellar-sdk-13.3.0.tgz", "integrity": "sha512-8+GHcZLp+mdin8gSjcgfb/Lb6sSMYRX6Nf/0LcSJxvjLQR0XHpjGzOiRbYb2jSXo51EnA6kAV5j+4Pzh5OUKUg==", "license": "Apache-2.0", + "peer": true, "dependencies": { "@stellar/stellar-base": "^13.1.0", "axios": "^1.8.4", @@ -3480,6 +3459,7 @@ "resolved": "https://registry.npmjs.org/@tiptap/core/-/core-3.21.0.tgz", "integrity": "sha512-IfnQiuEeabDSPr1C/zHFTbnvlTf5z0DE/d/xz4C6bkL4ZBDJ3rr99h2qsaV0l8F+kbNswZMlQdM8rxNlMy95fQ==", "license": "MIT", + "peer": true, "funding": { "type": "github", "url": "https://github.com/sponsors/ueberdosis" @@ -3702,6 +3682,7 @@ "resolved": "https://registry.npmjs.org/@tiptap/extension-list/-/extension-list-3.21.0.tgz", "integrity": "sha512-KeBlEtLrGce2d3dgL89hmwWEtREuzlW4XY5bYWpKNvCbFqvdSb3n7vkdkw32YclZmMWxAcABgW6ucCStkE0rsQ==", "license": "MIT", + "peer": true, "funding": { "type": "github", "url": "https://github.com/sponsors/ueberdosis" @@ -3820,6 +3801,7 @@ "resolved": "https://registry.npmjs.org/@tiptap/extensions/-/extensions-3.21.0.tgz", "integrity": "sha512-MN1uh5PmHT1F2BNsbc21MIS0AMFFA73oODlp/4ckpBR4o5AxRwV+8f43Cd52UL4MgMkKj/A+QfZ7iK9IDb0h5A==", "license": "MIT", + "peer": true, "funding": { "type": "github", "url": "https://github.com/sponsors/ueberdosis" @@ -3834,6 +3816,7 @@ "resolved": "https://registry.npmjs.org/@tiptap/pm/-/pm-3.21.0.tgz", "integrity": "sha512-I3sNo7oMMsR6FFz1ecvPb9uCF0VQuS2WV67j8Io2M7DJicRWCE/GM5DaiYjTeWBbnByk6BuG0txoJATAqPVliQ==", "license": "MIT", + "peer": true, "dependencies": { "prosemirror-changeset": "^2.3.0", "prosemirror-collab": "^1.3.1", @@ -3927,7 +3910,6 @@ "resolved": "https://registry.npmjs.org/@trezor/analytics/-/analytics-1.5.0.tgz", "integrity": "sha512-evILW5XJEmfPlf0TY1duOLtGJ47pdGeSKVE3P75ODEUsRNxtPVqlkOUBPmYpCxPnzS8XDmkatT8lf9/DF0G6nA==", "license": "See LICENSE.md in repo root", - "peer": true, "dependencies": { "@trezor/env-utils": "1.5.0", "@trezor/utils": "9.5.0" @@ -3941,7 +3923,6 @@ "resolved": "https://registry.npmjs.org/@trezor/blockchain-link/-/blockchain-link-2.6.1.tgz", "integrity": "sha512-SPwxkihOMI0o79BOy0RkfgVL2meuJhIe1yWHCeR8uoqf5KGblUyeXxvNCy6w8ckJ9LRpM1+bZhsUODuNs3083Q==", "license": "SEE LICENSE IN LICENSE.md", - "peer": true, "dependencies": { "@solana-program/compute-budget": "^0.8.0", "@solana-program/stake": "^0.2.1", @@ -3971,7 +3952,6 @@ "resolved": "https://registry.npmjs.org/@trezor/blockchain-link-types/-/blockchain-link-types-1.5.1.tgz", "integrity": "sha512-Idavz6LwLBW8sXc69fh5AJEnl666EDl2Nt3io7updvBgOR0/P12I900DgjNhCKtiWuv66A33/5RE7zLcj3lfnw==", "license": "See LICENSE.md in repo root", - "peer": true, "dependencies": { "@trezor/utils": "9.5.0", "@trezor/utxo-lib": "2.5.0" @@ -3985,7 +3965,6 @@ "resolved": "https://registry.npmjs.org/@trezor/blockchain-link-utils/-/blockchain-link-utils-1.5.2.tgz", "integrity": "sha512-OSS5OEE98FMnYfjoEALPjBt7ebjC/FKnq3HOolHdEWXBpVlXZNN2+Vo1R9J6WbZUU087sHuUTJJy/GJYWY13Tg==", "license": "See LICENSE.md in repo root", - "peer": true, "dependencies": { "@mobily/ts-belt": "^3.13.1", "@stellar/stellar-sdk": "14.2.0", @@ -4004,7 +3983,6 @@ "integrity": "sha512-7nh2ogzLRMhfkIC0fGjn1LHUzk3jqVw8tjAuTt5ADWfL9CSGBL18ILucE9igz2L/RU2AZgeAvhujAnW91Ut/oQ==", "hasInstallScript": true, "license": "Apache-2.0", - "peer": true, "dependencies": { "@stellar/stellar-base": "^14.0.1", "axios": "^1.12.2", @@ -4025,7 +4003,6 @@ "integrity": "sha512-7nh2ogzLRMhfkIC0fGjn1LHUzk3jqVw8tjAuTt5ADWfL9CSGBL18ILucE9igz2L/RU2AZgeAvhujAnW91Ut/oQ==", "hasInstallScript": true, "license": "Apache-2.0", - "peer": true, "dependencies": { "@stellar/stellar-base": "^14.0.1", "axios": "^1.12.2", @@ -4045,7 +4022,6 @@ "resolved": "https://registry.npmjs.org/@trezor/blockchain-link-types/-/blockchain-link-types-1.5.0.tgz", "integrity": "sha512-wD6FKKxNr89MTWYL+NikRkBcWXhiWNFR0AuDHW6GHmlCEHhKu/hAvQtcER8X5jt/Wd0hSKNZqtHBXJ1ZkpJ6rg==", "license": "See LICENSE.md in repo root", - "peer": true, "dependencies": { "@trezor/utils": "9.5.0", "@trezor/utxo-lib": "2.5.0" @@ -4059,7 +4035,6 @@ "resolved": "https://registry.npmjs.org/@trezor/blockchain-link-utils/-/blockchain-link-utils-1.5.1.tgz", "integrity": "sha512-2tDGLEj5jzydjsJQONGTWVmCDDy6FTZ4ytr1/2gE6anyYEJU8MbaR+liTt3UvcP5jwZTNutwYLvZixRfrb8JpA==", "license": "See LICENSE.md in repo root", - "peer": true, "dependencies": { "@mobily/ts-belt": "^3.13.1", "@stellar/stellar-sdk": "14.2.0", @@ -4077,7 +4052,6 @@ "resolved": "https://registry.npmjs.org/@trezor/protobuf/-/protobuf-1.5.1.tgz", "integrity": "sha512-nAkaCCAqLpErBd+IuKeG5MpbyLR/2RMgCw18TWc80m1Ws/XgQirhHY9Jbk6gLImTXb9GTrxP0+MDSahzd94rSA==", "license": "See LICENSE.md in repo root", - "peer": true, "dependencies": { "@trezor/schema-utils": "1.4.0", "long": "5.2.5", @@ -4092,7 +4066,6 @@ "resolved": "https://registry.npmjs.org/@trezor/connect/-/connect-9.7.2.tgz", "integrity": "sha512-Sn6F4mNH+yi2vAHy29kwhs50bRLn92drg3znm3pkY+8yEBxI4MmuP8sKYjdgUEJnQflWh80KlcvEDeVa4olVRA==", "license": "SEE LICENSE IN LICENSE.md", - "peer": true, "dependencies": { "@ethereumjs/common": "^10.1.0", "@ethereumjs/tx": "^10.1.0", @@ -4137,7 +4110,6 @@ "resolved": "https://registry.npmjs.org/@trezor/connect-analytics/-/connect-analytics-1.4.0.tgz", "integrity": "sha512-hy2J2oeIhRC/e1bOWXo5dsVMVnDwO2UKnxhR6FD8PINR3jgM6PWAXc6k33WJsBcyiTzwMP7/xPysLcgNJH5o4w==", "license": "See LICENSE.md in repo root", - "peer": true, "dependencies": { "@trezor/analytics": "1.5.0" }, @@ -4150,7 +4122,6 @@ "resolved": "https://registry.npmjs.org/@trezor/connect-common/-/connect-common-0.5.1.tgz", "integrity": "sha512-wdpVCwdylBh4SBO5Ys40tB/d59UlfjmxgBHDkkLgaR+JcqkthCfiw5VlUrV9wu65lquejAZhA5KQL4mUUUhCow==", "license": "SEE LICENSE IN LICENSE.md", - "peer": true, "dependencies": { "@trezor/env-utils": "1.5.0", "@trezor/type-utils": "1.2.0", @@ -4508,15 +4479,13 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/base-x/-/base-x-5.0.1.tgz", "integrity": "sha512-M7uio8Zt++eg3jPj+rHMfCC+IuygQHHCOU+IYsVtik6FWjuYpVt/+MRKcgsAMHh8mMFAwnB+Bs+mTrFiXjMzKg==", - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/@trezor/connect/node_modules/bs58": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/bs58/-/bs58-6.0.0.tgz", "integrity": "sha512-PD0wEnEYg6ijszw/u8s+iI3H17cTymlrwkKhDhPZq+Sokl3AU4htyBFTjAeNAlCCmg0f53g6ih3jATyCKftTfw==", "license": "MIT", - "peer": true, "dependencies": { "base-x": "^5.0.0" } @@ -4526,7 +4495,6 @@ "resolved": "https://registry.npmjs.org/@trezor/crypto-utils/-/crypto-utils-1.2.0.tgz", "integrity": "sha512-9i1NrfW1IE6JO910ut7xrx4u5LxE++GETbpJhWLj4P5xpuGDDSDLEn/MXaYisls2DpE897aOrGPaa1qyt8V6tw==", "license": "SEE LICENSE IN LICENSE.md", - "peer": true, "peerDependencies": { "tslib": "^2.6.2" } @@ -4536,7 +4504,6 @@ "resolved": "https://registry.npmjs.org/@trezor/device-authenticity/-/device-authenticity-1.1.2.tgz", "integrity": "sha512-313uSXYR4XKDv3CjtCpgHA+yEe9xxqN7EFl/D68FEn70SPsuWI0+2zUvjPPh6TIOh/EcLv7hCO/QTHUAGd7ZWQ==", "license": "See LICENSE.md in repo root", - "peer": true, "dependencies": { "@noble/curves": "^2.0.1", "@trezor/crypto-utils": "1.2.0", @@ -4550,7 +4517,6 @@ "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-2.0.1.tgz", "integrity": "sha512-vs1Az2OOTBiP4q0pwjW5aF0xp9n4MxVrmkFBxc6EKZc6ddYx5gaZiAsZoq0uRRXWbi3AT/sBqn05eRPtn1JCPw==", "license": "MIT", - "peer": true, "dependencies": { "@noble/hashes": "2.0.1" }, @@ -4566,7 +4532,6 @@ "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-2.0.1.tgz", "integrity": "sha512-XlOlEbQcE9fmuXxrVTXCTlG2nlRXa9Rj3rr5Ue/+tX+nmkgbX720YHh0VR3hBF9xDvwnb8D2shVGOwNx+ulArw==", "license": "MIT", - "peer": true, "engines": { "node": ">= 20.19.0" }, @@ -4578,15 +4543,13 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/@trezor/device-utils/-/device-utils-1.2.0.tgz", "integrity": "sha512-Aqp7pIooFTx21zRUtTI6i1AS4d9Lrx7cclvksh2nJQF9WJvbzuCXshEGkLoOsHwhQrCl3IXfbGuMdA12yDenPA==", - "license": "See LICENSE.md in repo root", - "peer": true + "license": "See LICENSE.md in repo root" }, "node_modules/@trezor/env-utils": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/@trezor/env-utils/-/env-utils-1.5.0.tgz", "integrity": "sha512-u1TN7dMQ5Qhpbae08Z4JJmI9fQrbbJ4yj8eIAsuzMQn6vb+Sg9vbntl+IDsZ1G9WeI73uHTLu1wWMmAgiujH8w==", "license": "See LICENSE.md in repo root", - "peer": true, "dependencies": { "ua-parser-js": "^2.0.4" }, @@ -4613,7 +4576,6 @@ "resolved": "https://registry.npmjs.org/@trezor/protobuf/-/protobuf-1.5.2.tgz", "integrity": "sha512-zViaL1jKue8DUTVEDg0C/lMipqNMd/Z3kr29/+MeZOoupjaXIQ2Lqp3WAMe8hvNTKKX8aNQH9JrbapJ6w9FMXw==", "license": "See LICENSE.md in repo root", - "peer": true, "dependencies": { "@trezor/schema-utils": "1.4.0", "long": "5.2.5", @@ -4628,7 +4590,6 @@ "resolved": "https://registry.npmjs.org/@trezor/protocol/-/protocol-1.3.0.tgz", "integrity": "sha512-rmrxbDrdgxTouBPbZcSeqU7ba/e5WVT1dxvxxEntHqRdTiDl7d3VK+BErCrlyol8EH5YCqEF3/rXt0crSOfoFw==", "license": "See LICENSE.md in repo root", - "peer": true, "peerDependencies": { "tslib": "^2.6.2" } @@ -4638,7 +4599,6 @@ "resolved": "https://registry.npmjs.org/@trezor/schema-utils/-/schema-utils-1.4.0.tgz", "integrity": "sha512-K7upSeh7VDrORaIC4KAxYVW93XNlohmUnH5if/5GKYmTdQSRp1nBkO6Jm+Z4hzIthdnz/1aLgnbeN3bDxWLRxA==", "license": "See LICENSE.md in repo root", - "peer": true, "dependencies": { "@sinclair/typebox": "^0.33.7", "ts-mixer": "^6.0.3" @@ -4652,7 +4612,6 @@ "resolved": "https://registry.npmjs.org/@trezor/transport/-/transport-1.6.2.tgz", "integrity": "sha512-w0HlD1fU+qTGO3tefBGHF/YS/ts/TWFja9FGIJ4+7+Z9NphvIG06HGvy2HzcD9AhJy9pvDeIsyoM2TTZTiyjkQ==", "license": "SEE LICENSE IN LICENSE.md", - "peer": true, "dependencies": { "@trezor/protobuf": "1.5.2", "@trezor/protocol": "1.3.0", @@ -4669,15 +4628,13 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/@trezor/type-utils/-/type-utils-1.2.0.tgz", "integrity": "sha512-+E2QntxkyQuYfQQyl8RvT01tq2i5Dp/LFUOXuizF+KVOqsZBjBY43j5hewcCO3+MokD7deDiPyekbUEN5/iVlw==", - "license": "See LICENSE.md in repo root", - "peer": true + "license": "See LICENSE.md in repo root" }, "node_modules/@trezor/utils": { "version": "9.5.0", "resolved": "https://registry.npmjs.org/@trezor/utils/-/utils-9.5.0.tgz", "integrity": "sha512-kdyMyDbxzvOZmwBNvTjAK+C/kzyOz8T4oUbFvq+KaXn5mBFf1uf8rq5X2HkxgdYRPArtHS3PxLKsfkNCdhCYtQ==", "license": "SEE LICENSE IN LICENSE.md", - "peer": true, "dependencies": { "bignumber.js": "^9.3.1" }, @@ -4690,7 +4647,6 @@ "resolved": "https://registry.npmjs.org/@trezor/utxo-lib/-/utxo-lib-2.5.0.tgz", "integrity": "sha512-Fa2cZh0037oX6AHNLfpFIj65UR/OoX0ZJTocFuQASe77/1PjZHysf6BvvGfmzuFToKfrAQ+DM/1Sx+P/vnyNmA==", "license": "SEE LICENSE IN LICENSE.md", - "peer": true, "dependencies": { "@trezor/utils": "9.5.0", "bech32": "^2.0.0", @@ -4718,15 +4674,13 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/base-x/-/base-x-5.0.1.tgz", "integrity": "sha512-M7uio8Zt++eg3jPj+rHMfCC+IuygQHHCOU+IYsVtik6FWjuYpVt/+MRKcgsAMHh8mMFAwnB+Bs+mTrFiXjMzKg==", - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/@trezor/utxo-lib/node_modules/bs58": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/bs58/-/bs58-6.0.0.tgz", "integrity": "sha512-PD0wEnEYg6ijszw/u8s+iI3H17cTymlrwkKhDhPZq+Sokl3AU4htyBFTjAeNAlCCmg0f53g6ih3jATyCKftTfw==", "license": "MIT", - "peer": true, "dependencies": { "base-x": "^5.0.0" } @@ -4736,7 +4690,6 @@ "resolved": "https://registry.npmjs.org/@trezor/websocket-client/-/websocket-client-1.3.0.tgz", "integrity": "sha512-9KQSaVc3NtmM6rFFj1e+9bM0C5mVKVidbnxlfzuBJu7G2YMRdIdLPcAXhvmRZjs40uzDuBeApK+p547kODz2ug==", "license": "SEE LICENSE IN LICENSE.md", - "peer": true, "dependencies": { "@trezor/utils": "9.5.0", "ws": "^8.18.0" @@ -4827,6 +4780,7 @@ "resolved": "https://registry.npmjs.org/@types/react/-/react-19.2.14.tgz", "integrity": "sha512-ilcTH/UniCkMdtexkoCN0bI7pMcJDvmQFPvuPvmEaYA/NSfFTAgdUSLAoVjaRJm7+6PvcM+q1zYOwS4wTYMF9w==", "license": "MIT", + "peer": true, "dependencies": { "csstype": "^3.2.2" } @@ -4836,6 +4790,7 @@ "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-19.2.3.tgz", "integrity": "sha512-jp2L/eY6fn+KgVVQAOqYItbF0VY/YApe5Mz2F0aykSO8gx31bYCZyvSeYxCHKvzHG5eZjc+zyaS5BrBWya2+kQ==", "license": "MIT", + "peer": true, "peerDependencies": { "@types/react": "^19.2.0" } @@ -4924,6 +4879,7 @@ "integrity": "sha512-30ScMRHIAD33JJQkgfGW1t8CURZtjc2JpTrq5n2HFhOefbAhb7ucc7xJwdWcrEtqUIYJ73Nybpsggii6GtAHjA==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@typescript-eslint/scope-manager": "8.57.2", "@typescript-eslint/types": "8.57.2", @@ -5586,21 +5542,6 @@ "ws": "^7.5.1" } }, - "node_modules/@walletconnect/jsonrpc-ws-connection/node_modules/utf-8-validate": { - "version": "5.0.10", - "resolved": "https://registry.npmjs.org/utf-8-validate/-/utf-8-validate-5.0.10.tgz", - "integrity": "sha512-Z6czzLq4u8fPOyx7TU6X3dvUZVvoJmxSQ+IcrlmagKhilxlhZgxPK6C5Jqbkw1IDUmFTM+cz9QDnnLTwDz/2gQ==", - "hasInstallScript": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "node-gyp-build": "^4.3.0" - }, - "engines": { - "node": ">=6.14.2" - } - }, "node_modules/@walletconnect/jsonrpc-ws-connection/node_modules/ws": { "version": "7.5.10", "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.10.tgz", @@ -5923,6 +5864,7 @@ "integrity": "sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==", "dev": true, "license": "MIT", + "peer": true, "bin": { "acorn": "bin/acorn" }, @@ -6196,7 +6138,6 @@ "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.10.1.tgz", "integrity": "sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==", "license": "MIT", - "peer": true, "dependencies": { "bn.js": "^4.0.0", "inherits": "^2.0.1", @@ -6207,8 +6148,7 @@ "version": "4.12.3", "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.3.tgz", "integrity": "sha512-fGTi3gxV/23FTYdAoUtLYp6qySe2KE3teyZitipKNRuVYcBkoP/bB3guXN/XVKUe9mxCHXnc9C4ocyz8OmgN0g==", - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/ast-types-flow": { "version": "0.0.8", @@ -6534,7 +6474,6 @@ "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", "license": "MIT", - "peer": true, "dependencies": { "buffer-xor": "^1.0.3", "cipher-base": "^1.0.0", @@ -6549,7 +6488,6 @@ "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz", "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", "license": "MIT", - "peer": true, "dependencies": { "browserify-aes": "^1.0.4", "browserify-des": "^1.0.0", @@ -6561,7 +6499,6 @@ "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz", "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", "license": "MIT", - "peer": true, "dependencies": { "cipher-base": "^1.0.1", "des.js": "^1.0.0", @@ -6574,7 +6511,6 @@ "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.1.1.tgz", "integrity": "sha512-YBjSAiTqM04ZVei6sXighu679a3SqWORA3qZTEqZImnlkDIFtKc6pNutpjyZ8RJTjQtuYfeetkxM11GwoYXMIQ==", "license": "MIT", - "peer": true, "dependencies": { "bn.js": "^5.2.1", "randombytes": "^2.1.0", @@ -6589,7 +6525,6 @@ "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.5.tgz", "integrity": "sha512-C2AUdAJg6rlM2W5QMp2Q4KGQMVBwR1lIimTsUnutJ8bMpW5B52pGpR2gEnNBNwijumDo5FojQ0L9JrXA8m4YEw==", "license": "ISC", - "peer": true, "dependencies": { "bn.js": "^5.2.2", "browserify-rsa": "^4.1.1", @@ -6609,15 +6544,13 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/browserify-sign/node_modules/readable-stream": { "version": "2.3.8", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", "license": "MIT", - "peer": true, "dependencies": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", @@ -6632,15 +6565,13 @@ "version": "5.1.2", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/browserify-sign/node_modules/string_decoder": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "license": "MIT", - "peer": true, "dependencies": { "safe-buffer": "~5.1.0" } @@ -6649,8 +6580,7 @@ "version": "5.1.2", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/browserslist": { "version": "4.28.1", @@ -6672,6 +6602,7 @@ } ], "license": "MIT", + "peer": true, "dependencies": { "baseline-browser-mapping": "^2.9.0", "caniuse-lite": "^1.0.30001759", @@ -6754,22 +6685,7 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", "integrity": "sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==", - "license": "MIT", - "peer": true - }, - "node_modules/bufferutil": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/bufferutil/-/bufferutil-4.1.0.tgz", - "integrity": "sha512-ZMANVnAixE6AWWnPzlW2KpUrxhm9woycYvPOo67jWHyFowASTEd9s+QN1EIMsSDtwhIxN4sWE1jotpuDUIgyIw==", - "hasInstallScript": true, - "license": "MIT", - "optional": true, - "dependencies": { - "node-gyp-build": "^4.3.0" - }, - "engines": { - "node": ">=6.14.2" - } + "license": "MIT" }, "node_modules/call-bind": { "version": "1.0.8", @@ -6871,7 +6787,6 @@ "resolved": "https://registry.npmjs.org/cbor/-/cbor-10.0.12.tgz", "integrity": "sha512-exQDevYd7ZQLP4moMQcZkKCVZsXLAtUSflObr3xTh4xzFIv/xBCdvCd6L259kQOUP2kcTC0jvC6PpZIf/WmRXA==", "license": "MIT", - "peer": true, "dependencies": { "nofilter": "^3.0.2" }, @@ -7037,7 +6952,6 @@ "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.4.tgz", "integrity": "sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==", "license": "MIT", - "peer": true, "dependencies": { "bn.js": "^4.1.0", "elliptic": "^6.5.3" @@ -7047,8 +6961,7 @@ "version": "4.12.3", "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.3.tgz", "integrity": "sha512-fGTi3gxV/23FTYdAoUtLYp6qySe2KE3teyZitipKNRuVYcBkoP/bB3guXN/XVKUe9mxCHXnc9C4ocyz8OmgN0g==", - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/create-hash": { "version": "1.2.0", @@ -7130,7 +7043,6 @@ "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", "license": "MIT", - "peer": true, "dependencies": { "browserify-cipher": "^1.0.0", "browserify-sign": "^4.0.0", @@ -7333,7 +7245,6 @@ "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.1.0.tgz", "integrity": "sha512-r17GxjhUCjSRy8aiJpr8/UadFIzMzJGexI3Nmz4ADi9LYSFx4gTBp80+NaX/YsXWWLhpZ7v/v/ubEc/bCNfKwg==", "license": "MIT", - "peer": true, "dependencies": { "inherits": "^2.0.1", "minimalistic-assert": "^1.0.0" @@ -7386,7 +7297,6 @@ "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", "license": "MIT", - "peer": true, "dependencies": { "bn.js": "^4.1.0", "miller-rabin": "^4.0.0", @@ -7397,8 +7307,7 @@ "version": "4.12.3", "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.3.tgz", "integrity": "sha512-fGTi3gxV/23FTYdAoUtLYp6qySe2KE3teyZitipKNRuVYcBkoP/bB3guXN/XVKUe9mxCHXnc9C4ocyz8OmgN0g==", - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/dijkstrajs": { "version": "1.0.3", @@ -7747,6 +7656,7 @@ "integrity": "sha512-XoMjdBOwe/esVgEvLmNsD3IRHkm7fbKIUGvrleloJXUZgDHig2IPWNniv+GwjyJXzuNqVjlr5+4yVUZjycJwfQ==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@eslint-community/eslint-utils": "^4.8.0", "@eslint-community/regexpp": "^4.12.1", @@ -7932,6 +7842,7 @@ "integrity": "sha512-whOE1HFo/qJDyX4SnXzP4N6zOWn79WhnCUY/iDR0mPfQZO8wcYE4JClzI2oZrhBnnMUCBCHZhO6VQyoBU95mZA==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@rtsao/scc": "^1.1.0", "array-includes": "^3.1.9", @@ -8237,7 +8148,6 @@ "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", "license": "MIT", - "peer": true, "dependencies": { "md5.js": "^1.3.4", "safe-buffer": "^5.1.1" @@ -8247,8 +8157,7 @@ "version": "3.1.3", "resolved": "https://registry.npmjs.org/exponential-backoff/-/exponential-backoff-3.1.3.tgz", "integrity": "sha512-ZgEeZXj30q+I0EN+CbSSpIyPaJ5HVQD18Z1m+u1FXbAeT94mr1zw50q4q6jiiC447Nl/YTcIYSAftiGqetwXCA==", - "license": "Apache-2.0", - "peer": true + "license": "Apache-2.0" }, "node_modules/eyes": { "version": "0.1.8", @@ -8575,7 +8484,6 @@ "resolved": "https://registry.npmjs.org/generate-function/-/generate-function-2.3.1.tgz", "integrity": "sha512-eeB5GfMNeevm/GRYq20ShmsaGcmI81kIX2K9XQx5miC8KdHaC6Jm0qQ8ZNeGOi7wYB8OsdxKs+Y2oVuTFuVwKQ==", "license": "MIT", - "peer": true, "dependencies": { "is-property": "^1.0.2" } @@ -8585,7 +8493,6 @@ "resolved": "https://registry.npmjs.org/generate-object-property/-/generate-object-property-1.2.0.tgz", "integrity": "sha512-TuOwZWgJ2VAMEGJvAyPWvpqxSANF0LDpmyHauMjFYzaACvn+QTT/AZomvPCzVBV7yDN3OmwHQ5OvHaeLKre3JQ==", "license": "MIT", - "peer": true, "dependencies": { "is-property": "^1.0.0" } @@ -8962,7 +8869,6 @@ "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==", "license": "MIT", - "peer": true, "dependencies": { "depd": "~1.1.2", "inherits": "2.0.3", @@ -8979,7 +8885,6 @@ "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", "license": "MIT", - "peer": true, "engines": { "node": ">= 0.6" } @@ -8988,8 +8893,7 @@ "version": "2.0.3", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==", - "license": "ISC", - "peer": true + "license": "ISC" }, "node_modules/humanize-ms": { "version": "1.2.1", @@ -9004,7 +8908,8 @@ "version": "6.2.2", "resolved": "https://registry.npmjs.org/idb-keyval/-/idb-keyval-6.2.2.tgz", "integrity": "sha512-yjD9nARJ/jb1g+CvD0tlhUHOrJ9Sy0P8T9MF3YaLlHnSRpwPfpTX0XIvpmw3gAJUmEu3FiICLBDPXVwyEvrleg==", - "license": "Apache-2.0" + "license": "Apache-2.0", + "peer": true }, "node_modules/ieee754": { "version": "1.2.1", @@ -9337,15 +9242,13 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-my-ip-valid/-/is-my-ip-valid-1.0.1.tgz", "integrity": "sha512-jxc8cBcOWbNK2i2aTkCZP6i7wkHF1bqKFrwEHuN5Jtg5BSaZHUZQ/JTOJwoV41YvHnOaRyWWh72T/KvfNz9DJg==", - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/is-my-json-valid": { "version": "2.20.6", "resolved": "https://registry.npmjs.org/is-my-json-valid/-/is-my-json-valid-2.20.6.tgz", "integrity": "sha512-1JQwulVNjx8UqkPE/bqDaxtH4PXCe/2VRh/y3p99heOV87HG4Id5/VfDswd+YiAfHcRTfDlWgISycnHuhZq1aw==", "license": "MIT", - "peer": true, "dependencies": { "generate-function": "^2.0.0", "generate-object-property": "^1.1.0", @@ -9398,8 +9301,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-property/-/is-property-1.0.2.tgz", "integrity": "sha512-Ks/IoX00TtClbGQr4TWXemAnktAQvYB7HzcCxDGqEZU6oCmb2INHuOoKxbtR+HFkmYWBKv/dOZtGRiAjDhj92g==", - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/is-regex": { "version": "1.2.1", @@ -9665,21 +9567,6 @@ "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", "license": "MIT" }, - "node_modules/jayson/node_modules/utf-8-validate": { - "version": "5.0.10", - "resolved": "https://registry.npmjs.org/utf-8-validate/-/utf-8-validate-5.0.10.tgz", - "integrity": "sha512-Z6czzLq4u8fPOyx7TU6X3dvUZVvoJmxSQ+IcrlmagKhilxlhZgxPK6C5Jqbkw1IDUmFTM+cz9QDnnLTwDz/2gQ==", - "hasInstallScript": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "node-gyp-build": "^4.3.0" - }, - "engines": { - "node": ">=6.14.2" - } - }, "node_modules/jayson/node_modules/ws": { "version": "7.5.10", "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.10.tgz", @@ -9795,7 +9682,6 @@ "resolved": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-5.0.1.tgz", "integrity": "sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ==", "license": "MIT", - "peer": true, "engines": { "node": ">=0.10.0" } @@ -10247,8 +10133,7 @@ "version": "0.4.1", "resolved": "https://registry.npmjs.org/lru_map/-/lru_map-0.4.1.tgz", "integrity": "sha512-I+lBvqMMFfqaV8CJCISjI3wbjmwVu/VyOoU7+qtu9d7ioW5klMgsTTiUOUp+DJvfTTzKXoPbyC6YfgkNcyPSOg==", - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/lru-cache": { "version": "5.1.1", @@ -10351,7 +10236,6 @@ "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", "license": "MIT", - "peer": true, "dependencies": { "bn.js": "^4.0.0", "brorand": "^1.0.1" @@ -10364,8 +10248,7 @@ "version": "4.12.3", "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.3.tgz", "integrity": "sha512-fGTi3gxV/23FTYdAoUtLYp6qySe2KE3teyZitipKNRuVYcBkoP/bB3guXN/XVKUe9mxCHXnc9C4ocyz8OmgN0g==", - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/mime-db": { "version": "1.52.0", @@ -10528,7 +10411,6 @@ "resolved": "https://registry.npmjs.org/near-abi/-/near-abi-0.2.0.tgz", "integrity": "sha512-kCwSf/3fraPU2zENK18sh+kKG4uKbEUEQdyWQkmW8ZofmLarObIz2+zAYjA1teDZLeMvEQew3UysnPDXgjneaA==", "license": "(MIT AND Apache-2.0)", - "peer": true, "dependencies": { "@types/json-schema": "^7.0.11" } @@ -10538,7 +10420,6 @@ "resolved": "https://registry.npmjs.org/near-api-js/-/near-api-js-5.1.1.tgz", "integrity": "sha512-h23BGSKxNv8ph+zU6snicstsVK1/CTXsQz4LuGGwoRE24Hj424nSe4+/1tzoiC285Ljf60kPAqRCmsfv9etF2g==", "license": "(MIT AND Apache-2.0)", - "peer": true, "dependencies": { "@near-js/accounts": "1.4.1", "@near-js/crypto": "1.4.2", @@ -10563,15 +10444,13 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/borsh/-/borsh-1.0.0.tgz", "integrity": "sha512-fSVWzzemnyfF89EPwlUNsrS5swF5CrtiN4e+h0/lLf4dz2he4L3ndM20PS9wj7ICSkXJe/TQUHdaPTq15b1mNQ==", - "license": "Apache-2.0", - "peer": true + "license": "Apache-2.0" }, "node_modules/near-api-js/node_modules/node-fetch": { "version": "2.6.7", "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", "license": "MIT", - "peer": true, "dependencies": { "whatwg-url": "^5.0.0" }, @@ -10758,7 +10637,6 @@ "resolved": "https://registry.npmjs.org/nofilter/-/nofilter-3.1.0.tgz", "integrity": "sha512-l2NNj07e9afPnhAhvgVrCD/oy2Ai1yfLpuo3EpiO1jFTsB4sFz6oIfAfSZyQzVpkZQ9xS8ZS5g1jCBgq4Hwo0g==", "license": "MIT", - "peer": true, "engines": { "node": ">=12.19" } @@ -11022,7 +10900,6 @@ "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.9.tgz", "integrity": "sha512-fIYNuZ/HastSb80baGOuPRo1O9cf4baWw5WsAp7dBuUzeTD/BoaG8sVTdlPFksBE2lF21dN+A1AnrpIjSWqHHg==", "license": "ISC", - "peer": true, "dependencies": { "asn1.js": "^4.10.1", "browserify-aes": "^1.2.0", @@ -11065,7 +10942,6 @@ "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.5.tgz", "integrity": "sha512-Q3CG/cYvCO1ye4QKkuH7EXxs3VC/rI1/trd+qX2+PolbaKG0H+bgcZzrTt96mMyRtejk+JMCiLUn3y29W8qmFQ==", "license": "MIT", - "peer": true, "dependencies": { "create-hash": "^1.2.0", "create-hmac": "^1.1.7", @@ -11359,6 +11235,7 @@ "resolved": "https://registry.npmjs.org/prosemirror-model/-/prosemirror-model-1.25.4.tgz", "integrity": "sha512-PIM7E43PBxKce8OQeezAs9j4TP+5yDpZVbuurd1h5phUxEKIu+G2a+EUZzIC5nS1mJktDJWzbqS23n1tsAf5QA==", "license": "MIT", + "peer": true, "dependencies": { "orderedmap": "^2.0.0" } @@ -11388,6 +11265,7 @@ "resolved": "https://registry.npmjs.org/prosemirror-state/-/prosemirror-state-1.4.4.tgz", "integrity": "sha512-6jiYHH2CIGbCfnxdHbXZ12gySFY/fz/ulZE333G6bPqIZ4F+TXo9ifiR86nAHpWnfoNjOb3o5ESi7J8Uz1jXHw==", "license": "MIT", + "peer": true, "dependencies": { "prosemirror-model": "^1.0.0", "prosemirror-transform": "^1.0.0", @@ -11436,6 +11314,7 @@ "resolved": "https://registry.npmjs.org/prosemirror-view/-/prosemirror-view-1.41.7.tgz", "integrity": "sha512-jUwKNCEIGiqdvhlS91/2QAg21e4dfU5bH2iwmSDQeosXJgKF7smG0YSplOWK0cjSNgIqXe7VXqo7EIfUFJdt3w==", "license": "MIT", + "peer": true, "dependencies": { "prosemirror-model": "^1.20.0", "prosemirror-state": "^1.0.0", @@ -11486,7 +11365,6 @@ "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", "license": "MIT", - "peer": true, "dependencies": { "bn.js": "^4.1.0", "browserify-rsa": "^4.0.0", @@ -11500,8 +11378,7 @@ "version": "4.12.3", "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.3.tgz", "integrity": "sha512-fGTi3gxV/23FTYdAoUtLYp6qySe2KE3teyZitipKNRuVYcBkoP/bB3guXN/XVKUe9mxCHXnc9C4ocyz8OmgN0g==", - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/punycode": { "version": "2.3.1", @@ -11614,7 +11491,6 @@ "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", "license": "MIT", - "peer": true, "dependencies": { "randombytes": "^2.0.5", "safe-buffer": "^5.1.0" @@ -11625,6 +11501,7 @@ "resolved": "https://registry.npmjs.org/react/-/react-19.2.3.tgz", "integrity": "sha512-Ku/hhYbVjOQnXDZFv2+RibmLFGwFdeeKHFcOTlrt7xplBnya5OGn/hIRDsqDiSUcfORsDC7MPxwork8jBwsIWA==", "license": "MIT", + "peer": true, "engines": { "node": ">=0.10.0" } @@ -11634,6 +11511,7 @@ "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.2.3.tgz", "integrity": "sha512-yELu4WmLPw5Mr/lmeEpox5rw3RETacE++JgHqQzd2dg+YbJuat3jH4ingc+WPZhxaoFzdv9y33G+F7Nl5O0GBg==", "license": "MIT", + "peer": true, "dependencies": { "scheduler": "^0.27.0" }, @@ -11942,6 +11820,7 @@ "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz", "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==", "license": "Apache-2.0", + "peer": true, "dependencies": { "tslib": "^2.1.0" } @@ -12127,8 +12006,7 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==", - "license": "ISC", - "peer": true + "license": "ISC" }, "node_modules/sha.js": { "version": "2.4.12", @@ -12403,7 +12281,6 @@ "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", "license": "MIT", - "peer": true, "engines": { "node": ">= 0.6" } @@ -12806,6 +12683,7 @@ "integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">=12" }, @@ -12845,7 +12723,6 @@ "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==", "license": "MIT", - "peer": true, "engines": { "node": ">=0.6" } @@ -12911,7 +12788,8 @@ "version": "2.8.1", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "license": "0BSD" + "license": "0BSD", + "peer": true }, "node_modules/tweetnacl": { "version": "1.0.3", @@ -13026,6 +12904,7 @@ "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", "license": "Apache-2.0", + "peer": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -13656,6 +13535,7 @@ "resolved": "https://registry.npmjs.org/ws/-/ws-8.20.0.tgz", "integrity": "sha512-sAt8BhgNbzCtgGbt2OxmpuryO63ZoDk/sqaB/znQm94T4fCEsy/yV+7CdC1kJhOU9lboAEU7R3kquuycDoibVA==", "license": "MIT", + "peer": true, "engines": { "node": ">=10.0.0" }, @@ -13698,7 +13578,6 @@ "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", "license": "MIT", - "peer": true, "engines": { "node": ">=0.4" } @@ -13822,6 +13701,7 @@ "integrity": "sha512-rftlrkhHZOcjDwkGlnUtZZkvaPHCsDATp4pGpuOOMDaTdDDXF91wuVDJoWoPsKX/3YPQ5fHuF3STjcYyKr+Qhg==", "dev": true, "license": "MIT", + "peer": true, "funding": { "url": "https://github.com/sponsors/colinhacks" } diff --git a/FrontEnd/my-app/playwright-report/index.html b/FrontEnd/my-app/playwright-report/index.html new file mode 100644 index 0000000..6dfe7df --- /dev/null +++ b/FrontEnd/my-app/playwright-report/index.html @@ -0,0 +1,85 @@ + + + + + + + + + Playwright Test Report + + + + +
+ + + \ No newline at end of file diff --git a/FrontEnd/my-app/test-results/.last-run.json b/FrontEnd/my-app/test-results/.last-run.json new file mode 100644 index 0000000..cbcc1fb --- /dev/null +++ b/FrontEnd/my-app/test-results/.last-run.json @@ -0,0 +1,4 @@ +{ + "status": "passed", + "failedTests": [] +} \ No newline at end of file diff --git a/FrontEnd/my-app/tests/e2e/homepage-hero.spec.ts b/FrontEnd/my-app/tests/e2e/homepage-hero.spec.ts new file mode 100644 index 0000000..5088197 --- /dev/null +++ b/FrontEnd/my-app/tests/e2e/homepage-hero.spec.ts @@ -0,0 +1,134 @@ +import { test, expect } from "@playwright/test"; + +test.describe("Homepage Hero Section", () => { + test.beforeEach(async ({ page }) => { + await page.goto("/"); + }); + + // ── Visibility ──────────────────────────────────────────── + + test("renders the hero section", async ({ page }) => { + await expect(page.getByRole("region", { name: "Hero" })).toBeVisible(); + }); + + test("shows Built on Stellar & Soroban badge", async ({ page }) => { + await expect( + page.getByText(/built on stellar & soroban/i) + ).toBeVisible(); + }); + + test("shows the main headline", async ({ page }) => { + await expect( + page.getByRole("heading", { level: 1 }) + ).toContainText(/turn work into/i); + }); + + test("shows the subtext description", async ({ page }) => { + await expect( + page.getByText(/complete quests, earn rewards/i) + ).toBeVisible(); + }); + + // ── Rotating headline ───────────────────────────────────── + + test("headline contains an animated word", async ({ page }) => { + const hero = page.getByRole("region", { name: "Hero" }); + const animated = hero.locator("[aria-live='polite']"); + await expect(animated).toBeVisible(); + const firstWord = await animated.textContent(); + expect(firstWord?.trim().length).toBeGreaterThan(0); + }); + + // ── CTA Buttons ─────────────────────────────────────────── + + test("Explore Quests button is visible and clickable", async ({ page }) => { + // Match by aria-label set on the link + const btn = page.getByRole("link", { + name: /explore all available quests/i, + }); + await expect(btn).toBeVisible(); + await expect(btn).toHaveAttribute("href", "/quests"); + }); + + test("Connect Wallet button is visible and clickable", async ({ page }) => { + // Match by aria-label set on the link + const btn = page.getByRole("link", { + name: /connect your wallet/i, + }); + await expect(btn).toBeVisible(); + await expect(btn).toHaveAttribute("href", "/dashboard"); + }); + + test("CTA buttons are keyboard focusable", async ({ page }) => { + await page.keyboard.press("Tab"); + const focused = page.locator(":focus"); + await expect(focused).toBeVisible(); + }); + + // ── Stats ───────────────────────────────────────────────── + + test("stats region is present", async ({ page }) => { + await expect( + page.getByRole("region", { name: /platform statistics/i }) + ).toBeVisible(); + }); + + test("shows XLM Distributed stat label", async ({ page }) => { + await expect(page.getByText(/xlm distributed/i)).toBeVisible(); + }); + + test("shows Quests Completed stat label", async ({ page }) => { + await expect(page.getByText(/quests completed/i)).toBeVisible(); + }); + + test("shows Active Quests stat label", async ({ page }) => { + await expect(page.getByText(/active quests/i)).toBeVisible(); + }); + + // ── Trust Indicators ────────────────────────────────────── + + test("shows trust indicators", async ({ page }) => { + await expect(page.getByText(/5-second settlement/i)).toBeVisible(); + await expect(page.getByText(/on-chain verification/i)).toBeVisible(); + await expect(page.getByText(/earn xp & badges/i)).toBeVisible(); + }); + + // ── Responsive ──────────────────────────────────────────── + + test("hero looks correct on mobile", async ({ page }) => { + await page.setViewportSize({ width: 375, height: 812 }); + await expect( + page.getByRole("heading", { level: 1 }) + ).toBeVisible(); + await expect( + page.getByRole("link", { name: /explore all available quests/i }) + ).toBeVisible(); + }); + + test("hero looks correct on tablet", async ({ page }) => { + await page.setViewportSize({ width: 768, height: 1024 }); + await expect( + page.getByRole("region", { name: "Hero" }) + ).toBeVisible(); + }); + + // ── Accessibility ───────────────────────────────────────── + + test("hero section has correct aria-label", async ({ page }) => { + await expect( + page.locator("section[aria-label='Hero']") + ).toBeVisible(); + }); + + test("stats region has aria-label", async ({ page }) => { + await expect( + page.locator("[aria-label='Platform statistics']") + ).toBeVisible(); + }); + + test("trust indicators have aria-label", async ({ page }) => { + await expect( + page.locator("[aria-label='Trust indicators']") + ).toBeVisible(); + }); +}); \ No newline at end of file