├── .gitignore
├── LICENSE
├── README.md
├── app
├── api
│ └── pump
│ │ └── route.ts
├── layout.tsx
├── modules
│ ├── btn-reload.tsx
│ ├── header.tsx
│ ├── links.tsx
│ ├── list
│ │ ├── detail.tsx
│ │ ├── index.tsx
│ │ └── item.tsx
│ └── loading.tsx
├── page.tsx
├── store.ts
├── style.scss
├── sw.ts
└── ~offline
│ └── page.tsx
├── common
├── api
│ └── index.ts
├── hooks
│ └── pump.ts
├── styles
│ ├── theme.css
│ └── uno.css
├── types.ts
├── ui
│ ├── loading.tsx
│ ├── popover
│ │ ├── confirm.tsx
│ │ ├── drawer.tsx
│ │ └── notify.tsx
│ ├── theme
│ │ ├── index.tsx
│ │ └── typings.ts
│ └── theme_toggle
│ │ ├── index.tsx
│ │ └── style.css
└── utils
│ ├── env.ts
│ ├── format.ts
│ ├── index.ts
│ ├── request.ts
│ ├── store.ts
│ ├── theme.ts
│ └── track.ts
├── next-env.d.ts
├── next.config.mjs
├── package.json
├── pnpm-lock.yaml
├── public
├── icon.jpeg
├── manifest.json
└── sw.js
└── tsconfig.json
/.gitignore:
--------------------------------------------------------------------------------
1 | # Logs
2 | logs
3 | *.log
4 | npm-debug.log*
5 | yarn-debug.log*
6 | yarn-error.log*
7 | lerna-debug.log*
8 | .pnpm-debug.log*
9 |
10 | # Diagnostic reports (https://nodejs.org/api/report.html)
11 | report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json
12 |
13 | # Runtime data
14 | pids
15 | *.pid
16 | *.seed
17 | *.pid.lock
18 |
19 | # Directory for instrumented libs generated by jscoverage/JSCover
20 | lib-cov
21 |
22 | # Coverage directory used by tools like istanbul
23 | coverage
24 | *.lcov
25 |
26 | # nyc test coverage
27 | .nyc_output
28 |
29 | # Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files)
30 | .grunt
31 |
32 | # Bower dependency directory (https://bower.io/)
33 | bower_components
34 |
35 | # node-waf configuration
36 | .lock-wscript
37 |
38 | # Compiled binary addons (https://nodejs.org/api/addons.html)
39 | build/Release
40 |
41 | # Dependency directories
42 | node_modules/
43 | jspm_packages/
44 |
45 | # Snowpack dependency directory (https://snowpack.dev/)
46 | web_modules/
47 |
48 | # TypeScript cache
49 | *.tsbuildinfo
50 |
51 | # Optional npm cache directory
52 | .npm
53 |
54 | # Optional eslint cache
55 | .eslintcache
56 |
57 | # Optional stylelint cache
58 | .stylelintcache
59 |
60 | # Microbundle cache
61 | .rpt2_cache/
62 | .rts2_cache_cjs/
63 | .rts2_cache_es/
64 | .rts2_cache_umd/
65 |
66 | # Optional REPL history
67 | .node_repl_history
68 |
69 | # Output of 'npm pack'
70 | *.tgz
71 |
72 | # Yarn Integrity file
73 | .yarn-integrity
74 |
75 | # dotenv environment variable files
76 | .env
77 | .env.development.local
78 | .env.test.local
79 | .env.production.local
80 | .env.local
81 |
82 | # parcel-bundler cache (https://parceljs.org/)
83 | .cache
84 | .parcel-cache
85 |
86 | # Next.js build output
87 | .next
88 | out
89 |
90 | # Nuxt.js build / generate output
91 | .nuxt
92 | dist
93 | dev-dist
94 |
95 | # Gatsby files
96 | .cache/
97 | # Comment in the public line in if your project uses Gatsby and not Next.js
98 | # https://nextjs.org/blog/next-9-1#public-directory-support
99 | # public
100 |
101 | # vuepress build output
102 | .vuepress/dist
103 |
104 | # vuepress v2.x temp and cache directory
105 | .temp
106 | .cache
107 |
108 | # Docusaurus cache and generated files
109 | .docusaurus
110 |
111 | # Serverless directories
112 | .serverless/
113 |
114 | # FuseBox cache
115 | .fusebox/
116 |
117 | # DynamoDB Local files
118 | .dynamodb/
119 |
120 | # TernJS port file
121 | .tern-port
122 |
123 | # Stores VSCode versions used for testing VSCode extensions
124 | .vscode-test
125 |
126 | # yarn v2
127 | .yarn/cache
128 | .yarn/unplugged
129 | .yarn/build-state.yml
130 | .yarn/install-state.gz
131 | .pnp.*
132 |
133 | sw.js
134 | next-env.d.ts
135 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2024 evolify
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # pumpfun
2 | Tools for pump.fun
3 |
4 | ## Features
5 | - List pumpfun tokens which to be complete
6 | - Sort by Market Cap, Quickly find the easiest one to complete
7 | - Filter small Market Cap tokens (current only show mc > 15k)
8 | - Show social links(Twitter、Telegram、Website、Pumpfun link)
9 | - Fast swap with Bonkbot、Pepeboost、GMGN Sniper Bot in one click
10 | - Support Mobile and PC, Light and Dark Mode
11 | - Support PWA, Add it to desktop for better experience
12 |
13 | ## Screenshots
14 |
15 |
16 |

17 |

18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 | ## TODO
26 | - [x] Improve loading speed
27 | - [x] Support Bonkbot、Pepeboost、GMGN Sniper Bot
28 | - [ ] Add some filter options
29 | - [ ] Show more info
30 |
--------------------------------------------------------------------------------
/app/api/pump/route.ts:
--------------------------------------------------------------------------------
1 | import { getPumpList } from "common/api";
2 |
3 | export async function GET( _request: Request) {
4 | const data = await getPumpList()
5 | return Response.json(data)
6 | }
--------------------------------------------------------------------------------
/app/layout.tsx:
--------------------------------------------------------------------------------
1 | import { PropsWithChildren } from "react"
2 | import type { Metadata, Viewport } from "next";
3 | import { Analytics } from "@vercel/analytics/react"
4 | import { SpeedInsights } from "@vercel/speed-insights/react"
5 | import { AppRouterCacheProvider } from "@mui/material-nextjs/v14-appRouter"
6 | import { GoogleTagManager } from '@next/third-parties/google'
7 | import Theme from "common/ui/theme/index"
8 |
9 | const APP_NAME = "Dump Fun";
10 | const APP_DEFAULT_TITLE = "Dump Fun";
11 | const APP_TITLE_TEMPLATE = "%s - PWA App";
12 | const APP_DESCRIPTION = "Dump Fun for pumpfun";
13 |
14 | export const metadata: Metadata = {
15 | applicationName: APP_NAME,
16 | title: {
17 | default: APP_DEFAULT_TITLE,
18 | template: APP_TITLE_TEMPLATE,
19 | },
20 | description: APP_DESCRIPTION,
21 | appleWebApp: {
22 | capable: true,
23 | statusBarStyle: "default",
24 | title: APP_DEFAULT_TITLE,
25 | // startUpImage: [],
26 | },
27 | formatDetection: {
28 | telephone: false,
29 | },
30 | openGraph: {
31 | type: "website",
32 | siteName: APP_NAME,
33 | title: {
34 | default: APP_DEFAULT_TITLE,
35 | template: APP_TITLE_TEMPLATE,
36 | },
37 | description: APP_DESCRIPTION,
38 | },
39 | twitter: {
40 | card: "summary",
41 | title: {
42 | default: APP_DEFAULT_TITLE,
43 | template: APP_TITLE_TEMPLATE,
44 | },
45 | description: APP_DESCRIPTION,
46 | },
47 | };
48 |
49 | export const viewport: Viewport = {
50 | themeColor: [
51 | { media: "(prefers-color-scheme: dark)", color: "#2D2D2D" },
52 | { media: "(prefers-color-scheme: light)", color: "#1976d2" }
53 | ],
54 | };
55 |
56 | type Props = PropsWithChildren
57 |
58 | export default function MyApp({ children }: Props) {
59 | return (
60 |
61 |
62 |
66 |
67 |
68 |
69 | {children}
70 |
71 |
72 |
73 |
74 |
75 |
76 | )
77 | }
78 |
--------------------------------------------------------------------------------
/app/modules/btn-reload.tsx:
--------------------------------------------------------------------------------
1 | "use client"
2 | import { Refresh } from "@mui/icons-material"
3 | import { IconButton } from "@mui/material"
4 |
5 | export default function Reload() {
6 | function refresh() {
7 | location.reload()
8 | }
9 | return (
10 |
17 |
18 |
19 | )
20 | }
21 |
--------------------------------------------------------------------------------
/app/modules/header.tsx:
--------------------------------------------------------------------------------
1 | import { AppBar, IconButton, Toolbar, Typography, } from "@mui/material"
2 | import { Menu } from "@mui/icons-material"
3 | import Reload from "./btn-reload"
4 | import Links from "./links"
5 |
6 | export default function Header() {
7 |
8 | return (
9 |
10 |
11 |
17 |
18 |
19 |
20 | PumpFun
21 |
22 |
23 |
24 |
25 |
26 | )
27 | }
28 |
--------------------------------------------------------------------------------
/app/modules/links.tsx:
--------------------------------------------------------------------------------
1 | "use client"
2 |
3 | import { ArrowOutward } from "@mui/icons-material"
4 | import { Button, Typography } from "@mui/material"
5 | import { axiom, gmgn } from "common/utils"
6 | import { click } from "common/utils/track"
7 |
8 | export default function Link() {
9 | function toAxiom() {
10 | click("gmgn")
11 | window.open(axiom())
12 | }
13 | function toGmgn() {
14 | click("gmgn")
15 | window.open(gmgn())
16 | }
17 | return (
18 | <>
19 |
25 |
31 | >
32 | )
33 | }
34 |
--------------------------------------------------------------------------------
/app/modules/list/detail.tsx:
--------------------------------------------------------------------------------
1 | "use client"
2 | import { Box, Button, Divider, Drawer, Stack, Typography } from "@mui/material"
3 | import { close, use } from "app/store"
4 | import {
5 | formatMarketCap,
6 | formatPercent,
7 | formatPrice,
8 | } from "common/utils/format"
9 | import { axiom, bonkbot, copy, gmgn, gmgnbot, kline, pepeboost, pumpill } from "common/utils"
10 | import { click } from "common/utils/track"
11 |
12 | export default function Detail() {
13 | const { coin } = use()
14 |
15 | function getSwaps() {
16 | return (
17 | (coin.swaps_1m || 0) +
18 | "(1m)—" +
19 | (coin.swaps_5m || 0) +
20 | "(5m)—" +
21 | (coin.swaps_1h || 0) +
22 | "(1h)"
23 | )
24 | }
25 |
26 | function getVolume() {
27 | return (
28 | formatMarketCap(coin.volume_1m) +
29 | "(1m)—" +
30 | formatMarketCap(coin.volume_5m) +
31 | "(5m)—" +
32 | formatMarketCap(coin.volume_1h) +
33 | "(1h)"
34 | )
35 | }
36 |
37 | function renderLink(text: string, link: string, copyAddr?: boolean) {
38 | function onClick() {
39 | if (copyAddr) {
40 | copy(coin.address)
41 | }
42 | click(text.toLocaleLowerCase().replace(/\s/g, "_"))
43 | window.open(link)
44 | }
45 | return (
46 |
49 | )
50 | }
51 |
52 | function renderDetails() {
53 | return (
54 | <>
55 |
56 |
57 | Safe Analytics
58 |
59 |
60 | Dev Hold:
61 | {formatPercent(coin.creator_balance_rate)}
62 |
63 |
64 | Top 10 Hold:
65 | {formatPercent(coin.top_10_holder_rate)}
66 |
67 | {/*
68 | Rug:
69 |
70 | {holder_rugged_num || 0} / {holder_token_num || 0}
71 |
72 | */}
73 | >
74 | )
75 | }
76 |
77 | function renderContent() {
78 | if (!coin) {
79 | return ""
80 | }
81 | return (
82 |
83 |
84 |
89 |
90 | {coin.name}
91 | {coin.address}
92 |
93 |
94 |
95 | {/* kline */}
96 |
97 |
98 |
99 |
100 |
101 | Basic Info
102 |
103 |
104 | Holder:
105 | {coin.holder_count}
106 |
107 |
108 | Price:
109 | ${formatPrice(coin.price)}
110 |
111 |
112 | Swaps:
113 | {getSwaps()}
114 |
115 |
116 | Volume:
117 | {getVolume()}
118 |
119 |
120 | {renderDetails()}
121 |
122 |
123 |
124 | Fast Buy
125 |
126 |
132 | {/* {renderLink("PumPill", pumpill(coin.address), true)} */}
133 | {/* {renderLink("Bonkbot", bonkbot(coin.address))} */}
134 | {renderLink("Axiom", axiom(coin.address))}
135 | {renderLink("Pepeboost", pepeboost(coin.address))}
136 | {renderLink("GMGN Bot", gmgnbot(coin.address))}
137 | {renderLink("GMGN", gmgn(coin.address))}
138 |
139 |
140 | )
141 | }
142 | return (
143 |
155 | {renderContent()}
156 |
157 | )
158 | }
159 |
--------------------------------------------------------------------------------
/app/modules/list/index.tsx:
--------------------------------------------------------------------------------
1 | import { Stack, } from "@mui/material"
2 | import { PumpCoin } from "common/types"
3 | import CoinCard from "./item"
4 |
5 | export default function List({ data }: { data: PumpCoin[] }) {
6 | return (
7 |
8 | {data.map(t => (
9 |
10 | ))}
11 |
12 | )
13 | }
14 |
--------------------------------------------------------------------------------
/app/modules/list/item.tsx:
--------------------------------------------------------------------------------
1 | "use client"
2 | import {
3 | ContentCopy,
4 | ExpandMore,
5 | Home,
6 | Public,
7 | Telegram,
8 | Twitter,
9 | } from "@mui/icons-material"
10 | import {
11 | Box,
12 | Card,
13 | CardActionArea,
14 | CardActions,
15 | CircularProgress,
16 | IconButton,
17 | IconButtonProps,
18 | Stack,
19 | Typography,
20 | styled,
21 | } from "@mui/material"
22 | import { PumpCoin } from "common/types"
23 | import { copy, pumpFun, twitter } from "common/utils"
24 | import { formatAddress, formatMarketCap, formatTime } from "common/utils/format"
25 | import { open, use } from "app/store"
26 |
27 | interface ExpandMoreProps extends IconButtonProps {
28 | expand: boolean
29 | }
30 |
31 | const Expand = styled((props: ExpandMoreProps) => {
32 | const { expand, ...other } = props
33 | return
34 | })(({ theme, expand }) => ({
35 | transform: !expand ? "rotate(0deg)" : "rotate(180deg)",
36 | marginLeft: "auto",
37 | transition: theme.transitions.create("transform", {
38 | duration: theme.transitions.duration.shortest,
39 | }),
40 | }))
41 |
42 | function renderParam(label: string, value: string) {
43 | return (
44 |
45 | {label}:
46 | {value}
47 |
48 | )
49 | }
50 |
51 | function renderAction(
52 | Icon: React.ComponentType,
53 | action?: string | (() => void),
54 | condition: string | boolean | null = true
55 | ) {
56 | if (!Boolean(condition)) {
57 | return null
58 | }
59 | function onClick(e: React.MouseEvent) {
60 | e.stopPropagation()
61 | if (action) {
62 | if (typeof action === "string") {
63 | window.open(action)
64 | } else {
65 | action()
66 | }
67 | }
68 | }
69 | return (
70 |
71 |
72 |
73 | )
74 | }
75 |
76 | export default function CoinCard({ data }: { data: PumpCoin }) {
77 | const { coin } = use()
78 | const selected = coin?.address === data.address
79 | function toDetail() {
80 | open(data)
81 | }
82 | return (
83 |
88 |
89 |
97 |
98 |
99 |
100 |
101 |
109 | {data.symbol}
110 |
111 |
112 |
116 |
121 |
133 | {`${Math.round(data.progress * 100)}`}
138 |
139 |
140 |
141 | {renderParam("MarketCap", formatMarketCap(+data.usd_market_cap))}
142 | {renderParam("Create Time", formatTime(data.created_timestamp))}
143 | {renderParam("Address", formatAddress(data.address))}
144 |
145 |
146 |
147 | {renderAction(Public, pumpFun(data.address), true)}
148 | {renderAction(Twitter, twitter(data.twitter), data.twitter)}
149 | {renderAction(Telegram, data.telegram, data.telegram)}
150 | {renderAction(Home, data.website, data.website)}
151 | {renderAction(ContentCopy, () => copy(data.address), true)}
152 |
153 |
154 |
155 |
156 |
157 |
158 |
159 | )
160 | }
161 |
--------------------------------------------------------------------------------
/app/modules/loading.tsx:
--------------------------------------------------------------------------------
1 | import { CircularProgress, Stack } from "@mui/material";
2 |
3 | export default function Loading() {
4 | return (
5 |
6 |
7 |
8 | )
9 | }
10 |
--------------------------------------------------------------------------------
/app/page.tsx:
--------------------------------------------------------------------------------
1 | import { Stack } from "@mui/material"
2 | import List from "./modules/list"
3 | import Header from "./modules/header"
4 | import { getPumpList } from "common/api"
5 | import "./style.scss"
6 | import Detail from "./modules/list/detail"
7 |
8 | export default async function App() {
9 | const data = await getPumpList()
10 | return (
11 |
12 |
13 |
14 |
15 |
16 | )
17 | }
18 |
19 | export const dynamic = "force-dynamic"
20 |
--------------------------------------------------------------------------------
/app/store.ts:
--------------------------------------------------------------------------------
1 | import Store from "common/utils/store"
2 | import { PumpCoin } from "common/types"
3 | // import { getPumpList } from "common/api"
4 |
5 |
6 | export const { state, update, use } = new Store({
7 | coin: null as PumpCoin,
8 | list: [] as PumpCoin[]
9 | })
10 |
11 | // export async function load() {
12 | // const list = await getPumpList()
13 | // update({ list })
14 | // }
15 |
16 | export function open(coin: PumpCoin){
17 | update({coin})
18 | }
19 |
20 | export function close(){
21 | update({coin: null})
22 | }
23 |
--------------------------------------------------------------------------------
/app/style.scss:
--------------------------------------------------------------------------------
1 | * {
2 | margin: 0;
3 | padding: 0;
4 | }
5 | :root {
6 | // background-color: var(--back);
7 | font-family: "PingFang SC";
8 | font-size: 14px;
9 | }
10 |
--------------------------------------------------------------------------------
/app/sw.ts:
--------------------------------------------------------------------------------
1 | import { defaultCache } from "@serwist/next/worker";
2 | import type { PrecacheEntry, SerwistGlobalConfig } from "serwist";
3 | import { Serwist } from "serwist";
4 |
5 | declare global {
6 | interface WorkerGlobalScope extends SerwistGlobalConfig {
7 | // Change this attribute's name to your `injectionPoint`.
8 | // `injectionPoint` is an InjectManifest option.
9 | // See https://serwist.pages.dev/docs/build/configuring
10 | __SW_MANIFEST: (PrecacheEntry | string)[] | undefined;
11 | }
12 | }
13 |
14 | declare const self: ServiceWorkerGlobalScope;
15 |
16 | const serwist = new Serwist({
17 | precacheEntries: self.__SW_MANIFEST,
18 | skipWaiting: true,
19 | clientsClaim: true,
20 | navigationPreload: true,
21 | runtimeCaching: defaultCache,
22 | fallbacks: {
23 | entries: [
24 | {
25 | url: "/~offline",
26 | matcher({ request }) {
27 | return request.destination === "document";
28 | },
29 | },
30 | ],
31 | },
32 | });
33 |
34 | serwist.addEventListeners();
35 |
--------------------------------------------------------------------------------
/app/~offline/page.tsx:
--------------------------------------------------------------------------------
1 | import type { Metadata } from "next";
2 |
3 | export const metadata: Metadata = {
4 | title: "Offline",
5 | };
6 |
7 | export default function Page() {
8 | return (
9 | <>
10 | This is offline fallback page
11 | When offline, any page route will fallback to this page
12 | >
13 | );
14 | }
15 |
--------------------------------------------------------------------------------
/common/api/index.ts:
--------------------------------------------------------------------------------
1 | import { PumpCoin, PumpDetail } from "common/types"
2 | import { withProxy } from "common/utils/env"
3 |
4 | const proxy = process.env.PROXY
5 |
6 | const BASE_URL = 'https://ngapi.vercel.app/api/ngmg'
7 |
8 | export async function getPumpList(): Promise{
9 | const options = withProxy({ cache: "no-store"}) as unknown as RequestInit
10 | console.log(options)
11 | const res = await fetch(`${BASE_URL}/list`, options)
12 | const data = await res.json()
13 | return data.rank
14 | }
15 |
16 | export async function getPumpDetail(addr: string): Promise{
17 | const res = await fetch(`${BASE_URL}/detail?address=${addr}`)
18 | const data = await res.json()
19 | return data
20 | }
21 |
--------------------------------------------------------------------------------
/common/hooks/pump.ts:
--------------------------------------------------------------------------------
1 | import { PumpDetail } from "common/types"
2 | import { fetcher } from "common/utils/request"
3 | import useSwr from "swr"
4 |
5 | export function usePumpDetail(address: string){
6 | return useSwr(address && `/api/pump/${address}`, fetcher)
7 | }
8 |
--------------------------------------------------------------------------------
/common/styles/theme.css:
--------------------------------------------------------------------------------
1 | :root {
2 | background-color: #f7f7f7;
3 | }
4 | :root[data-theme="dark"] {
5 | background-color: #000;
6 | color: #fff;
7 | }
8 |
--------------------------------------------------------------------------------
/common/styles/uno.css:
--------------------------------------------------------------------------------
1 | /* layer: preflights */
2 | *,::before,::after{--un-rotate:0;--un-rotate-x:0;--un-rotate-y:0;--un-rotate-z:0;--un-scale-x:1;--un-scale-y:1;--un-scale-z:1;--un-skew-x:0;--un-skew-y:0;--un-translate-x:0;--un-translate-y:0;--un-translate-z:0;--un-pan-x: ;--un-pan-y: ;--un-pinch-zoom: ;--un-scroll-snap-strictness:proximity;--un-ordinal: ;--un-slashed-zero: ;--un-numeric-figure: ;--un-numeric-spacing: ;--un-numeric-fraction: ;--un-border-spacing-x:0;--un-border-spacing-y:0;--un-ring-offset-shadow:0 0 rgba(0,0,0,0);--un-ring-shadow:0 0 rgba(0,0,0,0);--un-shadow-inset: ;--un-shadow:0 0 rgba(0,0,0,0);--un-ring-inset: ;--un-ring-offset-width:0px;--un-ring-offset-color:#fff;--un-ring-width:0px;--un-ring-color:rgba(147,197,253,0.5);--un-blur: ;--un-brightness: ;--un-contrast: ;--un-drop-shadow: ;--un-grayscale: ;--un-hue-rotate: ;--un-invert: ;--un-saturate: ;--un-sepia: ;--un-backdrop-blur: ;--un-backdrop-brightness: ;--un-backdrop-contrast: ;--un-backdrop-grayscale: ;--un-backdrop-hue-rotate: ;--un-backdrop-invert: ;--un-backdrop-opacity: ;--un-backdrop-saturate: ;--un-backdrop-sepia: ;}::backdrop{--un-rotate:0;--un-rotate-x:0;--un-rotate-y:0;--un-rotate-z:0;--un-scale-x:1;--un-scale-y:1;--un-scale-z:1;--un-skew-x:0;--un-skew-y:0;--un-translate-x:0;--un-translate-y:0;--un-translate-z:0;--un-pan-x: ;--un-pan-y: ;--un-pinch-zoom: ;--un-scroll-snap-strictness:proximity;--un-ordinal: ;--un-slashed-zero: ;--un-numeric-figure: ;--un-numeric-spacing: ;--un-numeric-fraction: ;--un-border-spacing-x:0;--un-border-spacing-y:0;--un-ring-offset-shadow:0 0 rgba(0,0,0,0);--un-ring-shadow:0 0 rgba(0,0,0,0);--un-shadow-inset: ;--un-shadow:0 0 rgba(0,0,0,0);--un-ring-inset: ;--un-ring-offset-width:0px;--un-ring-offset-color:#fff;--un-ring-width:0px;--un-ring-color:rgba(147,197,253,0.5);--un-blur: ;--un-brightness: ;--un-contrast: ;--un-drop-shadow: ;--un-grayscale: ;--un-hue-rotate: ;--un-invert: ;--un-saturate: ;--un-sepia: ;--un-backdrop-blur: ;--un-backdrop-brightness: ;--un-backdrop-contrast: ;--un-backdrop-grayscale: ;--un-backdrop-hue-rotate: ;--un-backdrop-invert: ;--un-backdrop-opacity: ;--un-backdrop-saturate: ;--un-backdrop-sepia: ;}
3 | /* layer: icons */
4 | .i-carbon-logo-github{--un-icon:url("data:image/svg+xml;utf8,%3Csvg viewBox='0 0 32 32' width='1em' height='1em' xmlns='http://www.w3.org/2000/svg' %3E%3Cpath fill='currentColor' fill-rule='evenodd' d='M16 2a14 14 0 0 0-4.43 27.28c.7.13 1-.3 1-.67v-2.38c-3.89.84-4.71-1.88-4.71-1.88a3.71 3.71 0 0 0-1.62-2.05c-1.27-.86.1-.85.1-.85a2.94 2.94 0 0 1 2.14 1.45a3 3 0 0 0 4.08 1.16a2.93 2.93 0 0 1 .88-1.87c-3.1-.36-6.37-1.56-6.37-6.92a5.4 5.4 0 0 1 1.44-3.76a5 5 0 0 1 .14-3.7s1.17-.38 3.85 1.43a13.3 13.3 0 0 1 7 0c2.67-1.81 3.84-1.43 3.84-1.43a5 5 0 0 1 .14 3.7a5.4 5.4 0 0 1 1.44 3.76c0 5.38-3.27 6.56-6.39 6.91a3.33 3.33 0 0 1 .95 2.59v3.84c0 .46.25.81 1 .67A14 14 0 0 0 16 2Z'/%3E%3C/svg%3E");mask:var(--un-icon) no-repeat;mask-size:100% 100%;-webkit-mask:var(--un-icon) no-repeat;-webkit-mask-size:100% 100%;background-color:currentColor;width:1em;height:1em;}
5 | .i-mdi-alarm{--un-icon:url("data:image/svg+xml;utf8,%3Csvg viewBox='0 0 24 24' width='1em' height='1em' xmlns='http://www.w3.org/2000/svg' %3E%3Cpath fill='currentColor' d='M12 20a7 7 0 0 1-7-7a7 7 0 0 1 7-7a7 7 0 0 1 7 7a7 7 0 0 1-7 7m0-16a9 9 0 0 0-9 9a9 9 0 0 0 9 9a9 9 0 0 0 9-9a9 9 0 0 0-9-9m.5 4H11v6l4.75 2.85l.75-1.23l-4-2.37V8M7.88 3.39L6.6 1.86L2 5.71l1.29 1.53l4.59-3.85M22 5.72l-4.6-3.86l-1.29 1.53l4.6 3.86L22 5.72Z'/%3E%3C/svg%3E");mask:var(--un-icon) no-repeat;mask-size:100% 100%;-webkit-mask:var(--un-icon) no-repeat;-webkit-mask-size:100% 100%;background-color:currentColor;width:1em;height:1em;}
6 | .i-ph-anchor-simple-thin{--un-icon:url("data:image/svg+xml;utf8,%3Csvg viewBox='0 0 256 256' width='1em' height='1em' xmlns='http://www.w3.org/2000/svg' %3E%3Cpath fill='currentColor' d='M224 116h-24a4 4 0 0 0 0 8h19.9a92 92 0 0 1-87.9 87.9V91.7a28 28 0 1 0-8 0v120.2A92 92 0 0 1 36.1 124H56a4 4 0 0 0 0-8H32a4 4 0 0 0-4 4a100 100 0 0 0 200 0a4 4 0 0 0-4-4ZM108 64a20 20 0 1 1 20 20a20.1 20.1 0 0 1-20-20Z'/%3E%3C/svg%3E");mask:var(--un-icon) no-repeat;mask-size:100% 100%;-webkit-mask:var(--un-icon) no-repeat;-webkit-mask-size:100% 100%;background-color:currentColor;width:1em;height:1em;}
7 | /* layer: default */
8 | .fixed{position:fixed;}
9 | .inset-x-0{left:0rem;right:0rem;}
10 | .inset-y-0{top:0rem;bottom:0rem;}
11 | .ml-40{margin-left:10rem;}
12 | .w-40{width:10rem;}
13 | .flex{display:flex;}
14 | .flex-1{flex:1 1 0%;}
15 | .flex-grow{flex-grow:1;}
16 | .flex-row{flex-direction:row;}
17 | .items-center{align-items:center;}
18 | .justify-between{justify-content:space-between;}
19 | .border{border-width:1px;border-style:solid;}
20 | .border-light-9{--un-border-opacity:1;border-color:rgba(221,225,227,var(--un-border-opacity));}
21 | .rounded-xl{border-radius:0.75rem;}
22 | .bg-light-8{--un-bg-opacity:1;background-color:rgba(222,226,230,var(--un-bg-opacity));}
23 | .p-4{padding:1rem;}
24 | .py-20{padding-top:5rem;padding-bottom:5rem;}
25 | .text-2xl{font-size:1.5rem;line-height:2rem;}
26 | .font-bold{font-weight:700;}
27 | .text-black{--un-text-opacity:1;color:rgba(0,0,0,var(--un-text-opacity));}
28 | .text-orange-400{--un-text-opacity:1;color:rgba(251,146,60,var(--un-text-opacity));}
--------------------------------------------------------------------------------
/common/types.ts:
--------------------------------------------------------------------------------
1 | export interface PumpCoin {
2 | address: string
3 | associated_bonding_curve: string
4 | base_reserve: number
5 | bonding_curve: string
6 | complete: number
7 | created_timestamp: number
8 | creator: string
9 | creator_balance: number
10 | creator_close: boolean
11 | creator_token_balance: string
12 | creator_balance_rate: string
13 | top_10_holder_rate: number
14 | description: string
15 | holder_count: number
16 | id: number
17 | image_uri: string
18 | king_of_the_hill_timestamp: number
19 | koth_duration: number
20 | last_reply: number
21 | last_trade_timestamp: number
22 | logo: string
23 | market_cap: number
24 | market_cap_1m: string
25 | market_cap_5m: string
26 | market_id: number
27 | message_id: number
28 | message_sent: number
29 | metadata_uri: string
30 | name: string
31 | open_timestamp: number
32 | price: number
33 | price_change_percent1m: number
34 | price_change_percent5m: number
35 | progress: number
36 | quote_reserve: number
37 | raydium_pool: string
38 | reply_count: number
39 | status: number
40 | swaps_1h: number
41 | swaps_1m: number
42 | swaps_5m: number
43 | swaps_6h: number
44 | swaps_24h: number
45 | symbol: string
46 | telegram: string
47 | time_since_koth: number
48 | total_supply: string
49 | twitter: string
50 | updated_at: number
51 | usd_market_cap: string
52 | virtual_sol_reserves: string
53 | virtual_token_reserves: string
54 | volume_1h: string
55 | volume_1m: string
56 | volume_5m: string
57 | volume_6h: string
58 | volume_24h: string
59 | website: string
60 | }
61 |
62 | export interface PumpDetail {
63 | address: string
64 | burn_ratio: string
65 | burn_status: string // "burn"
66 | creator_percentage: string
67 | top_10_holder_rate: number
68 | holder_rugged_num?: number
69 | holder_token_num?: number
70 | }
71 |
--------------------------------------------------------------------------------
/common/ui/loading.tsx:
--------------------------------------------------------------------------------
1 | import { CircularProgress, Stack } from "@mui/material"
2 | import React from "react"
3 |
4 | export default function Loading() {
5 | return (
6 |
7 |
8 |
9 | )
10 | }
11 |
12 | interface Props extends React.ComponentPropsWithoutRef {
13 | loading?: boolean
14 | }
15 | export function WithLoading({ loading, children }: Props) {
16 | if (loading) {
17 | return
18 | }
19 | return children
20 | }
21 |
--------------------------------------------------------------------------------
/common/ui/popover/confirm.tsx:
--------------------------------------------------------------------------------
1 | import {
2 | Button,
3 | Dialog,
4 | DialogActions,
5 | DialogContent,
6 | DialogContentText,
7 | DialogTitle,
8 | Slide,
9 | } from "@mui/material"
10 | import { createRoot, Root } from "react-dom/client"
11 |
12 | let root: Root
13 | function ensureRoot() {
14 | if (root) {
15 | return root
16 | }
17 | let container = document.querySelector(".confirm-container")
18 | if (!container) {
19 | container = document.createElement("div")
20 | container.className = "confirm-container"
21 | document.body.appendChild(container)
22 | }
23 | root = createRoot(container)
24 | return root
25 | }
26 |
27 | interface ConfirmOptions {
28 | title: string
29 | desc?: string
30 | onConfirm: () => void
31 | onCancel?: () => void
32 | }
33 |
34 | interface Props extends ConfirmOptions {
35 | visible: boolean
36 | }
37 | function Confirm({ title, desc, onConfirm, onCancel, visible }: Props) {
38 | return (
39 |
63 | )
64 | }
65 |
66 | export function confirm(options: ConfirmOptions) {
67 | const root = ensureRoot()
68 | function close() {
69 | root.render()
70 | }
71 | const {onConfirm, onCancel} = options
72 | options.onConfirm = () => {
73 | onConfirm()
74 | close()
75 | }
76 | options.onCancel = () => {
77 | onCancel && onCancel()
78 | close()
79 | }
80 | root.render()
81 | }
82 |
--------------------------------------------------------------------------------
/common/ui/popover/drawer.tsx:
--------------------------------------------------------------------------------
1 | import { Drawer, Slide } from "@mui/material"
2 | import { createRoot, Root } from "react-dom/client"
3 |
4 | let root: Root
5 | function ensureRoot() {
6 | if (root) {
7 | return root
8 | }
9 | let container = document.querySelector(".alert-container")
10 | if (!container) {
11 | container = document.createElement("div")
12 | container.className = "alert-container"
13 | document.body.appendChild(container)
14 | }
15 | root = createRoot(container)
16 | return root
17 | }
18 |
19 | interface Props {
20 | children: string
21 | visible: boolean
22 | }
23 | function AlertModal({ children, visible }: Props) {
24 | return (
25 |
26 |
27 | {children}
28 |
29 |
30 | )
31 | }
32 |
33 | export function drawer(msg: string, duration = 2000) {
34 | const root = ensureRoot()
35 | root.render({msg})
36 | setTimeout(() => {
37 | root.render({msg})
38 | }, duration)
39 | }
40 |
--------------------------------------------------------------------------------
/common/ui/popover/notify.tsx:
--------------------------------------------------------------------------------
1 | "use client"
2 | import { Alert, Slide } from "@mui/material"
3 | import { createRoot, Root } from "react-dom/client"
4 |
5 | let root: Root
6 | function ensureRoot() {
7 | if (root) {
8 | return root
9 | }
10 | let container = document.querySelector(".alert-container")
11 | if (!container) {
12 | container = document.createElement("div")
13 | container.className = "alert-container"
14 | document.body.appendChild(container)
15 | }
16 | root = createRoot(container)
17 | return root
18 | }
19 |
20 | type Severity = "success" | "info" | "warning" | "error"
21 |
22 | interface Props {
23 | children: string
24 | visible: boolean
25 | severity?: Severity
26 | }
27 | function AlertModal({ children, severity = "info", visible }: Props) {
28 | return (
29 |
30 |
43 | {children}
44 |
45 |
46 | )
47 | }
48 |
49 | export function notify(msg: string, security: Severity = "info", duration = 2000) {
50 | const root = ensureRoot()
51 | root.render({msg})
52 | setTimeout(() => {
53 | root.render({msg})
54 | }, duration)
55 | }
56 |
57 | export function success(msg: string, duration = 2000){
58 | return notify(msg, "success", duration)
59 | }
60 |
61 | export function info(msg: string, duration = 2000){
62 | return notify(msg, "info", duration)
63 | }
64 |
65 | export function warning(msg: string, duration = 2000){
66 | return notify(msg, "warning", duration)
67 | }
68 |
69 | export function error(msg: string, duration = 2000){
70 | return notify(msg, "error", duration)
71 | }
72 |
--------------------------------------------------------------------------------
/common/ui/theme/index.tsx:
--------------------------------------------------------------------------------
1 | "use client"
2 | import {
3 | createTheme,
4 | CssBaseline,
5 | ThemeProvider,
6 | useMediaQuery,
7 | } from "@mui/material"
8 | import React, { useMemo } from "react"
9 | // import "./style.scss"
10 |
11 | interface Props extends React.ComponentProps {}
12 |
13 | export default function Theme({ children }: Props) {
14 | const darkMode = useMediaQuery("(prefers-color-scheme: dark)")
15 | function color(light: string, dark: string) {
16 | return darkMode ? dark : light
17 | }
18 | const theme = useMemo(
19 | () =>
20 | createTheme({
21 | palette: {
22 | mode: darkMode ? "dark" : "light",
23 | background: {
24 | default: color("#f7f7f7", "#000"),
25 | },
26 | color: {
27 | cardBg: color("#1E88E5", "#121212"),
28 | },
29 | },
30 | components: {
31 | MuiAppBar: {
32 | styleOverrides: {
33 | colorPrimary: {
34 | background: color("#1976d2", "#2d2d2d")
35 | }
36 | }
37 | }
38 | }
39 | }),
40 | [darkMode]
41 | )
42 |
43 | return (
44 |
45 |
46 | {children}
47 |
48 | )
49 | }
50 |
--------------------------------------------------------------------------------
/common/ui/theme/typings.ts:
--------------------------------------------------------------------------------
1 | declare module '@mui/material/styles' {
2 | interface Palette {
3 | color?: {
4 | cardBg: string
5 | };
6 | }
7 |
8 | interface PaletteOptions {
9 | color?: {
10 | cardBg: string
11 | }
12 | }
13 | }
14 |
15 |
16 | export {}
17 |
--------------------------------------------------------------------------------
/common/ui/theme_toggle/index.tsx:
--------------------------------------------------------------------------------
1 | "use client"
2 | import React from "react"
3 | import { toggleTheme } from "common/utils/theme"
4 | import "./style.css"
5 |
6 | export default function ThemeToggle() {
7 | return (
8 |
47 | )
48 | }
49 |
--------------------------------------------------------------------------------
/common/ui/theme_toggle/style.css:
--------------------------------------------------------------------------------
1 | .theme-toggle {
2 | --size: 2rem;
3 | --icon-fill: hsl(210 10% 30%);
4 | --icon-fill-hover: hsl(210 10% 15%);
5 | background: none;
6 | border: none;
7 | padding: 0;
8 | inline-size: var(--size);
9 | block-size: var(--size);
10 | aspect-ratio: 1;
11 | border-radius: 50%;
12 | cursor: pointer;
13 | touch-action: manipulation;
14 | -webkit-tap-highlight-color: transparent;
15 | outline-offset: 5px;
16 | }
17 |
18 | .sun-and-moon > :is(.moon, .sun, .sun-beams) {
19 | transform-origin: center;
20 | }
21 |
22 | .sun-and-moon > :is(.moon, .sun) {
23 | fill: var(--icon-fill);
24 | }
25 |
26 | .theme-toggle:is(:hover, :focus-visible) > .sun-and-moon > :is(.moon, .sun) {
27 | fill: var(--icon-fill-hover);
28 | }
29 |
30 | .sun-and-moon > .sun-beams {
31 | stroke: var(--icon-fill);
32 | stroke-width: 2px;
33 | }
34 |
35 | .theme-toggle:is(:hover, :focus-visible) .sun-and-moon > .sun-beams {
36 | stroke: var(--icon-fill-hover);
37 | }
38 |
39 | [data-theme="dark"] .sun-and-moon > .sun {
40 | transform: scale(1.75);
41 | }
42 |
43 | [data-theme="dark"] .sun-and-moon > .sun-beams {
44 | opacity: 0;
45 | }
46 |
47 | [data-theme="dark"] .sun-and-moon > .moon > circle {
48 | transform: translateX(-7px);
49 | }
50 |
51 | @supports (cx: 1) {
52 | [data-theme="dark"] .sun-and-moon > .moon > circle {
53 | cx: 17;
54 | transform: translateX(0);
55 | }
56 | }
57 |
58 | @media (prefers-reduced-motion: no-preference) {
59 | .sun-and-moon > .sun {
60 | transition: transform 0.5s var(--ease-elastic-3);
61 | }
62 |
63 | .sun-and-moon > .sun-beams {
64 | transition: transform 0.5s var(--ease-elastic-4), opacity 0.5s var(--ease-3);
65 | }
66 |
67 | .sun-and-moon .moon > circle {
68 | transition: transform 0.25s var(--ease-out-5);
69 | }
70 |
71 | @supports (cx: 1) {
72 | .sun-and-moon .moon > circle {
73 | transition: cx 0.25s var(--ease-out-5);
74 | }
75 | }
76 |
77 | [data-theme="dark"] .sun-and-moon > .sun {
78 | transition-timing-function: var(--ease-3);
79 | transition-duration: 0.25s;
80 | transform: scale(1.75);
81 | }
82 |
83 | [data-theme="dark"] .sun-and-moon > .sun-beams {
84 | transition-duration: 0.15s;
85 | transform: rotateZ(-25deg);
86 | }
87 |
88 | [data-theme="dark"] .sun-and-moon > .moon > circle {
89 | transition-duration: 0.5s;
90 | transition-delay: 0.25s;
91 | }
92 | }
93 |
94 | [data-theme=dark] .theme-toggle {
95 | --icon-fill: hsl(210 10% 70%);
96 | --icon-fill-hover: hsl(210 15% 90%);
97 | }
98 |
99 | /* xxxx */
100 | :where(html) {
101 | --ease-1: cubic-bezier(0.25, 0, 0.5, 1);
102 | --ease-2: cubic-bezier(0.25, 0, 0.4, 1);
103 | --ease-3: cubic-bezier(0.25, 0, 0.3, 1);
104 | --ease-4: cubic-bezier(0.25, 0, 0.2, 1);
105 | --ease-5: cubic-bezier(0.25, 0, 0.1, 1);
106 | --ease-in-1: cubic-bezier(0.25, 0, 1, 1);
107 | --ease-in-2: cubic-bezier(0.5, 0, 1, 1);
108 | --ease-in-3: cubic-bezier(0.7, 0, 1, 1);
109 | --ease-in-4: cubic-bezier(0.9, 0, 1, 1);
110 | --ease-in-5: cubic-bezier(1, 0, 1, 1);
111 | --ease-out-1: cubic-bezier(0, 0, 0.75, 1);
112 | --ease-out-2: cubic-bezier(0, 0, 0.5, 1);
113 | --ease-out-3: cubic-bezier(0, 0, 0.3, 1);
114 | --ease-out-4: cubic-bezier(0, 0, 0.1, 1);
115 | --ease-out-5: cubic-bezier(0, 0, 0, 1);
116 | --ease-in-out-1: cubic-bezier(0.1, 0, 0.9, 1);
117 | --ease-in-out-2: cubic-bezier(0.3, 0, 0.7, 1);
118 | --ease-in-out-3: cubic-bezier(0.5, 0, 0.5, 1);
119 | --ease-in-out-4: cubic-bezier(0.7, 0, 0.3, 1);
120 | --ease-in-out-5: cubic-bezier(0.9, 0, 0.1, 1);
121 | --ease-elastic-1: cubic-bezier(0.5, 0.75, 0.75, 1.25);
122 | --ease-elastic-2: cubic-bezier(0.5, 1, 0.75, 1.25);
123 | --ease-elastic-3: cubic-bezier(0.5, 1.25, 0.75, 1.25);
124 | --ease-elastic-4: cubic-bezier(0.5, 1.5, 0.75, 1.25);
125 | --ease-elastic-5: cubic-bezier(0.5, 1.75, 0.75, 1.25);
126 | --ease-squish-1: cubic-bezier(0.5, -0.1, 0.1, 1.5);
127 | --ease-squish-2: cubic-bezier(0.5, -0.3, 0.1, 1.5);
128 | --ease-squish-3: cubic-bezier(0.5, -0.5, 0.1, 1.5);
129 | --ease-squish-4: cubic-bezier(0.5, -0.7, 0.1, 1.5);
130 | --ease-squish-5: cubic-bezier(0.5, -0.9, 0.1, 1.5);
131 | --ease-step-1: steps(2);
132 | --ease-step-2: steps(3);
133 | --ease-step-3: steps(4);
134 | --ease-step-4: steps(7);
135 | --ease-step-5: steps(10);
136 | }
137 |
--------------------------------------------------------------------------------
/common/utils/env.ts:
--------------------------------------------------------------------------------
1 | import { ProxyAgent } from "undici"
2 |
3 | export const isServer = typeof window === 'undefined';
4 |
5 | export const isDev = process.env.NODE_ENV === 'development'
6 |
7 | export function runInBrowser(cb: Function) {
8 | if (!isServer) {
9 | cb()
10 | }
11 | }
12 |
13 | const proxy = process.env.PROXY
14 |
15 | interface Options extends RequestInit {
16 | dispatcher?: ProxyAgent
17 | }
18 |
19 | // 解决本地开发时,fetch 访问需要代理的接口
20 | export function withProxy(options: Options = {}) {
21 | const opt = {
22 | ...options
23 | }
24 | if (isServer && isDev && proxy){
25 | opt.dispatcher= new ProxyAgent(proxy)
26 | }
27 | return opt
28 | }
29 |
--------------------------------------------------------------------------------
/common/utils/format.ts:
--------------------------------------------------------------------------------
1 | import dayjs from "dayjs"
2 |
3 | export function formatMarketCap(vol: number | string){
4 | const val = Number(vol)
5 | if(!val){
6 | return "0"
7 | }
8 | if(val < 1000){
9 | return val.toFixed(2)
10 | }
11 | return (val / 1000).toFixed(2) + "k"
12 | }
13 |
14 | export function formatTime(time: number){
15 | return dayjs(time * 1000).format("MM-DD HH:mm")
16 | }
17 |
18 | export function formatAddress(addr: string){
19 | return addr.substring(0, 5) + "..." + addr.substr(-4)
20 | }
21 |
22 | export function formatPrice(price: number){
23 | return price.toFixed(8)
24 | }
25 |
26 | export function formatPercent(val: string | number){
27 | return (Number(val) * 100).toFixed(2) + "%"
28 | }
29 |
--------------------------------------------------------------------------------
/common/utils/index.ts:
--------------------------------------------------------------------------------
1 | "use client"
2 | import { info } from "common/ui/popover/notify"
3 | import { createRoot } from "react-dom/client"
4 |
5 | export function copy(str: string, notify = true) {
6 | navigator.clipboard.writeText(str)
7 | if(notify){
8 | info("Copy to clipboard")
9 | }
10 | }
11 |
12 | export function render(children: React.ReactNode) {
13 | const container = document.querySelector("#app")
14 | const root = createRoot(container!)
15 | root.render(children)
16 | }
17 |
18 | export function toFixed(num: number, n = 4) {
19 | if (!num) {
20 | return 0
21 | }
22 | return Math.round(num * Math.pow(10, n)) / Math.pow(10, n)
23 | }
24 |
25 | export function ellipsisAddr(addr = "") {
26 | return addr.substring(0, 5) + "..." + addr.substr(-4)
27 | }
28 |
29 | export function twitter(userName: string){
30 | if(!userName){
31 | return null
32 | }
33 | if(userName.startsWith("https:")){
34 | return userName
35 | }
36 | return `https://x.com/${userName}`
37 | }
38 |
39 | export function pumpill(addr = ""){
40 | return "tg://resolve?domain=pump_fun_bot&start=r_1657098026"
41 | }
42 |
43 | export function bonkbot(addr = ""){
44 | return `tg://resolve?domain=bonkbot_bot&start=ref_e0crb_ca_${addr}`
45 | }
46 |
47 | export function pepeboost(addr = ""){
48 | return `tg://resolve?domain=pepeboost_sol05_bot&start=ref_0h70jz_ca_${addr}`
49 | }
50 |
51 | const GMGN_REF = 'XqhPEmrY'
52 |
53 | export function gmgnbot(addr = ""){
54 | // return `tg://resolve?domain=GMGN_sol_bot&start=i_XqhPEmrY_ca_${addr}`
55 | return `https://t.me/gmgnaibot?start=i_${GMGN_REF}_sol_${addr}`
56 | }
57 |
58 | export function axiom(addr = ""){
59 | if(addr) {
60 | return `https://axiom.trade/t/${addr}/@gmail`
61 | }
62 | return 'https://axiom.trade/@gmail'
63 | }
64 |
65 | export function gmgn(addr = ""){
66 | if(addr) {
67 | return `https://gmgn.ai/sol/token/${GMGN_REF}_${addr}`
68 | }
69 | return `https://gmgn.ai/?ref=${GMGN_REF}`
70 | }
71 |
72 | export function pumpFun(mint: string){
73 | return `https://pump.fun/${mint}`
74 | }
75 |
76 | export function kline(addr: string){
77 | if(addr) {
78 | return `https://www.gmgn.cc/kline/sol/${addr}`
79 | }
80 | }
81 |
--------------------------------------------------------------------------------
/common/utils/request.ts:
--------------------------------------------------------------------------------
1 | import { useEffect, useState } from "react"
2 |
3 | export const fetcher = (url: URL | RequestInfo, init?: RequestInit) => fetch(url, init).then((res) => res.json())
4 |
5 | type Params = Record
6 | export async function get(url: string, params?: Params) {
7 | if (params) {
8 | const qs = new URLSearchParams(params)
9 | url += url.includes("?") ? "&" : "?"
10 | url += qs.toString()
11 | }
12 | const res = await fetch(url)
13 | return res.json()
14 | }
15 |
16 | export async function post(url: string, data: object) {
17 | const res = await fetch(url, {
18 | method: "POST",
19 | body: JSON.stringify(data),
20 | headers: new Headers({
21 | "Content-Type": "application/json",
22 | }),
23 | })
24 | return res.json()
25 | }
26 |
27 | export async function gql(node: string, query: string): Promise {
28 | const data = await post(node, { query })
29 | return data
30 | }
31 |
32 | export function useGet(url: string, params?: Params) {
33 | const [data, setData] = useState()
34 | const [error, setError] = useState()
35 | const [loading, setLoading] = useState(true)
36 |
37 | async function run() {
38 | try {
39 | const data = await get(url, params)
40 | setData(data)
41 | } catch (err) {
42 | console.error(err)
43 | setError(err)
44 | } finally {
45 | setLoading(false)
46 | }
47 | }
48 | useEffect(() => {
49 | run()
50 | }, [])
51 | return {
52 | data,
53 | error,
54 | loading,
55 | }
56 | }
57 |
--------------------------------------------------------------------------------
/common/utils/store.ts:
--------------------------------------------------------------------------------
1 | import { useSyncExternalStore, useMemo } from "react"
2 |
3 | export default class Store{
4 | private _state: S
5 | private _listeners: Array<(data: S) => void>
6 |
7 | private _getState = () => this._state
8 |
9 | private _emit = (data: S) => {
10 | for (let listener of this._listeners) {
11 | listener(data)
12 | }
13 | }
14 |
15 | get state(){
16 | return this._state
17 | }
18 |
19 | constructor(initialState: S){
20 | this._state = initialState
21 | this._listeners = []
22 | this.subscribe = this.subscribe.bind(this)
23 | this.update = this.update.bind(this)
24 | this.use = this.use.bind(this)
25 | }
26 |
27 | subscribe(listener: (data: S) => void){
28 | this._listeners = [...this._listeners, listener]
29 | return () => {
30 | this._listeners = this._listeners.filter(l => l !== listener)
31 | }
32 | }
33 |
34 | update(data: Partial): S
35 | update(updater: (state: S) => Partial): S
36 | update(payload: Partial | ((state: S) => Partial)) {
37 | let data: Partial
38 | if (typeof payload === "function") {
39 | data = payload(this._state)
40 | } else {
41 | data = payload
42 | }
43 | this._state = {
44 | ...this._state,
45 | ...data,
46 | }
47 | this._emit(this._state)
48 | return this._state
49 | }
50 |
51 |
52 | use(): S
53 | use(compute: (state: S) => T): T
54 | use(compute?: (state: S) => T): S | T {
55 | const state = useSyncExternalStore(this.subscribe, this._getState, () => this._state) as S
56 | if(!compute){
57 | return state
58 | }
59 | return useMemo(() => compute(state), [state])
60 | }
61 | }
62 |
--------------------------------------------------------------------------------
/common/utils/theme.ts:
--------------------------------------------------------------------------------
1 | import { runInBrowser } from "./env"
2 |
3 | const THEME_KEY = "theme-preference"
4 |
5 | type Theme = "light" | "dark"
6 |
7 | let theme: Theme = getTheme()
8 |
9 | function getTheme() {
10 | if (typeof window === "undefined") {
11 | return "light"
12 | }
13 | const val = window.localStorage.getItem(THEME_KEY)
14 | if (val) {
15 | return val === "dark" ? "dark" : "light"
16 | } else {
17 | return window.matchMedia("(prefers-color-scheme: dark)").matches
18 | ? "dark"
19 | : "light"
20 | }
21 | }
22 |
23 | export function setTheme(value: Theme) {
24 | theme = value
25 | localStorage.setItem(THEME_KEY, value)
26 | reflectPreference()
27 | }
28 |
29 | export function toggleTheme() {
30 | setTheme(theme === "dark" ? "light" : "dark")
31 | }
32 |
33 | const reflectPreference = () => {
34 | runInBrowser(() => {
35 | document.firstElementChild!.setAttribute("data-theme", theme)
36 | document.querySelector("#theme-toggle")?.setAttribute("aria-label", theme)
37 | })
38 | }
39 |
40 | // set early so no page flashes / CSS is made aware
41 | reflectPreference()
42 |
43 | runInBrowser(() => {
44 | window.onload = () => {
45 | reflectPreference()
46 | }
47 |
48 | // sync with system changes
49 | window
50 | .matchMedia("(prefers-color-scheme: dark)")
51 | .addEventListener("change", ({ matches: isDark }) => {
52 | theme = isDark ? "dark" : "light"
53 | setTheme(isDark ? "dark" : "light")
54 | })
55 | })
56 |
--------------------------------------------------------------------------------
/common/utils/track.ts:
--------------------------------------------------------------------------------
1 | import { sendGTMEvent } from "@next/third-parties/google"
2 |
3 | export enum EventName {
4 | Click = "g_click"
5 | }
6 |
7 | export function click(type: string) {
8 | sendGTMEvent({
9 | event: EventName.Click,
10 | type: type,
11 | })
12 | }
13 |
--------------------------------------------------------------------------------
/next-env.d.ts:
--------------------------------------------------------------------------------
1 | ///
2 | ///
3 |
4 | // NOTE: This file should not be edited
5 | // see https://nextjs.org/docs/app/api-reference/config/typescript for more information.
6 |
--------------------------------------------------------------------------------
/next.config.mjs:
--------------------------------------------------------------------------------
1 | import withSerwistInit from "@serwist/next";
2 | import crypto from "crypto"
3 |
4 | const revision = crypto.randomUUID();
5 |
6 | const withSerwist = withSerwistInit({
7 | // Note: This is only an example. If you use Pages Router,
8 | // use something else that works, such as "service-worker/index.ts".
9 | swSrc: "app/sw.ts",
10 | swDest: "public/sw.js",
11 | additionalPrecacheEntries: [{ url: "/~offline", revision }],
12 | });
13 |
14 | export default withSerwist();
15 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "pumpfun",
3 | "version": "1.0.0",
4 | "description": "",
5 | "main": "index.js",
6 | "scripts": {
7 | "dev": "next dev",
8 | "build": "next build",
9 | "start": "next start",
10 | "export": "next export"
11 | },
12 | "repository": {
13 | "type": "git",
14 | "url": "git+https://github.com/evolify/pumpfun.git"
15 | },
16 | "keywords": [],
17 | "author": "",
18 | "license": "ISC",
19 | "bugs": {
20 | "url": "https://github.com/evolify/pumpfun/issues"
21 | },
22 | "homepage": "https://github.com/evolify/pumpfun#readme",
23 | "dependencies": {
24 | "@emotion/cache": "^11.11.0",
25 | "@emotion/react": "latest",
26 | "@emotion/server": "latest",
27 | "@emotion/styled": "latest",
28 | "@evolify/tiny": "^0.2.1",
29 | "@mui/icons-material": "latest",
30 | "@mui/material": "latest",
31 | "@mui/material-nextjs": "^5.15.11",
32 | "@next/third-parties": "^14.2.3",
33 | "@serwist/next": "^9.0.2",
34 | "@vercel/analytics": "latest",
35 | "@vercel/speed-insights": "latest",
36 | "dayjs": "latest",
37 | "next": "latest",
38 | "react": "latest",
39 | "react-dom": "latest",
40 | "swr": "^2.2.5",
41 | "undici": "^7.5.0"
42 | },
43 | "devDependencies": {
44 | "@types/node": "^20.12.13",
45 | "@types/react": "latest",
46 | "@types/react-dom": "latest",
47 | "postcss": "^8.4.38",
48 | "sass": "latest",
49 | "serwist": "^9.0.2",
50 | "typescript": "latest"
51 | }
52 | }
53 |
--------------------------------------------------------------------------------
/pnpm-lock.yaml:
--------------------------------------------------------------------------------
1 | lockfileVersion: 5.4
2 |
3 | specifiers:
4 | '@emotion/cache': ^11.11.0
5 | '@emotion/react': latest
6 | '@emotion/server': latest
7 | '@emotion/styled': latest
8 | '@evolify/tiny': ^0.2.1
9 | '@mui/icons-material': latest
10 | '@mui/material': latest
11 | '@mui/material-nextjs': ^5.15.11
12 | '@next/third-parties': ^14.2.3
13 | '@serwist/next': ^9.0.2
14 | '@types/node': ^20.12.13
15 | '@types/react': latest
16 | '@types/react-dom': latest
17 | '@vercel/analytics': latest
18 | '@vercel/speed-insights': latest
19 | dayjs: latest
20 | next: latest
21 | postcss: ^8.4.38
22 | react: latest
23 | react-dom: latest
24 | sass: latest
25 | serwist: ^9.0.2
26 | swr: ^2.2.5
27 | typescript: latest
28 | undici: ^7.5.0
29 |
30 | dependencies:
31 | '@emotion/cache': 11.11.0
32 | '@emotion/react': 11.14.0_cmnynwxg3ky26emhk6apxalvqe
33 | '@emotion/server': 11.11.0
34 | '@emotion/styled': 11.14.0_whpmy6wu3bl4ymcfc5akhmz2b4
35 | '@evolify/tiny': 0.2.1_react@19.0.0
36 | '@mui/icons-material': 6.4.7_wq2wvurbvbdhypbvmrypjntrcu
37 | '@mui/material': 6.4.7_qt3atnl77o3jbq6w3aveu2kdwi
38 | '@mui/material-nextjs': 5.15.11_upegvbe35lwfxr6r2ditiyxj3m
39 | '@next/third-parties': 14.2.3_next@15.2.2+react@19.0.0
40 | '@serwist/next': 9.0.2_f3uhdn62bw7fis42gkmezxqzuy
41 | '@vercel/analytics': 1.5.0_next@15.2.2+react@19.0.0
42 | '@vercel/speed-insights': 1.2.0_next@15.2.2+react@19.0.0
43 | dayjs: 1.11.13
44 | next: 15.2.2_xq4e3whnojlx6hddcxrcjq4qhe
45 | react: 19.0.0
46 | react-dom: 19.0.0_react@19.0.0
47 | swr: 2.2.5_react@19.0.0
48 | undici: 7.5.0
49 |
50 | devDependencies:
51 | '@types/node': 20.12.13
52 | '@types/react': 19.0.10
53 | '@types/react-dom': 19.0.4_@types+react@19.0.10
54 | postcss: 8.4.38
55 | sass: 1.85.1
56 | serwist: 9.0.2_typescript@5.8.2
57 | typescript: 5.8.2
58 |
59 | packages:
60 |
61 | /@babel/code-frame/7.24.6:
62 | resolution: {integrity: sha512-ZJhac6FkEd1yhG2AHOmfcXG4ceoLltoCVJjN5XsWN9BifBQr+cHJbWi0h68HZuSORq+3WtJ2z0hwF2NG1b5kcA==}
63 | engines: {node: '>=6.9.0'}
64 | dependencies:
65 | '@babel/highlight': 7.24.6
66 | picocolors: 1.0.0
67 | dev: false
68 |
69 | /@babel/helper-module-imports/7.24.6:
70 | resolution: {integrity: sha512-a26dmxFJBF62rRO9mmpgrfTLsAuyHk4e1hKTUkD/fcMfynt8gvEKwQPQDVxWhca8dHoDck+55DFt42zV0QMw5g==}
71 | engines: {node: '>=6.9.0'}
72 | dependencies:
73 | '@babel/types': 7.24.6
74 | dev: false
75 |
76 | /@babel/helper-string-parser/7.24.6:
77 | resolution: {integrity: sha512-WdJjwMEkmBicq5T9fm/cHND3+UlFa2Yj8ALLgmoSQAJZysYbBjw+azChSGPN4DSPLXOcooGRvDwZWMcF/mLO2Q==}
78 | engines: {node: '>=6.9.0'}
79 | dev: false
80 |
81 | /@babel/helper-validator-identifier/7.24.6:
82 | resolution: {integrity: sha512-4yA7s865JHaqUdRbnaxarZREuPTHrjpDT+pXoAZ1yhyo6uFnIEpS8VMu16siFOHDpZNKYv5BObhsB//ycbICyw==}
83 | engines: {node: '>=6.9.0'}
84 | dev: false
85 |
86 | /@babel/highlight/7.24.6:
87 | resolution: {integrity: sha512-2YnuOp4HAk2BsBrJJvYCbItHx0zWscI1C3zgWkz+wDyD9I7GIVrfnLyrR4Y1VR+7p+chAEcrgRQYZAGIKMV7vQ==}
88 | engines: {node: '>=6.9.0'}
89 | dependencies:
90 | '@babel/helper-validator-identifier': 7.24.6
91 | chalk: 2.4.2
92 | js-tokens: 4.0.0
93 | picocolors: 1.0.0
94 | dev: false
95 |
96 | /@babel/runtime/7.24.4:
97 | resolution: {integrity: sha512-dkxf7+hn8mFBwKjs9bvBlArzLVxVbS8usaPUDd5p2a9JCL9tB8OaOVN1isD4+Xyk4ns89/xeOmbQvgdK7IIVdA==}
98 | engines: {node: '>=6.9.0'}
99 | dependencies:
100 | regenerator-runtime: 0.14.1
101 | dev: false
102 |
103 | /@babel/runtime/7.26.10:
104 | resolution: {integrity: sha512-2WJMeRQPHKSPemqk/awGrAiuFfzBmOIPXKizAsVhWH9YJqLZ0H+HS4c8loHGgW6utJ3E/ejXQUsiGaQy2NZ9Fw==}
105 | engines: {node: '>=6.9.0'}
106 | dependencies:
107 | regenerator-runtime: 0.14.1
108 | dev: false
109 |
110 | /@babel/types/7.24.6:
111 | resolution: {integrity: sha512-WaMsgi6Q8zMgMth93GvWPXkhAIEobfsIkLTacoVZoK1J0CevIPGYY2Vo5YvJGqyHqXM6P4ppOYGsIRU8MM9pFQ==}
112 | engines: {node: '>=6.9.0'}
113 | dependencies:
114 | '@babel/helper-string-parser': 7.24.6
115 | '@babel/helper-validator-identifier': 7.24.6
116 | to-fast-properties: 2.0.0
117 | dev: false
118 |
119 | /@emnapi/runtime/1.3.1:
120 | resolution: {integrity: sha512-kEBmG8KyqtxJZv+ygbEim+KCGtIq1fC22Ms3S4ziXmYKm8uyoLX0MHONVKwp+9opg390VaKRNt4a7A9NwmpNhw==}
121 | requiresBuild: true
122 | dependencies:
123 | tslib: 2.8.1
124 | dev: false
125 | optional: true
126 |
127 | /@emotion/babel-plugin/11.13.5:
128 | resolution: {integrity: sha512-pxHCpT2ex+0q+HH91/zsdHkw/lXd468DIN2zvfvLtPKLLMo6gQj7oLObq8PhkrxOZb/gGCq03S3Z7PDhS8pduQ==}
129 | dependencies:
130 | '@babel/helper-module-imports': 7.24.6
131 | '@babel/runtime': 7.26.10
132 | '@emotion/hash': 0.9.2
133 | '@emotion/memoize': 0.9.0
134 | '@emotion/serialize': 1.3.3
135 | babel-plugin-macros: 3.1.0
136 | convert-source-map: 1.9.0
137 | escape-string-regexp: 4.0.0
138 | find-root: 1.1.0
139 | source-map: 0.5.7
140 | stylis: 4.2.0
141 | dev: false
142 |
143 | /@emotion/cache/11.11.0:
144 | resolution: {integrity: sha512-P34z9ssTCBi3e9EI1ZsWpNHcfY1r09ZO0rZbRO2ob3ZQMnFI35jB536qoXbkdesr5EUhYi22anuEJuyxifaqAQ==}
145 | dependencies:
146 | '@emotion/memoize': 0.8.1
147 | '@emotion/sheet': 1.2.2
148 | '@emotion/utils': 1.2.1
149 | '@emotion/weak-memoize': 0.3.1
150 | stylis: 4.2.0
151 | dev: false
152 |
153 | /@emotion/cache/11.14.0:
154 | resolution: {integrity: sha512-L/B1lc/TViYk4DcpGxtAVbx0ZyiKM5ktoIyafGkH6zg/tj+mA+NE//aPYKG0k8kCHSHVJrpLpcAlOBEXQ3SavA==}
155 | dependencies:
156 | '@emotion/memoize': 0.9.0
157 | '@emotion/sheet': 1.4.0
158 | '@emotion/utils': 1.4.2
159 | '@emotion/weak-memoize': 0.4.0
160 | stylis: 4.2.0
161 | dev: false
162 |
163 | /@emotion/hash/0.9.2:
164 | resolution: {integrity: sha512-MyqliTZGuOm3+5ZRSaaBGP3USLw6+EGykkwZns2EPC5g8jJ4z9OrdZY9apkl3+UP9+sdz76YYkwCKP5gh8iY3g==}
165 | dev: false
166 |
167 | /@emotion/is-prop-valid/1.3.1:
168 | resolution: {integrity: sha512-/ACwoqx7XQi9knQs/G0qKvv5teDMhD7bXYns9N/wM8ah8iNb8jZ2uNO0YOgiq2o2poIvVtJS2YALasQuMSQ7Kw==}
169 | dependencies:
170 | '@emotion/memoize': 0.9.0
171 | dev: false
172 |
173 | /@emotion/memoize/0.8.1:
174 | resolution: {integrity: sha512-W2P2c/VRW1/1tLox0mVUalvnWXxavmv/Oum2aPsRcoDJuob75FC3Y8FbpfLwUegRcxINtGUMPq0tFCvYNTBXNA==}
175 | dev: false
176 |
177 | /@emotion/memoize/0.9.0:
178 | resolution: {integrity: sha512-30FAj7/EoJ5mwVPOWhAyCX+FPfMDrVecJAM+Iw9NRoSl4BBAQeqj4cApHHUXOVvIPgLVDsCFoz/hGD+5QQD1GQ==}
179 | dev: false
180 |
181 | /@emotion/react/11.14.0_cmnynwxg3ky26emhk6apxalvqe:
182 | resolution: {integrity: sha512-O000MLDBDdk/EohJPFUqvnp4qnHeYkVP5B0xEG0D/L7cOKP9kefu2DXn8dj74cQfsEzUqh+sr1RzFqiL1o+PpA==}
183 | peerDependencies:
184 | '@types/react': '*'
185 | react: '>=16.8.0'
186 | peerDependenciesMeta:
187 | '@types/react':
188 | optional: true
189 | dependencies:
190 | '@babel/runtime': 7.26.10
191 | '@emotion/babel-plugin': 11.13.5
192 | '@emotion/cache': 11.14.0
193 | '@emotion/serialize': 1.3.3
194 | '@emotion/use-insertion-effect-with-fallbacks': 1.2.0_react@19.0.0
195 | '@emotion/utils': 1.4.2
196 | '@emotion/weak-memoize': 0.4.0
197 | '@types/react': 19.0.10
198 | hoist-non-react-statics: 3.3.2
199 | react: 19.0.0
200 | dev: false
201 |
202 | /@emotion/serialize/1.3.3:
203 | resolution: {integrity: sha512-EISGqt7sSNWHGI76hC7x1CksiXPahbxEOrC5RjmFRJTqLyEK9/9hZvBbiYn70dw4wuwMKiEMCUlR6ZXTSWQqxA==}
204 | dependencies:
205 | '@emotion/hash': 0.9.2
206 | '@emotion/memoize': 0.9.0
207 | '@emotion/unitless': 0.10.0
208 | '@emotion/utils': 1.4.2
209 | csstype: 3.1.3
210 | dev: false
211 |
212 | /@emotion/server/11.11.0:
213 | resolution: {integrity: sha512-6q89fj2z8VBTx9w93kJ5n51hsmtYuFPtZgnc1L8VzRx9ti4EU6EyvF6Nn1H1x3vcCQCF7u2dB2lY4AYJwUW4PA==}
214 | peerDependencies:
215 | '@emotion/css': ^11.0.0-rc.0
216 | peerDependenciesMeta:
217 | '@emotion/css':
218 | optional: true
219 | dependencies:
220 | '@emotion/utils': 1.4.2
221 | html-tokenize: 2.0.1
222 | multipipe: 1.0.2
223 | through: 2.3.8
224 | dev: false
225 |
226 | /@emotion/sheet/1.2.2:
227 | resolution: {integrity: sha512-0QBtGvaqtWi+nx6doRwDdBIzhNdZrXUppvTM4dtZZWEGTXL/XE/yJxLMGlDT1Gt+UHH5IX1n+jkXyytE/av7OA==}
228 | dev: false
229 |
230 | /@emotion/sheet/1.4.0:
231 | resolution: {integrity: sha512-fTBW9/8r2w3dXWYM4HCB1Rdp8NLibOw2+XELH5m5+AkWiL/KqYX6dc0kKYlaYyKjrQ6ds33MCdMPEwgs2z1rqg==}
232 | dev: false
233 |
234 | /@emotion/styled/11.14.0_whpmy6wu3bl4ymcfc5akhmz2b4:
235 | resolution: {integrity: sha512-XxfOnXFffatap2IyCeJyNov3kiDQWoR08gPUQxvbL7fxKryGBKUZUkG6Hz48DZwVrJSVh9sJboyV1Ds4OW6SgA==}
236 | peerDependencies:
237 | '@emotion/react': ^11.0.0-rc.0
238 | '@types/react': '*'
239 | react: '>=16.8.0'
240 | peerDependenciesMeta:
241 | '@types/react':
242 | optional: true
243 | dependencies:
244 | '@babel/runtime': 7.26.10
245 | '@emotion/babel-plugin': 11.13.5
246 | '@emotion/is-prop-valid': 1.3.1
247 | '@emotion/react': 11.14.0_cmnynwxg3ky26emhk6apxalvqe
248 | '@emotion/serialize': 1.3.3
249 | '@emotion/use-insertion-effect-with-fallbacks': 1.2.0_react@19.0.0
250 | '@emotion/utils': 1.4.2
251 | '@types/react': 19.0.10
252 | react: 19.0.0
253 | dev: false
254 |
255 | /@emotion/unitless/0.10.0:
256 | resolution: {integrity: sha512-dFoMUuQA20zvtVTuxZww6OHoJYgrzfKM1t52mVySDJnMSEa08ruEvdYQbhvyu6soU+NeLVd3yKfTfT0NeV6qGg==}
257 | dev: false
258 |
259 | /@emotion/use-insertion-effect-with-fallbacks/1.2.0_react@19.0.0:
260 | resolution: {integrity: sha512-yJMtVdH59sxi/aVJBpk9FQq+OR8ll5GT8oWd57UpeaKEVGab41JWaCFA7FRLoMLloOZF/c/wsPoe+bfGmRKgDg==}
261 | peerDependencies:
262 | react: '>=16.8.0'
263 | dependencies:
264 | react: 19.0.0
265 | dev: false
266 |
267 | /@emotion/utils/1.2.1:
268 | resolution: {integrity: sha512-Y2tGf3I+XVnajdItskUCn6LX+VUDmP6lTL4fcqsXAv43dnlbZiuW4MWQW38rW/BVWSE7Q/7+XQocmpnRYILUmg==}
269 | dev: false
270 |
271 | /@emotion/utils/1.4.2:
272 | resolution: {integrity: sha512-3vLclRofFziIa3J2wDh9jjbkUz9qk5Vi3IZ/FSTKViB0k+ef0fPV7dYrUIugbgupYDx7v9ud/SjrtEP8Y4xLoA==}
273 | dev: false
274 |
275 | /@emotion/weak-memoize/0.3.1:
276 | resolution: {integrity: sha512-EsBwpc7hBUJWAsNPBmJy4hxWx12v6bshQsldrVmjxJoc3isbxhOrF2IcCpaXxfvq03NwkI7sbsOLXbYuqF/8Ww==}
277 | dev: false
278 |
279 | /@emotion/weak-memoize/0.4.0:
280 | resolution: {integrity: sha512-snKqtPW01tN0ui7yu9rGv69aJXr/a/Ywvl11sUjNtEcRc+ng/mQriFL0wLXMef74iHa/EkftbDzU9F8iFbH+zg==}
281 | dev: false
282 |
283 | /@evolify/tiny/0.2.1_react@19.0.0:
284 | resolution: {integrity: sha512-7gIXmekhMaorayTE7e6Bx0WL6ESJPZQbn2sz0XdyeL2aGkdkILxGBbyAFAle3XRs5PP/xI4Pv82HZ0M0i2h0mA==}
285 | peerDependencies:
286 | react: '>=18.0.0'
287 | dependencies:
288 | react: 19.0.0
289 | dev: false
290 |
291 | /@img/sharp-darwin-arm64/0.33.5:
292 | resolution: {integrity: sha512-UT4p+iz/2H4twwAoLCqfA9UH5pI6DggwKEGuaPy7nCVQ8ZsiY5PIcrRvD1DzuY3qYL07NtIQcWnBSY/heikIFQ==}
293 | engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
294 | cpu: [arm64]
295 | os: [darwin]
296 | requiresBuild: true
297 | optionalDependencies:
298 | '@img/sharp-libvips-darwin-arm64': 1.0.4
299 | dev: false
300 | optional: true
301 |
302 | /@img/sharp-darwin-x64/0.33.5:
303 | resolution: {integrity: sha512-fyHac4jIc1ANYGRDxtiqelIbdWkIuQaI84Mv45KvGRRxSAa7o7d1ZKAOBaYbnepLC1WqxfpimdeWfvqqSGwR2Q==}
304 | engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
305 | cpu: [x64]
306 | os: [darwin]
307 | requiresBuild: true
308 | optionalDependencies:
309 | '@img/sharp-libvips-darwin-x64': 1.0.4
310 | dev: false
311 | optional: true
312 |
313 | /@img/sharp-libvips-darwin-arm64/1.0.4:
314 | resolution: {integrity: sha512-XblONe153h0O2zuFfTAbQYAX2JhYmDHeWikp1LM9Hul9gVPjFY427k6dFEcOL72O01QxQsWi761svJ/ev9xEDg==}
315 | cpu: [arm64]
316 | os: [darwin]
317 | requiresBuild: true
318 | dev: false
319 | optional: true
320 |
321 | /@img/sharp-libvips-darwin-x64/1.0.4:
322 | resolution: {integrity: sha512-xnGR8YuZYfJGmWPvmlunFaWJsb9T/AO2ykoP3Fz/0X5XV2aoYBPkX6xqCQvUTKKiLddarLaxpzNe+b1hjeWHAQ==}
323 | cpu: [x64]
324 | os: [darwin]
325 | requiresBuild: true
326 | dev: false
327 | optional: true
328 |
329 | /@img/sharp-libvips-linux-arm/1.0.5:
330 | resolution: {integrity: sha512-gvcC4ACAOPRNATg/ov8/MnbxFDJqf/pDePbBnuBDcjsI8PssmjoKMAz4LtLaVi+OnSb5FK/yIOamqDwGmXW32g==}
331 | cpu: [arm]
332 | os: [linux]
333 | libc: [glibc]
334 | requiresBuild: true
335 | dev: false
336 | optional: true
337 |
338 | /@img/sharp-libvips-linux-arm64/1.0.4:
339 | resolution: {integrity: sha512-9B+taZ8DlyyqzZQnoeIvDVR/2F4EbMepXMc/NdVbkzsJbzkUjhXv/70GQJ7tdLA4YJgNP25zukcxpX2/SueNrA==}
340 | cpu: [arm64]
341 | os: [linux]
342 | libc: [glibc]
343 | requiresBuild: true
344 | dev: false
345 | optional: true
346 |
347 | /@img/sharp-libvips-linux-s390x/1.0.4:
348 | resolution: {integrity: sha512-u7Wz6ntiSSgGSGcjZ55im6uvTrOxSIS8/dgoVMoiGE9I6JAfU50yH5BoDlYA1tcuGS7g/QNtetJnxA6QEsCVTA==}
349 | cpu: [s390x]
350 | os: [linux]
351 | libc: [glibc]
352 | requiresBuild: true
353 | dev: false
354 | optional: true
355 |
356 | /@img/sharp-libvips-linux-x64/1.0.4:
357 | resolution: {integrity: sha512-MmWmQ3iPFZr0Iev+BAgVMb3ZyC4KeFc3jFxnNbEPas60e1cIfevbtuyf9nDGIzOaW9PdnDciJm+wFFaTlj5xYw==}
358 | cpu: [x64]
359 | os: [linux]
360 | libc: [glibc]
361 | requiresBuild: true
362 | dev: false
363 | optional: true
364 |
365 | /@img/sharp-libvips-linuxmusl-arm64/1.0.4:
366 | resolution: {integrity: sha512-9Ti+BbTYDcsbp4wfYib8Ctm1ilkugkA/uscUn6UXK1ldpC1JjiXbLfFZtRlBhjPZ5o1NCLiDbg8fhUPKStHoTA==}
367 | cpu: [arm64]
368 | os: [linux]
369 | libc: [musl]
370 | requiresBuild: true
371 | dev: false
372 | optional: true
373 |
374 | /@img/sharp-libvips-linuxmusl-x64/1.0.4:
375 | resolution: {integrity: sha512-viYN1KX9m+/hGkJtvYYp+CCLgnJXwiQB39damAO7WMdKWlIhmYTfHjwSbQeUK/20vY154mwezd9HflVFM1wVSw==}
376 | cpu: [x64]
377 | os: [linux]
378 | libc: [musl]
379 | requiresBuild: true
380 | dev: false
381 | optional: true
382 |
383 | /@img/sharp-linux-arm/0.33.5:
384 | resolution: {integrity: sha512-JTS1eldqZbJxjvKaAkxhZmBqPRGmxgu+qFKSInv8moZ2AmT5Yib3EQ1c6gp493HvrvV8QgdOXdyaIBrhvFhBMQ==}
385 | engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
386 | cpu: [arm]
387 | os: [linux]
388 | libc: [glibc]
389 | requiresBuild: true
390 | optionalDependencies:
391 | '@img/sharp-libvips-linux-arm': 1.0.5
392 | dev: false
393 | optional: true
394 |
395 | /@img/sharp-linux-arm64/0.33.5:
396 | resolution: {integrity: sha512-JMVv+AMRyGOHtO1RFBiJy/MBsgz0x4AWrT6QoEVVTyh1E39TrCUpTRI7mx9VksGX4awWASxqCYLCV4wBZHAYxA==}
397 | engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
398 | cpu: [arm64]
399 | os: [linux]
400 | libc: [glibc]
401 | requiresBuild: true
402 | optionalDependencies:
403 | '@img/sharp-libvips-linux-arm64': 1.0.4
404 | dev: false
405 | optional: true
406 |
407 | /@img/sharp-linux-s390x/0.33.5:
408 | resolution: {integrity: sha512-y/5PCd+mP4CA/sPDKl2961b+C9d+vPAveS33s6Z3zfASk2j5upL6fXVPZi7ztePZ5CuH+1kW8JtvxgbuXHRa4Q==}
409 | engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
410 | cpu: [s390x]
411 | os: [linux]
412 | libc: [glibc]
413 | requiresBuild: true
414 | optionalDependencies:
415 | '@img/sharp-libvips-linux-s390x': 1.0.4
416 | dev: false
417 | optional: true
418 |
419 | /@img/sharp-linux-x64/0.33.5:
420 | resolution: {integrity: sha512-opC+Ok5pRNAzuvq1AG0ar+1owsu842/Ab+4qvU879ippJBHvyY5n2mxF1izXqkPYlGuP/M556uh53jRLJmzTWA==}
421 | engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
422 | cpu: [x64]
423 | os: [linux]
424 | libc: [glibc]
425 | requiresBuild: true
426 | optionalDependencies:
427 | '@img/sharp-libvips-linux-x64': 1.0.4
428 | dev: false
429 | optional: true
430 |
431 | /@img/sharp-linuxmusl-arm64/0.33.5:
432 | resolution: {integrity: sha512-XrHMZwGQGvJg2V/oRSUfSAfjfPxO+4DkiRh6p2AFjLQztWUuY/o8Mq0eMQVIY7HJ1CDQUJlxGGZRw1a5bqmd1g==}
433 | engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
434 | cpu: [arm64]
435 | os: [linux]
436 | libc: [musl]
437 | requiresBuild: true
438 | optionalDependencies:
439 | '@img/sharp-libvips-linuxmusl-arm64': 1.0.4
440 | dev: false
441 | optional: true
442 |
443 | /@img/sharp-linuxmusl-x64/0.33.5:
444 | resolution: {integrity: sha512-WT+d/cgqKkkKySYmqoZ8y3pxx7lx9vVejxW/W4DOFMYVSkErR+w7mf2u8m/y4+xHe7yY9DAXQMWQhpnMuFfScw==}
445 | engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
446 | cpu: [x64]
447 | os: [linux]
448 | libc: [musl]
449 | requiresBuild: true
450 | optionalDependencies:
451 | '@img/sharp-libvips-linuxmusl-x64': 1.0.4
452 | dev: false
453 | optional: true
454 |
455 | /@img/sharp-wasm32/0.33.5:
456 | resolution: {integrity: sha512-ykUW4LVGaMcU9lu9thv85CbRMAwfeadCJHRsg2GmeRa/cJxsVY9Rbd57JcMxBkKHag5U/x7TSBpScF4U8ElVzg==}
457 | engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
458 | cpu: [wasm32]
459 | requiresBuild: true
460 | dependencies:
461 | '@emnapi/runtime': 1.3.1
462 | dev: false
463 | optional: true
464 |
465 | /@img/sharp-win32-ia32/0.33.5:
466 | resolution: {integrity: sha512-T36PblLaTwuVJ/zw/LaH0PdZkRz5rd3SmMHX8GSmR7vtNSP5Z6bQkExdSK7xGWyxLw4sUknBuugTelgw2faBbQ==}
467 | engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
468 | cpu: [ia32]
469 | os: [win32]
470 | requiresBuild: true
471 | dev: false
472 | optional: true
473 |
474 | /@img/sharp-win32-x64/0.33.5:
475 | resolution: {integrity: sha512-MpY/o8/8kj+EcnxwvrP4aTJSWw/aZ7JIGR4aBeZkZw5B7/Jn+tY9/VNwtcoGmdT7GfggGIU4kygOMSbYnOrAbg==}
476 | engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
477 | cpu: [x64]
478 | os: [win32]
479 | requiresBuild: true
480 | dev: false
481 | optional: true
482 |
483 | /@isaacs/cliui/8.0.2:
484 | resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==}
485 | engines: {node: '>=12'}
486 | dependencies:
487 | string-width: 5.1.2
488 | string-width-cjs: /string-width/4.2.3
489 | strip-ansi: 7.1.0
490 | strip-ansi-cjs: /strip-ansi/6.0.1
491 | wrap-ansi: 8.1.0
492 | wrap-ansi-cjs: /wrap-ansi/7.0.0
493 | dev: false
494 |
495 | /@mui/core-downloads-tracker/6.4.7:
496 | resolution: {integrity: sha512-XjJrKFNt9zAKvcnoIIBquXyFyhfrHYuttqMsoDS7lM7VwufYG4fAPw4kINjBFg++fqXM2BNAuWR9J7XVIuKIKg==}
497 | dev: false
498 |
499 | /@mui/icons-material/6.4.7_wq2wvurbvbdhypbvmrypjntrcu:
500 | resolution: {integrity: sha512-Rk8cs9ufQoLBw582Rdqq7fnSXXZTqhYRbpe1Y5SAz9lJKZP3CIdrj0PfG8HJLGw1hrsHFN/rkkm70IDzhJsG1g==}
501 | engines: {node: '>=14.0.0'}
502 | peerDependencies:
503 | '@mui/material': ^6.4.7
504 | '@types/react': ^17.0.0 || ^18.0.0 || ^19.0.0
505 | react: ^17.0.0 || ^18.0.0 || ^19.0.0
506 | peerDependenciesMeta:
507 | '@types/react':
508 | optional: true
509 | dependencies:
510 | '@babel/runtime': 7.26.10
511 | '@mui/material': 6.4.7_qt3atnl77o3jbq6w3aveu2kdwi
512 | '@types/react': 19.0.10
513 | react: 19.0.0
514 | dev: false
515 |
516 | /@mui/material-nextjs/5.15.11_upegvbe35lwfxr6r2ditiyxj3m:
517 | resolution: {integrity: sha512-cp5RWYbBngyi7NKP91R9QITllfxumCVPFjqe4AKzNROVuCot0VpgkafxXqfbv0uFsyUU0ROs0O2M3r17q604Aw==}
518 | engines: {node: '>=12.0.0'}
519 | peerDependencies:
520 | '@emotion/cache': ^11.11.0
521 | '@emotion/server': ^11.11.0
522 | '@mui/material': ^5.0.0
523 | '@types/react': ^17.0.0 || ^18.0.0
524 | next: ^13.0.0 || ^14.0.0
525 | react: ^17.0.0 || ^18.0.0
526 | peerDependenciesMeta:
527 | '@emotion/cache':
528 | optional: true
529 | '@emotion/server':
530 | optional: true
531 | '@types/react':
532 | optional: true
533 | dependencies:
534 | '@babel/runtime': 7.24.4
535 | '@emotion/cache': 11.11.0
536 | '@emotion/server': 11.11.0
537 | '@mui/material': 6.4.7_qt3atnl77o3jbq6w3aveu2kdwi
538 | '@types/react': 19.0.10
539 | next: 15.2.2_xq4e3whnojlx6hddcxrcjq4qhe
540 | react: 19.0.0
541 | dev: false
542 |
543 | /@mui/material/6.4.7_qt3atnl77o3jbq6w3aveu2kdwi:
544 | resolution: {integrity: sha512-K65StXUeGAtFJ4ikvHKtmDCO5Ab7g0FZUu2J5VpoKD+O6Y3CjLYzRi+TMlI3kaL4CL158+FccMoOd/eaddmeRQ==}
545 | engines: {node: '>=14.0.0'}
546 | peerDependencies:
547 | '@emotion/react': ^11.5.0
548 | '@emotion/styled': ^11.3.0
549 | '@mui/material-pigment-css': ^6.4.7
550 | '@types/react': ^17.0.0 || ^18.0.0 || ^19.0.0
551 | react: ^17.0.0 || ^18.0.0 || ^19.0.0
552 | react-dom: ^17.0.0 || ^18.0.0 || ^19.0.0
553 | peerDependenciesMeta:
554 | '@emotion/react':
555 | optional: true
556 | '@emotion/styled':
557 | optional: true
558 | '@mui/material-pigment-css':
559 | optional: true
560 | '@types/react':
561 | optional: true
562 | dependencies:
563 | '@babel/runtime': 7.26.10
564 | '@emotion/react': 11.14.0_cmnynwxg3ky26emhk6apxalvqe
565 | '@emotion/styled': 11.14.0_whpmy6wu3bl4ymcfc5akhmz2b4
566 | '@mui/core-downloads-tracker': 6.4.7
567 | '@mui/system': 6.4.7_ixb55s2cez3k34yy4n7inkkpli
568 | '@mui/types': 7.2.21_@types+react@19.0.10
569 | '@mui/utils': 6.4.6_cmnynwxg3ky26emhk6apxalvqe
570 | '@popperjs/core': 2.11.8
571 | '@types/react': 19.0.10
572 | '@types/react-transition-group': 4.4.12_@types+react@19.0.10
573 | clsx: 2.1.1
574 | csstype: 3.1.3
575 | prop-types: 15.8.1
576 | react: 19.0.0
577 | react-dom: 19.0.0_react@19.0.0
578 | react-is: 19.0.0
579 | react-transition-group: 4.4.5_upmzqgzhjrquwzo2dphtigtdgi
580 | dev: false
581 |
582 | /@mui/private-theming/6.4.6_cmnynwxg3ky26emhk6apxalvqe:
583 | resolution: {integrity: sha512-T5FxdPzCELuOrhpA2g4Pi6241HAxRwZudzAuL9vBvniuB5YU82HCmrARw32AuCiyTfWzbrYGGpZ4zyeqqp9RvQ==}
584 | engines: {node: '>=14.0.0'}
585 | peerDependencies:
586 | '@types/react': ^17.0.0 || ^18.0.0 || ^19.0.0
587 | react: ^17.0.0 || ^18.0.0 || ^19.0.0
588 | peerDependenciesMeta:
589 | '@types/react':
590 | optional: true
591 | dependencies:
592 | '@babel/runtime': 7.26.10
593 | '@mui/utils': 6.4.6_cmnynwxg3ky26emhk6apxalvqe
594 | '@types/react': 19.0.10
595 | prop-types: 15.8.1
596 | react: 19.0.0
597 | dev: false
598 |
599 | /@mui/styled-engine/6.4.6_dpnw2codxiouyjjemib2o7rklq:
600 | resolution: {integrity: sha512-vSWYc9ZLX46be5gP+FCzWVn5rvDr4cXC5JBZwSIkYk9xbC7GeV+0kCvB8Q6XLFQJy+a62bbqtmdwS4Ghi9NBlQ==}
601 | engines: {node: '>=14.0.0'}
602 | peerDependencies:
603 | '@emotion/react': ^11.4.1
604 | '@emotion/styled': ^11.3.0
605 | react: ^17.0.0 || ^18.0.0 || ^19.0.0
606 | peerDependenciesMeta:
607 | '@emotion/react':
608 | optional: true
609 | '@emotion/styled':
610 | optional: true
611 | dependencies:
612 | '@babel/runtime': 7.26.10
613 | '@emotion/cache': 11.14.0
614 | '@emotion/react': 11.14.0_cmnynwxg3ky26emhk6apxalvqe
615 | '@emotion/serialize': 1.3.3
616 | '@emotion/sheet': 1.4.0
617 | '@emotion/styled': 11.14.0_whpmy6wu3bl4ymcfc5akhmz2b4
618 | csstype: 3.1.3
619 | prop-types: 15.8.1
620 | react: 19.0.0
621 | dev: false
622 |
623 | /@mui/system/6.4.7_ixb55s2cez3k34yy4n7inkkpli:
624 | resolution: {integrity: sha512-7wwc4++Ak6tGIooEVA9AY7FhH2p9fvBMORT4vNLMAysH3Yus/9B9RYMbrn3ANgsOyvT3Z7nE+SP8/+3FimQmcg==}
625 | engines: {node: '>=14.0.0'}
626 | peerDependencies:
627 | '@emotion/react': ^11.5.0
628 | '@emotion/styled': ^11.3.0
629 | '@types/react': ^17.0.0 || ^18.0.0 || ^19.0.0
630 | react: ^17.0.0 || ^18.0.0 || ^19.0.0
631 | peerDependenciesMeta:
632 | '@emotion/react':
633 | optional: true
634 | '@emotion/styled':
635 | optional: true
636 | '@types/react':
637 | optional: true
638 | dependencies:
639 | '@babel/runtime': 7.26.10
640 | '@emotion/react': 11.14.0_cmnynwxg3ky26emhk6apxalvqe
641 | '@emotion/styled': 11.14.0_whpmy6wu3bl4ymcfc5akhmz2b4
642 | '@mui/private-theming': 6.4.6_cmnynwxg3ky26emhk6apxalvqe
643 | '@mui/styled-engine': 6.4.6_dpnw2codxiouyjjemib2o7rklq
644 | '@mui/types': 7.2.21_@types+react@19.0.10
645 | '@mui/utils': 6.4.6_cmnynwxg3ky26emhk6apxalvqe
646 | '@types/react': 19.0.10
647 | clsx: 2.1.1
648 | csstype: 3.1.3
649 | prop-types: 15.8.1
650 | react: 19.0.0
651 | dev: false
652 |
653 | /@mui/types/7.2.21_@types+react@19.0.10:
654 | resolution: {integrity: sha512-6HstngiUxNqLU+/DPqlUJDIPbzUBxIVHb1MmXP0eTWDIROiCR2viugXpEif0PPe2mLqqakPzzRClWAnK+8UJww==}
655 | peerDependencies:
656 | '@types/react': ^17.0.0 || ^18.0.0 || ^19.0.0
657 | peerDependenciesMeta:
658 | '@types/react':
659 | optional: true
660 | dependencies:
661 | '@types/react': 19.0.10
662 | dev: false
663 |
664 | /@mui/utils/6.4.6_cmnynwxg3ky26emhk6apxalvqe:
665 | resolution: {integrity: sha512-43nZeE1pJF2anGafNydUcYFPtHwAqiBiauRtaMvurdrZI3YrUjHkAu43RBsxef7OFtJMXGiHFvq43kb7lig0sA==}
666 | engines: {node: '>=14.0.0'}
667 | peerDependencies:
668 | '@types/react': ^17.0.0 || ^18.0.0 || ^19.0.0
669 | react: ^17.0.0 || ^18.0.0 || ^19.0.0
670 | peerDependenciesMeta:
671 | '@types/react':
672 | optional: true
673 | dependencies:
674 | '@babel/runtime': 7.26.10
675 | '@mui/types': 7.2.21_@types+react@19.0.10
676 | '@types/prop-types': 15.7.14
677 | '@types/react': 19.0.10
678 | clsx: 2.1.1
679 | prop-types: 15.8.1
680 | react: 19.0.0
681 | react-is: 19.0.0
682 | dev: false
683 |
684 | /@next/env/15.2.2:
685 | resolution: {integrity: sha512-yWgopCfA9XDR8ZH3taB5nRKtKJ1Q5fYsTOuYkzIIoS8TJ0UAUKAGF73JnGszbjk2ufAQDj6mDdgsJAFx5CLtYQ==}
686 | dev: false
687 |
688 | /@next/swc-darwin-arm64/15.2.2:
689 | resolution: {integrity: sha512-HNBRnz+bkZ+KfyOExpUxTMR0Ow8nkkcE6IlsdEa9W/rI7gefud19+Sn1xYKwB9pdCdxIP1lPru/ZfjfA+iT8pw==}
690 | engines: {node: '>= 10'}
691 | cpu: [arm64]
692 | os: [darwin]
693 | requiresBuild: true
694 | dev: false
695 | optional: true
696 |
697 | /@next/swc-darwin-x64/15.2.2:
698 | resolution: {integrity: sha512-mJOUwp7al63tDpLpEFpKwwg5jwvtL1lhRW2fI1Aog0nYCPAhxbJsaZKdoVyPZCy8MYf/iQVNDuk/+i29iLCzIA==}
699 | engines: {node: '>= 10'}
700 | cpu: [x64]
701 | os: [darwin]
702 | requiresBuild: true
703 | dev: false
704 | optional: true
705 |
706 | /@next/swc-linux-arm64-gnu/15.2.2:
707 | resolution: {integrity: sha512-5ZZ0Zwy3SgMr7MfWtRE7cQWVssfOvxYfD9O7XHM7KM4nrf5EOeqwq67ZXDgo86LVmffgsu5tPO57EeFKRnrfSQ==}
708 | engines: {node: '>= 10'}
709 | cpu: [arm64]
710 | os: [linux]
711 | libc: [glibc]
712 | requiresBuild: true
713 | dev: false
714 | optional: true
715 |
716 | /@next/swc-linux-arm64-musl/15.2.2:
717 | resolution: {integrity: sha512-cgKWBuFMLlJ4TWcFHl1KOaVVUAF8vy4qEvX5KsNd0Yj5mhu989QFCq1WjuaEbv/tO1ZpsQI6h/0YR8bLwEi+nA==}
718 | engines: {node: '>= 10'}
719 | cpu: [arm64]
720 | os: [linux]
721 | libc: [musl]
722 | requiresBuild: true
723 | dev: false
724 | optional: true
725 |
726 | /@next/swc-linux-x64-gnu/15.2.2:
727 | resolution: {integrity: sha512-c3kWSOSsVL8rcNBBfOq1+/j2PKs2nsMwJUV4icUxRgGBwUOfppeh7YhN5s79enBQFU+8xRgVatFkhHU1QW7yUA==}
728 | engines: {node: '>= 10'}
729 | cpu: [x64]
730 | os: [linux]
731 | libc: [glibc]
732 | requiresBuild: true
733 | dev: false
734 | optional: true
735 |
736 | /@next/swc-linux-x64-musl/15.2.2:
737 | resolution: {integrity: sha512-PXTW9PLTxdNlVYgPJ0equojcq1kNu5NtwcNjRjHAB+/sdoKZ+X8FBu70fdJFadkxFIGekQTyRvPMFF+SOJaQjw==}
738 | engines: {node: '>= 10'}
739 | cpu: [x64]
740 | os: [linux]
741 | libc: [musl]
742 | requiresBuild: true
743 | dev: false
744 | optional: true
745 |
746 | /@next/swc-win32-arm64-msvc/15.2.2:
747 | resolution: {integrity: sha512-nG644Es5llSGEcTaXhnGWR/aThM/hIaz0jx4MDg4gWC8GfTCp8eDBWZ77CVuv2ha/uL9Ce+nPTfYkSLG67/sHg==}
748 | engines: {node: '>= 10'}
749 | cpu: [arm64]
750 | os: [win32]
751 | requiresBuild: true
752 | dev: false
753 | optional: true
754 |
755 | /@next/swc-win32-x64-msvc/15.2.2:
756 | resolution: {integrity: sha512-52nWy65S/R6/kejz3jpvHAjZDPKIbEQu4x9jDBzmB9jJfuOy5rspjKu4u77+fI4M/WzLXrrQd57hlFGzz1ubcQ==}
757 | engines: {node: '>= 10'}
758 | cpu: [x64]
759 | os: [win32]
760 | requiresBuild: true
761 | dev: false
762 | optional: true
763 |
764 | /@next/third-parties/14.2.3_next@15.2.2+react@19.0.0:
765 | resolution: {integrity: sha512-j4E2xBSsEZq4VX2pVm3LpGltSwCxETic6glJWfHyYQvpoMdplCAYrQKpF+E9Gg3jfsrfmRAIdTE11m+biBCx1Q==}
766 | peerDependencies:
767 | next: ^13.0.0 || ^14.0.0
768 | react: ^18.2.0
769 | dependencies:
770 | next: 15.2.2_xq4e3whnojlx6hddcxrcjq4qhe
771 | react: 19.0.0
772 | third-party-capital: 1.0.20
773 | dev: false
774 |
775 | /@parcel/watcher-android-arm64/2.5.1:
776 | resolution: {integrity: sha512-KF8+j9nNbUN8vzOFDpRMsaKBHZ/mcjEjMToVMJOhTozkDonQFFrRcfdLWn6yWKCmJKmdVxSgHiYvTCef4/qcBA==}
777 | engines: {node: '>= 10.0.0'}
778 | cpu: [arm64]
779 | os: [android]
780 | requiresBuild: true
781 | optional: true
782 |
783 | /@parcel/watcher-darwin-arm64/2.5.1:
784 | resolution: {integrity: sha512-eAzPv5osDmZyBhou8PoF4i6RQXAfeKL9tjb3QzYuccXFMQU0ruIc/POh30ePnaOyD1UXdlKguHBmsTs53tVoPw==}
785 | engines: {node: '>= 10.0.0'}
786 | cpu: [arm64]
787 | os: [darwin]
788 | requiresBuild: true
789 | optional: true
790 |
791 | /@parcel/watcher-darwin-x64/2.5.1:
792 | resolution: {integrity: sha512-1ZXDthrnNmwv10A0/3AJNZ9JGlzrF82i3gNQcWOzd7nJ8aj+ILyW1MTxVk35Db0u91oD5Nlk9MBiujMlwmeXZg==}
793 | engines: {node: '>= 10.0.0'}
794 | cpu: [x64]
795 | os: [darwin]
796 | requiresBuild: true
797 | optional: true
798 |
799 | /@parcel/watcher-freebsd-x64/2.5.1:
800 | resolution: {integrity: sha512-SI4eljM7Flp9yPuKi8W0ird8TI/JK6CSxju3NojVI6BjHsTyK7zxA9urjVjEKJ5MBYC+bLmMcbAWlZ+rFkLpJQ==}
801 | engines: {node: '>= 10.0.0'}
802 | cpu: [x64]
803 | os: [freebsd]
804 | requiresBuild: true
805 | optional: true
806 |
807 | /@parcel/watcher-linux-arm-glibc/2.5.1:
808 | resolution: {integrity: sha512-RCdZlEyTs8geyBkkcnPWvtXLY44BCeZKmGYRtSgtwwnHR4dxfHRG3gR99XdMEdQ7KeiDdasJwwvNSF5jKtDwdA==}
809 | engines: {node: '>= 10.0.0'}
810 | cpu: [arm]
811 | os: [linux]
812 | libc: [glibc]
813 | requiresBuild: true
814 | optional: true
815 |
816 | /@parcel/watcher-linux-arm-musl/2.5.1:
817 | resolution: {integrity: sha512-6E+m/Mm1t1yhB8X412stiKFG3XykmgdIOqhjWj+VL8oHkKABfu/gjFj8DvLrYVHSBNC+/u5PeNrujiSQ1zwd1Q==}
818 | engines: {node: '>= 10.0.0'}
819 | cpu: [arm]
820 | os: [linux]
821 | libc: [musl]
822 | requiresBuild: true
823 | optional: true
824 |
825 | /@parcel/watcher-linux-arm64-glibc/2.5.1:
826 | resolution: {integrity: sha512-LrGp+f02yU3BN9A+DGuY3v3bmnFUggAITBGriZHUREfNEzZh/GO06FF5u2kx8x+GBEUYfyTGamol4j3m9ANe8w==}
827 | engines: {node: '>= 10.0.0'}
828 | cpu: [arm64]
829 | os: [linux]
830 | libc: [glibc]
831 | requiresBuild: true
832 | optional: true
833 |
834 | /@parcel/watcher-linux-arm64-musl/2.5.1:
835 | resolution: {integrity: sha512-cFOjABi92pMYRXS7AcQv9/M1YuKRw8SZniCDw0ssQb/noPkRzA+HBDkwmyOJYp5wXcsTrhxO0zq1U11cK9jsFg==}
836 | engines: {node: '>= 10.0.0'}
837 | cpu: [arm64]
838 | os: [linux]
839 | libc: [musl]
840 | requiresBuild: true
841 | optional: true
842 |
843 | /@parcel/watcher-linux-x64-glibc/2.5.1:
844 | resolution: {integrity: sha512-GcESn8NZySmfwlTsIur+49yDqSny2IhPeZfXunQi48DMugKeZ7uy1FX83pO0X22sHntJ4Ub+9k34XQCX+oHt2A==}
845 | engines: {node: '>= 10.0.0'}
846 | cpu: [x64]
847 | os: [linux]
848 | libc: [glibc]
849 | requiresBuild: true
850 | optional: true
851 |
852 | /@parcel/watcher-linux-x64-musl/2.5.1:
853 | resolution: {integrity: sha512-n0E2EQbatQ3bXhcH2D1XIAANAcTZkQICBPVaxMeaCVBtOpBZpWJuf7LwyWPSBDITb7In8mqQgJ7gH8CILCURXg==}
854 | engines: {node: '>= 10.0.0'}
855 | cpu: [x64]
856 | os: [linux]
857 | libc: [musl]
858 | requiresBuild: true
859 | optional: true
860 |
861 | /@parcel/watcher-win32-arm64/2.5.1:
862 | resolution: {integrity: sha512-RFzklRvmc3PkjKjry3hLF9wD7ppR4AKcWNzH7kXR7GUe0Igb3Nz8fyPwtZCSquGrhU5HhUNDr/mKBqj7tqA2Vw==}
863 | engines: {node: '>= 10.0.0'}
864 | cpu: [arm64]
865 | os: [win32]
866 | requiresBuild: true
867 | optional: true
868 |
869 | /@parcel/watcher-win32-ia32/2.5.1:
870 | resolution: {integrity: sha512-c2KkcVN+NJmuA7CGlaGD1qJh1cLfDnQsHjE89E60vUEMlqduHGCdCLJCID5geFVM0dOtA3ZiIO8BoEQmzQVfpQ==}
871 | engines: {node: '>= 10.0.0'}
872 | cpu: [ia32]
873 | os: [win32]
874 | requiresBuild: true
875 | optional: true
876 |
877 | /@parcel/watcher-win32-x64/2.5.1:
878 | resolution: {integrity: sha512-9lHBdJITeNR++EvSQVUcaZoWupyHfXe1jZvGZ06O/5MflPcuPLtEphScIBL+AiCWBO46tDSHzWyD0uDmmZqsgA==}
879 | engines: {node: '>= 10.0.0'}
880 | cpu: [x64]
881 | os: [win32]
882 | requiresBuild: true
883 | optional: true
884 |
885 | /@parcel/watcher/2.5.1:
886 | resolution: {integrity: sha512-dfUnCxiN9H4ap84DvD2ubjw+3vUNpstxa0TneY/Paat8a3R4uQZDLSvWjmznAY/DoahqTHl9V46HF/Zs3F29pg==}
887 | engines: {node: '>= 10.0.0'}
888 | requiresBuild: true
889 | dependencies:
890 | detect-libc: 1.0.3
891 | is-glob: 4.0.3
892 | micromatch: 4.0.8
893 | node-addon-api: 7.1.1
894 | optionalDependencies:
895 | '@parcel/watcher-android-arm64': 2.5.1
896 | '@parcel/watcher-darwin-arm64': 2.5.1
897 | '@parcel/watcher-darwin-x64': 2.5.1
898 | '@parcel/watcher-freebsd-x64': 2.5.1
899 | '@parcel/watcher-linux-arm-glibc': 2.5.1
900 | '@parcel/watcher-linux-arm-musl': 2.5.1
901 | '@parcel/watcher-linux-arm64-glibc': 2.5.1
902 | '@parcel/watcher-linux-arm64-musl': 2.5.1
903 | '@parcel/watcher-linux-x64-glibc': 2.5.1
904 | '@parcel/watcher-linux-x64-musl': 2.5.1
905 | '@parcel/watcher-win32-arm64': 2.5.1
906 | '@parcel/watcher-win32-ia32': 2.5.1
907 | '@parcel/watcher-win32-x64': 2.5.1
908 | optional: true
909 |
910 | /@pkgjs/parseargs/0.11.0:
911 | resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==}
912 | engines: {node: '>=14'}
913 | requiresBuild: true
914 | dev: false
915 | optional: true
916 |
917 | /@popperjs/core/2.11.8:
918 | resolution: {integrity: sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==}
919 | dev: false
920 |
921 | /@rollup/rollup-android-arm-eabi/4.14.3:
922 | resolution: {integrity: sha512-X9alQ3XM6I9IlSlmC8ddAvMSyG1WuHk5oUnXGw+yUBs3BFoTizmG1La/Gr8fVJvDWAq+zlYTZ9DBgrlKRVY06g==}
923 | cpu: [arm]
924 | os: [android]
925 | requiresBuild: true
926 | dev: false
927 | optional: true
928 |
929 | /@rollup/rollup-android-arm64/4.14.3:
930 | resolution: {integrity: sha512-eQK5JIi+POhFpzk+LnjKIy4Ks+pwJ+NXmPxOCSvOKSNRPONzKuUvWE+P9JxGZVxrtzm6BAYMaL50FFuPe0oWMQ==}
931 | cpu: [arm64]
932 | os: [android]
933 | requiresBuild: true
934 | dev: false
935 | optional: true
936 |
937 | /@rollup/rollup-darwin-arm64/4.14.3:
938 | resolution: {integrity: sha512-Od4vE6f6CTT53yM1jgcLqNfItTsLt5zE46fdPaEmeFHvPs5SjZYlLpHrSiHEKR1+HdRfxuzXHjDOIxQyC3ptBA==}
939 | cpu: [arm64]
940 | os: [darwin]
941 | requiresBuild: true
942 | dev: false
943 | optional: true
944 |
945 | /@rollup/rollup-darwin-x64/4.14.3:
946 | resolution: {integrity: sha512-0IMAO21axJeNIrvS9lSe/PGthc8ZUS+zC53O0VhF5gMxfmcKAP4ESkKOCwEi6u2asUrt4mQv2rjY8QseIEb1aw==}
947 | cpu: [x64]
948 | os: [darwin]
949 | requiresBuild: true
950 | dev: false
951 | optional: true
952 |
953 | /@rollup/rollup-linux-arm-gnueabihf/4.14.3:
954 | resolution: {integrity: sha512-ge2DC7tHRHa3caVEoSbPRJpq7azhG+xYsd6u2MEnJ6XzPSzQsTKyXvh6iWjXRf7Rt9ykIUWHtl0Uz3T6yXPpKw==}
955 | cpu: [arm]
956 | os: [linux]
957 | requiresBuild: true
958 | dev: false
959 | optional: true
960 |
961 | /@rollup/rollup-linux-arm-musleabihf/4.14.3:
962 | resolution: {integrity: sha512-ljcuiDI4V3ySuc7eSk4lQ9wU8J8r8KrOUvB2U+TtK0TiW6OFDmJ+DdIjjwZHIw9CNxzbmXY39wwpzYuFDwNXuw==}
963 | cpu: [arm]
964 | os: [linux]
965 | requiresBuild: true
966 | dev: false
967 | optional: true
968 |
969 | /@rollup/rollup-linux-arm64-gnu/4.14.3:
970 | resolution: {integrity: sha512-Eci2us9VTHm1eSyn5/eEpaC7eP/mp5n46gTRB3Aar3BgSvDQGJZuicyq6TsH4HngNBgVqC5sDYxOzTExSU+NjA==}
971 | cpu: [arm64]
972 | os: [linux]
973 | libc: [glibc]
974 | requiresBuild: true
975 | dev: false
976 | optional: true
977 |
978 | /@rollup/rollup-linux-arm64-musl/4.14.3:
979 | resolution: {integrity: sha512-UrBoMLCq4E92/LCqlh+blpqMz5h1tJttPIniwUgOFJyjWI1qrtrDhhpHPuFxULlUmjFHfloWdixtDhSxJt5iKw==}
980 | cpu: [arm64]
981 | os: [linux]
982 | libc: [musl]
983 | requiresBuild: true
984 | dev: false
985 | optional: true
986 |
987 | /@rollup/rollup-linux-powerpc64le-gnu/4.14.3:
988 | resolution: {integrity: sha512-5aRjvsS8q1nWN8AoRfrq5+9IflC3P1leMoy4r2WjXyFqf3qcqsxRCfxtZIV58tCxd+Yv7WELPcO9mY9aeQyAmw==}
989 | cpu: [ppc64]
990 | os: [linux]
991 | libc: [glibc]
992 | requiresBuild: true
993 | dev: false
994 | optional: true
995 |
996 | /@rollup/rollup-linux-riscv64-gnu/4.14.3:
997 | resolution: {integrity: sha512-sk/Qh1j2/RJSX7FhEpJn8n0ndxy/uf0kI/9Zc4b1ELhqULVdTfN6HL31CDaTChiBAOgLcsJ1sgVZjWv8XNEsAQ==}
998 | cpu: [riscv64]
999 | os: [linux]
1000 | libc: [glibc]
1001 | requiresBuild: true
1002 | dev: false
1003 | optional: true
1004 |
1005 | /@rollup/rollup-linux-s390x-gnu/4.14.3:
1006 | resolution: {integrity: sha512-jOO/PEaDitOmY9TgkxF/TQIjXySQe5KVYB57H/8LRP/ux0ZoO8cSHCX17asMSv3ruwslXW/TLBcxyaUzGRHcqg==}
1007 | cpu: [s390x]
1008 | os: [linux]
1009 | libc: [glibc]
1010 | requiresBuild: true
1011 | dev: false
1012 | optional: true
1013 |
1014 | /@rollup/rollup-linux-x64-gnu/4.14.3:
1015 | resolution: {integrity: sha512-8ybV4Xjy59xLMyWo3GCfEGqtKV5M5gCSrZlxkPGvEPCGDLNla7v48S662HSGwRd6/2cSneMQWiv+QzcttLrrOA==}
1016 | cpu: [x64]
1017 | os: [linux]
1018 | libc: [glibc]
1019 | requiresBuild: true
1020 | dev: false
1021 | optional: true
1022 |
1023 | /@rollup/rollup-linux-x64-musl/4.14.3:
1024 | resolution: {integrity: sha512-s+xf1I46trOY10OqAtZ5Rm6lzHre/UiLA1J2uOhCFXWkbZrJRkYBPO6FhvGfHmdtQ3Bx793MNa7LvoWFAm93bg==}
1025 | cpu: [x64]
1026 | os: [linux]
1027 | libc: [musl]
1028 | requiresBuild: true
1029 | dev: false
1030 | optional: true
1031 |
1032 | /@rollup/rollup-win32-arm64-msvc/4.14.3:
1033 | resolution: {integrity: sha512-+4h2WrGOYsOumDQ5S2sYNyhVfrue+9tc9XcLWLh+Kw3UOxAvrfOrSMFon60KspcDdytkNDh7K2Vs6eMaYImAZg==}
1034 | cpu: [arm64]
1035 | os: [win32]
1036 | requiresBuild: true
1037 | dev: false
1038 | optional: true
1039 |
1040 | /@rollup/rollup-win32-ia32-msvc/4.14.3:
1041 | resolution: {integrity: sha512-T1l7y/bCeL/kUwh9OD4PQT4aM7Bq43vX05htPJJ46RTI4r5KNt6qJRzAfNfM+OYMNEVBWQzR2Gyk+FXLZfogGw==}
1042 | cpu: [ia32]
1043 | os: [win32]
1044 | requiresBuild: true
1045 | dev: false
1046 | optional: true
1047 |
1048 | /@rollup/rollup-win32-x64-msvc/4.14.3:
1049 | resolution: {integrity: sha512-/BypzV0H1y1HzgYpxqRaXGBRqfodgoBBCcsrujT6QRcakDQdfU+Lq9PENPh5jB4I44YWq+0C2eHsHya+nZY1sA==}
1050 | cpu: [x64]
1051 | os: [win32]
1052 | requiresBuild: true
1053 | dev: false
1054 | optional: true
1055 |
1056 | /@serwist/build/9.0.2_typescript@5.8.2:
1057 | resolution: {integrity: sha512-ONKBAXMLjohjWNjhG+bc+sIiKcqSfZ0ApT2M0s6l9mbCrGE8KR/p4lD32ienYbP4whvHE4ro/RQABXIUoqtZmg==}
1058 | engines: {node: '>=18.0.0'}
1059 | peerDependencies:
1060 | typescript: '>=5.0.0'
1061 | peerDependenciesMeta:
1062 | typescript:
1063 | optional: true
1064 | dependencies:
1065 | common-tags: 1.8.2
1066 | fast-json-stable-stringify: 2.1.0
1067 | fs-extra: 11.2.0
1068 | glob: 10.3.12
1069 | pretty-bytes: 6.1.1
1070 | rollup: 4.14.3
1071 | source-map: 0.8.0-beta.0
1072 | typescript: 5.8.2
1073 | upath: 2.0.1
1074 | zod: 3.22.4
1075 | dev: false
1076 |
1077 | /@serwist/next/9.0.2_f3uhdn62bw7fis42gkmezxqzuy:
1078 | resolution: {integrity: sha512-VpdTxjzyDiKpBpwWKeCVItnqwXaJMw8CsMPlkZwKwX5X9uaIYrA1/tH7WRJ8x/IZVtdYz+QlCd64vObhjOkqxQ==}
1079 | engines: {node: '>=18.0.0'}
1080 | peerDependencies:
1081 | next: '>=14.0.0'
1082 | typescript: '>=5.0.0'
1083 | peerDependenciesMeta:
1084 | typescript:
1085 | optional: true
1086 | dependencies:
1087 | '@serwist/build': 9.0.2_typescript@5.8.2
1088 | '@serwist/webpack-plugin': 9.0.2_typescript@5.8.2
1089 | '@serwist/window': 9.0.2_typescript@5.8.2
1090 | chalk: 5.3.0
1091 | glob: 10.3.12
1092 | next: 15.2.2_xq4e3whnojlx6hddcxrcjq4qhe
1093 | serwist: 9.0.2_typescript@5.8.2
1094 | typescript: 5.8.2
1095 | zod: 3.22.4
1096 | transitivePeerDependencies:
1097 | - webpack
1098 | dev: false
1099 |
1100 | /@serwist/webpack-plugin/9.0.2_typescript@5.8.2:
1101 | resolution: {integrity: sha512-gNvr+uQBkg8uWY8d3m14X3P05o1kfMFgQPmoMZblXybKDQFNnw1ug4uU+LahXMYH1BGMYJ8cFZXKZPMVJm/8Sg==}
1102 | engines: {node: '>=18.0.0'}
1103 | peerDependencies:
1104 | typescript: '>=5.0.0'
1105 | webpack: 4.4.0 || ^5.9.0
1106 | peerDependenciesMeta:
1107 | typescript:
1108 | optional: true
1109 | webpack:
1110 | optional: true
1111 | dependencies:
1112 | '@serwist/build': 9.0.2_typescript@5.8.2
1113 | pretty-bytes: 6.1.1
1114 | typescript: 5.8.2
1115 | upath: 2.0.1
1116 | zod: 3.22.4
1117 | dev: false
1118 |
1119 | /@serwist/window/9.0.2_typescript@5.8.2:
1120 | resolution: {integrity: sha512-+tQCcIdGz+3j0/PRnOAuiqoMM64EksHhPnyEb2UnODC7bTBvwGVP/iGmtTGCHClSYdVZI0w09pyGmFLlvBav7g==}
1121 | peerDependencies:
1122 | typescript: '>=5.0.0'
1123 | peerDependenciesMeta:
1124 | typescript:
1125 | optional: true
1126 | dependencies:
1127 | '@types/trusted-types': 2.0.7
1128 | serwist: 9.0.2_typescript@5.8.2
1129 | typescript: 5.8.2
1130 | dev: false
1131 |
1132 | /@swc/counter/0.1.3:
1133 | resolution: {integrity: sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==}
1134 | dev: false
1135 |
1136 | /@swc/helpers/0.5.15:
1137 | resolution: {integrity: sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g==}
1138 | dependencies:
1139 | tslib: 2.8.1
1140 | dev: false
1141 |
1142 | /@types/estree/1.0.5:
1143 | resolution: {integrity: sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==}
1144 | dev: false
1145 |
1146 | /@types/node/20.12.13:
1147 | resolution: {integrity: sha512-gBGeanV41c1L171rR7wjbMiEpEI/l5XFQdLLfhr/REwpgDy/4U8y89+i8kRiLzDyZdOkXh+cRaTetUnCYutoXA==}
1148 | dependencies:
1149 | undici-types: 5.26.5
1150 | dev: true
1151 |
1152 | /@types/parse-json/4.0.2:
1153 | resolution: {integrity: sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==}
1154 | dev: false
1155 |
1156 | /@types/prop-types/15.7.14:
1157 | resolution: {integrity: sha512-gNMvNH49DJ7OJYv+KAKn0Xp45p8PLl6zo2YnvDIbTd4J6MER2BmWN49TG7n9LvkyihINxeKW8+3bfS2yDC9dzQ==}
1158 | dev: false
1159 |
1160 | /@types/react-dom/19.0.4_@types+react@19.0.10:
1161 | resolution: {integrity: sha512-4fSQ8vWFkg+TGhePfUzVmat3eC14TXYSsiiDSLI0dVLsrm9gZFABjPy/Qu6TKgl1tq1Bu1yDsuQgY3A3DOjCcg==}
1162 | peerDependencies:
1163 | '@types/react': ^19.0.0
1164 | dependencies:
1165 | '@types/react': 19.0.10
1166 | dev: true
1167 |
1168 | /@types/react-transition-group/4.4.12_@types+react@19.0.10:
1169 | resolution: {integrity: sha512-8TV6R3h2j7a91c+1DXdJi3Syo69zzIZbz7Lg5tORM5LEJG7X/E6a1V3drRyBRZq7/utz7A+c4OgYLiLcYGHG6w==}
1170 | peerDependencies:
1171 | '@types/react': '*'
1172 | dependencies:
1173 | '@types/react': 19.0.10
1174 | dev: false
1175 |
1176 | /@types/react/19.0.10:
1177 | resolution: {integrity: sha512-JuRQ9KXLEjaUNjTWpzuR231Z2WpIwczOkBEIvbHNCzQefFIT0L8IqE6NV6ULLyC1SI/i234JnDoMkfg+RjQj2g==}
1178 | dependencies:
1179 | csstype: 3.1.3
1180 |
1181 | /@types/trusted-types/2.0.7:
1182 | resolution: {integrity: sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==}
1183 | dev: false
1184 |
1185 | /@vercel/analytics/1.5.0_next@15.2.2+react@19.0.0:
1186 | resolution: {integrity: sha512-MYsBzfPki4gthY5HnYN7jgInhAZ7Ac1cYDoRWFomwGHWEX7odTEzbtg9kf/QSo7XEsEAqlQugA6gJ2WS2DEa3g==}
1187 | peerDependencies:
1188 | '@remix-run/react': ^2
1189 | '@sveltejs/kit': ^1 || ^2
1190 | next: '>= 13'
1191 | react: ^18 || ^19 || ^19.0.0-rc
1192 | svelte: '>= 4'
1193 | vue: ^3
1194 | vue-router: ^4
1195 | peerDependenciesMeta:
1196 | '@remix-run/react':
1197 | optional: true
1198 | '@sveltejs/kit':
1199 | optional: true
1200 | next:
1201 | optional: true
1202 | react:
1203 | optional: true
1204 | svelte:
1205 | optional: true
1206 | vue:
1207 | optional: true
1208 | vue-router:
1209 | optional: true
1210 | dependencies:
1211 | next: 15.2.2_xq4e3whnojlx6hddcxrcjq4qhe
1212 | react: 19.0.0
1213 | dev: false
1214 |
1215 | /@vercel/speed-insights/1.2.0_next@15.2.2+react@19.0.0:
1216 | resolution: {integrity: sha512-y9GVzrUJ2xmgtQlzFP2KhVRoCglwfRQgjyfY607aU0hh0Un6d0OUyrJkjuAlsV18qR4zfoFPs/BiIj9YDS6Wzw==}
1217 | requiresBuild: true
1218 | peerDependencies:
1219 | '@sveltejs/kit': ^1 || ^2
1220 | next: '>= 13'
1221 | react: ^18 || ^19 || ^19.0.0-rc
1222 | svelte: '>= 4'
1223 | vue: ^3
1224 | vue-router: ^4
1225 | peerDependenciesMeta:
1226 | '@sveltejs/kit':
1227 | optional: true
1228 | next:
1229 | optional: true
1230 | react:
1231 | optional: true
1232 | svelte:
1233 | optional: true
1234 | vue:
1235 | optional: true
1236 | vue-router:
1237 | optional: true
1238 | dependencies:
1239 | next: 15.2.2_xq4e3whnojlx6hddcxrcjq4qhe
1240 | react: 19.0.0
1241 | dev: false
1242 |
1243 | /ansi-regex/5.0.1:
1244 | resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==}
1245 | engines: {node: '>=8'}
1246 | dev: false
1247 |
1248 | /ansi-regex/6.0.1:
1249 | resolution: {integrity: sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==}
1250 | engines: {node: '>=12'}
1251 | dev: false
1252 |
1253 | /ansi-styles/3.2.1:
1254 | resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==}
1255 | engines: {node: '>=4'}
1256 | dependencies:
1257 | color-convert: 1.9.3
1258 | dev: false
1259 |
1260 | /ansi-styles/4.3.0:
1261 | resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==}
1262 | engines: {node: '>=8'}
1263 | dependencies:
1264 | color-convert: 2.0.1
1265 | dev: false
1266 |
1267 | /ansi-styles/6.2.1:
1268 | resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==}
1269 | engines: {node: '>=12'}
1270 | dev: false
1271 |
1272 | /babel-plugin-macros/3.1.0:
1273 | resolution: {integrity: sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==}
1274 | engines: {node: '>=10', npm: '>=6'}
1275 | dependencies:
1276 | '@babel/runtime': 7.26.10
1277 | cosmiconfig: 7.1.0
1278 | resolve: 1.22.8
1279 | dev: false
1280 |
1281 | /balanced-match/1.0.2:
1282 | resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
1283 | dev: false
1284 |
1285 | /brace-expansion/2.0.1:
1286 | resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==}
1287 | dependencies:
1288 | balanced-match: 1.0.2
1289 | dev: false
1290 |
1291 | /braces/3.0.3:
1292 | resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==}
1293 | engines: {node: '>=8'}
1294 | dependencies:
1295 | fill-range: 7.1.1
1296 | optional: true
1297 |
1298 | /buffer-from/0.1.2:
1299 | resolution: {integrity: sha512-RiWIenusJsmI2KcvqQABB83tLxCByE3upSP8QU3rJDMVFGPWLvPQJt/O1Su9moRWeH7d+Q2HYb68f6+v+tw2vg==}
1300 | dev: false
1301 |
1302 | /busboy/1.6.0:
1303 | resolution: {integrity: sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==}
1304 | engines: {node: '>=10.16.0'}
1305 | dependencies:
1306 | streamsearch: 1.1.0
1307 | dev: false
1308 |
1309 | /callsites/3.1.0:
1310 | resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==}
1311 | engines: {node: '>=6'}
1312 | dev: false
1313 |
1314 | /caniuse-lite/1.0.30001610:
1315 | resolution: {integrity: sha512-QFutAY4NgaelojVMjY63o6XlZyORPaLfyMnsl3HgnWdJUcX6K0oaJymHjH8PT5Gk7sTm8rvC/c5COUQKXqmOMA==}
1316 | dev: false
1317 |
1318 | /chalk/2.4.2:
1319 | resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==}
1320 | engines: {node: '>=4'}
1321 | dependencies:
1322 | ansi-styles: 3.2.1
1323 | escape-string-regexp: 1.0.5
1324 | supports-color: 5.5.0
1325 | dev: false
1326 |
1327 | /chalk/5.3.0:
1328 | resolution: {integrity: sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==}
1329 | engines: {node: ^12.17.0 || ^14.13 || >=16.0.0}
1330 | dev: false
1331 |
1332 | /chokidar/4.0.3:
1333 | resolution: {integrity: sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==}
1334 | engines: {node: '>= 14.16.0'}
1335 | dependencies:
1336 | readdirp: 4.1.2
1337 |
1338 | /client-only/0.0.1:
1339 | resolution: {integrity: sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==}
1340 | dev: false
1341 |
1342 | /clsx/2.1.1:
1343 | resolution: {integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==}
1344 | engines: {node: '>=6'}
1345 | dev: false
1346 |
1347 | /color-convert/1.9.3:
1348 | resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==}
1349 | dependencies:
1350 | color-name: 1.1.3
1351 | dev: false
1352 |
1353 | /color-convert/2.0.1:
1354 | resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==}
1355 | engines: {node: '>=7.0.0'}
1356 | dependencies:
1357 | color-name: 1.1.4
1358 | dev: false
1359 |
1360 | /color-name/1.1.3:
1361 | resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==}
1362 | dev: false
1363 |
1364 | /color-name/1.1.4:
1365 | resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==}
1366 | dev: false
1367 |
1368 | /color-string/1.9.1:
1369 | resolution: {integrity: sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==}
1370 | requiresBuild: true
1371 | dependencies:
1372 | color-name: 1.1.4
1373 | simple-swizzle: 0.2.2
1374 | dev: false
1375 | optional: true
1376 |
1377 | /color/4.2.3:
1378 | resolution: {integrity: sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==}
1379 | engines: {node: '>=12.5.0'}
1380 | requiresBuild: true
1381 | dependencies:
1382 | color-convert: 2.0.1
1383 | color-string: 1.9.1
1384 | dev: false
1385 | optional: true
1386 |
1387 | /common-tags/1.8.2:
1388 | resolution: {integrity: sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA==}
1389 | engines: {node: '>=4.0.0'}
1390 | dev: false
1391 |
1392 | /convert-source-map/1.9.0:
1393 | resolution: {integrity: sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==}
1394 | dev: false
1395 |
1396 | /core-util-is/1.0.3:
1397 | resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==}
1398 | dev: false
1399 |
1400 | /cosmiconfig/7.1.0:
1401 | resolution: {integrity: sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==}
1402 | engines: {node: '>=10'}
1403 | dependencies:
1404 | '@types/parse-json': 4.0.2
1405 | import-fresh: 3.3.0
1406 | parse-json: 5.2.0
1407 | path-type: 4.0.0
1408 | yaml: 1.10.2
1409 | dev: false
1410 |
1411 | /cross-spawn/7.0.3:
1412 | resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==}
1413 | engines: {node: '>= 8'}
1414 | dependencies:
1415 | path-key: 3.1.1
1416 | shebang-command: 2.0.0
1417 | which: 2.0.2
1418 | dev: false
1419 |
1420 | /csstype/3.1.3:
1421 | resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==}
1422 |
1423 | /dayjs/1.11.13:
1424 | resolution: {integrity: sha512-oaMBel6gjolK862uaPQOVTA7q3TZhuSvuMQAAglQDOWYO9A91IrAOUJEyKVlqJlHE0vq5p5UXxzdPfMH/x6xNg==}
1425 | dev: false
1426 |
1427 | /detect-libc/1.0.3:
1428 | resolution: {integrity: sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==}
1429 | engines: {node: '>=0.10'}
1430 | hasBin: true
1431 | optional: true
1432 |
1433 | /detect-libc/2.0.3:
1434 | resolution: {integrity: sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==}
1435 | engines: {node: '>=8'}
1436 | requiresBuild: true
1437 | dev: false
1438 | optional: true
1439 |
1440 | /dom-helpers/5.2.1:
1441 | resolution: {integrity: sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==}
1442 | dependencies:
1443 | '@babel/runtime': 7.26.10
1444 | csstype: 3.1.3
1445 | dev: false
1446 |
1447 | /duplexer2/0.1.4:
1448 | resolution: {integrity: sha512-asLFVfWWtJ90ZyOUHMqk7/S2w2guQKxUI2itj3d92ADHhxUSbCMGi1f1cBcJ7xM1To+pE/Khbwo1yuNbMEPKeA==}
1449 | dependencies:
1450 | readable-stream: 2.3.8
1451 | dev: false
1452 |
1453 | /eastasianwidth/0.2.0:
1454 | resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==}
1455 | dev: false
1456 |
1457 | /emoji-regex/8.0.0:
1458 | resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==}
1459 | dev: false
1460 |
1461 | /emoji-regex/9.2.2:
1462 | resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==}
1463 | dev: false
1464 |
1465 | /error-ex/1.3.2:
1466 | resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==}
1467 | dependencies:
1468 | is-arrayish: 0.2.1
1469 | dev: false
1470 |
1471 | /escape-string-regexp/1.0.5:
1472 | resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==}
1473 | engines: {node: '>=0.8.0'}
1474 | dev: false
1475 |
1476 | /escape-string-regexp/4.0.0:
1477 | resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==}
1478 | engines: {node: '>=10'}
1479 | dev: false
1480 |
1481 | /fast-json-stable-stringify/2.1.0:
1482 | resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==}
1483 | dev: false
1484 |
1485 | /fill-range/7.1.1:
1486 | resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==}
1487 | engines: {node: '>=8'}
1488 | dependencies:
1489 | to-regex-range: 5.0.1
1490 | optional: true
1491 |
1492 | /find-root/1.1.0:
1493 | resolution: {integrity: sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==}
1494 | dev: false
1495 |
1496 | /foreground-child/3.1.1:
1497 | resolution: {integrity: sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==}
1498 | engines: {node: '>=14'}
1499 | dependencies:
1500 | cross-spawn: 7.0.3
1501 | signal-exit: 4.1.0
1502 | dev: false
1503 |
1504 | /fs-extra/11.2.0:
1505 | resolution: {integrity: sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==}
1506 | engines: {node: '>=14.14'}
1507 | dependencies:
1508 | graceful-fs: 4.2.11
1509 | jsonfile: 6.1.0
1510 | universalify: 2.0.1
1511 | dev: false
1512 |
1513 | /fsevents/2.3.3:
1514 | resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==}
1515 | engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
1516 | os: [darwin]
1517 | requiresBuild: true
1518 | dev: false
1519 | optional: true
1520 |
1521 | /function-bind/1.1.2:
1522 | resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==}
1523 | dev: false
1524 |
1525 | /glob/10.3.12:
1526 | resolution: {integrity: sha512-TCNv8vJ+xz4QiqTpfOJA7HvYv+tNIRHKfUWw/q+v2jdgN4ebz+KY9tGx5J4rHP0o84mNP+ApH66HRX8us3Khqg==}
1527 | engines: {node: '>=16 || 14 >=14.17'}
1528 | hasBin: true
1529 | dependencies:
1530 | foreground-child: 3.1.1
1531 | jackspeak: 2.3.6
1532 | minimatch: 9.0.4
1533 | minipass: 7.1.2
1534 | path-scurry: 1.11.1
1535 | dev: false
1536 |
1537 | /graceful-fs/4.2.11:
1538 | resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==}
1539 | dev: false
1540 |
1541 | /has-flag/3.0.0:
1542 | resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==}
1543 | engines: {node: '>=4'}
1544 | dev: false
1545 |
1546 | /hasown/2.0.2:
1547 | resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==}
1548 | engines: {node: '>= 0.4'}
1549 | dependencies:
1550 | function-bind: 1.1.2
1551 | dev: false
1552 |
1553 | /hoist-non-react-statics/3.3.2:
1554 | resolution: {integrity: sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==}
1555 | dependencies:
1556 | react-is: 16.13.1
1557 | dev: false
1558 |
1559 | /html-tokenize/2.0.1:
1560 | resolution: {integrity: sha512-QY6S+hZ0f5m1WT8WffYN+Hg+xm/w5I8XeUcAq/ZYP5wVC8xbKi4Whhru3FtrAebD5EhBW8rmFzkDI6eCAuFe2w==}
1561 | hasBin: true
1562 | dependencies:
1563 | buffer-from: 0.1.2
1564 | inherits: 2.0.4
1565 | minimist: 1.2.8
1566 | readable-stream: 1.0.34
1567 | through2: 0.4.2
1568 | dev: false
1569 |
1570 | /idb/8.0.0:
1571 | resolution: {integrity: sha512-l//qvlAKGmQO31Qn7xdzagVPPaHTxXx199MhrAFuVBTPqydcPYBWjkrbv4Y0ktB+GmWOiwHl237UUOrLmQxLvw==}
1572 |
1573 | /immutable/5.0.3:
1574 | resolution: {integrity: sha512-P8IdPQHq3lA1xVeBRi5VPqUm5HDgKnx0Ru51wZz5mjxHr5n3RWhjIpOFU7ybkUxfB+5IToy+OLaHYDBIWsv+uw==}
1575 |
1576 | /import-fresh/3.3.0:
1577 | resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==}
1578 | engines: {node: '>=6'}
1579 | dependencies:
1580 | parent-module: 1.0.1
1581 | resolve-from: 4.0.0
1582 | dev: false
1583 |
1584 | /inherits/2.0.4:
1585 | resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==}
1586 | dev: false
1587 |
1588 | /is-arrayish/0.2.1:
1589 | resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==}
1590 | dev: false
1591 |
1592 | /is-arrayish/0.3.2:
1593 | resolution: {integrity: sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==}
1594 | requiresBuild: true
1595 | dev: false
1596 | optional: true
1597 |
1598 | /is-core-module/2.13.1:
1599 | resolution: {integrity: sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==}
1600 | dependencies:
1601 | hasown: 2.0.2
1602 | dev: false
1603 |
1604 | /is-extglob/2.1.1:
1605 | resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==}
1606 | engines: {node: '>=0.10.0'}
1607 | optional: true
1608 |
1609 | /is-fullwidth-code-point/3.0.0:
1610 | resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==}
1611 | engines: {node: '>=8'}
1612 | dev: false
1613 |
1614 | /is-glob/4.0.3:
1615 | resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==}
1616 | engines: {node: '>=0.10.0'}
1617 | dependencies:
1618 | is-extglob: 2.1.1
1619 | optional: true
1620 |
1621 | /is-number/7.0.0:
1622 | resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==}
1623 | engines: {node: '>=0.12.0'}
1624 | optional: true
1625 |
1626 | /isarray/0.0.1:
1627 | resolution: {integrity: sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==}
1628 | dev: false
1629 |
1630 | /isarray/1.0.0:
1631 | resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==}
1632 | dev: false
1633 |
1634 | /isexe/2.0.0:
1635 | resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==}
1636 | dev: false
1637 |
1638 | /jackspeak/2.3.6:
1639 | resolution: {integrity: sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==}
1640 | engines: {node: '>=14'}
1641 | dependencies:
1642 | '@isaacs/cliui': 8.0.2
1643 | optionalDependencies:
1644 | '@pkgjs/parseargs': 0.11.0
1645 | dev: false
1646 |
1647 | /js-tokens/4.0.0:
1648 | resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==}
1649 | dev: false
1650 |
1651 | /json-parse-even-better-errors/2.3.1:
1652 | resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==}
1653 | dev: false
1654 |
1655 | /jsonfile/6.1.0:
1656 | resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==}
1657 | dependencies:
1658 | universalify: 2.0.1
1659 | optionalDependencies:
1660 | graceful-fs: 4.2.11
1661 | dev: false
1662 |
1663 | /lines-and-columns/1.2.4:
1664 | resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==}
1665 | dev: false
1666 |
1667 | /lodash.sortby/4.7.0:
1668 | resolution: {integrity: sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==}
1669 | dev: false
1670 |
1671 | /loose-envify/1.4.0:
1672 | resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==}
1673 | hasBin: true
1674 | dependencies:
1675 | js-tokens: 4.0.0
1676 | dev: false
1677 |
1678 | /lru-cache/10.2.2:
1679 | resolution: {integrity: sha512-9hp3Vp2/hFQUiIwKo8XCeFVnrg8Pk3TYNPIR7tJADKi5YfcF7vEaK7avFHTlSy3kOKYaJQaalfEo6YuXdceBOQ==}
1680 | engines: {node: 14 || >=16.14}
1681 | dev: false
1682 |
1683 | /micromatch/4.0.8:
1684 | resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==}
1685 | engines: {node: '>=8.6'}
1686 | dependencies:
1687 | braces: 3.0.3
1688 | picomatch: 2.3.1
1689 | optional: true
1690 |
1691 | /minimatch/9.0.4:
1692 | resolution: {integrity: sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==}
1693 | engines: {node: '>=16 || 14 >=14.17'}
1694 | dependencies:
1695 | brace-expansion: 2.0.1
1696 | dev: false
1697 |
1698 | /minimist/1.2.8:
1699 | resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==}
1700 | dev: false
1701 |
1702 | /minipass/7.1.2:
1703 | resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==}
1704 | engines: {node: '>=16 || 14 >=14.17'}
1705 | dev: false
1706 |
1707 | /multipipe/1.0.2:
1708 | resolution: {integrity: sha512-6uiC9OvY71vzSGX8lZvSqscE7ft9nPupJ8fMjrCNRAUy2LREUW42UL+V/NTrogr6rFgRydUrCX4ZitfpSNkSCQ==}
1709 | dependencies:
1710 | duplexer2: 0.1.4
1711 | object-assign: 4.1.1
1712 | dev: false
1713 |
1714 | /nanoid/3.3.7:
1715 | resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==}
1716 | engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
1717 | hasBin: true
1718 |
1719 | /next/15.2.2_xq4e3whnojlx6hddcxrcjq4qhe:
1720 | resolution: {integrity: sha512-dgp8Kcx5XZRjMw2KNwBtUzhngRaURPioxoNIVl5BOyJbhi9CUgEtKDO7fx5wh8Z8vOVX1nYZ9meawJoRrlASYA==}
1721 | engines: {node: ^18.18.0 || ^19.8.0 || >= 20.0.0}
1722 | hasBin: true
1723 | peerDependencies:
1724 | '@opentelemetry/api': ^1.1.0
1725 | '@playwright/test': ^1.41.2
1726 | babel-plugin-react-compiler: '*'
1727 | react: ^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0
1728 | react-dom: ^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0
1729 | sass: ^1.3.0
1730 | peerDependenciesMeta:
1731 | '@opentelemetry/api':
1732 | optional: true
1733 | '@playwright/test':
1734 | optional: true
1735 | babel-plugin-react-compiler:
1736 | optional: true
1737 | sass:
1738 | optional: true
1739 | dependencies:
1740 | '@next/env': 15.2.2
1741 | '@swc/counter': 0.1.3
1742 | '@swc/helpers': 0.5.15
1743 | busboy: 1.6.0
1744 | caniuse-lite: 1.0.30001610
1745 | postcss: 8.4.31
1746 | react: 19.0.0
1747 | react-dom: 19.0.0_react@19.0.0
1748 | sass: 1.85.1
1749 | styled-jsx: 5.1.6_react@19.0.0
1750 | optionalDependencies:
1751 | '@next/swc-darwin-arm64': 15.2.2
1752 | '@next/swc-darwin-x64': 15.2.2
1753 | '@next/swc-linux-arm64-gnu': 15.2.2
1754 | '@next/swc-linux-arm64-musl': 15.2.2
1755 | '@next/swc-linux-x64-gnu': 15.2.2
1756 | '@next/swc-linux-x64-musl': 15.2.2
1757 | '@next/swc-win32-arm64-msvc': 15.2.2
1758 | '@next/swc-win32-x64-msvc': 15.2.2
1759 | sharp: 0.33.5
1760 | transitivePeerDependencies:
1761 | - '@babel/core'
1762 | - babel-plugin-macros
1763 | dev: false
1764 |
1765 | /node-addon-api/7.1.1:
1766 | resolution: {integrity: sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==}
1767 | optional: true
1768 |
1769 | /object-assign/4.1.1:
1770 | resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==}
1771 | engines: {node: '>=0.10.0'}
1772 | dev: false
1773 |
1774 | /object-keys/0.4.0:
1775 | resolution: {integrity: sha512-ncrLw+X55z7bkl5PnUvHwFK9FcGuFYo9gtjws2XtSzL+aZ8tm830P60WJ0dSmFVaSalWieW5MD7kEdnXda9yJw==}
1776 | dev: false
1777 |
1778 | /parent-module/1.0.1:
1779 | resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==}
1780 | engines: {node: '>=6'}
1781 | dependencies:
1782 | callsites: 3.1.0
1783 | dev: false
1784 |
1785 | /parse-json/5.2.0:
1786 | resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==}
1787 | engines: {node: '>=8'}
1788 | dependencies:
1789 | '@babel/code-frame': 7.24.6
1790 | error-ex: 1.3.2
1791 | json-parse-even-better-errors: 2.3.1
1792 | lines-and-columns: 1.2.4
1793 | dev: false
1794 |
1795 | /path-key/3.1.1:
1796 | resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==}
1797 | engines: {node: '>=8'}
1798 | dev: false
1799 |
1800 | /path-parse/1.0.7:
1801 | resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==}
1802 | dev: false
1803 |
1804 | /path-scurry/1.11.1:
1805 | resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==}
1806 | engines: {node: '>=16 || 14 >=14.18'}
1807 | dependencies:
1808 | lru-cache: 10.2.2
1809 | minipass: 7.1.2
1810 | dev: false
1811 |
1812 | /path-type/4.0.0:
1813 | resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==}
1814 | engines: {node: '>=8'}
1815 | dev: false
1816 |
1817 | /picocolors/1.0.0:
1818 | resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==}
1819 |
1820 | /picomatch/2.3.1:
1821 | resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==}
1822 | engines: {node: '>=8.6'}
1823 | optional: true
1824 |
1825 | /postcss/8.4.31:
1826 | resolution: {integrity: sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==}
1827 | engines: {node: ^10 || ^12 || >=14}
1828 | dependencies:
1829 | nanoid: 3.3.7
1830 | picocolors: 1.0.0
1831 | source-map-js: 1.2.0
1832 | dev: false
1833 |
1834 | /postcss/8.4.38:
1835 | resolution: {integrity: sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==}
1836 | engines: {node: ^10 || ^12 || >=14}
1837 | dependencies:
1838 | nanoid: 3.3.7
1839 | picocolors: 1.0.0
1840 | source-map-js: 1.2.0
1841 | dev: true
1842 |
1843 | /pretty-bytes/6.1.1:
1844 | resolution: {integrity: sha512-mQUvGU6aUFQ+rNvTIAcZuWGRT9a6f6Yrg9bHs4ImKF+HZCEK+plBvnAZYSIQztknZF2qnzNtr6F8s0+IuptdlQ==}
1845 | engines: {node: ^14.13.1 || >=16.0.0}
1846 | dev: false
1847 |
1848 | /process-nextick-args/2.0.1:
1849 | resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==}
1850 | dev: false
1851 |
1852 | /prop-types/15.8.1:
1853 | resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==}
1854 | dependencies:
1855 | loose-envify: 1.4.0
1856 | object-assign: 4.1.1
1857 | react-is: 16.13.1
1858 | dev: false
1859 |
1860 | /punycode/2.3.1:
1861 | resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==}
1862 | engines: {node: '>=6'}
1863 | dev: false
1864 |
1865 | /react-dom/19.0.0_react@19.0.0:
1866 | resolution: {integrity: sha512-4GV5sHFG0e/0AD4X+ySy6UJd3jVl1iNsNHdpad0qhABJ11twS3TTBnseqsKurKcsNqCEFeGL3uLpVChpIO3QfQ==}
1867 | peerDependencies:
1868 | react: ^19.0.0
1869 | dependencies:
1870 | react: 19.0.0
1871 | scheduler: 0.25.0
1872 | dev: false
1873 |
1874 | /react-is/16.13.1:
1875 | resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==}
1876 | dev: false
1877 |
1878 | /react-is/19.0.0:
1879 | resolution: {integrity: sha512-H91OHcwjZsbq3ClIDHMzBShc1rotbfACdWENsmEf0IFvZ3FgGPtdHMcsv45bQ1hAbgdfiA8SnxTKfDS+x/8m2g==}
1880 | dev: false
1881 |
1882 | /react-transition-group/4.4.5_upmzqgzhjrquwzo2dphtigtdgi:
1883 | resolution: {integrity: sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g==}
1884 | peerDependencies:
1885 | react: '>=16.6.0'
1886 | react-dom: '>=16.6.0'
1887 | dependencies:
1888 | '@babel/runtime': 7.26.10
1889 | dom-helpers: 5.2.1
1890 | loose-envify: 1.4.0
1891 | prop-types: 15.8.1
1892 | react: 19.0.0
1893 | react-dom: 19.0.0_react@19.0.0
1894 | dev: false
1895 |
1896 | /react/19.0.0:
1897 | resolution: {integrity: sha512-V8AVnmPIICiWpGfm6GLzCR/W5FXLchHop40W4nXBmdlEceh16rCN8O8LNWm5bh5XUX91fh7KpA+W0TgMKmgTpQ==}
1898 | engines: {node: '>=0.10.0'}
1899 | dev: false
1900 |
1901 | /readable-stream/1.0.34:
1902 | resolution: {integrity: sha512-ok1qVCJuRkNmvebYikljxJA/UEsKwLl2nI1OmaqAu4/UE+h0wKCHok4XkL/gvi39OacXvw59RJUOFUkDib2rHg==}
1903 | dependencies:
1904 | core-util-is: 1.0.3
1905 | inherits: 2.0.4
1906 | isarray: 0.0.1
1907 | string_decoder: 0.10.31
1908 | dev: false
1909 |
1910 | /readable-stream/2.3.8:
1911 | resolution: {integrity: sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==}
1912 | dependencies:
1913 | core-util-is: 1.0.3
1914 | inherits: 2.0.4
1915 | isarray: 1.0.0
1916 | process-nextick-args: 2.0.1
1917 | safe-buffer: 5.1.2
1918 | string_decoder: 1.1.1
1919 | util-deprecate: 1.0.2
1920 | dev: false
1921 |
1922 | /readdirp/4.1.2:
1923 | resolution: {integrity: sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==}
1924 | engines: {node: '>= 14.18.0'}
1925 |
1926 | /regenerator-runtime/0.14.1:
1927 | resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==}
1928 | dev: false
1929 |
1930 | /resolve-from/4.0.0:
1931 | resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==}
1932 | engines: {node: '>=4'}
1933 | dev: false
1934 |
1935 | /resolve/1.22.8:
1936 | resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==}
1937 | hasBin: true
1938 | dependencies:
1939 | is-core-module: 2.13.1
1940 | path-parse: 1.0.7
1941 | supports-preserve-symlinks-flag: 1.0.0
1942 | dev: false
1943 |
1944 | /rollup/4.14.3:
1945 | resolution: {integrity: sha512-ag5tTQKYsj1bhrFC9+OEWqb5O6VYgtQDO9hPDBMmIbePwhfSr+ExlcU741t8Dhw5DkPCQf6noz0jb36D6W9/hw==}
1946 | engines: {node: '>=18.0.0', npm: '>=8.0.0'}
1947 | hasBin: true
1948 | dependencies:
1949 | '@types/estree': 1.0.5
1950 | optionalDependencies:
1951 | '@rollup/rollup-android-arm-eabi': 4.14.3
1952 | '@rollup/rollup-android-arm64': 4.14.3
1953 | '@rollup/rollup-darwin-arm64': 4.14.3
1954 | '@rollup/rollup-darwin-x64': 4.14.3
1955 | '@rollup/rollup-linux-arm-gnueabihf': 4.14.3
1956 | '@rollup/rollup-linux-arm-musleabihf': 4.14.3
1957 | '@rollup/rollup-linux-arm64-gnu': 4.14.3
1958 | '@rollup/rollup-linux-arm64-musl': 4.14.3
1959 | '@rollup/rollup-linux-powerpc64le-gnu': 4.14.3
1960 | '@rollup/rollup-linux-riscv64-gnu': 4.14.3
1961 | '@rollup/rollup-linux-s390x-gnu': 4.14.3
1962 | '@rollup/rollup-linux-x64-gnu': 4.14.3
1963 | '@rollup/rollup-linux-x64-musl': 4.14.3
1964 | '@rollup/rollup-win32-arm64-msvc': 4.14.3
1965 | '@rollup/rollup-win32-ia32-msvc': 4.14.3
1966 | '@rollup/rollup-win32-x64-msvc': 4.14.3
1967 | fsevents: 2.3.3
1968 | dev: false
1969 |
1970 | /safe-buffer/5.1.2:
1971 | resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==}
1972 | dev: false
1973 |
1974 | /sass/1.85.1:
1975 | resolution: {integrity: sha512-Uk8WpxM5v+0cMR0XjX9KfRIacmSG86RH4DCCZjLU2rFh5tyutt9siAXJ7G+YfxQ99Q6wrRMbMlVl6KqUms71ag==}
1976 | engines: {node: '>=14.0.0'}
1977 | hasBin: true
1978 | dependencies:
1979 | chokidar: 4.0.3
1980 | immutable: 5.0.3
1981 | source-map-js: 1.2.0
1982 | optionalDependencies:
1983 | '@parcel/watcher': 2.5.1
1984 |
1985 | /scheduler/0.25.0:
1986 | resolution: {integrity: sha512-xFVuu11jh+xcO7JOAGJNOXld8/TcEHK/4CituBUeUb5hqxJLj9YuemAEuvm9gQ/+pgXYfbQuqAkiYu+u7YEsNA==}
1987 | dev: false
1988 |
1989 | /semver/7.7.1:
1990 | resolution: {integrity: sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==}
1991 | engines: {node: '>=10'}
1992 | hasBin: true
1993 | dev: false
1994 | optional: true
1995 |
1996 | /serwist/9.0.2_typescript@5.8.2:
1997 | resolution: {integrity: sha512-36+GeVAd0nd6byRKrSVJJHdIF0mSJ+hwxPYBQKZ+8BJ9SGap9Udw4FeG1ohgbezvGteUWoOLXJwQqTl1I1BkyQ==}
1998 | peerDependencies:
1999 | typescript: '>=5.0.0'
2000 | peerDependenciesMeta:
2001 | typescript:
2002 | optional: true
2003 | dependencies:
2004 | idb: 8.0.0
2005 | typescript: 5.8.2
2006 |
2007 | /sharp/0.33.5:
2008 | resolution: {integrity: sha512-haPVm1EkS9pgvHrQ/F3Xy+hgcuMV0Wm9vfIBSiwZ05k+xgb0PkBQpGsAA/oWdDobNaZTH5ppvHtzCFbnSEwHVw==}
2009 | engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
2010 | requiresBuild: true
2011 | dependencies:
2012 | color: 4.2.3
2013 | detect-libc: 2.0.3
2014 | semver: 7.7.1
2015 | optionalDependencies:
2016 | '@img/sharp-darwin-arm64': 0.33.5
2017 | '@img/sharp-darwin-x64': 0.33.5
2018 | '@img/sharp-libvips-darwin-arm64': 1.0.4
2019 | '@img/sharp-libvips-darwin-x64': 1.0.4
2020 | '@img/sharp-libvips-linux-arm': 1.0.5
2021 | '@img/sharp-libvips-linux-arm64': 1.0.4
2022 | '@img/sharp-libvips-linux-s390x': 1.0.4
2023 | '@img/sharp-libvips-linux-x64': 1.0.4
2024 | '@img/sharp-libvips-linuxmusl-arm64': 1.0.4
2025 | '@img/sharp-libvips-linuxmusl-x64': 1.0.4
2026 | '@img/sharp-linux-arm': 0.33.5
2027 | '@img/sharp-linux-arm64': 0.33.5
2028 | '@img/sharp-linux-s390x': 0.33.5
2029 | '@img/sharp-linux-x64': 0.33.5
2030 | '@img/sharp-linuxmusl-arm64': 0.33.5
2031 | '@img/sharp-linuxmusl-x64': 0.33.5
2032 | '@img/sharp-wasm32': 0.33.5
2033 | '@img/sharp-win32-ia32': 0.33.5
2034 | '@img/sharp-win32-x64': 0.33.5
2035 | dev: false
2036 | optional: true
2037 |
2038 | /shebang-command/2.0.0:
2039 | resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==}
2040 | engines: {node: '>=8'}
2041 | dependencies:
2042 | shebang-regex: 3.0.0
2043 | dev: false
2044 |
2045 | /shebang-regex/3.0.0:
2046 | resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==}
2047 | engines: {node: '>=8'}
2048 | dev: false
2049 |
2050 | /signal-exit/4.1.0:
2051 | resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==}
2052 | engines: {node: '>=14'}
2053 | dev: false
2054 |
2055 | /simple-swizzle/0.2.2:
2056 | resolution: {integrity: sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==}
2057 | requiresBuild: true
2058 | dependencies:
2059 | is-arrayish: 0.3.2
2060 | dev: false
2061 | optional: true
2062 |
2063 | /source-map-js/1.2.0:
2064 | resolution: {integrity: sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==}
2065 | engines: {node: '>=0.10.0'}
2066 |
2067 | /source-map/0.5.7:
2068 | resolution: {integrity: sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==}
2069 | engines: {node: '>=0.10.0'}
2070 | dev: false
2071 |
2072 | /source-map/0.8.0-beta.0:
2073 | resolution: {integrity: sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==}
2074 | engines: {node: '>= 8'}
2075 | dependencies:
2076 | whatwg-url: 7.1.0
2077 | dev: false
2078 |
2079 | /streamsearch/1.1.0:
2080 | resolution: {integrity: sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==}
2081 | engines: {node: '>=10.0.0'}
2082 | dev: false
2083 |
2084 | /string-width/4.2.3:
2085 | resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==}
2086 | engines: {node: '>=8'}
2087 | dependencies:
2088 | emoji-regex: 8.0.0
2089 | is-fullwidth-code-point: 3.0.0
2090 | strip-ansi: 6.0.1
2091 | dev: false
2092 |
2093 | /string-width/5.1.2:
2094 | resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==}
2095 | engines: {node: '>=12'}
2096 | dependencies:
2097 | eastasianwidth: 0.2.0
2098 | emoji-regex: 9.2.2
2099 | strip-ansi: 7.1.0
2100 | dev: false
2101 |
2102 | /string_decoder/0.10.31:
2103 | resolution: {integrity: sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==}
2104 | dev: false
2105 |
2106 | /string_decoder/1.1.1:
2107 | resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==}
2108 | dependencies:
2109 | safe-buffer: 5.1.2
2110 | dev: false
2111 |
2112 | /strip-ansi/6.0.1:
2113 | resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==}
2114 | engines: {node: '>=8'}
2115 | dependencies:
2116 | ansi-regex: 5.0.1
2117 | dev: false
2118 |
2119 | /strip-ansi/7.1.0:
2120 | resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==}
2121 | engines: {node: '>=12'}
2122 | dependencies:
2123 | ansi-regex: 6.0.1
2124 | dev: false
2125 |
2126 | /styled-jsx/5.1.6_react@19.0.0:
2127 | resolution: {integrity: sha512-qSVyDTeMotdvQYoHWLNGwRFJHC+i+ZvdBRYosOFgC+Wg1vx4frN2/RG/NA7SYqqvKNLf39P2LSRA2pu6n0XYZA==}
2128 | engines: {node: '>= 12.0.0'}
2129 | peerDependencies:
2130 | '@babel/core': '*'
2131 | babel-plugin-macros: '*'
2132 | react: '>= 16.8.0 || 17.x.x || ^18.0.0-0 || ^19.0.0-0'
2133 | peerDependenciesMeta:
2134 | '@babel/core':
2135 | optional: true
2136 | babel-plugin-macros:
2137 | optional: true
2138 | dependencies:
2139 | client-only: 0.0.1
2140 | react: 19.0.0
2141 | dev: false
2142 |
2143 | /stylis/4.2.0:
2144 | resolution: {integrity: sha512-Orov6g6BB1sDfYgzWfTHDOxamtX1bE/zo104Dh9e6fqJ3PooipYyfJ0pUmrZO2wAvO8YbEyeFrkV91XTsGMSrw==}
2145 | dev: false
2146 |
2147 | /supports-color/5.5.0:
2148 | resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==}
2149 | engines: {node: '>=4'}
2150 | dependencies:
2151 | has-flag: 3.0.0
2152 | dev: false
2153 |
2154 | /supports-preserve-symlinks-flag/1.0.0:
2155 | resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==}
2156 | engines: {node: '>= 0.4'}
2157 | dev: false
2158 |
2159 | /swr/2.2.5_react@19.0.0:
2160 | resolution: {integrity: sha512-QtxqyclFeAsxEUeZIYmsaQ0UjimSq1RZ9Un7I68/0ClKK/U3LoyQunwkQfJZr2fc22DfIXLNDc2wFyTEikCUpg==}
2161 | peerDependencies:
2162 | react: ^16.11.0 || ^17.0.0 || ^18.0.0
2163 | dependencies:
2164 | client-only: 0.0.1
2165 | react: 19.0.0
2166 | use-sync-external-store: 1.2.2_react@19.0.0
2167 | dev: false
2168 |
2169 | /third-party-capital/1.0.20:
2170 | resolution: {integrity: sha512-oB7yIimd8SuGptespDAZnNkzIz+NWaJCu2RMsbs4Wmp9zSDUM8Nhi3s2OOcqYuv3mN4hitXc8DVx+LyUmbUDiA==}
2171 | dev: false
2172 |
2173 | /through/2.3.8:
2174 | resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==}
2175 | dev: false
2176 |
2177 | /through2/0.4.2:
2178 | resolution: {integrity: sha512-45Llu+EwHKtAZYTPPVn3XZHBgakWMN3rokhEv5hu596XP+cNgplMg+Gj+1nmAvj+L0K7+N49zBKx5rah5u0QIQ==}
2179 | dependencies:
2180 | readable-stream: 1.0.34
2181 | xtend: 2.1.2
2182 | dev: false
2183 |
2184 | /to-fast-properties/2.0.0:
2185 | resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==}
2186 | engines: {node: '>=4'}
2187 | dev: false
2188 |
2189 | /to-regex-range/5.0.1:
2190 | resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==}
2191 | engines: {node: '>=8.0'}
2192 | dependencies:
2193 | is-number: 7.0.0
2194 | optional: true
2195 |
2196 | /tr46/1.0.1:
2197 | resolution: {integrity: sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==}
2198 | dependencies:
2199 | punycode: 2.3.1
2200 | dev: false
2201 |
2202 | /tslib/2.8.1:
2203 | resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==}
2204 | dev: false
2205 |
2206 | /typescript/5.8.2:
2207 | resolution: {integrity: sha512-aJn6wq13/afZp/jT9QZmwEjDqqvSGp1VT5GVg+f/t6/oVyrgXM6BY1h9BRh/O5p3PlUPAe+WuiEZOmb/49RqoQ==}
2208 | engines: {node: '>=14.17'}
2209 | hasBin: true
2210 |
2211 | /undici-types/5.26.5:
2212 | resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==}
2213 | dev: true
2214 |
2215 | /undici/7.5.0:
2216 | resolution: {integrity: sha512-NFQG741e8mJ0fLQk90xKxFdaSM7z4+IQpAgsFI36bCDY9Z2+aXXZjVy2uUksMouWfMI9+w5ejOq5zYYTBCQJDQ==}
2217 | engines: {node: '>=20.18.1'}
2218 | dev: false
2219 |
2220 | /universalify/2.0.1:
2221 | resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==}
2222 | engines: {node: '>= 10.0.0'}
2223 | dev: false
2224 |
2225 | /upath/2.0.1:
2226 | resolution: {integrity: sha512-1uEe95xksV1O0CYKXo8vQvN1JEbtJp7lb7C5U9HMsIp6IVwntkH/oNUzyVNQSd4S1sYk2FpSSW44FqMc8qee5w==}
2227 | engines: {node: '>=4'}
2228 | dev: false
2229 |
2230 | /use-sync-external-store/1.2.2_react@19.0.0:
2231 | resolution: {integrity: sha512-PElTlVMwpblvbNqQ82d2n6RjStvdSoNe9FG28kNfz3WiXilJm4DdNkEzRhCZuIDwY8U08WVihhGR5iRqAwfDiw==}
2232 | peerDependencies:
2233 | react: ^16.8.0 || ^17.0.0 || ^18.0.0
2234 | dependencies:
2235 | react: 19.0.0
2236 | dev: false
2237 |
2238 | /util-deprecate/1.0.2:
2239 | resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==}
2240 | dev: false
2241 |
2242 | /webidl-conversions/4.0.2:
2243 | resolution: {integrity: sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==}
2244 | dev: false
2245 |
2246 | /whatwg-url/7.1.0:
2247 | resolution: {integrity: sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==}
2248 | dependencies:
2249 | lodash.sortby: 4.7.0
2250 | tr46: 1.0.1
2251 | webidl-conversions: 4.0.2
2252 | dev: false
2253 |
2254 | /which/2.0.2:
2255 | resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==}
2256 | engines: {node: '>= 8'}
2257 | hasBin: true
2258 | dependencies:
2259 | isexe: 2.0.0
2260 | dev: false
2261 |
2262 | /wrap-ansi/7.0.0:
2263 | resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==}
2264 | engines: {node: '>=10'}
2265 | dependencies:
2266 | ansi-styles: 4.3.0
2267 | string-width: 4.2.3
2268 | strip-ansi: 6.0.1
2269 | dev: false
2270 |
2271 | /wrap-ansi/8.1.0:
2272 | resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==}
2273 | engines: {node: '>=12'}
2274 | dependencies:
2275 | ansi-styles: 6.2.1
2276 | string-width: 5.1.2
2277 | strip-ansi: 7.1.0
2278 | dev: false
2279 |
2280 | /xtend/2.1.2:
2281 | resolution: {integrity: sha512-vMNKzr2rHP9Dp/e1NQFnLQlwlhp9L/LfvnsVdHxN1f+uggyVI3i08uD14GPvCToPkdsRfyPqIyYGmIk58V98ZQ==}
2282 | engines: {node: '>=0.4'}
2283 | dependencies:
2284 | object-keys: 0.4.0
2285 | dev: false
2286 |
2287 | /yaml/1.10.2:
2288 | resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==}
2289 | engines: {node: '>= 6'}
2290 | dev: false
2291 |
2292 | /zod/3.22.4:
2293 | resolution: {integrity: sha512-iC+8Io04lddc+mVqQ9AZ7OQ2MrUKGN+oIQyq1vemgt46jwCwLfhq7/pwnBnNXXXZb8VTVLKwp9EDkx+ryxIWmg==}
2294 | dev: false
2295 |
--------------------------------------------------------------------------------
/public/icon.jpeg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/evolify/pumpfun/eb8186d40393f145b1e83e0d265dc7afc114c1ec/public/icon.jpeg
--------------------------------------------------------------------------------
/public/manifest.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "Dump Fun",
3 | "short_name": "DumpFun",
4 | "icons": [
5 | {
6 | "src": "/icon.jpeg",
7 | "sizes": "120x120",
8 | "type": "image/png"
9 | }
10 | ],
11 | "theme_color": "#1976d2",
12 | "background_color": "#1976d2",
13 | "start_url": "/",
14 | "display": "standalone",
15 | "orientation": "portrait"
16 | }
17 |
--------------------------------------------------------------------------------
/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | "target": "es6",
4 | "module": "esnext",
5 | "rootDir": "./",
6 | "baseUrl": ".",
7 | "jsx": "preserve",
8 | "moduleResolution": "node",
9 | "noImplicitAny": true,
10 | "sourceMap": true,
11 | "allowSyntheticDefaultImports": true,
12 | "resolveJsonModule": true,
13 | "lib": [
14 | "dom",
15 | "es6",
16 | "es7",
17 | "WebWorker"
18 | ],
19 | "types": [
20 | "@serwist/next/typings"
21 | ],
22 | "experimentalDecorators": true,
23 | "allowJs": true,
24 | "skipLibCheck": true,
25 | "forceConsistentCasingInFileNames": true,
26 | "noEmit": true,
27 | "esModuleInterop": true,
28 | "isolatedModules": true,
29 | "incremental": true,
30 | "paths": {
31 | "common/*": [
32 | "./common/*"
33 | ]
34 | },
35 | "plugins": [
36 | {
37 | "name": "next"
38 | }
39 | ],
40 | "strict": false
41 | },
42 | "include": [
43 | "common/**/*",
44 | "app/**/*",
45 | ".next/types/**/*.ts"
46 | ],
47 | "exclude": [
48 | "node_modules"
49 | ]
50 | }
51 |
--------------------------------------------------------------------------------