diff --git a/move202503/DudeGuuud/README.md b/move202503/DudeGuuud/README.md
new file mode 100644
index 00000000..98078d1a
--- /dev/null
+++ b/move202503/DudeGuuud/README.md
@@ -0,0 +1,9 @@
+## project
+- 项目名称: NarrFlow
+> 描述: NarrFlow 是一个基于区块链技术的去中心化协作小说创作平台,允许用户共同创作故事并获得代币奖励。平台支持故事创建、段落添加、投票决策,结合了创作自由与社区共识机制。
+
+## Member
+
+- DudeGuuud github: https://github.com/DudeGuuud
+> 自我介绍&技术栈: 本科在读希望学习区块链 Rust Python React
+
diff --git a/move202503/DudeGuuud/code/.eslintrc.json b/move202503/DudeGuuud/code/.eslintrc.json
new file mode 100644
index 00000000..91a85b5f
--- /dev/null
+++ b/move202503/DudeGuuud/code/.eslintrc.json
@@ -0,0 +1,35 @@
+{
+ "env": {
+ "browser": true,
+ "es2021": true
+ },
+ "extends": [
+ "eslint:recommended",
+ "plugin:@typescript-eslint/recommended",
+ "plugin:react/recommended",
+ "plugin:react-hooks/recommended",
+ "plugin:prettier/recommended"
+ ],
+ "parser": "@typescript-eslint/parser",
+ "parserOptions": {
+ "ecmaFeatures": {
+ "jsx": true
+ },
+ "ecmaVersion": "latest",
+ "sourceType": "module"
+ },
+ "plugins": [
+ "react",
+ "@typescript-eslint",
+ "prettier"
+ ],
+ "rules": {
+ "react/react-in-jsx-scope": "off",
+ "prettier/prettier": "error"
+ },
+ "settings": {
+ "react": {
+ "version": "detect"
+ }
+ }
+}
diff --git a/move202503/DudeGuuud/code/.gitignore b/move202503/DudeGuuud/code/.gitignore
new file mode 100644
index 00000000..3df8efb3
--- /dev/null
+++ b/move202503/DudeGuuud/code/.gitignore
@@ -0,0 +1,30 @@
+# Logs
+logs
+*.log
+npm-debug.log*
+yarn-debug.log*
+yarn-error.log*
+pnpm-debug.log*
+lerna-debug.log*
+
+node_modules
+dist
+dist-ssr
+*.local
+
+# Editor directories and files
+.vscode/*
+!.vscode/extensions.json
+.idea
+.DS_Store
+*.suo
+*.ntvs*
+*.njsproj
+*.sln
+*.sw?
+# Envs
+.env
+.env.local
+.env.development
+.env.test
+.env.production
diff --git a/move202503/DudeGuuud/code/.prettierrc b/move202503/DudeGuuud/code/.prettierrc
new file mode 100644
index 00000000..063e9894
--- /dev/null
+++ b/move202503/DudeGuuud/code/.prettierrc
@@ -0,0 +1,8 @@
+{
+ "semi": true,
+ "tabWidth": 2,
+ "printWidth": 100,
+ "singleQuote": true,
+ "trailingComma": "es5",
+ "jsxBracketSameLine": false
+}
diff --git a/move202503/DudeGuuud/code/README.md b/move202503/DudeGuuud/code/README.md
new file mode 100644
index 00000000..f0089c9c
--- /dev/null
+++ b/move202503/DudeGuuud/code/README.md
@@ -0,0 +1,122 @@
+# NarrFlow - 协作叙事平台
+
+NarrFlow 是一个基于区块链技术的去中心化协作小说创作平台,允许用户共同创作故事并获得代币奖励。平台支持故事创建、段落添加、投票决策,结合了创作自由与社区共识机制。
+
+## 现行方案说明
+- 所有投票行为和票数统计均在前端通过数据库(Supabase)进行。
+- 前端定时统计票数,一旦某个提案票数达到阈值,自动将该内容通过合约写入链上。
+- 链上只存储最终胜出的内容元数据(如内容哈希、作者等),不再存储所有投票细节。
+- 正文内容链下存储,链上仅存元数据。
+
+## 功能特性
+- **协作创作**:多人参与故事创作,共同决定情节发展
+- **投票机制**:社区投票选出最佳段落提案,确保高质量内容
+- **代币奖励**:创作者和参与者可获得NARR代币奖励
+- **链上治理**:投票和决策透明,永久记录在区块链上
+- **移动友好**:响应式设计,支持多端访问
+- **多语言支持**:内置中英文界面切换
+
+## 技术栈
+### 前端技术
+- React 18 + TypeScript
+- TailwindCSS + CSS Modules
+- Framer Motion、GSAP、React Spring
+- Redux Toolkit
+- Vite
+- Supabase(数据库)
+
+### 区块链技术
+- 智能合约:Move on Sui
+- Web3交互:@suiet/wallet-kit
+- 钱包连接:Sui Wallet
+
+## 智能合约模块
+- **story.move** - 故事与段落管理(只存元数据和投票结果)
+- **token.move** - 代币和奖励系统
+- **narr_flow.move** - 核心业务逻辑模块
+
+## 存储策略
+- 链上存储:故事元数据、投票结果、用户奖励
+- 数据库存储:所有提案、投票、票数统计
+- 正文内容链下存储(如对象存储、数据库等)
+
+## 项目逻辑流程图
+```mermaid
+flowchart TD
+ A[用户提交提案/投票] --> B[前端写入Supabase数据库]
+ B --> C[前端定时统计票数]
+ C -->|票数达标| D[调用合约上链胜出内容]
+ D --> E[链上存储元数据]
+ E --> F[主页/故事展示]
+```
+
+## 安装与使用
+
+### 前端
+```bash
+# 克隆仓库
+git clone https://github.com/DudeGuuud/NarrFlow-Web3.git
+cd NarrFlow-Web3
+
+# 安装依赖
+pnpm install
+
+# 启动开发服务器
+pnpm run dev
+
+# 构建生产版本
+pnpm run build
+```
+
+根目录添加.env并填写
+```bash
+VITE_PACKAGE_ID=
+VITE_STORYBOOK_ID=
+VITE_TREASURY_ID=
+VITE_SUI_NETWORK=testnet
+
+数据库
+
+VITE_SUPABASE_URL=
+VITE_SUPABASE_KEY=
+
+执行sql语句
+create table if not exists proposals (
+ id bigserial primary key,
+ content text not null,
+ author text not null,
+ votes integer not null default 0,
+ type text not null,
+ created_at timestamptz not null default now()
+);
+
+create table if not exists votes (
+ id bigserial primary key,
+ proposal_id bigint not null references proposals(id) on delete cascade,
+ voter text not null,
+ created_at timestamptz not null default now()
+);
+
+
+# 后续添加 Walrus 相关 endpoint
+# VITE_WALRUS_PUBLISHER=
+# VITE_WALRUS_AGGREGATOR=
+```
+
+### 智能合约
+```bash
+# 切换到合约目录
+cd move
+
+# 编译合约
+sui move build
+
+# 部署合约
+sui client publish
+```
+
+## 贡献
+欢迎贡献代码、报告问题或提出改进建议。请先fork本仓库,创建功能分支,然后提交PR。
+
+## 许可证
+本项目采用 [MIT 许可证](LICENSE)。
diff --git a/move202503/DudeGuuud/code/eslint.config.js b/move202503/DudeGuuud/code/eslint.config.js
new file mode 100644
index 00000000..092408a9
--- /dev/null
+++ b/move202503/DudeGuuud/code/eslint.config.js
@@ -0,0 +1,28 @@
+import js from '@eslint/js'
+import globals from 'globals'
+import reactHooks from 'eslint-plugin-react-hooks'
+import reactRefresh from 'eslint-plugin-react-refresh'
+import tseslint from 'typescript-eslint'
+
+export default tseslint.config(
+ { ignores: ['dist'] },
+ {
+ extends: [js.configs.recommended, ...tseslint.configs.recommended],
+ files: ['**/*.{ts,tsx}'],
+ languageOptions: {
+ ecmaVersion: 2020,
+ globals: globals.browser,
+ },
+ plugins: {
+ 'react-hooks': reactHooks,
+ 'react-refresh': reactRefresh,
+ },
+ rules: {
+ ...reactHooks.configs.recommended.rules,
+ 'react-refresh/only-export-components': [
+ 'warn',
+ { allowConstantExport: true },
+ ],
+ },
+ },
+)
diff --git a/move202503/DudeGuuud/code/index.html b/move202503/DudeGuuud/code/index.html
new file mode 100644
index 00000000..854f03bb
--- /dev/null
+++ b/move202503/DudeGuuud/code/index.html
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+ NarrFlow
+
+
+
+
+
+
diff --git a/move202503/DudeGuuud/code/linux.md b/move202503/DudeGuuud/code/linux.md
new file mode 100644
index 00000000..e69de29b
diff --git a/move202503/DudeGuuud/code/move/Move.lock b/move202503/DudeGuuud/code/move/Move.lock
new file mode 100644
index 00000000..292976d5
--- /dev/null
+++ b/move202503/DudeGuuud/code/move/Move.lock
@@ -0,0 +1,40 @@
+# @generated by Move, please check-in and do not edit manually.
+
+[move]
+version = 3
+manifest_digest = "12E9AEFAA7AD0A8420478128B3067979F0A926E7A7A8D656144AA0E0A7190E67"
+deps_digest = "F8BBB0CCB2491CA29A3DF03D6F92277A4F3574266507ACD77214D37ECA3F3082"
+dependencies = [
+ { id = "Sui", name = "Sui" },
+]
+
+[[move.package]]
+id = "MoveStdlib"
+source = { git = "https://github.com/MystenLabs/sui.git", rev = "framework/testnet", subdir = "crates/sui-framework/packages/move-stdlib" }
+
+[[move.package]]
+id = "Sui"
+source = { git = "https://github.com/MystenLabs/sui.git", rev = "framework/testnet", subdir = "crates/sui-framework/packages/sui-framework" }
+
+dependencies = [
+ { id = "MoveStdlib", name = "MoveStdlib" },
+]
+
+[move.toolchain-version]
+compiler-version = "1.47.0"
+edition = "2024"
+flavor = "sui"
+
+[env]
+
+[env.local]
+chain-id = "1d1c141c"
+original-published-id = "0xb046d8a64737b0f25effe4e0239976c7d00414bf868b233de6bcc54f2d470e24"
+latest-published-id = "0xb046d8a64737b0f25effe4e0239976c7d00414bf868b233de6bcc54f2d470e24"
+published-version = "1"
+
+[env.testnet]
+chain-id = "4c78adac"
+original-published-id = "0xa47599a6525da242f712bec2601dceab88f4785c6f549bb412eee30f15ed623d"
+latest-published-id = "0xa47599a6525da242f712bec2601dceab88f4785c6f549bb412eee30f15ed623d"
+published-version = "1"
diff --git a/move202503/DudeGuuud/code/move/Move.toml b/move202503/DudeGuuud/code/move/Move.toml
new file mode 100644
index 00000000..65084e19
--- /dev/null
+++ b/move202503/DudeGuuud/code/move/Move.toml
@@ -0,0 +1,12 @@
+[package]
+name = "narr_flow"
+version = "0.0.1"
+published-at = "0x0"
+edition = "2024"
+
+[dependencies]
+Sui = { git = "https://github.com/MystenLabs/sui.git", subdir = "crates/sui-framework/packages/sui-framework", rev = "framework/testnet" }
+
+[addresses]
+narr_flow = "0x0"
+sui = "0000000000000000000000000000000000000000000000000000000000000002"
\ No newline at end of file
diff --git a/move202503/DudeGuuud/code/move/README.md b/move202503/DudeGuuud/code/move/README.md
new file mode 100644
index 00000000..e219f83d
--- /dev/null
+++ b/move202503/DudeGuuud/code/move/README.md
@@ -0,0 +1,201 @@
+# NarrFlow 智能合约
+
+NarrFlow是一个去中心化的协作叙事平台,用户可以创建故事、添加段落并对故事的发展方向进行投票,所有参与者可获得代币奖励。
+
+## 架构设计
+
+本项目采用模块化设计,划分为三个核心模块:
+
+1. **故事模块 (story.move)** - 管理故事的创建和发展
+2. **代币模块 (token.move)** - 处理NARR代币与奖励机制
+3. **核心模块 (narr_flow.move)** - 整合上述模块,提供复合业务功能
+
+## 功能特性
+
+### 故事模块
+- **故事创建**:用户可以创建新故事并设置标题
+- **段落添加**:作者可以添加新段落发展故事
+- **投票机制**:用户可对段落提案进行投票
+- **提案系统**:用户可提交段落提案供社区投票
+- **事件通知**:所有关键操作都会触发事件供前端监听
+
+### 代币模块
+- **NARR代币**:平台原生代币,作为创作和参与奖励
+- **财库管理**:中央化财库管理代币分发
+- **多种奖励类型**:
+ - 故事创建奖励:100 NARR
+ - 段落添加奖励:20 NARR
+ - 获胜提案奖励:50 NARR
+ - 投票参与奖励:5 NARR
+- **管理员控制**:专有权限功能,如自定义奖励
+
+### 核心模块
+- **业务整合**:连接故事和代币系统
+- **平台管理**:提供平台级别的管理功能
+- **权限控制**:确保敏感操作只能由授权用户执行
+
+## 存储策略
+
+NarrFlow使用Walrus作为去中心化存储解决方案:
+
+1. **链上存储**:仅保存元数据和Walrus引用
+ - 故事和段落ID、作者信息、时间戳
+ - 投票数据和结果
+ - 指向Walrus内容的引用ID
+
+2. **Walrus存储**:存储实际内容
+ - 存储完整的故事文本和段落内容
+ - 利用Sui原生的Walrus系统确保数据持久性
+ - 通过内容哈希验证确保完整性
+
+3. **数据结构优化**:
+```move
+struct Paragraph {
+ walrus_id: vector, // Walrus内容引用ID
+ content_hash: vector, // 内容验证哈希
+ preview: String, // 内容简短预览
+ author: address, // 作者地址
+ timestamp: u64 // 创建时间戳
+}
+```
+
+## 数据模型
+
+### 故事结构
+```
+struct Story {
+ id: UID, // 故事唯一ID
+ title: String, // 故事标题
+ author: address, // 创作者地址
+ paragraphs: vector, // 段落列表
+ current_voting: Option, // 当前投票会话
+ completed: bool // 故事是否完成
+}
+```
+
+### 代币管理
+```
+struct Treasury {
+ id: UID, // 财库唯一ID
+ balance: Balance, // NARR代币余额
+ admin: address // 管理员地址
+}
+```
+
+## 事件系统
+
+本合约通过事件系统实现链上活动的前端监听:
+
+- **StoryCreated** - 当新故事创建时触发
+- **ParagraphAdded** - 当段落添加时触发
+- **VotingStarted** - 当投票会话开始时触发
+- **VoteSubmitted** - 当用户投票时触发
+- **TokensRewarded** - 当代币奖励发放时触发
+
+## 开发与部署
+
+### 前提条件
+- Sui CLI 已安装
+- 对Move语言有基本了解
+- Walrus CLI工具(用于内容存储)
+
+### 编译步骤
+```bash
+# 进入合约目录
+cd move
+
+# 编译所有合约
+sui move build
+
+# 测试合约
+sui move test
+
+# 发布合约
+sui client publish --gas-budget 100000000
+```
+
+### 测试合约
+
+我们提供了一组单元测试来验证合约功能:
+
+```bash
+sui move test
+```
+
+## 安全考量
+
+1. **权限控制** - 敏感操作受到严格的权限检查
+2. **余额验证** - 所有代币操作前都会验证余额
+3. **状态验证** - 函数调用前会验证系统状态的合法性
+4. **错误处理** - 详细的错误代码体系便于调试
+5. **内容验证** - 使用哈希验证确保从Walrus检索的内容完整性
+
+## API参考
+
+### 故事模块
+- `create_story(title, first_paragraph)` - 创建新故事
+- `add_paragraph(story, walrus_id, content_hash, preview)` - 向故事添加段落
+- `start_voting(story, proposals, voting_duration)` - 开始投票会话
+- `cast_vote(story, proposal_index)` - 为提案投票
+- `complete_story(story)` - 结束投票并完成故事
+
+### 代币模块
+- `reward_story_creation(treasury, receiver, story_id)` - 奖励故事创建者
+- `reward_paragraph_addition(treasury, receiver, story_id)` - 奖励段落添加者
+- `reward_winning_proposal(treasury, receiver, story_id)` - 奖励获胜提案作者
+- `reward_voter(treasury, receiver, story_id)` - 奖励投票者
+- `admin_reward(treasury, receiver, amount, story_id)` - 管理员自定义奖励
+
+## 许可证
+
+本项目采用MIT许可证。详见LICENSE文件。
+
+## 本地编译、部署与交互(基于Sui官方文档)
+
+### 1. 本地编译与单元测试
+```bash
+cd move
+sui move build
+sui move test
+```
+
+### 2. 本地发布合约(假设已配置好sui钱包和本地节点)
+```bash
+sui client publish --gas-budget 100000000
+```
+发布后会输出packageId,后续交互需用到。
+
+### 3. 使用sui client call与合约交互
+以调用story.move的create_story为例:
+```bash
+sui client call \
+ --package \
+ --module story \
+ --function create_story \
+ --args '"故事标题"' '"<64位内容哈希>"' '""' \
+ --gas-budget 100000000
+```
+参数说明:
+- :发布合约后获得的包ID
+- <64位内容哈希>:前端生成的内容哈希
+- :内容在Walrus存储的ID
+
+### 4. 推荐交互脚本结构
+可在项目根目录新建`scripts/interaction.sh`,批量执行常用交互命令。例如:
+```bash
+#!/bin/bash
+PACKAGE_ID=xxxx # 替换为实际packageId
+sui client call \
+ --package $PACKAGE_ID \
+ --module story \
+ --function create_story \
+ --args '"测试标题"' '"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"' '"walrus_123456"' \
+ --gas-budget 100000000
+```
+记得赋予脚本可执行权限:
+```bash
+chmod +x scripts/interaction.sh
+```
+
+---
+如需更多复杂交互,可参考[Sui官方CLI文档](https://docs.sui.io/build/cli-client)和Move合约参数类型说明。
\ No newline at end of file
diff --git a/move202503/DudeGuuud/code/move/sources/narr_flow.move b/move202503/DudeGuuud/code/move/sources/narr_flow.move
new file mode 100644
index 00000000..5711576a
--- /dev/null
+++ b/move202503/DudeGuuud/code/move/sources/narr_flow.move
@@ -0,0 +1,172 @@
+module narr_flow::narr_flow {
+ use std::string::{String};
+ use narr_flow::story::{Self, StoryBook};
+ use narr_flow::token::{Self, Treasury};
+ const ENotAuthorized: u64 = 0;
+
+ // 平台管理员能力结构
+ public struct PlatformCap has key, store {
+ id: UID,
+ admin: address
+ }
+
+ // 事件
+ public struct StoryCreatedWithReward has copy, drop {
+ book_index: u64,
+ author: address,
+ title: String,
+ reward_amount: u64
+ }
+
+ public struct ParagraphAddedWithReward has copy, drop {
+ book_index: u64,
+ author: address,
+ content_preview: String,
+ reward_amount: u64
+ }
+
+ public struct ProposalSubmittedWithReward has copy, drop {
+ story_id: ID,
+ author: address,
+ reward_amount: u64
+ }
+
+ public struct VotingReward has copy, drop {
+ story_id: ID,
+ voter: address,
+ reward_amount: u64
+ }
+
+ public struct WinningProposalReward has copy, drop {
+ story_id: ID,
+ author: address,
+ reward_amount: u64
+ }
+
+ // === 初始化函数 ===
+
+ fun init(_ctx: &mut TxContext) {
+ let platform_cap = PlatformCap {
+ id: object::new(_ctx),
+ admin: tx_context::sender(_ctx)
+ };
+
+ transfer::transfer(platform_cap, tx_context::sender(_ctx));
+ }
+
+ // === 公共入口函数 ===
+
+ // 开启新书并奖励作者
+ public entry fun start_new_book_with_reward(
+ _treasury: &mut Treasury,
+ story_book: &mut StoryBook,
+ title: String,
+ _ctx: &mut TxContext
+ ) {
+ let _sender = tx_context::sender(_ctx);
+ story::start_new_book(story_book, title, _sender, _treasury, _ctx);
+ let _book_index = story::get_current_book_index(story_book);
+ // token::reward_story_creation(_treasury, _sender, _book_index, _ctx); // 你可自定义奖励逻辑
+ // event::emit(StoryCreatedWithReward { book_index: _book_index, author: _sender, title, reward_amount: 0 });
+ }
+
+ // 添加段落并奖励作者
+ public entry fun add_paragraph_with_reward(
+ _treasury: &mut Treasury,
+ story_book: &mut StoryBook,
+ content: String,
+ _ctx: &mut TxContext
+ ) {
+ let _sender = tx_context::sender(_ctx);
+ story::add_paragraph(story_book, content, _sender, _treasury, _ctx);
+ let _book_index = story::get_current_book_index(story_book);
+ // token::reward_paragraph_addition(_treasury, _sender, _book_index, _ctx);
+ // event::emit(ParagraphAddedWithReward { book_index: _book_index, author: _sender, content_preview: content, reward_amount: 0 });
+ }
+
+ // 开始段落投票会话
+ public entry fun start_voting_session(
+ _story_book: &mut StoryBook,
+ _proposals_hash: vector>,
+ _proposals_walrus_id: vector>,
+ _voting_duration: u64,
+ _ctx: &mut TxContext
+ ) {
+ // story::start_voting(_story_book, _proposals_hash, _proposals_walrus_id, _voting_duration, _ctx);
+ }
+
+ // 提交段落提案并奖励
+ /*
+ public entry fun submit_proposal_with_reward(
+ treasury: &mut Treasury,
+ story: &mut Story,
+ content: vector,
+ ctx: &mut TxContext
+ ) {
+ let sender = tx_context::sender(ctx);
+ // 提交提案
+ // story::submit_proposal(story, content, ctx);
+ // 奖励提案者
+ // let story_id = object::id(story);
+ // token::reward_paragraph_addition(treasury, sender, story_id, ctx);
+ // 发出事件
+ // event::emit(ProposalSubmittedWithReward {
+ // story_id,
+ // author: sender,
+ // reward_amount: 10_000_000_000 // 10 NARR
+ // });
+ }
+ */
+
+ // 投票并奖励投票者
+ public entry fun vote_with_reward(
+ _treasury: &mut Treasury,
+ story_book: &mut StoryBook,
+ para_index: u64,
+ _ctx: &mut TxContext
+ ) {
+ let _sender = tx_context::sender(_ctx);
+ story::vote_paragraph(story_book, para_index);
+ let _book_index = story::get_current_book_index(story_book);
+ // token::reward_voter(_treasury, _sender, _book_index, _ctx);
+ }
+
+ // 结束投票并奖励获胜提案的作者
+ public entry fun end_voting_with_reward(
+ _treasury: &mut Treasury,
+ _story_book: &mut StoryBook,
+ _ctx: &mut TxContext
+ ) {
+ // let _winning_author = story::complete_story(_story_book, _ctx);
+ // let story_id = object::id(story);
+ // token::reward_winning_proposal(_treasury, _winning_author, story_id, _ctx);
+ }
+
+ // 归档书本并奖励
+ public entry fun archive_book_with_reward(
+ _treasury: &mut Treasury,
+ story_book: &mut StoryBook,
+ _ctx: &mut TxContext
+ ) {
+ story::archive_book(story_book, _treasury, _ctx);
+ let _book_index = story::get_current_book_index(story_book);
+ // 可在此处奖励归档相关用户
+ }
+
+ // === 管理员功能 ===
+
+ // 管理员自定义奖励
+ public entry fun admin_custom_reward(
+ _treasury: &mut Treasury,
+ _platform_cap: &PlatformCap,
+ receiver: address,
+ amount: u64,
+ _ctx: &mut TxContext
+ ) {
+ // 校验只有平台管理员可以调用
+ let _sender = tx_context::sender(_ctx);
+ assert!(_sender == _platform_cap.admin, ENotAuthorized);
+ let story_id_opt = std::option::none();
+ // token::admin_reward(_treasury, receiver, amount, story_id_opt, _ctx);
+ }
+}
\ No newline at end of file
diff --git a/move202503/DudeGuuud/code/move/sources/story.move b/move202503/DudeGuuud/code/move/sources/story.move
new file mode 100644
index 00000000..ea05486a
--- /dev/null
+++ b/move202503/DudeGuuud/code/move/sources/story.move
@@ -0,0 +1,123 @@
+module narr_flow::story {
+ use std::string;
+ use narr_flow::token;
+
+ /// 段落对象
+ public struct Paragraph has copy, drop, store {
+ content: string::String,
+ author: address,
+ votes: u64,
+ }
+
+ /// 一本书对象
+ public struct Book has key, store {
+ id: UID,
+ title: string::String,
+ author: address,
+ status: u8, // 0=进行中, 1=已归档
+ index: u64, // 第几本书
+ paragraphs: vector,
+ }
+
+ /// 故事列表对象(全局唯一,shared)
+ public struct StoryBook has key {
+ id: UID,
+ books: vector,
+ current_book_index: u64, // 当前活跃 Book 的下标
+ }
+
+ /// 初始化 StoryBook(只需一次,部署后调用)
+ public entry fun init_story_book(ctx: &mut TxContext) {
+ let book = StoryBook { id: object::new(ctx),
+ books: vector::empty(),
+ current_book_index: 0 };
+ transfer::share_object(book);
+ }
+
+ /// 开启新书(不再需要归档票数阈值)
+ public entry fun start_new_book(
+ story_book: &mut StoryBook,
+ title: string::String,
+ author: address,
+ treasury: &mut token::Treasury,
+ ctx: &mut TxContext
+ ) {
+ let book = Book {
+ id: object::new(ctx),
+ title,
+ author,
+ status: 0,
+ index: vector::length(&story_book.books) + 1,
+ paragraphs: vector::empty(),
+ };
+ vector::push_back(&mut story_book.books, book);
+ story_book.current_book_index = vector::length(&story_book.books) - 1;
+ // 奖励
+ let idx = story_book.current_book_index;
+ let book_ref = vector::borrow(&story_book.books, idx);
+ token::reward_start_new_book(treasury, object::id(book_ref), ctx);
+ }
+
+ /// 添加段落
+ public entry fun add_paragraph(
+ story_book: &mut StoryBook,
+ content: string::String,
+ author: address,
+ treasury: &mut token::Treasury,
+ ctx: &mut TxContext
+ ) {
+ // 限制内容最大字符数(2000字符)
+ assert!(string::length(&content) <= 2000, 110); // 超出2000字符报错
+ let idx = story_book.current_book_index;
+ let book_ref = vector::borrow_mut(&mut story_book.books, idx);
+ assert!(book_ref.status == 0, 100); // 只能给进行中的书添加段落
+ let para = Paragraph { content, author, votes: 0 };
+ vector::push_back(&mut book_ref.paragraphs, para);
+ // 奖励
+ token::reward_paragraph_addition(treasury, object::id(book_ref), ctx);
+ }
+
+ /// 投票
+ public entry fun vote_paragraph(
+ story_book: &mut StoryBook,
+ para_index: u64
+ ) {
+ let idx = story_book.current_book_index;
+ let book_ref = vector::borrow_mut(&mut story_book.books, idx);
+ assert!(book_ref.status == 0, 120); // 只能对进行中的书投票
+ let para_ref = vector::borrow_mut(&mut book_ref.paragraphs, para_index);
+ para_ref.votes = para_ref.votes + 1;
+ }
+
+ /// 归档书本(段落数达到10时可归档)
+ public entry fun archive_book(
+ story_book: &mut StoryBook,
+ treasury: &mut token::Treasury,
+ ctx: &mut TxContext
+ ) {
+ let idx = story_book.current_book_index;
+ let book_ref = vector::borrow_mut(&mut story_book.books, idx);
+ assert!(book_ref.status == 0, 130);
+ assert!(vector::length(&book_ref.paragraphs) >= 10, 131); // 段落数未达10不能归档
+ book_ref.status = 1;
+ // 归档后 current_book_index 指向无效,需前端检测后自动开启新书
+ story_book.current_book_index = 0;
+ // 奖励
+ token::reward_archive(treasury, object::id(book_ref), ctx);
+ }
+
+ /// 查询所有 Book
+ public fun get_all_books(story_book: &StoryBook): &vector {
+ &story_book.books
+ }
+
+ /// 查询 Book 下所有段落
+ public fun get_all_paragraphs(book: &Book): &vector {
+ &book.paragraphs
+ }
+
+ /// 查询当前活跃 Book 的下标
+ public fun get_current_book_index(story_book: &StoryBook): u64 {
+ story_book.current_book_index
+ }
+}
\ No newline at end of file
diff --git a/move202503/DudeGuuud/code/move/sources/token.move b/move202503/DudeGuuud/code/move/sources/token.move
new file mode 100644
index 00000000..961b011e
--- /dev/null
+++ b/move202503/DudeGuuud/code/move/sources/token.move
@@ -0,0 +1,161 @@
+module narr_flow::token {
+ use sui::coin::{Self, Coin};
+ use sui::balance::{Self, Balance};
+ use sui::event;
+ use std::option::some;
+ use sui::url;
+ use sui::url::Url;
+ // 错误代码
+ const EInsufficientBalance: u64 = 0;
+ const ENotAuthorized: u64 = 1;
+ const EInvalidAmount: u64 = 2;
+
+ // === 类型 ===
+
+ // TOKEN 代币类型
+ public struct TOKEN has drop {}
+
+ // 平台财务管理结构
+ public struct Treasury has key {
+ id: UID,
+ balance: Balance,
+ admin: address
+ }
+
+ // === 事件 ===
+
+ public struct TokensRewarded has copy, drop {
+ receiver: address,
+ amount: u64,
+ reward_type: u8,
+ story_id: Option
+ }
+
+ // 奖励类型常量
+ const REWARD_TYPE_START_NEW_BOOK: u8 = 0;
+ const REWARD_TYPE_PARAGRAPH_ADDITION: u8 = 1;
+ const REWARD_TYPE_ARCHIVE: u8 = 2;
+
+ // === 初始化函数 ===
+
+ // 一次性初始化函数,创建代币并设置财库
+ fun init(witness: TOKEN, ctx: &mut TxContext) {
+ let sender = tx_context::sender(ctx);
+ let url = url::new_unsafe_from_bytes(b"https://raw.githubusercontent.com/DudeGuuud/NarrFlow-Web3/refs/heads/dev/public/logo_white.png");
+ let yes = some(url);
+ // 创建TOKEN代币
+ let (mut treasury_cap, metadata) = coin::create_currency(
+ witness, // 见证者模式
+ 9, // 小数位
+ b"NARR", // 符号
+ b"NARR", // 名称
+ b"Coin For Narrflow", // 描述
+ yes, // 图标URL
+ ctx
+ );
+
+ // 创建平台财库
+ let mut treasury = Treasury {
+ id: object::new(ctx),
+ balance: balance::zero(),
+ admin: sender
+ };
+
+ // 初始铸造1,000,000,000枚代币到财库中
+ let initial_supply = 1_000_000_000_000_000_000; // 1 billion tokens with 9 decimals
+ let minted_coins = coin::mint(&mut treasury_cap, initial_supply, ctx);
+ let minted_balance = coin::into_balance(minted_coins);
+ balance::join(&mut treasury.balance, minted_balance);
+
+ // 转移资产给部署者
+ transfer::share_object(treasury);
+ transfer::public_transfer(treasury_cap, sender);
+ transfer::public_transfer(metadata, sender);
+ }
+
+ // === 公共函数 ===
+
+ // 奖励开启新书
+ public fun reward_start_new_book(
+ treasury: &mut Treasury,
+ story_id: ID,
+ ctx: &mut TxContext
+ ) {
+ let receiver = tx_context::sender(ctx);
+ let reward_amount = 100_000_000_000; // 100 tokens with 9 decimals
+ let reward_coins = extract_from_treasury(treasury, reward_amount, ctx);
+ transfer::public_transfer(reward_coins, receiver);
+ event::emit(TokensRewarded {
+ receiver,
+ amount: reward_amount,
+ reward_type: REWARD_TYPE_START_NEW_BOOK,
+ story_id: option::some(story_id)
+ });
+ }
+
+ // 奖励段落添加
+ public fun reward_paragraph_addition(
+ treasury: &mut Treasury,
+ story_id: ID,
+ ctx: &mut TxContext
+ ) {
+ let receiver = tx_context::sender(ctx);
+ let reward_amount = 20_000_000_000; // 20 tokens with 9 decimals
+ let reward_coins = extract_from_treasury(treasury, reward_amount, ctx);
+ transfer::public_transfer(reward_coins, receiver);
+ event::emit(TokensRewarded {
+ receiver,
+ amount: reward_amount,
+ reward_type: REWARD_TYPE_PARAGRAPH_ADDITION,
+ story_id: option::some(story_id)
+ });
+ }
+
+ // 奖励归档
+ public fun reward_archive(
+ treasury: &mut Treasury,
+ story_id: ID,
+ ctx: &mut TxContext
+ ) {
+ let receiver = tx_context::sender(ctx);
+ let reward_amount = 50_000_000_000; // 50 tokens with 9 decimals
+ let reward_coins = extract_from_treasury(treasury, reward_amount, ctx);
+ transfer::public_transfer(reward_coins, receiver);
+ event::emit(TokensRewarded {
+ receiver,
+ amount: reward_amount,
+ reward_type: REWARD_TYPE_ARCHIVE,
+ story_id: option::some(story_id)
+ });
+ }
+
+ // === 内部辅助函数 ===
+
+ // 从财库中提取代币
+ fun extract_from_treasury(
+ treasury: &mut Treasury,
+ amount: u64,
+ ctx: &mut TxContext
+ ): Coin {
+ // 检查财库余额是否足够
+ assert!(balance::value(&treasury.balance) >= amount, EInsufficientBalance);
+
+ // 从财库余额中提取代币
+ let extracted_balance = balance::split(&mut treasury.balance, amount);
+
+ // 将余额转换为硬币对象并返回
+ coin::from_balance(extracted_balance, ctx)
+ }
+
+ // === 访问器函数 ===
+
+ // 获取财库余额
+ public fun get_treasury_balance(treasury: &Treasury): u64 {
+ balance::value(&treasury.balance)
+ }
+
+ // 检查地址是否为财库管理员
+ public fun is_admin(treasury: &Treasury, addr: address): bool {
+ addr == treasury.admin
+ }
+}
\ No newline at end of file
diff --git a/move202503/DudeGuuud/code/package.json b/move202503/DudeGuuud/code/package.json
new file mode 100644
index 00000000..f8f24364
--- /dev/null
+++ b/move202503/DudeGuuud/code/package.json
@@ -0,0 +1,61 @@
+{
+ "name": "demo",
+ "private": true,
+ "version": "0.0.0",
+ "type": "module",
+ "scripts": {
+ "dev": "vite",
+ "build": "tsc -b && vite build",
+ "lint": "eslint . --ext .ts,.tsx",
+ "lint:fix": "eslint . --ext .ts,.tsx --fix",
+ "format": "prettier --write \"src/**/*.{ts,tsx,css,md}\"",
+ "preview": "vite preview",
+ "tailwind": "tailwindcss init -p"
+ },
+ "dependencies": {
+ "@ant-design/icons": "^6.0.0",
+ "@mysten/dapp-kit": "^0.15.6",
+ "@mysten/sui": "^1.28.0",
+ "@mysten/wallet-standard": "^0.14.5",
+ "@react-spring/web": "^9.7.5",
+ "@reduxjs/toolkit": "^2.7.0",
+ "@suiet/wallet-kit": "^0.3.4",
+ "@supabase/supabase-js": "^2.49.4",
+ "@tailwindcss/forms": "^0.5.10",
+ "@tanstack/react-query": "^5.74.4",
+ "framer-motion": "^12.7.4",
+ "gsap": "^3.12.7",
+ "lucide-react": "^0.488.0",
+ "lz-string": "^1.5.0",
+ "react": "^18.3.1",
+ "react-dom": "^18.3.1",
+ "react-icons": "^5.5.0",
+ "react-redux": "^9.2.0",
+ "react-router-dom": "^6.30.0"
+ },
+ "devDependencies": {
+ "@eslint/js": "^9.25.1",
+ "@types/node": "^22.14.1",
+ "@types/react": "^19.1.2",
+ "@types/react-dom": "^19.1.2",
+ "@types/react-router-dom": "^5.3.3",
+ "@typescript-eslint/eslint-plugin": "^8.31.0",
+ "@typescript-eslint/parser": "^8.31.0",
+ "@vitejs/plugin-react": "^4.4.1",
+ "autoprefixer": "^10.4.21",
+ "eslint": "^9.25.1",
+ "eslint-config-prettier": "^10.1.2",
+ "eslint-plugin-prettier": "^5.2.6",
+ "eslint-plugin-react-hooks": "^5.2.0",
+ "eslint-plugin-react-refresh": "^0.4.20",
+ "globals": "^15.15.0",
+ "husky": "^9.1.7",
+ "lint-staged": "^15.5.1",
+ "postcss": "^8.5.3",
+ "prettier": "^3.5.3",
+ "tailwindcss": "^3.4.17",
+ "typescript": "~5.7.3",
+ "typescript-eslint": "^8.31.0",
+ "vite": "5.2.10"
+ }
+}
diff --git a/move202503/DudeGuuud/code/pnpm-lock.yaml b/move202503/DudeGuuud/code/pnpm-lock.yaml
new file mode 100644
index 00000000..336bb3a0
--- /dev/null
+++ b/move202503/DudeGuuud/code/pnpm-lock.yaml
@@ -0,0 +1,6780 @@
+lockfileVersion: '9.0'
+
+settings:
+ autoInstallPeers: true
+ excludeLinksFromLockfile: false
+
+importers:
+
+ .:
+ dependencies:
+ '@ant-design/icons':
+ specifier: ^6.0.0
+ version: 6.0.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@mysten/dapp-kit':
+ specifier: ^0.15.6
+ version: 0.15.6(@tanstack/react-query@5.74.4(react@18.3.1))(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(immer@10.1.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.7.3)
+ '@mysten/sui':
+ specifier: ^1.28.0
+ version: 1.28.0(typescript@5.7.3)
+ '@mysten/wallet-standard':
+ specifier: ^0.14.5
+ version: 0.14.5(typescript@5.7.3)
+ '@react-spring/web':
+ specifier: ^9.7.5
+ version: 9.7.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@reduxjs/toolkit':
+ specifier: ^2.7.0
+ version: 2.7.0(react-redux@9.2.0(@types/react@19.1.2)(react@18.3.1)(redux@5.0.1))(react@18.3.1)
+ '@suiet/wallet-kit':
+ specifier: ^0.3.4
+ version: 0.3.4(@mysten/sui@1.28.0(typescript@5.7.3))(@types/react@19.1.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.7.3)
+ '@supabase/supabase-js':
+ specifier: ^2.49.4
+ version: 2.49.4
+ '@tailwindcss/forms':
+ specifier: ^0.5.10
+ version: 0.5.10(tailwindcss@3.4.17)
+ '@tanstack/react-query':
+ specifier: ^5.74.4
+ version: 5.74.4(react@18.3.1)
+ framer-motion:
+ specifier: ^12.7.4
+ version: 12.7.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ gsap:
+ specifier: ^3.12.7
+ version: 3.12.7
+ lucide-react:
+ specifier: ^0.488.0
+ version: 0.488.0(react@18.3.1)
+ lz-string:
+ specifier: ^1.5.0
+ version: 1.5.0
+ react:
+ specifier: ^18.3.1
+ version: 18.3.1
+ react-dom:
+ specifier: ^18.3.1
+ version: 18.3.1(react@18.3.1)
+ react-icons:
+ specifier: ^5.5.0
+ version: 5.5.0(react@18.3.1)
+ react-redux:
+ specifier: ^9.2.0
+ version: 9.2.0(@types/react@19.1.2)(react@18.3.1)(redux@5.0.1)
+ react-router-dom:
+ specifier: ^6.30.0
+ version: 6.30.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ devDependencies:
+ '@eslint/js':
+ specifier: ^9.25.1
+ version: 9.25.1
+ '@types/node':
+ specifier: ^22.14.1
+ version: 22.14.1
+ '@types/react':
+ specifier: ^19.1.2
+ version: 19.1.2
+ '@types/react-dom':
+ specifier: ^19.1.2
+ version: 19.1.2(@types/react@19.1.2)
+ '@types/react-router-dom':
+ specifier: ^5.3.3
+ version: 5.3.3
+ '@typescript-eslint/eslint-plugin':
+ specifier: ^8.31.0
+ version: 8.31.0(@typescript-eslint/parser@8.31.0(eslint@9.25.1(jiti@1.21.7))(typescript@5.7.3))(eslint@9.25.1(jiti@1.21.7))(typescript@5.7.3)
+ '@typescript-eslint/parser':
+ specifier: ^8.31.0
+ version: 8.31.0(eslint@9.25.1(jiti@1.21.7))(typescript@5.7.3)
+ '@vitejs/plugin-react':
+ specifier: ^4.4.1
+ version: 4.4.1(vite@5.2.10(@types/node@22.14.1))
+ autoprefixer:
+ specifier: ^10.4.21
+ version: 10.4.21(postcss@8.5.3)
+ eslint:
+ specifier: ^9.25.1
+ version: 9.25.1(jiti@1.21.7)
+ eslint-config-prettier:
+ specifier: ^10.1.2
+ version: 10.1.2(eslint@9.25.1(jiti@1.21.7))
+ eslint-plugin-prettier:
+ specifier: ^5.2.6
+ version: 5.2.6(eslint-config-prettier@10.1.2(eslint@9.25.1(jiti@1.21.7)))(eslint@9.25.1(jiti@1.21.7))(prettier@3.5.3)
+ eslint-plugin-react-hooks:
+ specifier: ^5.2.0
+ version: 5.2.0(eslint@9.25.1(jiti@1.21.7))
+ eslint-plugin-react-refresh:
+ specifier: ^0.4.20
+ version: 0.4.20(eslint@9.25.1(jiti@1.21.7))
+ globals:
+ specifier: ^15.15.0
+ version: 15.15.0
+ husky:
+ specifier: ^9.1.7
+ version: 9.1.7
+ lint-staged:
+ specifier: ^15.5.1
+ version: 15.5.1
+ postcss:
+ specifier: ^8.5.3
+ version: 8.5.3
+ prettier:
+ specifier: ^3.5.3
+ version: 3.5.3
+ tailwindcss:
+ specifier: ^3.4.17
+ version: 3.4.17
+ typescript:
+ specifier: ~5.7.3
+ version: 5.7.3
+ typescript-eslint:
+ specifier: ^8.31.0
+ version: 8.31.0(eslint@9.25.1(jiti@1.21.7))(typescript@5.7.3)
+ vite:
+ specifier: 5.2.10
+ version: 5.2.10(@types/node@22.14.1)
+
+packages:
+
+ '@0no-co/graphql.web@1.1.2':
+ resolution: {integrity: sha512-N2NGsU5FLBhT8NZ+3l2YrzZSHITjNXNuDhC4iDiikv0IujaJ0Xc6xIxQZ/Ek3Cb+rgPjnLHYyJm11tInuJn+cw==}
+ peerDependencies:
+ graphql: ^14.0.0 || ^15.0.0 || ^16.0.0
+ peerDependenciesMeta:
+ graphql:
+ optional: true
+
+ '@0no-co/graphqlsp@1.12.16':
+ resolution: {integrity: sha512-B5pyYVH93Etv7xjT6IfB7QtMBdaaC07yjbhN6v8H7KgFStMkPvi+oWYBTibMFRMY89qwc9H8YixXg8SXDVgYWw==}
+ peerDependencies:
+ graphql: ^15.5.0 || ^16.0.0 || ^17.0.0
+ typescript: ^5.0.0
+
+ '@alloc/quick-lru@5.2.0':
+ resolution: {integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==}
+ engines: {node: '>=10'}
+
+ '@ampproject/remapping@2.3.0':
+ resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==}
+ engines: {node: '>=6.0.0'}
+
+ '@ant-design/colors@8.0.0':
+ resolution: {integrity: sha512-6YzkKCw30EI/E9kHOIXsQDHmMvTllT8STzjMb4K2qzit33RW2pqCJP0sk+hidBntXxE+Vz4n1+RvCTfBw6OErw==}
+
+ '@ant-design/fast-color@3.0.0':
+ resolution: {integrity: sha512-eqvpP7xEDm2S7dUzl5srEQCBTXZMmY3ekf97zI+M2DHOYyKdJGH0qua0JACHTqbkRnD/KHFQP9J1uMJ/XWVzzA==}
+ engines: {node: '>=8.x'}
+
+ '@ant-design/icons-svg@4.4.2':
+ resolution: {integrity: sha512-vHbT+zJEVzllwP+CM+ul7reTEfBR0vgxFe7+lREAsAA7YGsYpboiq2sQNeQeRvh09GfQgs/GyFEvZpJ9cLXpXA==}
+
+ '@ant-design/icons@6.0.0':
+ resolution: {integrity: sha512-o0aCCAlHc1o4CQcapAwWzHeaW2x9F49g7P3IDtvtNXgHowtRWYb7kiubt8sQPFvfVIVU/jLw2hzeSlNt0FU+Uw==}
+ engines: {node: '>=8'}
+ peerDependencies:
+ react: '>=16.0.0'
+ react-dom: '>=16.0.0'
+
+ '@babel/code-frame@7.26.2':
+ resolution: {integrity: sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/compat-data@7.26.8':
+ resolution: {integrity: sha512-oH5UPLMWR3L2wEFLnFJ1TZXqHufiTKAiLfqw5zkhS4dKXLJ10yVztfil/twG8EDTA4F/tvVNw9nOl4ZMslB8rQ==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/core@7.26.10':
+ resolution: {integrity: sha512-vMqyb7XCDMPvJFFOaT9kxtiRh42GwlZEg1/uIgtZshS5a/8OaduUfCi7kynKgc3Tw/6Uo2D+db9qBttghhmxwQ==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/generator@7.27.0':
+ resolution: {integrity: sha512-VybsKvpiN1gU1sdMZIp7FcqphVVKEwcuj02x73uvcHE0PTihx1nlBcowYWhDwjpoAXRv43+gDzyggGnn1XZhVw==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/helper-annotate-as-pure@7.25.9':
+ resolution: {integrity: sha512-gv7320KBUFJz1RnylIg5WWYPRXKZ884AGkYpgpWW02TH66Dl+HaC1t1CKd0z3R4b6hdYEcmrNZHUmfCP+1u3/g==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/helper-compilation-targets@7.27.0':
+ resolution: {integrity: sha512-LVk7fbXml0H2xH34dFzKQ7TDZ2G4/rVTOrq9V+icbbadjbVxxeFeDsNHv2SrZeWoA+6ZiTyWYWtScEIW07EAcA==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/helper-create-class-features-plugin@7.27.0':
+ resolution: {integrity: sha512-vSGCvMecvFCd/BdpGlhpXYNhhC4ccxyvQWpbGL4CWbvfEoLFWUZuSuf7s9Aw70flgQF+6vptvgK2IfOnKlRmBg==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0
+
+ '@babel/helper-create-regexp-features-plugin@7.27.0':
+ resolution: {integrity: sha512-fO8l08T76v48BhpNRW/nQ0MxfnSdoSKUJBMjubOAYffsVuGG5qOfMq7N6Es7UJvi7Y8goXXo07EfcHZXDPuELQ==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0
+
+ '@babel/helper-define-polyfill-provider@0.6.4':
+ resolution: {integrity: sha512-jljfR1rGnXXNWnmQg2K3+bvhkxB51Rl32QRaOTuwwjviGrHzIbSc8+x9CpraDtbT7mfyjXObULP4w/adunNwAw==}
+ peerDependencies:
+ '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0
+
+ '@babel/helper-member-expression-to-functions@7.25.9':
+ resolution: {integrity: sha512-wbfdZ9w5vk0C0oyHqAJbc62+vet5prjj01jjJ8sKn3j9h3MQQlflEdXYvuqRWjHnM12coDEqiC1IRCi0U/EKwQ==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/helper-module-imports@7.25.9':
+ resolution: {integrity: sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/helper-module-transforms@7.26.0':
+ resolution: {integrity: sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0
+
+ '@babel/helper-optimise-call-expression@7.25.9':
+ resolution: {integrity: sha512-FIpuNaz5ow8VyrYcnXQTDRGvV6tTjkNtCK/RYNDXGSLlUD6cBuQTSw43CShGxjvfBTfcUA/r6UhUCbtYqkhcuQ==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/helper-plugin-utils@7.26.5':
+ resolution: {integrity: sha512-RS+jZcRdZdRFzMyr+wcsaqOmld1/EqTghfaBGQQd/WnRdzdlvSZ//kF7U8VQTxf1ynZ4cjUcYgjVGx13ewNPMg==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/helper-remap-async-to-generator@7.25.9':
+ resolution: {integrity: sha512-IZtukuUeBbhgOcaW2s06OXTzVNJR0ybm4W5xC1opWFFJMZbwRj5LCk+ByYH7WdZPZTt8KnFwA8pvjN2yqcPlgw==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0
+
+ '@babel/helper-replace-supers@7.26.5':
+ resolution: {integrity: sha512-bJ6iIVdYX1YooY2X7w1q6VITt+LnUILtNk7zT78ykuwStx8BauCzxvFqFaHjOpW1bVnSUM1PN1f0p5P21wHxvg==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0
+
+ '@babel/helper-skip-transparent-expression-wrappers@7.25.9':
+ resolution: {integrity: sha512-K4Du3BFa3gvyhzgPcntrkDgZzQaq6uozzcpGbOO1OEJaI+EJdqWIMTLgFgQf6lrfiDFo5FU+BxKepI9RmZqahA==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/helper-string-parser@7.25.9':
+ resolution: {integrity: sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/helper-validator-identifier@7.25.9':
+ resolution: {integrity: sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/helper-validator-option@7.25.9':
+ resolution: {integrity: sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/helper-wrap-function@7.25.9':
+ resolution: {integrity: sha512-ETzz9UTjQSTmw39GboatdymDq4XIQbR8ySgVrylRhPOFpsd+JrKHIuF0de7GCWmem+T4uC5z7EZguod7Wj4A4g==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/helpers@7.27.0':
+ resolution: {integrity: sha512-U5eyP/CTFPuNE3qk+WZMxFkp/4zUzdceQlfzf7DdGdhp+Fezd7HD+i8Y24ZuTMKX3wQBld449jijbGq6OdGNQg==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/parser@7.27.0':
+ resolution: {integrity: sha512-iaepho73/2Pz7w2eMS0Q5f83+0RKI7i4xmiYeBmDzfRVbQtTOG7Ts0S4HzJVsTMGI9keU8rNfuZr8DKfSt7Yyg==}
+ engines: {node: '>=6.0.0'}
+ hasBin: true
+
+ '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.25.9':
+ resolution: {integrity: sha512-ZkRyVkThtxQ/J6nv3JFYv1RYY+JT5BvU0y3k5bWrmuG4woXypRa4PXmm9RhOwodRkYFWqC0C0cqcJ4OqR7kW+g==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0
+
+ '@babel/plugin-bugfix-safari-class-field-initializer-scope@7.25.9':
+ resolution: {integrity: sha512-MrGRLZxLD/Zjj0gdU15dfs+HH/OXvnw/U4jJD8vpcP2CJQapPEv1IWwjc/qMg7ItBlPwSv1hRBbb7LeuANdcnw==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0
+
+ '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.25.9':
+ resolution: {integrity: sha512-2qUwwfAFpJLZqxd02YW9btUCZHl+RFvdDkNfZwaIJrvB8Tesjsk8pEQkTvGwZXLqXUx/2oyY3ySRhm6HOXuCug==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0
+
+ '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.25.9':
+ resolution: {integrity: sha512-6xWgLZTJXwilVjlnV7ospI3xi+sl8lN8rXXbBD6vYn3UYDlGsag8wrZkKcSI8G6KgqKP7vNFaDgeDnfAABq61g==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.13.0
+
+ '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.25.9':
+ resolution: {integrity: sha512-aLnMXYPnzwwqhYSCyXfKkIkYgJ8zv9RK+roo9DkTXz38ynIhd9XCbN08s3MGvqL2MYGVUGdRQLL/JqBIeJhJBg==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0
+
+ '@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2':
+ resolution: {integrity: sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-syntax-import-assertions@7.26.0':
+ resolution: {integrity: sha512-QCWT5Hh830hK5EQa7XzuqIkQU9tT/whqbDz7kuaZMHFl1inRRg7JnuAEOQ0Ur0QUl0NufCk1msK2BeY79Aj/eg==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-syntax-import-attributes@7.26.0':
+ resolution: {integrity: sha512-e2dttdsJ1ZTpi3B9UYGLw41hifAubg19AtCu/2I/F1QNVclOBr1dYpTdmdyZ84Xiz43BS/tCUkMAZNLv12Pi+A==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-syntax-jsx@7.25.9':
+ resolution: {integrity: sha512-ld6oezHQMZsZfp6pWtbjaNDF2tiiCYYDqQszHt5VV437lewP9aSi2Of99CK0D0XB21k7FLgnLcmQKyKzynfeAA==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-syntax-typescript@7.25.9':
+ resolution: {integrity: sha512-hjMgRy5hb8uJJjUcdWunWVcoi9bGpJp8p5Ol1229PoN6aytsLwNMgmdftO23wnCLMfVmTwZDWMPNq/D1SY60JQ==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-syntax-unicode-sets-regex@7.18.6':
+ resolution: {integrity: sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0
+
+ '@babel/plugin-transform-arrow-functions@7.25.9':
+ resolution: {integrity: sha512-6jmooXYIwn9ca5/RylZADJ+EnSxVUS5sjeJ9UPk6RWRzXCmOJCy6dqItPJFpw2cuCangPK4OYr5uhGKcmrm5Qg==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-async-generator-functions@7.26.8':
+ resolution: {integrity: sha512-He9Ej2X7tNf2zdKMAGOsmg2MrFc+hfoAhd3po4cWfo/NWjzEAKa0oQruj1ROVUdl0e6fb6/kE/G3SSxE0lRJOg==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-async-to-generator@7.25.9':
+ resolution: {integrity: sha512-NT7Ejn7Z/LjUH0Gv5KsBCxh7BH3fbLTV0ptHvpeMvrt3cPThHfJfst9Wrb7S8EvJ7vRTFI7z+VAvFVEQn/m5zQ==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-block-scoped-functions@7.26.5':
+ resolution: {integrity: sha512-chuTSY+hq09+/f5lMj8ZSYgCFpppV2CbYrhNFJ1BFoXpiWPnnAb7R0MqrafCpN8E1+YRrtM1MXZHJdIx8B6rMQ==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-block-scoping@7.27.0':
+ resolution: {integrity: sha512-u1jGphZ8uDI2Pj/HJj6YQ6XQLZCNjOlprjxB5SVz6rq2T6SwAR+CdrWK0CP7F+9rDVMXdB0+r6Am5G5aobOjAQ==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-class-properties@7.25.9':
+ resolution: {integrity: sha512-bbMAII8GRSkcd0h0b4X+36GksxuheLFjP65ul9w6C3KgAamI3JqErNgSrosX6ZPj+Mpim5VvEbawXxJCyEUV3Q==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-class-static-block@7.26.0':
+ resolution: {integrity: sha512-6J2APTs7BDDm+UMqP1useWqhcRAXo0WIoVj26N7kPFB6S73Lgvyka4KTZYIxtgYXiN5HTyRObA72N2iu628iTQ==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.12.0
+
+ '@babel/plugin-transform-classes@7.25.9':
+ resolution: {integrity: sha512-mD8APIXmseE7oZvZgGABDyM34GUmK45Um2TXiBUt7PnuAxrgoSVf123qUzPxEr/+/BHrRn5NMZCdE2m/1F8DGg==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-computed-properties@7.25.9':
+ resolution: {integrity: sha512-HnBegGqXZR12xbcTHlJ9HGxw1OniltT26J5YpfruGqtUHlz/xKf/G2ak9e+t0rVqrjXa9WOhvYPz1ERfMj23AA==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-destructuring@7.25.9':
+ resolution: {integrity: sha512-WkCGb/3ZxXepmMiX101nnGiU+1CAdut8oHyEOHxkKuS1qKpU2SMXE2uSvfz8PBuLd49V6LEsbtyPhWC7fnkgvQ==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-dotall-regex@7.25.9':
+ resolution: {integrity: sha512-t7ZQ7g5trIgSRYhI9pIJtRl64KHotutUJsh4Eze5l7olJv+mRSg4/MmbZ0tv1eeqRbdvo/+trvJD/Oc5DmW2cA==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-duplicate-keys@7.25.9':
+ resolution: {integrity: sha512-LZxhJ6dvBb/f3x8xwWIuyiAHy56nrRG3PeYTpBkkzkYRRQ6tJLu68lEF5VIqMUZiAV7a8+Tb78nEoMCMcqjXBw==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-duplicate-named-capturing-groups-regex@7.25.9':
+ resolution: {integrity: sha512-0UfuJS0EsXbRvKnwcLjFtJy/Sxc5J5jhLHnFhy7u4zih97Hz6tJkLU+O+FMMrNZrosUPxDi6sYxJ/EA8jDiAog==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0
+
+ '@babel/plugin-transform-dynamic-import@7.25.9':
+ resolution: {integrity: sha512-GCggjexbmSLaFhqsojeugBpeaRIgWNTcgKVq/0qIteFEqY2A+b9QidYadrWlnbWQUrW5fn+mCvf3tr7OeBFTyg==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-exponentiation-operator@7.26.3':
+ resolution: {integrity: sha512-7CAHcQ58z2chuXPWblnn1K6rLDnDWieghSOEmqQsrBenH0P9InCUtOJYD89pvngljmZlJcz3fcmgYsXFNGa1ZQ==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-export-namespace-from@7.25.9':
+ resolution: {integrity: sha512-2NsEz+CxzJIVOPx2o9UsW1rXLqtChtLoVnwYHHiB04wS5sgn7mrV45fWMBX0Kk+ub9uXytVYfNP2HjbVbCB3Ww==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-for-of@7.26.9':
+ resolution: {integrity: sha512-Hry8AusVm8LW5BVFgiyUReuoGzPUpdHQQqJY5bZnbbf+ngOHWuCuYFKw/BqaaWlvEUrF91HMhDtEaI1hZzNbLg==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-function-name@7.25.9':
+ resolution: {integrity: sha512-8lP+Yxjv14Vc5MuWBpJsoUCd3hD6V9DgBon2FVYL4jJgbnVQ9fTgYmonchzZJOVNgzEgbxp4OwAf6xz6M/14XA==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-json-strings@7.25.9':
+ resolution: {integrity: sha512-xoTMk0WXceiiIvsaquQQUaLLXSW1KJ159KP87VilruQm0LNNGxWzahxSS6T6i4Zg3ezp4vA4zuwiNUR53qmQAw==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-literals@7.25.9':
+ resolution: {integrity: sha512-9N7+2lFziW8W9pBl2TzaNht3+pgMIRP74zizeCSrtnSKVdUl8mAjjOP2OOVQAfZ881P2cNjDj1uAMEdeD50nuQ==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-logical-assignment-operators@7.25.9':
+ resolution: {integrity: sha512-wI4wRAzGko551Y8eVf6iOY9EouIDTtPb0ByZx+ktDGHwv6bHFimrgJM/2T021txPZ2s4c7bqvHbd+vXG6K948Q==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-member-expression-literals@7.25.9':
+ resolution: {integrity: sha512-PYazBVfofCQkkMzh2P6IdIUaCEWni3iYEerAsRWuVd8+jlM1S9S9cz1dF9hIzyoZ8IA3+OwVYIp9v9e+GbgZhA==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-modules-amd@7.25.9':
+ resolution: {integrity: sha512-g5T11tnI36jVClQlMlt4qKDLlWnG5pP9CSM4GhdRciTNMRgkfpo5cR6b4rGIOYPgRRuFAvwjPQ/Yk+ql4dyhbw==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-modules-commonjs@7.26.3':
+ resolution: {integrity: sha512-MgR55l4q9KddUDITEzEFYn5ZsGDXMSsU9E+kh7fjRXTIC3RHqfCo8RPRbyReYJh44HQ/yomFkqbOFohXvDCiIQ==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-modules-systemjs@7.25.9':
+ resolution: {integrity: sha512-hyss7iIlH/zLHaehT+xwiymtPOpsiwIIRlCAOwBB04ta5Tt+lNItADdlXw3jAWZ96VJ2jlhl/c+PNIQPKNfvcA==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-modules-umd@7.25.9':
+ resolution: {integrity: sha512-bS9MVObUgE7ww36HEfwe6g9WakQ0KF07mQF74uuXdkoziUPfKyu/nIm663kz//e5O1nPInPFx36z7WJmJ4yNEw==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-named-capturing-groups-regex@7.25.9':
+ resolution: {integrity: sha512-oqB6WHdKTGl3q/ItQhpLSnWWOpjUJLsOCLVyeFgeTktkBSCiurvPOsyt93gibI9CmuKvTUEtWmG5VhZD+5T/KA==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0
+
+ '@babel/plugin-transform-new-target@7.25.9':
+ resolution: {integrity: sha512-U/3p8X1yCSoKyUj2eOBIx3FOn6pElFOKvAAGf8HTtItuPyB+ZeOqfn+mvTtg9ZlOAjsPdK3ayQEjqHjU/yLeVQ==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-nullish-coalescing-operator@7.26.6':
+ resolution: {integrity: sha512-CKW8Vu+uUZneQCPtXmSBUC6NCAUdya26hWCElAWh5mVSlSRsmiCPUUDKb3Z0szng1hiAJa098Hkhg9o4SE35Qw==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-numeric-separator@7.25.9':
+ resolution: {integrity: sha512-TlprrJ1GBZ3r6s96Yq8gEQv82s8/5HnCVHtEJScUj90thHQbwe+E5MLhi2bbNHBEJuzrvltXSru+BUxHDoog7Q==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-object-rest-spread@7.25.9':
+ resolution: {integrity: sha512-fSaXafEE9CVHPweLYw4J0emp1t8zYTXyzN3UuG+lylqkvYd7RMrsOQ8TYx5RF231be0vqtFC6jnx3UmpJmKBYg==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-object-super@7.25.9':
+ resolution: {integrity: sha512-Kj/Gh+Rw2RNLbCK1VAWj2U48yxxqL2x0k10nPtSdRa0O2xnHXalD0s+o1A6a0W43gJ00ANo38jxkQreckOzv5A==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-optional-catch-binding@7.25.9':
+ resolution: {integrity: sha512-qM/6m6hQZzDcZF3onzIhZeDHDO43bkNNlOX0i8n3lR6zLbu0GN2d8qfM/IERJZYauhAHSLHy39NF0Ctdvcid7g==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-optional-chaining@7.25.9':
+ resolution: {integrity: sha512-6AvV0FsLULbpnXeBjrY4dmWF8F7gf8QnvTEoO/wX/5xm/xE1Xo8oPuD3MPS+KS9f9XBEAWN7X1aWr4z9HdOr7A==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-parameters@7.25.9':
+ resolution: {integrity: sha512-wzz6MKwpnshBAiRmn4jR8LYz/g8Ksg0o80XmwZDlordjwEk9SxBzTWC7F5ef1jhbrbOW2DJ5J6ayRukrJmnr0g==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-private-methods@7.25.9':
+ resolution: {integrity: sha512-D/JUozNpQLAPUVusvqMxyvjzllRaF8/nSrP1s2YGQT/W4LHK4xxsMcHjhOGTS01mp9Hda8nswb+FblLdJornQw==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-private-property-in-object@7.25.9':
+ resolution: {integrity: sha512-Evf3kcMqzXA3xfYJmZ9Pg1OvKdtqsDMSWBDzZOPLvHiTt36E75jLDQo5w1gtRU95Q4E5PDttrTf25Fw8d/uWLw==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-property-literals@7.25.9':
+ resolution: {integrity: sha512-IvIUeV5KrS/VPavfSM/Iu+RE6llrHrYIKY1yfCzyO/lMXHQ+p7uGhonmGVisv6tSBSVgWzMBohTcvkC9vQcQFA==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-react-constant-elements@7.25.9':
+ resolution: {integrity: sha512-Ncw2JFsJVuvfRsa2lSHiC55kETQVLSnsYGQ1JDDwkUeWGTL/8Tom8aLTnlqgoeuopWrbbGndrc9AlLYrIosrow==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-react-display-name@7.25.9':
+ resolution: {integrity: sha512-KJfMlYIUxQB1CJfO3e0+h0ZHWOTLCPP115Awhaz8U0Zpq36Gl/cXlpoyMRnUWlhNUBAzldnCiAZNvCDj7CrKxQ==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-react-jsx-development@7.25.9':
+ resolution: {integrity: sha512-9mj6rm7XVYs4mdLIpbZnHOYdpW42uoiBCTVowg7sP1thUOiANgMb4UtpRivR0pp5iL+ocvUv7X4mZgFRpJEzGw==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-react-jsx-self@7.25.9':
+ resolution: {integrity: sha512-y8quW6p0WHkEhmErnfe58r7x0A70uKphQm8Sp8cV7tjNQwK56sNVK0M73LK3WuYmsuyrftut4xAkjjgU0twaMg==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-react-jsx-source@7.25.9':
+ resolution: {integrity: sha512-+iqjT8xmXhhYv4/uiYd8FNQsraMFZIfxVSqxxVSZP0WbbSAWvBXAul0m/zu+7Vv4O/3WtApy9pmaTMiumEZgfg==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-react-jsx@7.25.9':
+ resolution: {integrity: sha512-s5XwpQYCqGerXl+Pu6VDL3x0j2d82eiV77UJ8a2mDHAW7j9SWRqQ2y1fNo1Z74CdcYipl5Z41zvjj4Nfzq36rw==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-react-pure-annotations@7.25.9':
+ resolution: {integrity: sha512-KQ/Takk3T8Qzj5TppkS1be588lkbTp5uj7w6a0LeQaTMSckU/wK0oJ/pih+T690tkgI5jfmg2TqDJvd41Sj1Cg==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-regenerator@7.27.0':
+ resolution: {integrity: sha512-LX/vCajUJQDqE7Aum/ELUMZAY19+cDpghxrnyt5I1tV6X5PyC86AOoWXWFYFeIvauyeSA6/ktn4tQVn/3ZifsA==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-regexp-modifiers@7.26.0':
+ resolution: {integrity: sha512-vN6saax7lrA2yA/Pak3sCxuD6F5InBjn9IcrIKQPjpsLvuHYLVroTxjdlVRHjjBWxKOqIwpTXDkOssYT4BFdRw==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0
+
+ '@babel/plugin-transform-reserved-words@7.25.9':
+ resolution: {integrity: sha512-7DL7DKYjn5Su++4RXu8puKZm2XBPHyjWLUidaPEkCUBbE7IPcsrkRHggAOOKydH1dASWdcUBxrkOGNxUv5P3Jg==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-shorthand-properties@7.25.9':
+ resolution: {integrity: sha512-MUv6t0FhO5qHnS/W8XCbHmiRWOphNufpE1IVxhK5kuN3Td9FT1x4rx4K42s3RYdMXCXpfWkGSbCSd0Z64xA7Ng==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-spread@7.25.9':
+ resolution: {integrity: sha512-oNknIB0TbURU5pqJFVbOOFspVlrpVwo2H1+HUIsVDvp5VauGGDP1ZEvO8Nn5xyMEs3dakajOxlmkNW7kNgSm6A==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-sticky-regex@7.25.9':
+ resolution: {integrity: sha512-WqBUSgeVwucYDP9U/xNRQam7xV8W5Zf+6Eo7T2SRVUFlhRiMNFdFz58u0KZmCVVqs2i7SHgpRnAhzRNmKfi2uA==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-template-literals@7.26.8':
+ resolution: {integrity: sha512-OmGDL5/J0CJPJZTHZbi2XpO0tyT2Ia7fzpW5GURwdtp2X3fMmN8au/ej6peC/T33/+CRiIpA8Krse8hFGVmT5Q==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-typeof-symbol@7.27.0':
+ resolution: {integrity: sha512-+LLkxA9rKJpNoGsbLnAgOCdESl73vwYn+V6b+5wHbrE7OGKVDPHIQvbFSzqE6rwqaCw2RE+zdJrlLkcf8YOA0w==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-typescript@7.27.0':
+ resolution: {integrity: sha512-fRGGjO2UEGPjvEcyAZXRXAS8AfdaQoq7HnxAbJoAoW10B9xOKesmmndJv+Sym2a+9FHWZ9KbyyLCe9s0Sn5jtg==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-unicode-escapes@7.25.9':
+ resolution: {integrity: sha512-s5EDrE6bW97LtxOcGj1Khcx5AaXwiMmi4toFWRDP9/y0Woo6pXC+iyPu/KuhKtfSrNFd7jJB+/fkOtZy6aIC6Q==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-unicode-property-regex@7.25.9':
+ resolution: {integrity: sha512-Jt2d8Ga+QwRluxRQ307Vlxa6dMrYEMZCgGxoPR8V52rxPyldHu3hdlHspxaqYmE7oID5+kB+UKUB/eWS+DkkWg==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-unicode-regex@7.25.9':
+ resolution: {integrity: sha512-yoxstj7Rg9dlNn9UQxzk4fcNivwv4nUYz7fYXBaKxvw/lnmPuOm/ikoELygbYq68Bls3D/D+NBPHiLwZdZZ4HA==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-unicode-sets-regex@7.25.9':
+ resolution: {integrity: sha512-8BYqO3GeVNHtx69fdPshN3fnzUNLrWdHhk/icSwigksJGczKSizZ+Z6SBCxTs723Fr5VSNorTIK7a+R2tISvwQ==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0
+
+ '@babel/preset-env@7.26.9':
+ resolution: {integrity: sha512-vX3qPGE8sEKEAZCWk05k3cpTAE3/nOYca++JA+Rd0z2NCNzabmYvEiSShKzm10zdquOIAVXsy2Ei/DTW34KlKQ==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/preset-modules@0.1.6-no-external-plugins':
+ resolution: {integrity: sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0 || ^8.0.0-0 <8.0.0
+
+ '@babel/preset-react@7.26.3':
+ resolution: {integrity: sha512-Nl03d6T9ky516DGK2YMxrTqvnpUW63TnJMOMonj+Zae0JiPC5BC9xPMSL6L8fiSpA5vP88qfygavVQvnLp+6Cw==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/preset-typescript@7.27.0':
+ resolution: {integrity: sha512-vxaPFfJtHhgeOVXRKuHpHPAOgymmy8V8I65T1q53R7GCZlefKeCaTyDs3zOPHTTbmquvNlQYC5klEvWsBAtrBQ==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/runtime@7.27.0':
+ resolution: {integrity: sha512-VtPOkrdPHZsKc/clNqyi9WUA8TINkZ4cGk63UUE3u4pmB2k+ZMQRDuIOagv8UVd6j7k0T3+RRIb7beKTebNbcw==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/template@7.27.0':
+ resolution: {integrity: sha512-2ncevenBqXI6qRMukPlXwHKHchC7RyMuu4xv5JBXRfOGVcTy1mXCD12qrp7Jsoxll1EV3+9sE4GugBVRjT2jFA==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/traverse@7.27.0':
+ resolution: {integrity: sha512-19lYZFzYVQkkHkl4Cy4WrAVcqBkgvV2YM2TU3xG6DIwO7O3ecbDPfW3yM3bjAGcqcQHi+CCtjMR3dIEHxsd6bA==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/types@7.27.0':
+ resolution: {integrity: sha512-H45s8fVLYjbhFH62dIJ3WtmJ6RSPt/3DRO0ZcT2SUiYiQyz3BLVb9ADEnLl91m74aQPS3AzzeajZHYOalWe3bg==}
+ engines: {node: '>=6.9.0'}
+
+ '@emotion/hash@0.9.2':
+ resolution: {integrity: sha512-MyqliTZGuOm3+5ZRSaaBGP3USLw6+EGykkwZns2EPC5g8jJ4z9OrdZY9apkl3+UP9+sdz76YYkwCKP5gh8iY3g==}
+
+ '@esbuild/aix-ppc64@0.20.2':
+ resolution: {integrity: sha512-D+EBOJHXdNZcLJRBkhENNG8Wji2kgc9AZ9KiPr1JuZjsNtyHzrsfLRrY0tk2H2aoFu6RANO1y1iPPUCDYWkb5g==}
+ engines: {node: '>=12'}
+ cpu: [ppc64]
+ os: [aix]
+
+ '@esbuild/android-arm64@0.20.2':
+ resolution: {integrity: sha512-mRzjLacRtl/tWU0SvD8lUEwb61yP9cqQo6noDZP/O8VkwafSYwZ4yWy24kan8jE/IMERpYncRt2dw438LP3Xmg==}
+ engines: {node: '>=12'}
+ cpu: [arm64]
+ os: [android]
+
+ '@esbuild/android-arm@0.20.2':
+ resolution: {integrity: sha512-t98Ra6pw2VaDhqNWO2Oph2LXbz/EJcnLmKLGBJwEwXX/JAN83Fym1rU8l0JUWK6HkIbWONCSSatf4sf2NBRx/w==}
+ engines: {node: '>=12'}
+ cpu: [arm]
+ os: [android]
+
+ '@esbuild/android-x64@0.20.2':
+ resolution: {integrity: sha512-btzExgV+/lMGDDa194CcUQm53ncxzeBrWJcncOBxuC6ndBkKxnHdFJn86mCIgTELsooUmwUm9FkhSp5HYu00Rg==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [android]
+
+ '@esbuild/darwin-arm64@0.20.2':
+ resolution: {integrity: sha512-4J6IRT+10J3aJH3l1yzEg9y3wkTDgDk7TSDFX+wKFiWjqWp/iCfLIYzGyasx9l0SAFPT1HwSCR+0w/h1ES/MjA==}
+ engines: {node: '>=12'}
+ cpu: [arm64]
+ os: [darwin]
+
+ '@esbuild/darwin-x64@0.20.2':
+ resolution: {integrity: sha512-tBcXp9KNphnNH0dfhv8KYkZhjc+H3XBkF5DKtswJblV7KlT9EI2+jeA8DgBjp908WEuYll6pF+UStUCfEpdysA==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [darwin]
+
+ '@esbuild/freebsd-arm64@0.20.2':
+ resolution: {integrity: sha512-d3qI41G4SuLiCGCFGUrKsSeTXyWG6yem1KcGZVS+3FYlYhtNoNgYrWcvkOoaqMhwXSMrZRl69ArHsGJ9mYdbbw==}
+ engines: {node: '>=12'}
+ cpu: [arm64]
+ os: [freebsd]
+
+ '@esbuild/freebsd-x64@0.20.2':
+ resolution: {integrity: sha512-d+DipyvHRuqEeM5zDivKV1KuXn9WeRX6vqSqIDgwIfPQtwMP4jaDsQsDncjTDDsExT4lR/91OLjRo8bmC1e+Cw==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [freebsd]
+
+ '@esbuild/linux-arm64@0.20.2':
+ resolution: {integrity: sha512-9pb6rBjGvTFNira2FLIWqDk/uaf42sSyLE8j1rnUpuzsODBq7FvpwHYZxQ/It/8b+QOS1RYfqgGFNLRI+qlq2A==}
+ engines: {node: '>=12'}
+ cpu: [arm64]
+ os: [linux]
+
+ '@esbuild/linux-arm@0.20.2':
+ resolution: {integrity: sha512-VhLPeR8HTMPccbuWWcEUD1Az68TqaTYyj6nfE4QByZIQEQVWBB8vup8PpR7y1QHL3CpcF6xd5WVBU/+SBEvGTg==}
+ engines: {node: '>=12'}
+ cpu: [arm]
+ os: [linux]
+
+ '@esbuild/linux-ia32@0.20.2':
+ resolution: {integrity: sha512-o10utieEkNPFDZFQm9CoP7Tvb33UutoJqg3qKf1PWVeeJhJw0Q347PxMvBgVVFgouYLGIhFYG0UGdBumROyiig==}
+ engines: {node: '>=12'}
+ cpu: [ia32]
+ os: [linux]
+
+ '@esbuild/linux-loong64@0.20.2':
+ resolution: {integrity: sha512-PR7sp6R/UC4CFVomVINKJ80pMFlfDfMQMYynX7t1tNTeivQ6XdX5r2XovMmha/VjR1YN/HgHWsVcTRIMkymrgQ==}
+ engines: {node: '>=12'}
+ cpu: [loong64]
+ os: [linux]
+
+ '@esbuild/linux-mips64el@0.20.2':
+ resolution: {integrity: sha512-4BlTqeutE/KnOiTG5Y6Sb/Hw6hsBOZapOVF6njAESHInhlQAghVVZL1ZpIctBOoTFbQyGW+LsVYZ8lSSB3wkjA==}
+ engines: {node: '>=12'}
+ cpu: [mips64el]
+ os: [linux]
+
+ '@esbuild/linux-ppc64@0.20.2':
+ resolution: {integrity: sha512-rD3KsaDprDcfajSKdn25ooz5J5/fWBylaaXkuotBDGnMnDP1Uv5DLAN/45qfnf3JDYyJv/ytGHQaziHUdyzaAg==}
+ engines: {node: '>=12'}
+ cpu: [ppc64]
+ os: [linux]
+
+ '@esbuild/linux-riscv64@0.20.2':
+ resolution: {integrity: sha512-snwmBKacKmwTMmhLlz/3aH1Q9T8v45bKYGE3j26TsaOVtjIag4wLfWSiZykXzXuE1kbCE+zJRmwp+ZbIHinnVg==}
+ engines: {node: '>=12'}
+ cpu: [riscv64]
+ os: [linux]
+
+ '@esbuild/linux-s390x@0.20.2':
+ resolution: {integrity: sha512-wcWISOobRWNm3cezm5HOZcYz1sKoHLd8VL1dl309DiixxVFoFe/o8HnwuIwn6sXre88Nwj+VwZUvJf4AFxkyrQ==}
+ engines: {node: '>=12'}
+ cpu: [s390x]
+ os: [linux]
+
+ '@esbuild/linux-x64@0.20.2':
+ resolution: {integrity: sha512-1MdwI6OOTsfQfek8sLwgyjOXAu+wKhLEoaOLTjbijk6E2WONYpH9ZU2mNtR+lZ2B4uwr+usqGuVfFT9tMtGvGw==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [linux]
+
+ '@esbuild/netbsd-x64@0.20.2':
+ resolution: {integrity: sha512-K8/DhBxcVQkzYc43yJXDSyjlFeHQJBiowJ0uVL6Tor3jGQfSGHNNJcWxNbOI8v5k82prYqzPuwkzHt3J1T1iZQ==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [netbsd]
+
+ '@esbuild/openbsd-x64@0.20.2':
+ resolution: {integrity: sha512-eMpKlV0SThJmmJgiVyN9jTPJ2VBPquf6Kt/nAoo6DgHAoN57K15ZghiHaMvqjCye/uU4X5u3YSMgVBI1h3vKrQ==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [openbsd]
+
+ '@esbuild/sunos-x64@0.20.2':
+ resolution: {integrity: sha512-2UyFtRC6cXLyejf/YEld4Hajo7UHILetzE1vsRcGL3earZEW77JxrFjH4Ez2qaTiEfMgAXxfAZCm1fvM/G/o8w==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [sunos]
+
+ '@esbuild/win32-arm64@0.20.2':
+ resolution: {integrity: sha512-GRibxoawM9ZCnDxnP3usoUDO9vUkpAxIIZ6GQI+IlVmr5kP3zUq+l17xELTHMWTWzjxa2guPNyrpq1GWmPvcGQ==}
+ engines: {node: '>=12'}
+ cpu: [arm64]
+ os: [win32]
+
+ '@esbuild/win32-ia32@0.20.2':
+ resolution: {integrity: sha512-HfLOfn9YWmkSKRQqovpnITazdtquEW8/SoHW7pWpuEeguaZI4QnCRW6b+oZTztdBnZOS2hqJ6im/D5cPzBTTlQ==}
+ engines: {node: '>=12'}
+ cpu: [ia32]
+ os: [win32]
+
+ '@esbuild/win32-x64@0.20.2':
+ resolution: {integrity: sha512-N49X4lJX27+l9jbLKSqZ6bKNjzQvHaT8IIFUy+YIqmXQdjYCToGWwOItDrfby14c78aDd5NHQl29xingXfCdLQ==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [win32]
+
+ '@eslint-community/eslint-utils@4.6.1':
+ resolution: {integrity: sha512-KTsJMmobmbrFLe3LDh0PC2FXpcSYJt/MLjlkh/9LEnmKYLSYmT/0EW9JWANjeoemiuZrmogti0tW5Ch+qNUYDw==}
+ engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+ peerDependencies:
+ eslint: ^6.0.0 || ^7.0.0 || >=8.0.0
+
+ '@eslint-community/regexpp@4.12.1':
+ resolution: {integrity: sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==}
+ engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0}
+
+ '@eslint/config-array@0.20.0':
+ resolution: {integrity: sha512-fxlS1kkIjx8+vy2SjuCB94q3htSNrufYTXubwiBFeaQHbH6Ipi43gFJq2zCMt6PHhImH3Xmr0NksKDvchWlpQQ==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+
+ '@eslint/config-helpers@0.2.1':
+ resolution: {integrity: sha512-RI17tsD2frtDu/3dmI7QRrD4bedNKPM08ziRYaC5AhkGrzIAJelm9kJU1TznK+apx6V+cqRz8tfpEeG3oIyjxw==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+
+ '@eslint/core@0.13.0':
+ resolution: {integrity: sha512-yfkgDw1KR66rkT5A8ci4irzDysN7FRpq3ttJolR88OqQikAWqwA8j5VZyas+vjyBNFIJ7MfybJ9plMILI2UrCw==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+
+ '@eslint/eslintrc@3.3.1':
+ resolution: {integrity: sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+
+ '@eslint/js@9.25.1':
+ resolution: {integrity: sha512-dEIwmjntEx8u3Uvv+kr3PDeeArL8Hw07H9kyYxCjnM9pBjfEhk6uLXSchxxzgiwtRhhzVzqmUSDFBOi1TuZ7qg==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+
+ '@eslint/object-schema@2.1.6':
+ resolution: {integrity: sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+
+ '@eslint/plugin-kit@0.2.8':
+ resolution: {integrity: sha512-ZAoA40rNMPwSm+AeHpCq8STiNAwzWLJuP8Xv4CHIc9wv/PSuExjMrmjfYNj682vW0OOiZ1HKxzvjQr9XZIisQA==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+
+ '@floating-ui/core@1.6.9':
+ resolution: {integrity: sha512-uMXCuQ3BItDUbAMhIXw7UPXRfAlOAvZzdK9BWpE60MCn+Svt3aLn9jsPTi/WNGlRUu2uI0v5S7JiIUsbsvh3fw==}
+
+ '@floating-ui/dom@1.6.13':
+ resolution: {integrity: sha512-umqzocjDgNRGTuO7Q8CU32dkHkECqI8ZdMZ5Swb6QAM0t5rnlrN3lGo1hdpscRd3WS8T6DKYK4ephgIH9iRh3w==}
+
+ '@floating-ui/react-dom@2.1.2':
+ resolution: {integrity: sha512-06okr5cgPzMNBy+Ycse2A6udMi4bqwW/zgBF/rwjcNqWkyr82Mcg8b0vjX8OJpZFy/FKjJmw6wV7t44kK6kW7A==}
+ peerDependencies:
+ react: '>=16.8.0'
+ react-dom: '>=16.8.0'
+
+ '@floating-ui/utils@0.2.9':
+ resolution: {integrity: sha512-MDWhGtE+eHw5JW7lq4qhc5yRLS11ERl1c7Z6Xd0a58DozHES6EnNNwUWbMiG4J9Cgj053Bhk8zvlhFYKVhULwg==}
+
+ '@gql.tada/cli-utils@1.6.3':
+ resolution: {integrity: sha512-jFFSY8OxYeBxdKi58UzeMXG1tdm4FVjXa8WHIi66Gzu9JWtCE6mqom3a8xkmSw+mVaybFW5EN2WXf1WztJVNyQ==}
+ peerDependencies:
+ '@0no-co/graphqlsp': ^1.12.13
+ '@gql.tada/svelte-support': 1.0.1
+ '@gql.tada/vue-support': 1.0.1
+ graphql: ^15.5.0 || ^16.0.0 || ^17.0.0
+ typescript: ^5.0.0
+ peerDependenciesMeta:
+ '@gql.tada/svelte-support':
+ optional: true
+ '@gql.tada/vue-support':
+ optional: true
+
+ '@gql.tada/internal@1.0.8':
+ resolution: {integrity: sha512-XYdxJhtHC5WtZfdDqtKjcQ4d7R1s0d1rnlSs3OcBEUbYiPoJJfZU7tWsVXuv047Z6msvmr4ompJ7eLSK5Km57g==}
+ peerDependencies:
+ graphql: ^15.5.0 || ^16.0.0 || ^17.0.0
+ typescript: ^5.0.0
+
+ '@graphql-typed-document-node/core@3.2.0':
+ resolution: {integrity: sha512-mB9oAsNCm9aM3/SOv4YtBMqZbYj10R7dkq8byBqxGY/ncFwhf2oQzMV+LCRlWoDSEBJ3COiR1yeDvMtsoOsuFQ==}
+ peerDependencies:
+ graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0
+
+ '@humanfs/core@0.19.1':
+ resolution: {integrity: sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==}
+ engines: {node: '>=18.18.0'}
+
+ '@humanfs/node@0.16.6':
+ resolution: {integrity: sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==}
+ engines: {node: '>=18.18.0'}
+
+ '@humanwhocodes/module-importer@1.0.1':
+ resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==}
+ engines: {node: '>=12.22'}
+
+ '@humanwhocodes/retry@0.3.1':
+ resolution: {integrity: sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==}
+ engines: {node: '>=18.18'}
+
+ '@humanwhocodes/retry@0.4.2':
+ resolution: {integrity: sha512-xeO57FpIu4p1Ri3Jq/EXq4ClRm86dVF2z/+kvFnyqVYRavTZmaFaUBbWCOuuTh0o/g7DSsk6kc2vrS4Vl5oPOQ==}
+ engines: {node: '>=18.18'}
+
+ '@isaacs/cliui@8.0.2':
+ resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==}
+ engines: {node: '>=12'}
+
+ '@jridgewell/gen-mapping@0.3.8':
+ resolution: {integrity: sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==}
+ engines: {node: '>=6.0.0'}
+
+ '@jridgewell/resolve-uri@3.1.2':
+ resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==}
+ engines: {node: '>=6.0.0'}
+
+ '@jridgewell/set-array@1.2.1':
+ resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==}
+ engines: {node: '>=6.0.0'}
+
+ '@jridgewell/sourcemap-codec@1.5.0':
+ resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==}
+
+ '@jridgewell/trace-mapping@0.3.25':
+ resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==}
+
+ '@mysten/bcs@1.0.4':
+ resolution: {integrity: sha512-6JoQi59GN/dVEBCNq8Rj4uOR0niDrJqDx/2gNQWXANwJakHIGH0AMniHrXP41B2dF+mZ3HVmh9Hi3otiEVQTrQ==}
+
+ '@mysten/bcs@1.1.0':
+ resolution: {integrity: sha512-yy9/1Y4d0FlRywS1+9ze/T7refCbrvwFwJIOKs9M3QBK1njbcHZp+LkVeLqBvIJA5eZ3ZCzmhQ1Xq4Sed5mEBA==}
+
+ '@mysten/bcs@1.6.0':
+ resolution: {integrity: sha512-ydDRYdIkIFCpHCcPvAkMC91fVwumjzbTgjqds0KsphDQI3jUlH3jFG5lfYNTmV6V3pkhOiRk1fupLBcsQsiszg==}
+
+ '@mysten/dapp-kit@0.15.6':
+ resolution: {integrity: sha512-14tJRXE82OIGzB+I0KegPHnLyzZwDQ5r0ti+4e1reK/JHYbdlo+N9F7dKXJvivjovO8UGOHPImSvfEmfV29fqw==}
+ peerDependencies:
+ '@tanstack/react-query': ^5.0.0
+ react: '*'
+
+ '@mysten/sui@1.12.0':
+ resolution: {integrity: sha512-DrSyja04xyGrTGlIQKMwZ6MywxNPkjyIcDLm915Zisoy1/uIgPoHc4cx53JyiG92z/HgowTVGGCCIzH53DIYXA==}
+ engines: {node: '>=18'}
+
+ '@mysten/sui@1.28.0':
+ resolution: {integrity: sha512-ABcKc+QBpazBl5/ByLChxHOiPjqxISSdXnBuU1rLm1frp5tjMSCChiL7Reth2zcxWO2qYFK70ewEkYVtJvJQvw==}
+ engines: {node: '>=18'}
+
+ '@mysten/sui@1.8.0':
+ resolution: {integrity: sha512-iL7yztpePS/GWFZ7yiD/Pl7ciuOD2ySyogJZmLFu4WxZfiIcXJX+U/U+Egq9VHvELk8+m+Z1OvvPlNQfuowMIg==}
+ engines: {node: '>=18'}
+
+ '@mysten/utils@0.0.0':
+ resolution: {integrity: sha512-KRI57Qow3E7TGqczimazwGf7+fwukdOi+6a31igSCzz0kPjAXbyK1a1gXaxeLMF8xEZ07ouW3RnsWt+EaUuHUw==}
+
+ '@mysten/wallet-standard@0.13.3':
+ resolution: {integrity: sha512-aLxhLIM6uzsfBZ5HbOLrvw1WrzHGPzysUmiFrXRizNpclz2DqxeqngDiDq8VogKM2bXCjhF0SxSc+Bj+relp7w==}
+
+ '@mysten/wallet-standard@0.13.7':
+ resolution: {integrity: sha512-FXlqn3Gp4E7aQf33rZQfaCEUeEq9TbmkIFA7kX/Yab5SC5892XVhkLRu040eBs8Cest98jFUZ2ZJ4YWR+a7e5g==}
+
+ '@mysten/wallet-standard@0.14.5':
+ resolution: {integrity: sha512-UtwDvhCx6qZneoStQu9hiFqX8+XEimbnAcWUBSN2T9hRDf+o0Btyr30XZ3zuqIyTQIwvFHUQ0RrRQhAhLpSDww==}
+
+ '@mysten/window-wallet-core@0.0.2':
+ resolution: {integrity: sha512-u57gHFlLYPDTK5bDeabRjkIdyLaiFVwL3bVbnBtu5WJpfFOv/KMOpIQt4820ICBG843jN35tzlulQ0nlbWCYeA==}
+
+ '@mysten/zksend@0.11.0':
+ resolution: {integrity: sha512-Q44ljYpH2Om8kOu/P+gxhZjFh8HgGXM3fdvpv3u0Fh+IbZW0ypv6G2RGDwldWBXY+pYO4xVpxres8QfC4CzALQ==}
+
+ '@mysten/zksend@0.12.26':
+ resolution: {integrity: sha512-/ECWBXe3RzS6AEy5thjjGrBM1GZ2pkXsHKK+83+jiEiKRtFuDU1tIw6wK87a+8ChqhpZLryFTPCQ6MRO+XMJEQ==}
+
+ '@noble/curves@1.8.2':
+ resolution: {integrity: sha512-vnI7V6lFNe0tLAuJMu+2sX+FcL14TaCWy1qiczg1VwRmPrpQCdq5ESXQMqUc2tluRNf6irBXrWbl1mGN8uaU/g==}
+ engines: {node: ^14.21.3 || >=16}
+
+ '@noble/hashes@1.3.0':
+ resolution: {integrity: sha512-ilHEACi9DwqJB0pw7kv+Apvh50jiiSyR/cQ3y4W7lOR5mhvn/50FLUfsnfJz0BDZtl/RR16kXvptiv6q1msYZg==}
+
+ '@noble/hashes@1.7.2':
+ resolution: {integrity: sha512-biZ0NUSxyjLLqo6KxEJ1b+C2NAx0wtDoFvCaXHGgUkeHzf3Xc1xKumFKREuT7f7DARNZ/slvYUwFG6B0f2b6hQ==}
+ engines: {node: ^14.21.3 || >=16}
+
+ '@noble/hashes@1.8.0':
+ resolution: {integrity: sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A==}
+ engines: {node: ^14.21.3 || >=16}
+
+ '@nodelib/fs.scandir@2.1.5':
+ resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==}
+ engines: {node: '>= 8'}
+
+ '@nodelib/fs.stat@2.0.5':
+ resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==}
+ engines: {node: '>= 8'}
+
+ '@nodelib/fs.walk@1.2.8':
+ resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==}
+ engines: {node: '>= 8'}
+
+ '@pkgjs/parseargs@0.11.0':
+ resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==}
+ engines: {node: '>=14'}
+
+ '@pkgr/core@0.2.4':
+ resolution: {integrity: sha512-ROFF39F6ZrnzSUEmQQZUar0Jt4xVoP9WnDRdWwF4NNcXs3xBTLgBUDoOwW141y1jP+S8nahIbdxbFC7IShw9Iw==}
+ engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0}
+
+ '@radix-ui/primitive@1.0.0':
+ resolution: {integrity: sha512-3e7rn8FDMin4CgeL7Z/49smCA3rFYY3Ha2rUQ7HRWFadS5iCRw08ZgVT1LaNTCNqgvrUiyczLflrVrF0SRQtNA==}
+
+ '@radix-ui/primitive@1.1.2':
+ resolution: {integrity: sha512-XnbHrrprsNqZKQhStrSwgRUQzoCI1glLzdw79xiZPoofhGICeZRSQ3dIxAKH1gb3OHfNf4d6f+vAv3kil2eggA==}
+
+ '@radix-ui/react-arrow@1.1.4':
+ resolution: {integrity: sha512-qz+fxrqgNxG0dYew5l7qR3c7wdgRu1XVUHGnGYX7rg5HM4p9SWaRmJwfgR3J0SgyUKayLmzQIun+N6rWRgiRKw==}
+ peerDependencies:
+ '@types/react': '*'
+ '@types/react-dom': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+ '@types/react-dom':
+ optional: true
+
+ '@radix-ui/react-collection@1.1.4':
+ resolution: {integrity: sha512-cv4vSf7HttqXilDnAnvINd53OTl1/bjUYVZrkFnA7nwmY9Ob2POUy0WY0sfqBAe1s5FyKsyceQlqiEGPYNTadg==}
+ peerDependencies:
+ '@types/react': '*'
+ '@types/react-dom': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+ '@types/react-dom':
+ optional: true
+
+ '@radix-ui/react-compose-refs@1.0.0':
+ resolution: {integrity: sha512-0KaSv6sx787/hK3eF53iOkiSLwAGlFMx5lotrqD2pTjB18KbybKoEIgkNZTKC60YECDQTKGTRcDBILwZVqVKvA==}
+ peerDependencies:
+ react: ^16.8 || ^17.0 || ^18.0
+
+ '@radix-ui/react-compose-refs@1.1.2':
+ resolution: {integrity: sha512-z4eqJvfiNnFMHIIvXP3CY57y2WJs5g2v3X0zm9mEJkrkNv4rDxu+sg9Jh8EkXyeqBkB7SOcboo9dMVqhyrACIg==}
+ peerDependencies:
+ '@types/react': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+
+ '@radix-ui/react-context@1.0.0':
+ resolution: {integrity: sha512-1pVM9RfOQ+n/N5PJK33kRSKsr1glNxomxONs5c49MliinBY6Yw2Q995qfBUUo0/Mbg05B/sGA0gkgPI7kmSHBg==}
+ peerDependencies:
+ react: ^16.8 || ^17.0 || ^18.0
+
+ '@radix-ui/react-context@1.1.2':
+ resolution: {integrity: sha512-jCi/QKUM2r1Ju5a3J64TH2A5SpKAgh0LpknyqdQ4m6DCV0xJ2HG1xARRwNGPQfi1SLdLWZ1OJz6F4OMBBNiGJA==}
+ peerDependencies:
+ '@types/react': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+
+ '@radix-ui/react-dialog@1.0.2':
+ resolution: {integrity: sha512-EKxxp2WNSmUPkx4trtWNmZ4/vAYEg7JkAfa1HKBUnaubw9eHzf1Orr9B472lJYaYz327RHDrd4R95fsw7VR8DA==}
+ peerDependencies:
+ react: ^16.8 || ^17.0 || ^18.0
+ react-dom: ^16.8 || ^17.0 || ^18.0
+
+ '@radix-ui/react-dialog@1.1.10':
+ resolution: {integrity: sha512-m6pZb0gEM5uHPSb+i2nKKGQi/HMSVjARMsLMWQfKDP+eJ6B+uqryHnXhpnohTWElw+vEcMk/o4wJODtdRKHwqg==}
+ peerDependencies:
+ '@types/react': '*'
+ '@types/react-dom': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+ '@types/react-dom':
+ optional: true
+
+ '@radix-ui/react-direction@1.1.1':
+ resolution: {integrity: sha512-1UEWRX6jnOA2y4H5WczZ44gOOjTEmlqv1uNW4GAJEO5+bauCBhv8snY65Iw5/VOS/ghKN9gr2KjnLKxrsvoMVw==}
+ peerDependencies:
+ '@types/react': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+
+ '@radix-ui/react-dismissable-layer@1.0.2':
+ resolution: {integrity: sha512-WjJzMrTWROozDqLB0uRWYvj4UuXsM/2L19EmQ3Au+IJWqwvwq9Bwd+P8ivo0Deg9JDPArR1I6MbWNi1CmXsskg==}
+ peerDependencies:
+ react: ^16.8 || ^17.0 || ^18.0
+ react-dom: ^16.8 || ^17.0 || ^18.0
+
+ '@radix-ui/react-dismissable-layer@1.1.7':
+ resolution: {integrity: sha512-j5+WBUdhccJsmH5/H0K6RncjDtoALSEr6jbkaZu+bjw6hOPOhHycr6vEUujl+HBK8kjUfWcoCJXxP6e4lUlMZw==}
+ peerDependencies:
+ '@types/react': '*'
+ '@types/react-dom': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+ '@types/react-dom':
+ optional: true
+
+ '@radix-ui/react-dropdown-menu@2.1.11':
+ resolution: {integrity: sha512-wbPE3cFBfLl+S+LCxChWQGX0k14zUxgvep1HEnLhJ9mNhjyO3ETzRviAeKZ3XomT/iVRRZAWFsnFZ3N0wI8OmA==}
+ peerDependencies:
+ '@types/react': '*'
+ '@types/react-dom': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+ '@types/react-dom':
+ optional: true
+
+ '@radix-ui/react-focus-guards@1.0.0':
+ resolution: {integrity: sha512-UagjDk4ijOAnGu4WMUPj9ahi7/zJJqNZ9ZAiGPp7waUWJO0O1aWXi/udPphI0IUjvrhBsZJGSN66dR2dsueLWQ==}
+ peerDependencies:
+ react: ^16.8 || ^17.0 || ^18.0
+
+ '@radix-ui/react-focus-guards@1.1.2':
+ resolution: {integrity: sha512-fyjAACV62oPV925xFCrH8DR5xWhg9KYtJT4s3u54jxp+L/hbpTY2kIeEFFbFe+a/HCE94zGQMZLIpVTPVZDhaA==}
+ peerDependencies:
+ '@types/react': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+
+ '@radix-ui/react-focus-scope@1.0.1':
+ resolution: {integrity: sha512-Ej2MQTit8IWJiS2uuujGUmxXjF/y5xZptIIQnyd2JHLwtV0R2j9NRVoRj/1j/gJ7e3REdaBw4Hjf4a1ImhkZcQ==}
+ peerDependencies:
+ react: ^16.8 || ^17.0 || ^18.0
+ react-dom: ^16.8 || ^17.0 || ^18.0
+
+ '@radix-ui/react-focus-scope@1.1.4':
+ resolution: {integrity: sha512-r2annK27lIW5w9Ho5NyQgqs0MmgZSTIKXWpVCJaLC1q2kZrZkcqnmHkCHMEmv8XLvsLlurKMPT+kbKkRkm/xVA==}
+ peerDependencies:
+ '@types/react': '*'
+ '@types/react-dom': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+ '@types/react-dom':
+ optional: true
+
+ '@radix-ui/react-id@1.0.0':
+ resolution: {integrity: sha512-Q6iAB/U7Tq3NTolBBQbHTgclPmGWE3OlktGGqrClPozSw4vkQ1DfQAOtzgRPecKsMdJINE05iaoDUG8tRzCBjw==}
+ peerDependencies:
+ react: ^16.8 || ^17.0 || ^18.0
+
+ '@radix-ui/react-id@1.1.1':
+ resolution: {integrity: sha512-kGkGegYIdQsOb4XjsfM97rXsiHaBwco+hFI66oO4s9LU+PLAC5oJ7khdOVFxkhsmlbpUqDAvXw11CluXP+jkHg==}
+ peerDependencies:
+ '@types/react': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+
+ '@radix-ui/react-menu@2.1.11':
+ resolution: {integrity: sha512-sbFI4Qaw02J0ogmR9tOMsSqsdrGNpUanlPYAqTE2JJafow8ecHtykg4fSTjNHBdDl4deiKMK+RhTEwyVhP7UDA==}
+ peerDependencies:
+ '@types/react': '*'
+ '@types/react-dom': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+ '@types/react-dom':
+ optional: true
+
+ '@radix-ui/react-popper@1.2.4':
+ resolution: {integrity: sha512-3p2Rgm/a1cK0r/UVkx5F/K9v/EplfjAeIFCGOPYPO4lZ0jtg4iSQXt/YGTSLWaf4x7NG6Z4+uKFcylcTZjeqDA==}
+ peerDependencies:
+ '@types/react': '*'
+ '@types/react-dom': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+ '@types/react-dom':
+ optional: true
+
+ '@radix-ui/react-portal@1.0.1':
+ resolution: {integrity: sha512-NY2vUWI5WENgAT1nfC6JS7RU5xRYBfjZVLq0HmgEN1Ezy3rk/UruMV4+Rd0F40PEaFC5SrLS1ixYvcYIQrb4Ig==}
+ peerDependencies:
+ react: ^16.8 || ^17.0 || ^18.0
+ react-dom: ^16.8 || ^17.0 || ^18.0
+
+ '@radix-ui/react-portal@1.1.6':
+ resolution: {integrity: sha512-XmsIl2z1n/TsYFLIdYam2rmFwf9OC/Sh2avkbmVMDuBZIe7hSpM0cYnWPAo7nHOVx8zTuwDZGByfcqLdnzp3Vw==}
+ peerDependencies:
+ '@types/react': '*'
+ '@types/react-dom': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+ '@types/react-dom':
+ optional: true
+
+ '@radix-ui/react-presence@1.0.0':
+ resolution: {integrity: sha512-A+6XEvN01NfVWiKu38ybawfHsBjWum42MRPnEuqPsBZ4eV7e/7K321B5VgYMPv3Xx5An6o1/l9ZuDBgmcmWK3w==}
+ peerDependencies:
+ react: ^16.8 || ^17.0 || ^18.0
+ react-dom: ^16.8 || ^17.0 || ^18.0
+
+ '@radix-ui/react-presence@1.1.3':
+ resolution: {integrity: sha512-IrVLIhskYhH3nLvtcBLQFZr61tBG7wx7O3kEmdzcYwRGAEBmBicGGL7ATzNgruYJ3xBTbuzEEq9OXJM3PAX3tA==}
+ peerDependencies:
+ '@types/react': '*'
+ '@types/react-dom': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+ '@types/react-dom':
+ optional: true
+
+ '@radix-ui/react-primitive@1.0.1':
+ resolution: {integrity: sha512-fHbmislWVkZaIdeF6GZxF0A/NH/3BjrGIYj+Ae6eTmTCr7EB0RQAAVEiqsXK6p3/JcRqVSBQoceZroj30Jj3XA==}
+ peerDependencies:
+ react: ^16.8 || ^17.0 || ^18.0
+ react-dom: ^16.8 || ^17.0 || ^18.0
+
+ '@radix-ui/react-primitive@2.1.0':
+ resolution: {integrity: sha512-/J/FhLdK0zVcILOwt5g+dH4KnkonCtkVJsa2G6JmvbbtZfBEI1gMsO3QMjseL4F/SwfAMt1Vc/0XKYKq+xJ1sw==}
+ peerDependencies:
+ '@types/react': '*'
+ '@types/react-dom': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+ '@types/react-dom':
+ optional: true
+
+ '@radix-ui/react-roving-focus@1.1.7':
+ resolution: {integrity: sha512-C6oAg451/fQT3EGbWHbCQjYTtbyjNO1uzQgMzwyivcHT3GKNEmu1q3UuREhN+HzHAVtv3ivMVK08QlC+PkYw9Q==}
+ peerDependencies:
+ '@types/react': '*'
+ '@types/react-dom': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+ '@types/react-dom':
+ optional: true
+
+ '@radix-ui/react-slot@1.0.1':
+ resolution: {integrity: sha512-avutXAFL1ehGvAXtPquu0YK5oz6ctS474iM3vNGQIkswrVhdrS52e3uoMQBzZhNRAIE0jBnUyXWNmSjGHhCFcw==}
+ peerDependencies:
+ react: ^16.8 || ^17.0 || ^18.0
+
+ '@radix-ui/react-slot@1.2.0':
+ resolution: {integrity: sha512-ujc+V6r0HNDviYqIK3rW4ffgYiZ8g5DEHrGJVk4x7kTlLXRDILnKX9vAUYeIsLOoDpDJ0ujpqMkjH4w2ofuo6w==}
+ peerDependencies:
+ '@types/react': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+
+ '@radix-ui/react-use-callback-ref@1.0.0':
+ resolution: {integrity: sha512-GZtyzoHz95Rhs6S63D2t/eqvdFCm7I+yHMLVQheKM7nBD8mbZIt+ct1jz4536MDnaOGKIxynJ8eHTkVGVVkoTg==}
+ peerDependencies:
+ react: ^16.8 || ^17.0 || ^18.0
+
+ '@radix-ui/react-use-callback-ref@1.1.1':
+ resolution: {integrity: sha512-FkBMwD+qbGQeMu1cOHnuGB6x4yzPjho8ap5WtbEJ26umhgqVXbhekKUQO+hZEL1vU92a3wHwdp0HAcqAUF5iDg==}
+ peerDependencies:
+ '@types/react': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+
+ '@radix-ui/react-use-controllable-state@1.0.0':
+ resolution: {integrity: sha512-FohDoZvk3mEXh9AWAVyRTYR4Sq7/gavuofglmiXB2g1aKyboUD4YtgWxKj8O5n+Uak52gXQ4wKz5IFST4vtJHg==}
+ peerDependencies:
+ react: ^16.8 || ^17.0 || ^18.0
+
+ '@radix-ui/react-use-controllable-state@1.2.2':
+ resolution: {integrity: sha512-BjasUjixPFdS+NKkypcyyN5Pmg83Olst0+c6vGov0diwTEo6mgdqVR6hxcEgFuh4QrAs7Rc+9KuGJ9TVCj0Zzg==}
+ peerDependencies:
+ '@types/react': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+
+ '@radix-ui/react-use-effect-event@0.0.2':
+ resolution: {integrity: sha512-Qp8WbZOBe+blgpuUT+lw2xheLP8q0oatc9UpmiemEICxGvFLYmHm9QowVZGHtJlGbS6A6yJ3iViad/2cVjnOiA==}
+ peerDependencies:
+ '@types/react': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+
+ '@radix-ui/react-use-escape-keydown@1.0.2':
+ resolution: {integrity: sha512-DXGim3x74WgUv+iMNCF+cAo8xUHHeqvjx8zs7trKf+FkQKPQXLk2sX7Gx1ysH7Q76xCpZuxIJE7HLPxRE+Q+GA==}
+ peerDependencies:
+ react: ^16.8 || ^17.0 || ^18.0
+
+ '@radix-ui/react-use-escape-keydown@1.1.1':
+ resolution: {integrity: sha512-Il0+boE7w/XebUHyBjroE+DbByORGR9KKmITzbR7MyQ4akpORYP/ZmbhAr0DG7RmmBqoOnZdy2QlvajJ2QA59g==}
+ peerDependencies:
+ '@types/react': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+
+ '@radix-ui/react-use-layout-effect@1.0.0':
+ resolution: {integrity: sha512-6Tpkq+R6LOlmQb1R5NNETLG0B4YP0wc+klfXafpUCj6JGyaUc8il7/kUZ7m59rGbXGczE9Bs+iz2qloqsZBduQ==}
+ peerDependencies:
+ react: ^16.8 || ^17.0 || ^18.0
+
+ '@radix-ui/react-use-layout-effect@1.1.1':
+ resolution: {integrity: sha512-RbJRS4UWQFkzHTTwVymMTUv8EqYhOp8dOOviLj2ugtTiXRaRQS7GLGxZTLL1jWhMeoSCf5zmcZkqTl9IiYfXcQ==}
+ peerDependencies:
+ '@types/react': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+
+ '@radix-ui/react-use-rect@1.1.1':
+ resolution: {integrity: sha512-QTYuDesS0VtuHNNvMh+CjlKJ4LJickCMUAqjlE3+j8w+RlRpwyX3apEQKGFzbZGdo7XNG1tXa+bQqIE7HIXT2w==}
+ peerDependencies:
+ '@types/react': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+
+ '@radix-ui/react-use-size@1.1.1':
+ resolution: {integrity: sha512-ewrXRDTAqAXlkl6t/fkXWNAhFX9I+CkKlw6zjEwk86RSPKwZr3xpBRso655aqYafwtnbpHLj6toFzmd6xdVptQ==}
+ peerDependencies:
+ '@types/react': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+
+ '@radix-ui/rect@1.1.1':
+ resolution: {integrity: sha512-HPwpGIzkl28mWyZqG52jiqDJ12waP11Pa1lGoiyUkIEuMLBP0oeK/C89esbXrxsky5we7dfd8U58nm0SgAWpVw==}
+
+ '@rc-component/util@1.2.1':
+ resolution: {integrity: sha512-AUVu6jO+lWjQnUOOECwu8iR0EdElQgWW5NBv5vP/Uf9dWbAX3udhMutRlkVXjuac2E40ghkFy+ve00mc/3Fymg==}
+ peerDependencies:
+ react: '>=18.0.0'
+ react-dom: '>=18.0.0'
+
+ '@react-spring/animated@9.7.5':
+ resolution: {integrity: sha512-Tqrwz7pIlsSDITzxoLS3n/v/YCUHQdOIKtOJf4yL6kYVSDTSmVK1LI1Q3M/uu2Sx4X3pIWF3xLUhlsA6SPNTNg==}
+ peerDependencies:
+ react: ^16.8.0 || ^17.0.0 || ^18.0.0
+
+ '@react-spring/core@9.7.5':
+ resolution: {integrity: sha512-rmEqcxRcu7dWh7MnCcMXLvrf6/SDlSokLaLTxiPlAYi11nN3B5oiCUAblO72o+9z/87j2uzxa2Inm8UbLjXA+w==}
+ peerDependencies:
+ react: ^16.8.0 || ^17.0.0 || ^18.0.0
+
+ '@react-spring/rafz@9.7.5':
+ resolution: {integrity: sha512-5ZenDQMC48wjUzPAm1EtwQ5Ot3bLIAwwqP2w2owG5KoNdNHpEJV263nGhCeKKmuA3vG2zLLOdu3or6kuDjA6Aw==}
+
+ '@react-spring/shared@9.7.5':
+ resolution: {integrity: sha512-wdtoJrhUeeyD/PP/zo+np2s1Z820Ohr/BbuVYv+3dVLW7WctoiN7std8rISoYoHpUXtbkpesSKuPIw/6U1w1Pw==}
+ peerDependencies:
+ react: ^16.8.0 || ^17.0.0 || ^18.0.0
+
+ '@react-spring/types@9.7.5':
+ resolution: {integrity: sha512-HVj7LrZ4ReHWBimBvu2SKND3cDVUPWKLqRTmWe/fNY6o1owGOX0cAHbdPDTMelgBlVbrTKrre6lFkhqGZErK/g==}
+
+ '@react-spring/web@9.7.5':
+ resolution: {integrity: sha512-lmvqGwpe+CSttsWNZVr+Dg62adtKhauGwLyGE/RRyZ8AAMLgb9x3NDMA5RMElXo+IMyTkPp7nxTB8ZQlmhb6JQ==}
+ peerDependencies:
+ react: ^16.8.0 || ^17.0.0 || ^18.0.0
+ react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0
+
+ '@reduxjs/toolkit@2.7.0':
+ resolution: {integrity: sha512-XVwolG6eTqwV0N8z/oDlN93ITCIGIop6leXlGJI/4EKy+0POYkR+ABHRSdGXY+0MQvJBP8yAzh+EYFxTuvmBiQ==}
+ peerDependencies:
+ react: ^16.9.0 || ^17.0.0 || ^18 || ^19
+ react-redux: ^7.2.1 || ^8.1.3 || ^9.0.0
+ peerDependenciesMeta:
+ react:
+ optional: true
+ react-redux:
+ optional: true
+
+ '@remix-run/router@1.23.0':
+ resolution: {integrity: sha512-O3rHJzAQKamUz1fvE0Qaw0xSFqsA/yafi2iqeE0pvdFtCO1viYx8QL6f3Ln/aCCTLxs68SLf0KPM9eSeM8yBnA==}
+ engines: {node: '>=14.0.0'}
+
+ '@rollup/pluginutils@4.2.1':
+ resolution: {integrity: sha512-iKnFXr7NkdZAIHiIWE+BX5ULi/ucVFYWD6TbAV+rZctiRTY2PL6tsIKhoIOaoskiWAkgu+VsbXgUVDNLHf+InQ==}
+ engines: {node: '>= 8.0.0'}
+
+ '@rollup/rollup-android-arm-eabi@4.40.0':
+ resolution: {integrity: sha512-+Fbls/diZ0RDerhE8kyC6hjADCXA1K4yVNlH0EYfd2XjyH0UGgzaQ8MlT0pCXAThfxv3QUAczHaL+qSv1E4/Cg==}
+ cpu: [arm]
+ os: [android]
+
+ '@rollup/rollup-android-arm64@4.40.0':
+ resolution: {integrity: sha512-PPA6aEEsTPRz+/4xxAmaoWDqh67N7wFbgFUJGMnanCFs0TV99M0M8QhhaSCks+n6EbQoFvLQgYOGXxlMGQe/6w==}
+ cpu: [arm64]
+ os: [android]
+
+ '@rollup/rollup-darwin-arm64@4.40.0':
+ resolution: {integrity: sha512-GwYOcOakYHdfnjjKwqpTGgn5a6cUX7+Ra2HeNj/GdXvO2VJOOXCiYYlRFU4CubFM67EhbmzLOmACKEfvp3J1kQ==}
+ cpu: [arm64]
+ os: [darwin]
+
+ '@rollup/rollup-darwin-x64@4.40.0':
+ resolution: {integrity: sha512-CoLEGJ+2eheqD9KBSxmma6ld01czS52Iw0e2qMZNpPDlf7Z9mj8xmMemxEucinev4LgHalDPczMyxzbq+Q+EtA==}
+ cpu: [x64]
+ os: [darwin]
+
+ '@rollup/rollup-freebsd-arm64@4.40.0':
+ resolution: {integrity: sha512-r7yGiS4HN/kibvESzmrOB/PxKMhPTlz+FcGvoUIKYoTyGd5toHp48g1uZy1o1xQvybwwpqpe010JrcGG2s5nkg==}
+ cpu: [arm64]
+ os: [freebsd]
+
+ '@rollup/rollup-freebsd-x64@4.40.0':
+ resolution: {integrity: sha512-mVDxzlf0oLzV3oZOr0SMJ0lSDd3xC4CmnWJ8Val8isp9jRGl5Dq//LLDSPFrasS7pSm6m5xAcKaw3sHXhBjoRw==}
+ cpu: [x64]
+ os: [freebsd]
+
+ '@rollup/rollup-linux-arm-gnueabihf@4.40.0':
+ resolution: {integrity: sha512-y/qUMOpJxBMy8xCXD++jeu8t7kzjlOCkoxxajL58G62PJGBZVl/Gwpm7JK9+YvlB701rcQTzjUZ1JgUoPTnoQA==}
+ cpu: [arm]
+ os: [linux]
+
+ '@rollup/rollup-linux-arm-musleabihf@4.40.0':
+ resolution: {integrity: sha512-GoCsPibtVdJFPv/BOIvBKO/XmwZLwaNWdyD8TKlXuqp0veo2sHE+A/vpMQ5iSArRUz/uaoj4h5S6Pn0+PdhRjg==}
+ cpu: [arm]
+ os: [linux]
+
+ '@rollup/rollup-linux-arm64-gnu@4.40.0':
+ resolution: {integrity: sha512-L5ZLphTjjAD9leJzSLI7rr8fNqJMlGDKlazW2tX4IUF9P7R5TMQPElpH82Q7eNIDQnQlAyiNVfRPfP2vM5Avvg==}
+ cpu: [arm64]
+ os: [linux]
+
+ '@rollup/rollup-linux-arm64-musl@4.40.0':
+ resolution: {integrity: sha512-ATZvCRGCDtv1Y4gpDIXsS+wfFeFuLwVxyUBSLawjgXK2tRE6fnsQEkE4csQQYWlBlsFztRzCnBvWVfcae/1qxQ==}
+ cpu: [arm64]
+ os: [linux]
+
+ '@rollup/rollup-linux-loongarch64-gnu@4.40.0':
+ resolution: {integrity: sha512-wG9e2XtIhd++QugU5MD9i7OnpaVb08ji3P1y/hNbxrQ3sYEelKJOq1UJ5dXczeo6Hj2rfDEL5GdtkMSVLa/AOg==}
+ cpu: [loong64]
+ os: [linux]
+
+ '@rollup/rollup-linux-powerpc64le-gnu@4.40.0':
+ resolution: {integrity: sha512-vgXfWmj0f3jAUvC7TZSU/m/cOE558ILWDzS7jBhiCAFpY2WEBn5jqgbqvmzlMjtp8KlLcBlXVD2mkTSEQE6Ixw==}
+ cpu: [ppc64]
+ os: [linux]
+
+ '@rollup/rollup-linux-riscv64-gnu@4.40.0':
+ resolution: {integrity: sha512-uJkYTugqtPZBS3Z136arevt/FsKTF/J9dEMTX/cwR7lsAW4bShzI2R0pJVw+hcBTWF4dxVckYh72Hk3/hWNKvA==}
+ cpu: [riscv64]
+ os: [linux]
+
+ '@rollup/rollup-linux-riscv64-musl@4.40.0':
+ resolution: {integrity: sha512-rKmSj6EXQRnhSkE22+WvrqOqRtk733x3p5sWpZilhmjnkHkpeCgWsFFo0dGnUGeA+OZjRl3+VYq+HyCOEuwcxQ==}
+ cpu: [riscv64]
+ os: [linux]
+
+ '@rollup/rollup-linux-s390x-gnu@4.40.0':
+ resolution: {integrity: sha512-SpnYlAfKPOoVsQqmTFJ0usx0z84bzGOS9anAC0AZ3rdSo3snecihbhFTlJZ8XMwzqAcodjFU4+/SM311dqE5Sw==}
+ cpu: [s390x]
+ os: [linux]
+
+ '@rollup/rollup-linux-x64-gnu@4.40.0':
+ resolution: {integrity: sha512-RcDGMtqF9EFN8i2RYN2W+64CdHruJ5rPqrlYw+cgM3uOVPSsnAQps7cpjXe9be/yDp8UC7VLoCoKC8J3Kn2FkQ==}
+ cpu: [x64]
+ os: [linux]
+
+ '@rollup/rollup-linux-x64-musl@4.40.0':
+ resolution: {integrity: sha512-HZvjpiUmSNx5zFgwtQAV1GaGazT2RWvqeDi0hV+AtC8unqqDSsaFjPxfsO6qPtKRRg25SisACWnJ37Yio8ttaw==}
+ cpu: [x64]
+ os: [linux]
+
+ '@rollup/rollup-win32-arm64-msvc@4.40.0':
+ resolution: {integrity: sha512-UtZQQI5k/b8d7d3i9AZmA/t+Q4tk3hOC0tMOMSq2GlMYOfxbesxG4mJSeDp0EHs30N9bsfwUvs3zF4v/RzOeTQ==}
+ cpu: [arm64]
+ os: [win32]
+
+ '@rollup/rollup-win32-ia32-msvc@4.40.0':
+ resolution: {integrity: sha512-+m03kvI2f5syIqHXCZLPVYplP8pQch9JHyXKZ3AGMKlg8dCyr2PKHjwRLiW53LTrN/Nc3EqHOKxUxzoSPdKddA==}
+ cpu: [ia32]
+ os: [win32]
+
+ '@rollup/rollup-win32-x64-msvc@4.40.0':
+ resolution: {integrity: sha512-lpPE1cLfP5oPzVjKMx10pgBmKELQnFJXHgvtHCtuJWOv8MxqdEIMNtgHgBFf7Ea2/7EuVwa9fodWUfXAlXZLZQ==}
+ cpu: [x64]
+ os: [win32]
+
+ '@scure/base@1.2.4':
+ resolution: {integrity: sha512-5Yy9czTO47mqz+/J8GM6GIId4umdCk1wc1q8rKERQulIoc8VP9pzDcghv10Tl2E7R96ZUx/PhND3ESYUQX8NuQ==}
+
+ '@scure/bip32@1.6.2':
+ resolution: {integrity: sha512-t96EPDMbtGgtb7onKKqxRLfE5g05k7uHnHRM2xdE6BP/ZmxaLtPek4J4KfVn/90IQNrU1IOAqMgiDtUdtbe3nw==}
+
+ '@scure/bip39@1.5.4':
+ resolution: {integrity: sha512-TFM4ni0vKvCfBpohoh+/lY05i9gRbSwXWngAsF4CABQxoaOHijxuaZ2R6cStDQ5CHtHO9aGJTr4ksVJASRRyMA==}
+
+ '@standard-schema/spec@1.0.0':
+ resolution: {integrity: sha512-m2bOd0f2RT9k8QJx1JN85cZYyH1RqFBdlwtkSlf4tBDYLCiiZnv1fIIwacK6cqwXavOydf0NPToMQgpKq+dVlA==}
+
+ '@standard-schema/utils@0.3.0':
+ resolution: {integrity: sha512-e7Mew686owMaPJVNNLs55PUvgz371nKgwsc4vxE49zsODpJEnxgxRo2y/OKrqueavXgZNMDVj3DdHFlaSAeU8g==}
+
+ '@suchipi/femver@1.0.0':
+ resolution: {integrity: sha512-bprE8+K5V+DPX7q2e2K57ImqNBdfGHDIWaGI5xHxZoxbKOuQZn4wzPiUxOAHnsUr3w3xHrWXwN7gnG/iIuEMIg==}
+
+ '@suiet/wallet-kit@0.3.4':
+ resolution: {integrity: sha512-NaxiG4izrenA1MRZ+hKe676vlbRB2jOZKKXQEgpfocMQrWVhZvBXnB3uc8T2TGrXHwDz5iwtwY07PUbY7GzEmw==}
+ peerDependencies:
+ '@mysten/sui': 1.12.0
+ react: '*'
+ react-dom: '*'
+
+ '@suiet/wallet-sdk@0.3.3':
+ resolution: {integrity: sha512-Mg4MdnTmQT6vnLFwP3Fo7PHEPhEb7YDF3EnIPov8ACBA5xZq4WZV0GKjFRJujm171EjSGKyIDO5T4FaQb1GFHA==}
+ peerDependencies:
+ '@mysten/sui': 1.12.0
+
+ '@supabase/auth-js@2.69.1':
+ resolution: {integrity: sha512-FILtt5WjCNzmReeRLq5wRs3iShwmnWgBvxHfqapC/VoljJl+W8hDAyFmf1NVw3zH+ZjZ05AKxiKxVeb0HNWRMQ==}
+
+ '@supabase/functions-js@2.4.4':
+ resolution: {integrity: sha512-WL2p6r4AXNGwop7iwvul2BvOtuJ1YQy8EbOd0dhG1oN1q8el/BIRSFCFnWAMM/vJJlHWLi4ad22sKbKr9mvjoA==}
+
+ '@supabase/node-fetch@2.6.15':
+ resolution: {integrity: sha512-1ibVeYUacxWYi9i0cf5efil6adJ9WRyZBLivgjs+AUpewx1F3xPi7gLgaASI2SmIQxPoCEjAsLAzKPgMJVgOUQ==}
+ engines: {node: 4.x || >=6.0.0}
+
+ '@supabase/postgrest-js@1.19.4':
+ resolution: {integrity: sha512-O4soKqKtZIW3olqmbXXbKugUtByD2jPa8kL2m2c1oozAO11uCcGrRhkZL0kVxjBLrXHE0mdSkFsMj7jDSfyNpw==}
+
+ '@supabase/realtime-js@2.11.2':
+ resolution: {integrity: sha512-u/XeuL2Y0QEhXSoIPZZwR6wMXgB+RQbJzG9VErA3VghVt7uRfSVsjeqd7m5GhX3JR6dM/WRmLbVR8URpDWG4+w==}
+
+ '@supabase/storage-js@2.7.1':
+ resolution: {integrity: sha512-asYHcyDR1fKqrMpytAS1zjyEfvxuOIp1CIXX7ji4lHHcJKqyk+sLl/Vxgm4sN6u8zvuUtae9e4kDxQP2qrwWBA==}
+
+ '@supabase/supabase-js@2.49.4':
+ resolution: {integrity: sha512-jUF0uRUmS8BKt37t01qaZ88H9yV1mbGYnqLeuFWLcdV+x1P4fl0yP9DGtaEhFPZcwSom7u16GkLEH9QJZOqOkw==}
+
+ '@svgr/babel-plugin-add-jsx-attribute@6.5.1':
+ resolution: {integrity: sha512-9PYGcXrAxitycIjRmZB+Q0JaN07GZIWaTBIGQzfaZv+qr1n8X1XUEJ5rZ/vx6OVD9RRYlrNnXWExQXcmZeD/BQ==}
+ engines: {node: '>=10'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@svgr/babel-plugin-remove-jsx-attribute@8.0.0':
+ resolution: {integrity: sha512-BcCkm/STipKvbCl6b7QFrMh/vx00vIP63k2eM66MfHJzPr6O2U0jYEViXkHJWqXqQYjdeA9cuCl5KWmlwjDvbA==}
+ engines: {node: '>=14'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@svgr/babel-plugin-remove-jsx-empty-expression@8.0.0':
+ resolution: {integrity: sha512-5BcGCBfBxB5+XSDSWnhTThfI9jcO5f0Ai2V24gZpG+wXF14BzwxxdDb4g6trdOux0rhibGs385BeFMSmxtS3uA==}
+ engines: {node: '>=14'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@svgr/babel-plugin-replace-jsx-attribute-value@6.5.1':
+ resolution: {integrity: sha512-8DPaVVE3fd5JKuIC29dqyMB54sA6mfgki2H2+swh+zNJoynC8pMPzOkidqHOSc6Wj032fhl8Z0TVn1GiPpAiJg==}
+ engines: {node: '>=10'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@svgr/babel-plugin-svg-dynamic-title@6.5.1':
+ resolution: {integrity: sha512-FwOEi0Il72iAzlkaHrlemVurgSQRDFbk0OC8dSvD5fSBPHltNh7JtLsxmZUhjYBZo2PpcU/RJvvi6Q0l7O7ogw==}
+ engines: {node: '>=10'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@svgr/babel-plugin-svg-em-dimensions@6.5.1':
+ resolution: {integrity: sha512-gWGsiwjb4tw+ITOJ86ndY/DZZ6cuXMNE/SjcDRg+HLuCmwpcjOktwRF9WgAiycTqJD/QXqL2f8IzE2Rzh7aVXA==}
+ engines: {node: '>=10'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@svgr/babel-plugin-transform-react-native-svg@6.5.1':
+ resolution: {integrity: sha512-2jT3nTayyYP7kI6aGutkyfJ7UMGtuguD72OjeGLwVNyfPRBD8zQthlvL+fAbAKk5n9ZNcvFkp/b1lZ7VsYqVJg==}
+ engines: {node: '>=10'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@svgr/babel-plugin-transform-svg-component@6.5.1':
+ resolution: {integrity: sha512-a1p6LF5Jt33O3rZoVRBqdxL350oge54iZWHNI6LJB5tQ7EelvD/Mb1mfBiZNAan0dt4i3VArkFRjA4iObuNykQ==}
+ engines: {node: '>=12'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@svgr/babel-preset@6.5.1':
+ resolution: {integrity: sha512-6127fvO/FF2oi5EzSQOAjo1LE3OtNVh11R+/8FXa+mHx1ptAaS4cknIjnUA7e6j6fwGGJ17NzaTJFUwOV2zwCw==}
+ engines: {node: '>=10'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@svgr/core@6.5.1':
+ resolution: {integrity: sha512-/xdLSWxK5QkqG524ONSjvg3V/FkNyCv538OIBdQqPNaAta3AsXj/Bd2FbvR87yMbXO2hFSWiAe/Q6IkVPDw+mw==}
+ engines: {node: '>=10'}
+
+ '@svgr/hast-util-to-babel-ast@6.5.1':
+ resolution: {integrity: sha512-1hnUxxjd83EAxbL4a0JDJoD3Dao3hmjvyvyEV8PzWmLK3B9m9NPlW7GKjFyoWE8nM7HnXzPcmmSyOW8yOddSXw==}
+ engines: {node: '>=10'}
+
+ '@svgr/plugin-jsx@6.5.1':
+ resolution: {integrity: sha512-+UdQxI3jgtSjCykNSlEMuy1jSRQlGC7pqBCPvkG/2dATdWo082zHTTK3uhnAju2/6XpE6B5mZ3z4Z8Ns01S8Gw==}
+ engines: {node: '>=10'}
+ peerDependencies:
+ '@svgr/core': ^6.0.0
+
+ '@svgr/plugin-svgo@6.5.1':
+ resolution: {integrity: sha512-omvZKf8ixP9z6GWgwbtmP9qQMPX4ODXi+wzbVZgomNFsUIlHA1sf4fThdwTWSsZGgvGAG6yE+b/F5gWUkcZ/iQ==}
+ engines: {node: '>=10'}
+ peerDependencies:
+ '@svgr/core': '*'
+
+ '@svgr/rollup@6.5.1':
+ resolution: {integrity: sha512-GeUfq0grJfpcn2jRWRaZ4npn27nnWK21vUj6MqDqknuJnEqGADcZZjO9wrUAaPLr3InAnQi0Z7nwiNUdzkaj6A==}
+ engines: {node: '>=10'}
+
+ '@tailwindcss/forms@0.5.10':
+ resolution: {integrity: sha512-utI1ONF6uf/pPNO68kmN1b8rEwNXv3czukalo8VtJH8ksIkZXr3Q3VYudZLkCsDd4Wku120uF02hYK25XGPorw==}
+ peerDependencies:
+ tailwindcss: '>=3.0.0 || >= 3.0.0-alpha.1 || >= 4.0.0-alpha.20 || >= 4.0.0-beta.1'
+
+ '@tanstack/query-core@5.74.4':
+ resolution: {integrity: sha512-YuG0A0+3i9b2Gfo9fkmNnkUWh5+5cFhWBN0pJAHkHilTx6A0nv8kepkk4T4GRt4e5ahbtFj2eTtkiPcVU1xO4A==}
+
+ '@tanstack/react-query@5.74.4':
+ resolution: {integrity: sha512-mAbxw60d4ffQ4qmRYfkO1xzRBPUEf/72Dgo3qqea0J66nIKuDTLEqQt0ku++SDFlMGMnB6uKDnEG1xD/TDse4Q==}
+ peerDependencies:
+ react: ^18 || ^19
+
+ '@trysound/sax@0.2.0':
+ resolution: {integrity: sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==}
+ engines: {node: '>=10.13.0'}
+
+ '@types/babel__core@7.20.5':
+ resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==}
+
+ '@types/babel__generator@7.27.0':
+ resolution: {integrity: sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg==}
+
+ '@types/babel__template@7.4.4':
+ resolution: {integrity: sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==}
+
+ '@types/babel__traverse@7.20.7':
+ resolution: {integrity: sha512-dkO5fhS7+/oos4ciWxyEyjWe48zmG6wbCheo/G2ZnHx4fs3EU6YC6UM8rk56gAjNJ9P3MTH2jo5jb92/K6wbng==}
+
+ '@types/estree@1.0.7':
+ resolution: {integrity: sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ==}
+
+ '@types/history@4.7.11':
+ resolution: {integrity: sha512-qjDJRrmvBMiTx+jyLxvLfJU7UznFuokDv4f3WRuriHKERccVpFU+8XMQUAbDzoiJCsmexxRExQeMwwCdamSKDA==}
+
+ '@types/json-schema@7.0.15':
+ resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==}
+
+ '@types/node@22.14.1':
+ resolution: {integrity: sha512-u0HuPQwe/dHrItgHHpmw3N2fYCR6x4ivMNbPHRkBVP4CvN+kiRrKHWk3i8tXiO/joPwXLMYvF9TTF0eqgHIuOw==}
+
+ '@types/parse-json@4.0.2':
+ resolution: {integrity: sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==}
+
+ '@types/phoenix@1.6.6':
+ resolution: {integrity: sha512-PIzZZlEppgrpoT2QgbnDU+MMzuR6BbCjllj0bM70lWoejMeNJAxCchxnv7J3XFkI8MpygtRpzXrIlmWUBclP5A==}
+
+ '@types/react-dom@19.1.2':
+ resolution: {integrity: sha512-XGJkWF41Qq305SKWEILa1O8vzhb3aOo3ogBlSmiqNko/WmRb6QIaweuZCXjKygVDXpzXb5wyxKTSOsmkuqj+Qw==}
+ peerDependencies:
+ '@types/react': ^19.0.0
+
+ '@types/react-router-dom@5.3.3':
+ resolution: {integrity: sha512-kpqnYK4wcdm5UaWI3fLcELopqLrHgLqNsdpHauzlQktfkHL3npOSwtj1Uz9oKBAzs7lFtVkV8j83voAz2D8fhw==}
+
+ '@types/react-router@5.1.20':
+ resolution: {integrity: sha512-jGjmu/ZqS7FjSH6owMcD5qpq19+1RS9DeVRqfl1FeBMxTDQAGwlMWOcs52NDoXaNKyG3d1cYQFMs9rCrb88o9Q==}
+
+ '@types/react@19.1.2':
+ resolution: {integrity: sha512-oxLPMytKchWGbnQM9O7D67uPa9paTNxO7jVoNMXgkkErULBPhPARCfkKL9ytcIJJRGjbsVwW4ugJzyFFvm/Tiw==}
+
+ '@types/use-sync-external-store@0.0.6':
+ resolution: {integrity: sha512-zFDAD+tlpf2r4asuHEj0XH6pY6i0g5NeAHPn+15wk3BV6JA69eERFXC1gyGThDkVa1zCyKr5jox1+2LbV/AMLg==}
+
+ '@types/ws@8.18.1':
+ resolution: {integrity: sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg==}
+
+ '@typescript-eslint/eslint-plugin@8.31.0':
+ resolution: {integrity: sha512-evaQJZ/J/S4wisevDvC1KFZkPzRetH8kYZbkgcTRyql3mcKsf+ZFDV1BVWUGTCAW5pQHoqn5gK5b8kn7ou9aFQ==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+ peerDependencies:
+ '@typescript-eslint/parser': ^8.0.0 || ^8.0.0-alpha.0
+ eslint: ^8.57.0 || ^9.0.0
+ typescript: '>=4.8.4 <5.9.0'
+
+ '@typescript-eslint/parser@8.31.0':
+ resolution: {integrity: sha512-67kYYShjBR0jNI5vsf/c3WG4u+zDnCTHTPqVMQguffaWWFs7artgwKmfwdifl+r6XyM5LYLas/dInj2T0SgJyw==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+ peerDependencies:
+ eslint: ^8.57.0 || ^9.0.0
+ typescript: '>=4.8.4 <5.9.0'
+
+ '@typescript-eslint/scope-manager@8.31.0':
+ resolution: {integrity: sha512-knO8UyF78Nt8O/B64i7TlGXod69ko7z6vJD9uhSlm0qkAbGeRUSudcm0+K/4CrRjrpiHfBCjMWlc08Vav1xwcw==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+
+ '@typescript-eslint/type-utils@8.31.0':
+ resolution: {integrity: sha512-DJ1N1GdjI7IS7uRlzJuEDCgDQix3ZVYVtgeWEyhyn4iaoitpMBX6Ndd488mXSx0xah/cONAkEaYyylDyAeHMHg==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+ peerDependencies:
+ eslint: ^8.57.0 || ^9.0.0
+ typescript: '>=4.8.4 <5.9.0'
+
+ '@typescript-eslint/types@8.31.0':
+ resolution: {integrity: sha512-Ch8oSjVyYyJxPQk8pMiP2FFGYatqXQfQIaMp+TpuuLlDachRWpUAeEu1u9B/v/8LToehUIWyiKcA/w5hUFRKuQ==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+
+ '@typescript-eslint/typescript-estree@8.31.0':
+ resolution: {integrity: sha512-xLmgn4Yl46xi6aDSZ9KkyfhhtnYI15/CvHbpOy/eR5NWhK/BK8wc709KKwhAR0m4ZKRP7h07bm4BWUYOCuRpQQ==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+ peerDependencies:
+ typescript: '>=4.8.4 <5.9.0'
+
+ '@typescript-eslint/utils@8.31.0':
+ resolution: {integrity: sha512-qi6uPLt9cjTFxAb1zGNgTob4x9ur7xC6mHQJ8GwEzGMGE9tYniublmJaowOJ9V2jUzxrltTPfdG2nKlWsq0+Ww==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+ peerDependencies:
+ eslint: ^8.57.0 || ^9.0.0
+ typescript: '>=4.8.4 <5.9.0'
+
+ '@typescript-eslint/visitor-keys@8.31.0':
+ resolution: {integrity: sha512-QcGHmlRHWOl93o64ZUMNewCdwKGU6WItOU52H0djgNmn1EOrhVudrDzXz4OycCRSCPwFCDrE2iIt5vmuUdHxuQ==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+
+ '@vanilla-extract/css@1.17.1':
+ resolution: {integrity: sha512-tOHQXHm10FrJeXKFeWE09JfDGN/tvV6mbjwoNB9k03u930Vg021vTnbrCwVLkECj9Zvh/SHLBHJ4r2flGqfovw==}
+
+ '@vanilla-extract/dynamic@2.1.2':
+ resolution: {integrity: sha512-9BGMciD8rO1hdSPIAh1ntsG4LPD3IYKhywR7VOmmz9OO4Lx1hlwkSg3E6X07ujFx7YuBfx0GDQnApG9ESHvB2A==}
+
+ '@vanilla-extract/private@1.0.6':
+ resolution: {integrity: sha512-ytsG/JLweEjw7DBuZ/0JCN4WAQgM9erfSTdS1NQY778hFQSZ6cfCDEZZ0sgVm4k54uNz6ImKB33AYvSR//fjxw==}
+
+ '@vanilla-extract/recipes@0.5.5':
+ resolution: {integrity: sha512-VadU7+IFUwLNLMgks29AHav/K5h7DOEfTU91RItn5vwdPfzduodNg317YbgWCcpm7FSXkuR3B3X8ZOi95UOozA==}
+ peerDependencies:
+ '@vanilla-extract/css': ^1.0.0
+
+ '@vitejs/plugin-react@4.4.1':
+ resolution: {integrity: sha512-IpEm5ZmeXAP/osiBXVVP5KjFMzbWOonMs0NaQQl+xYnUAcq4oHUBsF2+p4MgKWG4YMmFYJU8A6sxRPuowllm6w==}
+ engines: {node: ^14.18.0 || >=16.0.0}
+ peerDependencies:
+ vite: ^4.2.0 || ^5.0.0 || ^6.0.0
+
+ '@wallet-standard/app@1.1.0':
+ resolution: {integrity: sha512-3CijvrO9utx598kjr45hTbbeeykQrQfKmSnxeWOgU25TOEpvcipD/bYDQWIqUv1Oc6KK4YStokSMu/FBNecGUQ==}
+ engines: {node: '>=16'}
+
+ '@wallet-standard/base@1.1.0':
+ resolution: {integrity: sha512-DJDQhjKmSNVLKWItoKThJS+CsJQjR9AOBOirBVT1F9YpRyC9oYHE+ZnSf8y8bxUphtKqdQMPVQ2mHohYdRvDVQ==}
+ engines: {node: '>=16'}
+
+ '@wallet-standard/core@1.0.3':
+ resolution: {integrity: sha512-Jb33IIjC1wM1HoKkYD7xQ6d6PZ8EmMZvyc8R7dFgX66n/xkvksVTW04g9yLvQXrLFbcIjHrCxW6TXMhvpsAAzg==}
+ engines: {node: '>=16'}
+
+ '@wallet-standard/core@1.1.0':
+ resolution: {integrity: sha512-v2W5q/NlX1qkn2q/JOXQT//pOAdrhz7+nOcO2uiH9+a0uvreL+sdWWqkhFmMcX+HEBjaibdOQMUoIfDhOGX4XA==}
+ engines: {node: '>=16'}
+
+ '@wallet-standard/errors@0.1.1':
+ resolution: {integrity: sha512-V8Ju1Wvol8i/VDyQOHhjhxmMVwmKiwyxUZBnHhtiPZJTWY0U/Shb2iEWyGngYEbAkp2sGTmEeNX1tVyGR7PqNw==}
+ engines: {node: '>=16'}
+ hasBin: true
+
+ '@wallet-standard/features@1.1.0':
+ resolution: {integrity: sha512-hiEivWNztx73s+7iLxsuD1sOJ28xtRix58W7Xnz4XzzA/pF0+aicnWgjOdA10doVDEDZdUuZCIIqG96SFNlDUg==}
+ engines: {node: '>=16'}
+
+ '@wallet-standard/wallet@1.1.0':
+ resolution: {integrity: sha512-Gt8TnSlDZpAl+RWOOAB/kuvC7RpcdWAlFbHNoi4gsXsfaWa1QCT6LBcfIYTPdOZC9OVZUDwqGuGAcqZejDmHjg==}
+ engines: {node: '>=16'}
+
+ acorn-jsx@5.3.2:
+ resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==}
+ peerDependencies:
+ acorn: ^6.0.0 || ^7.0.0 || ^8.0.0
+
+ acorn@8.14.1:
+ resolution: {integrity: sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg==}
+ engines: {node: '>=0.4.0'}
+ hasBin: true
+
+ ajv@6.12.6:
+ resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==}
+
+ ansi-escapes@7.0.0:
+ resolution: {integrity: sha512-GdYO7a61mR0fOlAsvC9/rIHf7L96sBc6dEWzeOu+KAea5bZyQRPIpojrVoI4AXGJS/ycu/fBTdLrUkA4ODrvjw==}
+ engines: {node: '>=18'}
+
+ ansi-regex@5.0.1:
+ resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==}
+ engines: {node: '>=8'}
+
+ ansi-regex@6.1.0:
+ resolution: {integrity: sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==}
+ engines: {node: '>=12'}
+
+ ansi-styles@4.3.0:
+ resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==}
+ engines: {node: '>=8'}
+
+ ansi-styles@6.2.1:
+ resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==}
+ engines: {node: '>=12'}
+
+ any-promise@1.3.0:
+ resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==}
+
+ anymatch@3.1.3:
+ resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==}
+ engines: {node: '>= 8'}
+
+ arg@5.0.2:
+ resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==}
+
+ argparse@2.0.1:
+ resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==}
+
+ aria-hidden@1.2.4:
+ resolution: {integrity: sha512-y+CcFFwelSXpLZk/7fMB2mUbGtX9lKycf1MWJ7CaTIERyitVlyQx6C+sxcROU2BAJ24OiZyK+8wj2i8AlBoS3A==}
+ engines: {node: '>=10'}
+
+ autoprefixer@10.4.21:
+ resolution: {integrity: sha512-O+A6LWV5LDHSJD3LjHYoNi4VLsj/Whi7k6zG12xTYaU4cQ8oxQGckXNX8cRHK5yOZ/ppVHe0ZBXGzSV9jXdVbQ==}
+ engines: {node: ^10 || ^12 || >=14}
+ hasBin: true
+ peerDependencies:
+ postcss: ^8.1.0
+
+ babel-plugin-polyfill-corejs2@0.4.13:
+ resolution: {integrity: sha512-3sX/eOms8kd3q2KZ6DAhKPc0dgm525Gqq5NtWKZ7QYYZEv57OQ54KtblzJzH1lQF/eQxO8KjWGIK9IPUJNus5g==}
+ peerDependencies:
+ '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0
+
+ babel-plugin-polyfill-corejs3@0.11.1:
+ resolution: {integrity: sha512-yGCqvBT4rwMczo28xkH/noxJ6MZ4nJfkVYdoDaC/utLtWrXxv27HVrzAeSbqR8SxDsp46n0YF47EbHoixy6rXQ==}
+ peerDependencies:
+ '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0
+
+ babel-plugin-polyfill-regenerator@0.6.4:
+ resolution: {integrity: sha512-7gD3pRadPrbjhjLyxebmx/WrFYcuSjZ0XbdUujQMZ/fcE9oeewk2U/7PCvez84UeuK3oSjmPZ0Ch0dlupQvGzw==}
+ peerDependencies:
+ '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0
+
+ balanced-match@1.0.2:
+ resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
+
+ base-x@5.0.1:
+ resolution: {integrity: sha512-M7uio8Zt++eg3jPj+rHMfCC+IuygQHHCOU+IYsVtik6FWjuYpVt/+MRKcgsAMHh8mMFAwnB+Bs+mTrFiXjMzKg==}
+
+ base64-js@1.5.1:
+ resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==}
+
+ bech32@2.0.0:
+ resolution: {integrity: sha512-LcknSilhIGatDAsY1ak2I8VtGaHNhgMSYVxFrGLXv+xLHytaKZKcaUJJUE7qmBr7h33o5YQwP55pMI0xmkpJwg==}
+
+ big-integer@1.6.52:
+ resolution: {integrity: sha512-QxD8cf2eVqJOOz63z6JIN9BzvVs/dlySa5HGSBH5xtR8dPteIRQnBxxKqkNTiT6jbDTF6jAfrd4oMcND9RGbQg==}
+ engines: {node: '>=0.6'}
+
+ binary-extensions@2.3.0:
+ resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==}
+ engines: {node: '>=8'}
+
+ boolbase@1.0.0:
+ resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==}
+
+ brace-expansion@1.1.11:
+ resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==}
+
+ brace-expansion@2.0.1:
+ resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==}
+
+ braces@3.0.3:
+ resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==}
+ engines: {node: '>=8'}
+
+ broadcast-channel@3.7.0:
+ resolution: {integrity: sha512-cIAKJXAxGJceNZGTZSBzMxzyOn72cVgPnKx4dc6LRjQgbaJUQqhy5rzL3zbMxkMWsGKkv2hSFkPRMEXfoMZ2Mg==}
+
+ browserslist@4.24.4:
+ resolution: {integrity: sha512-KDi1Ny1gSePi1vm0q4oxSF8b4DR44GF4BbmS2YdhPLOEqd8pDviZOGH/GsmRwoWJ2+5Lr085X7naowMwKHDG1A==}
+ engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7}
+ hasBin: true
+
+ bs58@6.0.0:
+ resolution: {integrity: sha512-PD0wEnEYg6ijszw/u8s+iI3H17cTymlrwkKhDhPZq+Sokl3AU4htyBFTjAeNAlCCmg0f53g6ih3jATyCKftTfw==}
+
+ buffer@6.0.3:
+ resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==}
+
+ callsites@3.1.0:
+ resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==}
+ engines: {node: '>=6'}
+
+ camelcase-css@2.0.1:
+ resolution: {integrity: sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==}
+ engines: {node: '>= 6'}
+
+ camelcase@6.3.0:
+ resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==}
+ engines: {node: '>=10'}
+
+ caniuse-lite@1.0.30001715:
+ resolution: {integrity: sha512-7ptkFGMm2OAOgvZpwgA4yjQ5SQbrNVGdRjzH0pBdy1Fasvcr+KAeECmbCAECzTuDuoX0FCY8KzUxjf9+9kfZEw==}
+
+ chalk@4.1.2:
+ resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==}
+ engines: {node: '>=10'}
+
+ chalk@5.4.1:
+ resolution: {integrity: sha512-zgVZuo2WcZgfUEmsn6eO3kINexW8RAE4maiQ8QNs8CtpPCSyMiYsULR3HQYkm3w8FIA3SberyMJMSldGsW+U3w==}
+ engines: {node: ^12.17.0 || ^14.13 || >=16.0.0}
+
+ chokidar@3.6.0:
+ resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==}
+ engines: {node: '>= 8.10.0'}
+
+ classnames@2.3.2:
+ resolution: {integrity: sha512-CSbhY4cFEJRe6/GQzIk5qXZ4Jeg5pcsP7b5peFSDpffpe1cqjASH/n9UTjBwOp6XpMSTwQ8Za2K5V02ueA7Tmw==}
+
+ classnames@2.5.1:
+ resolution: {integrity: sha512-saHYOzhIQs6wy2sVxTM6bUDsQO4F50V9RQ22qBpEdCW+I+/Wmke2HOl6lS6dTpdxVhb88/I6+Hs+438c3lfUow==}
+
+ cli-cursor@5.0.0:
+ resolution: {integrity: sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==}
+ engines: {node: '>=18'}
+
+ cli-truncate@4.0.0:
+ resolution: {integrity: sha512-nPdaFdQ0h/GEigbPClz11D0v/ZJEwxmeVZGeMo3Z5StPtUTkA9o1lD6QwoirYiSDzbcwn2XcjwmCp68W1IS4TA==}
+ engines: {node: '>=18'}
+
+ clsx@2.1.1:
+ resolution: {integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==}
+ engines: {node: '>=6'}
+
+ color-convert@2.0.1:
+ resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==}
+ engines: {node: '>=7.0.0'}
+
+ color-name@1.1.4:
+ resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==}
+
+ colorette@2.0.20:
+ resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==}
+
+ commander@13.1.0:
+ resolution: {integrity: sha512-/rFeCpNJQbhSZjGVwO9RFV3xPqbnERS8MmIQzCtD/zl6gpJuV/bMLuN92oG3F7d8oDEHHRrujSXNUr8fpjntKw==}
+ engines: {node: '>=18'}
+
+ commander@4.1.1:
+ resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==}
+ engines: {node: '>= 6'}
+
+ commander@7.2.0:
+ resolution: {integrity: sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==}
+ engines: {node: '>= 10'}
+
+ concat-map@0.0.1:
+ resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==}
+
+ convert-source-map@2.0.0:
+ resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==}
+
+ core-js-compat@3.41.0:
+ resolution: {integrity: sha512-RFsU9LySVue9RTwdDVX/T0e2Y6jRYWXERKElIjpuEOEnxaXffI0X7RUwVzfYLfzuLXSNJDYoRYUAmRUcyln20A==}
+
+ cosmiconfig@7.1.0:
+ resolution: {integrity: sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==}
+ engines: {node: '>=10'}
+
+ cross-spawn@7.0.6:
+ resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==}
+ engines: {node: '>= 8'}
+
+ css-select@4.3.0:
+ resolution: {integrity: sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==}
+
+ css-tree@1.1.3:
+ resolution: {integrity: sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==}
+ engines: {node: '>=8.0.0'}
+
+ css-what@6.1.0:
+ resolution: {integrity: sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==}
+ engines: {node: '>= 6'}
+
+ cssesc@3.0.0:
+ resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==}
+ engines: {node: '>=4'}
+ hasBin: true
+
+ csso@4.2.0:
+ resolution: {integrity: sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==}
+ engines: {node: '>=8.0.0'}
+
+ csstype@3.1.3:
+ resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==}
+
+ debug@4.4.0:
+ resolution: {integrity: sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==}
+ engines: {node: '>=6.0'}
+ peerDependencies:
+ supports-color: '*'
+ peerDependenciesMeta:
+ supports-color:
+ optional: true
+
+ dedent@1.5.3:
+ resolution: {integrity: sha512-NHQtfOOW68WD8lgypbLA5oT+Bt0xXJhiYvoR6SmmNXZfpzOGXwdKWmcwG8N7PwVVWV3eF/68nmD9BaJSsTBhyQ==}
+ peerDependencies:
+ babel-plugin-macros: ^3.1.0
+ peerDependenciesMeta:
+ babel-plugin-macros:
+ optional: true
+
+ deep-is@0.1.4:
+ resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==}
+
+ deep-object-diff@1.1.9:
+ resolution: {integrity: sha512-Rn+RuwkmkDwCi2/oXOFS9Gsr5lJZu/yTGpK7wAaAIE75CC+LCGEZHpY6VQJa/RoJcrmaA/docWJZvYohlNkWPA==}
+
+ deepmerge@4.3.1:
+ resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==}
+ engines: {node: '>=0.10.0'}
+
+ detect-node-es@1.1.0:
+ resolution: {integrity: sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==}
+
+ detect-node@2.1.0:
+ resolution: {integrity: sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==}
+
+ didyoumean@1.2.2:
+ resolution: {integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==}
+
+ dlv@1.1.3:
+ resolution: {integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==}
+
+ dom-serializer@1.4.1:
+ resolution: {integrity: sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==}
+
+ domelementtype@2.3.0:
+ resolution: {integrity: sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==}
+
+ domhandler@4.3.1:
+ resolution: {integrity: sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==}
+ engines: {node: '>= 4'}
+
+ domutils@2.8.0:
+ resolution: {integrity: sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==}
+
+ eastasianwidth@0.2.0:
+ resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==}
+
+ electron-to-chromium@1.5.140:
+ resolution: {integrity: sha512-o82Rj+ONp4Ip7Cl1r7lrqx/pXhbp/lh9DpKcMNscFJdh8ebyRofnc7Sh01B4jx403RI0oqTBvlZ7OBIZLMr2+Q==}
+
+ emoji-regex@10.4.0:
+ resolution: {integrity: sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw==}
+
+ emoji-regex@8.0.0:
+ resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==}
+
+ emoji-regex@9.2.2:
+ resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==}
+
+ entities@2.2.0:
+ resolution: {integrity: sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==}
+
+ entities@4.5.0:
+ resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==}
+ engines: {node: '>=0.12'}
+
+ environment@1.1.0:
+ resolution: {integrity: sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q==}
+ engines: {node: '>=18'}
+
+ error-ex@1.3.2:
+ resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==}
+
+ esbuild@0.20.2:
+ resolution: {integrity: sha512-WdOOppmUNU+IbZ0PaDiTst80zjnrOkyJNHoKupIcVyU8Lvla3Ugx94VzkQ32Ijqd7UhHJy75gNWDMUekcrSJ6g==}
+ engines: {node: '>=12'}
+ hasBin: true
+
+ escalade@3.2.0:
+ resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==}
+ engines: {node: '>=6'}
+
+ escape-string-regexp@4.0.0:
+ resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==}
+ engines: {node: '>=10'}
+
+ eslint-config-prettier@10.1.2:
+ resolution: {integrity: sha512-Epgp/EofAUeEpIdZkW60MHKvPyru1ruQJxPL+WIycnaPApuseK0Zpkrh/FwL9oIpQvIhJwV7ptOy0DWUjTlCiA==}
+ hasBin: true
+ peerDependencies:
+ eslint: '>=7.0.0'
+
+ eslint-plugin-prettier@5.2.6:
+ resolution: {integrity: sha512-mUcf7QG2Tjk7H055Jk0lGBjbgDnfrvqjhXh9t2xLMSCjZVcw9Rb1V6sVNXO0th3jgeO7zllWPTNRil3JW94TnQ==}
+ engines: {node: ^14.18.0 || >=16.0.0}
+ peerDependencies:
+ '@types/eslint': '>=8.0.0'
+ eslint: '>=8.0.0'
+ eslint-config-prettier: '>= 7.0.0 <10.0.0 || >=10.1.0'
+ prettier: '>=3.0.0'
+ peerDependenciesMeta:
+ '@types/eslint':
+ optional: true
+ eslint-config-prettier:
+ optional: true
+
+ eslint-plugin-react-hooks@5.2.0:
+ resolution: {integrity: sha512-+f15FfK64YQwZdJNELETdn5ibXEUQmW1DZL6KXhNnc2heoy/sg9VJJeT7n8TlMWouzWqSWavFkIhHyIbIAEapg==}
+ engines: {node: '>=10'}
+ peerDependencies:
+ eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0
+
+ eslint-plugin-react-refresh@0.4.20:
+ resolution: {integrity: sha512-XpbHQ2q5gUF8BGOX4dHe+71qoirYMhApEPZ7sfhF/dNnOF1UXnCMGZf79SFTBO7Bz5YEIT4TMieSlJBWhP9WBA==}
+ peerDependencies:
+ eslint: '>=8.40'
+
+ eslint-scope@8.3.0:
+ resolution: {integrity: sha512-pUNxi75F8MJ/GdeKtVLSbYg4ZI34J6C0C7sbL4YOp2exGwen7ZsuBqKzUhXd0qMQ362yET3z+uPwKeg/0C2XCQ==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+
+ eslint-visitor-keys@3.4.3:
+ resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==}
+ engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+
+ eslint-visitor-keys@4.2.0:
+ resolution: {integrity: sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+
+ eslint@9.25.1:
+ resolution: {integrity: sha512-E6Mtz9oGQWDCpV12319d59n4tx9zOTXSTmc8BLVxBx+G/0RdM5MvEEJLU9c0+aleoePYYgVTOsRblx433qmhWQ==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+ hasBin: true
+ peerDependencies:
+ jiti: '*'
+ peerDependenciesMeta:
+ jiti:
+ optional: true
+
+ espree@10.3.0:
+ resolution: {integrity: sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+
+ esquery@1.6.0:
+ resolution: {integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==}
+ engines: {node: '>=0.10'}
+
+ esrecurse@4.3.0:
+ resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==}
+ engines: {node: '>=4.0'}
+
+ estraverse@5.3.0:
+ resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==}
+ engines: {node: '>=4.0'}
+
+ estree-walker@2.0.2:
+ resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==}
+
+ esutils@2.0.3:
+ resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==}
+ engines: {node: '>=0.10.0'}
+
+ eventemitter3@5.0.1:
+ resolution: {integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==}
+
+ execa@8.0.1:
+ resolution: {integrity: sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==}
+ engines: {node: '>=16.17'}
+
+ fast-deep-equal@3.1.3:
+ resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==}
+
+ fast-diff@1.3.0:
+ resolution: {integrity: sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==}
+
+ fast-glob@3.3.3:
+ resolution: {integrity: sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==}
+ engines: {node: '>=8.6.0'}
+
+ fast-json-stable-stringify@2.1.0:
+ resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==}
+
+ fast-levenshtein@2.0.6:
+ resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==}
+
+ fastq@1.19.1:
+ resolution: {integrity: sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==}
+
+ file-entry-cache@8.0.0:
+ resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==}
+ engines: {node: '>=16.0.0'}
+
+ fill-range@7.1.1:
+ resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==}
+ engines: {node: '>=8'}
+
+ find-up@5.0.0:
+ resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==}
+ engines: {node: '>=10'}
+
+ flat-cache@4.0.1:
+ resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==}
+ engines: {node: '>=16'}
+
+ flatted@3.3.3:
+ resolution: {integrity: sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==}
+
+ foreground-child@3.3.1:
+ resolution: {integrity: sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==}
+ engines: {node: '>=14'}
+
+ fraction.js@4.3.7:
+ resolution: {integrity: sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==}
+
+ framer-motion@12.7.4:
+ resolution: {integrity: sha512-jX0bPsTmU0oPZTYz/dVyD0dmOyEOEJvdn0TaZBE5I8g2GvVnnQnW9f65cJnoVfUkY3WZWNXGXnPbVA9YnaIfVA==}
+ peerDependencies:
+ '@emotion/is-prop-valid': '*'
+ react: ^18.0.0 || ^19.0.0
+ react-dom: ^18.0.0 || ^19.0.0
+ peerDependenciesMeta:
+ '@emotion/is-prop-valid':
+ optional: true
+ react:
+ optional: true
+ react-dom:
+ optional: true
+
+ fs.realpath@1.0.0:
+ resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==}
+
+ fsevents@2.3.3:
+ resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==}
+ engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
+ os: [darwin]
+
+ function-bind@1.1.2:
+ resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==}
+
+ gensync@1.0.0-beta.2:
+ resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==}
+ engines: {node: '>=6.9.0'}
+
+ get-east-asian-width@1.3.0:
+ resolution: {integrity: sha512-vpeMIQKxczTD/0s2CdEWHcb0eeJe6TFjxb+J5xgX7hScxqrGuyjmv4c1D4A/gelKfyox0gJJwIHF+fLjeaM8kQ==}
+ engines: {node: '>=18'}
+
+ get-nonce@1.0.1:
+ resolution: {integrity: sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q==}
+ engines: {node: '>=6'}
+
+ get-stream@8.0.1:
+ resolution: {integrity: sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==}
+ engines: {node: '>=16'}
+
+ glob-parent@5.1.2:
+ resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==}
+ engines: {node: '>= 6'}
+
+ glob-parent@6.0.2:
+ resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==}
+ engines: {node: '>=10.13.0'}
+
+ glob@10.4.5:
+ resolution: {integrity: sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==}
+ hasBin: true
+
+ glob@7.2.3:
+ resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==}
+ deprecated: Glob versions prior to v9 are no longer supported
+
+ globals@11.12.0:
+ resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==}
+ engines: {node: '>=4'}
+
+ globals@14.0.0:
+ resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==}
+ engines: {node: '>=18'}
+
+ globals@15.15.0:
+ resolution: {integrity: sha512-7ACyT3wmyp3I61S4fG682L0VA2RGD9otkqGJIwNUMF1SWUombIIk+af1unuDYgMm082aHYwD+mzJvv9Iu8dsgg==}
+ engines: {node: '>=18'}
+
+ gql.tada@1.8.10:
+ resolution: {integrity: sha512-FrvSxgz838FYVPgZHGOSgbpOjhR+yq44rCzww3oOPJYi0OvBJjAgCiP6LEokZIYND2fUTXzQAyLgcvgw1yNP5A==}
+ hasBin: true
+ peerDependencies:
+ typescript: ^5.0.0
+
+ graphemer@1.4.0:
+ resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==}
+
+ graphql@16.10.0:
+ resolution: {integrity: sha512-AjqGKbDGUFRKIRCP9tCKiIGHyriz2oHEbPIbEtcSLSs4YjReZOIPQQWek4+6hjw62H9QShXHyaGivGiYVLeYFQ==}
+ engines: {node: ^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0}
+
+ gsap@3.12.7:
+ resolution: {integrity: sha512-V4GsyVamhmKefvcAKaoy0h6si0xX7ogwBoBSs2CTJwt7luW0oZzC0LhdkyuKV8PJAXr7Yaj8pMjCKD4GJ+eEMg==}
+
+ has-flag@4.0.0:
+ resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==}
+ engines: {node: '>=8'}
+
+ hasown@2.0.2:
+ resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==}
+ engines: {node: '>= 0.4'}
+
+ human-signals@5.0.0:
+ resolution: {integrity: sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==}
+ engines: {node: '>=16.17.0'}
+
+ husky@9.1.7:
+ resolution: {integrity: sha512-5gs5ytaNjBrh5Ow3zrvdUUY+0VxIuWVL4i9irt6friV+BqdCfmV11CQTWMiBYWHbXhco+J1kHfTOUkePhCDvMA==}
+ engines: {node: '>=18'}
+ hasBin: true
+
+ ieee754@1.2.1:
+ resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==}
+
+ ignore@5.3.2:
+ resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==}
+ engines: {node: '>= 4'}
+
+ immer@10.1.1:
+ resolution: {integrity: sha512-s2MPrmjovJcoMaHtx6K11Ra7oD05NT97w1IC5zpMkT6Atjr7H8LjaDd81iIxUYpMKSRRNMJE703M1Fhr/TctHw==}
+
+ import-fresh@3.3.1:
+ resolution: {integrity: sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==}
+ engines: {node: '>=6'}
+
+ imurmurhash@0.1.4:
+ resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==}
+ engines: {node: '>=0.8.19'}
+
+ inflight@1.0.6:
+ resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==}
+ deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.
+
+ inherits@2.0.4:
+ resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==}
+
+ is-arrayish@0.2.1:
+ resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==}
+
+ is-binary-path@2.1.0:
+ resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==}
+ engines: {node: '>=8'}
+
+ is-core-module@2.16.1:
+ resolution: {integrity: sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==}
+ engines: {node: '>= 0.4'}
+
+ is-extglob@2.1.1:
+ resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==}
+ engines: {node: '>=0.10.0'}
+
+ is-fullwidth-code-point@3.0.0:
+ resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==}
+ engines: {node: '>=8'}
+
+ is-fullwidth-code-point@4.0.0:
+ resolution: {integrity: sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==}
+ engines: {node: '>=12'}
+
+ is-fullwidth-code-point@5.0.0:
+ resolution: {integrity: sha512-OVa3u9kkBbw7b8Xw5F9P+D/T9X+Z4+JruYVNapTjPYZYUznQ5YfWeFkOj606XYYW8yugTfC8Pj0hYqvi4ryAhA==}
+ engines: {node: '>=18'}
+
+ is-glob@4.0.3:
+ resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==}
+ engines: {node: '>=0.10.0'}
+
+ is-number@7.0.0:
+ resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==}
+ engines: {node: '>=0.12.0'}
+
+ is-stream@3.0.0:
+ resolution: {integrity: sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==}
+ engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
+
+ isexe@2.0.0:
+ resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==}
+
+ jackspeak@3.4.3:
+ resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==}
+
+ jiti@1.21.7:
+ resolution: {integrity: sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A==}
+ hasBin: true
+
+ jose@6.0.10:
+ resolution: {integrity: sha512-skIAxZqcMkOrSwjJvplIPYrlXGpxTPnro2/QWTDCxAdWQrSTV5/KqspMWmi5WAx5+ULswASJiZ0a+1B/Lxt9cw==}
+
+ js-sha3@0.8.0:
+ resolution: {integrity: sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q==}
+
+ js-tokens@4.0.0:
+ resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==}
+
+ js-yaml@4.1.0:
+ resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==}
+ hasBin: true
+
+ jsesc@3.0.2:
+ resolution: {integrity: sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==}
+ engines: {node: '>=6'}
+ hasBin: true
+
+ jsesc@3.1.0:
+ resolution: {integrity: sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==}
+ engines: {node: '>=6'}
+ hasBin: true
+
+ json-buffer@3.0.1:
+ resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==}
+
+ json-parse-even-better-errors@2.3.1:
+ resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==}
+
+ json-schema-traverse@0.4.1:
+ resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==}
+
+ json-stable-stringify-without-jsonify@1.0.1:
+ resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==}
+
+ json5@2.2.3:
+ resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==}
+ engines: {node: '>=6'}
+ hasBin: true
+
+ keyv@4.5.4:
+ resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==}
+
+ levn@0.4.1:
+ resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==}
+ engines: {node: '>= 0.8.0'}
+
+ lilconfig@3.1.3:
+ resolution: {integrity: sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==}
+ engines: {node: '>=14'}
+
+ lines-and-columns@1.2.4:
+ resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==}
+
+ lint-staged@15.5.1:
+ resolution: {integrity: sha512-6m7u8mue4Xn6wK6gZvSCQwBvMBR36xfY24nF5bMTf2MHDYG6S3yhJuOgdYVw99hsjyDt2d4z168b3naI8+NWtQ==}
+ engines: {node: '>=18.12.0'}
+ hasBin: true
+
+ listr2@8.3.2:
+ resolution: {integrity: sha512-vsBzcU4oE+v0lj4FhVLzr9dBTv4/fHIa57l+GCwovP8MoFNZJTOhGU8PXd4v2VJCbECAaijBiHntiekFMLvo0g==}
+ engines: {node: '>=18.0.0'}
+
+ locate-path@6.0.0:
+ resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==}
+ engines: {node: '>=10'}
+
+ lodash-es@4.17.21:
+ resolution: {integrity: sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==}
+
+ lodash.debounce@4.0.8:
+ resolution: {integrity: sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==}
+
+ lodash.merge@4.6.2:
+ resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==}
+
+ log-update@6.1.0:
+ resolution: {integrity: sha512-9ie8ItPR6tjY5uYJh8K/Zrv/RMZ5VOlOWvtZdEHYSTFKZfIBPQa9tOAEeAWhd+AnIneLJ22w5fjOYtoutpWq5w==}
+ engines: {node: '>=18'}
+
+ loose-envify@1.4.0:
+ resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==}
+ hasBin: true
+
+ lru-cache@10.4.3:
+ resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==}
+
+ lru-cache@5.1.1:
+ resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==}
+
+ lucide-react@0.488.0:
+ resolution: {integrity: sha512-ronlL0MyKut4CEzBY/ai2ZpKPxyWO4jUqdAkm2GNK5Zn3Rj+swDz+3lvyAUXN0PNqPKIX6XM9Xadwz/skLs/pQ==}
+ peerDependencies:
+ react: ^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0
+
+ lz-string@1.5.0:
+ resolution: {integrity: sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==}
+ hasBin: true
+
+ match-sorter@6.3.4:
+ resolution: {integrity: sha512-jfZW7cWS5y/1xswZo8VBOdudUiSd9nifYRWphc9M5D/ee4w4AoXLgBEdRbgVaxbMuagBPeUC5y2Hi8DO6o9aDg==}
+
+ mdn-data@2.0.14:
+ resolution: {integrity: sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==}
+
+ media-query-parser@2.0.2:
+ resolution: {integrity: sha512-1N4qp+jE0pL5Xv4uEcwVUhIkwdUO3S/9gML90nqKA7v7FcOS5vUtatfzok9S9U1EJU8dHWlcv95WLnKmmxZI9w==}
+
+ merge-stream@2.0.0:
+ resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==}
+
+ merge2@1.4.1:
+ resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==}
+ engines: {node: '>= 8'}
+
+ micromatch@4.0.8:
+ resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==}
+ engines: {node: '>=8.6'}
+
+ microseconds@0.2.0:
+ resolution: {integrity: sha512-n7DHHMjR1avBbSpsTBj6fmMGh2AGrifVV4e+WYc3Q9lO+xnSZ3NyhcBND3vzzatt05LFhoKFRxrIyklmLlUtyA==}
+
+ mimic-fn@4.0.0:
+ resolution: {integrity: sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==}
+ engines: {node: '>=12'}
+
+ mimic-function@5.0.1:
+ resolution: {integrity: sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==}
+ engines: {node: '>=18'}
+
+ mini-svg-data-uri@1.4.4:
+ resolution: {integrity: sha512-r9deDe9p5FJUPZAk3A59wGH7Ii9YrjjWw0jmw/liSbHl2CHiyXj6FcDXDu2K3TjVAXqiJdaw3xxwlZZr9E6nHg==}
+ hasBin: true
+
+ minimatch@3.1.2:
+ resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==}
+
+ minimatch@9.0.5:
+ resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==}
+ engines: {node: '>=16 || 14 >=14.17'}
+
+ minipass@7.1.2:
+ resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==}
+ engines: {node: '>=16 || 14 >=14.17'}
+
+ mitt@3.0.0:
+ resolution: {integrity: sha512-7dX2/10ITVyqh4aOSVI9gdape+t9l2/8QxHrFmUXu4EEUpdlxl6RudZUPZoc+zuY2hk1j7XxVroIVIan/pD/SQ==}
+
+ mitt@3.0.1:
+ resolution: {integrity: sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==}
+
+ modern-ahocorasick@1.1.0:
+ resolution: {integrity: sha512-sEKPVl2rM+MNVkGQt3ChdmD8YsigmXdn5NifZn6jiwn9LRJpWm8F3guhaqrJT/JOat6pwpbXEk6kv+b9DMIjsQ==}
+
+ motion-dom@12.7.4:
+ resolution: {integrity: sha512-1ZUHAoSUMMxP6jPqyxlk9XUfb6NxMsnWPnH2YGhrOhTURLcXWbETi6eemoKb60Pe32NVJYduL4B62VQSO5Jq8Q==}
+
+ motion-utils@12.7.2:
+ resolution: {integrity: sha512-XhZwqctxyJs89oX00zn3OGCuIIpVevbTa+u82usWBC6pSHUd2AoNWiYa7Du8tJxJy9TFbZ82pcn5t7NOm1PHAw==}
+
+ ms@2.1.3:
+ resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==}
+
+ mz@2.7.0:
+ resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==}
+
+ nano-time@1.0.0:
+ resolution: {integrity: sha512-flnngywOoQ0lLQOTRNexn2gGSNuM9bKj9RZAWSzhQ+UJYaAFG9bac4DW9VHjUAzrOaIcajHybCTHe/bkvozQqA==}
+
+ nanoid@3.3.11:
+ resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==}
+ engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
+ hasBin: true
+
+ nanostores@0.10.3:
+ resolution: {integrity: sha512-Nii8O1XqmawqSCf9o2aWqVxhKRN01+iue9/VEd1TiJCr9VT5XxgPFbF1Edl1XN6pwJcZRsl8Ki+z01yb/T/C2g==}
+ engines: {node: ^18.0.0 || >=20.0.0}
+
+ natural-compare@1.4.0:
+ resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==}
+
+ node-releases@2.0.19:
+ resolution: {integrity: sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==}
+
+ normalize-path@3.0.0:
+ resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==}
+ engines: {node: '>=0.10.0'}
+
+ normalize-range@0.1.2:
+ resolution: {integrity: sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==}
+ engines: {node: '>=0.10.0'}
+
+ npm-run-path@5.3.0:
+ resolution: {integrity: sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==}
+ engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
+
+ nth-check@2.1.1:
+ resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==}
+
+ object-assign@4.1.1:
+ resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==}
+ engines: {node: '>=0.10.0'}
+
+ object-hash@3.0.0:
+ resolution: {integrity: sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==}
+ engines: {node: '>= 6'}
+
+ oblivious-set@1.0.0:
+ resolution: {integrity: sha512-z+pI07qxo4c2CulUHCDf9lcqDlMSo72N/4rLUpRXf6fu+q8vjt8y0xS+Tlf8NTJDdTXHbdeO1n3MlbctwEoXZw==}
+
+ once@1.4.0:
+ resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==}
+
+ onetime@6.0.0:
+ resolution: {integrity: sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==}
+ engines: {node: '>=12'}
+
+ onetime@7.0.0:
+ resolution: {integrity: sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==}
+ engines: {node: '>=18'}
+
+ optionator@0.9.4:
+ resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==}
+ engines: {node: '>= 0.8.0'}
+
+ p-limit@3.1.0:
+ resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==}
+ engines: {node: '>=10'}
+
+ p-locate@5.0.0:
+ resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==}
+ engines: {node: '>=10'}
+
+ package-json-from-dist@1.0.1:
+ resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==}
+
+ parent-module@1.0.1:
+ resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==}
+ engines: {node: '>=6'}
+
+ parse-json@5.2.0:
+ resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==}
+ engines: {node: '>=8'}
+
+ path-exists@4.0.0:
+ resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==}
+ engines: {node: '>=8'}
+
+ path-is-absolute@1.0.1:
+ resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==}
+ engines: {node: '>=0.10.0'}
+
+ path-key@3.1.1:
+ resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==}
+ engines: {node: '>=8'}
+
+ path-key@4.0.0:
+ resolution: {integrity: sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==}
+ engines: {node: '>=12'}
+
+ path-parse@1.0.7:
+ resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==}
+
+ path-scurry@1.11.1:
+ resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==}
+ engines: {node: '>=16 || 14 >=14.18'}
+
+ path-type@4.0.0:
+ resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==}
+ engines: {node: '>=8'}
+
+ picocolors@1.1.1:
+ resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==}
+
+ picomatch@2.3.1:
+ resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==}
+ engines: {node: '>=8.6'}
+
+ pidtree@0.6.0:
+ resolution: {integrity: sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g==}
+ engines: {node: '>=0.10'}
+ hasBin: true
+
+ pify@2.3.0:
+ resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==}
+ engines: {node: '>=0.10.0'}
+
+ pirates@4.0.7:
+ resolution: {integrity: sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==}
+ engines: {node: '>= 6'}
+
+ poseidon-lite@0.2.1:
+ resolution: {integrity: sha512-xIr+G6HeYfOhCuswdqcFpSX47SPhm0EpisWJ6h7fHlWwaVIvH3dLnejpatrtw6Xc6HaLrpq05y7VRfvDmDGIog==}
+
+ postcss-import@15.1.0:
+ resolution: {integrity: sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==}
+ engines: {node: '>=14.0.0'}
+ peerDependencies:
+ postcss: ^8.0.0
+
+ postcss-js@4.0.1:
+ resolution: {integrity: sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==}
+ engines: {node: ^12 || ^14 || >= 16}
+ peerDependencies:
+ postcss: ^8.4.21
+
+ postcss-load-config@4.0.2:
+ resolution: {integrity: sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==}
+ engines: {node: '>= 14'}
+ peerDependencies:
+ postcss: '>=8.0.9'
+ ts-node: '>=9.0.0'
+ peerDependenciesMeta:
+ postcss:
+ optional: true
+ ts-node:
+ optional: true
+
+ postcss-nested@6.2.0:
+ resolution: {integrity: sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ==}
+ engines: {node: '>=12.0'}
+ peerDependencies:
+ postcss: ^8.2.14
+
+ postcss-selector-parser@6.1.2:
+ resolution: {integrity: sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==}
+ engines: {node: '>=4'}
+
+ postcss-value-parser@4.2.0:
+ resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==}
+
+ postcss@8.5.3:
+ resolution: {integrity: sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A==}
+ engines: {node: ^10 || ^12 || >=14}
+
+ prelude-ls@1.2.1:
+ resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==}
+ engines: {node: '>= 0.8.0'}
+
+ prettier-linter-helpers@1.0.0:
+ resolution: {integrity: sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==}
+ engines: {node: '>=6.0.0'}
+
+ prettier@3.5.3:
+ resolution: {integrity: sha512-QQtaxnoDJeAkDvDKWCLiwIXkTgRhwYDEQCghU9Z6q03iyek/rxRh/2lC3HB7P8sWT2xC/y5JDctPLBIGzHKbhw==}
+ engines: {node: '>=14'}
+ hasBin: true
+
+ punycode@2.3.1:
+ resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==}
+ engines: {node: '>=6'}
+
+ queue-microtask@1.2.3:
+ resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==}
+
+ react-dom@18.3.1:
+ resolution: {integrity: sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==}
+ peerDependencies:
+ react: ^18.3.1
+
+ react-icons@5.5.0:
+ resolution: {integrity: sha512-MEFcXdkP3dLo8uumGI5xN3lDFNsRtrjbOEKDLD7yv76v4wpnEq2Lt2qeHaQOr34I/wPN3s3+N08WkQ+CW37Xiw==}
+ peerDependencies:
+ react: '*'
+
+ react-is@18.3.1:
+ resolution: {integrity: sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==}
+
+ react-query@3.39.2:
+ resolution: {integrity: sha512-F6hYDKyNgDQfQOuR1Rsp3VRzJnWHx6aRnnIZHMNGGgbL3SBgpZTDg8MQwmxOgpCAoqZJA+JSNCydF1xGJqKOCA==}
+ peerDependencies:
+ react: ^16.8.0 || ^17.0.0 || ^18.0.0
+ react-dom: '*'
+ react-native: '*'
+ peerDependenciesMeta:
+ react-dom:
+ optional: true
+ react-native:
+ optional: true
+
+ react-redux@9.2.0:
+ resolution: {integrity: sha512-ROY9fvHhwOD9ySfrF0wmvu//bKCQ6AeZZq1nJNtbDC+kk5DuSuNX/n6YWYF/SYy7bSba4D4FSz8DJeKY/S/r+g==}
+ peerDependencies:
+ '@types/react': ^18.2.25 || ^19
+ react: ^18.0 || ^19
+ redux: ^5.0.0
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+ redux:
+ optional: true
+
+ react-refresh@0.17.0:
+ resolution: {integrity: sha512-z6F7K9bV85EfseRCp2bzrpyQ0Gkw1uLoCel9XBVWPg/TjRj94SkJzUTGfOa4bs7iJvBWtQG0Wq7wnI0syw3EBQ==}
+ engines: {node: '>=0.10.0'}
+
+ react-remove-scroll-bar@2.3.8:
+ resolution: {integrity: sha512-9r+yi9+mgU33AKcj6IbT9oRCO78WriSj6t/cF8DWBZJ9aOGPOTEDvdUDz1FwKim7QXWwmHqtdHnRJfhAxEG46Q==}
+ engines: {node: '>=10'}
+ peerDependencies:
+ '@types/react': '*'
+ react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+
+ react-remove-scroll@2.5.5:
+ resolution: {integrity: sha512-ImKhrzJJsyXJfBZ4bzu8Bwpka14c/fQt0k+cyFp/PBhTfyDnU5hjOtM4AG/0AMyy8oKzOTR0lDgJIM7pYXI0kw==}
+ engines: {node: '>=10'}
+ peerDependencies:
+ '@types/react': ^16.8.0 || ^17.0.0 || ^18.0.0
+ react: ^16.8.0 || ^17.0.0 || ^18.0.0
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+
+ react-remove-scroll@2.6.3:
+ resolution: {integrity: sha512-pnAi91oOk8g8ABQKGF5/M9qxmmOPxaAnopyTHYfqYEwJhyFrbbBtHuSgtKEoH0jpcxx5o3hXqH1mNd9/Oi+8iQ==}
+ engines: {node: '>=10'}
+ peerDependencies:
+ '@types/react': '*'
+ react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+
+ react-router-dom@6.30.0:
+ resolution: {integrity: sha512-x30B78HV5tFk8ex0ITwzC9TTZMua4jGyA9IUlH1JLQYQTFyxr/ZxwOJq7evg1JX1qGVUcvhsmQSKdPncQrjTgA==}
+ engines: {node: '>=14.0.0'}
+ peerDependencies:
+ react: '>=16.8'
+ react-dom: '>=16.8'
+
+ react-router@6.30.0:
+ resolution: {integrity: sha512-D3X8FyH9nBcTSHGdEKurK7r8OYE1kKFn3d/CF+CoxbSHkxU7o37+Uh7eAHRXr6k2tSExXYO++07PeXJtA/dEhQ==}
+ engines: {node: '>=14.0.0'}
+ peerDependencies:
+ react: '>=16.8'
+
+ react-style-singleton@2.2.3:
+ resolution: {integrity: sha512-b6jSvxvVnyptAiLjbkWLE/lOnR4lfTtDAl+eUC7RZy+QQWc6wRzIV2CE6xBuMmDxc2qIihtDCZD5NPOFl7fRBQ==}
+ engines: {node: '>=10'}
+ peerDependencies:
+ '@types/react': '*'
+ react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+
+ react@18.3.1:
+ resolution: {integrity: sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==}
+ engines: {node: '>=0.10.0'}
+
+ read-cache@1.0.0:
+ resolution: {integrity: sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==}
+
+ readdirp@3.6.0:
+ resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==}
+ engines: {node: '>=8.10.0'}
+
+ redux-thunk@3.1.0:
+ resolution: {integrity: sha512-NW2r5T6ksUKXCabzhL9z+h206HQw/NJkcLm1GPImRQ8IzfXwRGqjVhKJGauHirT0DAuyy6hjdnMZaRoAcy0Klw==}
+ peerDependencies:
+ redux: ^5.0.0
+
+ redux@5.0.1:
+ resolution: {integrity: sha512-M9/ELqF6fy8FwmkpnF0S3YKOqMyoWJ4+CS5Efg2ct3oY9daQvd/Pc71FpGZsVsbl3Cpb+IIcjBDUnnyBdQbq4w==}
+
+ regenerate-unicode-properties@10.2.0:
+ resolution: {integrity: sha512-DqHn3DwbmmPVzeKj9woBadqmXxLvQoQIwu7nopMc72ztvxVmVk2SBhSnx67zuye5TP+lJsb/TBQsjLKhnDf3MA==}
+ engines: {node: '>=4'}
+
+ regenerate@1.4.2:
+ resolution: {integrity: sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==}
+
+ regenerator-runtime@0.14.1:
+ resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==}
+
+ regenerator-transform@0.15.2:
+ resolution: {integrity: sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==}
+
+ regexpu-core@6.2.0:
+ resolution: {integrity: sha512-H66BPQMrv+V16t8xtmq+UC0CBpiTBA60V8ibS1QVReIp8T1z8hwFxqcGzm9K6lgsN7sB5edVH8a+ze6Fqm4weA==}
+ engines: {node: '>=4'}
+
+ regjsgen@0.8.0:
+ resolution: {integrity: sha512-RvwtGe3d7LvWiDQXeQw8p5asZUmfU1G/l6WbUXeHta7Y2PEIvBTwH6E2EfmYUK8pxcxEdEmaomqyp0vZZ7C+3Q==}
+
+ regjsparser@0.12.0:
+ resolution: {integrity: sha512-cnE+y8bz4NhMjISKbgeVJtqNbtf5QpjZP+Bslo+UqkIt9QPnX9q095eiRRASJG1/tz6dlNr6Z5NsBiWYokp6EQ==}
+ hasBin: true
+
+ remove-accents@0.5.0:
+ resolution: {integrity: sha512-8g3/Otx1eJaVD12e31UbJj1YzdtVvzH85HV7t+9MJYk/u3XmkOUJ5Ys9wQrf9PCPK8+xn4ymzqYCiZl6QWKn+A==}
+
+ reselect@5.1.1:
+ resolution: {integrity: sha512-K/BG6eIky/SBpzfHZv/dd+9JBFiS4SWV7FIujVyJRux6e45+73RaUHXLmIR1f7WOMaQ0U1km6qwklRQxpJJY0w==}
+
+ resolve-from@4.0.0:
+ resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==}
+ engines: {node: '>=4'}
+
+ resolve@1.22.10:
+ resolution: {integrity: sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==}
+ engines: {node: '>= 0.4'}
+ hasBin: true
+
+ restore-cursor@5.1.0:
+ resolution: {integrity: sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA==}
+ engines: {node: '>=18'}
+
+ reusify@1.1.0:
+ resolution: {integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==}
+ engines: {iojs: '>=1.0.0', node: '>=0.10.0'}
+
+ rfdc@1.4.1:
+ resolution: {integrity: sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==}
+
+ rimraf@3.0.2:
+ resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==}
+ deprecated: Rimraf versions prior to v4 are no longer supported
+ hasBin: true
+
+ rollup@4.40.0:
+ resolution: {integrity: sha512-Noe455xmA96nnqH5piFtLobsGbCij7Tu+tb3c1vYjNbTkfzGqXqQXG3wJaYXkRZuQ0vEYN4bhwg7QnIrqB5B+w==}
+ engines: {node: '>=18.0.0', npm: '>=8.0.0'}
+ hasBin: true
+
+ run-parallel@1.2.0:
+ resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==}
+
+ scheduler@0.23.2:
+ resolution: {integrity: sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==}
+
+ semver@6.3.1:
+ resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==}
+ hasBin: true
+
+ semver@7.7.1:
+ resolution: {integrity: sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==}
+ engines: {node: '>=10'}
+ hasBin: true
+
+ shebang-command@2.0.0:
+ resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==}
+ engines: {node: '>=8'}
+
+ shebang-regex@3.0.0:
+ resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==}
+ engines: {node: '>=8'}
+
+ signal-exit@4.1.0:
+ resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==}
+ engines: {node: '>=14'}
+
+ slice-ansi@5.0.0:
+ resolution: {integrity: sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==}
+ engines: {node: '>=12'}
+
+ slice-ansi@7.1.0:
+ resolution: {integrity: sha512-bSiSngZ/jWeX93BqeIAbImyTbEihizcwNjFoRUIY/T1wWQsfsm2Vw1agPKylXvQTU7iASGdHhyqRlqQzfz+Htg==}
+ engines: {node: '>=18'}
+
+ source-map-js@1.2.1:
+ resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==}
+ engines: {node: '>=0.10.0'}
+
+ source-map@0.6.1:
+ resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==}
+ engines: {node: '>=0.10.0'}
+
+ stable@0.1.8:
+ resolution: {integrity: sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==}
+ deprecated: 'Modern JS already guarantees Array#sort() is a stable sort, so this library is deprecated. See the compatibility table on MDN: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort#browser_compatibility'
+
+ string-argv@0.3.2:
+ resolution: {integrity: sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==}
+ engines: {node: '>=0.6.19'}
+
+ string-width@4.2.3:
+ resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==}
+ engines: {node: '>=8'}
+
+ string-width@5.1.2:
+ resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==}
+ engines: {node: '>=12'}
+
+ string-width@7.2.0:
+ resolution: {integrity: sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==}
+ engines: {node: '>=18'}
+
+ strip-ansi@6.0.1:
+ resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==}
+ engines: {node: '>=8'}
+
+ strip-ansi@7.1.0:
+ resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==}
+ engines: {node: '>=12'}
+
+ strip-final-newline@3.0.0:
+ resolution: {integrity: sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==}
+ engines: {node: '>=12'}
+
+ strip-json-comments@3.1.1:
+ resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==}
+ engines: {node: '>=8'}
+
+ sucrase@3.35.0:
+ resolution: {integrity: sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==}
+ engines: {node: '>=16 || 14 >=14.17'}
+ hasBin: true
+
+ superstruct@1.0.3:
+ resolution: {integrity: sha512-8iTn3oSS8nRGn+C2pgXSKPI3jmpm6FExNazNpjvqS6ZUJQCej3PUXEKM8NjHBOs54ExM+LPW/FBRhymrdcCiSg==}
+ engines: {node: '>=14.0.0'}
+
+ supports-color@7.2.0:
+ resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==}
+ engines: {node: '>=8'}
+
+ supports-preserve-symlinks-flag@1.0.0:
+ resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==}
+ engines: {node: '>= 0.4'}
+
+ svg-parser@2.0.4:
+ resolution: {integrity: sha512-e4hG1hRwoOdRb37cIMSgzNsxyzKfayW6VOflrwvR+/bzrkyxY/31WkbgnQpgtrNp1SdpJvpUAGTa/ZoiPNDuRQ==}
+
+ svgo@2.8.0:
+ resolution: {integrity: sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg==}
+ engines: {node: '>=10.13.0'}
+ hasBin: true
+
+ synckit@0.11.4:
+ resolution: {integrity: sha512-Q/XQKRaJiLiFIBNN+mndW7S/RHxvwzuZS6ZwmRzUBqJBv/5QIKCEwkBC8GBf8EQJKYnaFs0wOZbKTXBPj8L9oQ==}
+ engines: {node: ^14.18.0 || >=16.0.0}
+
+ tailwindcss@3.4.17:
+ resolution: {integrity: sha512-w33E2aCvSDP0tW9RZuNXadXlkHXqFzSkQew/aIa2i/Sj8fThxwovwlXHSPXTbAHwEIhBFXAedUhP2tueAKP8Og==}
+ engines: {node: '>=14.0.0'}
+ hasBin: true
+
+ thenify-all@1.6.0:
+ resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==}
+ engines: {node: '>=0.8'}
+
+ thenify@3.3.1:
+ resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==}
+
+ to-regex-range@5.0.1:
+ resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==}
+ engines: {node: '>=8.0'}
+
+ tr46@0.0.3:
+ resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==}
+
+ ts-api-utils@2.1.0:
+ resolution: {integrity: sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ==}
+ engines: {node: '>=18.12'}
+ peerDependencies:
+ typescript: '>=4.8.4'
+
+ ts-interface-checker@0.1.13:
+ resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==}
+
+ tslib@2.8.1:
+ resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==}
+
+ tweetnacl@1.0.3:
+ resolution: {integrity: sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw==}
+
+ type-check@0.4.0:
+ resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==}
+ engines: {node: '>= 0.8.0'}
+
+ typescript-eslint@8.31.0:
+ resolution: {integrity: sha512-u+93F0sB0An8WEAPtwxVhFby573E8ckdjwUUQUj9QA4v8JAvgtoDdIyYR3XFwFHq2W1KJ1AurwJCO+w+Y1ixyQ==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+ peerDependencies:
+ eslint: ^8.57.0 || ^9.0.0
+ typescript: '>=4.8.4 <5.9.0'
+
+ typescript@5.7.3:
+ resolution: {integrity: sha512-84MVSjMEHP+FQRPy3pX9sTVV/INIex71s9TL2Gm5FG/WG1SqXeKyZ0k7/blY/4FdOzI12CBy1vGc4og/eus0fw==}
+ engines: {node: '>=14.17'}
+ hasBin: true
+
+ undici-types@6.21.0:
+ resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==}
+
+ unicode-canonical-property-names-ecmascript@2.0.1:
+ resolution: {integrity: sha512-dA8WbNeb2a6oQzAQ55YlT5vQAWGV9WXOsi3SskE3bcCdM0P4SDd+24zS/OCacdRq5BkdsRj9q3Pg6YyQoxIGqg==}
+ engines: {node: '>=4'}
+
+ unicode-match-property-ecmascript@2.0.0:
+ resolution: {integrity: sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==}
+ engines: {node: '>=4'}
+
+ unicode-match-property-value-ecmascript@2.2.0:
+ resolution: {integrity: sha512-4IehN3V/+kkr5YeSSDDQG8QLqO26XpL2XP3GQtqwlT/QYSECAwFztxVHjlbh0+gjJ3XmNLS0zDsbgs9jWKExLg==}
+ engines: {node: '>=4'}
+
+ unicode-property-aliases-ecmascript@2.1.0:
+ resolution: {integrity: sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==}
+ engines: {node: '>=4'}
+
+ unload@2.2.0:
+ resolution: {integrity: sha512-B60uB5TNBLtN6/LsgAf3udH9saB5p7gqJwcFfbOEZ8BcBHnGwCf6G/TGiEqkRAxX7zAFIUtzdrXQSdL3Q/wqNA==}
+
+ update-browserslist-db@1.1.3:
+ resolution: {integrity: sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==}
+ hasBin: true
+ peerDependencies:
+ browserslist: '>= 4.21.0'
+
+ uri-js@4.4.1:
+ resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==}
+
+ use-callback-ref@1.3.3:
+ resolution: {integrity: sha512-jQL3lRnocaFtu3V00JToYz/4QkNWswxijDaCVNZRiRTO3HQDLsdu1ZtmIUvV4yPp+rvWm5j0y0TG/S61cuijTg==}
+ engines: {node: '>=10'}
+ peerDependencies:
+ '@types/react': '*'
+ react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+
+ use-sidecar@1.1.3:
+ resolution: {integrity: sha512-Fedw0aZvkhynoPYlA5WXrMCAMm+nSWdZt6lzJQ7Ok8S6Q+VsHmHpRWndVRJ8Be0ZbkfPc5LRYH+5XrzXcEeLRQ==}
+ engines: {node: '>=10'}
+ peerDependencies:
+ '@types/react': '*'
+ react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+
+ use-sync-external-store@1.5.0:
+ resolution: {integrity: sha512-Rb46I4cGGVBmjamjphe8L/UnvJD+uPPtTkNvX5mZgqdbavhI4EbgIWJiIHXJ8bc/i9EQGPRh4DwEURJ552Do0A==}
+ peerDependencies:
+ react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0
+
+ util-deprecate@1.0.2:
+ resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==}
+
+ valibot@0.36.0:
+ resolution: {integrity: sha512-CjF1XN4sUce8sBK9TixrDqFM7RwNkuXdJu174/AwmQUB62QbCQADg5lLe8ldBalFgtj1uKj+pKwDJiNo4Mn+eQ==}
+
+ vite@5.2.10:
+ resolution: {integrity: sha512-PAzgUZbP7msvQvqdSD+ErD5qGnSFiGOoWmV5yAKUEI0kdhjbH6nMWVyZQC/hSc4aXwc0oJ9aEdIiF9Oje0JFCw==}
+ engines: {node: ^18.0.0 || >=20.0.0}
+ hasBin: true
+ peerDependencies:
+ '@types/node': ^18.0.0 || >=20.0.0
+ less: '*'
+ lightningcss: ^1.21.0
+ sass: '*'
+ stylus: '*'
+ sugarss: '*'
+ terser: ^5.4.0
+ peerDependenciesMeta:
+ '@types/node':
+ optional: true
+ less:
+ optional: true
+ lightningcss:
+ optional: true
+ sass:
+ optional: true
+ stylus:
+ optional: true
+ sugarss:
+ optional: true
+ terser:
+ optional: true
+
+ webidl-conversions@3.0.1:
+ resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==}
+
+ whatwg-url@5.0.0:
+ resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==}
+
+ which@2.0.2:
+ resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==}
+ engines: {node: '>= 8'}
+ hasBin: true
+
+ word-wrap@1.2.5:
+ resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==}
+ engines: {node: '>=0.10.0'}
+
+ wrap-ansi@7.0.0:
+ resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==}
+ engines: {node: '>=10'}
+
+ wrap-ansi@8.1.0:
+ resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==}
+ engines: {node: '>=12'}
+
+ wrap-ansi@9.0.0:
+ resolution: {integrity: sha512-G8ura3S+3Z2G+mkgNRq8dqaFZAuxfsxpBB8OCTGRTCtp+l/v9nbFNmCUP1BZMts3G1142MsZfn6eeUKrr4PD1Q==}
+ engines: {node: '>=18'}
+
+ wrappy@1.0.2:
+ resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==}
+
+ ws@8.18.1:
+ resolution: {integrity: sha512-RKW2aJZMXeMxVpnZ6bck+RswznaxmzdULiBr6KY7XkTnW8uvt0iT9H5DkHUChXrc+uurzwa0rVI16n/Xzjdz1w==}
+ engines: {node: '>=10.0.0'}
+ peerDependencies:
+ bufferutil: ^4.0.1
+ utf-8-validate: '>=5.0.2'
+ peerDependenciesMeta:
+ bufferutil:
+ optional: true
+ utf-8-validate:
+ optional: true
+
+ yallist@3.1.1:
+ resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==}
+
+ yaml@1.10.2:
+ resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==}
+ engines: {node: '>= 6'}
+
+ yaml@2.7.1:
+ resolution: {integrity: sha512-10ULxpnOCQXxJvBgxsn9ptjq6uviG/htZKk9veJGhlqn3w/DxQ631zFF+nlQXLwmImeS5amR2dl2U8sg6U9jsQ==}
+ engines: {node: '>= 14'}
+ hasBin: true
+
+ yocto-queue@0.1.0:
+ resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==}
+ engines: {node: '>=10'}
+
+ zustand@4.5.6:
+ resolution: {integrity: sha512-ibr/n1hBzLLj5Y+yUcU7dYw8p6WnIVzdJbnX+1YpaScvZVF2ziugqHs+LAmHw4lWO9c/zRj+K1ncgWDQuthEdQ==}
+ engines: {node: '>=12.7.0'}
+ peerDependencies:
+ '@types/react': '>=16.8'
+ immer: '>=9.0.6'
+ react: '>=16.8'
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+ immer:
+ optional: true
+ react:
+ optional: true
+
+snapshots:
+
+ '@0no-co/graphql.web@1.1.2(graphql@16.10.0)':
+ optionalDependencies:
+ graphql: 16.10.0
+
+ '@0no-co/graphqlsp@1.12.16(graphql@16.10.0)(typescript@5.7.3)':
+ dependencies:
+ '@gql.tada/internal': 1.0.8(graphql@16.10.0)(typescript@5.7.3)
+ graphql: 16.10.0
+ typescript: 5.7.3
+
+ '@alloc/quick-lru@5.2.0': {}
+
+ '@ampproject/remapping@2.3.0':
+ dependencies:
+ '@jridgewell/gen-mapping': 0.3.8
+ '@jridgewell/trace-mapping': 0.3.25
+
+ '@ant-design/colors@8.0.0':
+ dependencies:
+ '@ant-design/fast-color': 3.0.0
+
+ '@ant-design/fast-color@3.0.0': {}
+
+ '@ant-design/icons-svg@4.4.2': {}
+
+ '@ant-design/icons@6.0.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
+ dependencies:
+ '@ant-design/colors': 8.0.0
+ '@ant-design/icons-svg': 4.4.2
+ '@rc-component/util': 1.2.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ classnames: 2.5.1
+ react: 18.3.1
+ react-dom: 18.3.1(react@18.3.1)
+
+ '@babel/code-frame@7.26.2':
+ dependencies:
+ '@babel/helper-validator-identifier': 7.25.9
+ js-tokens: 4.0.0
+ picocolors: 1.1.1
+
+ '@babel/compat-data@7.26.8': {}
+
+ '@babel/core@7.26.10':
+ dependencies:
+ '@ampproject/remapping': 2.3.0
+ '@babel/code-frame': 7.26.2
+ '@babel/generator': 7.27.0
+ '@babel/helper-compilation-targets': 7.27.0
+ '@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.10)
+ '@babel/helpers': 7.27.0
+ '@babel/parser': 7.27.0
+ '@babel/template': 7.27.0
+ '@babel/traverse': 7.27.0
+ '@babel/types': 7.27.0
+ convert-source-map: 2.0.0
+ debug: 4.4.0
+ gensync: 1.0.0-beta.2
+ json5: 2.2.3
+ semver: 6.3.1
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/generator@7.27.0':
+ dependencies:
+ '@babel/parser': 7.27.0
+ '@babel/types': 7.27.0
+ '@jridgewell/gen-mapping': 0.3.8
+ '@jridgewell/trace-mapping': 0.3.25
+ jsesc: 3.1.0
+
+ '@babel/helper-annotate-as-pure@7.25.9':
+ dependencies:
+ '@babel/types': 7.27.0
+
+ '@babel/helper-compilation-targets@7.27.0':
+ dependencies:
+ '@babel/compat-data': 7.26.8
+ '@babel/helper-validator-option': 7.25.9
+ browserslist: 4.24.4
+ lru-cache: 5.1.1
+ semver: 6.3.1
+
+ '@babel/helper-create-class-features-plugin@7.27.0(@babel/core@7.26.10)':
+ dependencies:
+ '@babel/core': 7.26.10
+ '@babel/helper-annotate-as-pure': 7.25.9
+ '@babel/helper-member-expression-to-functions': 7.25.9
+ '@babel/helper-optimise-call-expression': 7.25.9
+ '@babel/helper-replace-supers': 7.26.5(@babel/core@7.26.10)
+ '@babel/helper-skip-transparent-expression-wrappers': 7.25.9
+ '@babel/traverse': 7.27.0
+ semver: 6.3.1
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/helper-create-regexp-features-plugin@7.27.0(@babel/core@7.26.10)':
+ dependencies:
+ '@babel/core': 7.26.10
+ '@babel/helper-annotate-as-pure': 7.25.9
+ regexpu-core: 6.2.0
+ semver: 6.3.1
+
+ '@babel/helper-define-polyfill-provider@0.6.4(@babel/core@7.26.10)':
+ dependencies:
+ '@babel/core': 7.26.10
+ '@babel/helper-compilation-targets': 7.27.0
+ '@babel/helper-plugin-utils': 7.26.5
+ debug: 4.4.0
+ lodash.debounce: 4.0.8
+ resolve: 1.22.10
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/helper-member-expression-to-functions@7.25.9':
+ dependencies:
+ '@babel/traverse': 7.27.0
+ '@babel/types': 7.27.0
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/helper-module-imports@7.25.9':
+ dependencies:
+ '@babel/traverse': 7.27.0
+ '@babel/types': 7.27.0
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/helper-module-transforms@7.26.0(@babel/core@7.26.10)':
+ dependencies:
+ '@babel/core': 7.26.10
+ '@babel/helper-module-imports': 7.25.9
+ '@babel/helper-validator-identifier': 7.25.9
+ '@babel/traverse': 7.27.0
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/helper-optimise-call-expression@7.25.9':
+ dependencies:
+ '@babel/types': 7.27.0
+
+ '@babel/helper-plugin-utils@7.26.5': {}
+
+ '@babel/helper-remap-async-to-generator@7.25.9(@babel/core@7.26.10)':
+ dependencies:
+ '@babel/core': 7.26.10
+ '@babel/helper-annotate-as-pure': 7.25.9
+ '@babel/helper-wrap-function': 7.25.9
+ '@babel/traverse': 7.27.0
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/helper-replace-supers@7.26.5(@babel/core@7.26.10)':
+ dependencies:
+ '@babel/core': 7.26.10
+ '@babel/helper-member-expression-to-functions': 7.25.9
+ '@babel/helper-optimise-call-expression': 7.25.9
+ '@babel/traverse': 7.27.0
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/helper-skip-transparent-expression-wrappers@7.25.9':
+ dependencies:
+ '@babel/traverse': 7.27.0
+ '@babel/types': 7.27.0
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/helper-string-parser@7.25.9': {}
+
+ '@babel/helper-validator-identifier@7.25.9': {}
+
+ '@babel/helper-validator-option@7.25.9': {}
+
+ '@babel/helper-wrap-function@7.25.9':
+ dependencies:
+ '@babel/template': 7.27.0
+ '@babel/traverse': 7.27.0
+ '@babel/types': 7.27.0
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/helpers@7.27.0':
+ dependencies:
+ '@babel/template': 7.27.0
+ '@babel/types': 7.27.0
+
+ '@babel/parser@7.27.0':
+ dependencies:
+ '@babel/types': 7.27.0
+
+ '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.25.9(@babel/core@7.26.10)':
+ dependencies:
+ '@babel/core': 7.26.10
+ '@babel/helper-plugin-utils': 7.26.5
+ '@babel/traverse': 7.27.0
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/plugin-bugfix-safari-class-field-initializer-scope@7.25.9(@babel/core@7.26.10)':
+ dependencies:
+ '@babel/core': 7.26.10
+ '@babel/helper-plugin-utils': 7.26.5
+
+ '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.25.9(@babel/core@7.26.10)':
+ dependencies:
+ '@babel/core': 7.26.10
+ '@babel/helper-plugin-utils': 7.26.5
+
+ '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.25.9(@babel/core@7.26.10)':
+ dependencies:
+ '@babel/core': 7.26.10
+ '@babel/helper-plugin-utils': 7.26.5
+ '@babel/helper-skip-transparent-expression-wrappers': 7.25.9
+ '@babel/plugin-transform-optional-chaining': 7.25.9(@babel/core@7.26.10)
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.25.9(@babel/core@7.26.10)':
+ dependencies:
+ '@babel/core': 7.26.10
+ '@babel/helper-plugin-utils': 7.26.5
+ '@babel/traverse': 7.27.0
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2(@babel/core@7.26.10)':
+ dependencies:
+ '@babel/core': 7.26.10
+
+ '@babel/plugin-syntax-import-assertions@7.26.0(@babel/core@7.26.10)':
+ dependencies:
+ '@babel/core': 7.26.10
+ '@babel/helper-plugin-utils': 7.26.5
+
+ '@babel/plugin-syntax-import-attributes@7.26.0(@babel/core@7.26.10)':
+ dependencies:
+ '@babel/core': 7.26.10
+ '@babel/helper-plugin-utils': 7.26.5
+
+ '@babel/plugin-syntax-jsx@7.25.9(@babel/core@7.26.10)':
+ dependencies:
+ '@babel/core': 7.26.10
+ '@babel/helper-plugin-utils': 7.26.5
+
+ '@babel/plugin-syntax-typescript@7.25.9(@babel/core@7.26.10)':
+ dependencies:
+ '@babel/core': 7.26.10
+ '@babel/helper-plugin-utils': 7.26.5
+
+ '@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.26.10)':
+ dependencies:
+ '@babel/core': 7.26.10
+ '@babel/helper-create-regexp-features-plugin': 7.27.0(@babel/core@7.26.10)
+ '@babel/helper-plugin-utils': 7.26.5
+
+ '@babel/plugin-transform-arrow-functions@7.25.9(@babel/core@7.26.10)':
+ dependencies:
+ '@babel/core': 7.26.10
+ '@babel/helper-plugin-utils': 7.26.5
+
+ '@babel/plugin-transform-async-generator-functions@7.26.8(@babel/core@7.26.10)':
+ dependencies:
+ '@babel/core': 7.26.10
+ '@babel/helper-plugin-utils': 7.26.5
+ '@babel/helper-remap-async-to-generator': 7.25.9(@babel/core@7.26.10)
+ '@babel/traverse': 7.27.0
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/plugin-transform-async-to-generator@7.25.9(@babel/core@7.26.10)':
+ dependencies:
+ '@babel/core': 7.26.10
+ '@babel/helper-module-imports': 7.25.9
+ '@babel/helper-plugin-utils': 7.26.5
+ '@babel/helper-remap-async-to-generator': 7.25.9(@babel/core@7.26.10)
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/plugin-transform-block-scoped-functions@7.26.5(@babel/core@7.26.10)':
+ dependencies:
+ '@babel/core': 7.26.10
+ '@babel/helper-plugin-utils': 7.26.5
+
+ '@babel/plugin-transform-block-scoping@7.27.0(@babel/core@7.26.10)':
+ dependencies:
+ '@babel/core': 7.26.10
+ '@babel/helper-plugin-utils': 7.26.5
+
+ '@babel/plugin-transform-class-properties@7.25.9(@babel/core@7.26.10)':
+ dependencies:
+ '@babel/core': 7.26.10
+ '@babel/helper-create-class-features-plugin': 7.27.0(@babel/core@7.26.10)
+ '@babel/helper-plugin-utils': 7.26.5
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/plugin-transform-class-static-block@7.26.0(@babel/core@7.26.10)':
+ dependencies:
+ '@babel/core': 7.26.10
+ '@babel/helper-create-class-features-plugin': 7.27.0(@babel/core@7.26.10)
+ '@babel/helper-plugin-utils': 7.26.5
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/plugin-transform-classes@7.25.9(@babel/core@7.26.10)':
+ dependencies:
+ '@babel/core': 7.26.10
+ '@babel/helper-annotate-as-pure': 7.25.9
+ '@babel/helper-compilation-targets': 7.27.0
+ '@babel/helper-plugin-utils': 7.26.5
+ '@babel/helper-replace-supers': 7.26.5(@babel/core@7.26.10)
+ '@babel/traverse': 7.27.0
+ globals: 11.12.0
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/plugin-transform-computed-properties@7.25.9(@babel/core@7.26.10)':
+ dependencies:
+ '@babel/core': 7.26.10
+ '@babel/helper-plugin-utils': 7.26.5
+ '@babel/template': 7.27.0
+
+ '@babel/plugin-transform-destructuring@7.25.9(@babel/core@7.26.10)':
+ dependencies:
+ '@babel/core': 7.26.10
+ '@babel/helper-plugin-utils': 7.26.5
+
+ '@babel/plugin-transform-dotall-regex@7.25.9(@babel/core@7.26.10)':
+ dependencies:
+ '@babel/core': 7.26.10
+ '@babel/helper-create-regexp-features-plugin': 7.27.0(@babel/core@7.26.10)
+ '@babel/helper-plugin-utils': 7.26.5
+
+ '@babel/plugin-transform-duplicate-keys@7.25.9(@babel/core@7.26.10)':
+ dependencies:
+ '@babel/core': 7.26.10
+ '@babel/helper-plugin-utils': 7.26.5
+
+ '@babel/plugin-transform-duplicate-named-capturing-groups-regex@7.25.9(@babel/core@7.26.10)':
+ dependencies:
+ '@babel/core': 7.26.10
+ '@babel/helper-create-regexp-features-plugin': 7.27.0(@babel/core@7.26.10)
+ '@babel/helper-plugin-utils': 7.26.5
+
+ '@babel/plugin-transform-dynamic-import@7.25.9(@babel/core@7.26.10)':
+ dependencies:
+ '@babel/core': 7.26.10
+ '@babel/helper-plugin-utils': 7.26.5
+
+ '@babel/plugin-transform-exponentiation-operator@7.26.3(@babel/core@7.26.10)':
+ dependencies:
+ '@babel/core': 7.26.10
+ '@babel/helper-plugin-utils': 7.26.5
+
+ '@babel/plugin-transform-export-namespace-from@7.25.9(@babel/core@7.26.10)':
+ dependencies:
+ '@babel/core': 7.26.10
+ '@babel/helper-plugin-utils': 7.26.5
+
+ '@babel/plugin-transform-for-of@7.26.9(@babel/core@7.26.10)':
+ dependencies:
+ '@babel/core': 7.26.10
+ '@babel/helper-plugin-utils': 7.26.5
+ '@babel/helper-skip-transparent-expression-wrappers': 7.25.9
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/plugin-transform-function-name@7.25.9(@babel/core@7.26.10)':
+ dependencies:
+ '@babel/core': 7.26.10
+ '@babel/helper-compilation-targets': 7.27.0
+ '@babel/helper-plugin-utils': 7.26.5
+ '@babel/traverse': 7.27.0
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/plugin-transform-json-strings@7.25.9(@babel/core@7.26.10)':
+ dependencies:
+ '@babel/core': 7.26.10
+ '@babel/helper-plugin-utils': 7.26.5
+
+ '@babel/plugin-transform-literals@7.25.9(@babel/core@7.26.10)':
+ dependencies:
+ '@babel/core': 7.26.10
+ '@babel/helper-plugin-utils': 7.26.5
+
+ '@babel/plugin-transform-logical-assignment-operators@7.25.9(@babel/core@7.26.10)':
+ dependencies:
+ '@babel/core': 7.26.10
+ '@babel/helper-plugin-utils': 7.26.5
+
+ '@babel/plugin-transform-member-expression-literals@7.25.9(@babel/core@7.26.10)':
+ dependencies:
+ '@babel/core': 7.26.10
+ '@babel/helper-plugin-utils': 7.26.5
+
+ '@babel/plugin-transform-modules-amd@7.25.9(@babel/core@7.26.10)':
+ dependencies:
+ '@babel/core': 7.26.10
+ '@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.10)
+ '@babel/helper-plugin-utils': 7.26.5
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/plugin-transform-modules-commonjs@7.26.3(@babel/core@7.26.10)':
+ dependencies:
+ '@babel/core': 7.26.10
+ '@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.10)
+ '@babel/helper-plugin-utils': 7.26.5
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/plugin-transform-modules-systemjs@7.25.9(@babel/core@7.26.10)':
+ dependencies:
+ '@babel/core': 7.26.10
+ '@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.10)
+ '@babel/helper-plugin-utils': 7.26.5
+ '@babel/helper-validator-identifier': 7.25.9
+ '@babel/traverse': 7.27.0
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/plugin-transform-modules-umd@7.25.9(@babel/core@7.26.10)':
+ dependencies:
+ '@babel/core': 7.26.10
+ '@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.10)
+ '@babel/helper-plugin-utils': 7.26.5
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/plugin-transform-named-capturing-groups-regex@7.25.9(@babel/core@7.26.10)':
+ dependencies:
+ '@babel/core': 7.26.10
+ '@babel/helper-create-regexp-features-plugin': 7.27.0(@babel/core@7.26.10)
+ '@babel/helper-plugin-utils': 7.26.5
+
+ '@babel/plugin-transform-new-target@7.25.9(@babel/core@7.26.10)':
+ dependencies:
+ '@babel/core': 7.26.10
+ '@babel/helper-plugin-utils': 7.26.5
+
+ '@babel/plugin-transform-nullish-coalescing-operator@7.26.6(@babel/core@7.26.10)':
+ dependencies:
+ '@babel/core': 7.26.10
+ '@babel/helper-plugin-utils': 7.26.5
+
+ '@babel/plugin-transform-numeric-separator@7.25.9(@babel/core@7.26.10)':
+ dependencies:
+ '@babel/core': 7.26.10
+ '@babel/helper-plugin-utils': 7.26.5
+
+ '@babel/plugin-transform-object-rest-spread@7.25.9(@babel/core@7.26.10)':
+ dependencies:
+ '@babel/core': 7.26.10
+ '@babel/helper-compilation-targets': 7.27.0
+ '@babel/helper-plugin-utils': 7.26.5
+ '@babel/plugin-transform-parameters': 7.25.9(@babel/core@7.26.10)
+
+ '@babel/plugin-transform-object-super@7.25.9(@babel/core@7.26.10)':
+ dependencies:
+ '@babel/core': 7.26.10
+ '@babel/helper-plugin-utils': 7.26.5
+ '@babel/helper-replace-supers': 7.26.5(@babel/core@7.26.10)
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/plugin-transform-optional-catch-binding@7.25.9(@babel/core@7.26.10)':
+ dependencies:
+ '@babel/core': 7.26.10
+ '@babel/helper-plugin-utils': 7.26.5
+
+ '@babel/plugin-transform-optional-chaining@7.25.9(@babel/core@7.26.10)':
+ dependencies:
+ '@babel/core': 7.26.10
+ '@babel/helper-plugin-utils': 7.26.5
+ '@babel/helper-skip-transparent-expression-wrappers': 7.25.9
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/plugin-transform-parameters@7.25.9(@babel/core@7.26.10)':
+ dependencies:
+ '@babel/core': 7.26.10
+ '@babel/helper-plugin-utils': 7.26.5
+
+ '@babel/plugin-transform-private-methods@7.25.9(@babel/core@7.26.10)':
+ dependencies:
+ '@babel/core': 7.26.10
+ '@babel/helper-create-class-features-plugin': 7.27.0(@babel/core@7.26.10)
+ '@babel/helper-plugin-utils': 7.26.5
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/plugin-transform-private-property-in-object@7.25.9(@babel/core@7.26.10)':
+ dependencies:
+ '@babel/core': 7.26.10
+ '@babel/helper-annotate-as-pure': 7.25.9
+ '@babel/helper-create-class-features-plugin': 7.27.0(@babel/core@7.26.10)
+ '@babel/helper-plugin-utils': 7.26.5
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/plugin-transform-property-literals@7.25.9(@babel/core@7.26.10)':
+ dependencies:
+ '@babel/core': 7.26.10
+ '@babel/helper-plugin-utils': 7.26.5
+
+ '@babel/plugin-transform-react-constant-elements@7.25.9(@babel/core@7.26.10)':
+ dependencies:
+ '@babel/core': 7.26.10
+ '@babel/helper-plugin-utils': 7.26.5
+
+ '@babel/plugin-transform-react-display-name@7.25.9(@babel/core@7.26.10)':
+ dependencies:
+ '@babel/core': 7.26.10
+ '@babel/helper-plugin-utils': 7.26.5
+
+ '@babel/plugin-transform-react-jsx-development@7.25.9(@babel/core@7.26.10)':
+ dependencies:
+ '@babel/core': 7.26.10
+ '@babel/plugin-transform-react-jsx': 7.25.9(@babel/core@7.26.10)
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/plugin-transform-react-jsx-self@7.25.9(@babel/core@7.26.10)':
+ dependencies:
+ '@babel/core': 7.26.10
+ '@babel/helper-plugin-utils': 7.26.5
+
+ '@babel/plugin-transform-react-jsx-source@7.25.9(@babel/core@7.26.10)':
+ dependencies:
+ '@babel/core': 7.26.10
+ '@babel/helper-plugin-utils': 7.26.5
+
+ '@babel/plugin-transform-react-jsx@7.25.9(@babel/core@7.26.10)':
+ dependencies:
+ '@babel/core': 7.26.10
+ '@babel/helper-annotate-as-pure': 7.25.9
+ '@babel/helper-module-imports': 7.25.9
+ '@babel/helper-plugin-utils': 7.26.5
+ '@babel/plugin-syntax-jsx': 7.25.9(@babel/core@7.26.10)
+ '@babel/types': 7.27.0
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/plugin-transform-react-pure-annotations@7.25.9(@babel/core@7.26.10)':
+ dependencies:
+ '@babel/core': 7.26.10
+ '@babel/helper-annotate-as-pure': 7.25.9
+ '@babel/helper-plugin-utils': 7.26.5
+
+ '@babel/plugin-transform-regenerator@7.27.0(@babel/core@7.26.10)':
+ dependencies:
+ '@babel/core': 7.26.10
+ '@babel/helper-plugin-utils': 7.26.5
+ regenerator-transform: 0.15.2
+
+ '@babel/plugin-transform-regexp-modifiers@7.26.0(@babel/core@7.26.10)':
+ dependencies:
+ '@babel/core': 7.26.10
+ '@babel/helper-create-regexp-features-plugin': 7.27.0(@babel/core@7.26.10)
+ '@babel/helper-plugin-utils': 7.26.5
+
+ '@babel/plugin-transform-reserved-words@7.25.9(@babel/core@7.26.10)':
+ dependencies:
+ '@babel/core': 7.26.10
+ '@babel/helper-plugin-utils': 7.26.5
+
+ '@babel/plugin-transform-shorthand-properties@7.25.9(@babel/core@7.26.10)':
+ dependencies:
+ '@babel/core': 7.26.10
+ '@babel/helper-plugin-utils': 7.26.5
+
+ '@babel/plugin-transform-spread@7.25.9(@babel/core@7.26.10)':
+ dependencies:
+ '@babel/core': 7.26.10
+ '@babel/helper-plugin-utils': 7.26.5
+ '@babel/helper-skip-transparent-expression-wrappers': 7.25.9
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/plugin-transform-sticky-regex@7.25.9(@babel/core@7.26.10)':
+ dependencies:
+ '@babel/core': 7.26.10
+ '@babel/helper-plugin-utils': 7.26.5
+
+ '@babel/plugin-transform-template-literals@7.26.8(@babel/core@7.26.10)':
+ dependencies:
+ '@babel/core': 7.26.10
+ '@babel/helper-plugin-utils': 7.26.5
+
+ '@babel/plugin-transform-typeof-symbol@7.27.0(@babel/core@7.26.10)':
+ dependencies:
+ '@babel/core': 7.26.10
+ '@babel/helper-plugin-utils': 7.26.5
+
+ '@babel/plugin-transform-typescript@7.27.0(@babel/core@7.26.10)':
+ dependencies:
+ '@babel/core': 7.26.10
+ '@babel/helper-annotate-as-pure': 7.25.9
+ '@babel/helper-create-class-features-plugin': 7.27.0(@babel/core@7.26.10)
+ '@babel/helper-plugin-utils': 7.26.5
+ '@babel/helper-skip-transparent-expression-wrappers': 7.25.9
+ '@babel/plugin-syntax-typescript': 7.25.9(@babel/core@7.26.10)
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/plugin-transform-unicode-escapes@7.25.9(@babel/core@7.26.10)':
+ dependencies:
+ '@babel/core': 7.26.10
+ '@babel/helper-plugin-utils': 7.26.5
+
+ '@babel/plugin-transform-unicode-property-regex@7.25.9(@babel/core@7.26.10)':
+ dependencies:
+ '@babel/core': 7.26.10
+ '@babel/helper-create-regexp-features-plugin': 7.27.0(@babel/core@7.26.10)
+ '@babel/helper-plugin-utils': 7.26.5
+
+ '@babel/plugin-transform-unicode-regex@7.25.9(@babel/core@7.26.10)':
+ dependencies:
+ '@babel/core': 7.26.10
+ '@babel/helper-create-regexp-features-plugin': 7.27.0(@babel/core@7.26.10)
+ '@babel/helper-plugin-utils': 7.26.5
+
+ '@babel/plugin-transform-unicode-sets-regex@7.25.9(@babel/core@7.26.10)':
+ dependencies:
+ '@babel/core': 7.26.10
+ '@babel/helper-create-regexp-features-plugin': 7.27.0(@babel/core@7.26.10)
+ '@babel/helper-plugin-utils': 7.26.5
+
+ '@babel/preset-env@7.26.9(@babel/core@7.26.10)':
+ dependencies:
+ '@babel/compat-data': 7.26.8
+ '@babel/core': 7.26.10
+ '@babel/helper-compilation-targets': 7.27.0
+ '@babel/helper-plugin-utils': 7.26.5
+ '@babel/helper-validator-option': 7.25.9
+ '@babel/plugin-bugfix-firefox-class-in-computed-class-key': 7.25.9(@babel/core@7.26.10)
+ '@babel/plugin-bugfix-safari-class-field-initializer-scope': 7.25.9(@babel/core@7.26.10)
+ '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.25.9(@babel/core@7.26.10)
+ '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.25.9(@babel/core@7.26.10)
+ '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly': 7.25.9(@babel/core@7.26.10)
+ '@babel/plugin-proposal-private-property-in-object': 7.21.0-placeholder-for-preset-env.2(@babel/core@7.26.10)
+ '@babel/plugin-syntax-import-assertions': 7.26.0(@babel/core@7.26.10)
+ '@babel/plugin-syntax-import-attributes': 7.26.0(@babel/core@7.26.10)
+ '@babel/plugin-syntax-unicode-sets-regex': 7.18.6(@babel/core@7.26.10)
+ '@babel/plugin-transform-arrow-functions': 7.25.9(@babel/core@7.26.10)
+ '@babel/plugin-transform-async-generator-functions': 7.26.8(@babel/core@7.26.10)
+ '@babel/plugin-transform-async-to-generator': 7.25.9(@babel/core@7.26.10)
+ '@babel/plugin-transform-block-scoped-functions': 7.26.5(@babel/core@7.26.10)
+ '@babel/plugin-transform-block-scoping': 7.27.0(@babel/core@7.26.10)
+ '@babel/plugin-transform-class-properties': 7.25.9(@babel/core@7.26.10)
+ '@babel/plugin-transform-class-static-block': 7.26.0(@babel/core@7.26.10)
+ '@babel/plugin-transform-classes': 7.25.9(@babel/core@7.26.10)
+ '@babel/plugin-transform-computed-properties': 7.25.9(@babel/core@7.26.10)
+ '@babel/plugin-transform-destructuring': 7.25.9(@babel/core@7.26.10)
+ '@babel/plugin-transform-dotall-regex': 7.25.9(@babel/core@7.26.10)
+ '@babel/plugin-transform-duplicate-keys': 7.25.9(@babel/core@7.26.10)
+ '@babel/plugin-transform-duplicate-named-capturing-groups-regex': 7.25.9(@babel/core@7.26.10)
+ '@babel/plugin-transform-dynamic-import': 7.25.9(@babel/core@7.26.10)
+ '@babel/plugin-transform-exponentiation-operator': 7.26.3(@babel/core@7.26.10)
+ '@babel/plugin-transform-export-namespace-from': 7.25.9(@babel/core@7.26.10)
+ '@babel/plugin-transform-for-of': 7.26.9(@babel/core@7.26.10)
+ '@babel/plugin-transform-function-name': 7.25.9(@babel/core@7.26.10)
+ '@babel/plugin-transform-json-strings': 7.25.9(@babel/core@7.26.10)
+ '@babel/plugin-transform-literals': 7.25.9(@babel/core@7.26.10)
+ '@babel/plugin-transform-logical-assignment-operators': 7.25.9(@babel/core@7.26.10)
+ '@babel/plugin-transform-member-expression-literals': 7.25.9(@babel/core@7.26.10)
+ '@babel/plugin-transform-modules-amd': 7.25.9(@babel/core@7.26.10)
+ '@babel/plugin-transform-modules-commonjs': 7.26.3(@babel/core@7.26.10)
+ '@babel/plugin-transform-modules-systemjs': 7.25.9(@babel/core@7.26.10)
+ '@babel/plugin-transform-modules-umd': 7.25.9(@babel/core@7.26.10)
+ '@babel/plugin-transform-named-capturing-groups-regex': 7.25.9(@babel/core@7.26.10)
+ '@babel/plugin-transform-new-target': 7.25.9(@babel/core@7.26.10)
+ '@babel/plugin-transform-nullish-coalescing-operator': 7.26.6(@babel/core@7.26.10)
+ '@babel/plugin-transform-numeric-separator': 7.25.9(@babel/core@7.26.10)
+ '@babel/plugin-transform-object-rest-spread': 7.25.9(@babel/core@7.26.10)
+ '@babel/plugin-transform-object-super': 7.25.9(@babel/core@7.26.10)
+ '@babel/plugin-transform-optional-catch-binding': 7.25.9(@babel/core@7.26.10)
+ '@babel/plugin-transform-optional-chaining': 7.25.9(@babel/core@7.26.10)
+ '@babel/plugin-transform-parameters': 7.25.9(@babel/core@7.26.10)
+ '@babel/plugin-transform-private-methods': 7.25.9(@babel/core@7.26.10)
+ '@babel/plugin-transform-private-property-in-object': 7.25.9(@babel/core@7.26.10)
+ '@babel/plugin-transform-property-literals': 7.25.9(@babel/core@7.26.10)
+ '@babel/plugin-transform-regenerator': 7.27.0(@babel/core@7.26.10)
+ '@babel/plugin-transform-regexp-modifiers': 7.26.0(@babel/core@7.26.10)
+ '@babel/plugin-transform-reserved-words': 7.25.9(@babel/core@7.26.10)
+ '@babel/plugin-transform-shorthand-properties': 7.25.9(@babel/core@7.26.10)
+ '@babel/plugin-transform-spread': 7.25.9(@babel/core@7.26.10)
+ '@babel/plugin-transform-sticky-regex': 7.25.9(@babel/core@7.26.10)
+ '@babel/plugin-transform-template-literals': 7.26.8(@babel/core@7.26.10)
+ '@babel/plugin-transform-typeof-symbol': 7.27.0(@babel/core@7.26.10)
+ '@babel/plugin-transform-unicode-escapes': 7.25.9(@babel/core@7.26.10)
+ '@babel/plugin-transform-unicode-property-regex': 7.25.9(@babel/core@7.26.10)
+ '@babel/plugin-transform-unicode-regex': 7.25.9(@babel/core@7.26.10)
+ '@babel/plugin-transform-unicode-sets-regex': 7.25.9(@babel/core@7.26.10)
+ '@babel/preset-modules': 0.1.6-no-external-plugins(@babel/core@7.26.10)
+ babel-plugin-polyfill-corejs2: 0.4.13(@babel/core@7.26.10)
+ babel-plugin-polyfill-corejs3: 0.11.1(@babel/core@7.26.10)
+ babel-plugin-polyfill-regenerator: 0.6.4(@babel/core@7.26.10)
+ core-js-compat: 3.41.0
+ semver: 6.3.1
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/preset-modules@0.1.6-no-external-plugins(@babel/core@7.26.10)':
+ dependencies:
+ '@babel/core': 7.26.10
+ '@babel/helper-plugin-utils': 7.26.5
+ '@babel/types': 7.27.0
+ esutils: 2.0.3
+
+ '@babel/preset-react@7.26.3(@babel/core@7.26.10)':
+ dependencies:
+ '@babel/core': 7.26.10
+ '@babel/helper-plugin-utils': 7.26.5
+ '@babel/helper-validator-option': 7.25.9
+ '@babel/plugin-transform-react-display-name': 7.25.9(@babel/core@7.26.10)
+ '@babel/plugin-transform-react-jsx': 7.25.9(@babel/core@7.26.10)
+ '@babel/plugin-transform-react-jsx-development': 7.25.9(@babel/core@7.26.10)
+ '@babel/plugin-transform-react-pure-annotations': 7.25.9(@babel/core@7.26.10)
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/preset-typescript@7.27.0(@babel/core@7.26.10)':
+ dependencies:
+ '@babel/core': 7.26.10
+ '@babel/helper-plugin-utils': 7.26.5
+ '@babel/helper-validator-option': 7.25.9
+ '@babel/plugin-syntax-jsx': 7.25.9(@babel/core@7.26.10)
+ '@babel/plugin-transform-modules-commonjs': 7.26.3(@babel/core@7.26.10)
+ '@babel/plugin-transform-typescript': 7.27.0(@babel/core@7.26.10)
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/runtime@7.27.0':
+ dependencies:
+ regenerator-runtime: 0.14.1
+
+ '@babel/template@7.27.0':
+ dependencies:
+ '@babel/code-frame': 7.26.2
+ '@babel/parser': 7.27.0
+ '@babel/types': 7.27.0
+
+ '@babel/traverse@7.27.0':
+ dependencies:
+ '@babel/code-frame': 7.26.2
+ '@babel/generator': 7.27.0
+ '@babel/parser': 7.27.0
+ '@babel/template': 7.27.0
+ '@babel/types': 7.27.0
+ debug: 4.4.0
+ globals: 11.12.0
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/types@7.27.0':
+ dependencies:
+ '@babel/helper-string-parser': 7.25.9
+ '@babel/helper-validator-identifier': 7.25.9
+
+ '@emotion/hash@0.9.2': {}
+
+ '@esbuild/aix-ppc64@0.20.2':
+ optional: true
+
+ '@esbuild/android-arm64@0.20.2':
+ optional: true
+
+ '@esbuild/android-arm@0.20.2':
+ optional: true
+
+ '@esbuild/android-x64@0.20.2':
+ optional: true
+
+ '@esbuild/darwin-arm64@0.20.2':
+ optional: true
+
+ '@esbuild/darwin-x64@0.20.2':
+ optional: true
+
+ '@esbuild/freebsd-arm64@0.20.2':
+ optional: true
+
+ '@esbuild/freebsd-x64@0.20.2':
+ optional: true
+
+ '@esbuild/linux-arm64@0.20.2':
+ optional: true
+
+ '@esbuild/linux-arm@0.20.2':
+ optional: true
+
+ '@esbuild/linux-ia32@0.20.2':
+ optional: true
+
+ '@esbuild/linux-loong64@0.20.2':
+ optional: true
+
+ '@esbuild/linux-mips64el@0.20.2':
+ optional: true
+
+ '@esbuild/linux-ppc64@0.20.2':
+ optional: true
+
+ '@esbuild/linux-riscv64@0.20.2':
+ optional: true
+
+ '@esbuild/linux-s390x@0.20.2':
+ optional: true
+
+ '@esbuild/linux-x64@0.20.2':
+ optional: true
+
+ '@esbuild/netbsd-x64@0.20.2':
+ optional: true
+
+ '@esbuild/openbsd-x64@0.20.2':
+ optional: true
+
+ '@esbuild/sunos-x64@0.20.2':
+ optional: true
+
+ '@esbuild/win32-arm64@0.20.2':
+ optional: true
+
+ '@esbuild/win32-ia32@0.20.2':
+ optional: true
+
+ '@esbuild/win32-x64@0.20.2':
+ optional: true
+
+ '@eslint-community/eslint-utils@4.6.1(eslint@9.25.1(jiti@1.21.7))':
+ dependencies:
+ eslint: 9.25.1(jiti@1.21.7)
+ eslint-visitor-keys: 3.4.3
+
+ '@eslint-community/regexpp@4.12.1': {}
+
+ '@eslint/config-array@0.20.0':
+ dependencies:
+ '@eslint/object-schema': 2.1.6
+ debug: 4.4.0
+ minimatch: 3.1.2
+ transitivePeerDependencies:
+ - supports-color
+
+ '@eslint/config-helpers@0.2.1': {}
+
+ '@eslint/core@0.13.0':
+ dependencies:
+ '@types/json-schema': 7.0.15
+
+ '@eslint/eslintrc@3.3.1':
+ dependencies:
+ ajv: 6.12.6
+ debug: 4.4.0
+ espree: 10.3.0
+ globals: 14.0.0
+ ignore: 5.3.2
+ import-fresh: 3.3.1
+ js-yaml: 4.1.0
+ minimatch: 3.1.2
+ strip-json-comments: 3.1.1
+ transitivePeerDependencies:
+ - supports-color
+
+ '@eslint/js@9.25.1': {}
+
+ '@eslint/object-schema@2.1.6': {}
+
+ '@eslint/plugin-kit@0.2.8':
+ dependencies:
+ '@eslint/core': 0.13.0
+ levn: 0.4.1
+
+ '@floating-ui/core@1.6.9':
+ dependencies:
+ '@floating-ui/utils': 0.2.9
+
+ '@floating-ui/dom@1.6.13':
+ dependencies:
+ '@floating-ui/core': 1.6.9
+ '@floating-ui/utils': 0.2.9
+
+ '@floating-ui/react-dom@2.1.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
+ dependencies:
+ '@floating-ui/dom': 1.6.13
+ react: 18.3.1
+ react-dom: 18.3.1(react@18.3.1)
+
+ '@floating-ui/utils@0.2.9': {}
+
+ '@gql.tada/cli-utils@1.6.3(@0no-co/graphqlsp@1.12.16(graphql@16.10.0)(typescript@5.7.3))(graphql@16.10.0)(typescript@5.7.3)':
+ dependencies:
+ '@0no-co/graphqlsp': 1.12.16(graphql@16.10.0)(typescript@5.7.3)
+ '@gql.tada/internal': 1.0.8(graphql@16.10.0)(typescript@5.7.3)
+ graphql: 16.10.0
+ typescript: 5.7.3
+
+ '@gql.tada/internal@1.0.8(graphql@16.10.0)(typescript@5.7.3)':
+ dependencies:
+ '@0no-co/graphql.web': 1.1.2(graphql@16.10.0)
+ graphql: 16.10.0
+ typescript: 5.7.3
+
+ '@graphql-typed-document-node/core@3.2.0(graphql@16.10.0)':
+ dependencies:
+ graphql: 16.10.0
+
+ '@humanfs/core@0.19.1': {}
+
+ '@humanfs/node@0.16.6':
+ dependencies:
+ '@humanfs/core': 0.19.1
+ '@humanwhocodes/retry': 0.3.1
+
+ '@humanwhocodes/module-importer@1.0.1': {}
+
+ '@humanwhocodes/retry@0.3.1': {}
+
+ '@humanwhocodes/retry@0.4.2': {}
+
+ '@isaacs/cliui@8.0.2':
+ dependencies:
+ string-width: 5.1.2
+ string-width-cjs: string-width@4.2.3
+ strip-ansi: 7.1.0
+ strip-ansi-cjs: strip-ansi@6.0.1
+ wrap-ansi: 8.1.0
+ wrap-ansi-cjs: wrap-ansi@7.0.0
+
+ '@jridgewell/gen-mapping@0.3.8':
+ dependencies:
+ '@jridgewell/set-array': 1.2.1
+ '@jridgewell/sourcemap-codec': 1.5.0
+ '@jridgewell/trace-mapping': 0.3.25
+
+ '@jridgewell/resolve-uri@3.1.2': {}
+
+ '@jridgewell/set-array@1.2.1': {}
+
+ '@jridgewell/sourcemap-codec@1.5.0': {}
+
+ '@jridgewell/trace-mapping@0.3.25':
+ dependencies:
+ '@jridgewell/resolve-uri': 3.1.2
+ '@jridgewell/sourcemap-codec': 1.5.0
+
+ '@mysten/bcs@1.0.4':
+ dependencies:
+ bs58: 6.0.0
+
+ '@mysten/bcs@1.1.0':
+ dependencies:
+ bs58: 6.0.0
+
+ '@mysten/bcs@1.6.0':
+ dependencies:
+ '@scure/base': 1.2.4
+
+ '@mysten/dapp-kit@0.15.6(@tanstack/react-query@5.74.4(react@18.3.1))(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(immer@10.1.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.7.3)':
+ dependencies:
+ '@mysten/sui': 1.28.0(typescript@5.7.3)
+ '@mysten/utils': 0.0.0
+ '@mysten/wallet-standard': 0.14.5(typescript@5.7.3)
+ '@mysten/zksend': 0.12.26(typescript@5.7.3)
+ '@radix-ui/react-dialog': 1.1.10(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@radix-ui/react-dropdown-menu': 2.1.11(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@radix-ui/react-slot': 1.2.0(@types/react@19.1.2)(react@18.3.1)
+ '@tanstack/react-query': 5.74.4(react@18.3.1)
+ '@vanilla-extract/css': 1.17.1
+ '@vanilla-extract/dynamic': 2.1.2
+ '@vanilla-extract/recipes': 0.5.5(@vanilla-extract/css@1.17.1)
+ clsx: 2.1.1
+ react: 18.3.1
+ zustand: 4.5.6(@types/react@19.1.2)(immer@10.1.1)(react@18.3.1)
+ transitivePeerDependencies:
+ - '@gql.tada/svelte-support'
+ - '@gql.tada/vue-support'
+ - '@types/react'
+ - '@types/react-dom'
+ - babel-plugin-macros
+ - immer
+ - react-dom
+ - typescript
+
+ '@mysten/sui@1.12.0(typescript@5.7.3)':
+ dependencies:
+ '@graphql-typed-document-node/core': 3.2.0(graphql@16.10.0)
+ '@mysten/bcs': 1.1.0
+ '@noble/curves': 1.8.2
+ '@noble/hashes': 1.8.0
+ '@scure/bip32': 1.6.2
+ '@scure/bip39': 1.5.4
+ '@suchipi/femver': 1.0.0
+ bech32: 2.0.0
+ gql.tada: 1.8.10(graphql@16.10.0)(typescript@5.7.3)
+ graphql: 16.10.0
+ tweetnacl: 1.0.3
+ valibot: 0.36.0
+ transitivePeerDependencies:
+ - '@gql.tada/svelte-support'
+ - '@gql.tada/vue-support'
+ - typescript
+
+ '@mysten/sui@1.28.0(typescript@5.7.3)':
+ dependencies:
+ '@graphql-typed-document-node/core': 3.2.0(graphql@16.10.0)
+ '@mysten/bcs': 1.6.0
+ '@mysten/utils': 0.0.0
+ '@noble/curves': 1.8.2
+ '@noble/hashes': 1.8.0
+ '@scure/base': 1.2.4
+ '@scure/bip32': 1.6.2
+ '@scure/bip39': 1.5.4
+ gql.tada: 1.8.10(graphql@16.10.0)(typescript@5.7.3)
+ graphql: 16.10.0
+ poseidon-lite: 0.2.1
+ valibot: 0.36.0
+ transitivePeerDependencies:
+ - '@gql.tada/svelte-support'
+ - '@gql.tada/vue-support'
+ - typescript
+
+ '@mysten/sui@1.8.0(typescript@5.7.3)':
+ dependencies:
+ '@graphql-typed-document-node/core': 3.2.0(graphql@16.10.0)
+ '@mysten/bcs': 1.0.4
+ '@noble/curves': 1.8.2
+ '@noble/hashes': 1.8.0
+ '@scure/bip32': 1.6.2
+ '@scure/bip39': 1.5.4
+ '@suchipi/femver': 1.0.0
+ bech32: 2.0.0
+ gql.tada: 1.8.10(graphql@16.10.0)(typescript@5.7.3)
+ graphql: 16.10.0
+ tweetnacl: 1.0.3
+ valibot: 0.36.0
+ transitivePeerDependencies:
+ - '@gql.tada/svelte-support'
+ - '@gql.tada/vue-support'
+ - typescript
+
+ '@mysten/utils@0.0.0':
+ dependencies:
+ '@scure/base': 1.2.4
+
+ '@mysten/wallet-standard@0.13.3(typescript@5.7.3)':
+ dependencies:
+ '@mysten/sui': 1.8.0(typescript@5.7.3)
+ '@wallet-standard/core': 1.0.3
+ transitivePeerDependencies:
+ - '@gql.tada/svelte-support'
+ - '@gql.tada/vue-support'
+ - typescript
+
+ '@mysten/wallet-standard@0.13.7(typescript@5.7.3)':
+ dependencies:
+ '@mysten/sui': 1.12.0(typescript@5.7.3)
+ '@wallet-standard/core': 1.0.3
+ transitivePeerDependencies:
+ - '@gql.tada/svelte-support'
+ - '@gql.tada/vue-support'
+ - typescript
+
+ '@mysten/wallet-standard@0.14.5(typescript@5.7.3)':
+ dependencies:
+ '@mysten/sui': 1.28.0(typescript@5.7.3)
+ '@wallet-standard/core': 1.1.0
+ transitivePeerDependencies:
+ - '@gql.tada/svelte-support'
+ - '@gql.tada/vue-support'
+ - typescript
+
+ '@mysten/window-wallet-core@0.0.2':
+ dependencies:
+ '@mysten/utils': 0.0.0
+ jose: 6.0.10
+ valibot: 0.36.0
+
+ '@mysten/zksend@0.11.0(typescript@5.7.3)':
+ dependencies:
+ '@mysten/sui': 1.8.0(typescript@5.7.3)
+ '@mysten/wallet-standard': 0.13.3(typescript@5.7.3)
+ mitt: 3.0.1
+ nanostores: 0.10.3
+ valibot: 0.36.0
+ transitivePeerDependencies:
+ - '@gql.tada/svelte-support'
+ - '@gql.tada/vue-support'
+ - typescript
+
+ '@mysten/zksend@0.12.26(typescript@5.7.3)':
+ dependencies:
+ '@mysten/sui': 1.28.0(typescript@5.7.3)
+ '@mysten/utils': 0.0.0
+ '@mysten/wallet-standard': 0.14.5(typescript@5.7.3)
+ '@mysten/window-wallet-core': 0.0.2
+ mitt: 3.0.1
+ nanostores: 0.10.3
+ valibot: 0.36.0
+ transitivePeerDependencies:
+ - '@gql.tada/svelte-support'
+ - '@gql.tada/vue-support'
+ - typescript
+
+ '@noble/curves@1.8.2':
+ dependencies:
+ '@noble/hashes': 1.7.2
+
+ '@noble/hashes@1.3.0': {}
+
+ '@noble/hashes@1.7.2': {}
+
+ '@noble/hashes@1.8.0': {}
+
+ '@nodelib/fs.scandir@2.1.5':
+ dependencies:
+ '@nodelib/fs.stat': 2.0.5
+ run-parallel: 1.2.0
+
+ '@nodelib/fs.stat@2.0.5': {}
+
+ '@nodelib/fs.walk@1.2.8':
+ dependencies:
+ '@nodelib/fs.scandir': 2.1.5
+ fastq: 1.19.1
+
+ '@pkgjs/parseargs@0.11.0':
+ optional: true
+
+ '@pkgr/core@0.2.4': {}
+
+ '@radix-ui/primitive@1.0.0':
+ dependencies:
+ '@babel/runtime': 7.27.0
+
+ '@radix-ui/primitive@1.1.2': {}
+
+ '@radix-ui/react-arrow@1.1.4(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
+ dependencies:
+ '@radix-ui/react-primitive': 2.1.0(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ react: 18.3.1
+ react-dom: 18.3.1(react@18.3.1)
+ optionalDependencies:
+ '@types/react': 19.1.2
+ '@types/react-dom': 19.1.2(@types/react@19.1.2)
+
+ '@radix-ui/react-collection@1.1.4(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
+ dependencies:
+ '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.2)(react@18.3.1)
+ '@radix-ui/react-context': 1.1.2(@types/react@19.1.2)(react@18.3.1)
+ '@radix-ui/react-primitive': 2.1.0(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@radix-ui/react-slot': 1.2.0(@types/react@19.1.2)(react@18.3.1)
+ react: 18.3.1
+ react-dom: 18.3.1(react@18.3.1)
+ optionalDependencies:
+ '@types/react': 19.1.2
+ '@types/react-dom': 19.1.2(@types/react@19.1.2)
+
+ '@radix-ui/react-compose-refs@1.0.0(react@18.3.1)':
+ dependencies:
+ '@babel/runtime': 7.27.0
+ react: 18.3.1
+
+ '@radix-ui/react-compose-refs@1.1.2(@types/react@19.1.2)(react@18.3.1)':
+ dependencies:
+ react: 18.3.1
+ optionalDependencies:
+ '@types/react': 19.1.2
+
+ '@radix-ui/react-context@1.0.0(react@18.3.1)':
+ dependencies:
+ '@babel/runtime': 7.27.0
+ react: 18.3.1
+
+ '@radix-ui/react-context@1.1.2(@types/react@19.1.2)(react@18.3.1)':
+ dependencies:
+ react: 18.3.1
+ optionalDependencies:
+ '@types/react': 19.1.2
+
+ '@radix-ui/react-dialog@1.0.2(@types/react@19.1.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
+ dependencies:
+ '@babel/runtime': 7.27.0
+ '@radix-ui/primitive': 1.0.0
+ '@radix-ui/react-compose-refs': 1.0.0(react@18.3.1)
+ '@radix-ui/react-context': 1.0.0(react@18.3.1)
+ '@radix-ui/react-dismissable-layer': 1.0.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@radix-ui/react-focus-guards': 1.0.0(react@18.3.1)
+ '@radix-ui/react-focus-scope': 1.0.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@radix-ui/react-id': 1.0.0(react@18.3.1)
+ '@radix-ui/react-portal': 1.0.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@radix-ui/react-presence': 1.0.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@radix-ui/react-primitive': 1.0.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@radix-ui/react-slot': 1.0.1(react@18.3.1)
+ '@radix-ui/react-use-controllable-state': 1.0.0(react@18.3.1)
+ aria-hidden: 1.2.4
+ react: 18.3.1
+ react-dom: 18.3.1(react@18.3.1)
+ react-remove-scroll: 2.5.5(@types/react@19.1.2)(react@18.3.1)
+ transitivePeerDependencies:
+ - '@types/react'
+
+ '@radix-ui/react-dialog@1.1.10(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
+ dependencies:
+ '@radix-ui/primitive': 1.1.2
+ '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.2)(react@18.3.1)
+ '@radix-ui/react-context': 1.1.2(@types/react@19.1.2)(react@18.3.1)
+ '@radix-ui/react-dismissable-layer': 1.1.7(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@radix-ui/react-focus-guards': 1.1.2(@types/react@19.1.2)(react@18.3.1)
+ '@radix-ui/react-focus-scope': 1.1.4(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@radix-ui/react-id': 1.1.1(@types/react@19.1.2)(react@18.3.1)
+ '@radix-ui/react-portal': 1.1.6(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@radix-ui/react-presence': 1.1.3(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@radix-ui/react-primitive': 2.1.0(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@radix-ui/react-slot': 1.2.0(@types/react@19.1.2)(react@18.3.1)
+ '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.2)(react@18.3.1)
+ aria-hidden: 1.2.4
+ react: 18.3.1
+ react-dom: 18.3.1(react@18.3.1)
+ react-remove-scroll: 2.6.3(@types/react@19.1.2)(react@18.3.1)
+ optionalDependencies:
+ '@types/react': 19.1.2
+ '@types/react-dom': 19.1.2(@types/react@19.1.2)
+
+ '@radix-ui/react-direction@1.1.1(@types/react@19.1.2)(react@18.3.1)':
+ dependencies:
+ react: 18.3.1
+ optionalDependencies:
+ '@types/react': 19.1.2
+
+ '@radix-ui/react-dismissable-layer@1.0.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
+ dependencies:
+ '@babel/runtime': 7.27.0
+ '@radix-ui/primitive': 1.0.0
+ '@radix-ui/react-compose-refs': 1.0.0(react@18.3.1)
+ '@radix-ui/react-primitive': 1.0.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@radix-ui/react-use-callback-ref': 1.0.0(react@18.3.1)
+ '@radix-ui/react-use-escape-keydown': 1.0.2(react@18.3.1)
+ react: 18.3.1
+ react-dom: 18.3.1(react@18.3.1)
+
+ '@radix-ui/react-dismissable-layer@1.1.7(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
+ dependencies:
+ '@radix-ui/primitive': 1.1.2
+ '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.2)(react@18.3.1)
+ '@radix-ui/react-primitive': 2.1.0(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.2)(react@18.3.1)
+ '@radix-ui/react-use-escape-keydown': 1.1.1(@types/react@19.1.2)(react@18.3.1)
+ react: 18.3.1
+ react-dom: 18.3.1(react@18.3.1)
+ optionalDependencies:
+ '@types/react': 19.1.2
+ '@types/react-dom': 19.1.2(@types/react@19.1.2)
+
+ '@radix-ui/react-dropdown-menu@2.1.11(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
+ dependencies:
+ '@radix-ui/primitive': 1.1.2
+ '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.2)(react@18.3.1)
+ '@radix-ui/react-context': 1.1.2(@types/react@19.1.2)(react@18.3.1)
+ '@radix-ui/react-id': 1.1.1(@types/react@19.1.2)(react@18.3.1)
+ '@radix-ui/react-menu': 2.1.11(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@radix-ui/react-primitive': 2.1.0(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.2)(react@18.3.1)
+ react: 18.3.1
+ react-dom: 18.3.1(react@18.3.1)
+ optionalDependencies:
+ '@types/react': 19.1.2
+ '@types/react-dom': 19.1.2(@types/react@19.1.2)
+
+ '@radix-ui/react-focus-guards@1.0.0(react@18.3.1)':
+ dependencies:
+ '@babel/runtime': 7.27.0
+ react: 18.3.1
+
+ '@radix-ui/react-focus-guards@1.1.2(@types/react@19.1.2)(react@18.3.1)':
+ dependencies:
+ react: 18.3.1
+ optionalDependencies:
+ '@types/react': 19.1.2
+
+ '@radix-ui/react-focus-scope@1.0.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
+ dependencies:
+ '@babel/runtime': 7.27.0
+ '@radix-ui/react-compose-refs': 1.0.0(react@18.3.1)
+ '@radix-ui/react-primitive': 1.0.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@radix-ui/react-use-callback-ref': 1.0.0(react@18.3.1)
+ react: 18.3.1
+ react-dom: 18.3.1(react@18.3.1)
+
+ '@radix-ui/react-focus-scope@1.1.4(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
+ dependencies:
+ '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.2)(react@18.3.1)
+ '@radix-ui/react-primitive': 2.1.0(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.2)(react@18.3.1)
+ react: 18.3.1
+ react-dom: 18.3.1(react@18.3.1)
+ optionalDependencies:
+ '@types/react': 19.1.2
+ '@types/react-dom': 19.1.2(@types/react@19.1.2)
+
+ '@radix-ui/react-id@1.0.0(react@18.3.1)':
+ dependencies:
+ '@babel/runtime': 7.27.0
+ '@radix-ui/react-use-layout-effect': 1.0.0(react@18.3.1)
+ react: 18.3.1
+
+ '@radix-ui/react-id@1.1.1(@types/react@19.1.2)(react@18.3.1)':
+ dependencies:
+ '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.2)(react@18.3.1)
+ react: 18.3.1
+ optionalDependencies:
+ '@types/react': 19.1.2
+
+ '@radix-ui/react-menu@2.1.11(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
+ dependencies:
+ '@radix-ui/primitive': 1.1.2
+ '@radix-ui/react-collection': 1.1.4(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.2)(react@18.3.1)
+ '@radix-ui/react-context': 1.1.2(@types/react@19.1.2)(react@18.3.1)
+ '@radix-ui/react-direction': 1.1.1(@types/react@19.1.2)(react@18.3.1)
+ '@radix-ui/react-dismissable-layer': 1.1.7(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@radix-ui/react-focus-guards': 1.1.2(@types/react@19.1.2)(react@18.3.1)
+ '@radix-ui/react-focus-scope': 1.1.4(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@radix-ui/react-id': 1.1.1(@types/react@19.1.2)(react@18.3.1)
+ '@radix-ui/react-popper': 1.2.4(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@radix-ui/react-portal': 1.1.6(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@radix-ui/react-presence': 1.1.3(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@radix-ui/react-primitive': 2.1.0(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@radix-ui/react-roving-focus': 1.1.7(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@radix-ui/react-slot': 1.2.0(@types/react@19.1.2)(react@18.3.1)
+ '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.2)(react@18.3.1)
+ aria-hidden: 1.2.4
+ react: 18.3.1
+ react-dom: 18.3.1(react@18.3.1)
+ react-remove-scroll: 2.6.3(@types/react@19.1.2)(react@18.3.1)
+ optionalDependencies:
+ '@types/react': 19.1.2
+ '@types/react-dom': 19.1.2(@types/react@19.1.2)
+
+ '@radix-ui/react-popper@1.2.4(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
+ dependencies:
+ '@floating-ui/react-dom': 2.1.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@radix-ui/react-arrow': 1.1.4(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.2)(react@18.3.1)
+ '@radix-ui/react-context': 1.1.2(@types/react@19.1.2)(react@18.3.1)
+ '@radix-ui/react-primitive': 2.1.0(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.2)(react@18.3.1)
+ '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.2)(react@18.3.1)
+ '@radix-ui/react-use-rect': 1.1.1(@types/react@19.1.2)(react@18.3.1)
+ '@radix-ui/react-use-size': 1.1.1(@types/react@19.1.2)(react@18.3.1)
+ '@radix-ui/rect': 1.1.1
+ react: 18.3.1
+ react-dom: 18.3.1(react@18.3.1)
+ optionalDependencies:
+ '@types/react': 19.1.2
+ '@types/react-dom': 19.1.2(@types/react@19.1.2)
+
+ '@radix-ui/react-portal@1.0.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
+ dependencies:
+ '@babel/runtime': 7.27.0
+ '@radix-ui/react-primitive': 1.0.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ react: 18.3.1
+ react-dom: 18.3.1(react@18.3.1)
+
+ '@radix-ui/react-portal@1.1.6(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
+ dependencies:
+ '@radix-ui/react-primitive': 2.1.0(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.2)(react@18.3.1)
+ react: 18.3.1
+ react-dom: 18.3.1(react@18.3.1)
+ optionalDependencies:
+ '@types/react': 19.1.2
+ '@types/react-dom': 19.1.2(@types/react@19.1.2)
+
+ '@radix-ui/react-presence@1.0.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
+ dependencies:
+ '@babel/runtime': 7.27.0
+ '@radix-ui/react-compose-refs': 1.0.0(react@18.3.1)
+ '@radix-ui/react-use-layout-effect': 1.0.0(react@18.3.1)
+ react: 18.3.1
+ react-dom: 18.3.1(react@18.3.1)
+
+ '@radix-ui/react-presence@1.1.3(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
+ dependencies:
+ '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.2)(react@18.3.1)
+ '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.2)(react@18.3.1)
+ react: 18.3.1
+ react-dom: 18.3.1(react@18.3.1)
+ optionalDependencies:
+ '@types/react': 19.1.2
+ '@types/react-dom': 19.1.2(@types/react@19.1.2)
+
+ '@radix-ui/react-primitive@1.0.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
+ dependencies:
+ '@babel/runtime': 7.27.0
+ '@radix-ui/react-slot': 1.0.1(react@18.3.1)
+ react: 18.3.1
+ react-dom: 18.3.1(react@18.3.1)
+
+ '@radix-ui/react-primitive@2.1.0(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
+ dependencies:
+ '@radix-ui/react-slot': 1.2.0(@types/react@19.1.2)(react@18.3.1)
+ react: 18.3.1
+ react-dom: 18.3.1(react@18.3.1)
+ optionalDependencies:
+ '@types/react': 19.1.2
+ '@types/react-dom': 19.1.2(@types/react@19.1.2)
+
+ '@radix-ui/react-roving-focus@1.1.7(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
+ dependencies:
+ '@radix-ui/primitive': 1.1.2
+ '@radix-ui/react-collection': 1.1.4(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.2)(react@18.3.1)
+ '@radix-ui/react-context': 1.1.2(@types/react@19.1.2)(react@18.3.1)
+ '@radix-ui/react-direction': 1.1.1(@types/react@19.1.2)(react@18.3.1)
+ '@radix-ui/react-id': 1.1.1(@types/react@19.1.2)(react@18.3.1)
+ '@radix-ui/react-primitive': 2.1.0(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.2)(react@18.3.1)
+ '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.2)(react@18.3.1)
+ react: 18.3.1
+ react-dom: 18.3.1(react@18.3.1)
+ optionalDependencies:
+ '@types/react': 19.1.2
+ '@types/react-dom': 19.1.2(@types/react@19.1.2)
+
+ '@radix-ui/react-slot@1.0.1(react@18.3.1)':
+ dependencies:
+ '@babel/runtime': 7.27.0
+ '@radix-ui/react-compose-refs': 1.0.0(react@18.3.1)
+ react: 18.3.1
+
+ '@radix-ui/react-slot@1.2.0(@types/react@19.1.2)(react@18.3.1)':
+ dependencies:
+ '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.2)(react@18.3.1)
+ react: 18.3.1
+ optionalDependencies:
+ '@types/react': 19.1.2
+
+ '@radix-ui/react-use-callback-ref@1.0.0(react@18.3.1)':
+ dependencies:
+ '@babel/runtime': 7.27.0
+ react: 18.3.1
+
+ '@radix-ui/react-use-callback-ref@1.1.1(@types/react@19.1.2)(react@18.3.1)':
+ dependencies:
+ react: 18.3.1
+ optionalDependencies:
+ '@types/react': 19.1.2
+
+ '@radix-ui/react-use-controllable-state@1.0.0(react@18.3.1)':
+ dependencies:
+ '@babel/runtime': 7.27.0
+ '@radix-ui/react-use-callback-ref': 1.0.0(react@18.3.1)
+ react: 18.3.1
+
+ '@radix-ui/react-use-controllable-state@1.2.2(@types/react@19.1.2)(react@18.3.1)':
+ dependencies:
+ '@radix-ui/react-use-effect-event': 0.0.2(@types/react@19.1.2)(react@18.3.1)
+ '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.2)(react@18.3.1)
+ react: 18.3.1
+ optionalDependencies:
+ '@types/react': 19.1.2
+
+ '@radix-ui/react-use-effect-event@0.0.2(@types/react@19.1.2)(react@18.3.1)':
+ dependencies:
+ '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.2)(react@18.3.1)
+ react: 18.3.1
+ optionalDependencies:
+ '@types/react': 19.1.2
+
+ '@radix-ui/react-use-escape-keydown@1.0.2(react@18.3.1)':
+ dependencies:
+ '@babel/runtime': 7.27.0
+ '@radix-ui/react-use-callback-ref': 1.0.0(react@18.3.1)
+ react: 18.3.1
+
+ '@radix-ui/react-use-escape-keydown@1.1.1(@types/react@19.1.2)(react@18.3.1)':
+ dependencies:
+ '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.2)(react@18.3.1)
+ react: 18.3.1
+ optionalDependencies:
+ '@types/react': 19.1.2
+
+ '@radix-ui/react-use-layout-effect@1.0.0(react@18.3.1)':
+ dependencies:
+ '@babel/runtime': 7.27.0
+ react: 18.3.1
+
+ '@radix-ui/react-use-layout-effect@1.1.1(@types/react@19.1.2)(react@18.3.1)':
+ dependencies:
+ react: 18.3.1
+ optionalDependencies:
+ '@types/react': 19.1.2
+
+ '@radix-ui/react-use-rect@1.1.1(@types/react@19.1.2)(react@18.3.1)':
+ dependencies:
+ '@radix-ui/rect': 1.1.1
+ react: 18.3.1
+ optionalDependencies:
+ '@types/react': 19.1.2
+
+ '@radix-ui/react-use-size@1.1.1(@types/react@19.1.2)(react@18.3.1)':
+ dependencies:
+ '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.2)(react@18.3.1)
+ react: 18.3.1
+ optionalDependencies:
+ '@types/react': 19.1.2
+
+ '@radix-ui/rect@1.1.1': {}
+
+ '@rc-component/util@1.2.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
+ dependencies:
+ react: 18.3.1
+ react-dom: 18.3.1(react@18.3.1)
+ react-is: 18.3.1
+
+ '@react-spring/animated@9.7.5(react@18.3.1)':
+ dependencies:
+ '@react-spring/shared': 9.7.5(react@18.3.1)
+ '@react-spring/types': 9.7.5
+ react: 18.3.1
+
+ '@react-spring/core@9.7.5(react@18.3.1)':
+ dependencies:
+ '@react-spring/animated': 9.7.5(react@18.3.1)
+ '@react-spring/shared': 9.7.5(react@18.3.1)
+ '@react-spring/types': 9.7.5
+ react: 18.3.1
+
+ '@react-spring/rafz@9.7.5': {}
+
+ '@react-spring/shared@9.7.5(react@18.3.1)':
+ dependencies:
+ '@react-spring/rafz': 9.7.5
+ '@react-spring/types': 9.7.5
+ react: 18.3.1
+
+ '@react-spring/types@9.7.5': {}
+
+ '@react-spring/web@9.7.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
+ dependencies:
+ '@react-spring/animated': 9.7.5(react@18.3.1)
+ '@react-spring/core': 9.7.5(react@18.3.1)
+ '@react-spring/shared': 9.7.5(react@18.3.1)
+ '@react-spring/types': 9.7.5
+ react: 18.3.1
+ react-dom: 18.3.1(react@18.3.1)
+
+ '@reduxjs/toolkit@2.7.0(react-redux@9.2.0(@types/react@19.1.2)(react@18.3.1)(redux@5.0.1))(react@18.3.1)':
+ dependencies:
+ '@standard-schema/spec': 1.0.0
+ '@standard-schema/utils': 0.3.0
+ immer: 10.1.1
+ redux: 5.0.1
+ redux-thunk: 3.1.0(redux@5.0.1)
+ reselect: 5.1.1
+ optionalDependencies:
+ react: 18.3.1
+ react-redux: 9.2.0(@types/react@19.1.2)(react@18.3.1)(redux@5.0.1)
+
+ '@remix-run/router@1.23.0': {}
+
+ '@rollup/pluginutils@4.2.1':
+ dependencies:
+ estree-walker: 2.0.2
+ picomatch: 2.3.1
+
+ '@rollup/rollup-android-arm-eabi@4.40.0':
+ optional: true
+
+ '@rollup/rollup-android-arm64@4.40.0':
+ optional: true
+
+ '@rollup/rollup-darwin-arm64@4.40.0':
+ optional: true
+
+ '@rollup/rollup-darwin-x64@4.40.0':
+ optional: true
+
+ '@rollup/rollup-freebsd-arm64@4.40.0':
+ optional: true
+
+ '@rollup/rollup-freebsd-x64@4.40.0':
+ optional: true
+
+ '@rollup/rollup-linux-arm-gnueabihf@4.40.0':
+ optional: true
+
+ '@rollup/rollup-linux-arm-musleabihf@4.40.0':
+ optional: true
+
+ '@rollup/rollup-linux-arm64-gnu@4.40.0':
+ optional: true
+
+ '@rollup/rollup-linux-arm64-musl@4.40.0':
+ optional: true
+
+ '@rollup/rollup-linux-loongarch64-gnu@4.40.0':
+ optional: true
+
+ '@rollup/rollup-linux-powerpc64le-gnu@4.40.0':
+ optional: true
+
+ '@rollup/rollup-linux-riscv64-gnu@4.40.0':
+ optional: true
+
+ '@rollup/rollup-linux-riscv64-musl@4.40.0':
+ optional: true
+
+ '@rollup/rollup-linux-s390x-gnu@4.40.0':
+ optional: true
+
+ '@rollup/rollup-linux-x64-gnu@4.40.0':
+ optional: true
+
+ '@rollup/rollup-linux-x64-musl@4.40.0':
+ optional: true
+
+ '@rollup/rollup-win32-arm64-msvc@4.40.0':
+ optional: true
+
+ '@rollup/rollup-win32-ia32-msvc@4.40.0':
+ optional: true
+
+ '@rollup/rollup-win32-x64-msvc@4.40.0':
+ optional: true
+
+ '@scure/base@1.2.4': {}
+
+ '@scure/bip32@1.6.2':
+ dependencies:
+ '@noble/curves': 1.8.2
+ '@noble/hashes': 1.7.2
+ '@scure/base': 1.2.4
+
+ '@scure/bip39@1.5.4':
+ dependencies:
+ '@noble/hashes': 1.7.2
+ '@scure/base': 1.2.4
+
+ '@standard-schema/spec@1.0.0': {}
+
+ '@standard-schema/utils@0.3.0': {}
+
+ '@suchipi/femver@1.0.0': {}
+
+ '@suiet/wallet-kit@0.3.4(@mysten/sui@1.28.0(typescript@5.7.3))(@types/react@19.1.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.7.3)':
+ dependencies:
+ '@mysten/sui': 1.28.0(typescript@5.7.3)
+ '@mysten/wallet-standard': 0.13.7(typescript@5.7.3)
+ '@mysten/zksend': 0.11.0(typescript@5.7.3)
+ '@radix-ui/react-dialog': 1.0.2(@types/react@19.1.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@suiet/wallet-sdk': 0.3.3(@mysten/sui@1.28.0(typescript@5.7.3))(typescript@5.7.3)
+ '@svgr/rollup': 6.5.1
+ '@wallet-standard/core': 1.0.3
+ buffer: 6.0.3
+ classnames: 2.3.2
+ lodash-es: 4.17.21
+ mitt: 3.0.0
+ react: 18.3.1
+ react-dom: 18.3.1(react@18.3.1)
+ react-query: 3.39.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ transitivePeerDependencies:
+ - '@gql.tada/svelte-support'
+ - '@gql.tada/vue-support'
+ - '@types/react'
+ - react-native
+ - supports-color
+ - typescript
+
+ '@suiet/wallet-sdk@0.3.3(@mysten/sui@1.28.0(typescript@5.7.3))(typescript@5.7.3)':
+ dependencies:
+ '@mysten/sui': 1.28.0(typescript@5.7.3)
+ '@mysten/wallet-standard': 0.13.7(typescript@5.7.3)
+ '@mysten/zksend': 0.11.0(typescript@5.7.3)
+ '@noble/hashes': 1.3.0
+ buffer: 6.0.3
+ superstruct: 1.0.3
+ tweetnacl: 1.0.3
+ transitivePeerDependencies:
+ - '@gql.tada/svelte-support'
+ - '@gql.tada/vue-support'
+ - typescript
+
+ '@supabase/auth-js@2.69.1':
+ dependencies:
+ '@supabase/node-fetch': 2.6.15
+
+ '@supabase/functions-js@2.4.4':
+ dependencies:
+ '@supabase/node-fetch': 2.6.15
+
+ '@supabase/node-fetch@2.6.15':
+ dependencies:
+ whatwg-url: 5.0.0
+
+ '@supabase/postgrest-js@1.19.4':
+ dependencies:
+ '@supabase/node-fetch': 2.6.15
+
+ '@supabase/realtime-js@2.11.2':
+ dependencies:
+ '@supabase/node-fetch': 2.6.15
+ '@types/phoenix': 1.6.6
+ '@types/ws': 8.18.1
+ ws: 8.18.1
+ transitivePeerDependencies:
+ - bufferutil
+ - utf-8-validate
+
+ '@supabase/storage-js@2.7.1':
+ dependencies:
+ '@supabase/node-fetch': 2.6.15
+
+ '@supabase/supabase-js@2.49.4':
+ dependencies:
+ '@supabase/auth-js': 2.69.1
+ '@supabase/functions-js': 2.4.4
+ '@supabase/node-fetch': 2.6.15
+ '@supabase/postgrest-js': 1.19.4
+ '@supabase/realtime-js': 2.11.2
+ '@supabase/storage-js': 2.7.1
+ transitivePeerDependencies:
+ - bufferutil
+ - utf-8-validate
+
+ '@svgr/babel-plugin-add-jsx-attribute@6.5.1(@babel/core@7.26.10)':
+ dependencies:
+ '@babel/core': 7.26.10
+
+ '@svgr/babel-plugin-remove-jsx-attribute@8.0.0(@babel/core@7.26.10)':
+ dependencies:
+ '@babel/core': 7.26.10
+
+ '@svgr/babel-plugin-remove-jsx-empty-expression@8.0.0(@babel/core@7.26.10)':
+ dependencies:
+ '@babel/core': 7.26.10
+
+ '@svgr/babel-plugin-replace-jsx-attribute-value@6.5.1(@babel/core@7.26.10)':
+ dependencies:
+ '@babel/core': 7.26.10
+
+ '@svgr/babel-plugin-svg-dynamic-title@6.5.1(@babel/core@7.26.10)':
+ dependencies:
+ '@babel/core': 7.26.10
+
+ '@svgr/babel-plugin-svg-em-dimensions@6.5.1(@babel/core@7.26.10)':
+ dependencies:
+ '@babel/core': 7.26.10
+
+ '@svgr/babel-plugin-transform-react-native-svg@6.5.1(@babel/core@7.26.10)':
+ dependencies:
+ '@babel/core': 7.26.10
+
+ '@svgr/babel-plugin-transform-svg-component@6.5.1(@babel/core@7.26.10)':
+ dependencies:
+ '@babel/core': 7.26.10
+
+ '@svgr/babel-preset@6.5.1(@babel/core@7.26.10)':
+ dependencies:
+ '@babel/core': 7.26.10
+ '@svgr/babel-plugin-add-jsx-attribute': 6.5.1(@babel/core@7.26.10)
+ '@svgr/babel-plugin-remove-jsx-attribute': 8.0.0(@babel/core@7.26.10)
+ '@svgr/babel-plugin-remove-jsx-empty-expression': 8.0.0(@babel/core@7.26.10)
+ '@svgr/babel-plugin-replace-jsx-attribute-value': 6.5.1(@babel/core@7.26.10)
+ '@svgr/babel-plugin-svg-dynamic-title': 6.5.1(@babel/core@7.26.10)
+ '@svgr/babel-plugin-svg-em-dimensions': 6.5.1(@babel/core@7.26.10)
+ '@svgr/babel-plugin-transform-react-native-svg': 6.5.1(@babel/core@7.26.10)
+ '@svgr/babel-plugin-transform-svg-component': 6.5.1(@babel/core@7.26.10)
+
+ '@svgr/core@6.5.1':
+ dependencies:
+ '@babel/core': 7.26.10
+ '@svgr/babel-preset': 6.5.1(@babel/core@7.26.10)
+ '@svgr/plugin-jsx': 6.5.1(@svgr/core@6.5.1)
+ camelcase: 6.3.0
+ cosmiconfig: 7.1.0
+ transitivePeerDependencies:
+ - supports-color
+
+ '@svgr/hast-util-to-babel-ast@6.5.1':
+ dependencies:
+ '@babel/types': 7.27.0
+ entities: 4.5.0
+
+ '@svgr/plugin-jsx@6.5.1(@svgr/core@6.5.1)':
+ dependencies:
+ '@babel/core': 7.26.10
+ '@svgr/babel-preset': 6.5.1(@babel/core@7.26.10)
+ '@svgr/core': 6.5.1
+ '@svgr/hast-util-to-babel-ast': 6.5.1
+ svg-parser: 2.0.4
+ transitivePeerDependencies:
+ - supports-color
+
+ '@svgr/plugin-svgo@6.5.1(@svgr/core@6.5.1)':
+ dependencies:
+ '@svgr/core': 6.5.1
+ cosmiconfig: 7.1.0
+ deepmerge: 4.3.1
+ svgo: 2.8.0
+
+ '@svgr/rollup@6.5.1':
+ dependencies:
+ '@babel/core': 7.26.10
+ '@babel/plugin-transform-react-constant-elements': 7.25.9(@babel/core@7.26.10)
+ '@babel/preset-env': 7.26.9(@babel/core@7.26.10)
+ '@babel/preset-react': 7.26.3(@babel/core@7.26.10)
+ '@babel/preset-typescript': 7.27.0(@babel/core@7.26.10)
+ '@rollup/pluginutils': 4.2.1
+ '@svgr/core': 6.5.1
+ '@svgr/plugin-jsx': 6.5.1(@svgr/core@6.5.1)
+ '@svgr/plugin-svgo': 6.5.1(@svgr/core@6.5.1)
+ transitivePeerDependencies:
+ - supports-color
+
+ '@tailwindcss/forms@0.5.10(tailwindcss@3.4.17)':
+ dependencies:
+ mini-svg-data-uri: 1.4.4
+ tailwindcss: 3.4.17
+
+ '@tanstack/query-core@5.74.4': {}
+
+ '@tanstack/react-query@5.74.4(react@18.3.1)':
+ dependencies:
+ '@tanstack/query-core': 5.74.4
+ react: 18.3.1
+
+ '@trysound/sax@0.2.0': {}
+
+ '@types/babel__core@7.20.5':
+ dependencies:
+ '@babel/parser': 7.27.0
+ '@babel/types': 7.27.0
+ '@types/babel__generator': 7.27.0
+ '@types/babel__template': 7.4.4
+ '@types/babel__traverse': 7.20.7
+
+ '@types/babel__generator@7.27.0':
+ dependencies:
+ '@babel/types': 7.27.0
+
+ '@types/babel__template@7.4.4':
+ dependencies:
+ '@babel/parser': 7.27.0
+ '@babel/types': 7.27.0
+
+ '@types/babel__traverse@7.20.7':
+ dependencies:
+ '@babel/types': 7.27.0
+
+ '@types/estree@1.0.7': {}
+
+ '@types/history@4.7.11': {}
+
+ '@types/json-schema@7.0.15': {}
+
+ '@types/node@22.14.1':
+ dependencies:
+ undici-types: 6.21.0
+
+ '@types/parse-json@4.0.2': {}
+
+ '@types/phoenix@1.6.6': {}
+
+ '@types/react-dom@19.1.2(@types/react@19.1.2)':
+ dependencies:
+ '@types/react': 19.1.2
+
+ '@types/react-router-dom@5.3.3':
+ dependencies:
+ '@types/history': 4.7.11
+ '@types/react': 19.1.2
+ '@types/react-router': 5.1.20
+
+ '@types/react-router@5.1.20':
+ dependencies:
+ '@types/history': 4.7.11
+ '@types/react': 19.1.2
+
+ '@types/react@19.1.2':
+ dependencies:
+ csstype: 3.1.3
+
+ '@types/use-sync-external-store@0.0.6': {}
+
+ '@types/ws@8.18.1':
+ dependencies:
+ '@types/node': 22.14.1
+
+ '@typescript-eslint/eslint-plugin@8.31.0(@typescript-eslint/parser@8.31.0(eslint@9.25.1(jiti@1.21.7))(typescript@5.7.3))(eslint@9.25.1(jiti@1.21.7))(typescript@5.7.3)':
+ dependencies:
+ '@eslint-community/regexpp': 4.12.1
+ '@typescript-eslint/parser': 8.31.0(eslint@9.25.1(jiti@1.21.7))(typescript@5.7.3)
+ '@typescript-eslint/scope-manager': 8.31.0
+ '@typescript-eslint/type-utils': 8.31.0(eslint@9.25.1(jiti@1.21.7))(typescript@5.7.3)
+ '@typescript-eslint/utils': 8.31.0(eslint@9.25.1(jiti@1.21.7))(typescript@5.7.3)
+ '@typescript-eslint/visitor-keys': 8.31.0
+ eslint: 9.25.1(jiti@1.21.7)
+ graphemer: 1.4.0
+ ignore: 5.3.2
+ natural-compare: 1.4.0
+ ts-api-utils: 2.1.0(typescript@5.7.3)
+ typescript: 5.7.3
+ transitivePeerDependencies:
+ - supports-color
+
+ '@typescript-eslint/parser@8.31.0(eslint@9.25.1(jiti@1.21.7))(typescript@5.7.3)':
+ dependencies:
+ '@typescript-eslint/scope-manager': 8.31.0
+ '@typescript-eslint/types': 8.31.0
+ '@typescript-eslint/typescript-estree': 8.31.0(typescript@5.7.3)
+ '@typescript-eslint/visitor-keys': 8.31.0
+ debug: 4.4.0
+ eslint: 9.25.1(jiti@1.21.7)
+ typescript: 5.7.3
+ transitivePeerDependencies:
+ - supports-color
+
+ '@typescript-eslint/scope-manager@8.31.0':
+ dependencies:
+ '@typescript-eslint/types': 8.31.0
+ '@typescript-eslint/visitor-keys': 8.31.0
+
+ '@typescript-eslint/type-utils@8.31.0(eslint@9.25.1(jiti@1.21.7))(typescript@5.7.3)':
+ dependencies:
+ '@typescript-eslint/typescript-estree': 8.31.0(typescript@5.7.3)
+ '@typescript-eslint/utils': 8.31.0(eslint@9.25.1(jiti@1.21.7))(typescript@5.7.3)
+ debug: 4.4.0
+ eslint: 9.25.1(jiti@1.21.7)
+ ts-api-utils: 2.1.0(typescript@5.7.3)
+ typescript: 5.7.3
+ transitivePeerDependencies:
+ - supports-color
+
+ '@typescript-eslint/types@8.31.0': {}
+
+ '@typescript-eslint/typescript-estree@8.31.0(typescript@5.7.3)':
+ dependencies:
+ '@typescript-eslint/types': 8.31.0
+ '@typescript-eslint/visitor-keys': 8.31.0
+ debug: 4.4.0
+ fast-glob: 3.3.3
+ is-glob: 4.0.3
+ minimatch: 9.0.5
+ semver: 7.7.1
+ ts-api-utils: 2.1.0(typescript@5.7.3)
+ typescript: 5.7.3
+ transitivePeerDependencies:
+ - supports-color
+
+ '@typescript-eslint/utils@8.31.0(eslint@9.25.1(jiti@1.21.7))(typescript@5.7.3)':
+ dependencies:
+ '@eslint-community/eslint-utils': 4.6.1(eslint@9.25.1(jiti@1.21.7))
+ '@typescript-eslint/scope-manager': 8.31.0
+ '@typescript-eslint/types': 8.31.0
+ '@typescript-eslint/typescript-estree': 8.31.0(typescript@5.7.3)
+ eslint: 9.25.1(jiti@1.21.7)
+ typescript: 5.7.3
+ transitivePeerDependencies:
+ - supports-color
+
+ '@typescript-eslint/visitor-keys@8.31.0':
+ dependencies:
+ '@typescript-eslint/types': 8.31.0
+ eslint-visitor-keys: 4.2.0
+
+ '@vanilla-extract/css@1.17.1':
+ dependencies:
+ '@emotion/hash': 0.9.2
+ '@vanilla-extract/private': 1.0.6
+ css-what: 6.1.0
+ cssesc: 3.0.0
+ csstype: 3.1.3
+ dedent: 1.5.3
+ deep-object-diff: 1.1.9
+ deepmerge: 4.3.1
+ lru-cache: 10.4.3
+ media-query-parser: 2.0.2
+ modern-ahocorasick: 1.1.0
+ picocolors: 1.1.1
+ transitivePeerDependencies:
+ - babel-plugin-macros
+
+ '@vanilla-extract/dynamic@2.1.2':
+ dependencies:
+ '@vanilla-extract/private': 1.0.6
+
+ '@vanilla-extract/private@1.0.6': {}
+
+ '@vanilla-extract/recipes@0.5.5(@vanilla-extract/css@1.17.1)':
+ dependencies:
+ '@vanilla-extract/css': 1.17.1
+
+ '@vitejs/plugin-react@4.4.1(vite@5.2.10(@types/node@22.14.1))':
+ dependencies:
+ '@babel/core': 7.26.10
+ '@babel/plugin-transform-react-jsx-self': 7.25.9(@babel/core@7.26.10)
+ '@babel/plugin-transform-react-jsx-source': 7.25.9(@babel/core@7.26.10)
+ '@types/babel__core': 7.20.5
+ react-refresh: 0.17.0
+ vite: 5.2.10(@types/node@22.14.1)
+ transitivePeerDependencies:
+ - supports-color
+
+ '@wallet-standard/app@1.1.0':
+ dependencies:
+ '@wallet-standard/base': 1.1.0
+
+ '@wallet-standard/base@1.1.0': {}
+
+ '@wallet-standard/core@1.0.3':
+ dependencies:
+ '@wallet-standard/app': 1.1.0
+ '@wallet-standard/base': 1.1.0
+ '@wallet-standard/features': 1.1.0
+ '@wallet-standard/wallet': 1.1.0
+
+ '@wallet-standard/core@1.1.0':
+ dependencies:
+ '@wallet-standard/app': 1.1.0
+ '@wallet-standard/base': 1.1.0
+ '@wallet-standard/errors': 0.1.1
+ '@wallet-standard/features': 1.1.0
+ '@wallet-standard/wallet': 1.1.0
+
+ '@wallet-standard/errors@0.1.1':
+ dependencies:
+ chalk: 5.4.1
+ commander: 13.1.0
+
+ '@wallet-standard/features@1.1.0':
+ dependencies:
+ '@wallet-standard/base': 1.1.0
+
+ '@wallet-standard/wallet@1.1.0':
+ dependencies:
+ '@wallet-standard/base': 1.1.0
+
+ acorn-jsx@5.3.2(acorn@8.14.1):
+ dependencies:
+ acorn: 8.14.1
+
+ acorn@8.14.1: {}
+
+ ajv@6.12.6:
+ dependencies:
+ fast-deep-equal: 3.1.3
+ fast-json-stable-stringify: 2.1.0
+ json-schema-traverse: 0.4.1
+ uri-js: 4.4.1
+
+ ansi-escapes@7.0.0:
+ dependencies:
+ environment: 1.1.0
+
+ ansi-regex@5.0.1: {}
+
+ ansi-regex@6.1.0: {}
+
+ ansi-styles@4.3.0:
+ dependencies:
+ color-convert: 2.0.1
+
+ ansi-styles@6.2.1: {}
+
+ any-promise@1.3.0: {}
+
+ anymatch@3.1.3:
+ dependencies:
+ normalize-path: 3.0.0
+ picomatch: 2.3.1
+
+ arg@5.0.2: {}
+
+ argparse@2.0.1: {}
+
+ aria-hidden@1.2.4:
+ dependencies:
+ tslib: 2.8.1
+
+ autoprefixer@10.4.21(postcss@8.5.3):
+ dependencies:
+ browserslist: 4.24.4
+ caniuse-lite: 1.0.30001715
+ fraction.js: 4.3.7
+ normalize-range: 0.1.2
+ picocolors: 1.1.1
+ postcss: 8.5.3
+ postcss-value-parser: 4.2.0
+
+ babel-plugin-polyfill-corejs2@0.4.13(@babel/core@7.26.10):
+ dependencies:
+ '@babel/compat-data': 7.26.8
+ '@babel/core': 7.26.10
+ '@babel/helper-define-polyfill-provider': 0.6.4(@babel/core@7.26.10)
+ semver: 6.3.1
+ transitivePeerDependencies:
+ - supports-color
+
+ babel-plugin-polyfill-corejs3@0.11.1(@babel/core@7.26.10):
+ dependencies:
+ '@babel/core': 7.26.10
+ '@babel/helper-define-polyfill-provider': 0.6.4(@babel/core@7.26.10)
+ core-js-compat: 3.41.0
+ transitivePeerDependencies:
+ - supports-color
+
+ babel-plugin-polyfill-regenerator@0.6.4(@babel/core@7.26.10):
+ dependencies:
+ '@babel/core': 7.26.10
+ '@babel/helper-define-polyfill-provider': 0.6.4(@babel/core@7.26.10)
+ transitivePeerDependencies:
+ - supports-color
+
+ balanced-match@1.0.2: {}
+
+ base-x@5.0.1: {}
+
+ base64-js@1.5.1: {}
+
+ bech32@2.0.0: {}
+
+ big-integer@1.6.52: {}
+
+ binary-extensions@2.3.0: {}
+
+ boolbase@1.0.0: {}
+
+ brace-expansion@1.1.11:
+ dependencies:
+ balanced-match: 1.0.2
+ concat-map: 0.0.1
+
+ brace-expansion@2.0.1:
+ dependencies:
+ balanced-match: 1.0.2
+
+ braces@3.0.3:
+ dependencies:
+ fill-range: 7.1.1
+
+ broadcast-channel@3.7.0:
+ dependencies:
+ '@babel/runtime': 7.27.0
+ detect-node: 2.1.0
+ js-sha3: 0.8.0
+ microseconds: 0.2.0
+ nano-time: 1.0.0
+ oblivious-set: 1.0.0
+ rimraf: 3.0.2
+ unload: 2.2.0
+
+ browserslist@4.24.4:
+ dependencies:
+ caniuse-lite: 1.0.30001715
+ electron-to-chromium: 1.5.140
+ node-releases: 2.0.19
+ update-browserslist-db: 1.1.3(browserslist@4.24.4)
+
+ bs58@6.0.0:
+ dependencies:
+ base-x: 5.0.1
+
+ buffer@6.0.3:
+ dependencies:
+ base64-js: 1.5.1
+ ieee754: 1.2.1
+
+ callsites@3.1.0: {}
+
+ camelcase-css@2.0.1: {}
+
+ camelcase@6.3.0: {}
+
+ caniuse-lite@1.0.30001715: {}
+
+ chalk@4.1.2:
+ dependencies:
+ ansi-styles: 4.3.0
+ supports-color: 7.2.0
+
+ chalk@5.4.1: {}
+
+ chokidar@3.6.0:
+ dependencies:
+ anymatch: 3.1.3
+ braces: 3.0.3
+ glob-parent: 5.1.2
+ is-binary-path: 2.1.0
+ is-glob: 4.0.3
+ normalize-path: 3.0.0
+ readdirp: 3.6.0
+ optionalDependencies:
+ fsevents: 2.3.3
+
+ classnames@2.3.2: {}
+
+ classnames@2.5.1: {}
+
+ cli-cursor@5.0.0:
+ dependencies:
+ restore-cursor: 5.1.0
+
+ cli-truncate@4.0.0:
+ dependencies:
+ slice-ansi: 5.0.0
+ string-width: 7.2.0
+
+ clsx@2.1.1: {}
+
+ color-convert@2.0.1:
+ dependencies:
+ color-name: 1.1.4
+
+ color-name@1.1.4: {}
+
+ colorette@2.0.20: {}
+
+ commander@13.1.0: {}
+
+ commander@4.1.1: {}
+
+ commander@7.2.0: {}
+
+ concat-map@0.0.1: {}
+
+ convert-source-map@2.0.0: {}
+
+ core-js-compat@3.41.0:
+ dependencies:
+ browserslist: 4.24.4
+
+ cosmiconfig@7.1.0:
+ dependencies:
+ '@types/parse-json': 4.0.2
+ import-fresh: 3.3.1
+ parse-json: 5.2.0
+ path-type: 4.0.0
+ yaml: 1.10.2
+
+ cross-spawn@7.0.6:
+ dependencies:
+ path-key: 3.1.1
+ shebang-command: 2.0.0
+ which: 2.0.2
+
+ css-select@4.3.0:
+ dependencies:
+ boolbase: 1.0.0
+ css-what: 6.1.0
+ domhandler: 4.3.1
+ domutils: 2.8.0
+ nth-check: 2.1.1
+
+ css-tree@1.1.3:
+ dependencies:
+ mdn-data: 2.0.14
+ source-map: 0.6.1
+
+ css-what@6.1.0: {}
+
+ cssesc@3.0.0: {}
+
+ csso@4.2.0:
+ dependencies:
+ css-tree: 1.1.3
+
+ csstype@3.1.3: {}
+
+ debug@4.4.0:
+ dependencies:
+ ms: 2.1.3
+
+ dedent@1.5.3: {}
+
+ deep-is@0.1.4: {}
+
+ deep-object-diff@1.1.9: {}
+
+ deepmerge@4.3.1: {}
+
+ detect-node-es@1.1.0: {}
+
+ detect-node@2.1.0: {}
+
+ didyoumean@1.2.2: {}
+
+ dlv@1.1.3: {}
+
+ dom-serializer@1.4.1:
+ dependencies:
+ domelementtype: 2.3.0
+ domhandler: 4.3.1
+ entities: 2.2.0
+
+ domelementtype@2.3.0: {}
+
+ domhandler@4.3.1:
+ dependencies:
+ domelementtype: 2.3.0
+
+ domutils@2.8.0:
+ dependencies:
+ dom-serializer: 1.4.1
+ domelementtype: 2.3.0
+ domhandler: 4.3.1
+
+ eastasianwidth@0.2.0: {}
+
+ electron-to-chromium@1.5.140: {}
+
+ emoji-regex@10.4.0: {}
+
+ emoji-regex@8.0.0: {}
+
+ emoji-regex@9.2.2: {}
+
+ entities@2.2.0: {}
+
+ entities@4.5.0: {}
+
+ environment@1.1.0: {}
+
+ error-ex@1.3.2:
+ dependencies:
+ is-arrayish: 0.2.1
+
+ esbuild@0.20.2:
+ optionalDependencies:
+ '@esbuild/aix-ppc64': 0.20.2
+ '@esbuild/android-arm': 0.20.2
+ '@esbuild/android-arm64': 0.20.2
+ '@esbuild/android-x64': 0.20.2
+ '@esbuild/darwin-arm64': 0.20.2
+ '@esbuild/darwin-x64': 0.20.2
+ '@esbuild/freebsd-arm64': 0.20.2
+ '@esbuild/freebsd-x64': 0.20.2
+ '@esbuild/linux-arm': 0.20.2
+ '@esbuild/linux-arm64': 0.20.2
+ '@esbuild/linux-ia32': 0.20.2
+ '@esbuild/linux-loong64': 0.20.2
+ '@esbuild/linux-mips64el': 0.20.2
+ '@esbuild/linux-ppc64': 0.20.2
+ '@esbuild/linux-riscv64': 0.20.2
+ '@esbuild/linux-s390x': 0.20.2
+ '@esbuild/linux-x64': 0.20.2
+ '@esbuild/netbsd-x64': 0.20.2
+ '@esbuild/openbsd-x64': 0.20.2
+ '@esbuild/sunos-x64': 0.20.2
+ '@esbuild/win32-arm64': 0.20.2
+ '@esbuild/win32-ia32': 0.20.2
+ '@esbuild/win32-x64': 0.20.2
+
+ escalade@3.2.0: {}
+
+ escape-string-regexp@4.0.0: {}
+
+ eslint-config-prettier@10.1.2(eslint@9.25.1(jiti@1.21.7)):
+ dependencies:
+ eslint: 9.25.1(jiti@1.21.7)
+
+ eslint-plugin-prettier@5.2.6(eslint-config-prettier@10.1.2(eslint@9.25.1(jiti@1.21.7)))(eslint@9.25.1(jiti@1.21.7))(prettier@3.5.3):
+ dependencies:
+ eslint: 9.25.1(jiti@1.21.7)
+ prettier: 3.5.3
+ prettier-linter-helpers: 1.0.0
+ synckit: 0.11.4
+ optionalDependencies:
+ eslint-config-prettier: 10.1.2(eslint@9.25.1(jiti@1.21.7))
+
+ eslint-plugin-react-hooks@5.2.0(eslint@9.25.1(jiti@1.21.7)):
+ dependencies:
+ eslint: 9.25.1(jiti@1.21.7)
+
+ eslint-plugin-react-refresh@0.4.20(eslint@9.25.1(jiti@1.21.7)):
+ dependencies:
+ eslint: 9.25.1(jiti@1.21.7)
+
+ eslint-scope@8.3.0:
+ dependencies:
+ esrecurse: 4.3.0
+ estraverse: 5.3.0
+
+ eslint-visitor-keys@3.4.3: {}
+
+ eslint-visitor-keys@4.2.0: {}
+
+ eslint@9.25.1(jiti@1.21.7):
+ dependencies:
+ '@eslint-community/eslint-utils': 4.6.1(eslint@9.25.1(jiti@1.21.7))
+ '@eslint-community/regexpp': 4.12.1
+ '@eslint/config-array': 0.20.0
+ '@eslint/config-helpers': 0.2.1
+ '@eslint/core': 0.13.0
+ '@eslint/eslintrc': 3.3.1
+ '@eslint/js': 9.25.1
+ '@eslint/plugin-kit': 0.2.8
+ '@humanfs/node': 0.16.6
+ '@humanwhocodes/module-importer': 1.0.1
+ '@humanwhocodes/retry': 0.4.2
+ '@types/estree': 1.0.7
+ '@types/json-schema': 7.0.15
+ ajv: 6.12.6
+ chalk: 4.1.2
+ cross-spawn: 7.0.6
+ debug: 4.4.0
+ escape-string-regexp: 4.0.0
+ eslint-scope: 8.3.0
+ eslint-visitor-keys: 4.2.0
+ espree: 10.3.0
+ esquery: 1.6.0
+ esutils: 2.0.3
+ fast-deep-equal: 3.1.3
+ file-entry-cache: 8.0.0
+ find-up: 5.0.0
+ glob-parent: 6.0.2
+ ignore: 5.3.2
+ imurmurhash: 0.1.4
+ is-glob: 4.0.3
+ json-stable-stringify-without-jsonify: 1.0.1
+ lodash.merge: 4.6.2
+ minimatch: 3.1.2
+ natural-compare: 1.4.0
+ optionator: 0.9.4
+ optionalDependencies:
+ jiti: 1.21.7
+ transitivePeerDependencies:
+ - supports-color
+
+ espree@10.3.0:
+ dependencies:
+ acorn: 8.14.1
+ acorn-jsx: 5.3.2(acorn@8.14.1)
+ eslint-visitor-keys: 4.2.0
+
+ esquery@1.6.0:
+ dependencies:
+ estraverse: 5.3.0
+
+ esrecurse@4.3.0:
+ dependencies:
+ estraverse: 5.3.0
+
+ estraverse@5.3.0: {}
+
+ estree-walker@2.0.2: {}
+
+ esutils@2.0.3: {}
+
+ eventemitter3@5.0.1: {}
+
+ execa@8.0.1:
+ dependencies:
+ cross-spawn: 7.0.6
+ get-stream: 8.0.1
+ human-signals: 5.0.0
+ is-stream: 3.0.0
+ merge-stream: 2.0.0
+ npm-run-path: 5.3.0
+ onetime: 6.0.0
+ signal-exit: 4.1.0
+ strip-final-newline: 3.0.0
+
+ fast-deep-equal@3.1.3: {}
+
+ fast-diff@1.3.0: {}
+
+ fast-glob@3.3.3:
+ dependencies:
+ '@nodelib/fs.stat': 2.0.5
+ '@nodelib/fs.walk': 1.2.8
+ glob-parent: 5.1.2
+ merge2: 1.4.1
+ micromatch: 4.0.8
+
+ fast-json-stable-stringify@2.1.0: {}
+
+ fast-levenshtein@2.0.6: {}
+
+ fastq@1.19.1:
+ dependencies:
+ reusify: 1.1.0
+
+ file-entry-cache@8.0.0:
+ dependencies:
+ flat-cache: 4.0.1
+
+ fill-range@7.1.1:
+ dependencies:
+ to-regex-range: 5.0.1
+
+ find-up@5.0.0:
+ dependencies:
+ locate-path: 6.0.0
+ path-exists: 4.0.0
+
+ flat-cache@4.0.1:
+ dependencies:
+ flatted: 3.3.3
+ keyv: 4.5.4
+
+ flatted@3.3.3: {}
+
+ foreground-child@3.3.1:
+ dependencies:
+ cross-spawn: 7.0.6
+ signal-exit: 4.1.0
+
+ fraction.js@4.3.7: {}
+
+ framer-motion@12.7.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1):
+ dependencies:
+ motion-dom: 12.7.4
+ motion-utils: 12.7.2
+ tslib: 2.8.1
+ optionalDependencies:
+ react: 18.3.1
+ react-dom: 18.3.1(react@18.3.1)
+
+ fs.realpath@1.0.0: {}
+
+ fsevents@2.3.3:
+ optional: true
+
+ function-bind@1.1.2: {}
+
+ gensync@1.0.0-beta.2: {}
+
+ get-east-asian-width@1.3.0: {}
+
+ get-nonce@1.0.1: {}
+
+ get-stream@8.0.1: {}
+
+ glob-parent@5.1.2:
+ dependencies:
+ is-glob: 4.0.3
+
+ glob-parent@6.0.2:
+ dependencies:
+ is-glob: 4.0.3
+
+ glob@10.4.5:
+ dependencies:
+ foreground-child: 3.3.1
+ jackspeak: 3.4.3
+ minimatch: 9.0.5
+ minipass: 7.1.2
+ package-json-from-dist: 1.0.1
+ path-scurry: 1.11.1
+
+ glob@7.2.3:
+ dependencies:
+ fs.realpath: 1.0.0
+ inflight: 1.0.6
+ inherits: 2.0.4
+ minimatch: 3.1.2
+ once: 1.4.0
+ path-is-absolute: 1.0.1
+
+ globals@11.12.0: {}
+
+ globals@14.0.0: {}
+
+ globals@15.15.0: {}
+
+ gql.tada@1.8.10(graphql@16.10.0)(typescript@5.7.3):
+ dependencies:
+ '@0no-co/graphql.web': 1.1.2(graphql@16.10.0)
+ '@0no-co/graphqlsp': 1.12.16(graphql@16.10.0)(typescript@5.7.3)
+ '@gql.tada/cli-utils': 1.6.3(@0no-co/graphqlsp@1.12.16(graphql@16.10.0)(typescript@5.7.3))(graphql@16.10.0)(typescript@5.7.3)
+ '@gql.tada/internal': 1.0.8(graphql@16.10.0)(typescript@5.7.3)
+ typescript: 5.7.3
+ transitivePeerDependencies:
+ - '@gql.tada/svelte-support'
+ - '@gql.tada/vue-support'
+ - graphql
+
+ graphemer@1.4.0: {}
+
+ graphql@16.10.0: {}
+
+ gsap@3.12.7: {}
+
+ has-flag@4.0.0: {}
+
+ hasown@2.0.2:
+ dependencies:
+ function-bind: 1.1.2
+
+ human-signals@5.0.0: {}
+
+ husky@9.1.7: {}
+
+ ieee754@1.2.1: {}
+
+ ignore@5.3.2: {}
+
+ immer@10.1.1: {}
+
+ import-fresh@3.3.1:
+ dependencies:
+ parent-module: 1.0.1
+ resolve-from: 4.0.0
+
+ imurmurhash@0.1.4: {}
+
+ inflight@1.0.6:
+ dependencies:
+ once: 1.4.0
+ wrappy: 1.0.2
+
+ inherits@2.0.4: {}
+
+ is-arrayish@0.2.1: {}
+
+ is-binary-path@2.1.0:
+ dependencies:
+ binary-extensions: 2.3.0
+
+ is-core-module@2.16.1:
+ dependencies:
+ hasown: 2.0.2
+
+ is-extglob@2.1.1: {}
+
+ is-fullwidth-code-point@3.0.0: {}
+
+ is-fullwidth-code-point@4.0.0: {}
+
+ is-fullwidth-code-point@5.0.0:
+ dependencies:
+ get-east-asian-width: 1.3.0
+
+ is-glob@4.0.3:
+ dependencies:
+ is-extglob: 2.1.1
+
+ is-number@7.0.0: {}
+
+ is-stream@3.0.0: {}
+
+ isexe@2.0.0: {}
+
+ jackspeak@3.4.3:
+ dependencies:
+ '@isaacs/cliui': 8.0.2
+ optionalDependencies:
+ '@pkgjs/parseargs': 0.11.0
+
+ jiti@1.21.7: {}
+
+ jose@6.0.10: {}
+
+ js-sha3@0.8.0: {}
+
+ js-tokens@4.0.0: {}
+
+ js-yaml@4.1.0:
+ dependencies:
+ argparse: 2.0.1
+
+ jsesc@3.0.2: {}
+
+ jsesc@3.1.0: {}
+
+ json-buffer@3.0.1: {}
+
+ json-parse-even-better-errors@2.3.1: {}
+
+ json-schema-traverse@0.4.1: {}
+
+ json-stable-stringify-without-jsonify@1.0.1: {}
+
+ json5@2.2.3: {}
+
+ keyv@4.5.4:
+ dependencies:
+ json-buffer: 3.0.1
+
+ levn@0.4.1:
+ dependencies:
+ prelude-ls: 1.2.1
+ type-check: 0.4.0
+
+ lilconfig@3.1.3: {}
+
+ lines-and-columns@1.2.4: {}
+
+ lint-staged@15.5.1:
+ dependencies:
+ chalk: 5.4.1
+ commander: 13.1.0
+ debug: 4.4.0
+ execa: 8.0.1
+ lilconfig: 3.1.3
+ listr2: 8.3.2
+ micromatch: 4.0.8
+ pidtree: 0.6.0
+ string-argv: 0.3.2
+ yaml: 2.7.1
+ transitivePeerDependencies:
+ - supports-color
+
+ listr2@8.3.2:
+ dependencies:
+ cli-truncate: 4.0.0
+ colorette: 2.0.20
+ eventemitter3: 5.0.1
+ log-update: 6.1.0
+ rfdc: 1.4.1
+ wrap-ansi: 9.0.0
+
+ locate-path@6.0.0:
+ dependencies:
+ p-locate: 5.0.0
+
+ lodash-es@4.17.21: {}
+
+ lodash.debounce@4.0.8: {}
+
+ lodash.merge@4.6.2: {}
+
+ log-update@6.1.0:
+ dependencies:
+ ansi-escapes: 7.0.0
+ cli-cursor: 5.0.0
+ slice-ansi: 7.1.0
+ strip-ansi: 7.1.0
+ wrap-ansi: 9.0.0
+
+ loose-envify@1.4.0:
+ dependencies:
+ js-tokens: 4.0.0
+
+ lru-cache@10.4.3: {}
+
+ lru-cache@5.1.1:
+ dependencies:
+ yallist: 3.1.1
+
+ lucide-react@0.488.0(react@18.3.1):
+ dependencies:
+ react: 18.3.1
+
+ lz-string@1.5.0: {}
+
+ match-sorter@6.3.4:
+ dependencies:
+ '@babel/runtime': 7.27.0
+ remove-accents: 0.5.0
+
+ mdn-data@2.0.14: {}
+
+ media-query-parser@2.0.2:
+ dependencies:
+ '@babel/runtime': 7.27.0
+
+ merge-stream@2.0.0: {}
+
+ merge2@1.4.1: {}
+
+ micromatch@4.0.8:
+ dependencies:
+ braces: 3.0.3
+ picomatch: 2.3.1
+
+ microseconds@0.2.0: {}
+
+ mimic-fn@4.0.0: {}
+
+ mimic-function@5.0.1: {}
+
+ mini-svg-data-uri@1.4.4: {}
+
+ minimatch@3.1.2:
+ dependencies:
+ brace-expansion: 1.1.11
+
+ minimatch@9.0.5:
+ dependencies:
+ brace-expansion: 2.0.1
+
+ minipass@7.1.2: {}
+
+ mitt@3.0.0: {}
+
+ mitt@3.0.1: {}
+
+ modern-ahocorasick@1.1.0: {}
+
+ motion-dom@12.7.4:
+ dependencies:
+ motion-utils: 12.7.2
+
+ motion-utils@12.7.2: {}
+
+ ms@2.1.3: {}
+
+ mz@2.7.0:
+ dependencies:
+ any-promise: 1.3.0
+ object-assign: 4.1.1
+ thenify-all: 1.6.0
+
+ nano-time@1.0.0:
+ dependencies:
+ big-integer: 1.6.52
+
+ nanoid@3.3.11: {}
+
+ nanostores@0.10.3: {}
+
+ natural-compare@1.4.0: {}
+
+ node-releases@2.0.19: {}
+
+ normalize-path@3.0.0: {}
+
+ normalize-range@0.1.2: {}
+
+ npm-run-path@5.3.0:
+ dependencies:
+ path-key: 4.0.0
+
+ nth-check@2.1.1:
+ dependencies:
+ boolbase: 1.0.0
+
+ object-assign@4.1.1: {}
+
+ object-hash@3.0.0: {}
+
+ oblivious-set@1.0.0: {}
+
+ once@1.4.0:
+ dependencies:
+ wrappy: 1.0.2
+
+ onetime@6.0.0:
+ dependencies:
+ mimic-fn: 4.0.0
+
+ onetime@7.0.0:
+ dependencies:
+ mimic-function: 5.0.1
+
+ optionator@0.9.4:
+ dependencies:
+ deep-is: 0.1.4
+ fast-levenshtein: 2.0.6
+ levn: 0.4.1
+ prelude-ls: 1.2.1
+ type-check: 0.4.0
+ word-wrap: 1.2.5
+
+ p-limit@3.1.0:
+ dependencies:
+ yocto-queue: 0.1.0
+
+ p-locate@5.0.0:
+ dependencies:
+ p-limit: 3.1.0
+
+ package-json-from-dist@1.0.1: {}
+
+ parent-module@1.0.1:
+ dependencies:
+ callsites: 3.1.0
+
+ parse-json@5.2.0:
+ dependencies:
+ '@babel/code-frame': 7.26.2
+ error-ex: 1.3.2
+ json-parse-even-better-errors: 2.3.1
+ lines-and-columns: 1.2.4
+
+ path-exists@4.0.0: {}
+
+ path-is-absolute@1.0.1: {}
+
+ path-key@3.1.1: {}
+
+ path-key@4.0.0: {}
+
+ path-parse@1.0.7: {}
+
+ path-scurry@1.11.1:
+ dependencies:
+ lru-cache: 10.4.3
+ minipass: 7.1.2
+
+ path-type@4.0.0: {}
+
+ picocolors@1.1.1: {}
+
+ picomatch@2.3.1: {}
+
+ pidtree@0.6.0: {}
+
+ pify@2.3.0: {}
+
+ pirates@4.0.7: {}
+
+ poseidon-lite@0.2.1: {}
+
+ postcss-import@15.1.0(postcss@8.5.3):
+ dependencies:
+ postcss: 8.5.3
+ postcss-value-parser: 4.2.0
+ read-cache: 1.0.0
+ resolve: 1.22.10
+
+ postcss-js@4.0.1(postcss@8.5.3):
+ dependencies:
+ camelcase-css: 2.0.1
+ postcss: 8.5.3
+
+ postcss-load-config@4.0.2(postcss@8.5.3):
+ dependencies:
+ lilconfig: 3.1.3
+ yaml: 2.7.1
+ optionalDependencies:
+ postcss: 8.5.3
+
+ postcss-nested@6.2.0(postcss@8.5.3):
+ dependencies:
+ postcss: 8.5.3
+ postcss-selector-parser: 6.1.2
+
+ postcss-selector-parser@6.1.2:
+ dependencies:
+ cssesc: 3.0.0
+ util-deprecate: 1.0.2
+
+ postcss-value-parser@4.2.0: {}
+
+ postcss@8.5.3:
+ dependencies:
+ nanoid: 3.3.11
+ picocolors: 1.1.1
+ source-map-js: 1.2.1
+
+ prelude-ls@1.2.1: {}
+
+ prettier-linter-helpers@1.0.0:
+ dependencies:
+ fast-diff: 1.3.0
+
+ prettier@3.5.3: {}
+
+ punycode@2.3.1: {}
+
+ queue-microtask@1.2.3: {}
+
+ react-dom@18.3.1(react@18.3.1):
+ dependencies:
+ loose-envify: 1.4.0
+ react: 18.3.1
+ scheduler: 0.23.2
+
+ react-icons@5.5.0(react@18.3.1):
+ dependencies:
+ react: 18.3.1
+
+ react-is@18.3.1: {}
+
+ react-query@3.39.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1):
+ dependencies:
+ '@babel/runtime': 7.27.0
+ broadcast-channel: 3.7.0
+ match-sorter: 6.3.4
+ react: 18.3.1
+ optionalDependencies:
+ react-dom: 18.3.1(react@18.3.1)
+
+ react-redux@9.2.0(@types/react@19.1.2)(react@18.3.1)(redux@5.0.1):
+ dependencies:
+ '@types/use-sync-external-store': 0.0.6
+ react: 18.3.1
+ use-sync-external-store: 1.5.0(react@18.3.1)
+ optionalDependencies:
+ '@types/react': 19.1.2
+ redux: 5.0.1
+
+ react-refresh@0.17.0: {}
+
+ react-remove-scroll-bar@2.3.8(@types/react@19.1.2)(react@18.3.1):
+ dependencies:
+ react: 18.3.1
+ react-style-singleton: 2.2.3(@types/react@19.1.2)(react@18.3.1)
+ tslib: 2.8.1
+ optionalDependencies:
+ '@types/react': 19.1.2
+
+ react-remove-scroll@2.5.5(@types/react@19.1.2)(react@18.3.1):
+ dependencies:
+ react: 18.3.1
+ react-remove-scroll-bar: 2.3.8(@types/react@19.1.2)(react@18.3.1)
+ react-style-singleton: 2.2.3(@types/react@19.1.2)(react@18.3.1)
+ tslib: 2.8.1
+ use-callback-ref: 1.3.3(@types/react@19.1.2)(react@18.3.1)
+ use-sidecar: 1.1.3(@types/react@19.1.2)(react@18.3.1)
+ optionalDependencies:
+ '@types/react': 19.1.2
+
+ react-remove-scroll@2.6.3(@types/react@19.1.2)(react@18.3.1):
+ dependencies:
+ react: 18.3.1
+ react-remove-scroll-bar: 2.3.8(@types/react@19.1.2)(react@18.3.1)
+ react-style-singleton: 2.2.3(@types/react@19.1.2)(react@18.3.1)
+ tslib: 2.8.1
+ use-callback-ref: 1.3.3(@types/react@19.1.2)(react@18.3.1)
+ use-sidecar: 1.1.3(@types/react@19.1.2)(react@18.3.1)
+ optionalDependencies:
+ '@types/react': 19.1.2
+
+ react-router-dom@6.30.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1):
+ dependencies:
+ '@remix-run/router': 1.23.0
+ react: 18.3.1
+ react-dom: 18.3.1(react@18.3.1)
+ react-router: 6.30.0(react@18.3.1)
+
+ react-router@6.30.0(react@18.3.1):
+ dependencies:
+ '@remix-run/router': 1.23.0
+ react: 18.3.1
+
+ react-style-singleton@2.2.3(@types/react@19.1.2)(react@18.3.1):
+ dependencies:
+ get-nonce: 1.0.1
+ react: 18.3.1
+ tslib: 2.8.1
+ optionalDependencies:
+ '@types/react': 19.1.2
+
+ react@18.3.1:
+ dependencies:
+ loose-envify: 1.4.0
+
+ read-cache@1.0.0:
+ dependencies:
+ pify: 2.3.0
+
+ readdirp@3.6.0:
+ dependencies:
+ picomatch: 2.3.1
+
+ redux-thunk@3.1.0(redux@5.0.1):
+ dependencies:
+ redux: 5.0.1
+
+ redux@5.0.1: {}
+
+ regenerate-unicode-properties@10.2.0:
+ dependencies:
+ regenerate: 1.4.2
+
+ regenerate@1.4.2: {}
+
+ regenerator-runtime@0.14.1: {}
+
+ regenerator-transform@0.15.2:
+ dependencies:
+ '@babel/runtime': 7.27.0
+
+ regexpu-core@6.2.0:
+ dependencies:
+ regenerate: 1.4.2
+ regenerate-unicode-properties: 10.2.0
+ regjsgen: 0.8.0
+ regjsparser: 0.12.0
+ unicode-match-property-ecmascript: 2.0.0
+ unicode-match-property-value-ecmascript: 2.2.0
+
+ regjsgen@0.8.0: {}
+
+ regjsparser@0.12.0:
+ dependencies:
+ jsesc: 3.0.2
+
+ remove-accents@0.5.0: {}
+
+ reselect@5.1.1: {}
+
+ resolve-from@4.0.0: {}
+
+ resolve@1.22.10:
+ dependencies:
+ is-core-module: 2.16.1
+ path-parse: 1.0.7
+ supports-preserve-symlinks-flag: 1.0.0
+
+ restore-cursor@5.1.0:
+ dependencies:
+ onetime: 7.0.0
+ signal-exit: 4.1.0
+
+ reusify@1.1.0: {}
+
+ rfdc@1.4.1: {}
+
+ rimraf@3.0.2:
+ dependencies:
+ glob: 7.2.3
+
+ rollup@4.40.0:
+ dependencies:
+ '@types/estree': 1.0.7
+ optionalDependencies:
+ '@rollup/rollup-android-arm-eabi': 4.40.0
+ '@rollup/rollup-android-arm64': 4.40.0
+ '@rollup/rollup-darwin-arm64': 4.40.0
+ '@rollup/rollup-darwin-x64': 4.40.0
+ '@rollup/rollup-freebsd-arm64': 4.40.0
+ '@rollup/rollup-freebsd-x64': 4.40.0
+ '@rollup/rollup-linux-arm-gnueabihf': 4.40.0
+ '@rollup/rollup-linux-arm-musleabihf': 4.40.0
+ '@rollup/rollup-linux-arm64-gnu': 4.40.0
+ '@rollup/rollup-linux-arm64-musl': 4.40.0
+ '@rollup/rollup-linux-loongarch64-gnu': 4.40.0
+ '@rollup/rollup-linux-powerpc64le-gnu': 4.40.0
+ '@rollup/rollup-linux-riscv64-gnu': 4.40.0
+ '@rollup/rollup-linux-riscv64-musl': 4.40.0
+ '@rollup/rollup-linux-s390x-gnu': 4.40.0
+ '@rollup/rollup-linux-x64-gnu': 4.40.0
+ '@rollup/rollup-linux-x64-musl': 4.40.0
+ '@rollup/rollup-win32-arm64-msvc': 4.40.0
+ '@rollup/rollup-win32-ia32-msvc': 4.40.0
+ '@rollup/rollup-win32-x64-msvc': 4.40.0
+ fsevents: 2.3.3
+
+ run-parallel@1.2.0:
+ dependencies:
+ queue-microtask: 1.2.3
+
+ scheduler@0.23.2:
+ dependencies:
+ loose-envify: 1.4.0
+
+ semver@6.3.1: {}
+
+ semver@7.7.1: {}
+
+ shebang-command@2.0.0:
+ dependencies:
+ shebang-regex: 3.0.0
+
+ shebang-regex@3.0.0: {}
+
+ signal-exit@4.1.0: {}
+
+ slice-ansi@5.0.0:
+ dependencies:
+ ansi-styles: 6.2.1
+ is-fullwidth-code-point: 4.0.0
+
+ slice-ansi@7.1.0:
+ dependencies:
+ ansi-styles: 6.2.1
+ is-fullwidth-code-point: 5.0.0
+
+ source-map-js@1.2.1: {}
+
+ source-map@0.6.1: {}
+
+ stable@0.1.8: {}
+
+ string-argv@0.3.2: {}
+
+ string-width@4.2.3:
+ dependencies:
+ emoji-regex: 8.0.0
+ is-fullwidth-code-point: 3.0.0
+ strip-ansi: 6.0.1
+
+ string-width@5.1.2:
+ dependencies:
+ eastasianwidth: 0.2.0
+ emoji-regex: 9.2.2
+ strip-ansi: 7.1.0
+
+ string-width@7.2.0:
+ dependencies:
+ emoji-regex: 10.4.0
+ get-east-asian-width: 1.3.0
+ strip-ansi: 7.1.0
+
+ strip-ansi@6.0.1:
+ dependencies:
+ ansi-regex: 5.0.1
+
+ strip-ansi@7.1.0:
+ dependencies:
+ ansi-regex: 6.1.0
+
+ strip-final-newline@3.0.0: {}
+
+ strip-json-comments@3.1.1: {}
+
+ sucrase@3.35.0:
+ dependencies:
+ '@jridgewell/gen-mapping': 0.3.8
+ commander: 4.1.1
+ glob: 10.4.5
+ lines-and-columns: 1.2.4
+ mz: 2.7.0
+ pirates: 4.0.7
+ ts-interface-checker: 0.1.13
+
+ superstruct@1.0.3: {}
+
+ supports-color@7.2.0:
+ dependencies:
+ has-flag: 4.0.0
+
+ supports-preserve-symlinks-flag@1.0.0: {}
+
+ svg-parser@2.0.4: {}
+
+ svgo@2.8.0:
+ dependencies:
+ '@trysound/sax': 0.2.0
+ commander: 7.2.0
+ css-select: 4.3.0
+ css-tree: 1.1.3
+ csso: 4.2.0
+ picocolors: 1.1.1
+ stable: 0.1.8
+
+ synckit@0.11.4:
+ dependencies:
+ '@pkgr/core': 0.2.4
+ tslib: 2.8.1
+
+ tailwindcss@3.4.17:
+ dependencies:
+ '@alloc/quick-lru': 5.2.0
+ arg: 5.0.2
+ chokidar: 3.6.0
+ didyoumean: 1.2.2
+ dlv: 1.1.3
+ fast-glob: 3.3.3
+ glob-parent: 6.0.2
+ is-glob: 4.0.3
+ jiti: 1.21.7
+ lilconfig: 3.1.3
+ micromatch: 4.0.8
+ normalize-path: 3.0.0
+ object-hash: 3.0.0
+ picocolors: 1.1.1
+ postcss: 8.5.3
+ postcss-import: 15.1.0(postcss@8.5.3)
+ postcss-js: 4.0.1(postcss@8.5.3)
+ postcss-load-config: 4.0.2(postcss@8.5.3)
+ postcss-nested: 6.2.0(postcss@8.5.3)
+ postcss-selector-parser: 6.1.2
+ resolve: 1.22.10
+ sucrase: 3.35.0
+ transitivePeerDependencies:
+ - ts-node
+
+ thenify-all@1.6.0:
+ dependencies:
+ thenify: 3.3.1
+
+ thenify@3.3.1:
+ dependencies:
+ any-promise: 1.3.0
+
+ to-regex-range@5.0.1:
+ dependencies:
+ is-number: 7.0.0
+
+ tr46@0.0.3: {}
+
+ ts-api-utils@2.1.0(typescript@5.7.3):
+ dependencies:
+ typescript: 5.7.3
+
+ ts-interface-checker@0.1.13: {}
+
+ tslib@2.8.1: {}
+
+ tweetnacl@1.0.3: {}
+
+ type-check@0.4.0:
+ dependencies:
+ prelude-ls: 1.2.1
+
+ typescript-eslint@8.31.0(eslint@9.25.1(jiti@1.21.7))(typescript@5.7.3):
+ dependencies:
+ '@typescript-eslint/eslint-plugin': 8.31.0(@typescript-eslint/parser@8.31.0(eslint@9.25.1(jiti@1.21.7))(typescript@5.7.3))(eslint@9.25.1(jiti@1.21.7))(typescript@5.7.3)
+ '@typescript-eslint/parser': 8.31.0(eslint@9.25.1(jiti@1.21.7))(typescript@5.7.3)
+ '@typescript-eslint/utils': 8.31.0(eslint@9.25.1(jiti@1.21.7))(typescript@5.7.3)
+ eslint: 9.25.1(jiti@1.21.7)
+ typescript: 5.7.3
+ transitivePeerDependencies:
+ - supports-color
+
+ typescript@5.7.3: {}
+
+ undici-types@6.21.0: {}
+
+ unicode-canonical-property-names-ecmascript@2.0.1: {}
+
+ unicode-match-property-ecmascript@2.0.0:
+ dependencies:
+ unicode-canonical-property-names-ecmascript: 2.0.1
+ unicode-property-aliases-ecmascript: 2.1.0
+
+ unicode-match-property-value-ecmascript@2.2.0: {}
+
+ unicode-property-aliases-ecmascript@2.1.0: {}
+
+ unload@2.2.0:
+ dependencies:
+ '@babel/runtime': 7.27.0
+ detect-node: 2.1.0
+
+ update-browserslist-db@1.1.3(browserslist@4.24.4):
+ dependencies:
+ browserslist: 4.24.4
+ escalade: 3.2.0
+ picocolors: 1.1.1
+
+ uri-js@4.4.1:
+ dependencies:
+ punycode: 2.3.1
+
+ use-callback-ref@1.3.3(@types/react@19.1.2)(react@18.3.1):
+ dependencies:
+ react: 18.3.1
+ tslib: 2.8.1
+ optionalDependencies:
+ '@types/react': 19.1.2
+
+ use-sidecar@1.1.3(@types/react@19.1.2)(react@18.3.1):
+ dependencies:
+ detect-node-es: 1.1.0
+ react: 18.3.1
+ tslib: 2.8.1
+ optionalDependencies:
+ '@types/react': 19.1.2
+
+ use-sync-external-store@1.5.0(react@18.3.1):
+ dependencies:
+ react: 18.3.1
+
+ util-deprecate@1.0.2: {}
+
+ valibot@0.36.0: {}
+
+ vite@5.2.10(@types/node@22.14.1):
+ dependencies:
+ esbuild: 0.20.2
+ postcss: 8.5.3
+ rollup: 4.40.0
+ optionalDependencies:
+ '@types/node': 22.14.1
+ fsevents: 2.3.3
+
+ webidl-conversions@3.0.1: {}
+
+ whatwg-url@5.0.0:
+ dependencies:
+ tr46: 0.0.3
+ webidl-conversions: 3.0.1
+
+ which@2.0.2:
+ dependencies:
+ isexe: 2.0.0
+
+ word-wrap@1.2.5: {}
+
+ wrap-ansi@7.0.0:
+ dependencies:
+ ansi-styles: 4.3.0
+ string-width: 4.2.3
+ strip-ansi: 6.0.1
+
+ wrap-ansi@8.1.0:
+ dependencies:
+ ansi-styles: 6.2.1
+ string-width: 5.1.2
+ strip-ansi: 7.1.0
+
+ wrap-ansi@9.0.0:
+ dependencies:
+ ansi-styles: 6.2.1
+ string-width: 7.2.0
+ strip-ansi: 7.1.0
+
+ wrappy@1.0.2: {}
+
+ ws@8.18.1: {}
+
+ yallist@3.1.1: {}
+
+ yaml@1.10.2: {}
+
+ yaml@2.7.1: {}
+
+ yocto-queue@0.1.0: {}
+
+ zustand@4.5.6(@types/react@19.1.2)(immer@10.1.1)(react@18.3.1):
+ dependencies:
+ use-sync-external-store: 1.5.0(react@18.3.1)
+ optionalDependencies:
+ '@types/react': 19.1.2
+ immer: 10.1.1
+ react: 18.3.1
diff --git a/move202503/DudeGuuud/code/pnpm-workspace.yaml b/move202503/DudeGuuud/code/pnpm-workspace.yaml
new file mode 100644
index 00000000..c5739b74
--- /dev/null
+++ b/move202503/DudeGuuud/code/pnpm-workspace.yaml
@@ -0,0 +1,2 @@
+ignoredBuiltDependencies:
+ - esbuild
diff --git a/move202503/DudeGuuud/code/postcss.config.js b/move202503/DudeGuuud/code/postcss.config.js
new file mode 100644
index 00000000..2e7af2b7
--- /dev/null
+++ b/move202503/DudeGuuud/code/postcss.config.js
@@ -0,0 +1,6 @@
+export default {
+ plugins: {
+ tailwindcss: {},
+ autoprefixer: {},
+ },
+}
diff --git a/move202503/DudeGuuud/code/public/geminilogo2.jpg b/move202503/DudeGuuud/code/public/geminilogo2.jpg
new file mode 100644
index 00000000..aa7fbb35
Binary files /dev/null and b/move202503/DudeGuuud/code/public/geminilogo2.jpg differ
diff --git a/move202503/DudeGuuud/code/public/logo_white.png b/move202503/DudeGuuud/code/public/logo_white.png
new file mode 100644
index 00000000..b3167dc6
Binary files /dev/null and b/move202503/DudeGuuud/code/public/logo_white.png differ
diff --git a/move202503/DudeGuuud/code/public/vite.svg b/move202503/DudeGuuud/code/public/vite.svg
new file mode 100644
index 00000000..e7b8dfb1
--- /dev/null
+++ b/move202503/DudeGuuud/code/public/vite.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/move202503/DudeGuuud/code/src/App.css b/move202503/DudeGuuud/code/src/App.css
new file mode 100644
index 00000000..b9d355df
--- /dev/null
+++ b/move202503/DudeGuuud/code/src/App.css
@@ -0,0 +1,42 @@
+#root {
+ max-width: 1280px;
+ margin: 0 auto;
+ padding: 2rem;
+ text-align: center;
+}
+
+.logo {
+ height: 6em;
+ padding: 1.5em;
+ will-change: filter;
+ transition: filter 300ms;
+}
+.logo:hover {
+ filter: drop-shadow(0 0 2em #646cffaa);
+}
+.logo.react:hover {
+ filter: drop-shadow(0 0 2em #61dafbaa);
+}
+
+@keyframes logo-spin {
+ from {
+ transform: rotate(0deg);
+ }
+ to {
+ transform: rotate(360deg);
+ }
+}
+
+@media (prefers-reduced-motion: no-preference) {
+ a:nth-of-type(2) .logo {
+ animation: logo-spin infinite 20s linear;
+ }
+}
+
+.card {
+ padding: 2em;
+}
+
+.read-the-docs {
+ color: #888;
+}
diff --git a/move202503/DudeGuuud/code/src/App.tsx b/move202503/DudeGuuud/code/src/App.tsx
new file mode 100644
index 00000000..445b8b6c
--- /dev/null
+++ b/move202503/DudeGuuud/code/src/App.tsx
@@ -0,0 +1,228 @@
+import React, { useState } from 'react';
+import { useSuiStory } from './hooks/useSuiStoryWithWalrus';
+import { useWallet, ConnectButton } from '@suiet/wallet-kit';
+import './App.css';
+import { BrowserRouter, Routes, Route } from 'react-router-dom';
+import Story from './pages/Story';
+import BookDetail from './pages/Story/Detail';
+
+function App() {
+ const {
+ createStoryWithWalrus,
+ addParagraph,
+ startVoting,
+ castVote,
+ completeStory,
+ getStory,
+ getEvents,
+ } = useSuiStory();
+ // 创建故事
+ const [title, setTitle] = useState('');
+ const [content, setContent] = useState('');
+ const [loadingCreate, setLoadingCreate] = useState(false);
+ // 添加段落
+ const [storyIdPara, setStoryIdPara] = useState('');
+ const [paraContentHash, setParaContentHash] = useState('');
+ const [paraWalrusId, setParaWalrusId] = useState('');
+ const [loadingPara, setLoadingPara] = useState(false);
+ // 开始投票
+ const [storyIdVote, setStoryIdVote] = useState('');
+ const [proposalsHash, setProposalsHash] = useState('');
+ const [proposalsWalrusId, setProposalsWalrusId] = useState('');
+ const [votingDuration, setVotingDuration] = useState('');
+ const [loadingStartVote, setLoadingStartVote] = useState(false);
+ // 投票
+ const [storyIdCast, setStoryIdCast] = useState('');
+ const [proposalIndex, setProposalIndex] = useState('');
+ const [loadingCast, setLoadingCast] = useState(false);
+ // 完成故事
+ const [storyIdComplete, setStoryIdComplete] = useState('');
+ const [loadingComplete, setLoadingComplete] = useState(false);
+ // 查询故事
+ const [storyIdQuery, setStoryIdQuery] = useState('');
+ const [loadingQuery, setLoadingQuery] = useState(false);
+ // 查询事件
+ const [eventType, setEventType] = useState('');
+ const [loadingEvent, setLoadingEvent] = useState(false);
+ // 结果
+ const [result, setResult] = useState('');
+
+ // 创建故事(自动上传内容到 Walrus)
+ const handleCreateStory = async () => {
+ setResult('');
+ setLoadingCreate(true);
+ try {
+ const res = await createStoryWithWalrus(title, content);
+ setResult(JSON.stringify(res, null, 2));
+ } catch (e: any) {
+ setResult(e.message || String(e));
+ }
+ setLoadingCreate(false);
+ };
+
+ // 添加段落
+ const handleAddParagraph = async () => {
+ setResult('');
+ setLoadingPara(true);
+ try {
+ const res = await addParagraph(storyIdPara, paraContentHash, paraWalrusId);
+ setResult(JSON.stringify(res, null, 2));
+ } catch (e: any) {
+ setResult(e.message || String(e));
+ }
+ setLoadingPara(false);
+ };
+
+ // 开始投票
+ const handleStartVoting = async () => {
+ setResult('');
+ setLoadingStartVote(true);
+ try {
+ const hashArr = proposalsHash.split(',').map(s => s.trim());
+ const walrusArr = proposalsWalrusId.split(',').map(s => s.trim());
+ const duration = Number(votingDuration);
+ const res = await startVoting(storyIdVote, hashArr, walrusArr, duration);
+ setResult(JSON.stringify(res, null, 2));
+ } catch (e: any) {
+ setResult(e.message || String(e));
+ }
+ setLoadingStartVote(false);
+ };
+
+ // 投票
+ const handleCastVote = async () => {
+ setResult('');
+ setLoadingCast(true);
+ try {
+ const res = await castVote(storyIdCast, Number(proposalIndex));
+ setResult(JSON.stringify(res, null, 2));
+ } catch (e: any) {
+ setResult(e.message || String(e));
+ }
+ setLoadingCast(false);
+ };
+
+ // 完成故事
+ const handleCompleteStory = async () => {
+ setResult('');
+ setLoadingComplete(true);
+ try {
+ const res = await completeStory(storyIdComplete);
+ setResult(JSON.stringify(res, null, 2));
+ } catch (e: any) {
+ setResult(e.message || String(e));
+ }
+ setLoadingComplete(false);
+ };
+
+ // 查询故事
+ const handleGetStory = async () => {
+ setResult('');
+ setLoadingQuery(true);
+ try {
+ const res = await getStory(storyIdQuery);
+ setResult(JSON.stringify(res, null, 2));
+ } catch (e: any) {
+ setResult(e.message || String(e));
+ }
+ setLoadingQuery(false);
+ };
+
+ // 查询事件
+ const handleGetEvents = async () => {
+ setResult('');
+ setLoadingEvent(true);
+ try {
+ const res = await getEvents(eventType);
+ setResult(JSON.stringify(res, null, 2));
+ } catch (e: any) {
+ setResult(e.message || String(e));
+ }
+ setLoadingEvent(false);
+ };
+
+ return (
+
+
+ } />
+ } />
+
+
+ Sui Story 区块链交互测试
+ {/* 创建故事 */}
+
+
创建故事(自动上传 Walrus)
+ setTitle(e.target.value)} placeholder="标题" className="border p-1 mr-2" />
+
+ {/* 添加段落 */}
+
+
添加段落
+ setStoryIdPara(e.target.value)} placeholder="故事ID" className="border p-1 mr-2" />
+ setParaContentHash(e.target.value)} placeholder="内容哈希" className="border p-1 mr-2" />
+ setParaWalrusId(e.target.value)} placeholder="Walrus ID" className="border p-1 mr-2" />
+
+
+ {/* 开始投票 */}
+
+
开始投票
+ setStoryIdVote(e.target.value)} placeholder="故事ID" className="border p-1 mr-2" />
+ setProposalsHash(e.target.value)} placeholder="提案哈希(逗号分隔)" className="border p-1 mr-2 w-48" />
+ setProposalsWalrusId(e.target.value)} placeholder="提案WalrusID(逗号分隔)" className="border p-1 mr-2 w-48" />
+ setVotingDuration(e.target.value)} placeholder="投票时长(秒)" className="border p-1 mr-2 w-32" />
+
+
+ {/* 投票 */}
+
+
投票
+ setStoryIdCast(e.target.value)} placeholder="故事ID" className="border p-1 mr-2" />
+ setProposalIndex(e.target.value)} placeholder="提案序号" className="border p-1 mr-2 w-24" />
+
+
+ {/* 完成故事 */}
+
+
完成故事
+ setStoryIdComplete(e.target.value)} placeholder="故事ID" className="border p-1 mr-2" />
+
+
+ {/* 查询故事 */}
+
+
查询故事
+ setStoryIdQuery(e.target.value)} placeholder="故事ID" className="border p-1 mr-2" />
+
+
+ {/* 查询事件 */}
+
+
查询事件
+ setEventType(e.target.value)} placeholder="事件类型(如 narr_flow::token::TokensRewarded)" className="border p-1 mr-2 w-80" />
+
+
+ {/* 结果展示 */}
+
+
+ } />
+
+
+ );
+}
+
+export default App;
diff --git a/move202503/DudeGuuud/code/src/assets/react.svg b/move202503/DudeGuuud/code/src/assets/react.svg
new file mode 100644
index 00000000..6c87de9b
--- /dev/null
+++ b/move202503/DudeGuuud/code/src/assets/react.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/move202503/DudeGuuud/code/src/components/animations/FadeIn.tsx b/move202503/DudeGuuud/code/src/components/animations/FadeIn.tsx
new file mode 100644
index 00000000..832cdef8
--- /dev/null
+++ b/move202503/DudeGuuud/code/src/components/animations/FadeIn.tsx
@@ -0,0 +1,31 @@
+import React from 'react';
+import { motion, AnimatePresence } from 'framer-motion';
+
+interface FadeInProps {
+ children: React.ReactNode;
+ delay?: number;
+ duration?: number;
+}
+
+export const FadeIn: React.FC = ({
+ children,
+ delay = 0,
+ duration = 0.5
+}) => {
+ return (
+
+
+ {children}
+
+
+ );
+};
\ No newline at end of file
diff --git a/move202503/DudeGuuud/code/src/components/animations/PageTransition.tsx b/move202503/DudeGuuud/code/src/components/animations/PageTransition.tsx
new file mode 100644
index 00000000..d92b766a
--- /dev/null
+++ b/move202503/DudeGuuud/code/src/components/animations/PageTransition.tsx
@@ -0,0 +1,26 @@
+import React from 'react';
+import { motion } from 'framer-motion';
+import { useLocation } from 'react-router-dom';
+
+interface PageTransitionProps {
+ children: React.ReactNode;
+}
+
+export const PageTransition: React.FC = ({ children }) => {
+ const location = useLocation();
+
+ return (
+
+ {children}
+
+ );
+};
\ No newline at end of file
diff --git a/move202503/DudeGuuud/code/src/components/animations/SlideUp.tsx b/move202503/DudeGuuud/code/src/components/animations/SlideUp.tsx
new file mode 100644
index 00000000..c52b7e83
--- /dev/null
+++ b/move202503/DudeGuuud/code/src/components/animations/SlideUp.tsx
@@ -0,0 +1,33 @@
+import React from 'react';
+import { motion, AnimatePresence } from 'framer-motion';
+
+interface SlideUpProps {
+ children: React.ReactNode;
+ delay?: number;
+ duration?: number;
+ distance?: number;
+}
+
+export const SlideUp: React.FC = ({
+ children,
+ delay = 0,
+ duration = 0.5,
+ distance = 50
+}) => {
+ return (
+
+
+ {children}
+
+
+ );
+};
\ No newline at end of file
diff --git a/move202503/DudeGuuud/code/src/components/animations/index.ts b/move202503/DudeGuuud/code/src/components/animations/index.ts
new file mode 100644
index 00000000..ea8e53ba
--- /dev/null
+++ b/move202503/DudeGuuud/code/src/components/animations/index.ts
@@ -0,0 +1,3 @@
+export * from './FadeIn';
+export * from './SlideUp';
+export * from './PageTransition';
\ No newline at end of file
diff --git a/move202503/DudeGuuud/code/src/components/layout/LanguageSwitcher.tsx b/move202503/DudeGuuud/code/src/components/layout/LanguageSwitcher.tsx
new file mode 100644
index 00000000..75431024
--- /dev/null
+++ b/move202503/DudeGuuud/code/src/components/layout/LanguageSwitcher.tsx
@@ -0,0 +1,42 @@
+import React from 'react';
+import { useLang, LangType } from '../../contexts/lang/LangContext';
+import { SupportedLanguages } from '../../translations';
+
+const LanguageSwitcher: React.FC = () => {
+ const { lang, setLang } = useLang();
+
+ const handleLangChange = (newLang: LangType) => {
+ setLang(newLang);
+ };
+
+ return (
+
+
+
+
+ {Object.entries(SupportedLanguages).map(([code, name]) => (
+
+ ))}
+
+
+ );
+};
+
+export default LanguageSwitcher;
\ No newline at end of file
diff --git a/move202503/DudeGuuud/code/src/components/layout/Navbar.tsx b/move202503/DudeGuuud/code/src/components/layout/Navbar.tsx
new file mode 100644
index 00000000..b41b7f85
--- /dev/null
+++ b/move202503/DudeGuuud/code/src/components/layout/Navbar.tsx
@@ -0,0 +1,180 @@
+import React, { useState, useEffect, useRef } from 'react';
+import { Link, NavLink as RouterNavLink, useLocation } from 'react-router-dom';
+import { useTheme } from '../../contexts/ThemeContext';
+import { useLang } from '../../contexts/lang/LangContext';
+import { isMobileDevice } from '../../utils/deviceUtils';
+import { Globe, Sun, Moon, Menu, X, Check } from 'lucide-react';
+import { ConnectButton } from '@suiet/wallet-kit';
+import '@suiet/wallet-kit/style.css';
+
+// 导航链接配置
+const LINKS = [
+ { to: '/', label: 'home' },
+ { to: '/create', label: 'create' },
+ { to: '/story/latest', label: 'browse' },
+ { to: '/profile', label: 'profile' },
+];
+
+// 语言选项
+const LANGUAGES = [
+ { code: 'en', name: 'English' },
+ { code: 'zh', name: '中文' },
+];
+
+// NavLink 组件
+const NavLink = ({ children, to, className, onClick }: {
+ children: React.ReactNode;
+ to: string;
+ className: (props: { isActive: boolean }) => string;
+ onClick?: () => void;
+}) => {
+ return (
+
+ {children}
+
+ );
+};
+
+const Navbar: React.FC = () => {
+ const { theme, toggleTheme } = useTheme();
+ const { lang, setLang, t } = useLang();
+ const location = useLocation();
+ const [isMobile, setIsMobile] = useState(false);
+ const [menuOpen, setMenuOpen] = useState(false);
+ const [langMenuOpen, setLangMenuOpen] = useState(false);
+ const [mobileMenuOpen, setMobileMenuOpen] = useState(false);
+ const langMenuRef = useRef(null);
+
+ // 检测设备类型
+ useEffect(() => {
+ const checkDevice = () => {
+ setIsMobile(isMobileDevice());
+ };
+
+ checkDevice();
+ window.addEventListener('resize', checkDevice);
+
+ return () => {
+ window.removeEventListener('resize', checkDevice);
+ };
+ }, []);
+
+ const isActive = (path: string) => {
+ return location.pathname === path;
+ };
+
+ const toggleMenu = () => {
+ setMenuOpen(!menuOpen);
+ };
+
+ // 处理语言切换
+ const handleLangChange = (langCode: 'en' | 'zh') => {
+ console.log(`Changing language from ${lang} to ${langCode}`);
+ setLang(langCode);
+ setLangMenuOpen(false);
+ };
+
+ // 使用ref和useEffect处理点击外部关闭菜单
+ useEffect(() => {
+ const handleClickOutside = (event: MouseEvent) => {
+ if (langMenuRef.current && !langMenuRef.current.contains(event.target as Node)) {
+ setLangMenuOpen(false);
+ }
+ };
+
+ if (langMenuOpen) {
+ document.addEventListener('mousedown', handleClickOutside);
+ }
+
+ return () => {
+ document.removeEventListener('mousedown', handleClickOutside);
+ };
+ }, [langMenuOpen]);
+
+ return (
+
+ );
+};
+
+export default Navbar;
\ No newline at end of file
diff --git a/move202503/DudeGuuud/code/src/contexts/LanguageContext.tsx b/move202503/DudeGuuud/code/src/contexts/LanguageContext.tsx
new file mode 100644
index 00000000..635f4e1a
--- /dev/null
+++ b/move202503/DudeGuuud/code/src/contexts/LanguageContext.tsx
@@ -0,0 +1,81 @@
+import React, { createContext, useState, useContext, useEffect, ReactNode } from 'react';
+import { getBrowserLanguage, replaceParams } from '../utils/langUtils';
+import zhCN from '../locales/zh-CN';
+import enUS from '../locales/en-US';
+
+// 语言类型定义
+export type LangType = 'zh-CN' | 'en-US';
+
+// 语言数据映射表
+const TRANSLATIONS = {
+ 'zh-CN': zhCN,
+ 'en-US': enUS,
+};
+
+// 语言上下文接口
+interface LangContextType {
+ currentLang: LangType;
+ setLanguage: (lang: LangType) => void;
+ t: (key: string, params?: Record) => string;
+}
+
+// 创建语言上下文
+const LangContext = createContext({
+ currentLang: 'en-US',
+ setLanguage: () => {},
+ t: (key) => key,
+});
+
+// 语言提供者Props
+interface LangProviderProps {
+ children: ReactNode;
+}
+
+// 语言提供者组件
+export const LangProvider: React.FC = ({ children }) => {
+ // 初始化语言状态,默认使用浏览器语言
+ const [currentLang, setCurrentLang] = useState(getBrowserLanguage() as LangType);
+
+ // 切换语言方法
+ const setLanguage = (lang: LangType) => {
+ setCurrentLang(lang);
+ localStorage.setItem('preferred_language', lang);
+ document.documentElement.lang = lang;
+ };
+
+ // 翻译方法
+ const t = (key: string, params?: Record): string => {
+ const translations = TRANSLATIONS[currentLang] || TRANSLATIONS['en-US'];
+
+ // 使用点符号查找嵌套翻译
+ const keys = key.split('.');
+ let value = keys.reduce((obj, k) => (obj && obj[k] !== undefined) ? obj[k] : undefined, translations as any);
+
+ // 如果找不到翻译,返回原始key
+ if (value === undefined) {
+ console.warn(`Translation key not found: ${key}`);
+ return key;
+ }
+
+ // 替换参数
+ if (params) {
+ return replaceParams(value, params);
+ }
+
+ return value;
+ };
+
+ // 初始化时设置document语言
+ useEffect(() => {
+ document.documentElement.lang = currentLang;
+ }, []);
+
+ return (
+
+ {children}
+
+ );
+};
+
+// 使用语言上下文的钩子
+export const useLang = () => useContext(LangContext);
\ No newline at end of file
diff --git a/move202503/DudeGuuud/code/src/contexts/ThemeContext.tsx b/move202503/DudeGuuud/code/src/contexts/ThemeContext.tsx
new file mode 100644
index 00000000..6ef66ab9
--- /dev/null
+++ b/move202503/DudeGuuud/code/src/contexts/ThemeContext.tsx
@@ -0,0 +1,56 @@
+import React, { createContext, useContext, useState, useEffect } from 'react';
+
+type Theme = 'light' | 'dark';
+
+interface ThemeContextType {
+ theme: Theme;
+ toggleTheme: () => void;
+}
+
+const ThemeContext = createContext(undefined);
+
+export const ThemeProvider: React.FC<{ children: React.ReactNode }> = ({ children }) => {
+ const [theme, setTheme] = useState(() => {
+ if (typeof window !== 'undefined') {
+ const savedTheme = localStorage.getItem('theme');
+ if (savedTheme === 'dark' || (!savedTheme && window.matchMedia('(prefers-color-scheme: dark)').matches)) {
+ return 'dark';
+ }
+ }
+ return 'light';
+ });
+
+ useEffect(() => {
+ localStorage.setItem('theme', theme);
+ const root = window.document.documentElement;
+ root.classList.remove('light', 'dark');
+ root.classList.add(theme);
+ }, [theme]);
+
+ const toggleTheme = () => {
+ setTheme(prevTheme => {
+ const newTheme = prevTheme === 'light' ? 'dark' : 'light';
+ return newTheme;
+ });
+ };
+
+ // 提供初始主题类
+ useEffect(() => {
+ const root = window.document.documentElement;
+ root.classList.add(theme);
+ }, []);
+
+ return (
+
+ {children}
+
+ );
+};
+
+export const useTheme = () => {
+ const context = useContext(ThemeContext);
+ if (context === undefined) {
+ throw new Error('useTheme must be used within a ThemeProvider');
+ }
+ return context;
+};
\ No newline at end of file
diff --git a/move202503/DudeGuuud/code/src/contexts/lang/LangContext.tsx b/move202503/DudeGuuud/code/src/contexts/lang/LangContext.tsx
new file mode 100644
index 00000000..e408c0c4
--- /dev/null
+++ b/move202503/DudeGuuud/code/src/contexts/lang/LangContext.tsx
@@ -0,0 +1,117 @@
+import React, { createContext, useContext, useState, useEffect } from 'react';
+import { translations, SupportedLanguages } from '../../translations';
+
+// 支持的语言类型
+export type LangType = keyof typeof SupportedLanguages;
+
+// 语言上下文接口
+interface LangContextType {
+ lang: LangType;
+ setLang: (lang: LangType) => void;
+ t: (key: string, params?: Record) => string;
+}
+
+// 创建语言上下文
+const LangContext = createContext(undefined);
+
+// 检测浏览器语言,增加更可靠的错误处理
+const detectBrowserLang = (): LangType => {
+ try {
+ if (typeof window === 'undefined' || !navigator) {
+ console.log('Running in server environment or navigator not available, defaulting to English');
+ return 'en';
+ }
+
+ // 获取浏览器语言设置
+ const fullLang = navigator.language || (navigator as any).userLanguage || '';
+ const browserLang = fullLang.toLowerCase().split('-')[0];
+
+ console.log(`Detected browser language: ${browserLang}`);
+
+ // 检查是否支持该语言,如果不支持则返回英文
+ if (browserLang === 'zh') {
+ return 'zh';
+ }
+
+ // 默认返回英文
+ return 'en';
+ } catch (error) {
+ console.error('Error detecting browser language:', error);
+ return 'en'; // 出错时默认为英文
+ }
+};
+
+export const LangProvider: React.FC<{ children: React.ReactNode }> = ({ children }) => {
+ // 初始化语言状态
+ const [lang, setLang] = useState(() => {
+ try {
+ if (typeof window !== 'undefined') {
+ // 首先检查本地存储
+ const savedLang = localStorage.getItem('lang');
+ console.log(`Found saved language preference: ${savedLang}`);
+
+ if (savedLang && (savedLang === 'en' || savedLang === 'zh')) {
+ return savedLang as LangType;
+ }
+
+ // 如果本地存储中没有有效设置,则检测浏览器语言
+ return detectBrowserLang();
+ }
+
+ return 'en'; // 默认英文
+ } catch (error) {
+ console.error('Error initializing language state:', error);
+ return 'en'; // 出错时默认为英文
+ }
+ });
+
+ // 翻译函数
+ const t = (key: string, params?: Record): string => {
+ try {
+ // 获取当前语言的翻译
+ let str = translations[lang][key] || key;
+
+ if (params) {
+ Object.keys(params).forEach(k => {
+ str = str.replace(new RegExp(`{${k}}`, 'g'), params[k]);
+ });
+ }
+
+ // 当找不到翻译时记录日志,便于调试
+ if (str === key && key !== '') {
+ console.warn(`Translation not found for key: "${key}" in language: ${lang}`);
+ }
+
+ return str;
+ } catch (error) {
+ console.error(`Error translating key "${key}":`, error);
+ return key; // 出错时返回原始键名
+ }
+ };
+
+ // 语言变更时保存到本地存储
+ useEffect(() => {
+ try {
+ localStorage.setItem('lang', lang);
+ document.documentElement.setAttribute('lang', lang);
+ console.log(`Language set to: ${lang}`);
+ } catch (error) {
+ console.error('Error saving language preference:', error);
+ }
+ }, [lang]);
+
+ return (
+
+ {children}
+
+ );
+};
+
+// 使用语言的自定义Hook
+export const useLang = () => {
+ const context = useContext(LangContext);
+ if (context === undefined) {
+ throw new Error('useLang must be used within a LangProvider');
+ }
+ return context;
+};
\ No newline at end of file
diff --git a/move202503/DudeGuuud/code/src/hooks/useSuiStoryWithWalrus.ts b/move202503/DudeGuuud/code/src/hooks/useSuiStoryWithWalrus.ts
new file mode 100644
index 00000000..816717d0
--- /dev/null
+++ b/move202503/DudeGuuud/code/src/hooks/useSuiStoryWithWalrus.ts
@@ -0,0 +1,260 @@
+import { SuiClient, getFullnodeUrl } from '@mysten/sui/client';
+import { Transaction } from '@mysten/sui/transactions';
+import { useWallet } from '@suiet/wallet-kit';
+import { compressToBase64, decompressFromBase64 } from 'lz-string';
+// TODO: 替换为你刚刚发布成功的 PACKAGE_ID 和 StoryBook 对象ID
+const PACKAGE_ID = import.meta.env.VITE_PACKAGE_ID;
+const STORYBOOK_ID = import.meta.env.VITE_STORYBOOK_ID;
+const TREASURY_ID = import.meta.env.VITE_TREASURY_ID;
+// 切换为 testnet
+const suiClient = new SuiClient({ url: getFullnodeUrl(import.meta.env.VITE_SUI_NETWORK) });
+// Walrus 官方 Testnet 节点(已弃用,保留注释)
+// const WALRUS_PUBLISHER = 'https://publisher.walrus-testnet.walrus.space';
+// const WALRUS_AGGREGATOR = 'https://aggregator.walrus-testnet.walrus.space';
+/**上传内容到 Walrus,返回 blobId
+ async function uploadToWalrus(content: Blob | string, epochs: number = 1): Promise {
+ const url = `${WALRUS_PUBLISHER}/v1/blobs?epochs=${epochs}`;
+ const res = await fetch(url, {
+ method: 'PUT',
+ body: content,
+ });
+ if (!res.ok) throw new Error('Walrus 上传失败');
+ const data = await res.json();
+
+ if (data.newlyCreated) {
+ return data.newlyCreated.blobObject.blobId;
+ } else if (data.alreadyCertified) {
+ return data.alreadyCertified.blobId;
+ } else {
+ throw new Error('Walrus 返回格式异常');
+ }
+}
+
+// 从 Walrus 公共 Aggregator 下载 blob
+async function downloadFromWalrus(blobId: string): Promise {
+ const url = `${WALRUS_AGGREGATOR}/v1/blobs/${blobId}`;
+ const res = await fetch(url);
+ if (!res.ok) throw new Error('Walrus 下载失败');
+ return await res.blob();
+}
+*/
+// 计算内容哈希(sha256,返回hex字符串)
+async function calcContentHash(content: string): Promise {
+ const encoder = new TextEncoder();
+ const data = encoder.encode(content);
+ const hashBuffer = await crypto.subtle.digest('SHA-256', data);
+ return Array.from(new Uint8Array(hashBuffer)).map(b => b.toString(16).padStart(2, '0')).join('');
+}
+type BookType = {
+ id: string;
+ title: string;
+ status: number;
+ index: number;
+ paragraphs: unknown[];
+ archive_votes_threshold: number;
+ total_votes: number;
+};
+
+async function getCurrentBook(): Promise {
+ const storyBookObj = await suiClient.getObject({ id: STORYBOOK_ID, options: { showContent: true } });
+ const fields = (storyBookObj.data?.content as any)?.fields;
+ const books = (fields?.books || []).map(unpack);
+ if (books.length === 0) {
+ // 没有书,返回 null
+ return null;
+ }
+ const idx = fields?.current_book_index ?? 0;
+ const book = books[idx] ?? {};
+ // 段落也解包
+ book.paragraphs = unpackParagraphs(book.paragraphs);
+ return {
+ id: book.id || '',
+ title: book.title ?? '',
+ status: book.status ?? 0,
+ index: book.index ?? 0,
+ paragraphs: book.paragraphs,
+ archive_votes_threshold: book.archive_votes_threshold ?? 10,
+ total_votes: book.total_votes ?? 0,
+ };
+}
+
+// 工具函数:统一解包链上对象
+function unpack(obj: any) {
+ if (!obj) return obj;
+ if (obj.fields) {
+ return { ...obj.fields, id: obj.fields.id || obj.id || obj.objectId };
+ }
+ return { ...obj };
+}
+
+// 工具函数:解包段落数组
+function unpackParagraphs(paragraphs: unknown[] = []): Record[] {
+ return paragraphs.map((p, i) => {
+ const para = unpack(p);
+ return {
+ ...para,
+ index: i,
+ };
+ });
+}
+
+// 工具函数:获取段落内容(直接链上 content 字段,lz-string 解压)
+async function getParagraphContent(para: any) {
+ if (para.content) {
+ try {
+ return decompressFromBase64(para.content) || '';
+ } catch {
+ return para.content; // 解压失败时直接返回原文
+ }
+ }
+ return '';
+}
+
+export function useSuiStory() {
+ const wallet = useWallet();
+
+ // 1. 开启新书
+ async function startNewBook(title: string) {
+ if (!wallet.connected || !wallet.account?.address) throw new Error('请先连接钱包');
+ const tx = new Transaction();
+ tx.moveCall({
+ target: `${PACKAGE_ID}::story::start_new_book`,
+ arguments: [
+ tx.object(STORYBOOK_ID),
+ tx.pure.string(title),
+ tx.pure.address(wallet.account.address),
+ tx.object(TREASURY_ID),
+ ],
+ });
+ return await wallet.signAndExecuteTransaction({ transaction: tx });
+ }
+
+ // 2. 添加段落(直接压缩明文内容上链)
+ async function addParagraph(content: string) {
+ if (!wallet.connected || !wallet.account?.address) throw new Error('请先连接钱包');
+ const compressed = compressToBase64(content);
+ const tx = new Transaction();
+ tx.moveCall({
+ target: `${PACKAGE_ID}::story::add_paragraph`,
+ arguments: [
+ tx.object(STORYBOOK_ID),
+ tx.pure.string(compressed),
+ tx.pure.address(wallet.account.address),
+ tx.object(TREASURY_ID),
+ ],
+ });
+ return await wallet.signAndExecuteTransaction({ transaction: tx });
+ }
+
+ // 3. 投票
+ async function voteParagraph(paraIndex: number) {
+ if (!wallet.connected || !wallet.account?.address) throw new Error('请先连接钱包');
+ const tx = new Transaction();
+ tx.moveCall({
+ target: `${PACKAGE_ID}::story::vote_paragraph`,
+ arguments: [
+ tx.object(STORYBOOK_ID),
+ tx.pure.u64(paraIndex),
+ ],
+ });
+ return await wallet.signAndExecuteTransaction({ transaction: tx });
+ }
+
+ // 4. 归档书本
+ async function archiveBook() {
+ if (!wallet.connected || !wallet.account?.address) throw new Error('请先连接钱包');
+ const tx = new Transaction();
+ tx.moveCall({
+ target: `${PACKAGE_ID}::story::archive_book`,
+ arguments: [
+ tx.object(STORYBOOK_ID),
+ tx.object(TREASURY_ID),
+ ],
+ });
+ return await wallet.signAndExecuteTransaction({ transaction: tx });
+ }
+
+ // 5. 查询所有书(已解包,段落也解包)
+ async function getAllBooks() {
+ const storyBookObj = await suiClient.getObject({ id: STORYBOOK_ID, options: { showContent: true } });
+ const fields = (storyBookObj.data?.content as any)?.fields;
+ const books = (fields?.books || []).map(unpack);
+ books.forEach((book: Record) => {
+ book.paragraphs = unpackParagraphs(book.paragraphs);
+ });
+ return books as BookType[];
+ }
+
+ // 6. 查询某本书下所有段落(已解包)
+ async function getAllParagraphs(book: { paragraphs: unknown[] }) {
+ return unpackParagraphs(book.paragraphs);
+ }
+
+ // 新增:通过 index 获取书本
+ async function getBookByIndex(index: number) {
+ const books = await getAllBooks();
+ return books.find((b: { index: number | string }) => Number(b.index) === Number(index));
+ }
+
+ // 新增:获取段落内容(通过 walrus_id 下载)
+ async function getAllParagraphContents(book: { paragraphs: unknown[] }) {
+ const paras = await getAllParagraphs(book);
+ return Promise.all(paras.map(p => getParagraphContent(p)));
+ }
+
+ // 添加段落并归档(合并为一个链上交易)
+ async function addParagraphAndArchive(content: string) {
+ if (!wallet.connected || !wallet.account?.address) throw new Error('请先连接钱包');
+ const compressed = compressToBase64(content);
+ const tx = new Transaction();
+ tx.moveCall({
+ target: `${PACKAGE_ID}::story::add_paragraph`,
+ arguments: [
+ tx.object(STORYBOOK_ID),
+ tx.pure.string(compressed),
+ tx.pure.address(wallet.account.address),
+ tx.object(TREASURY_ID),
+ ],
+ });
+ tx.moveCall({
+ target: `${PACKAGE_ID}::story::archive_book`,
+ arguments: [
+ tx.object(STORYBOOK_ID),
+ tx.object(TREASURY_ID),
+ ],
+ });
+ return await wallet.signAndExecuteTransaction({ transaction: tx });
+ }
+
+ // 用 index 查找,用 id 调用奖励
+ async function rewardForBookIndex(index: number) {
+ const books = await getAllBooks();
+ const book = books.find(b => b.index === index);
+ if (!book) throw new Error('Book not found');
+ // 这里用 book.id 作为 story_id
+ const tx = new Transaction();
+ tx.moveCall({
+ target: `${PACKAGE_ID}::token::reward_start_new_book`,
+ arguments: [
+ tx.object(TREASURY_ID),
+ tx.object(book.id),
+ ],
+ });
+ return await wallet.signAndExecuteTransaction({ transaction: tx });
+ }
+
+ return {
+ startNewBook,
+ addParagraph,
+ addParagraphAndArchive,
+ voteParagraph,
+ archiveBook,
+ getAllBooks,
+ getAllParagraphs,
+ getBookByIndex,
+ getAllParagraphContents,
+ calcContentHash,
+ getCurrentBook,
+ rewardForBookIndex,
+ };
+}
\ No newline at end of file
diff --git a/move202503/DudeGuuud/code/src/index.css b/move202503/DudeGuuud/code/src/index.css
new file mode 100644
index 00000000..b4dc690a
--- /dev/null
+++ b/move202503/DudeGuuud/code/src/index.css
@@ -0,0 +1,258 @@
+@tailwind base;
+@tailwind components;
+@tailwind utilities;
+
+@layer base {
+ html {
+ @apply transition-colors duration-200;
+ }
+
+ body {
+ @apply bg-gray-50 text-gray-900 dark:bg-gray-900 dark:text-gray-100;
+ }
+
+ /* 设置整体颜色主题 */
+ :root {
+ --color-primary-50: 236 254 255;
+ --color-primary-100: 207 250 254;
+ --color-primary-200: 165 243 252;
+ --color-primary-300: 103 232 249;
+ --color-primary-400: 34 211 238;
+ --color-primary-500: 6 182 212;
+ --color-primary-600: 8 145 178;
+ --color-primary-700: 14 116 144;
+ --color-primary-800: 21 94 117;
+ --color-primary-900: 22 78 99;
+ --color-primary-950: 8 51 68;
+
+ --color-secondary-50: 253 242 248;
+ --color-secondary-100: 252 231 243;
+ --color-secondary-200: 251 207 232;
+ --color-secondary-300: 249 168 212;
+ --color-secondary-400: 244 114 182;
+ --color-secondary-500: 236 72 153;
+ --color-secondary-600: 219 39 119;
+ --color-secondary-700: 190 24 93;
+ --color-secondary-800: 157 23 77;
+ --color-secondary-900: 131 24 67;
+ --color-secondary-950: 80 7 36;
+
+ --background-start-rgb: 250, 250, 250;
+ --background-end-rgb: 240, 240, 240;
+ --foreground-rgb: 30, 30, 30;
+ }
+
+ /* 深色模式颜色主题 */
+ .dark {
+ --background-start-rgb: 30, 30, 30;
+ --background-end-rgb: 10, 10, 10;
+ --foreground-rgb: 230, 230, 230;
+ }
+
+ /* 设置全局字体和颜色 */
+ body {
+ color: rgb(var(--foreground-rgb));
+ background: linear-gradient(
+ to bottom,
+ rgb(var(--background-start-rgb)),
+ rgb(var(--background-end-rgb))
+ );
+ min-height: 100vh;
+ }
+}
+
+/* 自定义滚动条样式 */
+@layer utilities {
+ .scrollbar-hide::-webkit-scrollbar {
+ display: none;
+ }
+
+ .scrollbar-hide {
+ -ms-overflow-style: none;
+ scrollbar-width: none;
+ }
+}
+
+/* 定义动画 */
+@keyframes slideDown {
+ from {
+ opacity: 0;
+ transform: translateY(-10px);
+ }
+ to {
+ opacity: 1;
+ transform: translateY(0);
+ }
+}
+
+.animate-slideDown {
+ animation: slideDown 0.3s ease forwards;
+}
+
+/* 添加平滑的菜单展开和收起动画 */
+@keyframes fadeIn {
+ from {
+ opacity: 0;
+ }
+ to {
+ opacity: 1;
+ }
+}
+
+@keyframes growHeight {
+ from {
+ max-height: 0;
+ }
+ to {
+ max-height: 300px;
+ }
+}
+
+/* 菜单动画类 */
+.menu-transition {
+ transition: all 0.3s ease;
+ transform-origin: top center;
+ max-height: 0;
+ opacity: 0;
+ overflow: hidden;
+}
+
+.menu-transition.open {
+ max-height: 300px;
+ opacity: 1;
+}
+
+@keyframes slideUp {
+ from {
+ opacity: 1;
+ transform: translateY(0);
+ }
+ to {
+ opacity: 0;
+ transform: translateY(-10px);
+ }
+}
+
+.animate-slideUp {
+ animation: slideUp 0.3s ease forwards;
+}
+
+/* 为导航链接添加悬停过渡效果 */
+.nav-link {
+ position: relative;
+ transition: color 0.2s ease;
+}
+
+.nav-link::after {
+ content: '';
+ position: absolute;
+ bottom: -2px;
+ left: 0;
+ width: 0;
+ height: 2px;
+ background-color: rgb(var(--color-primary-500));
+ transition: width 0.3s ease;
+}
+
+.dark .nav-link::after {
+ background-color: rgb(var(--color-primary-300));
+}
+
+.nav-link:hover::after {
+ width: 100%;
+}
+
+/* 响应式布局调整 */
+@media (max-width: 768px) {
+ .prose {
+ font-size: 0.95rem;
+ }
+}
+
+/* 为故事内容添加优化的排版 */
+.prose p {
+ text-indent: 1.5em;
+ font-family: 'Serif', Georgia, serif;
+}
+
+.prose p:first-letter {
+ font-size: 1.2em;
+ font-weight: 500;
+}
+
+/* 书页翻转效果优化 */
+.perspective-deep {
+ perspective: 2000px;
+}
+
+/* 滚动条美化 */
+::-webkit-scrollbar {
+ width: 8px;
+}
+
+::-webkit-scrollbar-track {
+ background: rgba(0, 0, 0, 0.05);
+ border-radius: 4px;
+}
+
+::-webkit-scrollbar-thumb {
+ background: rgba(0, 0, 0, 0.2);
+ border-radius: 4px;
+}
+
+.dark ::-webkit-scrollbar-track {
+ background: rgba(255, 255, 255, 0.05);
+}
+
+.dark ::-webkit-scrollbar-thumb {
+ background: rgba(255, 255, 255, 0.2);
+}
+
+/* 完全透明化 Suiet Wallet Kit 连接后容器,只保留文字 */
+.wkit-connected-container {
+ background: transparent !important;
+ box-shadow: none !important;
+ border-radius: 0 !important;
+ padding: 0 !important;
+ min-height: unset !important;
+ display: flex !important;
+ align-items: center !important;
+ border: none !important;
+}
+
+.wkit-connected-container .wkit-account-address {
+ color: #1d4ed8 !important;
+ font-weight: bold;
+ font-size: 1rem;
+ background: none !important;
+ padding: 0 !important;
+ margin: 0 !important;
+ box-shadow: none !important;
+ border: none !important;
+}
+
+.wkit-connected-container .wkit-chain-tag {
+ background: none !important;
+ color: #64748b !important;
+ border-radius: 0 !important;
+ font-size: 0.8rem;
+ padding: 0 4px !important;
+ margin-left: 6px;
+ box-shadow: none !important;
+ border: none !important;
+}
+
+.wkit-connected-container .wkit-account-avatar {
+ display: none !important;
+}
+
+.wkit-connected-container button,
+.wkit-connected-container .wkit-account-dropdown {
+ background: transparent !important;
+ border: none !important;
+ box-shadow: none !important;
+ padding: 0 !important;
+ margin: 0 !important;
+ min-width: unset !important;
+ min-height: unset !important;
+}
diff --git a/move202503/DudeGuuud/code/src/lib/supabaseClient.ts b/move202503/DudeGuuud/code/src/lib/supabaseClient.ts
new file mode 100644
index 00000000..3b315c00
--- /dev/null
+++ b/move202503/DudeGuuud/code/src/lib/supabaseClient.ts
@@ -0,0 +1,6 @@
+import { createClient } from '@supabase/supabase-js';
+
+const supabaseUrl = import.meta.env.VITE_SUPABASE_URL;
+const supabaseKey = import.meta.env.VITE_SUPABASE_KEY;
+
+export const supabase = createClient(supabaseUrl, supabaseKey);
\ No newline at end of file
diff --git a/move202503/DudeGuuud/code/src/locales/en-US.ts b/move202503/DudeGuuud/code/src/locales/en-US.ts
new file mode 100644
index 00000000..f14bd201
--- /dev/null
+++ b/move202503/DudeGuuud/code/src/locales/en-US.ts
@@ -0,0 +1,42 @@
+export default {
+ common: {
+ loading: 'Loading...',
+ success: 'Success',
+ error: 'Error',
+ confirm: 'Confirm',
+ cancel: 'Cancel',
+ save: 'Save',
+ delete: 'Delete',
+ edit: 'Edit',
+ back: 'Back',
+ next: 'Next',
+ submit: 'Submit'
+ },
+ auth: {
+ login: 'Login',
+ register: 'Register',
+ email: 'Email',
+ password: 'Password',
+ forgotPassword: 'Forgot password?',
+ rememberMe: 'Remember me'
+ },
+ errors: {
+ required: '{field} is required',
+ invalidEmail: 'Invalid email format',
+ minLength: '{field} must be at least {length} characters',
+ maxLength: '{field} cannot exceed {length} characters',
+ passwordMismatch: 'Passwords do not match'
+ },
+ user: {
+ profile: 'Profile',
+ settings: 'Settings',
+ logout: 'Logout',
+ welcome: 'Welcome, {name}!'
+ },
+ nav: {
+ home: 'Home',
+ about: 'About',
+ contact: 'Contact',
+ dashboard: 'Dashboard'
+ }
+};
\ No newline at end of file
diff --git a/move202503/DudeGuuud/code/src/locales/es-ES.ts b/move202503/DudeGuuud/code/src/locales/es-ES.ts
new file mode 100644
index 00000000..23190e26
--- /dev/null
+++ b/move202503/DudeGuuud/code/src/locales/es-ES.ts
@@ -0,0 +1,42 @@
+export default {
+ common: {
+ loading: 'Cargando...',
+ success: 'Éxito',
+ error: 'Error',
+ confirm: 'Confirmar',
+ cancel: 'Cancelar',
+ save: 'Guardar',
+ delete: 'Eliminar',
+ edit: 'Editar',
+ back: 'Atrás',
+ next: 'Siguiente',
+ submit: 'Enviar'
+ },
+ auth: {
+ login: 'Iniciar sesión',
+ register: 'Registrarse',
+ email: 'Correo electrónico',
+ password: 'Contraseña',
+ forgotPassword: '¿Olvidó su contraseña?',
+ rememberMe: 'Recuérdame'
+ },
+ errors: {
+ required: '{field} es obligatorio',
+ invalidEmail: 'Formato de correo electrónico inválido',
+ minLength: '{field} debe tener al menos {length} caracteres',
+ maxLength: '{field} no puede exceder {length} caracteres',
+ passwordMismatch: 'Las contraseñas no coinciden'
+ },
+ user: {
+ profile: 'Perfil',
+ settings: 'Configuraciones',
+ logout: 'Cerrar sesión',
+ welcome: '¡Bienvenido, {name}!'
+ },
+ nav: {
+ home: 'Inicio',
+ about: 'Acerca de',
+ contact: 'Contacto',
+ dashboard: 'Panel de control'
+ }
+};
\ No newline at end of file
diff --git a/move202503/DudeGuuud/code/src/locales/zh-CN.ts b/move202503/DudeGuuud/code/src/locales/zh-CN.ts
new file mode 100644
index 00000000..674cb742
--- /dev/null
+++ b/move202503/DudeGuuud/code/src/locales/zh-CN.ts
@@ -0,0 +1,42 @@
+export default {
+ common: {
+ loading: '加载中...',
+ success: '成功',
+ error: '错误',
+ confirm: '确认',
+ cancel: '取消',
+ save: '保存',
+ delete: '删除',
+ edit: '编辑',
+ back: '返回',
+ next: '下一步',
+ submit: '提交'
+ },
+ auth: {
+ login: '登录',
+ register: '注册',
+ email: '邮箱',
+ password: '密码',
+ forgotPassword: '忘记密码?',
+ rememberMe: '记住我'
+ },
+ errors: {
+ required: '{field}是必填项',
+ invalidEmail: '无效的邮箱格式',
+ minLength: '{field}至少需要{length}个字符',
+ maxLength: '{field}不能超过{length}个字符',
+ passwordMismatch: '密码不匹配'
+ },
+ user: {
+ profile: '个人资料',
+ settings: '设置',
+ logout: '退出登录',
+ welcome: '欢迎,{name}!'
+ },
+ nav: {
+ home: '首页',
+ about: '关于',
+ contact: '联系我们',
+ dashboard: '控制台'
+ }
+};
\ No newline at end of file
diff --git a/move202503/DudeGuuud/code/src/main.tsx b/move202503/DudeGuuud/code/src/main.tsx
new file mode 100644
index 00000000..d4d98a7c
--- /dev/null
+++ b/move202503/DudeGuuud/code/src/main.tsx
@@ -0,0 +1,26 @@
+import React from 'react'
+import ReactDOM from 'react-dom/client'
+import './index.css'
+import { WalletProvider } from '@suiet/wallet-kit'
+import '@suiet/wallet-kit/style.css'
+import { QueryClient, QueryClientProvider } from '@tanstack/react-query'
+import { ThemeProvider } from './contexts/ThemeContext'
+import { LangProvider } from './contexts/lang/LangContext'
+import { RouterProvider } from 'react-router-dom'
+import { router } from './router'
+
+const queryClient = new QueryClient()
+
+ReactDOM.createRoot(document.getElementById('root')!).render(
+
+
+
+
+
+
+
+
+
+
+
+)
diff --git a/move202503/DudeGuuud/code/src/pages/Create/index.tsx b/move202503/DudeGuuud/code/src/pages/Create/index.tsx
new file mode 100644
index 00000000..a5a78397
--- /dev/null
+++ b/move202503/DudeGuuud/code/src/pages/Create/index.tsx
@@ -0,0 +1,495 @@
+import React, { useEffect, useState } from 'react';
+import { useSuiStory } from '../../hooks/useSuiStoryWithWalrus';
+import { FaThumbsUp } from 'react-icons/fa';
+import Navbar from '../../components/layout/Navbar';
+import { useLang } from '../../contexts/lang/LangContext';
+import { shortenAddress } from '../../utils/langUtils';
+import { useWallet } from '@suiet/wallet-kit';
+import { supabase } from '../../lib/supabaseClient';
+
+const MAX_BYTES = 2000;
+
+const CreatePage: React.FC = () => {
+ const {
+ getCurrentBook,
+ addParagraph,
+ voteParagraph,
+ archiveBook,
+ startNewBook,
+ getAllParagraphContents,
+ addParagraphAndArchive,
+ } = useSuiStory();
+ const { lang, t } = useLang();
+ const { account } = useWallet();
+ const VOTE_THRESHOLD = 2; // 获胜阈值,1票自动上链
+
+ const [book, setBook] = useState(null);
+ const [content, setContent] = useState('');
+ const [loading, setLoading] = useState(false);
+ const [inputBytes, setInputBytes] = useState(0);
+ const [paragraphContents, setParagraphContents] = useState([]);
+ const [paragraphLoading, setParagraphLoading] = useState(false);
+ const [showStartNewBook, setShowStartNewBook] = useState(false);
+
+ // 提案和投票状态,全部从 Supabase 获取
+ const [proposals, setProposals] = useState([]);
+ const [loadingProposals, setLoadingProposals] = useState(false);
+ const [votedProposalId, setVotedProposalId] = useState(null); // 当前钱包已投的提案id
+
+ // 防止自动写入链上段落死循环
+ const [writing, setWriting] = useState(false);
+
+ // 当前投票类型:没有书时为'title',有进行中的书时为'paragraph'
+ const [voteType, setVoteType] = useState<'title' | 'paragraph'>('paragraph');
+
+ const ADMIN_ADDRESS = '0x1234567890abcdef...'; // TODO: 替换为你的管理员钱包地址
+
+ // 刷新当前书本信息
+ const refresh = async () => {
+ const b = await getCurrentBook();
+ console.log('链上book:', b);
+ console.log('book.paragraphs:', b?.paragraphs, Array.isArray(b?.paragraphs) ? b.paragraphs.length : 'not array');
+ setBook(b);
+ if (!b || b.status === 1) {
+ setVoteType('title');
+ } else {
+ setVoteType('paragraph');
+ }
+ if (b && Array.isArray(b.paragraphs) && b.paragraphs.length > 0) {
+ setParagraphLoading(true);
+ const contents = await getAllParagraphContents(b);
+ console.log('链上paragraphContents:', contents);
+ setParagraphContents(contents);
+ setParagraphLoading(false);
+ } else {
+ setParagraphContents([]);
+ }
+ // 归档后自动检测
+ if (b && b.status === 1) {
+ setShowStartNewBook(true);
+ } else {
+ setShowStartNewBook(false);
+ }
+ };
+
+ useEffect(() => {
+ // 页面加载时只刷新,不自动新建书
+ refresh();
+ // 可加定时刷新或事件监听
+ }, []);
+
+ // 实时统计字节数
+ useEffect(() => {
+ setInputBytes(new TextEncoder().encode(content).length);
+ }, [content]);
+
+ // 段落序号判断逻辑修正:
+ // index为0时,显示为第1本
+ const bookIndex = typeof book?.index === 'number' ? (book.index === 0 ? 1 : book.index) : 1;
+ const currentParagraphIndex = Array.isArray(book?.paragraphs) ? book.paragraphs.length : 0;
+ console.log('currentParagraphIndex:', currentParagraphIndex);
+ // 只有没有书或已归档时才为 true,有进行中的书都为 false
+ const isEditingTitle = !book || book.status === 1;
+ console.log('isEditingTitle:', isEditingTitle);
+ const maxBytes = isEditingTitle ? 100 : 2000;
+
+ // 获取所有提案(按type过滤)
+ const fetchProposals = async () => {
+ setLoadingProposals(true);
+ const { data, error } = await supabase
+ .from('proposals')
+ .select('*')
+ .order('created_at', { ascending: true });
+ console.log('fetchProposals all:', data);
+ if (!error && data) {
+ setProposals(data);
+ }
+ setLoadingProposals(false);
+ };
+
+ // 获取当前钱包已投的提案id
+ const fetchVotedProposal = async (address: string) => {
+ const { data, error } = await supabase
+ .from('votes')
+ .select('proposal_id')
+ .eq('voter', address.toLowerCase());
+ if (!error && data && data.length > 0) {
+ setVotedProposalId(data[0].proposal_id);
+ } else {
+ setVotedProposalId(null);
+ }
+ };
+
+ // 页面加载和钱包变更时拉取数据
+ useEffect(() => {
+ fetchProposals();
+ if (account?.address) {
+ fetchVotedProposal(account.address);
+ }
+ }, [account?.address, voteType]);
+
+ // 判断当前用户是否已对该提案投票
+ const hasVoted = (proposalId: string) => {
+ return votedProposalId === proposalId;
+ };
+
+ // 判断当前用户是否已对其他提案投票
+ const hasVotedOther = (proposalId: string) => {
+ return !!votedProposalId && votedProposalId !== proposalId;
+ };
+
+ // 轮询链上段落是否已添加
+ const waitForParagraphAdded = async (expectedCount: number, timeout = 15000) => {
+ const start = Date.now();
+ while (Date.now() - start < timeout) {
+ const latestBook = await getCurrentBook();
+ if (latestBook && Array.isArray(latestBook.paragraphs) && latestBook.paragraphs.length >= expectedCount) {
+ return true;
+ }
+ await new Promise(res => setTimeout(res, 1500));
+ }
+ return false;
+ };
+
+ // 监听书名投票池,票数达标后自动新建书
+ useEffect(() => {
+ if (voteType === 'title') {
+ const winner = proposals.filter((p) => p.votes >= VOTE_THRESHOLD)[0];
+ if (winner && !loading && !writing) {
+ setWriting(true);
+ (async () => {
+ setLoading(true);
+ try {
+ await startNewBook(winner.content);
+ // 只有链上成功才清空
+ await supabase.from('proposals').delete().not('id', 'is', null);
+ await supabase.from('votes').delete().not('id', 'is', null);
+ await fetchProposals();
+ setVotedProposalId(null);
+ await refresh();
+ } catch (e) {
+ alert('链上签名失败,数据未清空');
+ } finally {
+ setLoading(false);
+ setWriting(false);
+ }
+ })();
+ }
+ }
+ }, [proposals, voteType]);
+
+ // 监听提案得票数,自动采纳
+ useEffect(() => {
+ const winner = proposals
+ .filter((p) => p.votes >= VOTE_THRESHOLD)
+ .sort((a, b) => b.votes - a.votes)[0];
+ if (winner && !loading && !writing) {
+ setWriting(true);
+ (async () => {
+ setLoading(true);
+ try {
+ if (voteType === 'title') {
+ await startNewBook(winner.content);
+ await supabase.from('proposals').delete().not('id', 'is', null);
+ await supabase.from('votes').delete().not('id', 'is', null);
+ await fetchProposals();
+ setVotedProposalId(null);
+ await refresh();
+ } else {
+ const latestBook = await getCurrentBook();
+ if (latestBook && Array.isArray(latestBook.paragraphs)) {
+ const exists = latestBook.paragraphs.some((p: any) => p.content === winner.content);
+ if (!exists) {
+ try {
+ if (latestBook.paragraphs.length + 1 >= 10) {
+ await addParagraphAndArchive(winner.content);
+ } else {
+ await addParagraph(winner.content);
+ }
+ const ok = await waitForParagraphAdded(latestBook.paragraphs.length + 1);
+ if (!ok) {
+ alert('链上数据未及时同步,请手动刷新页面。');
+ }
+ } catch (e) {
+ alert('链上交易失败,请重试。');
+ setLoading(false);
+ setWriting(false);
+ return;
+ }
+ }
+ }
+ // 只有链上成功才清空
+ await supabase.from('proposals').delete().not('id', 'is', null);
+ await supabase.from('votes').delete().not('id', 'is', null);
+ await fetchProposals();
+ setVotedProposalId(null);
+ await refresh();
+ }
+ } catch (e) {
+ alert('链上交易失败,数据未清空');
+ } finally {
+ setLoading(false);
+ setWriting(false);
+ }
+ })();
+ }
+ }, [proposals, voteType]);
+
+ // 提交新提案
+ const handleAddProposal = async () => {
+ const address = account?.address?.toLowerCase() || '';
+ if (!content.trim() || !address) return;
+ const { error } = await supabase.from('proposals').insert({
+ content,
+ author: address,
+ votes: 0,
+ type: 'title', // 强制写死,保证书名投票阶段能查到
+ created_at: new Date().toISOString(),
+ });
+ if (!error) {
+ setContent('');
+ fetchProposals();
+ }
+ };
+
+ // 渲染时log,辅助排查段落数同步问题
+ console.log('渲染时的 book:', book);
+ console.log('渲染时的 book.paragraphs:', book?.paragraphs);
+ const editingText = !book || book.status === 1
+ ? t('editing_title')
+ : t('editing_paragraph', { number: (Array.isArray(book?.paragraphs) ? book.paragraphs.length : 0) + 1 });
+
+ // 投票
+ const handleVote = async (proposalId: string) => {
+ const address = account?.address?.toLowerCase() || '';
+ if (!address) return;
+ const proposal = proposals.find(p => p.id === proposalId);
+ if (!proposal /*|| proposal.author === address*/) return; // 暂时允许投自己
+ if (votedProposalId && votedProposalId !== proposalId) return;
+ if (hasVoted(proposalId)) return;
+ const newVotes = proposal.votes + 1;
+
+ if (newVotes < VOTE_THRESHOLD) {
+ // 票数未满阈值,正常写 supabase
+ await supabase.from('votes').insert({
+ proposal_id: proposalId,
+ voter: address,
+ created_at: new Date().toISOString(),
+ });
+ await supabase.from('proposals').update({ votes: newVotes }).eq('id', proposalId);
+ fetchProposals();
+ setVotedProposalId(proposalId);
+ } else if (voteType === 'paragraph') {
+ setLoading(true);
+ try {
+ const latestBook = await getCurrentBook();
+ if (latestBook && Array.isArray(latestBook.paragraphs)) {
+ const exists = latestBook.paragraphs.some((p: any) => p.content === proposal.content);
+ if (!exists) {
+ try {
+ if (latestBook.paragraphs.length + 1 >= 10) {
+ await addParagraphAndArchive(proposal.content);
+ } else {
+ await addParagraph(proposal.content);
+ }
+ const ok = await waitForParagraphAdded(latestBook.paragraphs.length + 1);
+ if (!ok) {
+ alert('链上数据未及时同步,请手动刷新页面。');
+ }
+ } catch (e) {
+ alert('链上交易失败,请重试。');
+ setLoading(false);
+ setWriting(false);
+ return;
+ }
+ }
+ }
+ // 只有链上成功才清空
+ await supabase.from('proposals').delete().not('id', 'is', null);
+ await supabase.from('votes').delete().not('id', 'is', null);
+ await fetchProposals();
+ setVotedProposalId(null);
+ await refresh();
+ } catch (e) {
+ alert('链上交易失败,数据未清空');
+ } finally {
+ setLoading(false);
+ }
+ } else if (voteType === 'title') {
+ setLoading(true);
+ try {
+ await startNewBook(proposal.content);
+ // 只有链上成功才清空
+ await supabase.from('proposals').delete().not('id', 'is', null);
+ await supabase.from('votes').delete().not('id', 'is', null);
+ await fetchProposals();
+ setVotedProposalId(null);
+ await refresh();
+ } catch (e) {
+ alert('链上签名失败,数据未清空');
+ } finally {
+ setLoading(false);
+ }
+ }
+ };
+
+ // 归档
+ const handleArchive = async () => {
+ setLoading(true);
+ try {
+ await archiveBook();
+ await refresh();
+ // 归档后自动开启新书
+ await startNewBook(t('新书标题'));
+ await refresh();
+ } finally {
+ setLoading(false);
+ }
+ };
+
+ // 开启新书
+ const handleStartNewBook = async () => {
+ setLoading(true);
+ try {
+ await startNewBook(t('新书标题'));
+ await refresh();
+ } finally {
+ setLoading(false);
+ }
+ };
+
+ // 页面渲染逻辑重构
+ if (loading) {
+ return {t('loading')}
;
+ }
+
+ if (voteType === 'title') {
+ // 渲染书名提案与投票UI
+ return (
+
+
+
+
+ {t('create_book_title')}
+
+
{t('proposal_pool')}
+
+ {proposals.length === 0 ? (
+
{t('no_proposal')}
+ ) : (
+ proposals.map((p) => (
+
+
{p.content}
+
{t('author')}:{shortenAddress(p.author)}
+
+ {t('vote_count')}:{p.votes}
+
+
+
+ ))
+ )}
+
+
+
+ {t('editing_title')}
+
+
+
100 ? 'text-red-500' : 'text-gray-500'}`}>{t('byte_count', { current: inputBytes, max: 100 })}
+
+
+ );
+ }
+
+ // 正文投票模式
+ if (voteType === 'paragraph' && book && Array.isArray(book.paragraphs)) {
+ return (
+
+
+
+
+ {book.title ? `${book.title}(${t('book_index', { index: bookIndex })})` : t('create_book_title')}
+
+
+ {t('create_archive_threshold')}:{book.archive_votes_threshold}
+
+
{t('proposal_pool')}
+
+ {proposals.length === 0 ? (
+
{t('no_proposal')}
+ ) : (
+ proposals.map((p) => (
+
+
{p.content}
+
{t('author')}:{shortenAddress(p.author)}
+
+ {t('vote_count')}:{p.votes}
+
+
+
+ ))
+ )}
+
+
+
maxBytes ? 'text-red-500' : 'text-gray-500'}`}>{t('byte_count', { current: inputBytes, max: maxBytes })}
+ {/* 归档后提示开启新书 */}
+ {showStartNewBook && (
+
+
+
+ )}
+
+
+ );
+ }
+
+ // 兜底
+ return {t('loading')}
;
+};
+
+export default CreatePage;
\ No newline at end of file
diff --git a/move202503/DudeGuuud/code/src/pages/Home/index.tsx b/move202503/DudeGuuud/code/src/pages/Home/index.tsx
new file mode 100644
index 00000000..5f20a1f3
--- /dev/null
+++ b/move202503/DudeGuuud/code/src/pages/Home/index.tsx
@@ -0,0 +1,434 @@
+import React, { useState, useEffect } from 'react';
+import { Link } from 'react-router-dom';
+import { motion, AnimatePresence } from 'framer-motion';
+import { FadeIn, SlideUp } from '../../components/animations';
+import Navbar from '../../components/layout/Navbar';
+import { useLang } from '../../contexts/lang/LangContext';
+import { replaceParams } from '../../utils/langUtils';
+import { isMobileDevice } from '../../utils/deviceUtils';
+import { useSuiStory } from '../../hooks/useSuiStoryWithWalrus';
+import { shortenAddress } from '../../utils/langUtils';
+import { decompressFromBase64 } from 'lz-string';
+
+const MAX_BYTES = 2000;
+
+// VotingBook 组件:展示正在投票的书(链上集成预留接口)
+const VotingBook: React.FC = () => {
+ const { t } = useLang();
+ // TODO: 替换为链上查询逻辑
+ // 示例数据
+ const [book, setBook] = useState({
+ title: t('demo_book_title'),
+ author: t('demo_book_author'),
+ paragraph_count: 5,
+ total_votes: 8,
+ status: 0,
+ });
+ // 可根据链上 currentBookId 判断是否有正在投票的书
+ if (!book) return null;
+ return (
+
+
{t('voting_book_title', { title: book.title })}
+
{t('voting_book_author', { author: book.author })}
+
{t('voting_book_paragraph_count', { count: book.paragraph_count })}
+
{t('voting_book_total_votes', { votes: book.total_votes })}
+
{t('voting_book_status', { status: book.status === 0 ? t('create_status_ongoing') : t('create_status_archived') })}
+
+ );
+};
+
+const Home: React.FC = () => {
+ const { t } = useLang();
+ const [pageIndex, setPageIndex] = useState(0);
+ const [flipping, setFlipping] = useState(false);
+ const [direction, setDirection] = useState(0); // -1: 向左翻, 1: 向右翻, 0: 不翻
+ const [isMobile, setIsMobile] = useState(false);
+ const {
+ startNewBook,
+ addParagraph,
+ getAllBooks,
+ getAllParagraphs,
+ calcContentHash,
+ } = useSuiStory();
+
+ const [books, setBooks] = useState([]);
+ const [currentBook, setCurrentBook] = useState(null);
+ const [paragraphs, setParagraphs] = useState([]);
+ const [input, setInput] = useState('');
+ const [inputBytes, setInputBytes] = useState(0);
+ const [loading, setLoading] = useState(false);
+
+ // 分页参数
+ const paragraphsPerPage = 2;
+ const maxParagraphs = 10;
+ const totalPages = Math.ceil(paragraphs.length / paragraphsPerPage) || 1;
+
+ // 检测设备类型
+ useEffect(() => {
+ const checkDevice = () => {
+ setIsMobile(isMobileDevice());
+ };
+ checkDevice();
+ window.addEventListener('resize', checkDevice);
+ return () => {
+ window.removeEventListener('resize', checkDevice);
+ };
+ }, []);
+
+ // 获取所有书,找到进行中的书
+ useEffect(() => {
+ async function fetchBooks() {
+ const allBooks = await getAllBooks();
+ setBooks(allBooks);
+ const ongoing = allBooks.find((b: any) => b.status === 0);
+ setCurrentBook(ongoing || null);
+ if (ongoing) {
+ const paras = await getAllParagraphs(ongoing);
+ setParagraphs(paras);
+ } else {
+ setParagraphs([]);
+ }
+ }
+ fetchBooks();
+ }, []);
+
+ // 监听input变化,统计字节数
+ useEffect(() => {
+ setInputBytes(new TextEncoder().encode(input).length);
+ }, [input]);
+
+ // 分页逻辑
+ const getParagraphsForPage = (pageIndex: number) => {
+ const startIdx = pageIndex * paragraphsPerPage;
+ const endIdx = Math.min(startIdx + paragraphsPerPage, paragraphs.length);
+ return paragraphs.slice(startIdx, endIdx);
+ };
+ const isLastPage = (pageIndex: number) => {
+ return pageIndex === totalPages - 1;
+ };
+
+ const goToNextPage = () => {
+ if (pageIndex < totalPages - 1 && !flipping) {
+ setDirection(1);
+ setFlipping(true);
+ setTimeout(() => {
+ setPageIndex(pageIndex + 1);
+ setTimeout(() => {
+ setFlipping(false);
+ setDirection(0);
+ }, 50);
+ }, 250);
+ }
+ };
+ const goToPrevPage = () => {
+ if (pageIndex > 0 && !flipping) {
+ setDirection(-1);
+ setFlipping(true);
+ setTimeout(() => {
+ setPageIndex(pageIndex - 1);
+ setTimeout(() => {
+ setFlipping(false);
+ setDirection(0);
+ }, 50);
+ }, 250);
+ }
+ };
+
+ // 输入框onChange处理,禁止超出MAX_BYTES
+ const handleInputChange = (e: React.ChangeEvent) => {
+ const value = e.target.value;
+ const bytes = new TextEncoder().encode(value).length;
+ if (bytes <= MAX_BYTES) {
+ setInput(value);
+ } else {
+ // 超出字节数时不更新input
+ }
+ };
+
+ // 判断当前是提交书名还是段落
+ const isEditingTitle = !currentBook || currentBook.status === 1;
+
+ // 提交新书 or 段落
+ const handleSubmit = async () => {
+ setLoading(true);
+ try {
+ if (!currentBook) {
+ await startNewBook(input);
+ } else {
+ await addParagraph(input);
+ }
+ setInput('');
+ // 刷新
+ const allBooks = await getAllBooks();
+ setBooks(allBooks);
+ const ongoing = allBooks.find((b: any) => b.status === 0);
+ setCurrentBook(ongoing || null);
+ if (ongoing) {
+ const paras = await getAllParagraphs(ongoing);
+ setParagraphs(paras);
+ } else {
+ setParagraphs([]);
+ }
+ } catch (e) {
+ alert('提交失败: ' + (e as any).message);
+ }
+ setLoading(false);
+ };
+
+ // 页面变体 - 修正翻页方向
+ const pageVariants = {
+ enter: (direction: number) => ({
+ rotateY: direction > 0 ? -90 : 90,
+ opacity: 0,
+ zIndex: 10,
+ boxShadow: "0 0 0 rgba(0, 0, 0, 0)"
+ }),
+ center: {
+ rotateY: 0,
+ opacity: 1,
+ zIndex: 20,
+ boxShadow: "0 10px 30px rgba(0, 0, 0, 0.1)"
+ },
+ exit: (direction: number) => ({
+ rotateY: direction < 0 ? -90 : 90,
+ opacity: 0,
+ zIndex: 10,
+ boxShadow: "0 0 0 rgba(0, 0, 0, 0)"
+ })
+ };
+ const pageTransition = {
+ type: "tween",
+ duration: 0.5,
+ ease: "easeInOut"
+ };
+
+ // 当前页段落
+ const currentPageParagraphs = getParagraphsForPage(pageIndex);
+ const showSubmissionForm = isLastPage(pageIndex) && paragraphs.length < maxParagraphs;
+
+ // 书本信息(链上数据)
+ const votingBook = currentBook || {
+ title: t('暂无书本'),
+ author: '',
+ paragraph_count: 0,
+ total_votes: 0,
+ status: 0,
+ maxParagraphs,
+ collaborators: 0,
+ };
+
+ // 由段落去重 author 得到作者数
+ const authorSet = new Set((paragraphs || []).map((p: any) => p.author));
+ const collaborators = authorSet.size;
+ // 总投票数
+ const totalVotes = (paragraphs || []).reduce((sum: number, p: any) => sum + (p.votes || 0), 0);
+ // 作者地址缩略
+ const authorShort = votingBook.author ? shortenAddress(votingBook.author) : '';
+
+ // 在Home组件内添加调试输出
+ useEffect(() => {
+ console.log('paragraphs:', paragraphs, 'totalPages:', totalPages, 'maxParagraphs:', maxParagraphs);
+ }, [paragraphs, totalPages, maxParagraphs]);
+
+ return (
+
+
+
+
+
+ {t('app_name')}
+
+
+ {t('app_description')}
+
+
+ {/* 书本组件(模板样式) */}
+
+
+ {/* 书本封面 - 左侧或顶部(移动设备) */}
+
+
+
{t('book_title')}
+
{votingBook.title}
+
+ {t('book_authors', { count: collaborators })}
+
+
+ {t('book_progress', { current: Array.isArray(paragraphs) ? paragraphs.length : 0, max: maxParagraphs })}
+
+
+ {t('create_author')}:{authorShort}
+
+
+ {t('create_total_votes')}:{totalVotes}
+
+
+ {t('create_status')}:{votingBook.status === 0 ? t('create_status_ongoing') : t('create_status_archived')}
+
+
+
+
+ {t('book_page', { current: pageIndex + 1, total: totalPages })}
+
+
+
+ {/* 书页内容 - 右侧或底部(移动设备) */}
+
+
+
+
+ {/* 段落内容(链上数据) */}
+ {currentPageParagraphs.map((paragraph, idx) => (
+
+
+ {paragraph.content ? decompressFromBase64(paragraph.content) : paragraph.walrus_id}
+
+
+
—— {paragraph.author}
+
+
+ {paragraph.votes}
+
+
+
+ ))}
+ {/* 如果是最后一页且段落未满10段,显示提交表单 */}
+ {showSubmissionForm && (
+
+
+ {isEditingTitle ? t('form_input_title') : t('form_input_paragraph')}
+
+
+
+
+ {t('byte_count', { current: inputBytes, max: MAX_BYTES })}
+
+
+
+
+ )}
+
+
+
+
+
+
+
+ {/* 翻页时的阴影效果 */}
+ {flipping && (
+
0
+ ? 'bg-gradient-to-l from-black/10 to-transparent'
+ : 'bg-gradient-to-r from-black/10 to-transparent'
+ }`}
+ />
+ )}
+
+
+ {/* 书本阴影 */}
+
+
+ {/* 操作卡片 */}
+
+
+
+
+
+ ✍️
+
+
+ {t('create_card_title')}
+
+
+
+ {t('create_card_desc')}
+
+
+
+
+
+
+
+ 📚
+
+
+ {t('browse_card_title')}
+
+
+
+ {t('browse_card_desc')}
+
+
+
+
+
+
+ );
+};
+
+export default Home;
\ No newline at end of file
diff --git a/move202503/DudeGuuud/code/src/pages/Profile/index.tsx b/move202503/DudeGuuud/code/src/pages/Profile/index.tsx
new file mode 100644
index 00000000..06c56db6
--- /dev/null
+++ b/move202503/DudeGuuud/code/src/pages/Profile/index.tsx
@@ -0,0 +1,20 @@
+import React from 'react';
+import { FadeIn } from '../../components/animations';
+import Navbar from '../../components/layout/Navbar';
+
+const Profile: React.FC = () => {
+ return (
+
+ );
+};
+
+export default Profile;
\ No newline at end of file
diff --git a/move202503/DudeGuuud/code/src/pages/Story/Detail.tsx b/move202503/DudeGuuud/code/src/pages/Story/Detail.tsx
new file mode 100644
index 00000000..8bf45037
--- /dev/null
+++ b/move202503/DudeGuuud/code/src/pages/Story/Detail.tsx
@@ -0,0 +1,66 @@
+import React, { useEffect, useState } from 'react';
+import { useParams, useNavigate } from 'react-router-dom';
+import { useSuiStory } from '../../hooks/useSuiStoryWithWalrus';
+import { useLang } from '../../contexts/lang/LangContext';
+import Navbar from '../../components/layout/Navbar';
+
+const BookDetail: React.FC = () => {
+ const { getBookByIndex, getAllParagraphContents } = useSuiStory();
+ const { t } = useLang();
+ const { index } = useParams<{ index: string }>();
+ const [book, setBook] = useState
(null);
+ const [paragraphs, setParagraphs] = useState([]);
+ const [loading, setLoading] = useState(true);
+ const navigate = useNavigate();
+
+ useEffect(() => {
+ async function fetchBook() {
+ setLoading(true);
+ if (!index) return;
+ const b = await getBookByIndex(Number(index));
+ setBook(b);
+ if (b) {
+ const contents = await getAllParagraphContents(b);
+ setParagraphs(contents);
+ } else {
+ setParagraphs([]);
+ }
+ setLoading(false);
+ }
+ fetchBook();
+ }, [index]);
+
+ if (loading) return {t('加载中...') || '加载中...'}
;
+ if (!book) return {t('未找到该书') || '未找到该书'}
;
+
+ return (
+
+
+
+
+
{book.title}
+
+ {t('归档状态') || '归档状态'}: {book.status === 1 ? t('已归档') : t('进行中')}
+
+
+ {t('段落数') || '段落数'}: {book.paragraphs?.length || 0}
+
+
+ {paragraphs.map((para, idx) => (
+
+
{t('第{number}段', { number: idx + 1 }) || `第${idx + 1}段`}
+
{para}
+
+ ))}
+
+
+
+ );
+};
+
+export default BookDetail;
diff --git a/move202503/DudeGuuud/code/src/pages/Story/Latest.tsx b/move202503/DudeGuuud/code/src/pages/Story/Latest.tsx
new file mode 100644
index 00000000..cc8faed1
--- /dev/null
+++ b/move202503/DudeGuuud/code/src/pages/Story/Latest.tsx
@@ -0,0 +1,100 @@
+import React, { useEffect, useState } from 'react';
+import Navbar from '../../components/layout/Navbar';
+import { useSuiStory } from '../../hooks/useSuiStoryWithWalrus';
+import { useLang } from '../../contexts/lang/LangContext';
+import { shortenAddress } from '../../utils/langUtils';
+import { motion, AnimatePresence } from 'framer-motion';
+
+const LatestStory: React.FC = () => {
+ const { getAllBooks, getAllParagraphContents } = useSuiStory();
+ const { t } = useLang();
+ const [archivedBooks, setArchivedBooks] = useState([]);
+ const [loading, setLoading] = useState(true);
+ const [selectedBook, setSelectedBook] = useState(null);
+ const [selectedParagraphs, setSelectedParagraphs] = useState([]);
+
+ useEffect(() => {
+ async function fetchLatest() {
+ setLoading(true);
+ const books = await getAllBooks();
+ const archived = books.filter((b: any) => b.status === 1);
+ setArchivedBooks(archived);
+ setLoading(false);
+ }
+ fetchLatest();
+ }, []);
+
+ if (loading) {
+ return {t('加载中...') || '加载中...'}
;
+ }
+
+ // 封面列表
+ if (!selectedBook) {
+ return (
+
+
+
+ {archivedBooks.length === 0 && (
+
{t('暂无归档书')}
+ )}
+
+ {archivedBooks.map((book, idx) => (
+
{
+ setSelectedBook(book);
+ setLoading(true);
+ const paras = await getAllParagraphContents(book);
+ setSelectedParagraphs(paras);
+ setLoading(false);
+ }}
+ style={{ minHeight: 220 }}
+ >
+ {/* 封面区 */}
+
+
+
{book.title}
+
{t('作者')}:{shortenAddress(book.author)}
+
{t('段落数')}:{book.paragraphs?.length || 0}
+
{t('总投票')}:{book.total_votes ?? 0}
+
+ {/* 内容区 */}
+
+
{t('click_to_read')}
+
{t('已归档的书')}
+
+
+ ))}
+
+
+
+ );
+ }
+ // 书详情页
+ return (
+
+
+
+
+
+
+
{selectedBook.title}
+
+
+
+ {selectedParagraphs.length === 0 &&
{t('暂无段落')}
}
+ {selectedParagraphs.map((para, idx) => (
+
+
{t('第{number}段', { number: idx + 1 })}
+
{para}
+
+ ))}
+
+
+
+
+ );
+};
+
+export default LatestStory;
\ No newline at end of file
diff --git a/move202503/DudeGuuud/code/src/pages/Story/index.tsx b/move202503/DudeGuuud/code/src/pages/Story/index.tsx
new file mode 100644
index 00000000..66ee56f6
--- /dev/null
+++ b/move202503/DudeGuuud/code/src/pages/Story/index.tsx
@@ -0,0 +1,187 @@
+import React, { useEffect, useState } from 'react';
+import { FadeIn } from '../../components/animations';
+import Navbar from '../../components/layout/Navbar';
+import { useSuiStory } from '../../hooks/useSuiStoryWithWalrus';
+import { useLang } from '../../contexts/lang/LangContext';
+import { useNavigate } from 'react-router-dom';
+import { shortenAddress } from '../../utils/langUtils';
+
+// ArchivedBooks 组件:展示所有已归档的书(链上集成预留接口)
+const ArchivedBooks: React.FC = () => {
+ // TODO: 替换为链上查询逻辑
+ // 示例数据
+ const [books] = React.useState([
+ { title: '第一本书', author: 'Alice', paragraph_count: 10, total_votes: 15, index: 1 },
+ { title: '第二本书', author: 'Bob', paragraph_count: 9, total_votes: 12, index: 2 },
+ ]);
+ if (!books.length) return 暂无归档书
;
+ return (
+
+
已归档的书
+ {books.map((book, idx) => (
+
+
{book.title}(第{book.index}本书)
+
作者: {book.author}
+
段落数: {book.paragraph_count}
+
总投票: {book.total_votes}
+
+ ))}
+
+ );
+};
+
+const BrowseStories: React.FC = () => {
+ const { getAllBooks } = useSuiStory();
+ const { t } = useLang();
+ const [books, setBooks] = useState([]);
+ const navigate = useNavigate();
+ const [loading, setLoading] = useState(true);
+
+ useEffect(() => {
+ async function fetch() {
+ setLoading(true);
+ const allBooks = await getAllBooks();
+ setBooks(allBooks);
+ setLoading(false);
+ }
+ fetch();
+ }, []);
+
+ if (loading) return {t('加载中...') || '加载中...'}
;
+ if (!books.length) return {t('暂无书本') || '暂无书本'}
;
+
+ const archivedBooks = books.filter((b: any) => b.status === 1);
+ const activeBooks = books.filter((b: any) => b.status === 0);
+
+ return (
+
+
{t('进行中的书') || '进行中的书'}
+
+ {activeBooks.length ? activeBooks.map((book, idx) => (
+
navigate(`/story/${book.index}`)}
+ >
+
{book.title}({t('进行中') || '进行中'})
+
{t('段落数') || '段落数'}: {book.paragraphs?.length || 0}
+
{t('总投票') || '总投票'}: {book.total_votes ?? 0}
+
+ )) :
{t('暂无进行中的书') || '暂无进行中的书'}
}
+
+
{t('已归档的书') || '已归档的书'}
+
+ {archivedBooks.length ? archivedBooks.map((book, idx) => (
+
navigate(`/story/${book.index}`)}
+ >
+
{book.title}({t('已归档') || '已归档'})
+
{t('段落数') || '段落数'}: {book.paragraphs?.length || 0}
+
{t('总投票') || '总投票'}: {book.total_votes ?? 0}
+
+ )) :
{t('暂无归档书') || '暂无归档书'}
}
+
+
+ );
+};
+
+const Story: React.FC = () => {
+ const { getAllBooks, getAllParagraphContents } = useSuiStory();
+ const { t } = useLang();
+ const [books, setBooks] = useState([]);
+ const [loading, setLoading] = useState(true);
+ const [selectedBook, setSelectedBook] = useState(null);
+ const [paragraphContents, setParagraphContents] = useState([]);
+ const [paragraphLoading, setParagraphLoading] = useState(false);
+
+ useEffect(() => {
+ async function fetch() {
+ setLoading(true);
+ const allBooks = await getAllBooks();
+ setBooks(allBooks);
+ setLoading(false);
+ }
+ fetch();
+ }, []);
+
+ // 选中某本书,拉取段落内容
+ const handleSelectBook = async (book: any) => {
+ setSelectedBook(book);
+ setParagraphLoading(true);
+ const contents = await getAllParagraphContents(book);
+ setParagraphContents(contents);
+ setParagraphLoading(false);
+ };
+
+ // 关闭全文弹窗
+ const handleCloseDetail = () => {
+ setSelectedBook(null);
+ setParagraphContents([]);
+ };
+
+ if (loading) return {t('加载中...')}
;
+ if (!books.length) return {t('暂无书本')}
;
+
+ const archivedBooks = books.filter((b: any) => b.status === 1);
+ const activeBooks = books.filter((b: any) => b.status === 0);
+
+ return (
+
+
+
+
+
+ {t('已归档的书')}
+
+
+
+ {archivedBooks.length ? archivedBooks.map((book, idx) => (
+
handleSelectBook(book)}
+ >
+
{book.title}({t('第{index}本', { index: book.index })})
+
{t('作者')}:{shortenAddress(book.author)}
+
{t('段落数')}:{book.paragraphs?.length || 0}
+
{t('总投票')}:{book.total_votes ?? 0}
+
+ )) :
{t('暂无归档书')}
}
+
+ {/* 归档书全文弹窗 */}
+ {selectedBook && (
+
+
+
+
{selectedBook.title}({t('第{index}本', { index: selectedBook.index })})
+
{t('作者')}:{shortenAddress(selectedBook.author)}
+
{t('段落数')}:{selectedBook.paragraphs?.length || 0}
+
+ {paragraphLoading ? (
+
{t('加载中...')}
+ ) : (
+ paragraphContents.map((para, idx) => (
+
+
{idx === 0 ? t('标题') : t('第{number}段', { number: idx })}
+
{para}
+
+ ))
+ )}
+
+
+
+ )}
+
+
+ );
+};
+
+export default Story;
\ No newline at end of file
diff --git a/move202503/DudeGuuud/code/src/router/index.tsx b/move202503/DudeGuuud/code/src/router/index.tsx
new file mode 100644
index 00000000..bac48170
--- /dev/null
+++ b/move202503/DudeGuuud/code/src/router/index.tsx
@@ -0,0 +1,38 @@
+import { createBrowserRouter } from 'react-router-dom';
+import { PageTransition } from '../components/animations';
+import Home from '../pages/Home';
+import Story from '../pages/Story';
+import Create from '../pages/Create';
+import Profile from '../pages/Profile';
+import LatestStory from '../pages/Story/Latest';
+
+const withTransition = (Component: React.ComponentType) => {
+ return (
+
+
+
+ );
+};
+
+export const router = createBrowserRouter([
+ {
+ path: '/',
+ element: withTransition(Home),
+ },
+ {
+ path: '/story/:id',
+ element: withTransition(Story),
+ },
+ {
+ path: '/create',
+ element: withTransition(Create),
+ },
+ {
+ path: '/profile',
+ element: withTransition(Profile),
+ },
+ {
+ path: '/story/latest',
+ element: withTransition(LatestStory),
+ },
+]);
\ No newline at end of file
diff --git a/move202503/DudeGuuud/code/src/translations/index.ts b/move202503/DudeGuuud/code/src/translations/index.ts
new file mode 100644
index 00000000..2f790860
--- /dev/null
+++ b/move202503/DudeGuuud/code/src/translations/index.ts
@@ -0,0 +1,241 @@
+// 支持的语言
+export const SupportedLanguages = {
+ en: 'English',
+ zh: '中文'
+};
+
+// 定义翻译类型
+type TranslationType = {
+ [key: string]: string;
+};
+
+// 定义翻译
+export const translations: { [key: string]: TranslationType } = {
+ en: {
+ // 通用
+ app_name: 'NarrFlow',
+ app_description: 'Decentralized Collaborative Creation Platform',
+
+ // 导航
+ nav_home: 'Home',
+ nav_create: 'Create Story',
+ nav_browse: 'Browse Stories',
+ nav_profile: 'Profile',
+
+ // 书本组件
+ book_title: 'Current Collaborative Story',
+ book_authors: 'Created by %count% authors',
+ book_progress: 'Current progress: {current}/{max} paragraphs',
+ book_page: 'Page {current} / {total}',
+
+ // 按钮
+ btn_prev_page: '← Previous',
+ btn_next_page: 'Next →',
+ btn_submit: 'Submit',
+ btn_connect_wallet: 'CONNECT WALLET',
+
+ // 创作表单
+ form_title: 'Add your creation',
+ form_placeholder: 'Type your paragraph here (max 200 characters)...',
+ form_char_count: '%current%/200 characters',
+ form_success: 'Success! Your paragraph will be added to the story after review.',
+ form_error_length: 'Paragraph cannot exceed 200 characters!',
+
+ // 创建故事卡片
+ create_card_title: 'Create Story',
+ create_card_desc: 'Start your creative journey and collaborate with other authors on amazing stories',
+
+ // 浏览故事卡片
+ browse_card_title: 'Browse Stories',
+ browse_card_desc: 'Explore creations by other authors and vote to decide story directions',
+
+ create_book_title: 'Collaborative Book Title',
+ create_book_index: 'Book #{index}',
+ create_status: 'Status',
+ create_status_ongoing: 'Ongoing',
+ create_status_archived: 'Archived',
+ create_archive_threshold: 'Archive Vote Threshold',
+ create_total_votes: 'Total Votes',
+ create_paragraph_list: 'Paragraph List',
+ create_add_paragraph: 'Add New Paragraph',
+ create_paragraph_number: 'Paragraph #{number}',
+ create_content: 'Content',
+ create_author: 'Author',
+ create_votes: 'Votes',
+ create_submit: 'Submit Paragraph',
+ create_archiving: 'Archive Book',
+ create_edit_title: 'Editing Book Title',
+ create_edit_paragraph: 'Editing Paragraph',
+ create_title_placeholder: 'Enter book title (max 100 bytes)',
+ create_paragraph_placeholder: 'Enter paragraph (max 2000 bytes)',
+ create_title_byte_count: 'Input: {current}/100 bytes',
+ create_paragraph_byte_count: 'Input: {current}/2000 bytes',
+ create_title_too_long: 'Book title cannot exceed 100 bytes!',
+ create_paragraph_too_long: 'Paragraph cannot exceed 2000 bytes!',
+ editing_title: 'Currently editing the title',
+ editing_paragraph: 'Currently editing paragraph #{number}',
+ title_placeholder: 'Enter book title (max 100 bytes)',
+ proposal_placeholder: 'Enter your proposal (max 2000 bytes)',
+ submit_proposal: 'Submit Proposal',
+ byte_count: '{current}/{max} bytes',
+ start_new_book: 'Start New Book',
+ close: 'Close',
+ title: 'Title',
+ paragraph: 'Paragraph',
+ book_index: 'Book #{index}',
+ no_proposal: 'No proposal yet',
+ no_book: 'No book yet',
+ no_paragraph: 'No paragraph yet',
+ loading: 'Loading...',
+ editing: 'Editing',
+ proposal: 'Proposal',
+ vote: 'Vote',
+ voted: 'Voted',
+ already_voted: 'Already voted',
+ cannot_vote_self: 'Cannot vote for yourself',
+ voted_other: 'Already voted for another proposal',
+ archive: 'Archive',
+ archiving: 'Archiving',
+ archived: 'Archived',
+ ongoing: 'Ongoing',
+ paragraph_count: 'Paragraphs',
+ total_votes: 'Total Votes',
+ author: 'Author',
+ content: 'Content',
+ proposal_pool: 'Proposal Pool',
+ vote_count: 'Votes',
+ click_to_read: 'Click the cover to read this book',
+ demo_book_title: 'Blockchain Collaborative Novel',
+ demo_book_author: 'Sui User',
+ voting_book_title: 'Voting Book: {title}',
+ voting_book_author: 'Author: {author}',
+ voting_book_paragraph_count: 'Paragraphs: {count}',
+ voting_book_total_votes: 'Total Votes: {votes}',
+ voting_book_status: 'Status: {status}',
+ form_input_title: 'Please enter the new book title',
+ form_input_paragraph: 'Please enter the new paragraph',
+ form_input_title_placeholder: 'Enter new book title...',
+ form_input_paragraph_placeholder: 'Enter new paragraph...',
+ form_submitting: 'Submitting...',
+ form_submit_title: 'Submit Title',
+ form_submit_paragraph: 'Submit Paragraph',
+ 已归档的书: 'Archived Book',
+ 暂无归档书: 'No archived books yet',
+ 暂无段落: 'No paragraphs yet',
+ 返回: 'Back'
+ },
+
+ zh: {
+ // 通用
+ app_name: 'NarrFlow',
+ app_description: '去中心化协作创作平台',
+
+ // 导航
+ nav_home: '首页',
+ nav_create: '创建故事',
+ nav_browse: '浏览故事',
+ nav_profile: '个人资料',
+ nav_connect_wallet: '连接钱包',
+ // 书本组件
+ book_title: '当前协作故事',
+ book_authors: '由 %count% 位作者共同创作',
+ book_progress: '当前进度: {current}/{max} 段',
+ book_page: '第 {current} 页 / 共 {total} 页',
+
+ // 按钮
+ btn_prev_page: '← 上一页',
+ btn_next_page: '下一页 →',
+ btn_submit: '提交',
+ btn_connect_wallet: '连接钱包',
+
+ // 创作表单
+ form_title: '添加你的创意',
+ form_placeholder: '在这里输入你的段落(不超过200字)...',
+ form_char_count: '%current%/200字',
+ form_success: '提交成功!您的段落将在审核后添加到故事中。',
+ form_error_length: '段落内容不能超过200字!',
+
+ // 创建故事卡片
+ create_card_title: '创建故事',
+ create_card_desc: '开启你的创作之旅,与其他作者共同创作精彩故事',
+
+ // 浏览故事卡片
+ browse_card_title: '浏览故事',
+ browse_card_desc: '探索其他作者的创作,参与投票决定故事走向',
+
+ create_book_title: '协作书名',
+ create_book_index: '第{index}本',
+ create_status: '状态',
+ create_status_ongoing: '进行中',
+ create_status_archived: '已归档',
+ create_archive_threshold: '归档票数阈值',
+ create_total_votes: '当前总票数',
+ create_paragraph_list: '段落列表',
+ create_add_paragraph: '添加新段落',
+ create_paragraph_number: '第{number}段',
+ create_content: '内容',
+ create_author: '作者',
+ create_votes: '投票数',
+ create_submit: '提交段落',
+ create_archiving: '归档本书',
+ create_edit_title: '正在编辑书名',
+ create_edit_paragraph: '正在编辑段落',
+ create_title_placeholder: '请输入书名(不超过100字节)',
+ create_paragraph_placeholder: '请输入段落内容(不超过2000字节)',
+ create_title_byte_count: '已输入:{current}/100 字节',
+ create_paragraph_byte_count: '已输入:{current}/2000 字节',
+ create_title_too_long: '书名不能超过100字节!',
+ create_paragraph_too_long: '段落内容不能超过2000字节!',
+ editing_title: '当前编辑的是标题',
+ editing_paragraph: '当前编辑第{number}段',
+ title_placeholder: '请输入书名(不超过100字节)',
+ proposal_placeholder: '请输入你的提案(不超过2000字节)',
+ submit_proposal: '提交提案',
+ byte_count: '{current}/{max} 字节',
+ start_new_book: '开启新书',
+ close: '关闭',
+ title: '标题',
+ paragraph: '段落',
+ book_index: '第{index}本',
+ no_proposal: '暂无提案',
+ no_book: '暂无书本',
+ no_paragraph: '暂无段落',
+ loading: '加载中...',
+ editing: '编辑',
+ proposal: '提案',
+ vote: '投票',
+ voted: '已投票',
+ already_voted: '已投票',
+ cannot_vote_self: '不能投自己',
+ voted_other: '已投其他提案',
+ archive: '归档',
+ archiving: '归档中',
+ archived: '已归档',
+ ongoing: '进行中',
+ paragraph_count: '段落数',
+ total_votes: '总投票',
+ author: '作者',
+ content: '内容',
+ proposal_pool: '候选提案池',
+ vote_count: '投票数',
+ click_to_read: '点击封面翻阅此书',
+ demo_book_title: '区块链协作小说',
+ demo_book_author: 'Sui 用户',
+ voting_book_title: '正在投票的书:{title}',
+ voting_book_author: '作者:{author}',
+ voting_book_paragraph_count: '段落数:{count}',
+ voting_book_total_votes: '总投票:{votes}',
+ voting_book_status: '状态:{status}',
+ form_input_title: '请输入新书标题',
+ form_input_paragraph: '请输入新段落内容',
+ form_input_title_placeholder: '输入新书标题...',
+ form_input_paragraph_placeholder: '输入新段落内容...',
+ form_submitting: '提交中...',
+ form_submit_title: '提交书名',
+ form_submit_paragraph: '提交段落',
+ 已归档的书: '已归档的书',
+ 暂无归档书: '暂无归档书',
+ 暂无段落: '暂无段落',
+ 返回: '返回'
+ }
+};
\ No newline at end of file
diff --git a/move202503/DudeGuuud/code/src/utils/deviceUtils.ts b/move202503/DudeGuuud/code/src/utils/deviceUtils.ts
new file mode 100644
index 00000000..dab9965f
--- /dev/null
+++ b/move202503/DudeGuuud/code/src/utils/deviceUtils.ts
@@ -0,0 +1,59 @@
+/**
+ * 设备工具函数
+ */
+
+/**
+ * 检测当前设备是否为移动设备
+ * @returns {boolean} 是否为移动设备
+ */
+export const isMobileDevice = (): boolean => {
+ if (typeof navigator === 'undefined') return false;
+
+ const userAgent = navigator.userAgent || navigator.vendor || (window as any).opera || '';
+
+ // 检测常见的移动设备关键词
+ const mobileRegex = /android|webos|iphone|ipad|ipod|blackberry|iemobile|opera mini|mobile|tablet/i;
+
+ return mobileRegex.test(userAgent);
+};
+
+/**
+ * 检测当前设备类型
+ * @returns {string} 设备类型: 'mobile', 'tablet', 或 'desktop'
+ */
+export const getDeviceType = (): 'mobile' | 'tablet' | 'desktop' => {
+ if (typeof navigator === 'undefined') return 'desktop';
+
+ const userAgent = navigator.userAgent || navigator.vendor || (window as any).opera || '';
+
+ // 平板设备的正则表达式
+ const tabletRegex = /(ipad|tablet|(android(?!.*mobile)))/i;
+
+ // 移动设备的正则表达式 (排除平板)
+ const mobileRegex = /android|webos|iphone|ipod|blackberry|iemobile|opera mini/i;
+
+ if (tabletRegex.test(userAgent)) {
+ return 'tablet';
+ } else if (mobileRegex.test(userAgent)) {
+ return 'mobile';
+ }
+
+ return 'desktop';
+};
+
+/**
+ * 根据设备类型返回不同的样式类名
+ * @param {Object} classNames 不同设备对应的类名
+ * @param {string} classNames.mobile 移动设备类名
+ * @param {string} classNames.tablet 平板设备类名
+ * @param {string} classNames.desktop 桌面设备类名
+ * @returns {string} 对应当前设备的类名
+ */
+export const getResponsiveClassName = (classNames: {
+ mobile?: string;
+ tablet?: string;
+ desktop?: string;
+}): string => {
+ const deviceType = getDeviceType();
+ return classNames[deviceType] || '';
+};
\ No newline at end of file
diff --git a/move202503/DudeGuuud/code/src/utils/langUtils.ts b/move202503/DudeGuuud/code/src/utils/langUtils.ts
new file mode 100644
index 00000000..1472a110
--- /dev/null
+++ b/move202503/DudeGuuud/code/src/utils/langUtils.ts
@@ -0,0 +1,48 @@
+/**
+ * 语言工具函数
+ */
+
+/**
+ * 替换翻译文本中的参数
+ * 例如: "当前页面: {current}/{total}" 会被替换为 "当前页面: 1/5"
+ *
+ * @param text 原始文本,包含 {paramName} 形式的参数
+ * @param params 参数对象,键为参数名,值为替换值
+ * @returns 替换后的文本
+ */
+export const replaceParams = (text: string, params: Record): string => {
+ if (!text) return '';
+ if (!params || Object.keys(params).length === 0) return text;
+
+ return Object.entries(params).reduce((result, [key, value]) => {
+ const regex = new RegExp(`{${key}}`, 'g');
+ return result.replace(regex, String(value));
+ }, text);
+};
+
+/**
+ * 根据浏览器语言设置或localStorage获取当前语言
+ */
+export const getBrowserLanguage = (): string => {
+ // 优先从localStorage获取
+ const savedLang = localStorage.getItem('preferred_language');
+ if (savedLang) return savedLang;
+
+ // 从浏览器语言设置获取
+ const browserLang = navigator.language.toLowerCase();
+
+ // 如果以zh开头,返回zh-CN
+ if (browserLang.startsWith('zh')) {
+ return 'zh-CN';
+ }
+
+ // 默认返回英文
+ return 'en-US';
+};
+
+// 地址缩略显示 0x1234...abcd
+export function shortenAddress(addr: string, head = 4, tail = 4) {
+ if (!addr) return '';
+ if (addr.length <= head + tail + 2) return addr;
+ return addr.slice(0, head + 2) + '...' + addr.slice(-tail);
+}
\ No newline at end of file
diff --git a/move202503/DudeGuuud/code/src/vite-env.d.ts b/move202503/DudeGuuud/code/src/vite-env.d.ts
new file mode 100644
index 00000000..11f02fe2
--- /dev/null
+++ b/move202503/DudeGuuud/code/src/vite-env.d.ts
@@ -0,0 +1 @@
+///
diff --git a/move202503/DudeGuuud/code/tailwind.config.js b/move202503/DudeGuuud/code/tailwind.config.js
new file mode 100644
index 00000000..b4ca98a4
--- /dev/null
+++ b/move202503/DudeGuuud/code/tailwind.config.js
@@ -0,0 +1,64 @@
+/** @type {import('tailwindcss').Config} */
+export default {
+ content: [
+ "./index.html",
+ "./src/**/*.{js,ts,jsx,tsx}",
+ ],
+ darkMode: 'class',
+ theme: {
+ extend: {
+ colors: {
+ primary: {
+ 50: '#f0f9ff',
+ 100: '#e0f2fe',
+ 200: '#bae6fd',
+ 300: '#7dd3fc',
+ 400: '#38bdf8',
+ 500: '#0ea5e9',
+ 600: '#0284c7',
+ 700: '#0369a1',
+ 800: '#075985',
+ 900: '#0c4a6e',
+ },
+ secondary: {
+ 50: '#fdf4ff',
+ 100: '#fae8ff',
+ 200: '#f5d0fe',
+ 300: '#f0abfc',
+ 400: '#e879f9',
+ 500: '#d946ef',
+ 600: '#c026d3',
+ 700: '#a21caf',
+ 800: '#86198f',
+ 900: '#701a75',
+ },
+ },
+ fontFamily: {
+ sans: ['Inter', 'system-ui', 'sans-serif'],
+ serif: ['Merriweather', 'Georgia', 'serif'],
+ },
+ spacing: {
+ '72': '18rem',
+ '84': '21rem',
+ '96': '24rem',
+ },
+ animation: {
+ 'fade-in': 'fadeIn 0.5s ease-in-out',
+ 'slide-up': 'slideUp 0.5s ease-out',
+ },
+ keyframes: {
+ fadeIn: {
+ '0%': { opacity: '0' },
+ '100%': { opacity: '1' },
+ },
+ slideUp: {
+ '0%': { transform: 'translateY(20px)', opacity: '0' },
+ '100%': { transform: 'translateY(0)', opacity: '1' },
+ },
+ },
+ },
+ },
+ plugins: [
+ require('@tailwindcss/forms'),
+ ],
+}
\ No newline at end of file
diff --git a/move202503/DudeGuuud/code/tsconfig.app.json b/move202503/DudeGuuud/code/tsconfig.app.json
new file mode 100644
index 00000000..358ca9ba
--- /dev/null
+++ b/move202503/DudeGuuud/code/tsconfig.app.json
@@ -0,0 +1,26 @@
+{
+ "compilerOptions": {
+ "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.app.tsbuildinfo",
+ "target": "ES2020",
+ "useDefineForClassFields": true,
+ "lib": ["ES2020", "DOM", "DOM.Iterable"],
+ "module": "ESNext",
+ "skipLibCheck": true,
+
+ /* Bundler mode */
+ "moduleResolution": "bundler",
+ "allowImportingTsExtensions": true,
+ "isolatedModules": true,
+ "moduleDetection": "force",
+ "noEmit": true,
+ "jsx": "react-jsx",
+
+ /* Linting */
+ "strict": true,
+ "noUnusedLocals": true,
+ "noUnusedParameters": true,
+ "noFallthroughCasesInSwitch": true,
+ "noUncheckedSideEffectImports": true
+ },
+ "include": ["src"]
+}
diff --git a/move202503/DudeGuuud/code/tsconfig.json b/move202503/DudeGuuud/code/tsconfig.json
new file mode 100644
index 00000000..1ffef600
--- /dev/null
+++ b/move202503/DudeGuuud/code/tsconfig.json
@@ -0,0 +1,7 @@
+{
+ "files": [],
+ "references": [
+ { "path": "./tsconfig.app.json" },
+ { "path": "./tsconfig.node.json" }
+ ]
+}
diff --git a/move202503/DudeGuuud/code/tsconfig.node.json b/move202503/DudeGuuud/code/tsconfig.node.json
new file mode 100644
index 00000000..db0becc8
--- /dev/null
+++ b/move202503/DudeGuuud/code/tsconfig.node.json
@@ -0,0 +1,24 @@
+{
+ "compilerOptions": {
+ "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.node.tsbuildinfo",
+ "target": "ES2022",
+ "lib": ["ES2023"],
+ "module": "ESNext",
+ "skipLibCheck": true,
+
+ /* Bundler mode */
+ "moduleResolution": "bundler",
+ "allowImportingTsExtensions": true,
+ "isolatedModules": true,
+ "moduleDetection": "force",
+ "noEmit": true,
+
+ /* Linting */
+ "strict": true,
+ "noUnusedLocals": true,
+ "noUnusedParameters": true,
+ "noFallthroughCasesInSwitch": true,
+ "noUncheckedSideEffectImports": true
+ },
+ "include": ["vite.config.ts"]
+}
diff --git a/move202503/DudeGuuud/code/vite.config.ts b/move202503/DudeGuuud/code/vite.config.ts
new file mode 100644
index 00000000..2d849567
--- /dev/null
+++ b/move202503/DudeGuuud/code/vite.config.ts
@@ -0,0 +1,10 @@
+// Copyright (c) Mysten Labs, Inc.
+// SPDX-License-Identifier: Apache-2.0
+
+import react from '@vitejs/plugin-react';
+import { defineConfig } from 'vite';
+
+// https://vitejs.dev/config/
+export default defineConfig({
+ plugins: [react()],
+});
\ No newline at end of file