From ca466ddc235a23fd8d97597b96cd54b44a3a2c46 Mon Sep 17 00:00:00 2001 From: Benjtalkshow Date: Sun, 17 Aug 2025 10:40:42 +0100 Subject: [PATCH 01/11] feat: initialize back project flow and project history demo page --- app/user/back-project/page.tsx | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 app/user/back-project/page.tsx diff --git a/app/user/back-project/page.tsx b/app/user/back-project/page.tsx new file mode 100644 index 00000000..3856f2a1 --- /dev/null +++ b/app/user/back-project/page.tsx @@ -0,0 +1,13 @@ +import { BoundlessButton } from '@/components/buttons'; +import React from 'react'; + +const page = () => { + return ( +
+ Back Project + View History +
+ ); +}; + +export default page; From 3b254b7bccba51c7df3b8b66e4ece418a00b6d29 Mon Sep 17 00:00:00 2001 From: Benjtalkshow Date: Sun, 17 Aug 2025 23:20:05 +0100 Subject: [PATCH 02/11] fix: implement back project form --- app/globals.css | 12 ++ app/user/back-project/page.tsx | 13 -- .../flows/back-project/back-project-form.tsx | 202 ++++++++++++++++++ components/flows/back-project/index.tsx | 111 ++++++++++ .../project-submission-loading.tsx | 15 ++ .../project/ProjectSubmissionSuccess.tsx | 42 +++- 6 files changed, 371 insertions(+), 24 deletions(-) delete mode 100644 app/user/back-project/page.tsx create mode 100644 components/flows/back-project/back-project-form.tsx create mode 100644 components/flows/back-project/index.tsx create mode 100644 components/flows/back-project/project-submission-loading.tsx diff --git a/app/globals.css b/app/globals.css index 532b272b..e8921ec9 100644 --- a/app/globals.css +++ b/app/globals.css @@ -134,3 +134,15 @@ button { cursor: pointer; } +/* Hide arrows in Chrome, Safari, Edge, Opera */ +input[type='number']::-webkit-inner-spin-button, +input[type='number']::-webkit-outer-spin-button { + -webkit-appearance: none; + margin: 0; +} + +/* Hide arrows in Firefox */ +input[type='number'] { + -moz-appearance: textfield; + appearance: textfield; +} diff --git a/app/user/back-project/page.tsx b/app/user/back-project/page.tsx deleted file mode 100644 index 3856f2a1..00000000 --- a/app/user/back-project/page.tsx +++ /dev/null @@ -1,13 +0,0 @@ -import { BoundlessButton } from '@/components/buttons'; -import React from 'react'; - -const page = () => { - return ( -
- Back Project - View History -
- ); -}; - -export default page; diff --git a/components/flows/back-project/back-project-form.tsx b/components/flows/back-project/back-project-form.tsx new file mode 100644 index 00000000..99b54750 --- /dev/null +++ b/components/flows/back-project/back-project-form.tsx @@ -0,0 +1,202 @@ +'use client'; + +import type React from 'react'; +import { useState } from 'react'; +import { + Select, + SelectContent, + SelectItem, + SelectTrigger, + SelectValue, +} from '@/components/ui/select'; +import { Checkbox } from '@/components/ui/checkbox'; +import { ArrowLeft, Check, Copy } from 'lucide-react'; +import { BoundlessButton } from '@/components/buttons'; + +interface BackProjectFormProps { + onSubmit: (data: { + amount: string; + currency: string; + token: string; + network: string; + walletAddress: string; + keepAnonymous: boolean; + }) => void; + isLoading?: boolean; +} + +const QUICK_AMOUNTS = [10, 20, 30, 50, 100, 500, 1000]; + +export function BackProjectForm({ + onSubmit, + isLoading = false, +}: BackProjectFormProps) { + const [amount, setAmount] = useState(''); + const [currency] = useState('USDT'); + const [token, setToken] = useState(''); + const [network, setNetwork] = useState('Stella / Soroban'); + const [walletAddress] = useState('GDS3...GB7'); + const [keepAnonymous, setKeepAnonymous] = useState(false); + + const handleSubmit = (e: React.FormEvent) => { + e.preventDefault(); + onSubmit({ + amount, + currency, + token, + network, + walletAddress, + keepAnonymous, + }); + }; + + const handleQuickAmount = (quickAmount: number) => { + setAmount(quickAmount.toString()); + }; + + const handleCopyAddress = async (e: React.MouseEvent) => { + e.preventDefault(); + try { + await navigator.clipboard.writeText(walletAddress); + // Could add toast notification here instead of state + } catch (err) { + // Fallback for browsers that don't support clipboard API + const textArea = document.createElement('textarea'); + console.error(err); + + textArea.value = walletAddress; + document.body.appendChild(textArea); + textArea.select(); + try { + document.execCommand('copy'); + } catch (copyErr) { + console.error('Failed to copy address:', copyErr); + } + document.body.removeChild(textArea); + } + }; + + const isFormValid = amount && currency && token && walletAddress; + + return ( +
+
+ +

Back Project

+
+
+
+

+ Funds will be held in escrow and released only upon milestone + approvals. +

+
+ +
+ +
+ {currency} + setAmount(e.target.value)} + type='number' + className='w-full bg-transparent font-normal text-base text-placeholder focus:outline-none' + placeholder='1000' + disabled={isLoading} + /> +
+

min. amount: $10

+ +
+ {QUICK_AMOUNTS.map(quickAmount => ( + + ))} +
+
+ +
+ + +
+ +
+ +
+ setNetwork(e.target.value)} + type='text' + className='w-full bg-transparent font-normal text-base text-placeholder focus:outline-none' + disabled={isLoading} + /> +
+
+ +
+ + + + {walletAddress} + + +
+ +
+ setKeepAnonymous(checked as boolean)} + disabled={isLoading} + className='border-stepper-border data-[state=checked]:bg-primary data-[state=checked]:border-primary' + /> + +
+ + + Confirm Contribution + +
+
+ ); +} diff --git a/components/flows/back-project/index.tsx b/components/flows/back-project/index.tsx new file mode 100644 index 00000000..2f7d0d10 --- /dev/null +++ b/components/flows/back-project/index.tsx @@ -0,0 +1,111 @@ +'use client'; + +import { useState } from 'react'; +import { BoundlessButton } from '@/components/buttons'; +import { ProjectSubmissionSuccess } from '@/components/project'; +import BoundlessSheet from '@/components/sheet/boundless-sheet'; +import { ProjectSubmissionLoading } from '@/components/flows/back-project/project-submission-loading'; +import { BackProjectForm } from './back-project-form'; + +type BackProjectState = 'form' | 'loading' | 'success'; + +interface BackProjectData { + amount: string; + currency: string; + token: string; + network: string; + walletAddress: string; + keepAnonymous: boolean; +} + +const BackProject = () => { + const [isSheetOpen, setIsSheetOpen] = useState(false); + const [backProjectState, setBackProjectState] = + useState('form'); + + const handleBackProject = (data: BackProjectData) => { + setBackProjectState('loading'); + console.log(data); + + // Simulate API call + setTimeout(() => { + setBackProjectState('success'); + }, 2000); + }; + + // const handleContinue = () => { + // setIsSheetOpen(false) + // setBackProjectState("form") + // } + + // const handleViewHistory = () => { + // // Navigate to history page or open history modal + // setIsSheetOpen(false) + // // TODO: Implement backing history modal or navigation + // } + + // const handleBack = () => { + // if (backProjectState === "success") { + // setBackProjectState("form") + // } + // } + + const renderSheetContent = () => { + if (backProjectState === 'success') { + return ( +
+
+ {/* */} +
+ +
+ ); + } + + return ( +
+ + + {backProjectState === 'loading' && ( +
+ +
+ )} +
+ ); + }; + + return ( +
+ + {renderSheetContent()} + + + setIsSheetOpen(true)}> + Back Project + +
+ ); +}; + +export default BackProject; diff --git a/components/flows/back-project/project-submission-loading.tsx b/components/flows/back-project/project-submission-loading.tsx new file mode 100644 index 00000000..4dc27ea2 --- /dev/null +++ b/components/flows/back-project/project-submission-loading.tsx @@ -0,0 +1,15 @@ +export function ProjectSubmissionLoading() { + return ( +
+
+ {/* Outer spinning ring */} +
+ {/* Inner spinning arc */} +
+
+

+ Processing your contribution... +

+
+ ); +} diff --git a/components/project/ProjectSubmissionSuccess.tsx b/components/project/ProjectSubmissionSuccess.tsx index cc368351..fa2e2e31 100644 --- a/components/project/ProjectSubmissionSuccess.tsx +++ b/components/project/ProjectSubmissionSuccess.tsx @@ -1,26 +1,46 @@ import Image from 'next/image'; +import Link from 'next/link'; import React from 'react'; -function ProjectSubmissionSuccess() { +interface ProjectSubmissionSuccessProps { + title?: string; + description?: string; + linkSection?: string; + linkName?: string; + url?: string; + continueAction?: () => void; +} + +function ProjectSubmissionSuccess({ + title = 'Project Submitted!', + description = 'Your project has been submitted and is now under admin review. You’ll receive an update within 72 hours. Once approved, your project will proceed to public validation.', + linkSection = 'You can track the status of your submission anytime on the', + linkName = 'Projects page.', + url = '/projects', + continueAction, +}: ProjectSubmissionSuccessProps) { return (
-
Project Submitted!
-
+
{title}
+
done
-
+

- Your project has been submitted and is now under admin review. You’ll - receive an update within 72 hours. Once approved, your project will - proceed to public validation. + {description}

-

- You can track the status of your submission anytime on the{' '} - Projects page. +

+ {linkSection}{' '} + + {linkName} +

-
From 1312a12e65310e2760f579d9ab71edb1fe1cf27e Mon Sep 17 00:00:00 2001 From: Benjtalkshow Date: Tue, 19 Aug 2025 10:32:31 +0100 Subject: [PATCH 03/11] fix: fix back project flow --- components/flows/back-project/index.tsx | 2 +- lib/data/backing-history-mock.ts | 142 ++++++++++++++++++++++++ types/backing-history.ts | 32 ++++++ 3 files changed, 175 insertions(+), 1 deletion(-) create mode 100644 lib/data/backing-history-mock.ts create mode 100644 types/backing-history.ts diff --git a/components/flows/back-project/index.tsx b/components/flows/back-project/index.tsx index 2f7d0d10..972d5a0e 100644 --- a/components/flows/back-project/index.tsx +++ b/components/flows/back-project/index.tsx @@ -95,7 +95,7 @@ const BackProject = () => { setOpen={setIsSheetOpen} // title="Back Project" showCloseButton={true} - contentClassName={backProjectState === 'form' ? 'h-[60vh]' : 'h-[85vh]'} + contentClassName={`h-[100vh]`} className='mx-4' > {renderSheetContent()} diff --git a/lib/data/backing-history-mock.ts b/lib/data/backing-history-mock.ts new file mode 100644 index 00000000..3de9417e --- /dev/null +++ b/lib/data/backing-history-mock.ts @@ -0,0 +1,142 @@ +import type { BackingHistoryItem } from '@/types/backing-history'; + +export const mockBackingHistory: BackingHistoryItem[] = [ + { + id: '1', + backer: { + name: 'Collins Odumeje', + isAnonymous: false, + avatar: '/diverse-user-avatars.png', + walletAddress: 'GDS3...GB7', + }, + amount: 2300, + currency: 'USDT', + date: new Date('2025-08-17'), + timeAgo: '3s', + }, + { + id: '2', + backer: { + name: 'Sarah Chen', + isAnonymous: false, + avatar: '/diverse-user-avatars.png', + walletAddress: 'ABC1...XYZ', + }, + amount: 1500, + currency: 'USDT', + date: new Date('2025-08-16'), + timeAgo: '1d', + }, + { + id: '3', + backer: { + name: 'Anonymous', + isAnonymous: true, + avatar: '/anonymous-user-concept.png', + walletAddress: 'DEF4...789', + }, + amount: 5000, + currency: 'USDT', + date: new Date('2025-08-15'), + timeAgo: '2d', + }, + { + id: '4', + backer: { + name: 'Michael Rodriguez', + isAnonymous: false, + avatar: '/diverse-user-avatars.png', + walletAddress: 'HIJ7...456', + }, + amount: 750, + currency: 'USDT', + date: new Date('2025-08-14'), + timeAgo: '3d', + }, + { + id: '5', + backer: { + name: 'Anonymous', + isAnonymous: true, + avatar: '/anonymous-user-concept.png', + walletAddress: 'KLM0...123', + }, + amount: 3200, + currency: 'USDT', + date: new Date('2025-08-13'), + timeAgo: '4d', + }, + { + id: '6', + backer: { + name: 'Emma Thompson', + isAnonymous: false, + avatar: '/diverse-user-avatars.png', + walletAddress: 'NOP3...890', + }, + amount: 1800, + currency: 'USDT', + date: new Date('2025-08-12'), + timeAgo: '5d', + }, + { + id: '7', + backer: { + name: 'David Kim', + isAnonymous: false, + avatar: '/diverse-user-avatars.png', + walletAddress: 'QRS6...567', + }, + amount: 4500, + currency: 'USDT', + date: new Date('2025-08-11'), + timeAgo: '6d', + }, + { + id: '8', + backer: { + name: 'Anonymous', + isAnonymous: true, + avatar: '/anonymous-user-concept.png', + walletAddress: 'TUV9...234', + }, + amount: 950, + currency: 'USDT', + date: new Date('2025-08-10'), + timeAgo: '1w', + }, + { + id: '9', + backer: { + name: 'Lisa Wang', + isAnonymous: false, + avatar: '/diverse-user-avatars.png', + walletAddress: 'WXY2...901', + }, + amount: 2750, + currency: 'USDT', + date: new Date('2025-08-09'), + timeAgo: '1w', + }, + { + id: '10', + backer: { + name: 'Anonymous', + isAnonymous: true, + avatar: '/anonymous-user-concept.png', + walletAddress: 'ZAB5...678', + }, + amount: 6200, + currency: 'USDT', + date: new Date('2025-08-08'), + timeAgo: '1w', + }, +]; + +export const sortOptions = [ + { value: 'newest', label: 'Newest first' }, + { value: 'oldest', label: 'Oldest first' }, + { value: 'alphabetical', label: 'Alphabetical' }, + { value: 'amount-high', label: 'Highest first' }, + { value: 'amount-low', label: 'Lowest first' }, +]; diff --git a/types/backing-history.ts b/types/backing-history.ts new file mode 100644 index 00000000..054c4506 --- /dev/null +++ b/types/backing-history.ts @@ -0,0 +1,32 @@ +export interface BackingHistoryItem { + id: string; + backer: { + name: string; + isAnonymous: boolean; + avatar?: string; + walletAddress: string; + }; + amount: number; + currency: string; + date: Date; + timeAgo: string; +} + +export interface BackingHistoryFilters { + searchQuery: string; + sortBy: 'newest' | 'oldest' | 'alphabetical' | 'amount-high' | 'amount-low'; + dateRange: { + from: Date | null; + to: Date | null; + }; + amountRange: { + min: number; + max: number; + }; + identityType: 'all' | 'identified' | 'anonymous'; +} + +export interface BackingHistorySortOption { + value: string; + label: string; +} From 52f2d2617de64f1c008626eaf49df83ccb3f5825 Mon Sep 17 00:00:00 2001 From: Benjtalkshow Date: Wed, 20 Aug 2025 02:56:37 +0100 Subject: [PATCH 04/11] feat: backing history --- app/user/backing-history/page.tsx | 111 ++++ .../flows/backing-history/backing-history.tsx | 506 ++++++++++++++++++ lib/data/backing-history-mock.ts | 142 ----- types/backing-history.ts | 32 -- 4 files changed, 617 insertions(+), 174 deletions(-) create mode 100644 app/user/backing-history/page.tsx create mode 100644 components/flows/backing-history/backing-history.tsx delete mode 100644 lib/data/backing-history-mock.ts delete mode 100644 types/backing-history.ts diff --git a/app/user/backing-history/page.tsx b/app/user/backing-history/page.tsx new file mode 100644 index 00000000..58fdebd9 --- /dev/null +++ b/app/user/backing-history/page.tsx @@ -0,0 +1,111 @@ +'use client'; + +import { useState } from 'react'; +import { Button } from '@/components/ui/button'; +import BackingHistory from '@/components/flows/backing-history/backing-history'; + +// Sample data matching the images +const sampleBackers = [ + { + id: '1', + name: 'Collins Odumeje', + avatar: '/placeholder.svg?height=32&width=32', + amount: 2300, + date: new Date('2025-08-05'), + walletId: 'GDS3...GB7', + isAnonymous: false, + }, + { + id: '2', + name: 'Collins Odumeje', + avatar: '/placeholder.svg?height=32&width=32', + amount: 2300, + date: new Date('2025-08-05'), + walletId: 'GDS3...GB7', + isAnonymous: false, + }, + { + id: '3', + name: 'Collins Odumeje', + avatar: '/placeholder.svg?height=32&width=32', + amount: 2300, + date: new Date('2025-08-05'), + walletId: 'GDS3...GB7', + isAnonymous: false, + }, + { + id: '4', + name: 'Anonymous', + amount: 2300, + date: new Date('2025-08-05'), + walletId: 'GDS3...GB7', + isAnonymous: true, + }, + { + id: '5', + name: 'Collins Odumeje', + avatar: '/placeholder.svg?height=32&width=32', + amount: 2300, + date: new Date('2025-08-05'), + walletId: 'GDS3...GB7', + isAnonymous: false, + }, + { + id: '6', + name: 'Anonymous', + amount: 2300, + date: new Date('2025-08-05'), + walletId: 'GDS3...GB7', + isAnonymous: true, + }, + { + id: '7', + name: 'Anonymous', + amount: 2300, + date: new Date('2025-08-05'), + walletId: 'GDS3...GB7', + isAnonymous: true, + }, + { + id: '8', + name: 'Collins Odumeje', + avatar: '/placeholder.svg?height=32&width=32', + amount: 2300, + date: new Date('2025-08-05'), + walletId: 'GDS3...GB7', + isAnonymous: false, + }, + { + id: '9', + name: 'Anonymous', + amount: 2300, + date: new Date('2025-08-05'), + walletId: 'GDS3...GB7', + isAnonymous: true, + }, +]; + +export default function Home() { + const [showBackingHistory, setShowBackingHistory] = useState(false); + + return ( +
+
+

Crowdfunding Dashboard

+ + + + +
+
+ ); +} diff --git a/components/flows/backing-history/backing-history.tsx b/components/flows/backing-history/backing-history.tsx new file mode 100644 index 00000000..6f8e8527 --- /dev/null +++ b/components/flows/backing-history/backing-history.tsx @@ -0,0 +1,506 @@ +'use client'; + +import type React from 'react'; +import { useState, useMemo } from 'react'; +import { + Search, + Filter, + ArrowUpDown, + Calendar, + DollarSign, + User, + Wallet, + Check, + CheckIcon, +} from 'lucide-react'; +import { Button } from '@/components/ui/button'; +import { Input } from '@/components/ui/input'; +import { Avatar, AvatarFallback, AvatarImage } from '@/components/ui/avatar'; +import { Slider } from '@/components/ui/slider'; +import { + Select, + SelectContent, + SelectItem, + SelectTrigger, + SelectValue, +} from '@/components/ui/select'; +import { + Popover, + PopoverContent, + PopoverTrigger, +} from '@/components/ui/popover'; +import { format } from 'date-fns'; +import BoundlessSheet from '@/components/sheet/boundless-sheet'; + +interface Backer { + id: string; + name: string; + avatar?: string; + amount: number; + date: Date; + walletId: string; + isAnonymous: boolean; +} + +interface BackingHistoryProps { + open: boolean; + setOpen: (open: boolean) => void; + backers: Backer[]; +} + +type SortOption = 'newest' | 'oldest' | 'alphabetical' | 'highest' | 'lowest'; +type IdentityFilter = 'all' | 'identified' | 'anonymous'; + +const BackingHistory: React.FC = ({ + open, + setOpen, + backers, +}) => { + const [searchQuery, setSearchQuery] = useState(''); + const [sortBy, setSortBy] = useState('newest'); + const [amountRange, setAmountRange] = useState([0, 10000]); + const [dateRange, setDateRange] = useState<{ from?: Date; to?: Date }>({}); + const [identityFilter, setIdentityFilter] = useState('all'); + const [showFilters, setShowFilters] = useState(false); + const [showSortPopover, setShowSortPopover] = useState(false); + + const setQuickDateFilter = (days: number) => { + const today = new Date(); + const pastDate = new Date(today.getTime() - days * 24 * 60 * 60 * 1000); + setDateRange({ from: pastDate, to: today }); + }; + + const resetFilters = () => { + setSearchQuery(''); + setSortBy('newest'); + setAmountRange([0, 10000]); + setDateRange({}); + setIdentityFilter('all'); + }; + + const resetDateRange = () => { + setDateRange({}); + }; + + const resetAmountRange = () => { + setAmountRange([10, 1000]); + }; + + const resetIdentityFilter = () => { + setIdentityFilter('all'); + }; + + const applyFilters = () => { + setShowSortPopover(false); + }; + + const filteredAndSortedBackers = useMemo(() => { + const filtered = backers.filter(backer => { + const matchesSearch = + backer.name.toLowerCase().includes(searchQuery.toLowerCase()) || + backer.walletId.toLowerCase().includes(searchQuery.toLowerCase()); + + const matchesAmount = + backer.amount >= amountRange[0] && backer.amount <= amountRange[1]; + + const matchesDate = + !dateRange.from || + !dateRange.to || + (backer.date >= dateRange.from && backer.date <= dateRange.to); + + const matchesIdentity = + identityFilter === 'all' || + (identityFilter === 'anonymous' && backer.isAnonymous) || + (identityFilter === 'identified' && !backer.isAnonymous); + + return matchesSearch && matchesAmount && matchesDate && matchesIdentity; + }); + + filtered.sort((a, b) => { + switch (sortBy) { + case 'newest': + return b.date.getTime() - a.date.getTime(); + case 'oldest': + return a.date.getTime() - b.date.getTime(); + case 'alphabetical': + return a.name.localeCompare(b.name); + case 'highest': + return b.amount - a.amount; + case 'lowest': + return a.amount - b.amount; + default: + return 0; + } + }); + + return filtered; + }, [backers, searchQuery, sortBy, amountRange, dateRange, identityFilter]); + + const formatDate = (date: Date) => { + const now = new Date(); + const diffInDays = Math.floor( + (now.getTime() - date.getTime()) / (1000 * 60 * 60 * 24) + ); + + if (diffInDays === 0) return 'Today'; + if (diffInDays === 1) return '1d'; + if (diffInDays < 7) return `${diffInDays}d`; + if (diffInDays < 30) return `${Math.floor(diffInDays / 7)}w`; + return format(date, 'MMM dd, yyyy'); + }; + + return ( + +
+
+ {/* Search and Controls */} +
+
+ + setSearchQuery(e.target.value)} + className='pl-10 py-5 placeholder:font-medium bg-muted/20 border-muted-foreground/20 text-white placeholder:text-muted-foreground' + /> +
+ + + + + + +
+ {/* Date Range Section */} +
+
+

+ Date range +

+ +
+
+
+
+ +
+ + +
+
+
+ +
+ + +
+
+
+
+ + + +
+
+
+ + {/* Amount Range Section */} +
+
+

+ Amount range +

+ +
+
+
+
+ +
+ + + setAmountRange([ + Number.parseInt(e.target.value) || 0, + amountRange[1], + ]) + } + className='bg-muted/20 border-muted-foreground/20 text-white pl-8' + /> +
+
+
+ +
+ + + setAmountRange([ + amountRange[0], + Number.parseInt(e.target.value) || 0, + ]) + } + className='bg-muted/20 border-muted-foreground/20 text-white pl-8' + /> +
+
+
+ +
+
+ + {/* Identity Type Section */} +
+
+

+ Identity Type +

+ +
+
+ + + +
+
+ + {/* Action Buttons */} +
+ + +
+
+
+
+
+ + {/* Filters Panel */} + {showFilters && ( +
+ {/* Sort Options */} +
+
+ + +
+ +
+
+ )} + + {/* Results Header */} +
+
Backer
+
Amount
+
Date
+
+ + {/* Backing List */} +
+ {filteredAndSortedBackers.map(backer => ( +
+
+
+ + + + {backer.isAnonymous ? ( + + ) : ( + backer.name.charAt(0) + )} + + +
+ +
+
+
+
{backer.name}
+
+ + {backer.walletId} +
+
+
+
+ ${backer.amount.toLocaleString()} +
+
+ {formatDate(backer.date)} +
+
+ ))} +
+ + {filteredAndSortedBackers.length === 0 && ( +
+ No backers found matching your criteria +
+ )} +
+
+
+ ); +}; + +export default BackingHistory; diff --git a/lib/data/backing-history-mock.ts b/lib/data/backing-history-mock.ts deleted file mode 100644 index 3de9417e..00000000 --- a/lib/data/backing-history-mock.ts +++ /dev/null @@ -1,142 +0,0 @@ -import type { BackingHistoryItem } from '@/types/backing-history'; - -export const mockBackingHistory: BackingHistoryItem[] = [ - { - id: '1', - backer: { - name: 'Collins Odumeje', - isAnonymous: false, - avatar: '/diverse-user-avatars.png', - walletAddress: 'GDS3...GB7', - }, - amount: 2300, - currency: 'USDT', - date: new Date('2025-08-17'), - timeAgo: '3s', - }, - { - id: '2', - backer: { - name: 'Sarah Chen', - isAnonymous: false, - avatar: '/diverse-user-avatars.png', - walletAddress: 'ABC1...XYZ', - }, - amount: 1500, - currency: 'USDT', - date: new Date('2025-08-16'), - timeAgo: '1d', - }, - { - id: '3', - backer: { - name: 'Anonymous', - isAnonymous: true, - avatar: '/anonymous-user-concept.png', - walletAddress: 'DEF4...789', - }, - amount: 5000, - currency: 'USDT', - date: new Date('2025-08-15'), - timeAgo: '2d', - }, - { - id: '4', - backer: { - name: 'Michael Rodriguez', - isAnonymous: false, - avatar: '/diverse-user-avatars.png', - walletAddress: 'HIJ7...456', - }, - amount: 750, - currency: 'USDT', - date: new Date('2025-08-14'), - timeAgo: '3d', - }, - { - id: '5', - backer: { - name: 'Anonymous', - isAnonymous: true, - avatar: '/anonymous-user-concept.png', - walletAddress: 'KLM0...123', - }, - amount: 3200, - currency: 'USDT', - date: new Date('2025-08-13'), - timeAgo: '4d', - }, - { - id: '6', - backer: { - name: 'Emma Thompson', - isAnonymous: false, - avatar: '/diverse-user-avatars.png', - walletAddress: 'NOP3...890', - }, - amount: 1800, - currency: 'USDT', - date: new Date('2025-08-12'), - timeAgo: '5d', - }, - { - id: '7', - backer: { - name: 'David Kim', - isAnonymous: false, - avatar: '/diverse-user-avatars.png', - walletAddress: 'QRS6...567', - }, - amount: 4500, - currency: 'USDT', - date: new Date('2025-08-11'), - timeAgo: '6d', - }, - { - id: '8', - backer: { - name: 'Anonymous', - isAnonymous: true, - avatar: '/anonymous-user-concept.png', - walletAddress: 'TUV9...234', - }, - amount: 950, - currency: 'USDT', - date: new Date('2025-08-10'), - timeAgo: '1w', - }, - { - id: '9', - backer: { - name: 'Lisa Wang', - isAnonymous: false, - avatar: '/diverse-user-avatars.png', - walletAddress: 'WXY2...901', - }, - amount: 2750, - currency: 'USDT', - date: new Date('2025-08-09'), - timeAgo: '1w', - }, - { - id: '10', - backer: { - name: 'Anonymous', - isAnonymous: true, - avatar: '/anonymous-user-concept.png', - walletAddress: 'ZAB5...678', - }, - amount: 6200, - currency: 'USDT', - date: new Date('2025-08-08'), - timeAgo: '1w', - }, -]; - -export const sortOptions = [ - { value: 'newest', label: 'Newest first' }, - { value: 'oldest', label: 'Oldest first' }, - { value: 'alphabetical', label: 'Alphabetical' }, - { value: 'amount-high', label: 'Highest first' }, - { value: 'amount-low', label: 'Lowest first' }, -]; diff --git a/types/backing-history.ts b/types/backing-history.ts deleted file mode 100644 index 054c4506..00000000 --- a/types/backing-history.ts +++ /dev/null @@ -1,32 +0,0 @@ -export interface BackingHistoryItem { - id: string; - backer: { - name: string; - isAnonymous: boolean; - avatar?: string; - walletAddress: string; - }; - amount: number; - currency: string; - date: Date; - timeAgo: string; -} - -export interface BackingHistoryFilters { - searchQuery: string; - sortBy: 'newest' | 'oldest' | 'alphabetical' | 'amount-high' | 'amount-low'; - dateRange: { - from: Date | null; - to: Date | null; - }; - amountRange: { - min: number; - max: number; - }; - identityType: 'all' | 'identified' | 'anonymous'; -} - -export interface BackingHistorySortOption { - value: string; - label: string; -} From 1642230f1b8497bc6cee74c95134a31469095bd4 Mon Sep 17 00:00:00 2001 From: Benjtalkshow Date: Sun, 24 Aug 2025 00:51:34 +0100 Subject: [PATCH 05/11] fix: link backing history flow --- app/user/backing-history/page.tsx | 109 ---------- components/campaigns/CampaignTable.tsx | 10 +- .../back-project/back-project-form.tsx | 201 ++++++++++++++++++ components/campaigns/back-project/index.tsx | 112 ++++++++++ .../project-submission-loading.tsx | 15 ++ .../backing-history/backing-history-table.tsx | 0 .../backing-history/backing-history.tsx | 0 .../backing-history/filter-popover.tsx | 0 .../backing-history/index.tsx | 1 + .../backing-history/sort-filter-popover.tsx | 0 lib/data/backing-history-mock.ts | 163 +++++--------- 11 files changed, 388 insertions(+), 223 deletions(-) delete mode 100644 app/user/backing-history/page.tsx create mode 100644 components/campaigns/back-project/back-project-form.tsx create mode 100644 components/campaigns/back-project/index.tsx create mode 100644 components/campaigns/back-project/project-submission-loading.tsx rename components/{flows => campaigns}/backing-history/backing-history-table.tsx (100%) rename components/{flows => campaigns}/backing-history/backing-history.tsx (100%) rename components/{flows => campaigns}/backing-history/filter-popover.tsx (100%) rename components/{flows => campaigns}/backing-history/index.tsx (98%) rename components/{flows => campaigns}/backing-history/sort-filter-popover.tsx (100%) diff --git a/app/user/backing-history/page.tsx b/app/user/backing-history/page.tsx deleted file mode 100644 index b42193df..00000000 --- a/app/user/backing-history/page.tsx +++ /dev/null @@ -1,109 +0,0 @@ -'use client'; - -import { useState } from 'react'; -import { Button } from '@/components/ui/button'; -import BackingHistory from '@/components/flows/backing-history/index'; - -// Sample data matching the images -const sampleBackers = [ - { - id: '1', - name: 'Collins Odumeje', - avatar: '/placeholder.svg?height=32&width=32', - amount: 2300, - date: new Date('2025-08-05'), - walletId: 'GDS3...GB7', - isAnonymous: false, - }, - { - id: '2', - name: 'Collins Odumeje', - avatar: '/placeholder.svg?height=32&width=32', - amount: 2300, - date: new Date('2025-08-05'), - walletId: 'GDS3...GB7', - isAnonymous: false, - }, - { - id: '3', - name: 'Collins Odumeje', - avatar: '/placeholder.svg?height=32&width=32', - amount: 2300, - date: new Date('2025-08-05'), - walletId: 'GDS3...GB7', - isAnonymous: false, - }, - { - id: '4', - name: 'Anonymous', - amount: 2300, - date: new Date('2025-08-05'), - walletId: 'GDS3...GB7', - isAnonymous: true, - }, - { - id: '5', - name: 'Collins Odumeje', - avatar: '/placeholder.svg?height=32&width=32', - amount: 2300, - date: new Date('2025-08-05'), - walletId: 'GDS3...GB7', - isAnonymous: false, - }, - { - id: '6', - name: 'Anonymous', - amount: 2300, - date: new Date('2025-08-05'), - walletId: 'GDS3...GB7', - isAnonymous: true, - }, - { - id: '7', - name: 'Anonymous', - amount: 2300, - date: new Date('2025-08-05'), - walletId: 'GDS3...GB7', - isAnonymous: true, - }, - { - id: '8', - name: 'Collins Odumeje', - avatar: '/placeholder.svg?height=32&width=32', - amount: 2300, - date: new Date('2025-08-05'), - walletId: 'GDS3...GB7', - isAnonymous: false, - }, - { - id: '9', - name: 'Anonymous', - amount: 2300, - date: new Date('2025-08-05'), - walletId: 'GDS3...GB7', - isAnonymous: true, - }, -]; - -export default function Home() { - const [showBackingHistory, setShowBackingHistory] = useState(false); - - return ( -
-
- - - -
-
- ); -} diff --git a/components/campaigns/CampaignTable.tsx b/components/campaigns/CampaignTable.tsx index f2a8ee2f..3cf47c58 100644 --- a/components/campaigns/CampaignTable.tsx +++ b/components/campaigns/CampaignTable.tsx @@ -25,6 +25,8 @@ import { TabFilter, mockApiService, } from '@/lib/data/campaigns-mock'; +import BackingHistory from './backing-history'; +import { sampleBackers } from '@/lib/data/backing-history-mock'; const CampaignRow = ({ campaign, @@ -420,6 +422,7 @@ const CampaignTable = () => { const [loading, setLoading] = useState(true); const [error, setError] = useState(null); const [campaignSummaryOpen, setCampaignSummaryOpen] = useState(false); + const [backingHistoryOpen, setBackingHistoryOpen] = useState(false); const [currentPage, setCurrentPage] = useState(1); const [totalPages, setTotalPages] = useState(1); const itemsPerPage = 10; @@ -477,8 +480,8 @@ const CampaignTable = () => { setCampaignSummaryOpen(true); break; case 'view-history': - // TODO: Navigate to history page toast.info('Opening history...'); + setBackingHistoryOpen(true); break; case 'campaign-details': // TODO: Navigate to details page @@ -719,6 +722,11 @@ const CampaignTable = () => { open={campaignSummaryOpen} setOpen={setCampaignSummaryOpen} /> + ); }; diff --git a/components/campaigns/back-project/back-project-form.tsx b/components/campaigns/back-project/back-project-form.tsx new file mode 100644 index 00000000..21c52022 --- /dev/null +++ b/components/campaigns/back-project/back-project-form.tsx @@ -0,0 +1,201 @@ +'use client'; + +import type React from 'react'; +import { useState } from 'react'; +import { + Select, + SelectContent, + SelectItem, + SelectTrigger, + SelectValue, +} from '@/components/ui/select'; +import { Checkbox } from '@/components/ui/checkbox'; +import { ArrowLeft, Check, Copy } from 'lucide-react'; +import { BoundlessButton } from '@/components/buttons'; + +interface BackProjectFormProps { + onSubmit: (data: { + amount: string; + currency: string; + token: string; + network: string; + walletAddress: string; + keepAnonymous: boolean; + }) => void; + isLoading?: boolean; +} + +const QUICK_AMOUNTS = [10, 20, 30, 50, 100, 500, 1000]; + +export function BackProjectForm({ + onSubmit, + isLoading = false, +}: BackProjectFormProps) { + const [amount, setAmount] = useState(''); + const [currency] = useState('USDT'); + const [token, setToken] = useState(''); + const [network, setNetwork] = useState('Stella / Soroban'); + const [walletAddress] = useState('GDS3...GB7'); + const [keepAnonymous, setKeepAnonymous] = useState(false); + + const handleSubmit = (e: React.FormEvent) => { + e.preventDefault(); + onSubmit({ + amount, + currency, + token, + network, + walletAddress, + keepAnonymous, + }); + }; + + const handleQuickAmount = (quickAmount: number) => { + setAmount(quickAmount.toString()); + }; + + const handleCopyAddress = async (e: React.MouseEvent) => { + e.preventDefault(); + try { + await navigator.clipboard.writeText(walletAddress); + // Could add toast notification here instead of state + } catch { + // Fallback for browsers that don't support clipboard API + const textArea = document.createElement('textarea'); + // Silent fallback for older browsers + textArea.value = walletAddress; + document.body.appendChild(textArea); + textArea.select(); + try { + document.execCommand('copy'); + } catch { + // Copy failed, but no need to log in production + } + document.body.removeChild(textArea); + } + }; + + const isFormValid = amount && currency && token && walletAddress; + + return ( +
+
+ +

Back Project

+
+
+
+

+ Funds will be held in escrow and released only upon milestone + approvals. +

+
+ +
+ +
+ {currency} + setAmount(e.target.value)} + type='number' + className='w-full bg-transparent font-normal text-base text-placeholder focus:outline-none' + placeholder='1000' + disabled={isLoading} + /> +
+

min. amount: $10

+ +
+ {QUICK_AMOUNTS.map(quickAmount => ( + + ))} +
+
+ +
+ + +
+ +
+ +
+ setNetwork(e.target.value)} + type='text' + className='w-full bg-transparent font-normal text-base text-placeholder focus:outline-none' + disabled={isLoading} + /> +
+
+ +
+ + + + {walletAddress} + + +
+ +
+ setKeepAnonymous(checked as boolean)} + disabled={isLoading} + className='border-stepper-border data-[state=checked]:bg-primary data-[state=checked]:border-primary' + /> + +
+ + + Confirm Contribution + +
+
+ ); +} diff --git a/components/campaigns/back-project/index.tsx b/components/campaigns/back-project/index.tsx new file mode 100644 index 00000000..c8a3207b --- /dev/null +++ b/components/campaigns/back-project/index.tsx @@ -0,0 +1,112 @@ +'use client'; + +import { useState } from 'react'; +import { BoundlessButton } from '@/components/buttons'; +import { ProjectSubmissionSuccess } from '@/components/project'; +import BoundlessSheet from '@/components/sheet/boundless-sheet'; +import { ProjectSubmissionLoading } from '@/components/flows/back-project/project-submission-loading'; +import { BackProjectForm } from './back-project-form'; + +type BackProjectState = 'form' | 'loading' | 'success'; + +interface BackProjectData { + amount: string; + currency: string; + token: string; + network: string; + walletAddress: string; + keepAnonymous: boolean; +} + +const BackProject = () => { + const [isSheetOpen, setIsSheetOpen] = useState(false); + const [backProjectState, setBackProjectState] = + useState('form'); + + // eslint-disable-next-line @typescript-eslint/no-unused-vars + const handleBackProject = (data: BackProjectData) => { + setBackProjectState('loading'); + // TODO: Send data to actual API endpoint when backend is ready + + // Simulate API call - data will be used when API is implemented + setTimeout(() => { + setBackProjectState('success'); + }, 2000); + }; + + // const handleContinue = () => { + // setIsSheetOpen(false) + // setBackProjectState("form") + // } + + // const handleViewHistory = () => { + // // Navigate to history page or open history modal + // setIsSheetOpen(false) + // // TODO: Implement backing history modal or navigation + // } + + // const handleBack = () => { + // if (backProjectState === "success") { + // setBackProjectState("form") + // } + // } + + const renderSheetContent = () => { + if (backProjectState === 'success') { + return ( +
+
+ {/* */} +
+ +
+ ); + } + + return ( +
+ + + {backProjectState === 'loading' && ( +
+ +
+ )} +
+ ); + }; + + return ( +
+ + {renderSheetContent()} + + + setIsSheetOpen(true)}> + Back Project + +
+ ); +}; + +export default BackProject; diff --git a/components/campaigns/back-project/project-submission-loading.tsx b/components/campaigns/back-project/project-submission-loading.tsx new file mode 100644 index 00000000..4dc27ea2 --- /dev/null +++ b/components/campaigns/back-project/project-submission-loading.tsx @@ -0,0 +1,15 @@ +export function ProjectSubmissionLoading() { + return ( +
+
+ {/* Outer spinning ring */} +
+ {/* Inner spinning arc */} +
+
+

+ Processing your contribution... +

+
+ ); +} diff --git a/components/flows/backing-history/backing-history-table.tsx b/components/campaigns/backing-history/backing-history-table.tsx similarity index 100% rename from components/flows/backing-history/backing-history-table.tsx rename to components/campaigns/backing-history/backing-history-table.tsx diff --git a/components/flows/backing-history/backing-history.tsx b/components/campaigns/backing-history/backing-history.tsx similarity index 100% rename from components/flows/backing-history/backing-history.tsx rename to components/campaigns/backing-history/backing-history.tsx diff --git a/components/flows/backing-history/filter-popover.tsx b/components/campaigns/backing-history/filter-popover.tsx similarity index 100% rename from components/flows/backing-history/filter-popover.tsx rename to components/campaigns/backing-history/filter-popover.tsx diff --git a/components/flows/backing-history/index.tsx b/components/campaigns/backing-history/index.tsx similarity index 98% rename from components/flows/backing-history/index.tsx rename to components/campaigns/backing-history/index.tsx index af9bf4c9..f457a3f3 100644 --- a/components/flows/backing-history/index.tsx +++ b/components/campaigns/backing-history/index.tsx @@ -119,6 +119,7 @@ const BackingHistory: React.FC = ({
+

Backing History

{/* Search and Controls */}
diff --git a/components/flows/backing-history/sort-filter-popover.tsx b/components/campaigns/backing-history/sort-filter-popover.tsx similarity index 100% rename from components/flows/backing-history/sort-filter-popover.tsx rename to components/campaigns/backing-history/sort-filter-popover.tsx diff --git a/lib/data/backing-history-mock.ts b/lib/data/backing-history-mock.ts index 3de9417e..e20b387a 100644 --- a/lib/data/backing-history-mock.ts +++ b/lib/data/backing-history-mock.ts @@ -1,142 +1,79 @@ -import type { BackingHistoryItem } from '@/types/backing-history'; - -export const mockBackingHistory: BackingHistoryItem[] = [ +export const sampleBackers = [ { id: '1', - backer: { - name: 'Collins Odumeje', - isAnonymous: false, - avatar: '/diverse-user-avatars.png', - walletAddress: 'GDS3...GB7', - }, + name: 'Collins Odumeje', + avatar: '/placeholder.svg?height=32&width=32', amount: 2300, - currency: 'USDT', - date: new Date('2025-08-17'), - timeAgo: '3s', + date: new Date('2025-08-05'), + walletId: 'GDS3...GB7', + isAnonymous: false, }, { id: '2', - backer: { - name: 'Sarah Chen', - isAnonymous: false, - avatar: '/diverse-user-avatars.png', - walletAddress: 'ABC1...XYZ', - }, - amount: 1500, - currency: 'USDT', - date: new Date('2025-08-16'), - timeAgo: '1d', + name: 'Collins Odumeje', + avatar: '/placeholder.svg?height=32&width=32', + amount: 2300, + date: new Date('2025-08-05'), + walletId: 'GDS3...GB7', + isAnonymous: false, }, { id: '3', - backer: { - name: 'Anonymous', - isAnonymous: true, - avatar: '/anonymous-user-concept.png', - walletAddress: 'DEF4...789', - }, - amount: 5000, - currency: 'USDT', - date: new Date('2025-08-15'), - timeAgo: '2d', + name: 'Collins Odumeje', + avatar: '/placeholder.svg?height=32&width=32', + amount: 2300, + date: new Date('2025-08-05'), + walletId: 'GDS3...GB7', + isAnonymous: false, }, { id: '4', - backer: { - name: 'Michael Rodriguez', - isAnonymous: false, - avatar: '/diverse-user-avatars.png', - walletAddress: 'HIJ7...456', - }, - amount: 750, - currency: 'USDT', - date: new Date('2025-08-14'), - timeAgo: '3d', + name: 'Anonymous', + amount: 2300, + date: new Date('2025-08-05'), + walletId: 'GDS3...GB7', + isAnonymous: true, }, { id: '5', - backer: { - name: 'Anonymous', - isAnonymous: true, - avatar: '/anonymous-user-concept.png', - walletAddress: 'KLM0...123', - }, - amount: 3200, - currency: 'USDT', - date: new Date('2025-08-13'), - timeAgo: '4d', + name: 'Collins Odumeje', + avatar: '/placeholder.svg?height=32&width=32', + amount: 2300, + date: new Date('2025-08-05'), + walletId: 'GDS3...GB7', + isAnonymous: false, }, { id: '6', - backer: { - name: 'Emma Thompson', - isAnonymous: false, - avatar: '/diverse-user-avatars.png', - walletAddress: 'NOP3...890', - }, - amount: 1800, - currency: 'USDT', - date: new Date('2025-08-12'), - timeAgo: '5d', + name: 'Anonymous', + amount: 2300, + date: new Date('2025-08-05'), + walletId: 'GDS3...GB7', + isAnonymous: true, }, { id: '7', - backer: { - name: 'David Kim', - isAnonymous: false, - avatar: '/diverse-user-avatars.png', - walletAddress: 'QRS6...567', - }, - amount: 4500, - currency: 'USDT', - date: new Date('2025-08-11'), - timeAgo: '6d', + name: 'Anonymous', + amount: 2300, + date: new Date('2025-08-05'), + walletId: 'GDS3...GB7', + isAnonymous: true, }, { id: '8', - backer: { - name: 'Anonymous', - isAnonymous: true, - avatar: '/anonymous-user-concept.png', - walletAddress: 'TUV9...234', - }, - amount: 950, - currency: 'USDT', - date: new Date('2025-08-10'), - timeAgo: '1w', + name: 'Collins Odumeje', + avatar: '/placeholder.svg?height=32&width=32', + amount: 2300, + date: new Date('2025-08-05'), + walletId: 'GDS3...GB7', + isAnonymous: false, }, { id: '9', - backer: { - name: 'Lisa Wang', - isAnonymous: false, - avatar: '/diverse-user-avatars.png', - walletAddress: 'WXY2...901', - }, - amount: 2750, - currency: 'USDT', - date: new Date('2025-08-09'), - timeAgo: '1w', - }, - { - id: '10', - backer: { - name: 'Anonymous', - isAnonymous: true, - avatar: '/anonymous-user-concept.png', - walletAddress: 'ZAB5...678', - }, - amount: 6200, - currency: 'USDT', - date: new Date('2025-08-08'), - timeAgo: '1w', + name: 'Anonymous', + amount: 2300, + date: new Date('2025-08-05'), + walletId: 'GDS3...GB7', + isAnonymous: true, }, ]; - -export const sortOptions = [ - { value: 'newest', label: 'Newest first' }, - { value: 'oldest', label: 'Oldest first' }, - { value: 'alphabetical', label: 'Alphabetical' }, - { value: 'amount-high', label: 'Highest first' }, - { value: 'amount-low', label: 'Lowest first' }, -]; From a6a09e71923488b9b181d2bfce1584c95e8757f7 Mon Sep 17 00:00:00 2001 From: Benjtalkshow Date: Sun, 24 Aug 2025 01:05:15 +0100 Subject: [PATCH 06/11] fix: lint back project flow --- components/campaigns/CampaignTable.tsx | 13 ++++++++ components/campaigns/back-project/index.tsx | 36 ++++++++++----------- 2 files changed, 30 insertions(+), 19 deletions(-) diff --git a/components/campaigns/CampaignTable.tsx b/components/campaigns/CampaignTable.tsx index 3cf47c58..defd95ba 100644 --- a/components/campaigns/CampaignTable.tsx +++ b/components/campaigns/CampaignTable.tsx @@ -27,6 +27,7 @@ import { } from '@/lib/data/campaigns-mock'; import BackingHistory from './backing-history'; import { sampleBackers } from '@/lib/data/backing-history-mock'; +import BackProject from './back-project'; const CampaignRow = ({ campaign, @@ -156,6 +157,12 @@ const CampaignRow = ({ > {campaign.status === 'live' && ( <> + handleAction('back-project')} + className='text-white font-medium hover:!text-white text-sm py-2 px-3 rounded-md hover:!bg-[#2B2B2B] hover:shadow-[0_1px_4px_0_rgba(40,45,40,0.04),_0_0_24px_1px_rgba(10,15,10,0.14)] transition-colors duration-200 cursor-pointer' + > + Back Project + handleAction('share')} className='text-white font-medium hover:!text-white text-sm py-2 px-3 rounded-md hover:!bg-[#2B2B2B] hover:shadow-[0_1px_4px_0_rgba(40,45,40,0.04),_0_0_24px_1px_rgba(10,15,10,0.14)] transition-colors duration-200 cursor-pointer' @@ -423,6 +430,7 @@ const CampaignTable = () => { const [error, setError] = useState(null); const [campaignSummaryOpen, setCampaignSummaryOpen] = useState(false); const [backingHistoryOpen, setBackingHistoryOpen] = useState(false); + const [backingProjectOpen, setBackingProjectOpen] = useState(false); const [currentPage, setCurrentPage] = useState(1); const [totalPages, setTotalPages] = useState(1); const itemsPerPage = 10; @@ -483,6 +491,10 @@ const CampaignTable = () => { toast.info('Opening history...'); setBackingHistoryOpen(true); break; + case 'back-project': + toast.info('Opening back project...'); + setBackingProjectOpen(true); + break; case 'campaign-details': // TODO: Navigate to details page toast.info('Opening details...'); @@ -727,6 +739,7 @@ const CampaignTable = () => { setOpen={setBackingHistoryOpen} backers={sampleBackers} /> +
); }; diff --git a/components/campaigns/back-project/index.tsx b/components/campaigns/back-project/index.tsx index c8a3207b..8b226e5e 100644 --- a/components/campaigns/back-project/index.tsx +++ b/components/campaigns/back-project/index.tsx @@ -1,7 +1,7 @@ 'use client'; import { useState } from 'react'; -import { BoundlessButton } from '@/components/buttons'; +// import { BoundlessButton } from '@/components/buttons'; import { ProjectSubmissionSuccess } from '@/components/project'; import BoundlessSheet from '@/components/sheet/boundless-sheet'; import { ProjectSubmissionLoading } from '@/components/flows/back-project/project-submission-loading'; @@ -18,8 +18,12 @@ interface BackProjectData { keepAnonymous: boolean; } -const BackProject = () => { - const [isSheetOpen, setIsSheetOpen] = useState(false); +interface BackingProjectProps { + open: boolean; + setOpen: (open: boolean) => void; +} +const BackProject = ({ open, setOpen }: BackingProjectProps) => { + // const [isSheetOpen, setIsSheetOpen] = useState(false); const [backProjectState, setBackProjectState] = useState('form'); @@ -90,22 +94,16 @@ const BackProject = () => { }; return ( -
- - {renderSheetContent()} - - - setIsSheetOpen(true)}> - Back Project - -
+ + {renderSheetContent()} + ); }; From 6efefa19354398d96e1a42a4b0f435c2be28a159 Mon Sep 17 00:00:00 2001 From: Benjtalkshow Date: Sun, 24 Aug 2025 13:15:04 +0100 Subject: [PATCH 07/11] fix: remove flows folder --- components/campaigns/back-project/index.tsx | 2 +- .../backing-history/backing-history.tsx | 506 ------------------ .../flows/back-project/back-project-form.tsx | 201 ------- components/flows/back-project/index.tsx | 112 ---- .../project-submission-loading.tsx | 15 - .../flows/backing-history/backing-history.tsx | 506 ------------------ 6 files changed, 1 insertion(+), 1341 deletions(-) delete mode 100644 components/campaigns/backing-history/backing-history.tsx delete mode 100644 components/flows/back-project/back-project-form.tsx delete mode 100644 components/flows/back-project/index.tsx delete mode 100644 components/flows/back-project/project-submission-loading.tsx delete mode 100644 components/flows/backing-history/backing-history.tsx diff --git a/components/campaigns/back-project/index.tsx b/components/campaigns/back-project/index.tsx index c8a3207b..9d89eee7 100644 --- a/components/campaigns/back-project/index.tsx +++ b/components/campaigns/back-project/index.tsx @@ -4,7 +4,7 @@ import { useState } from 'react'; import { BoundlessButton } from '@/components/buttons'; import { ProjectSubmissionSuccess } from '@/components/project'; import BoundlessSheet from '@/components/sheet/boundless-sheet'; -import { ProjectSubmissionLoading } from '@/components/flows/back-project/project-submission-loading'; +import { ProjectSubmissionLoading } from './project-submission-loading'; import { BackProjectForm } from './back-project-form'; type BackProjectState = 'form' | 'loading' | 'success'; diff --git a/components/campaigns/backing-history/backing-history.tsx b/components/campaigns/backing-history/backing-history.tsx deleted file mode 100644 index 6f8e8527..00000000 --- a/components/campaigns/backing-history/backing-history.tsx +++ /dev/null @@ -1,506 +0,0 @@ -'use client'; - -import type React from 'react'; -import { useState, useMemo } from 'react'; -import { - Search, - Filter, - ArrowUpDown, - Calendar, - DollarSign, - User, - Wallet, - Check, - CheckIcon, -} from 'lucide-react'; -import { Button } from '@/components/ui/button'; -import { Input } from '@/components/ui/input'; -import { Avatar, AvatarFallback, AvatarImage } from '@/components/ui/avatar'; -import { Slider } from '@/components/ui/slider'; -import { - Select, - SelectContent, - SelectItem, - SelectTrigger, - SelectValue, -} from '@/components/ui/select'; -import { - Popover, - PopoverContent, - PopoverTrigger, -} from '@/components/ui/popover'; -import { format } from 'date-fns'; -import BoundlessSheet from '@/components/sheet/boundless-sheet'; - -interface Backer { - id: string; - name: string; - avatar?: string; - amount: number; - date: Date; - walletId: string; - isAnonymous: boolean; -} - -interface BackingHistoryProps { - open: boolean; - setOpen: (open: boolean) => void; - backers: Backer[]; -} - -type SortOption = 'newest' | 'oldest' | 'alphabetical' | 'highest' | 'lowest'; -type IdentityFilter = 'all' | 'identified' | 'anonymous'; - -const BackingHistory: React.FC = ({ - open, - setOpen, - backers, -}) => { - const [searchQuery, setSearchQuery] = useState(''); - const [sortBy, setSortBy] = useState('newest'); - const [amountRange, setAmountRange] = useState([0, 10000]); - const [dateRange, setDateRange] = useState<{ from?: Date; to?: Date }>({}); - const [identityFilter, setIdentityFilter] = useState('all'); - const [showFilters, setShowFilters] = useState(false); - const [showSortPopover, setShowSortPopover] = useState(false); - - const setQuickDateFilter = (days: number) => { - const today = new Date(); - const pastDate = new Date(today.getTime() - days * 24 * 60 * 60 * 1000); - setDateRange({ from: pastDate, to: today }); - }; - - const resetFilters = () => { - setSearchQuery(''); - setSortBy('newest'); - setAmountRange([0, 10000]); - setDateRange({}); - setIdentityFilter('all'); - }; - - const resetDateRange = () => { - setDateRange({}); - }; - - const resetAmountRange = () => { - setAmountRange([10, 1000]); - }; - - const resetIdentityFilter = () => { - setIdentityFilter('all'); - }; - - const applyFilters = () => { - setShowSortPopover(false); - }; - - const filteredAndSortedBackers = useMemo(() => { - const filtered = backers.filter(backer => { - const matchesSearch = - backer.name.toLowerCase().includes(searchQuery.toLowerCase()) || - backer.walletId.toLowerCase().includes(searchQuery.toLowerCase()); - - const matchesAmount = - backer.amount >= amountRange[0] && backer.amount <= amountRange[1]; - - const matchesDate = - !dateRange.from || - !dateRange.to || - (backer.date >= dateRange.from && backer.date <= dateRange.to); - - const matchesIdentity = - identityFilter === 'all' || - (identityFilter === 'anonymous' && backer.isAnonymous) || - (identityFilter === 'identified' && !backer.isAnonymous); - - return matchesSearch && matchesAmount && matchesDate && matchesIdentity; - }); - - filtered.sort((a, b) => { - switch (sortBy) { - case 'newest': - return b.date.getTime() - a.date.getTime(); - case 'oldest': - return a.date.getTime() - b.date.getTime(); - case 'alphabetical': - return a.name.localeCompare(b.name); - case 'highest': - return b.amount - a.amount; - case 'lowest': - return a.amount - b.amount; - default: - return 0; - } - }); - - return filtered; - }, [backers, searchQuery, sortBy, amountRange, dateRange, identityFilter]); - - const formatDate = (date: Date) => { - const now = new Date(); - const diffInDays = Math.floor( - (now.getTime() - date.getTime()) / (1000 * 60 * 60 * 24) - ); - - if (diffInDays === 0) return 'Today'; - if (diffInDays === 1) return '1d'; - if (diffInDays < 7) return `${diffInDays}d`; - if (diffInDays < 30) return `${Math.floor(diffInDays / 7)}w`; - return format(date, 'MMM dd, yyyy'); - }; - - return ( - -
-
- {/* Search and Controls */} -
-
- - setSearchQuery(e.target.value)} - className='pl-10 py-5 placeholder:font-medium bg-muted/20 border-muted-foreground/20 text-white placeholder:text-muted-foreground' - /> -
- - - - - - -
- {/* Date Range Section */} -
-
-

- Date range -

- -
-
-
-
- -
- - -
-
-
- -
- - -
-
-
-
- - - -
-
-
- - {/* Amount Range Section */} -
-
-

- Amount range -

- -
-
-
-
- -
- - - setAmountRange([ - Number.parseInt(e.target.value) || 0, - amountRange[1], - ]) - } - className='bg-muted/20 border-muted-foreground/20 text-white pl-8' - /> -
-
-
- -
- - - setAmountRange([ - amountRange[0], - Number.parseInt(e.target.value) || 0, - ]) - } - className='bg-muted/20 border-muted-foreground/20 text-white pl-8' - /> -
-
-
- -
-
- - {/* Identity Type Section */} -
-
-

- Identity Type -

- -
-
- - - -
-
- - {/* Action Buttons */} -
- - -
-
-
-
-
- - {/* Filters Panel */} - {showFilters && ( -
- {/* Sort Options */} -
-
- - -
- -
-
- )} - - {/* Results Header */} -
-
Backer
-
Amount
-
Date
-
- - {/* Backing List */} -
- {filteredAndSortedBackers.map(backer => ( -
-
-
- - - - {backer.isAnonymous ? ( - - ) : ( - backer.name.charAt(0) - )} - - -
- -
-
-
-
{backer.name}
-
- - {backer.walletId} -
-
-
-
- ${backer.amount.toLocaleString()} -
-
- {formatDate(backer.date)} -
-
- ))} -
- - {filteredAndSortedBackers.length === 0 && ( -
- No backers found matching your criteria -
- )} -
-
-
- ); -}; - -export default BackingHistory; diff --git a/components/flows/back-project/back-project-form.tsx b/components/flows/back-project/back-project-form.tsx deleted file mode 100644 index 21c52022..00000000 --- a/components/flows/back-project/back-project-form.tsx +++ /dev/null @@ -1,201 +0,0 @@ -'use client'; - -import type React from 'react'; -import { useState } from 'react'; -import { - Select, - SelectContent, - SelectItem, - SelectTrigger, - SelectValue, -} from '@/components/ui/select'; -import { Checkbox } from '@/components/ui/checkbox'; -import { ArrowLeft, Check, Copy } from 'lucide-react'; -import { BoundlessButton } from '@/components/buttons'; - -interface BackProjectFormProps { - onSubmit: (data: { - amount: string; - currency: string; - token: string; - network: string; - walletAddress: string; - keepAnonymous: boolean; - }) => void; - isLoading?: boolean; -} - -const QUICK_AMOUNTS = [10, 20, 30, 50, 100, 500, 1000]; - -export function BackProjectForm({ - onSubmit, - isLoading = false, -}: BackProjectFormProps) { - const [amount, setAmount] = useState(''); - const [currency] = useState('USDT'); - const [token, setToken] = useState(''); - const [network, setNetwork] = useState('Stella / Soroban'); - const [walletAddress] = useState('GDS3...GB7'); - const [keepAnonymous, setKeepAnonymous] = useState(false); - - const handleSubmit = (e: React.FormEvent) => { - e.preventDefault(); - onSubmit({ - amount, - currency, - token, - network, - walletAddress, - keepAnonymous, - }); - }; - - const handleQuickAmount = (quickAmount: number) => { - setAmount(quickAmount.toString()); - }; - - const handleCopyAddress = async (e: React.MouseEvent) => { - e.preventDefault(); - try { - await navigator.clipboard.writeText(walletAddress); - // Could add toast notification here instead of state - } catch { - // Fallback for browsers that don't support clipboard API - const textArea = document.createElement('textarea'); - // Silent fallback for older browsers - textArea.value = walletAddress; - document.body.appendChild(textArea); - textArea.select(); - try { - document.execCommand('copy'); - } catch { - // Copy failed, but no need to log in production - } - document.body.removeChild(textArea); - } - }; - - const isFormValid = amount && currency && token && walletAddress; - - return ( -
-
- -

Back Project

-
-
-
-

- Funds will be held in escrow and released only upon milestone - approvals. -

-
- -
- -
- {currency} - setAmount(e.target.value)} - type='number' - className='w-full bg-transparent font-normal text-base text-placeholder focus:outline-none' - placeholder='1000' - disabled={isLoading} - /> -
-

min. amount: $10

- -
- {QUICK_AMOUNTS.map(quickAmount => ( - - ))} -
-
- -
- - -
- -
- -
- setNetwork(e.target.value)} - type='text' - className='w-full bg-transparent font-normal text-base text-placeholder focus:outline-none' - disabled={isLoading} - /> -
-
- -
- - - - {walletAddress} - - -
- -
- setKeepAnonymous(checked as boolean)} - disabled={isLoading} - className='border-stepper-border data-[state=checked]:bg-primary data-[state=checked]:border-primary' - /> - -
- - - Confirm Contribution - -
-
- ); -} diff --git a/components/flows/back-project/index.tsx b/components/flows/back-project/index.tsx deleted file mode 100644 index c8a3207b..00000000 --- a/components/flows/back-project/index.tsx +++ /dev/null @@ -1,112 +0,0 @@ -'use client'; - -import { useState } from 'react'; -import { BoundlessButton } from '@/components/buttons'; -import { ProjectSubmissionSuccess } from '@/components/project'; -import BoundlessSheet from '@/components/sheet/boundless-sheet'; -import { ProjectSubmissionLoading } from '@/components/flows/back-project/project-submission-loading'; -import { BackProjectForm } from './back-project-form'; - -type BackProjectState = 'form' | 'loading' | 'success'; - -interface BackProjectData { - amount: string; - currency: string; - token: string; - network: string; - walletAddress: string; - keepAnonymous: boolean; -} - -const BackProject = () => { - const [isSheetOpen, setIsSheetOpen] = useState(false); - const [backProjectState, setBackProjectState] = - useState('form'); - - // eslint-disable-next-line @typescript-eslint/no-unused-vars - const handleBackProject = (data: BackProjectData) => { - setBackProjectState('loading'); - // TODO: Send data to actual API endpoint when backend is ready - - // Simulate API call - data will be used when API is implemented - setTimeout(() => { - setBackProjectState('success'); - }, 2000); - }; - - // const handleContinue = () => { - // setIsSheetOpen(false) - // setBackProjectState("form") - // } - - // const handleViewHistory = () => { - // // Navigate to history page or open history modal - // setIsSheetOpen(false) - // // TODO: Implement backing history modal or navigation - // } - - // const handleBack = () => { - // if (backProjectState === "success") { - // setBackProjectState("form") - // } - // } - - const renderSheetContent = () => { - if (backProjectState === 'success') { - return ( -
-
- {/* */} -
- -
- ); - } - - return ( -
- - - {backProjectState === 'loading' && ( -
- -
- )} -
- ); - }; - - return ( -
- - {renderSheetContent()} - - - setIsSheetOpen(true)}> - Back Project - -
- ); -}; - -export default BackProject; diff --git a/components/flows/back-project/project-submission-loading.tsx b/components/flows/back-project/project-submission-loading.tsx deleted file mode 100644 index 4dc27ea2..00000000 --- a/components/flows/back-project/project-submission-loading.tsx +++ /dev/null @@ -1,15 +0,0 @@ -export function ProjectSubmissionLoading() { - return ( -
-
- {/* Outer spinning ring */} -
- {/* Inner spinning arc */} -
-
-

- Processing your contribution... -

-
- ); -} diff --git a/components/flows/backing-history/backing-history.tsx b/components/flows/backing-history/backing-history.tsx deleted file mode 100644 index 6f8e8527..00000000 --- a/components/flows/backing-history/backing-history.tsx +++ /dev/null @@ -1,506 +0,0 @@ -'use client'; - -import type React from 'react'; -import { useState, useMemo } from 'react'; -import { - Search, - Filter, - ArrowUpDown, - Calendar, - DollarSign, - User, - Wallet, - Check, - CheckIcon, -} from 'lucide-react'; -import { Button } from '@/components/ui/button'; -import { Input } from '@/components/ui/input'; -import { Avatar, AvatarFallback, AvatarImage } from '@/components/ui/avatar'; -import { Slider } from '@/components/ui/slider'; -import { - Select, - SelectContent, - SelectItem, - SelectTrigger, - SelectValue, -} from '@/components/ui/select'; -import { - Popover, - PopoverContent, - PopoverTrigger, -} from '@/components/ui/popover'; -import { format } from 'date-fns'; -import BoundlessSheet from '@/components/sheet/boundless-sheet'; - -interface Backer { - id: string; - name: string; - avatar?: string; - amount: number; - date: Date; - walletId: string; - isAnonymous: boolean; -} - -interface BackingHistoryProps { - open: boolean; - setOpen: (open: boolean) => void; - backers: Backer[]; -} - -type SortOption = 'newest' | 'oldest' | 'alphabetical' | 'highest' | 'lowest'; -type IdentityFilter = 'all' | 'identified' | 'anonymous'; - -const BackingHistory: React.FC = ({ - open, - setOpen, - backers, -}) => { - const [searchQuery, setSearchQuery] = useState(''); - const [sortBy, setSortBy] = useState('newest'); - const [amountRange, setAmountRange] = useState([0, 10000]); - const [dateRange, setDateRange] = useState<{ from?: Date; to?: Date }>({}); - const [identityFilter, setIdentityFilter] = useState('all'); - const [showFilters, setShowFilters] = useState(false); - const [showSortPopover, setShowSortPopover] = useState(false); - - const setQuickDateFilter = (days: number) => { - const today = new Date(); - const pastDate = new Date(today.getTime() - days * 24 * 60 * 60 * 1000); - setDateRange({ from: pastDate, to: today }); - }; - - const resetFilters = () => { - setSearchQuery(''); - setSortBy('newest'); - setAmountRange([0, 10000]); - setDateRange({}); - setIdentityFilter('all'); - }; - - const resetDateRange = () => { - setDateRange({}); - }; - - const resetAmountRange = () => { - setAmountRange([10, 1000]); - }; - - const resetIdentityFilter = () => { - setIdentityFilter('all'); - }; - - const applyFilters = () => { - setShowSortPopover(false); - }; - - const filteredAndSortedBackers = useMemo(() => { - const filtered = backers.filter(backer => { - const matchesSearch = - backer.name.toLowerCase().includes(searchQuery.toLowerCase()) || - backer.walletId.toLowerCase().includes(searchQuery.toLowerCase()); - - const matchesAmount = - backer.amount >= amountRange[0] && backer.amount <= amountRange[1]; - - const matchesDate = - !dateRange.from || - !dateRange.to || - (backer.date >= dateRange.from && backer.date <= dateRange.to); - - const matchesIdentity = - identityFilter === 'all' || - (identityFilter === 'anonymous' && backer.isAnonymous) || - (identityFilter === 'identified' && !backer.isAnonymous); - - return matchesSearch && matchesAmount && matchesDate && matchesIdentity; - }); - - filtered.sort((a, b) => { - switch (sortBy) { - case 'newest': - return b.date.getTime() - a.date.getTime(); - case 'oldest': - return a.date.getTime() - b.date.getTime(); - case 'alphabetical': - return a.name.localeCompare(b.name); - case 'highest': - return b.amount - a.amount; - case 'lowest': - return a.amount - b.amount; - default: - return 0; - } - }); - - return filtered; - }, [backers, searchQuery, sortBy, amountRange, dateRange, identityFilter]); - - const formatDate = (date: Date) => { - const now = new Date(); - const diffInDays = Math.floor( - (now.getTime() - date.getTime()) / (1000 * 60 * 60 * 24) - ); - - if (diffInDays === 0) return 'Today'; - if (diffInDays === 1) return '1d'; - if (diffInDays < 7) return `${diffInDays}d`; - if (diffInDays < 30) return `${Math.floor(diffInDays / 7)}w`; - return format(date, 'MMM dd, yyyy'); - }; - - return ( - -
-
- {/* Search and Controls */} -
-
- - setSearchQuery(e.target.value)} - className='pl-10 py-5 placeholder:font-medium bg-muted/20 border-muted-foreground/20 text-white placeholder:text-muted-foreground' - /> -
- - - - - - -
- {/* Date Range Section */} -
-
-

- Date range -

- -
-
-
-
- -
- - -
-
-
- -
- - -
-
-
-
- - - -
-
-
- - {/* Amount Range Section */} -
-
-

- Amount range -

- -
-
-
-
- -
- - - setAmountRange([ - Number.parseInt(e.target.value) || 0, - amountRange[1], - ]) - } - className='bg-muted/20 border-muted-foreground/20 text-white pl-8' - /> -
-
-
- -
- - - setAmountRange([ - amountRange[0], - Number.parseInt(e.target.value) || 0, - ]) - } - className='bg-muted/20 border-muted-foreground/20 text-white pl-8' - /> -
-
-
- -
-
- - {/* Identity Type Section */} -
-
-

- Identity Type -

- -
-
- - - -
-
- - {/* Action Buttons */} -
- - -
-
-
-
-
- - {/* Filters Panel */} - {showFilters && ( -
- {/* Sort Options */} -
-
- - -
- -
-
- )} - - {/* Results Header */} -
-
Backer
-
Amount
-
Date
-
- - {/* Backing List */} -
- {filteredAndSortedBackers.map(backer => ( -
-
-
- - - - {backer.isAnonymous ? ( - - ) : ( - backer.name.charAt(0) - )} - - -
- -
-
-
-
{backer.name}
-
- - {backer.walletId} -
-
-
-
- ${backer.amount.toLocaleString()} -
-
- {formatDate(backer.date)} -
-
- ))} -
- - {filteredAndSortedBackers.length === 0 && ( -
- No backers found matching your criteria -
- )} -
-
-
- ); -}; - -export default BackingHistory; From 88c55a18ec6df19b0ef0fbb8fa00fb92861267b8 Mon Sep 17 00:00:00 2001 From: Benjtalkshow Date: Tue, 26 Aug 2025 02:11:51 +0100 Subject: [PATCH 08/11] fix: use same colors from figma --- .../backing-history/filter-popover.tsx | 20 ++++----- .../backing-history/sort-filter-popover.tsx | 42 ++++++++----------- 2 files changed, 28 insertions(+), 34 deletions(-) diff --git a/components/campaigns/backing-history/filter-popover.tsx b/components/campaigns/backing-history/filter-popover.tsx index 686d5db1..eb5fd8a9 100644 --- a/components/campaigns/backing-history/filter-popover.tsx +++ b/components/campaigns/backing-history/filter-popover.tsx @@ -102,7 +102,7 @@ const AdvancedFilterPopover: React.FC = ({ ? format(dateRange.from, 'MM-dd-yy') : '06-04-25' } - className='bg-muted/20 p-5 border-muted-foreground/30 text-white pr-8 cursor-pointer' + className='bg-[#101010] p-5 border-muted-foreground/30 text-white pr-8 cursor-pointer' readOnly /> @@ -135,7 +135,7 @@ const AdvancedFilterPopover: React.FC = ({ ? format(dateRange.to, 'MM-dd-yy') : '06-04-25' } - className='bg-muted/20 p-5 border-muted-foreground/20 text-white pr-8 cursor-pointer' + className='bg-[#101010] p-5 border-muted-foreground/20 text-white pr-8 cursor-pointer' readOnly /> @@ -160,7 +160,7 @@ const AdvancedFilterPopover: React.FC = ({ variant='outline' size='sm' onClick={() => setQuickDateFilter(0)} - className='bg-muted/20 p-5 border-muted-foreground/20 rounded-3xl text-white hover:bg-muted/30 text-xs' + className='bg-[#101010] p-5 border-muted-foreground/20 rounded-3xl text-white hover:bg-muted/30 text-xs' > Today @@ -168,7 +168,7 @@ const AdvancedFilterPopover: React.FC = ({ variant='outline' size='sm' onClick={() => setQuickDateFilter(7)} - className='bg-muted/20 rounded-3xl p-5 border-muted-foreground/20 text-white hover:bg-muted/30 text-xs' + className='bg-[#101010] rounded-3xl p-5 border-muted-foreground/20 text-white hover:bg-muted/30 text-xs' > Last 7 days @@ -176,7 +176,7 @@ const AdvancedFilterPopover: React.FC = ({ variant='outline' size='sm' onClick={() => setQuickDateFilter(30)} - className='bg-muted/20 rounded-3xl p-5 border-muted-foreground/20 text-white hover:bg-muted/30 text-xs' + className='bg-[#101010] rounded-3xl p-5 border-muted-foreground/20 text-white hover:bg-muted/30 text-xs' > Last month @@ -211,7 +211,7 @@ const AdvancedFilterPopover: React.FC = ({ amountRange[1], ]) } - className='bg-muted/20 border-muted-foreground/20 text-white pl-8 p-5' + className='bg-[#101010] border-muted-foreground/20 text-white pl-8 p-5' />
@@ -227,7 +227,7 @@ const AdvancedFilterPopover: React.FC = ({ Number.parseInt(e.target.value) || 0, ]) } - className='bg-muted/20 border-muted-foreground/20 text-white pl-8 p-5' + className='bg-[#101010] border-muted-foreground/20 text-white pl-8 p-5' /> @@ -262,7 +262,7 @@ const AdvancedFilterPopover: React.FC = ({ onClick={() => setIdentityFilter('all')} className={`w-full justify-between bg-transparent p-5 border-none text-white hover:bg-muted/30 ${ identityFilter === 'all' - ? 'bg-muted/40 border-muted-foreground/20' + ? 'bg-[#2b2b2b] border-muted-foreground/20' : '' }`} > @@ -274,7 +274,7 @@ const AdvancedFilterPopover: React.FC = ({ onClick={() => setIdentityFilter('identified')} className={`w-full justify-start p-5 bg-transparent border-none text-white hover:bg-muted/30 ${ identityFilter === 'identified' - ? 'bg-muted/40 border-muted-foreground/20' + ? 'bg-[#2b2b2b] border-muted-foreground/20' : '' }`} > @@ -299,7 +299,7 @@ const AdvancedFilterPopover: React.FC = ({ diff --git a/components/campaigns/backing-history/sort-filter-popover.tsx b/components/campaigns/backing-history/sort-filter-popover.tsx index ecb0629b..98f2a7d7 100644 --- a/components/campaigns/backing-history/sort-filter-popover.tsx +++ b/components/campaigns/backing-history/sort-filter-popover.tsx @@ -48,33 +48,30 @@ const SortFilterPopover: React.FC = ({
@@ -85,18 +82,17 @@ const SortFilterPopover: React.FC = ({ Backer name @@ -107,32 +103,30 @@ const SortFilterPopover: React.FC = ({
From ca0102d17f3b4882875fdf842209e7368c581c80 Mon Sep 17 00:00:00 2001 From: Benjtalkshow Date: Tue, 26 Aug 2025 22:45:34 +0100 Subject: [PATCH 09/11] fix: fix responsive designs --- .../backing-history/backing-history-table.tsx | 110 +++++++++--------- .../backing-history/filter-popover.tsx | 23 ++-- .../campaigns/backing-history/index.tsx | 62 +++++----- 3 files changed, 100 insertions(+), 95 deletions(-) diff --git a/components/campaigns/backing-history/backing-history-table.tsx b/components/campaigns/backing-history/backing-history-table.tsx index bbbf3da6..04c0e4c1 100644 --- a/components/campaigns/backing-history/backing-history-table.tsx +++ b/components/campaigns/backing-history/backing-history-table.tsx @@ -36,67 +36,69 @@ const BackingHistoryTable: React.FC = ({ }; return ( - <> - {/* Results Header */} -
-
Backer
-
Amount
-
Date
-
+
+
+ {/* Results Header */} +
+
Backer
+
Amount
+
Date
+
- {/* Backing List */} -
- {backers.map(backer => ( -
-
-
- - - - {backer.isAnonymous ? ( - - ) : ( - backer.name.charAt(0) - )} - - -
- -
-
-
-
- {backer.name} + {/* Backing List */} +
+ {backers.map(backer => ( +
+
+
+ + + + {backer.isAnonymous ? ( + + ) : ( + backer.name.charAt(0) + )} + + +
+ +
-
- - {backer.walletId} +
+
+ {backer.name} +
+
+ + {backer.walletId} +
+
+ ${backer.amount.toLocaleString()} +
+
+ {formatDate(backer.date)} +
-
- ${backer.amount.toLocaleString()} -
-
- {formatDate(backer.date)} -
+ ))} +
+ + {backers.length === 0 && ( +
+ No backers found matching your criteria
- ))} + )}
- - {backers.length === 0 && ( -
- No backers found matching your criteria -
- )} - +
); }; diff --git a/components/campaigns/backing-history/filter-popover.tsx b/components/campaigns/backing-history/filter-popover.tsx index eb5fd8a9..eff70158 100644 --- a/components/campaigns/backing-history/filter-popover.tsx +++ b/components/campaigns/backing-history/filter-popover.tsx @@ -68,8 +68,9 @@ const AdvancedFilterPopover: React.FC = ({
@@ -87,7 +88,7 @@ const AdvancedFilterPopover: React.FC = ({
-
+
= ({ onOpenChange={setShowFromCalendar} > -
+
= ({
-
+
= ({
-
+
@@ -168,7 +169,7 @@ const AdvancedFilterPopover: React.FC = ({ variant='outline' size='sm' onClick={() => setQuickDateFilter(7)} - className='bg-[#101010] rounded-3xl p-5 border-muted-foreground/20 text-white hover:bg-muted/30 text-xs' + className='bg-[#101010] rounded-3xl p-3 sm:p-5 border-muted-foreground/20 text-white hover:bg-muted/30 text-xs flex-1 sm:flex-none min-w-0' > Last 7 days @@ -176,7 +177,7 @@ const AdvancedFilterPopover: React.FC = ({ variant='outline' size='sm' onClick={() => setQuickDateFilter(30)} - className='bg-[#101010] rounded-3xl p-5 border-muted-foreground/20 text-white hover:bg-muted/30 text-xs' + className='bg-[#101010] rounded-3xl p-3 sm:p-5 border-muted-foreground/20 text-white hover:bg-muted/30 text-xs flex-1 sm:flex-none min-w-0' > Last month @@ -198,7 +199,7 @@ const AdvancedFilterPopover: React.FC = ({
-
+
@@ -295,7 +296,7 @@ const AdvancedFilterPopover: React.FC = ({
{/* Action Buttons */} -
+
+
+
+

+ Campaign Details +

+ +

+ Boundless is a trustless, decentralized application (dApp) + that empowers changemakers and builders to raise funds + transparently without intermediaries. Campaigns are structured + around clearly defined milestones, with funds held in escrow + and released only upon approval. Grant creators can launch + programs with rule-based logic, and applicants can apply with + proposals that go through public validation. The platform is + built on the Stellar blockchain and powered by Soroban smart + contracts to ensure transparency, security, and autonomy. +

+
+
+
+

Milestones

+
+ {milestones.map((milestone, idx) => { + const isExpanded = expandedMilestone === milestone.id; + return ( +
+
+ Milestone {idx + 1}
- {isExpanded && ( -
-
- {milestone.description} +
+
toggle(milestone.id)} + > +
+ {milestone.title || `Milestone ${idx + 1}`}
-
-
- - - {formatDate(milestone.deliveryDate)} - + +
+ {isExpanded && ( +
+
+ {milestone.description}
-
- - $ - {calculateFundAmount( - milestone.fundPercentage - ).toLocaleString()}{' '} - ({milestone.fundPercentage || 0}%) - +
+
+ + + {formatDate(milestone.deliveryDate)} + +
+
+ + $ + {calculateFundAmount( + milestone.fundPercentage + ).toLocaleString()}{' '} + ({milestone.fundPercentage || 0}%) + +
-
- )} + )} +
-
- ); - })} -
-
-
-
-

- Backing History -

- + ); + })} +
-
- {backingHistory.map(backer => ( -
+
+

+ Backing History +

+ +
+
+ {backingHistory.map(backer => ( +
+
+
+ + + + {backer.name.charAt(0)} + + + {backer.isVerified && ( +
+ +
+ )} +
+
+
+ {backer.name} +
+
+ + {backer.wallet}
- )} -
-
-
- {backer.name}
-
- - {backer.wallet} +
+
+
+ ${backer.amount.toLocaleString()}
-
-
-
- ${backer.amount.toLocaleString()} +
+
+ {backer.time} +
-
-
{backer.time}
-
-
- ))} + ))} +
+
-
-
- + + ); }; From 79a24008b6cfbd4994ef66d5536dc87976728eeb Mon Sep 17 00:00:00 2001 From: Benjtalkshow Date: Tue, 2 Sep 2025 12:02:29 +0100 Subject: [PATCH 11/11] fix: modify the waitlist page --- app/(landing)/waitlist/page.tsx | 17 +- package-lock.json | 2017 +------------------------------ 2 files changed, 68 insertions(+), 1966 deletions(-) diff --git a/app/(landing)/waitlist/page.tsx b/app/(landing)/waitlist/page.tsx index 4d5d53dc..17eaa138 100644 --- a/app/(landing)/waitlist/page.tsx +++ b/app/(landing)/waitlist/page.tsx @@ -377,12 +377,17 @@ const WaitlistPage = () => { )}

- By joining, you agree to receive updates from Boundless. Learn more in - our{' '} - - Privacy policy - - . + + By joining, you agree to receive updates from Boundless. + {' '} +
+ + Learn more in our{' '} + + Privacy policy + + . +

diff --git a/package-lock.json b/package-lock.json index aa968fde..0c9c7aed 100644 --- a/package-lock.json +++ b/package-lock.json @@ -201,22 +201,6 @@ "semver": "^7.6.3" } }, - "node_modules/@creit.tech/stellar-wallets-kit/node_modules/@stellar/stellar-sdk": { - "version": "12.3.0", - "resolved": "https://registry.npmjs.org/@stellar/stellar-sdk/-/stellar-sdk-12.3.0.tgz", - "integrity": "sha512-F2DYFop/M5ffXF0lvV5Ezjk+VWNKg0QDX8gNhwehVU3y5LYA3WAY6VcCarMGPaG9Wdgoeh1IXXzOautpqpsltw==", - "license": "Apache-2.0", - "peer": true, - "dependencies": { - "@stellar/stellar-base": "^12.1.1", - "axios": "^1.7.7", - "bignumber.js": "^9.1.2", - "eventsource": "^2.0.2", - "randombytes": "^2.1.0", - "toml": "^3.0.0", - "urijs": "^1.19.1" - } - }, "node_modules/@creit.tech/stellar-wallets-kit/node_modules/@trezor/connect-plugin-stellar": { "version": "9.0.6", "resolved": "https://registry.npmjs.org/@trezor/connect-plugin-stellar/-/connect-plugin-stellar-9.0.6.tgz", @@ -448,67 +432,6 @@ "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, - "node_modules/@ethereumjs/common": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/@ethereumjs/common/-/common-10.0.0.tgz", - "integrity": "sha512-qb0M1DGdXzMAf3O6Zg5Wr5UDjoxBmplLPbQyC6DQ0LfgVDBRdqn0Pk+/hHm4q0McE22Of0MxbV4hhiDTkSgKag==", - "license": "MIT", - "peer": true, - "dependencies": { - "@ethereumjs/util": "^10.0.0", - "eventemitter3": "^5.0.1" - } - }, - "node_modules/@ethereumjs/common/node_modules/eventemitter3": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz", - "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==", - "license": "MIT", - "peer": true - }, - "node_modules/@ethereumjs/rlp": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/@ethereumjs/rlp/-/rlp-10.0.0.tgz", - "integrity": "sha512-h2SK6RxFBfN5ZGykbw8LTNNLckSXZeuUZ6xqnmtF22CzZbHflFMcIOyfVGdvyCVQqIoSbGMHtvyxMCWnOyB9RA==", - "license": "MPL-2.0", - "peer": true, - "bin": { - "rlp": "bin/rlp.cjs" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/@ethereumjs/tx": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/@ethereumjs/tx/-/tx-10.0.0.tgz", - "integrity": "sha512-DApm04kp2nbvaOuHy2Rkcz1ZeJkTVgW6oCuNnQf9bRtGc+LsvLrdULE3LoGtBItEoNEcgXLJqrV0foooWFX6jw==", - "license": "MPL-2.0", - "peer": true, - "dependencies": { - "@ethereumjs/common": "^10.0.0", - "@ethereumjs/rlp": "^10.0.0", - "@ethereumjs/util": "^10.0.0", - "ethereum-cryptography": "^3.2.0" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/@ethereumjs/util": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/@ethereumjs/util/-/util-10.0.0.tgz", - "integrity": "sha512-lO23alM4uQsv8dp6/yEm4Xw4328+wIRjSeuBO1mRTToUWRcByEMTk87yzBpXgpixpgHrl+9LTn9KB2vvKKtOQQ==", - "license": "MPL-2.0", - "peer": true, - "dependencies": { - "@ethereumjs/rlp": "^10.0.0", - "ethereum-cryptography": "^3.2.0" - }, - "engines": { - "node": ">=18" - } - }, "node_modules/@everstake/wallet-sdk-solana": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/@everstake/wallet-sdk-solana/-/wallet-sdk-solana-2.0.5.tgz", @@ -2023,34 +1946,6 @@ "@tybys/wasm-util": "^0.10.0" } }, - "node_modules/@near-js/accounts": { - "version": "1.4.1", - "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", - "@near-js/signers": "0.2.2", - "@near-js/transactions": "1.3.3", - "@near-js/types": "0.3.1", - "@near-js/utils": "1.1.0", - "@noble/hashes": "1.7.1", - "borsh": "1.0.0", - "depd": "2.0.0", - "is-my-json-valid": "^2.20.6", - "lru_map": "0.4.1", - "near-abi": "0.2.0" - } - }, - "node_modules/@near-js/accounts/node_modules/borsh": { - "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 - }, "node_modules/@near-js/crypto": { "version": "1.4.2", "resolved": "https://registry.npmjs.org/@near-js/crypto/-/crypto-1.4.2.tgz", @@ -2071,132 +1966,6 @@ "integrity": "sha512-fSVWzzemnyfF89EPwlUNsrS5swF5CrtiN4e+h0/lLf4dz2he4L3ndM20PS9wj7ICSkXJe/TQUHdaPTq15b1mNQ==", "license": "Apache-2.0" }, - "node_modules/@near-js/keystores": { - "version": "0.2.2", - "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" - } - }, - "node_modules/@near-js/keystores-browser": { - "version": "0.2.2", - "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" - } - }, - "node_modules/@near-js/keystores-node": { - "version": "0.1.2", - "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" - } - }, - "node_modules/@near-js/providers": { - "version": "1.0.3", - "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", - "@near-js/utils": "1.1.0", - "borsh": "1.0.0", - "exponential-backoff": "^3.1.2" - }, - "optionalDependencies": { - "node-fetch": "2.6.7" - } - }, - "node_modules/@near-js/providers/node_modules/borsh": { - "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 - }, - "node_modules/@near-js/providers/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", - "optional": true, - "peer": true, - "dependencies": { - "whatwg-url": "^5.0.0" - }, - "engines": { - "node": "4.x || >=6.0.0" - }, - "peerDependencies": { - "encoding": "^0.1.0" - }, - "peerDependenciesMeta": { - "encoding": { - "optional": true - } - } - }, - "node_modules/@near-js/signers": { - "version": "0.2.2", - "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", - "@noble/hashes": "1.3.3" - } - }, - "node_modules/@near-js/signers/node_modules/@noble/hashes": { - "version": "1.3.3", - "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" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/@near-js/transactions": { - "version": "1.3.3", - "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", - "@near-js/types": "0.3.1", - "@near-js/utils": "1.1.0", - "@noble/hashes": "1.7.1", - "borsh": "1.0.0" - } - }, - "node_modules/@near-js/transactions/node_modules/borsh": { - "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 - }, "node_modules/@near-js/types": { "version": "0.3.1", "resolved": "https://registry.npmjs.org/@near-js/types/-/types-0.3.1.tgz", @@ -2215,31 +1984,6 @@ "mustache": "4.0.0" } }, - "node_modules/@near-js/wallet-account": { - "version": "1.3.3", - "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", - "@near-js/keystores": "0.2.2", - "@near-js/providers": "1.0.3", - "@near-js/signers": "0.2.2", - "@near-js/transactions": "1.3.3", - "@near-js/types": "0.3.1", - "@near-js/utils": "1.1.0", - "borsh": "1.0.0" - } - }, - "node_modules/@near-js/wallet-account/node_modules/borsh": { - "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 - }, "node_modules/@near-wallet-selector/core": { "version": "8.10.2", "resolved": "https://registry.npmjs.org/@near-wallet-selector/core/-/core-8.10.2.tgz", @@ -2444,19 +2188,6 @@ "rxjs": ">=7.0.0" } }, - "node_modules/@noble/ciphers": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@noble/ciphers/-/ciphers-1.3.0.tgz", - "integrity": "sha512-2I0gnIVPtfnMw9ee9h1dJG7tp81+8Ob3OJb3Mv37rx5L40/b0i7djjCVvGOVqc9AEIQyvyu1i6ypKdFw8R8gQw==", - "license": "MIT", - "peer": true, - "engines": { - "node": "^14.21.3 || >=16" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, "node_modules/@noble/curves": { "version": "1.8.1", "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.8.1.tgz", @@ -3961,50 +3692,6 @@ "url": "https://paulmillr.com/funding/" } }, - "node_modules/@scure/bip32": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/@scure/bip32/-/bip32-1.7.0.tgz", - "integrity": "sha512-E4FFX/N3f4B80AKWp5dP6ow+flD1LQZo/w8UnLGYZO674jS6YnYeepycOOksv+vLPSpgN35wgKgy+ybfTb2SMw==", - "license": "MIT", - "peer": true, - "dependencies": { - "@noble/curves": "~1.9.0", - "@noble/hashes": "~1.8.0", - "@scure/base": "~1.2.5" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/@scure/bip32/node_modules/@noble/curves": { - "version": "1.9.4", - "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.9.4.tgz", - "integrity": "sha512-2bKONnuM53lINoDrSmK8qP8W271ms7pygDhZt4SiLOoLwBtoHqeCFi6RG42V8zd3mLHuJFhU/Bmaqo4nX0/kBw==", - "license": "MIT", - "peer": true, - "dependencies": { - "@noble/hashes": "1.8.0" - }, - "engines": { - "node": "^14.21.3 || >=16" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/@scure/bip32/node_modules/@noble/hashes": { - "version": "1.8.0", - "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" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, "node_modules/@scure/bip39": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/@scure/bip39/-/bip39-1.6.0.tgz", @@ -4036,70 +3723,25 @@ "integrity": "sha512-auUj4k+f4pyrIVf4GW5UKquSZFHJWri06QgARy9C0t9ZTjJLIuNIrr1yl9bWcJWJ1Gz1vOvYN1D+QPaIlNMVkQ==", "license": "MIT" }, - "node_modules/@solana-program/compute-budget": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/@solana-program/compute-budget/-/compute-budget-0.8.0.tgz", - "integrity": "sha512-qPKxdxaEsFxebZ4K5RPuy7VQIm/tfJLa1+Nlt3KNA8EYQkz9Xm8htdoEaXVrer9kpgzzp9R3I3Bh6omwCM06tQ==", - "license": "Apache-2.0", - "peer": true, - "peerDependencies": { - "@solana/kit": "^2.1.0" - } - }, - "node_modules/@solana-program/stake": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/@solana-program/stake/-/stake-0.2.1.tgz", - "integrity": "sha512-ssNPsJv9XHaA+L7ihzmWGYcm/+XYURQ8UA3wQMKf6ccEHyHOUgoglkkDU/BoA0+wul6HxZUN0tHFymC0qFw6sg==", + "node_modules/@solana/buffer-layout": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@solana/buffer-layout/-/buffer-layout-4.0.1.tgz", + "integrity": "sha512-E1ImOIAD1tBZFRdjeM4/pzTiTApC0AOBGwyAMS4fwIodCWArzJ3DWdoh8cKxeFM2fElkxBh2Aqts1BPC373rHA==", "license": "MIT", - "peer": true, - "peerDependencies": { - "@solana/kit": "^2.1.0" - } - }, - "node_modules/@solana-program/system": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/@solana-program/system/-/system-0.7.0.tgz", - "integrity": "sha512-FKTBsKHpvHHNc1ATRm7SlC5nF/VdJtOSjldhcyfMN9R7xo712Mo2jHIzvBgn8zQO5Kg0DcWuKB7268Kv1ocicw==", - "license": "Apache-2.0", - "peer": true, - "peerDependencies": { - "@solana/kit": "^2.1.0" - } - }, - "node_modules/@solana-program/token": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/@solana-program/token/-/token-0.5.1.tgz", - "integrity": "sha512-bJvynW5q9SFuVOZ5vqGVkmaPGA0MCC+m9jgJj1nk5m20I389/ms69ASnhWGoOPNcie7S9OwBX0gTj2fiyWpfag==", - "license": "Apache-2.0", - "peer": true, - "peerDependencies": { - "@solana/kit": "^2.1.0" - } - }, - "node_modules/@solana-program/token-2022": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/@solana-program/token-2022/-/token-2022-0.4.2.tgz", - "integrity": "sha512-zIpR5t4s9qEU3hZKupzIBxJ6nUV5/UVyIT400tu9vT1HMs5JHxaTTsb5GUhYjiiTvNwU0MQavbwc4Dl29L0Xvw==", - "license": "Apache-2.0", - "peer": true, - "peerDependencies": { - "@solana/kit": "^2.1.0", - "@solana/sysvars": "^2.1.0" + "dependencies": { + "buffer": "~6.0.3" + }, + "engines": { + "node": ">=5.10" } }, - "node_modules/@solana/accounts": { + "node_modules/@solana/codecs-core": { "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@solana/accounts/-/accounts-2.3.0.tgz", - "integrity": "sha512-QgQTj404Z6PXNOyzaOpSzjgMOuGwG8vC66jSDB+3zHaRcEPRVRd2sVSrd1U6sHtnV3aiaS6YyDuPQMheg4K2jw==", + "resolved": "https://registry.npmjs.org/@solana/codecs-core/-/codecs-core-2.3.0.tgz", + "integrity": "sha512-oG+VZzN6YhBHIoSKgS5ESM9VIGzhWjEHEGNPSibiDTxFhsFWxNaz8LbMDPjBUE69r9wmdGLkrQ+wVPbnJcZPvw==", "license": "MIT", - "peer": true, "dependencies": { - "@solana/addresses": "2.3.0", - "@solana/codecs-core": "2.3.0", - "@solana/codecs-strings": "2.3.0", - "@solana/errors": "2.3.0", - "@solana/rpc-spec": "2.3.0", - "@solana/rpc-types": "2.3.0" + "@solana/errors": "2.3.0" }, "engines": { "node": ">=20.18.0" @@ -4108,18 +3750,14 @@ "typescript": ">=5.3.3" } }, - "node_modules/@solana/addresses": { + "node_modules/@solana/codecs-numbers": { "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@solana/addresses/-/addresses-2.3.0.tgz", - "integrity": "sha512-ypTNkY2ZaRFpHLnHAgaW8a83N0/WoqdFvCqf4CQmnMdFsZSdC7qOwcbd7YzdaQn9dy+P2hybewzB+KP7LutxGA==", + "resolved": "https://registry.npmjs.org/@solana/codecs-numbers/-/codecs-numbers-2.3.0.tgz", + "integrity": "sha512-jFvvwKJKffvG7Iz9dmN51OGB7JBcy2CJ6Xf3NqD/VP90xak66m/Lg48T01u5IQ/hc15mChVHiBm+HHuOFDUrQg==", "license": "MIT", - "peer": true, "dependencies": { - "@solana/assertions": "2.3.0", "@solana/codecs-core": "2.3.0", - "@solana/codecs-strings": "2.3.0", - "@solana/errors": "2.3.0", - "@solana/nominal-types": "2.3.0" + "@solana/errors": "2.3.0" }, "engines": { "node": ">=20.18.0" @@ -4128,14 +3766,17 @@ "typescript": ">=5.3.3" } }, - "node_modules/@solana/assertions": { + "node_modules/@solana/errors": { "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@solana/assertions/-/assertions-2.3.0.tgz", - "integrity": "sha512-Ekoet3khNg3XFLN7MIz8W31wPQISpKUGDGTylLptI+JjCDWx3PIa88xjEMqFo02WJ8sBj2NLV64Xg1sBcsHjZQ==", + "resolved": "https://registry.npmjs.org/@solana/errors/-/errors-2.3.0.tgz", + "integrity": "sha512-66RI9MAbwYV0UtP7kGcTBVLxJgUxoZGm8Fbc0ah+lGiAw17Gugco6+9GrJCV83VyF2mDWyYnYM9qdI3yjgpnaQ==", "license": "MIT", - "peer": true, "dependencies": { - "@solana/errors": "2.3.0" + "chalk": "^5.4.1", + "commander": "^14.0.0" + }, + "bin": { + "errors": "bin/cli.mjs" }, "engines": { "node": ">=20.18.0" @@ -4144,690 +3785,31 @@ "typescript": ">=5.3.3" } }, - "node_modules/@solana/buffer-layout": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@solana/buffer-layout/-/buffer-layout-4.0.1.tgz", - "integrity": "sha512-E1ImOIAD1tBZFRdjeM4/pzTiTApC0AOBGwyAMS4fwIodCWArzJ3DWdoh8cKxeFM2fElkxBh2Aqts1BPC373rHA==", + "node_modules/@solana/errors/node_modules/chalk": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.4.1.tgz", + "integrity": "sha512-zgVZuo2WcZgfUEmsn6eO3kINexW8RAE4maiQ8QNs8CtpPCSyMiYsULR3HQYkm3w8FIA3SberyMJMSldGsW+U3w==", "license": "MIT", - "dependencies": { - "buffer": "~6.0.3" - }, "engines": { - "node": ">=5.10" + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/@solana/codecs": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@solana/codecs/-/codecs-2.3.0.tgz", - "integrity": "sha512-JVqGPkzoeyU262hJGdH64kNLH0M+Oew2CIPOa/9tR3++q2pEd4jU2Rxdfye9sd0Ce3XJrR5AIa8ZfbyQXzjh+g==", - "license": "MIT", - "peer": true, + "node_modules/@solana/wallet-adapter-base": { + "version": "0.9.27", + "resolved": "https://registry.npmjs.org/@solana/wallet-adapter-base/-/wallet-adapter-base-0.9.27.tgz", + "integrity": "sha512-kXjeNfNFVs/NE9GPmysBRKQ/nf+foSaq3kfVSeMcO/iVgigyRmB551OjU3WyAolLG/1jeEfKLqF9fKwMCRkUqg==", + "license": "Apache-2.0", "dependencies": { - "@solana/codecs-core": "2.3.0", - "@solana/codecs-data-structures": "2.3.0", - "@solana/codecs-numbers": "2.3.0", - "@solana/codecs-strings": "2.3.0", - "@solana/options": "2.3.0" + "@solana/wallet-standard-features": "^1.3.0", + "@wallet-standard/base": "^1.1.0", + "@wallet-standard/features": "^1.1.0", + "eventemitter3": "^5.0.1" }, "engines": { - "node": ">=20.18.0" - }, - "peerDependencies": { - "typescript": ">=5.3.3" - } - }, - "node_modules/@solana/codecs-core": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@solana/codecs-core/-/codecs-core-2.3.0.tgz", - "integrity": "sha512-oG+VZzN6YhBHIoSKgS5ESM9VIGzhWjEHEGNPSibiDTxFhsFWxNaz8LbMDPjBUE69r9wmdGLkrQ+wVPbnJcZPvw==", - "license": "MIT", - "dependencies": { - "@solana/errors": "2.3.0" - }, - "engines": { - "node": ">=20.18.0" - }, - "peerDependencies": { - "typescript": ">=5.3.3" - } - }, - "node_modules/@solana/codecs-data-structures": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@solana/codecs-data-structures/-/codecs-data-structures-2.3.0.tgz", - "integrity": "sha512-qvU5LE5DqEdYMYgELRHv+HMOx73sSoV1ZZkwIrclwUmwTbTaH8QAJURBj0RhQ/zCne7VuLLOZFFGv6jGigWhSw==", - "license": "MIT", - "peer": true, - "dependencies": { - "@solana/codecs-core": "2.3.0", - "@solana/codecs-numbers": "2.3.0", - "@solana/errors": "2.3.0" - }, - "engines": { - "node": ">=20.18.0" - }, - "peerDependencies": { - "typescript": ">=5.3.3" - } - }, - "node_modules/@solana/codecs-numbers": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@solana/codecs-numbers/-/codecs-numbers-2.3.0.tgz", - "integrity": "sha512-jFvvwKJKffvG7Iz9dmN51OGB7JBcy2CJ6Xf3NqD/VP90xak66m/Lg48T01u5IQ/hc15mChVHiBm+HHuOFDUrQg==", - "license": "MIT", - "dependencies": { - "@solana/codecs-core": "2.3.0", - "@solana/errors": "2.3.0" - }, - "engines": { - "node": ">=20.18.0" - }, - "peerDependencies": { - "typescript": ">=5.3.3" - } - }, - "node_modules/@solana/codecs-strings": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@solana/codecs-strings/-/codecs-strings-2.3.0.tgz", - "integrity": "sha512-y5pSBYwzVziXu521hh+VxqUtp0hYGTl1eWGoc1W+8mdvBdC1kTqm/X7aYQw33J42hw03JjryvYOvmGgk3Qz/Ug==", - "license": "MIT", - "peer": true, - "dependencies": { - "@solana/codecs-core": "2.3.0", - "@solana/codecs-numbers": "2.3.0", - "@solana/errors": "2.3.0" - }, - "engines": { - "node": ">=20.18.0" - }, - "peerDependencies": { - "fastestsmallesttextencoderdecoder": "^1.0.22", - "typescript": ">=5.3.3" - } - }, - "node_modules/@solana/errors": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@solana/errors/-/errors-2.3.0.tgz", - "integrity": "sha512-66RI9MAbwYV0UtP7kGcTBVLxJgUxoZGm8Fbc0ah+lGiAw17Gugco6+9GrJCV83VyF2mDWyYnYM9qdI3yjgpnaQ==", - "license": "MIT", - "dependencies": { - "chalk": "^5.4.1", - "commander": "^14.0.0" - }, - "bin": { - "errors": "bin/cli.mjs" - }, - "engines": { - "node": ">=20.18.0" - }, - "peerDependencies": { - "typescript": ">=5.3.3" - } - }, - "node_modules/@solana/errors/node_modules/chalk": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.4.1.tgz", - "integrity": "sha512-zgVZuo2WcZgfUEmsn6eO3kINexW8RAE4maiQ8QNs8CtpPCSyMiYsULR3HQYkm3w8FIA3SberyMJMSldGsW+U3w==", - "license": "MIT", - "engines": { - "node": "^12.17.0 || ^14.13 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/@solana/fast-stable-stringify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@solana/fast-stable-stringify/-/fast-stable-stringify-2.3.0.tgz", - "integrity": "sha512-KfJPrMEieUg6D3hfQACoPy0ukrAV8Kio883llt/8chPEG3FVTX9z/Zuf4O01a15xZmBbmQ7toil2Dp0sxMJSxw==", - "license": "MIT", - "peer": true, - "engines": { - "node": ">=20.18.0" - }, - "peerDependencies": { - "typescript": ">=5.3.3" - } - }, - "node_modules/@solana/functional": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@solana/functional/-/functional-2.3.0.tgz", - "integrity": "sha512-AgsPh3W3tE+nK3eEw/W9qiSfTGwLYEvl0rWaxHht/lRcuDVwfKRzeSa5G79eioWFFqr+pTtoCr3D3OLkwKz02Q==", - "license": "MIT", - "peer": true, - "engines": { - "node": ">=20.18.0" - }, - "peerDependencies": { - "typescript": ">=5.3.3" - } - }, - "node_modules/@solana/instructions": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@solana/instructions/-/instructions-2.3.0.tgz", - "integrity": "sha512-PLMsmaIKu7hEAzyElrk2T7JJx4D+9eRwebhFZpy2PXziNSmFF929eRHKUsKqBFM3cYR1Yy3m6roBZfA+bGE/oQ==", - "license": "MIT", - "peer": true, - "dependencies": { - "@solana/codecs-core": "2.3.0", - "@solana/errors": "2.3.0" - }, - "engines": { - "node": ">=20.18.0" - }, - "peerDependencies": { - "typescript": ">=5.3.3" - } - }, - "node_modules/@solana/keys": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@solana/keys/-/keys-2.3.0.tgz", - "integrity": "sha512-ZVVdga79pNH+2pVcm6fr2sWz9HTwfopDVhYb0Lh3dh+WBmJjwkabXEIHey2rUES7NjFa/G7sV8lrUn/v8LDCCQ==", - "license": "MIT", - "peer": true, - "dependencies": { - "@solana/assertions": "2.3.0", - "@solana/codecs-core": "2.3.0", - "@solana/codecs-strings": "2.3.0", - "@solana/errors": "2.3.0", - "@solana/nominal-types": "2.3.0" - }, - "engines": { - "node": ">=20.18.0" - }, - "peerDependencies": { - "typescript": ">=5.3.3" - } - }, - "node_modules/@solana/kit": { - "version": "2.3.0", - "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", - "@solana/codecs": "2.3.0", - "@solana/errors": "2.3.0", - "@solana/functional": "2.3.0", - "@solana/instructions": "2.3.0", - "@solana/keys": "2.3.0", - "@solana/programs": "2.3.0", - "@solana/rpc": "2.3.0", - "@solana/rpc-parsed-types": "2.3.0", - "@solana/rpc-spec-types": "2.3.0", - "@solana/rpc-subscriptions": "2.3.0", - "@solana/rpc-types": "2.3.0", - "@solana/signers": "2.3.0", - "@solana/sysvars": "2.3.0", - "@solana/transaction-confirmation": "2.3.0", - "@solana/transaction-messages": "2.3.0", - "@solana/transactions": "2.3.0" - }, - "engines": { - "node": ">=20.18.0" - }, - "peerDependencies": { - "typescript": ">=5.3.3" - } - }, - "node_modules/@solana/nominal-types": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@solana/nominal-types/-/nominal-types-2.3.0.tgz", - "integrity": "sha512-uKlMnlP4PWW5UTXlhKM8lcgIaNj8dvd8xO4Y9l+FVvh9RvW2TO0GwUO6JCo7JBzCB0PSqRJdWWaQ8pu1Ti/OkA==", - "license": "MIT", - "peer": true, - "engines": { - "node": ">=20.18.0" - }, - "peerDependencies": { - "typescript": ">=5.3.3" - } - }, - "node_modules/@solana/options": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@solana/options/-/options-2.3.0.tgz", - "integrity": "sha512-PPnnZBRCWWoZQ11exPxf//DRzN2C6AoFsDI/u2AsQfYih434/7Kp4XLpfOMT/XESi+gdBMFNNfbES5zg3wAIkw==", - "license": "MIT", - "peer": true, - "dependencies": { - "@solana/codecs-core": "2.3.0", - "@solana/codecs-data-structures": "2.3.0", - "@solana/codecs-numbers": "2.3.0", - "@solana/codecs-strings": "2.3.0", - "@solana/errors": "2.3.0" - }, - "engines": { - "node": ">=20.18.0" - }, - "peerDependencies": { - "typescript": ">=5.3.3" - } - }, - "node_modules/@solana/programs": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@solana/programs/-/programs-2.3.0.tgz", - "integrity": "sha512-UXKujV71VCI5uPs+cFdwxybtHZAIZyQkqDiDnmK+DawtOO9mBn4Nimdb/6RjR2CXT78mzO9ZCZ3qfyX+ydcB7w==", - "license": "MIT", - "peer": true, - "dependencies": { - "@solana/addresses": "2.3.0", - "@solana/errors": "2.3.0" - }, - "engines": { - "node": ">=20.18.0" - }, - "peerDependencies": { - "typescript": ">=5.3.3" - } - }, - "node_modules/@solana/promises": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@solana/promises/-/promises-2.3.0.tgz", - "integrity": "sha512-GjVgutZKXVuojd9rWy1PuLnfcRfqsaCm7InCiZc8bqmJpoghlyluweNc7ml9Y5yQn1P2IOyzh9+p/77vIyNybQ==", - "license": "MIT", - "peer": true, - "engines": { - "node": ">=20.18.0" - }, - "peerDependencies": { - "typescript": ">=5.3.3" - } - }, - "node_modules/@solana/rpc": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@solana/rpc/-/rpc-2.3.0.tgz", - "integrity": "sha512-ZWN76iNQAOCpYC7yKfb3UNLIMZf603JckLKOOLTHuy9MZnTN8XV6uwvDFhf42XvhglgUjGCEnbUqWtxQ9pa/pQ==", - "license": "MIT", - "peer": true, - "dependencies": { - "@solana/errors": "2.3.0", - "@solana/fast-stable-stringify": "2.3.0", - "@solana/functional": "2.3.0", - "@solana/rpc-api": "2.3.0", - "@solana/rpc-spec": "2.3.0", - "@solana/rpc-spec-types": "2.3.0", - "@solana/rpc-transformers": "2.3.0", - "@solana/rpc-transport-http": "2.3.0", - "@solana/rpc-types": "2.3.0" - }, - "engines": { - "node": ">=20.18.0" - }, - "peerDependencies": { - "typescript": ">=5.3.3" - } - }, - "node_modules/@solana/rpc-api": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@solana/rpc-api/-/rpc-api-2.3.0.tgz", - "integrity": "sha512-UUdiRfWoyYhJL9PPvFeJr4aJ554ob2jXcpn4vKmRVn9ire0sCbpQKYx6K8eEKHZWXKrDW8IDspgTl0gT/aJWVg==", - "license": "MIT", - "peer": true, - "dependencies": { - "@solana/addresses": "2.3.0", - "@solana/codecs-core": "2.3.0", - "@solana/codecs-strings": "2.3.0", - "@solana/errors": "2.3.0", - "@solana/keys": "2.3.0", - "@solana/rpc-parsed-types": "2.3.0", - "@solana/rpc-spec": "2.3.0", - "@solana/rpc-transformers": "2.3.0", - "@solana/rpc-types": "2.3.0", - "@solana/transaction-messages": "2.3.0", - "@solana/transactions": "2.3.0" - }, - "engines": { - "node": ">=20.18.0" - }, - "peerDependencies": { - "typescript": ">=5.3.3" - } - }, - "node_modules/@solana/rpc-parsed-types": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@solana/rpc-parsed-types/-/rpc-parsed-types-2.3.0.tgz", - "integrity": "sha512-B5pHzyEIbBJf9KHej+zdr5ZNAdSvu7WLU2lOUPh81KHdHQs6dEb310LGxcpCc7HVE8IEdO20AbckewDiAN6OCg==", - "license": "MIT", - "peer": true, - "engines": { - "node": ">=20.18.0" - }, - "peerDependencies": { - "typescript": ">=5.3.3" - } - }, - "node_modules/@solana/rpc-spec": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@solana/rpc-spec/-/rpc-spec-2.3.0.tgz", - "integrity": "sha512-fA2LMX4BMixCrNB2n6T83AvjZ3oUQTu7qyPLyt8gHQaoEAXs8k6GZmu6iYcr+FboQCjUmRPgMaABbcr9j2J9Sw==", - "license": "MIT", - "peer": true, - "dependencies": { - "@solana/errors": "2.3.0", - "@solana/rpc-spec-types": "2.3.0" - }, - "engines": { - "node": ">=20.18.0" - }, - "peerDependencies": { - "typescript": ">=5.3.3" - } - }, - "node_modules/@solana/rpc-spec-types": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@solana/rpc-spec-types/-/rpc-spec-types-2.3.0.tgz", - "integrity": "sha512-xQsb65lahjr8Wc9dMtP7xa0ZmDS8dOE2ncYjlvfyw/h4mpdXTUdrSMi6RtFwX33/rGuztQ7Hwaid5xLNSLvsFQ==", - "license": "MIT", - "peer": true, - "engines": { - "node": ">=20.18.0" - }, - "peerDependencies": { - "typescript": ">=5.3.3" - } - }, - "node_modules/@solana/rpc-subscriptions": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@solana/rpc-subscriptions/-/rpc-subscriptions-2.3.0.tgz", - "integrity": "sha512-Uyr10nZKGVzvCOqwCZgwYrzuoDyUdwtgQRefh13pXIrdo4wYjVmoLykH49Omt6abwStB0a4UL5gX9V4mFdDJZg==", - "license": "MIT", - "peer": true, - "dependencies": { - "@solana/errors": "2.3.0", - "@solana/fast-stable-stringify": "2.3.0", - "@solana/functional": "2.3.0", - "@solana/promises": "2.3.0", - "@solana/rpc-spec-types": "2.3.0", - "@solana/rpc-subscriptions-api": "2.3.0", - "@solana/rpc-subscriptions-channel-websocket": "2.3.0", - "@solana/rpc-subscriptions-spec": "2.3.0", - "@solana/rpc-transformers": "2.3.0", - "@solana/rpc-types": "2.3.0", - "@solana/subscribable": "2.3.0" - }, - "engines": { - "node": ">=20.18.0" - }, - "peerDependencies": { - "typescript": ">=5.3.3" - } - }, - "node_modules/@solana/rpc-subscriptions-api": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@solana/rpc-subscriptions-api/-/rpc-subscriptions-api-2.3.0.tgz", - "integrity": "sha512-9mCjVbum2Hg9KGX3LKsrI5Xs0KX390lS+Z8qB80bxhar6MJPugqIPH8uRgLhCW9GN3JprAfjRNl7our8CPvsPQ==", - "license": "MIT", - "peer": true, - "dependencies": { - "@solana/addresses": "2.3.0", - "@solana/keys": "2.3.0", - "@solana/rpc-subscriptions-spec": "2.3.0", - "@solana/rpc-transformers": "2.3.0", - "@solana/rpc-types": "2.3.0", - "@solana/transaction-messages": "2.3.0", - "@solana/transactions": "2.3.0" - }, - "engines": { - "node": ">=20.18.0" - }, - "peerDependencies": { - "typescript": ">=5.3.3" - } - }, - "node_modules/@solana/rpc-subscriptions-channel-websocket": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@solana/rpc-subscriptions-channel-websocket/-/rpc-subscriptions-channel-websocket-2.3.0.tgz", - "integrity": "sha512-2oL6ceFwejIgeWzbNiUHI2tZZnaOxNTSerszcin7wYQwijxtpVgUHiuItM/Y70DQmH9sKhmikQp+dqeGalaJxw==", - "license": "MIT", - "peer": true, - "dependencies": { - "@solana/errors": "2.3.0", - "@solana/functional": "2.3.0", - "@solana/rpc-subscriptions-spec": "2.3.0", - "@solana/subscribable": "2.3.0" - }, - "engines": { - "node": ">=20.18.0" - }, - "peerDependencies": { - "typescript": ">=5.3.3", - "ws": "^8.18.0" - } - }, - "node_modules/@solana/rpc-subscriptions-spec": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@solana/rpc-subscriptions-spec/-/rpc-subscriptions-spec-2.3.0.tgz", - "integrity": "sha512-rdmVcl4PvNKQeA2l8DorIeALCgJEMSu7U8AXJS1PICeb2lQuMeaR+6cs/iowjvIB0lMVjYN2sFf6Q3dJPu6wWg==", - "license": "MIT", - "peer": true, - "dependencies": { - "@solana/errors": "2.3.0", - "@solana/promises": "2.3.0", - "@solana/rpc-spec-types": "2.3.0", - "@solana/subscribable": "2.3.0" - }, - "engines": { - "node": ">=20.18.0" - }, - "peerDependencies": { - "typescript": ">=5.3.3" - } - }, - "node_modules/@solana/rpc-transformers": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@solana/rpc-transformers/-/rpc-transformers-2.3.0.tgz", - "integrity": "sha512-UuHYK3XEpo9nMXdjyGKkPCOr7WsZsxs7zLYDO1A5ELH3P3JoehvrDegYRAGzBS2VKsfApZ86ZpJToP0K3PhmMA==", - "license": "MIT", - "peer": true, - "dependencies": { - "@solana/errors": "2.3.0", - "@solana/functional": "2.3.0", - "@solana/nominal-types": "2.3.0", - "@solana/rpc-spec-types": "2.3.0", - "@solana/rpc-types": "2.3.0" - }, - "engines": { - "node": ">=20.18.0" - }, - "peerDependencies": { - "typescript": ">=5.3.3" - } - }, - "node_modules/@solana/rpc-transport-http": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@solana/rpc-transport-http/-/rpc-transport-http-2.3.0.tgz", - "integrity": "sha512-HFKydmxGw8nAF5N+S0NLnPBDCe5oMDtI2RAmW8DMqP4U3Zxt2XWhvV1SNkAldT5tF0U1vP+is6fHxyhk4xqEvg==", - "license": "MIT", - "peer": true, - "dependencies": { - "@solana/errors": "2.3.0", - "@solana/rpc-spec": "2.3.0", - "@solana/rpc-spec-types": "2.3.0", - "undici-types": "^7.11.0" - }, - "engines": { - "node": ">=20.18.0" - }, - "peerDependencies": { - "typescript": ">=5.3.3" - } - }, - "node_modules/@solana/rpc-transport-http/node_modules/undici-types": { - "version": "7.12.0", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.12.0.tgz", - "integrity": "sha512-goOacqME2GYyOZZfb5Lgtu+1IDmAlAEu5xnD3+xTzS10hT0vzpf0SPjkXwAw9Jm+4n/mQGDP3LO8CPbYROeBfQ==", - "license": "MIT", - "peer": true - }, - "node_modules/@solana/rpc-types": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@solana/rpc-types/-/rpc-types-2.3.0.tgz", - "integrity": "sha512-O09YX2hED2QUyGxrMOxQ9GzH1LlEwwZWu69QbL4oYmIf6P5dzEEHcqRY6L1LsDVqc/dzAdEs/E1FaPrcIaIIPw==", - "license": "MIT", - "peer": true, - "dependencies": { - "@solana/addresses": "2.3.0", - "@solana/codecs-core": "2.3.0", - "@solana/codecs-numbers": "2.3.0", - "@solana/codecs-strings": "2.3.0", - "@solana/errors": "2.3.0", - "@solana/nominal-types": "2.3.0" - }, - "engines": { - "node": ">=20.18.0" - }, - "peerDependencies": { - "typescript": ">=5.3.3" - } - }, - "node_modules/@solana/signers": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@solana/signers/-/signers-2.3.0.tgz", - "integrity": "sha512-OSv6fGr/MFRx6J+ZChQMRqKNPGGmdjkqarKkRzkwmv7v8quWsIRnJT5EV8tBy3LI4DLO/A8vKiNSPzvm1TdaiQ==", - "license": "MIT", - "peer": true, - "dependencies": { - "@solana/addresses": "2.3.0", - "@solana/codecs-core": "2.3.0", - "@solana/errors": "2.3.0", - "@solana/instructions": "2.3.0", - "@solana/keys": "2.3.0", - "@solana/nominal-types": "2.3.0", - "@solana/transaction-messages": "2.3.0", - "@solana/transactions": "2.3.0" - }, - "engines": { - "node": ">=20.18.0" - }, - "peerDependencies": { - "typescript": ">=5.3.3" - } - }, - "node_modules/@solana/subscribable": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@solana/subscribable/-/subscribable-2.3.0.tgz", - "integrity": "sha512-DkgohEDbMkdTWiKAoatY02Njr56WXx9e/dKKfmne8/Ad6/2llUIrax78nCdlvZW9quXMaXPTxZvdQqo9N669Og==", - "license": "MIT", - "peer": true, - "dependencies": { - "@solana/errors": "2.3.0" - }, - "engines": { - "node": ">=20.18.0" - }, - "peerDependencies": { - "typescript": ">=5.3.3" - } - }, - "node_modules/@solana/sysvars": { - "version": "2.3.0", - "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", - "@solana/errors": "2.3.0", - "@solana/rpc-types": "2.3.0" - }, - "engines": { - "node": ">=20.18.0" - }, - "peerDependencies": { - "typescript": ">=5.3.3" - } - }, - "node_modules/@solana/transaction-confirmation": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@solana/transaction-confirmation/-/transaction-confirmation-2.3.0.tgz", - "integrity": "sha512-UiEuiHCfAAZEKdfne/XljFNJbsKAe701UQHKXEInYzIgBjRbvaeYZlBmkkqtxwcasgBTOmEaEKT44J14N9VZDw==", - "license": "MIT", - "peer": true, - "dependencies": { - "@solana/addresses": "2.3.0", - "@solana/codecs-strings": "2.3.0", - "@solana/errors": "2.3.0", - "@solana/keys": "2.3.0", - "@solana/promises": "2.3.0", - "@solana/rpc": "2.3.0", - "@solana/rpc-subscriptions": "2.3.0", - "@solana/rpc-types": "2.3.0", - "@solana/transaction-messages": "2.3.0", - "@solana/transactions": "2.3.0" - }, - "engines": { - "node": ">=20.18.0" - }, - "peerDependencies": { - "typescript": ">=5.3.3" - } - }, - "node_modules/@solana/transaction-messages": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@solana/transaction-messages/-/transaction-messages-2.3.0.tgz", - "integrity": "sha512-bgqvWuy3MqKS5JdNLH649q+ngiyOu5rGS3DizSnWwYUd76RxZl1kN6CoqHSrrMzFMvis6sck/yPGG3wqrMlAww==", - "license": "MIT", - "peer": true, - "dependencies": { - "@solana/addresses": "2.3.0", - "@solana/codecs-core": "2.3.0", - "@solana/codecs-data-structures": "2.3.0", - "@solana/codecs-numbers": "2.3.0", - "@solana/errors": "2.3.0", - "@solana/functional": "2.3.0", - "@solana/instructions": "2.3.0", - "@solana/nominal-types": "2.3.0", - "@solana/rpc-types": "2.3.0" - }, - "engines": { - "node": ">=20.18.0" - }, - "peerDependencies": { - "typescript": ">=5.3.3" - } - }, - "node_modules/@solana/transactions": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@solana/transactions/-/transactions-2.3.0.tgz", - "integrity": "sha512-LnTvdi8QnrQtuEZor5Msje61sDpPstTVwKg4y81tNxDhiyomjuvnSNLAq6QsB9gIxUqbNzPZgOG9IU4I4/Uaug==", - "license": "MIT", - "peer": true, - "dependencies": { - "@solana/addresses": "2.3.0", - "@solana/codecs-core": "2.3.0", - "@solana/codecs-data-structures": "2.3.0", - "@solana/codecs-numbers": "2.3.0", - "@solana/codecs-strings": "2.3.0", - "@solana/errors": "2.3.0", - "@solana/functional": "2.3.0", - "@solana/instructions": "2.3.0", - "@solana/keys": "2.3.0", - "@solana/nominal-types": "2.3.0", - "@solana/rpc-types": "2.3.0", - "@solana/transaction-messages": "2.3.0" - }, - "engines": { - "node": ">=20.18.0" - }, - "peerDependencies": { - "typescript": ">=5.3.3" - } - }, - "node_modules/@solana/wallet-adapter-base": { - "version": "0.9.27", - "resolved": "https://registry.npmjs.org/@solana/wallet-adapter-base/-/wallet-adapter-base-0.9.27.tgz", - "integrity": "sha512-kXjeNfNFVs/NE9GPmysBRKQ/nf+foSaq3kfVSeMcO/iVgigyRmB551OjU3WyAolLG/1jeEfKLqF9fKwMCRkUqg==", - "license": "Apache-2.0", - "dependencies": { - "@solana/wallet-standard-features": "^1.3.0", - "@wallet-standard/base": "^1.1.0", - "@wallet-standard/features": "^1.1.0", - "eventemitter3": "^5.0.1" - }, - "engines": { - "node": ">=20" + "node": ">=20" }, "peerDependencies": { "@solana/web3.js": "^1.98.0" @@ -5041,33 +4023,15 @@ "license": "Apache-2.0", "dependencies": { "buffer": "^6.0.3", - "semver": "^7.6.3" - } - }, - "node_modules/@stellar/js-xdr": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/@stellar/js-xdr/-/js-xdr-3.1.2.tgz", - "integrity": "sha512-VVolPL5goVEIsvuGqDc5uiKxV03lzfWdvYg1KikvwheDmTBO68CKDji3bAZ/kppZrx5iTA8z3Ld5yuytcvhvOQ==", - "license": "Apache-2.0" - }, - "node_modules/@stellar/stellar-base": { - "version": "12.1.1", - "resolved": "https://registry.npmjs.org/@stellar/stellar-base/-/stellar-base-12.1.1.tgz", - "integrity": "sha512-gOBSOFDepihslcInlqnxKZdIW9dMUO1tpOm3AtJR33K2OvpXG6SaVHCzAmCFArcCqI9zXTEiSoh70T48TmiHJA==", - "license": "Apache-2.0", - "peer": true, - "dependencies": { - "@stellar/js-xdr": "^3.1.2", - "base32.js": "^0.1.0", - "bignumber.js": "^9.1.2", - "buffer": "^6.0.3", - "sha.js": "^2.3.6", - "tweetnacl": "^1.0.3" - }, - "optionalDependencies": { - "sodium-native": "^4.1.1" + "semver": "^7.6.3" } }, + "node_modules/@stellar/js-xdr": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@stellar/js-xdr/-/js-xdr-3.1.2.tgz", + "integrity": "sha512-VVolPL5goVEIsvuGqDc5uiKxV03lzfWdvYg1KikvwheDmTBO68CKDji3bAZ/kppZrx5iTA8z3Ld5yuytcvhvOQ==", + "license": "Apache-2.0" + }, "node_modules/@stellar/stellar-sdk": { "version": "13.3.0", "resolved": "https://registry.npmjs.org/@stellar/stellar-sdk/-/stellar-sdk-13.3.0.tgz", @@ -5392,148 +4356,6 @@ "tailwindcss": "4.1.11" } }, - "node_modules/@trezor/analytics": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/@trezor/analytics/-/analytics-1.4.2.tgz", - "integrity": "sha512-FgjJekuDvx1TjiDemvpnPiRck7Kp/v1ZeppsBYpQR3yGKyKzbG1pVpcl0RyI2237raXxbORaz7XV8tcyjq4BXg==", - "license": "See LICENSE.md in repo root", - "peer": true, - "dependencies": { - "@trezor/env-utils": "1.4.2", - "@trezor/utils": "9.4.2" - }, - "peerDependencies": { - "tslib": "^2.6.2" - } - }, - "node_modules/@trezor/blockchain-link": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/@trezor/blockchain-link/-/blockchain-link-2.5.2.tgz", - "integrity": "sha512-/egUnIt/fR57QY33ejnkPMhZwRvVRS/pUCoqdVIGitN1Q7QZsdopoR4hw37hdK/Ux/q1ZLH6LZz7U2UFahjppw==", - "license": "SEE LICENSE IN LICENSE.md", - "peer": true, - "dependencies": { - "@solana-program/stake": "^0.2.1", - "@solana-program/token": "^0.5.1", - "@solana-program/token-2022": "^0.4.2", - "@solana/kit": "^2.1.1", - "@solana/rpc-types": "^2.1.1", - "@stellar/stellar-sdk": "^13.3.0", - "@trezor/blockchain-link-types": "1.4.2", - "@trezor/blockchain-link-utils": "1.4.2", - "@trezor/env-utils": "1.4.2", - "@trezor/utils": "9.4.2", - "@trezor/utxo-lib": "2.4.2", - "@trezor/websocket-client": "1.2.2", - "@types/web": "^0.0.197", - "events": "^3.3.0", - "socks-proxy-agent": "8.0.5", - "xrpl": "^4.3.0" - }, - "peerDependencies": { - "tslib": "^2.6.2" - } - }, - "node_modules/@trezor/blockchain-link-types": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/@trezor/blockchain-link-types/-/blockchain-link-types-1.4.2.tgz", - "integrity": "sha512-KThBmGOFLJAFnmou9ThQhnjEVxfYPfEwMOaVTVNgJ+NAkt5rEMx0SKBBelCGZ63XtOLWdVPglFo83wtm+I9Vpg==", - "license": "See LICENSE.md in repo root", - "peer": true, - "dependencies": { - "@trezor/utxo-lib": "2.4.2" - }, - "peerDependencies": { - "tslib": "^2.6.2" - } - }, - "node_modules/@trezor/blockchain-link-utils": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/@trezor/blockchain-link-utils/-/blockchain-link-utils-1.4.2.tgz", - "integrity": "sha512-PBEBrdtHn0dn/c9roW6vjdHI/CucMywJm5gthETZAZmzBOtg6ZDpLTn+qL8+jZGIbwcAkItrQ3iHrHhR6xTP5g==", - "license": "See LICENSE.md in repo root", - "peer": true, - "dependencies": { - "@mobily/ts-belt": "^3.13.1", - "@stellar/stellar-sdk": "^13.3.0", - "@trezor/env-utils": "1.4.2", - "@trezor/utils": "9.4.2", - "xrpl": "^4.3.0" - }, - "peerDependencies": { - "tslib": "^2.6.2" - } - }, - "node_modules/@trezor/connect": { - "version": "9.6.2", - "resolved": "https://registry.npmjs.org/@trezor/connect/-/connect-9.6.2.tgz", - "integrity": "sha512-XsSERBK+KnF6FPsATuhB9AEM0frekVLwAwFo35MRV9I4P+mdv6tnUiZUq8O8aoPbfJwDjtNJSYv+PMsKuRH6rg==", - "license": "SEE LICENSE IN LICENSE.md", - "peer": true, - "dependencies": { - "@ethereumjs/common": "^10.0.0", - "@ethereumjs/tx": "^10.0.0", - "@fivebinaries/coin-selection": "3.0.0", - "@mobily/ts-belt": "^3.13.1", - "@noble/hashes": "^1.6.1", - "@scure/bip39": "^1.5.1", - "@solana-program/compute-budget": "^0.8.0", - "@solana-program/system": "^0.7.0", - "@solana-program/token": "^0.5.1", - "@solana-program/token-2022": "^0.4.2", - "@solana/kit": "^2.1.1", - "@trezor/blockchain-link": "2.5.2", - "@trezor/blockchain-link-types": "1.4.2", - "@trezor/blockchain-link-utils": "1.4.2", - "@trezor/connect-analytics": "1.3.5", - "@trezor/connect-common": "0.4.2", - "@trezor/crypto-utils": "1.1.4", - "@trezor/device-utils": "1.1.2", - "@trezor/env-utils": "^1.4.2", - "@trezor/protobuf": "1.4.2", - "@trezor/protocol": "1.2.8", - "@trezor/schema-utils": "1.3.4", - "@trezor/transport": "1.5.2", - "@trezor/type-utils": "1.1.8", - "@trezor/utils": "9.4.2", - "@trezor/utxo-lib": "2.4.2", - "blakejs": "^1.2.1", - "bs58": "^6.0.0", - "bs58check": "^4.0.0", - "cross-fetch": "^4.0.0", - "jws": "^4.0.0" - }, - "peerDependencies": { - "tslib": "^2.6.2" - } - }, - "node_modules/@trezor/connect-analytics": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/@trezor/connect-analytics/-/connect-analytics-1.3.5.tgz", - "integrity": "sha512-Aoi+EITpZZycnELQJEp9XV0mHFfaCQ6JE0Ka5mWuHtOny3nJdFLBrih4ipcEXJdJbww6pBxRJB09sJ19cTyacA==", - "license": "See LICENSE.md in repo root", - "peer": true, - "dependencies": { - "@trezor/analytics": "1.4.2" - }, - "peerDependencies": { - "tslib": "^2.6.2" - } - }, - "node_modules/@trezor/connect-common": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/@trezor/connect-common/-/connect-common-0.4.2.tgz", - "integrity": "sha512-ND5TTjrTPnJdfl8Wlhl9YtFWnY2u6FHM1dsPkNYCmyUKIMoflJ5cLn95Xabl6l1btHERYn3wTUvgEYQG7r8OVQ==", - "license": "SEE LICENSE IN LICENSE.md", - "peer": true, - "dependencies": { - "@trezor/env-utils": "1.4.2", - "@trezor/utils": "9.4.2" - }, - "peerDependencies": { - "tslib": "^2.6.2" - } - }, "node_modules/@trezor/connect-web": { "version": "9.5.1", "resolved": "https://registry.npmjs.org/@trezor/connect-web/-/connect-web-9.5.1.tgz", @@ -6769,204 +5591,6 @@ "node": "*" } }, - "node_modules/@trezor/connect/node_modules/base-x": { - "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 - }, - "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" - } - }, - "node_modules/@trezor/crypto-utils": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/@trezor/crypto-utils/-/crypto-utils-1.1.4.tgz", - "integrity": "sha512-Y6VziniqMPoMi70IyowEuXKqRvBYQzgPAekJaUZTHhR+grtYNRKRH2HJCvuZ8MGmSKUFSYfa7y8AvwALA8mQmA==", - "license": "SEE LICENSE IN LICENSE.md", - "peer": true, - "peerDependencies": { - "tslib": "^2.6.2" - } - }, - "node_modules/@trezor/device-utils": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@trezor/device-utils/-/device-utils-1.1.2.tgz", - "integrity": "sha512-R3AJvAo+a3wYVmcGZO2VNl9PZOmDEzCZIlmCJn0BlSRWWd8G9u1qyo/fL9zOwij/YhCaJyokmSHmIEmbY9qpgw==", - "license": "See LICENSE.md in repo root", - "peer": true - }, - "node_modules/@trezor/env-utils": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/@trezor/env-utils/-/env-utils-1.4.2.tgz", - "integrity": "sha512-lQvrqcNK5I4dy2MuiLyMuEm0KzY59RIu2GLtc9GsvqyxSPZkADqVzGeLJjXj/vI2ajL8leSpMvmN4zPw3EK8AA==", - "license": "See LICENSE.md in repo root", - "peer": true, - "dependencies": { - "ua-parser-js": "^2.0.4" - }, - "peerDependencies": { - "expo-constants": "*", - "expo-localization": "*", - "react-native": "*", - "tslib": "^2.6.2" - }, - "peerDependenciesMeta": { - "expo-constants": { - "optional": true - }, - "expo-localization": { - "optional": true - }, - "react-native": { - "optional": true - } - } - }, - "node_modules/@trezor/protobuf": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/@trezor/protobuf/-/protobuf-1.4.2.tgz", - "integrity": "sha512-AeIYKCgKcE9cWflggGL8T9gD+IZLSGrwkzqCk3wpIiODd5dUCgEgA4OPBufR6OMu3RWu/Tgu2xviHunijG3LXQ==", - "license": "See LICENSE.md in repo root", - "peer": true, - "dependencies": { - "@trezor/schema-utils": "1.3.4", - "long": "5.2.5", - "protobufjs": "7.4.0" - }, - "peerDependencies": { - "tslib": "^2.6.2" - } - }, - "node_modules/@trezor/protocol": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@trezor/protocol/-/protocol-1.2.8.tgz", - "integrity": "sha512-8EH+EU4Z1j9X4Ljczjbl9G7vVgcUz41qXcdE+6FOG3BFvMDK4KUVvaOtWqD+1dFpeo5yvWSTEKdhgXMPFprWYQ==", - "license": "See LICENSE.md in repo root", - "peer": true, - "peerDependencies": { - "tslib": "^2.6.2" - } - }, - "node_modules/@trezor/schema-utils": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/@trezor/schema-utils/-/schema-utils-1.3.4.tgz", - "integrity": "sha512-guP5TKjQEWe6c5HGx+7rhM0SAdEL5gylpkvk9XmJXjZDnl1Ew81nmLHUs2ghf8Od3pKBe4qjBIMBHUQNaOqWUg==", - "license": "See LICENSE.md in repo root", - "peer": true, - "dependencies": { - "@sinclair/typebox": "^0.33.7", - "ts-mixer": "^6.0.3" - }, - "peerDependencies": { - "tslib": "^2.6.2" - } - }, - "node_modules/@trezor/transport": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/@trezor/transport/-/transport-1.5.2.tgz", - "integrity": "sha512-rYP87zdVll2bNBtsD3VxJq0yjaNvIClcgszZjQwVTQxpKGFPkx8bLSpAGI05R9qfxusZJCfYarjX3qki9nHYPw==", - "license": "SEE LICENSE IN LICENSE.md", - "peer": true, - "dependencies": { - "@trezor/protobuf": "1.4.2", - "@trezor/protocol": "1.2.8", - "@trezor/type-utils": "1.1.8", - "@trezor/utils": "9.4.2", - "cross-fetch": "^4.0.0", - "usb": "^2.15.0" - }, - "peerDependencies": { - "tslib": "^2.6.2" - } - }, - "node_modules/@trezor/type-utils": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/@trezor/type-utils/-/type-utils-1.1.8.tgz", - "integrity": "sha512-VtvkPXpwtMtTX9caZWYlMMTmhjUeDq4/1LGn0pSdjd4OuL/vQyuPWXCT/0RtlnRraW6R2dZF7rX2UON2kQIMTQ==", - "license": "See LICENSE.md in repo root", - "peer": true - }, - "node_modules/@trezor/utils": { - "version": "9.4.2", - "resolved": "https://registry.npmjs.org/@trezor/utils/-/utils-9.4.2.tgz", - "integrity": "sha512-Fm3m2gmfXsgv4chqn5HX8e8dElEr2ibBJSJ7HE3bsHh/1OSQcDdzsSioAK04Fo9ws/v7n6lt+QBZ6fGmwyIkZQ==", - "license": "SEE LICENSE IN LICENSE.md", - "peer": true, - "dependencies": { - "bignumber.js": "^9.3.0" - }, - "peerDependencies": { - "tslib": "^2.6.2" - } - }, - "node_modules/@trezor/utxo-lib": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/@trezor/utxo-lib/-/utxo-lib-2.4.2.tgz", - "integrity": "sha512-dTXfBg/cEKnmHM5CLG5+0qrp6fqOfwxqe8YPACdKeM7g1XJKCGDAuFpDUVeT3lrcUsTh6bEMHM06z4H3gZp5MQ==", - "license": "SEE LICENSE IN LICENSE.md", - "peer": true, - "dependencies": { - "@trezor/utils": "9.4.2", - "bchaddrjs": "^0.5.2", - "bech32": "^2.0.0", - "bip66": "^2.0.0", - "bitcoin-ops": "^1.4.1", - "blake-hash": "^2.0.0", - "blakejs": "^1.2.1", - "bn.js": "^5.2.2", - "bs58": "^6.0.0", - "bs58check": "^4.0.0", - "create-hmac": "^1.1.7", - "int64-buffer": "^1.1.0", - "pushdata-bitcoin": "^1.0.1", - "tiny-secp256k1": "^1.1.7", - "typeforce": "^1.18.0", - "varuint-bitcoin": "2.0.0", - "wif": "^5.0.0" - }, - "peerDependencies": { - "tslib": "^2.6.2" - } - }, - "node_modules/@trezor/utxo-lib/node_modules/base-x": { - "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 - }, - "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" - } - }, - "node_modules/@trezor/websocket-client": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/@trezor/websocket-client/-/websocket-client-1.2.2.tgz", - "integrity": "sha512-vu9L1V/5yh8LHQCmsGC9scCnihELsVuR5Tri1IvW3CdgTUFFcfjsEgXsFqFME3HlxuUmx6qokw0Gx/o0/hzaSQ==", - "license": "SEE LICENSE IN LICENSE.md", - "peer": true, - "dependencies": { - "@trezor/utils": "9.4.2", - "ws": "^8.18.0" - }, - "peerDependencies": { - "tslib": "^2.6.2" - } - }, "node_modules/@tybys/wasm-util": { "version": "0.10.0", "resolved": "https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.10.0.tgz", @@ -7068,6 +5692,7 @@ "version": "7.0.15", "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "dev": true, "license": "MIT" }, "node_modules/@types/json5": { @@ -7092,22 +5717,11 @@ "undici-types": "~6.21.0" } }, - "node_modules/@types/node-fetch": { - "version": "2.6.12", - "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.6.12.tgz", - "integrity": "sha512-8nneRWKCg3rMtF69nLQJnOYUcbafYeFSjqkw3jCRLsqkWFlHaoQrr5mXmofFGOx3DKn7UfmBMyov8ySvLRVldA==", - "license": "MIT", - "peer": true, - "dependencies": { - "@types/node": "*", - "form-data": "^4.0.0" - } - }, "node_modules/@types/react": { "version": "19.1.8", "resolved": "https://registry.npmjs.org/@types/react/-/react-19.1.8.tgz", "integrity": "sha512-AwAfQ2Wa5bCx9WP8nZL2uMZWod7J7/JSplxbTmBQ5ms6QpqNYm672H0Vu9ZVKVngQ+ii4R/byguVEUZQyeg44g==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "csstype": "^3.0.2" @@ -7117,7 +5731,7 @@ "version": "19.1.6", "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-19.1.6.tgz", "integrity": "sha512-4hOiT/dwO8Ko0gV1m/TJZYk3y0KBnY9vzDh7W+DH17b2HFSOGgdj33dhihPeuy3l0q23+4e+hoXHV6hCC4dCXw==", - "devOptional": true, + "dev": true, "license": "MIT", "peerDependencies": { "@types/react": "^19.0.0" @@ -8155,39 +6769,6 @@ "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", "license": "0BSD" }, - "node_modules/@xrplf/isomorphic": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@xrplf/isomorphic/-/isomorphic-1.0.1.tgz", - "integrity": "sha512-0bIpgx8PDjYdrLFeC3csF305QQ1L7sxaWnL5y71mCvhenZzJgku9QsA+9QCXBC1eNYtxWO/xR91zrXJy2T/ixg==", - "license": "ISC", - "peer": true, - "dependencies": { - "@noble/hashes": "^1.0.0", - "eventemitter3": "5.0.1", - "ws": "^8.13.0" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@xrplf/isomorphic/node_modules/eventemitter3": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz", - "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==", - "license": "MIT", - "peer": true - }, - "node_modules/@xrplf/secret-numbers": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@xrplf/secret-numbers/-/secret-numbers-1.0.0.tgz", - "integrity": "sha512-qsCLGyqe1zaq9j7PZJopK+iGTGRbk6akkg6iZXJJgxKwck0C5x5Gnwlb1HKYGOwPKyrXWpV6a2YmcpNpUFctGg==", - "license": "ISC", - "peer": true, - "dependencies": { - "@xrplf/isomorphic": "^1.0.0", - "ripple-keypairs": "^2.0.0" - } - }, "node_modules/acorn": { "version": "8.15.0", "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", @@ -8899,13 +7480,6 @@ "ieee754": "^1.2.1" } }, - "node_modules/buffer-equal-constant-time": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", - "integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==", - "license": "BSD-3-Clause", - "peer": true - }, "node_modules/bufferutil": { "version": "4.0.9", "resolved": "https://registry.npmjs.org/bufferutil/-/bufferutil-4.0.9.tgz", @@ -9709,30 +8283,9 @@ }, "node_modules/detect-browser": { "version": "5.3.0", - "resolved": "https://registry.npmjs.org/detect-browser/-/detect-browser-5.3.0.tgz", - "integrity": "sha512-53rsFbGdwMwlF7qvCt0ypLM5V5/Mbl0szB7GPN8y9NCcbknYOeVVXdrXEq+90IwAfrrzt6Hd+u2E2ntakICU8w==", - "license": "MIT" - }, - "node_modules/detect-europe-js": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/detect-europe-js/-/detect-europe-js-0.1.2.tgz", - "integrity": "sha512-lgdERlL3u0aUdHocoouzT10d9I89VVhk0qNRmll7mXdGfJT1/wqZ2ZLA4oJAjeACPY5fT1wsbq2AT+GkuInsow==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/faisalman" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/ua-parser-js" - }, - { - "type": "paypal", - "url": "https://paypal.me/faisalman" - } - ], - "license": "MIT", - "peer": true + "resolved": "https://registry.npmjs.org/detect-browser/-/detect-browser-5.3.0.tgz", + "integrity": "sha512-53rsFbGdwMwlF7qvCt0ypLM5V5/Mbl0szB7GPN8y9NCcbknYOeVVXdrXEq+90IwAfrrzt6Hd+u2E2ntakICU8w==", + "license": "MIT" }, "node_modules/detect-libc": { "version": "2.0.4", @@ -9805,16 +8358,6 @@ "stream-shift": "^1.0.2" } }, - "node_modules/ecdsa-sig-formatter": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", - "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", - "license": "Apache-2.0", - "peer": true, - "dependencies": { - "safe-buffer": "^5.0.1" - } - }, "node_modules/elliptic": { "version": "6.6.1", "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.6.1.tgz", @@ -10596,53 +9139,6 @@ "node": ">=0.10.0" } }, - "node_modules/ethereum-cryptography": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-3.2.0.tgz", - "integrity": "sha512-Urr5YVsalH+Jo0sYkTkv1MyI9bLYZwW8BENZCeE1QYaTHETEYx0Nv/SVsWkSqpYrzweg6d8KMY1wTjH/1m/BIg==", - "license": "MIT", - "peer": true, - "dependencies": { - "@noble/ciphers": "1.3.0", - "@noble/curves": "1.9.0", - "@noble/hashes": "1.8.0", - "@scure/bip32": "1.7.0", - "@scure/bip39": "1.6.0" - }, - "engines": { - "node": "^14.21.3 || >=16", - "npm": ">=9" - } - }, - "node_modules/ethereum-cryptography/node_modules/@noble/curves": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.9.0.tgz", - "integrity": "sha512-7YDlXiNMdO1YZeH6t/kvopHHbIZzlxrCV9WLqCY6QhcXOoXiNCMDqJIglZ9Yjx5+w7Dz30TITFrlTjnRg7sKEg==", - "license": "MIT", - "peer": true, - "dependencies": { - "@noble/hashes": "1.8.0" - }, - "engines": { - "node": "^14.21.3 || >=16" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/ethereum-cryptography/node_modules/@noble/hashes": { - "version": "1.8.0", - "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" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, "node_modules/eventemitter3": { "version": "4.0.7", "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", @@ -10667,13 +9163,6 @@ "node": ">=12.0.0" } }, - "node_modules/exponential-backoff": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/exponential-backoff/-/exponential-backoff-3.1.2.tgz", - "integrity": "sha512-8QxYTVXUkuy7fIIoitQkPwGonB8F3Zj8eEO8Sqg9Zv/bkI7RJAzowee4gr81Hak/dUTpA2Z7VfQgoijjPNlUZA==", - "license": "Apache-2.0", - "peer": true - }, "node_modules/eyes": { "version": "0.1.8", "resolved": "https://registry.npmjs.org/eyes/-/eyes-0.1.8.tgz", @@ -10764,13 +9253,6 @@ "integrity": "sha512-wpYMUmFu5f00Sm0cj2pfivpmawLZ0NKdviQ4w9zJeR8JVtOpOxHmLaJuj0vxvGqMJQWyP/COUkF75/57OKyRag==", "license": "MIT" }, - "node_modules/fastestsmallesttextencoderdecoder": { - "version": "1.0.22", - "resolved": "https://registry.npmjs.org/fastestsmallesttextencoderdecoder/-/fastestsmallesttextencoderdecoder-1.0.22.tgz", - "integrity": "sha512-Pb8d48e+oIuY4MaM64Cd7OW1gt4nxCHs7/ddPPZ/Ic3sg8yVGM7O9wDvZ7us6ScaUupzM+pfBolwtYhN1IxBIw==", - "license": "CC0-1.0", - "peer": true - }, "node_modules/fastq": { "version": "1.19.1", "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.19.1.tgz", @@ -10987,26 +9469,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/generate-function": { - "version": "2.3.1", - "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" - } - }, - "node_modules/generate-object-property": { - "version": "1.2.0", - "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" - } - }, "node_modules/get-caller-file": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", @@ -11329,40 +9791,6 @@ "minimalistic-crypto-utils": "^1.0.1" } }, - "node_modules/http-errors": { - "version": "1.7.2", - "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", - "setprototypeof": "1.1.1", - "statuses": ">= 1.5.0 < 2", - "toidentifier": "1.0.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/http-errors/node_modules/depd": { - "version": "1.1.2", - "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" - } - }, - "node_modules/http-errors/node_modules/inherits": { - "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 - }, "node_modules/https-proxy-agent": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", @@ -11790,27 +10218,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-my-ip-valid": { - "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 - }, - "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", - "is-my-ip-valid": "^1.0.0", - "jsonpointer": "^5.0.0", - "xtend": "^4.0.0" - } - }, "node_modules/is-nan": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/is-nan/-/is-nan-1.3.2.tgz", @@ -11867,13 +10274,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-property": { - "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 - }, "node_modules/is-regex": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.2.1.tgz", @@ -11933,27 +10333,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-standalone-pwa": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-standalone-pwa/-/is-standalone-pwa-0.1.1.tgz", - "integrity": "sha512-9Cbovsa52vNQCjdXOzeQq5CnCbAcRk05aU62K20WO372NrTv0NxibLFCK6lQ4/iZEFdEA3p3t2VNOn8AJ53F5g==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/faisalman" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/ua-parser-js" - }, - { - "type": "paypal", - "url": "https://paypal.me/faisalman" - } - ], - "license": "MIT", - "peer": true - }, "node_modules/is-string": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.1.1.tgz", @@ -12258,16 +10637,6 @@ "json5": "lib/cli.js" } }, - "node_modules/jsonpointer": { - "version": "5.0.1", - "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" - } - }, "node_modules/jsonschema": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/jsonschema/-/jsonschema-1.2.2.tgz", @@ -12293,29 +10662,6 @@ "node": ">=4.0" } }, - "node_modules/jwa": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/jwa/-/jwa-2.0.1.tgz", - "integrity": "sha512-hRF04fqJIP8Abbkq5NKGN0Bbr3JxlQ+qhZufXVr0DvujKy93ZCbXZMHDL4EOtodSbCWxOqR8MS1tXA5hwqCXDg==", - "license": "MIT", - "peer": true, - "dependencies": { - "buffer-equal-constant-time": "^1.0.1", - "ecdsa-sig-formatter": "1.0.11", - "safe-buffer": "^5.0.1" - } - }, - "node_modules/jws": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jws/-/jws-4.0.0.tgz", - "integrity": "sha512-KDncfTmOZoOMTFG4mBlG0qUIOlc03fmzH+ru6RgYVZhPkyiy/92Owlt/8UEN+a4TXR1FQetfIpJE8ApdvdVxTg==", - "license": "MIT", - "peer": true, - "dependencies": { - "jwa": "^2.0.0", - "safe-buffer": "^5.0.1" - } - }, "node_modules/keyv": { "version": "4.5.4", "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", @@ -12992,13 +11338,6 @@ "loose-envify": "cli.js" } }, - "node_modules/lru_map": { - "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 - }, "node_modules/lru-cache": { "version": "10.4.3", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", @@ -13289,70 +11628,6 @@ "dev": true, "license": "MIT" }, - "node_modules/near-abi": { - "version": "0.2.0", - "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" - } - }, - "node_modules/near-api-js": { - "version": "5.1.1", - "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", - "@near-js/keystores": "0.2.2", - "@near-js/keystores-browser": "0.2.2", - "@near-js/keystores-node": "0.1.2", - "@near-js/providers": "1.0.3", - "@near-js/signers": "0.2.2", - "@near-js/transactions": "1.3.3", - "@near-js/types": "0.3.1", - "@near-js/utils": "1.1.0", - "@near-js/wallet-account": "1.3.3", - "@noble/curves": "1.8.1", - "borsh": "1.0.0", - "depd": "2.0.0", - "http-errors": "1.7.2", - "near-abi": "0.2.0", - "node-fetch": "2.6.7" - } - }, - "node_modules/near-api-js/node_modules/borsh": { - "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 - }, - "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" - }, - "engines": { - "node": "4.x || >=6.0.0" - }, - "peerDependencies": { - "encoding": "^0.1.0" - }, - "peerDependenciesMeta": { - "encoding": { - "optional": true - } - } - }, "node_modules/next": { "version": "15.5.2", "resolved": "https://registry.npmjs.org/next/-/next-15.5.2.tgz", @@ -14562,50 +12837,6 @@ "inherits": "^2.0.1" } }, - "node_modules/ripple-address-codec": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ripple-address-codec/-/ripple-address-codec-5.0.0.tgz", - "integrity": "sha512-de7osLRH/pt5HX2xw2TRJtbdLLWHu0RXirpQaEeCnWKY5DYHykh3ETSkofvm0aX0LJiV7kwkegJxQkmbO94gWw==", - "license": "ISC", - "peer": true, - "dependencies": { - "@scure/base": "^1.1.3", - "@xrplf/isomorphic": "^1.0.0" - }, - "engines": { - "node": ">= 16" - } - }, - "node_modules/ripple-binary-codec": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/ripple-binary-codec/-/ripple-binary-codec-2.4.1.tgz", - "integrity": "sha512-ABwQnWE1WBOvya9WIJ/KiogdsulOw5X8IrIZ3wW0Ec1hiWUNitNuI9LhN9XwHhNFuuvZyRAr+SzgFTBTCTfxFg==", - "license": "ISC", - "peer": true, - "dependencies": { - "@xrplf/isomorphic": "^1.0.1", - "bignumber.js": "^9.0.0", - "ripple-address-codec": "^5.0.0" - }, - "engines": { - "node": ">= 18" - } - }, - "node_modules/ripple-keypairs": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ripple-keypairs/-/ripple-keypairs-2.0.0.tgz", - "integrity": "sha512-b5rfL2EZiffmklqZk1W+dvSy97v3V/C7936WxCCgDynaGPp7GE6R2XO7EU9O2LlM/z95rj870IylYnOQs+1Rag==", - "license": "ISC", - "peer": true, - "dependencies": { - "@noble/curves": "^1.0.0", - "@xrplf/isomorphic": "^1.0.0", - "ripple-address-codec": "^5.0.0" - }, - "engines": { - "node": ">= 16" - } - }, "node_modules/ripple-lib": { "version": "1.10.1", "resolved": "https://registry.npmjs.org/ripple-lib/-/ripple-lib-1.10.1.tgz", @@ -14963,13 +13194,6 @@ "node": ">= 0.4" } }, - "node_modules/setprototypeof": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", - "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==", - "license": "ISC", - "peer": true - }, "node_modules/sha.js": { "version": "2.4.12", "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.12.tgz", @@ -15235,21 +13459,6 @@ "npm": ">= 3.0.0" } }, - "node_modules/socks-proxy-agent": { - "version": "8.0.5", - "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-8.0.5.tgz", - "integrity": "sha512-HehCEsotFqbPW9sJ8WVYB6UbmIMv7kUUORIF2Nncq4VQvBfNBLibW9YZR5dlYCSUhwcD628pRllm7n+E+YTzJw==", - "license": "MIT", - "peer": true, - "dependencies": { - "agent-base": "^7.1.2", - "debug": "^4.3.4", - "socks": "^2.8.3" - }, - "engines": { - "node": ">= 14" - } - }, "node_modules/sodium-native": { "version": "4.3.3", "resolved": "https://registry.npmjs.org/sodium-native/-/sodium-native-4.3.3.tgz", @@ -15319,16 +13528,6 @@ "dev": true, "license": "MIT" }, - "node_modules/statuses": { - "version": "1.5.0", - "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" - } - }, "node_modules/stop-iteration-iterator": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/stop-iteration-iterator/-/stop-iteration-iterator-1.1.0.tgz", @@ -15804,16 +14003,6 @@ "node": ">=8.0" } }, - "node_modules/toidentifier": { - "version": "1.0.0", - "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" - } - }, "node_modules/toml": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/toml/-/toml-3.0.0.tgz", @@ -15986,6 +14175,7 @@ "version": "5.8.3", "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.3.tgz", "integrity": "sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==", + "dev": true, "license": "Apache-2.0", "bin": { "tsc": "bin/tsc", @@ -15995,61 +14185,6 @@ "node": ">=14.17" } }, - "node_modules/ua-is-frozen": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/ua-is-frozen/-/ua-is-frozen-0.1.2.tgz", - "integrity": "sha512-RwKDW2p3iyWn4UbaxpP2+VxwqXh0jpvdxsYpZ5j/MLLiQOfbsV5shpgQiw93+KMYQPcteeMQ289MaAFzs3G9pw==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/faisalman" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/ua-parser-js" - }, - { - "type": "paypal", - "url": "https://paypal.me/faisalman" - } - ], - "license": "MIT", - "peer": true - }, - "node_modules/ua-parser-js": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-2.0.4.tgz", - "integrity": "sha512-XiBOnM/UpUq21ZZ91q2AVDOnGROE6UQd37WrO9WBgw4u2eGvUCNOheMmZ3EfEUj7DLHr8tre+Um/436Of/Vwzg==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/ua-parser-js" - }, - { - "type": "paypal", - "url": "https://paypal.me/faisalman" - }, - { - "type": "github", - "url": "https://github.com/sponsors/faisalman" - } - ], - "license": "AGPL-3.0-or-later", - "peer": true, - "dependencies": { - "@types/node-fetch": "^2.6.12", - "detect-europe-js": "^0.1.2", - "is-standalone-pwa": "^0.1.1", - "node-fetch": "^2.7.0", - "ua-is-frozen": "^0.1.2" - }, - "bin": { - "ua-parser-js": "script/cli.js" - }, - "engines": { - "node": "*" - } - }, "node_modules/ufo": { "version": "1.6.1", "resolved": "https://registry.npmjs.org/ufo/-/ufo-1.6.1.tgz", @@ -16642,44 +14777,6 @@ } } }, - "node_modules/xrpl": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/xrpl/-/xrpl-4.3.0.tgz", - "integrity": "sha512-MW/VyWyTGNmfmt5EaPexKb7ojcnobdzaqtm5UC9NErtlq7IgayqAZpMI26ptOzQolGndK7vOk8U0iOBpMSykJQ==", - "license": "ISC", - "peer": true, - "dependencies": { - "@scure/bip32": "^1.3.1", - "@scure/bip39": "^1.2.1", - "@xrplf/isomorphic": "^1.0.1", - "@xrplf/secret-numbers": "^1.0.0", - "bignumber.js": "^9.0.0", - "eventemitter3": "^5.0.1", - "ripple-address-codec": "^5.0.0", - "ripple-binary-codec": "^2.4.0", - "ripple-keypairs": "^2.0.0" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/xrpl/node_modules/eventemitter3": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz", - "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==", - "license": "MIT", - "peer": true - }, - "node_modules/xtend": { - "version": "4.0.2", - "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" - } - }, "node_modules/y18n": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz",