From 5fa75efd4591cb439b574fce66d30966051c8865 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9F=B3=E6=B8=85=E7=88=BD?= Date: Wed, 9 Apr 2025 09:29:31 +0800 Subject: [PATCH] =?UTF-8?q?=E4=B8=80=E4=BA=9B=E6=8F=90=E4=BA=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../app/plans/new/steps/BasicSettings.tsx | 154 +- Cunkebao/app/wechat-accounts/[id]/page.tsx | 850 +- Cunkebao/package-lock.json | 165 +- Cunkebao/package.json | 15 +- Server/application/plan/config/route.php | 5 + .../plan/controller/TrafficPool.php | 71 + Server/application/plan/model/BaseModel.php | 60 + Server/application/plan/model/TrafficPool.php | 4 +- .../application/plan/model/TrafficSource.php | 4 +- node_modules/.package-lock.json | 47 - node_modules/react-dom/LICENSE | 21 - node_modules/react-dom/README.md | 60 - .../cjs/react-dom-client.development.js | 24990 --------------- .../cjs/react-dom-client.production.js | 15393 ---------- .../cjs/react-dom-profiling.development.js | 25377 ---------------- .../cjs/react-dom-profiling.profiling.js | 16218 ---------- ...t-dom-server-legacy.browser.development.js | 9035 ------ ...ct-dom-server-legacy.browser.production.js | 5892 ---- ...eact-dom-server-legacy.node.development.js | 9035 ------ ...react-dom-server-legacy.node.production.js | 5972 ---- .../react-dom-server.browser.development.js | 9424 ------ .../react-dom-server.browser.production.js | 6384 ---- .../cjs/react-dom-server.bun.development.js | 8739 ------ .../cjs/react-dom-server.bun.production.js | 5967 ---- .../cjs/react-dom-server.edge.development.js | 9443 ------ .../cjs/react-dom-server.edge.production.js | 6477 ---- .../cjs/react-dom-server.node.development.js | 9317 ------ .../cjs/react-dom-server.node.production.js | 6372 ---- .../cjs/react-dom-test-utils.development.js | 24 - .../cjs/react-dom-test-utils.production.js | 21 - .../react-dom/cjs/react-dom.development.js | 424 - .../react-dom/cjs/react-dom.production.js | 210 - .../cjs/react-dom.react-server.development.js | 340 - .../cjs/react-dom.react-server.production.js | 152 - node_modules/react-dom/client.js | 38 - node_modules/react-dom/client.react-server.js | 5 - node_modules/react-dom/index.js | 38 - node_modules/react-dom/package.json | 117 - node_modules/react-dom/profiling.js | 38 - .../react-dom/profiling.react-server.js | 5 - .../react-dom/react-dom.react-server.js | 7 - node_modules/react-dom/server.browser.js | 18 - node_modules/react-dom/server.bun.js | 19 - node_modules/react-dom/server.edge.js | 19 - node_modules/react-dom/server.js | 3 - node_modules/react-dom/server.node.js | 18 - node_modules/react-dom/server.react-server.js | 5 - node_modules/react-dom/static.browser.js | 12 - node_modules/react-dom/static.edge.js | 12 - node_modules/react-dom/static.js | 3 - node_modules/react-dom/static.node.js | 12 - node_modules/react-dom/static.react-server.js | 5 - node_modules/react-dom/test-utils.js | 7 - node_modules/react/LICENSE | 21 - node_modules/react/README.md | 37 - .../cjs/react-compiler-runtime.development.js | 24 - .../cjs/react-compiler-runtime.production.js | 16 - .../cjs/react-compiler-runtime.profiling.js | 16 - .../cjs/react-jsx-dev-runtime.development.js | 349 - .../cjs/react-jsx-dev-runtime.production.js | 14 - .../cjs/react-jsx-dev-runtime.profiling.js | 14 - ...sx-dev-runtime.react-server.development.js | 385 - ...jsx-dev-runtime.react-server.production.js | 40 - .../cjs/react-jsx-runtime.development.js | 358 - .../react/cjs/react-jsx-runtime.production.js | 34 - .../react/cjs/react-jsx-runtime.profiling.js | 34 - ...ct-jsx-runtime.react-server.development.js | 385 - ...act-jsx-runtime.react-server.production.js | 40 - node_modules/react/cjs/react.development.js | 1242 - node_modules/react/cjs/react.production.js | 546 - .../cjs/react.react-server.development.js | 815 - .../cjs/react.react-server.production.js | 429 - node_modules/react/compiler-runtime.js | 14 - node_modules/react/index.js | 7 - node_modules/react/jsx-dev-runtime.js | 7 - .../react/jsx-dev-runtime.react-server.js | 7 - node_modules/react/jsx-runtime.js | 7 - .../react/jsx-runtime.react-server.js | 7 - node_modules/react/package.json | 51 - node_modules/react/react.react-server.js | 7 - node_modules/scheduler/LICENSE | 21 - node_modules/scheduler/README.md | 9 - .../scheduler-unstable_mock.development.js | 414 - .../cjs/scheduler-unstable_mock.production.js | 406 - ...cheduler-unstable_post_task.development.js | 150 - ...scheduler-unstable_post_task.production.js | 140 - .../scheduler/cjs/scheduler.development.js | 364 - .../cjs/scheduler.native.development.js | 350 - .../cjs/scheduler.native.production.js | 330 - .../scheduler/cjs/scheduler.production.js | 340 - node_modules/scheduler/index.js | 7 - node_modules/scheduler/index.native.js | 7 - node_modules/scheduler/package.json | 27 - node_modules/scheduler/unstable_mock.js | 7 - node_modules/scheduler/unstable_post_task.js | 7 - node_modules/sonner/LICENSE.md | 21 - node_modules/sonner/README.md | 33 - node_modules/sonner/dist/index.d.mts | 151 - node_modules/sonner/dist/index.d.ts | 151 - node_modules/sonner/dist/index.js | 1172 - node_modules/sonner/dist/index.mjs | 1163 - node_modules/sonner/dist/styles.css | 728 - node_modules/sonner/package.json | 66 - 103 files changed, 837 insertions(+), 187176 deletions(-) create mode 100644 Server/application/plan/controller/TrafficPool.php create mode 100644 Server/application/plan/model/BaseModel.php delete mode 100644 node_modules/.package-lock.json delete mode 100644 node_modules/react-dom/LICENSE delete mode 100644 node_modules/react-dom/README.md delete mode 100644 node_modules/react-dom/cjs/react-dom-client.development.js delete mode 100644 node_modules/react-dom/cjs/react-dom-client.production.js delete mode 100644 node_modules/react-dom/cjs/react-dom-profiling.development.js delete mode 100644 node_modules/react-dom/cjs/react-dom-profiling.profiling.js delete mode 100644 node_modules/react-dom/cjs/react-dom-server-legacy.browser.development.js delete mode 100644 node_modules/react-dom/cjs/react-dom-server-legacy.browser.production.js delete mode 100644 node_modules/react-dom/cjs/react-dom-server-legacy.node.development.js delete mode 100644 node_modules/react-dom/cjs/react-dom-server-legacy.node.production.js delete mode 100644 node_modules/react-dom/cjs/react-dom-server.browser.development.js delete mode 100644 node_modules/react-dom/cjs/react-dom-server.browser.production.js delete mode 100644 node_modules/react-dom/cjs/react-dom-server.bun.development.js delete mode 100644 node_modules/react-dom/cjs/react-dom-server.bun.production.js delete mode 100644 node_modules/react-dom/cjs/react-dom-server.edge.development.js delete mode 100644 node_modules/react-dom/cjs/react-dom-server.edge.production.js delete mode 100644 node_modules/react-dom/cjs/react-dom-server.node.development.js delete mode 100644 node_modules/react-dom/cjs/react-dom-server.node.production.js delete mode 100644 node_modules/react-dom/cjs/react-dom-test-utils.development.js delete mode 100644 node_modules/react-dom/cjs/react-dom-test-utils.production.js delete mode 100644 node_modules/react-dom/cjs/react-dom.development.js delete mode 100644 node_modules/react-dom/cjs/react-dom.production.js delete mode 100644 node_modules/react-dom/cjs/react-dom.react-server.development.js delete mode 100644 node_modules/react-dom/cjs/react-dom.react-server.production.js delete mode 100644 node_modules/react-dom/client.js delete mode 100644 node_modules/react-dom/client.react-server.js delete mode 100644 node_modules/react-dom/index.js delete mode 100644 node_modules/react-dom/package.json delete mode 100644 node_modules/react-dom/profiling.js delete mode 100644 node_modules/react-dom/profiling.react-server.js delete mode 100644 node_modules/react-dom/react-dom.react-server.js delete mode 100644 node_modules/react-dom/server.browser.js delete mode 100644 node_modules/react-dom/server.bun.js delete mode 100644 node_modules/react-dom/server.edge.js delete mode 100644 node_modules/react-dom/server.js delete mode 100644 node_modules/react-dom/server.node.js delete mode 100644 node_modules/react-dom/server.react-server.js delete mode 100644 node_modules/react-dom/static.browser.js delete mode 100644 node_modules/react-dom/static.edge.js delete mode 100644 node_modules/react-dom/static.js delete mode 100644 node_modules/react-dom/static.node.js delete mode 100644 node_modules/react-dom/static.react-server.js delete mode 100644 node_modules/react-dom/test-utils.js delete mode 100644 node_modules/react/LICENSE delete mode 100644 node_modules/react/README.md delete mode 100644 node_modules/react/cjs/react-compiler-runtime.development.js delete mode 100644 node_modules/react/cjs/react-compiler-runtime.production.js delete mode 100644 node_modules/react/cjs/react-compiler-runtime.profiling.js delete mode 100644 node_modules/react/cjs/react-jsx-dev-runtime.development.js delete mode 100644 node_modules/react/cjs/react-jsx-dev-runtime.production.js delete mode 100644 node_modules/react/cjs/react-jsx-dev-runtime.profiling.js delete mode 100644 node_modules/react/cjs/react-jsx-dev-runtime.react-server.development.js delete mode 100644 node_modules/react/cjs/react-jsx-dev-runtime.react-server.production.js delete mode 100644 node_modules/react/cjs/react-jsx-runtime.development.js delete mode 100644 node_modules/react/cjs/react-jsx-runtime.production.js delete mode 100644 node_modules/react/cjs/react-jsx-runtime.profiling.js delete mode 100644 node_modules/react/cjs/react-jsx-runtime.react-server.development.js delete mode 100644 node_modules/react/cjs/react-jsx-runtime.react-server.production.js delete mode 100644 node_modules/react/cjs/react.development.js delete mode 100644 node_modules/react/cjs/react.production.js delete mode 100644 node_modules/react/cjs/react.react-server.development.js delete mode 100644 node_modules/react/cjs/react.react-server.production.js delete mode 100644 node_modules/react/compiler-runtime.js delete mode 100644 node_modules/react/index.js delete mode 100644 node_modules/react/jsx-dev-runtime.js delete mode 100644 node_modules/react/jsx-dev-runtime.react-server.js delete mode 100644 node_modules/react/jsx-runtime.js delete mode 100644 node_modules/react/jsx-runtime.react-server.js delete mode 100644 node_modules/react/package.json delete mode 100644 node_modules/react/react.react-server.js delete mode 100644 node_modules/scheduler/LICENSE delete mode 100644 node_modules/scheduler/README.md delete mode 100644 node_modules/scheduler/cjs/scheduler-unstable_mock.development.js delete mode 100644 node_modules/scheduler/cjs/scheduler-unstable_mock.production.js delete mode 100644 node_modules/scheduler/cjs/scheduler-unstable_post_task.development.js delete mode 100644 node_modules/scheduler/cjs/scheduler-unstable_post_task.production.js delete mode 100644 node_modules/scheduler/cjs/scheduler.development.js delete mode 100644 node_modules/scheduler/cjs/scheduler.native.development.js delete mode 100644 node_modules/scheduler/cjs/scheduler.native.production.js delete mode 100644 node_modules/scheduler/cjs/scheduler.production.js delete mode 100644 node_modules/scheduler/index.js delete mode 100644 node_modules/scheduler/index.native.js delete mode 100644 node_modules/scheduler/package.json delete mode 100644 node_modules/scheduler/unstable_mock.js delete mode 100644 node_modules/scheduler/unstable_post_task.js delete mode 100644 node_modules/sonner/LICENSE.md delete mode 100644 node_modules/sonner/README.md delete mode 100644 node_modules/sonner/dist/index.d.mts delete mode 100644 node_modules/sonner/dist/index.d.ts delete mode 100644 node_modules/sonner/dist/index.js delete mode 100644 node_modules/sonner/dist/index.mjs delete mode 100644 node_modules/sonner/dist/styles.css delete mode 100644 node_modules/sonner/package.json diff --git a/Cunkebao/app/plans/new/steps/BasicSettings.tsx b/Cunkebao/app/plans/new/steps/BasicSettings.tsx index 4655425f..c039df68 100755 --- a/Cunkebao/app/plans/new/steps/BasicSettings.tsx +++ b/Cunkebao/app/plans/new/steps/BasicSettings.tsx @@ -8,7 +8,7 @@ import { Button } from "@/components/ui/button" import { Input } from "@/components/ui/input" import { Label } from "@/components/ui/label" import { Switch } from "@/components/ui/switch" -import { QrCode, X, ChevronDown, Plus, Maximize2, Upload, Download, Settings } from "lucide-react" +import { QrCode, X, ChevronDown, Plus, Maximize2, Upload, Download, Settings, Loader2 } from "lucide-react" import { TooltipProvider } from "@/components/ui/tooltip" import { Table, TableHeader, TableRow, TableHead, TableBody, TableCell } from "@/components/ui/table" import { @@ -21,6 +21,7 @@ import { } from "@/components/ui/dialog" import { fetchScenes } from "@/api/scenarios" import type { SceneItem } from "@/api/scenarios" +import { toast } from "react-hot-toast" // 调整场景顺序,确保API获客在最后,并且前三个是最常用的场景 const scenarios = [ @@ -155,6 +156,9 @@ export function BasicSettings({ formData, onChange, onNext }: BasicSettingsProps questionExtraction: formData.phoneSettings?.questionExtraction ?? true, }) + const [isImporting, setIsImporting] = useState(false) + const [importError, setImportError] = useState(null) + // 加载场景列表 useEffect(() => { const loadScenes = async () => { @@ -322,6 +326,45 @@ export function BasicSettings({ formData, onChange, onNext }: BasicSettingsProps setIsPhoneSettingsOpen(false) } + const handleConfirmImport = async () => { + if (importedTags.length === 0) { + setImportError('请先导入数据'); + return; + } + + setIsImporting(true); + setImportError(null); + + try { + const response = await fetch(`${process.env.NEXT_PUBLIC_API_BASE_URL}/v1/traffic/pool/import`, { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + 'Authorization': `Bearer ${localStorage.getItem('token')}`, // 添加认证token + }, + body: JSON.stringify({ + mobile: importedTags.map(tag => tag.phone), + from: importedTags.map(tag => tag.source), + sceneId: formData.sceneId + }), + }); + + const result = await response.json(); + + if (result.code === 200) { + toast.success(`成功导入 ${result.data.success} 条数据`); + setIsImportDialogOpen(false); + } else { + setImportError(result.msg || '导入失败'); + } + } catch (error) { + setImportError('导入失败,请稍后重试'); + console.error('导入失败:', error); + } finally { + setIsImporting(false); + } + }; + return ( @@ -752,46 +795,85 @@ export function BasicSettings({ formData, onChange, onNext }: BasicSettingsProps {/* 订单导入对话框 */} - + - 导入订单标签 + 导入订单 -
-
- +
+
+
+ + +
+
-
- - - - 电话号码 - 来源 - - - - {importedTags.map((tag, index) => ( - - {tag.phone} - {tag.source} - - ))} - -
+ + {importedTags.length > 0 && ( +
+

已导入 {importedTags.length} 条数据

+
+ + + + 电话号码 + 来源 + + + + {importedTags.slice(0, 5).map((tag, index) => ( + + {tag.phone} + {tag.source} + + ))} + {importedTags.length > 5 && ( + + + 还有 {importedTags.length - 5} 条数据未显示 + + + )} + +
+
+
+ )} + + {importError && ( +
{importError}
+ )} + +
+ +
- - - -
diff --git a/Cunkebao/app/wechat-accounts/[id]/page.tsx b/Cunkebao/app/wechat-accounts/[id]/page.tsx index fc763126..672b0f87 100755 --- a/Cunkebao/app/wechat-accounts/[id]/page.tsx +++ b/Cunkebao/app/wechat-accounts/[id]/page.tsx @@ -146,131 +146,131 @@ export default function WechatAccountDetailPage({ params }: { params: { id: stri // 生成模拟账号数据(作为备用,服务器请求失败时使用) const generateMockAccountData = (): WechatAccountDetail => { - // 生成随机标签 + // 生成随机标签 const generateRandomTags = (count: number): FriendTag[] => { - const tagPool = [ - { name: "潜在客户", color: "bg-blue-100 text-blue-800" }, - { name: "高意向", color: "bg-green-100 text-green-800" }, - { name: "已成交", color: "bg-purple-100 text-purple-800" }, - { name: "需跟进", color: "bg-yellow-100 text-yellow-800" }, - { name: "活跃用户", color: "bg-indigo-100 text-indigo-800" }, - { name: "沉默用户", color: "bg-gray-100 text-gray-800" }, - { name: "企业客户", color: "bg-red-100 text-red-800" }, - { name: "个人用户", color: "bg-pink-100 text-pink-800" }, - { name: "新增好友", color: "bg-emerald-100 text-emerald-800" }, - { name: "老客户", color: "bg-amber-100 text-amber-800" }, + const tagPool = [ + { name: "潜在客户", color: "bg-blue-100 text-blue-800" }, + { name: "高意向", color: "bg-green-100 text-green-800" }, + { name: "已成交", color: "bg-purple-100 text-purple-800" }, + { name: "需跟进", color: "bg-yellow-100 text-yellow-800" }, + { name: "活跃用户", color: "bg-indigo-100 text-indigo-800" }, + { name: "沉默用户", color: "bg-gray-100 text-gray-800" }, + { name: "企业客户", color: "bg-red-100 text-red-800" }, + { name: "个人用户", color: "bg-pink-100 text-pink-800" }, + { name: "新增好友", color: "bg-emerald-100 text-emerald-800" }, + { name: "老客户", color: "bg-amber-100 text-amber-800" }, ]; - return Array.from({ length: Math.floor(Math.random() * count) + 1 }, () => { + return Array.from({ length: Math.floor(Math.random() * count) + 1 }, () => { const randomTag = tagPool[Math.floor(Math.random() * tagPool.length)]; - return { - id: `tag-${Math.random().toString(36).substring(2, 9)}`, - name: randomTag.name, - color: randomTag.color, + return { + id: `tag-${Math.random().toString(36).substring(2, 9)}`, + name: randomTag.name, + color: randomTag.color, }; }); }; - // 生成随机好友 + // 生成随机好友 const friendCount = Math.floor(Math.random() * (300 - 150)) + 150; const generateFriends = (count: number): WechatFriend[] => { - return Array.from({ length: count }, (_, i) => { + return Array.from({ length: count }, (_, i) => { const firstName = ["张", "王", "李", "赵", "陈", "刘", "杨", "黄", "周", "吴"][Math.floor(Math.random() * 10)]; - const secondName = ["小", "大", "明", "华", "强", "伟", "芳", "娜", "秀", "英"][ - Math.floor(Math.random() * 10) + const secondName = ["小", "大", "明", "华", "强", "伟", "芳", "娜", "秀", "英"][ + Math.floor(Math.random() * 10) ]; const lastName = ["明", "华", "强", "伟", "芳", "娜", "秀", "英", "军", "杰"][Math.floor(Math.random() * 10)]; const nickname = firstName + secondName + lastName; - // 生成随机的添加时间(过去1年内) + // 生成随机的添加时间(过去1年内) const addDate = new Date(); addDate.setDate(addDate.getDate() - Math.floor(Math.random() * 365)); - // 生成随机的最后互动时间(过去30天内) + // 生成随机的最后互动时间(过去30天内) const lastDate = new Date(); lastDate.setDate(lastDate.getDate() - Math.floor(Math.random() * 30)); - return { - id: `friend-${i}`, - avatar: `/placeholder.svg?height=40&width=40&text=${nickname[0]}`, - nickname, - wechatId: `wxid_${Math.random().toString(36).substring(2, 9)}`, - remark: - Math.random() > 0.5 - ? `${nickname}(${["同事", "客户", "朋友", "同学"][Math.floor(Math.random() * 4)]})` - : "", - addTime: addDate.toISOString().split("T")[0], - lastInteraction: lastDate.toISOString().split("T")[0], - tags: generateRandomTags(3), - region: ["广东", "北京", "上海", "浙江", "江苏", "四川", "湖北", "福建", "山东", "河南"][ - Math.floor(Math.random() * 10) - ], - source: ["抖音", "小红书", "朋友介绍", "搜索添加", "群聊", "附近的人", "名片分享"][ - Math.floor(Math.random() * 7) - ], - notes: - Math.random() > 0.7 - ? ["对产品很感兴趣", "需要进一步跟进", "已购买过产品", "价格敏感", "需要更多信息"][ - Math.floor(Math.random() * 5) - ] - : "", + return { + id: `friend-${i}`, + avatar: `/placeholder.svg?height=40&width=40&text=${nickname[0]}`, + nickname, + wechatId: `wxid_${Math.random().toString(36).substring(2, 9)}`, + remark: + Math.random() > 0.5 + ? `${nickname}(${["同事", "客户", "朋友", "同学"][Math.floor(Math.random() * 4)]})` + : "", + addTime: addDate.toISOString().split("T")[0], + lastInteraction: lastDate.toISOString().split("T")[0], + tags: generateRandomTags(3), + region: ["广东", "北京", "上海", "浙江", "江苏", "四川", "湖北", "福建", "山东", "河南"][ + Math.floor(Math.random() * 10) + ], + source: ["抖音", "小红书", "朋友介绍", "搜索添加", "群聊", "附近的人", "名片分享"][ + Math.floor(Math.random() * 7) + ], + notes: + Math.random() > 0.7 + ? ["对产品很感兴趣", "需要进一步跟进", "已购买过产品", "价格敏感", "需要更多信息"][ + Math.floor(Math.random() * 5) + ] + : "", }; }); }; const friends = generateFriends(friendCount); - const mockAccount: WechatAccountDetail = { - id: params.id, - avatar: - "https://hebbkx1anhila5yf.public.blob.vercel-storage.com/img_v3_02jn_e7fcc2a4-3560-478d-911a-4ccd69c6392g.jpg-a8zVtwxMuSrPWN9dfWH93EBY0yM3Dh.jpeg", - nickname: "卡若-25vig", - wechatId: `wxid_${Math.random().toString(36).substr(2, 8)}`, - deviceId: "device-1", - deviceName: "设备1", - friendCount: friends.length, - todayAdded: 12, - status: "normal", - lastActive: new Date().toLocaleString(), - messageCount: 1234, - activeRate: 87, - accountAge: { - years: 2, - months: 8, - }, - totalChats: 15234, - chatFrequency: 42, - restrictionRecords: [ - { - id: "1", - date: "2024-02-25", - reason: "添加好友过于频繁", - recoveryTime: "2024-02-26", - type: "friend_limit", + const mockAccount: WechatAccountDetail = { + id: params.id, + avatar: + "https://hebbkx1anhila5yf.public.blob.vercel-storage.com/img_v3_02jn_e7fcc2a4-3560-478d-911a-4ccd69c6392g.jpg-a8zVtwxMuSrPWN9dfWH93EBY0yM3Dh.jpeg", + nickname: "卡若-25vig", + wechatId: `wxid_${Math.random().toString(36).substr(2, 8)}`, + deviceId: "device-1", + deviceName: "设备1", + friendCount: friends.length, + todayAdded: 12, + status: "normal", + lastActive: new Date().toLocaleString(), + messageCount: 1234, + activeRate: 87, + accountAge: { + years: 2, + months: 8, }, - { - id: "2", - date: "2024-01-15", - reason: "营销内容违规", - recoveryTime: "2024-01-16", - type: "marketing", + totalChats: 15234, + chatFrequency: 42, + restrictionRecords: [ + { + id: "1", + date: "2024-02-25", + reason: "添加好友过于频繁", + recoveryTime: "2024-02-26", + type: "friend_limit", + }, + { + id: "2", + date: "2024-01-15", + reason: "营销内容违规", + recoveryTime: "2024-01-16", + type: "marketing", + }, + ], + isVerified: true, + firstMomentDate: "2021-06-15", + accountWeight: 85, + weightFactors: { + restrictionFactor: 0.8, + verificationFactor: 1.0, + ageFactor: 0.9, + activityFactor: 0.85, }, - ], - isVerified: true, - firstMomentDate: "2021-06-15", - accountWeight: 85, - weightFactors: { - restrictionFactor: 0.8, - verificationFactor: 1.0, - ageFactor: 0.9, - activityFactor: 0.85, - }, - weeklyStats: Array.from({ length: 7 }, (_, i) => ({ - date: `Day ${i + 1}`, - friends: Math.floor(Math.random() * 50) + 50, - messages: Math.floor(Math.random() * 100) + 100, - })), - friends: friends, + weeklyStats: Array.from({ length: 7 }, (_, i) => ({ + date: `Day ${i + 1}`, + friends: Math.floor(Math.random() * 50) + 50, + messages: Math.floor(Math.random() * 100) + 100, + })), + friends: friends, }; return mockAccount; }; @@ -516,204 +516,204 @@ export default function WechatAccountDetailPage({ params }: { params: { id: stri ) : account ? (
-
-
- -

账号详情

-
-
+
+
+ +

账号详情

+
+
-
- -
-
- - - {account.nickname[0]} - - {account.isVerified && ( +
+ +
+
+ + + {account.nickname[0]} + + {account.isVerified && ( - 已认证 - - )} -
-
-
+ 已认证 + + )} +
+
+

{account.nickname}

- {account.status === "normal" ? "正常" : "异常"} - -
-

微信号:{account.wechatId}

-
- - -
+ {account.status === "normal" ? "正常" : "异常"} + +
+

微信号:{account.wechatId}

+
+ +
- +
+
- - - 账号概览 + + + 账号概览 好友列表 ({friendsTotal > 0 ? friendsTotal : account.friendCount}) - + - - {/* 账号基础信息 */} -
- -
- - 账号年龄 -
-
{formatAccountAge(account.accountAge)}
-
注册时间:{account.firstMomentDate}
-
- - -
- - 活跃程度 -
-
{account.chatFrequency}次/天
-
总聊天数:{account.totalChats.toLocaleString()}
-
-
- - {/* 账号权重评估 */} + + {/* 账号基础信息 */} +
-
-
- - 账号权重评估 -
-
- {account.accountWeight} - -
+
+ + 账号年龄
-

{getWeightDescription(account.accountWeight)}

-
-
+
{formatAccountAge(account.accountAge)}
+
注册时间:{account.firstMomentDate}
+ + + +
+ + 活跃程度 +
+
{account.chatFrequency}次/天
+
总聊天数:{account.totalChats.toLocaleString()}
+
+
+ + {/* 账号权重评估 */} + +
+
+ + 账号权重评估 +
+
+ {account.accountWeight} + +
+
+

{getWeightDescription(account.accountWeight)}

+
+
账号年龄 {(account.weightFactors.ageFactor * 100).toFixed(0)}% -
-
+
+
活跃度 {(account.weightFactors.activityFactor * 100).toFixed(0)}% -
-
+
+
限制影响 {(account.weightFactors.restrictionFactor * 100).toFixed(0)}% -
-
+
+
实名认证 {(account.weightFactors.verificationFactor * 100).toFixed(0)}% -
-
+
+ - {/* 添加好友统计 */} - -
-
- - 添加好友统计 -
- - - - - -

根据账号权重计算每日可添加好友数量

-
-
+ {/* 添加好友统计 */} + +
+
+ + 添加好友统计
-
-
- 今日已添加 - {account.todayAdded} + + + + + +

根据账号权重计算每日可添加好友数量

+
+
+
+
+
+ 今日已添加 + {account.todayAdded} +
+
+
+ 添加进度 + + {account.todayAdded}/{calculateMaxDailyAdds(account.accountWeight)} +
-
-
- 添加进度 - - {account.todayAdded}/{calculateMaxDailyAdds(account.accountWeight)} - + +
+
+ 根据当前账号权重({account.accountWeight}分),每日最多可添加{" "} + {calculateMaxDailyAdds(account.accountWeight)}{" "} + 个好友 +
+
+ + + {/* 限制记录 */} + +
+
+ + 限制记录 +
+ setShowRestrictions(true)}> + 共 {account.restrictionRecords.length} 次 + +
+
+ {account.restrictionRecords.slice(0, 2).map((record) => ( +
+
+ {record.reason} + {record.date}
- + ))} +
+ + + + + +
+ {/* 搜索栏 */} +
+
+ + setSearchQuery(e.target.value)} + onKeyDown={(e) => e.key === 'Enter' && handleSearch()} + className="pl-9" />
-
- 根据当前账号权重({account.accountWeight}分),每日最多可添加{" "} - {calculateMaxDailyAdds(account.accountWeight)}{" "} - 个好友 -
-
- - - {/* 限制记录 */} - -
-
- - 限制记录 -
- setShowRestrictions(true)}> - 共 {account.restrictionRecords.length} 次 - -
-
- {account.restrictionRecords.slice(0, 2).map((record) => ( -
-
- {record.reason} - {record.date} -
-
- ))} -
-
- - - - -
- {/* 搜索栏 */} -
-
- - setSearchQuery(e.target.value)} - onKeyDown={(e) => e.key === 'Enter' && handleSearch()} - className="pl-9" - /> -
-
+ + +
- {/* 好友列表 */} + {/* 好友列表 */}
) : friends.length === 0 ? ( -
未找到匹配的好友
- ) : ( +
未找到匹配的好友
+ ) : ( <> {friends.map((friend) => ( -
handleFriendClick(friend)} - > - - +
handleFriendClick(friend)} + > + + {friend.nickname?.[0] || 'U'} - -
-
+ +
+
- {friend.nickname} + {friend.nickname} {friend.remark && ({friend.remark})} -
- -
-
{friend.wechatId}
-
- {friend.tags.slice(0, 3).map((tag: FriendTag) => ( - - {tag.name} - - ))} - {friend.tags.length > 3 && ( - - +{friend.tags.length - 3} - - )} -
+
+
{friend.wechatId}
+
+ {friend.tags.slice(0, 3).map((tag: FriendTag) => ( + + {tag.name} + + ))} + {friend.tags.length > 3 && ( + + +{friend.tags.length - 3} + + )} +
+
+
))} {/* 懒加载指示器 */} @@ -780,8 +780,8 @@ export default function WechatAccountDetailPage({ params }: { params: { id: stri
)} - )} -
+ )} +
{/* 显示加载状态和总数 */}
@@ -795,149 +795,149 @@ export default function WechatAccountDetailPage({ params }: { params: { id: stri ) : null}
-
- - - +
+ + + - {/* 限制记录详情弹窗 */} - - - - 限制记录详情 - 每次限制恢复时间为24小时 - - -
- {account.restrictionRecords.map((record) => ( -
-
-
{record.reason}
- {record.date} -
-
恢复时间:{record.recoveryTime}
+ {/* 限制记录详情弹窗 */} + + + + 限制记录详情 + 每次限制恢复时间为24小时 + + +
+ {account.restrictionRecords.map((record) => ( +
+
+
{record.reason}
+ {record.date}
- ))} -
- - -
- - {/* 好友转移确认弹窗 */} - - - - 好友转移确认 - 即将导出该微信号的好友列表,用于创建新的获客计划 - -
-
- - - {account.nickname[0]} - -
-
{account.nickname}
-
{account.wechatId}
+
恢复时间:{record.recoveryTime}
-
-
-

• 将导出该账号下的所有好友信息

-

• 好友信息将用于创建新的订单获客计划

-

• 导出过程中请勿关闭页面

+ ))} +
+ + +
+ + {/* 好友转移确认弹窗 */} + + + + 好友转移确认 + 即将导出该微信号的好友列表,用于创建新的获客计划 + +
+
+ + + {account.nickname[0]} + +
+
{account.nickname}
+
{account.wechatId}
- - - - - -
+
+

• 将导出该账号下的所有好友信息

+

• 好友信息将用于创建新的订单获客计划

+

• 导出过程中请勿关闭页面

+
+
+ + + + + +
- {/* 好友详情弹窗 */} - - - - 好友详情 - - {selectedFriend && ( -
-
- - - {selectedFriend.nickname[0]} - -
-
{selectedFriend.nickname}
-
{selectedFriend.wechatId}
- {selectedFriend.remark && ( -
备注: {selectedFriend.remark}
- )} -
-
- -
-
-
添加时间
-
{selectedFriend.addTime}
-
-
-
最近互动
-
{selectedFriend.lastInteraction}
-
-
-
地区
-
{selectedFriend.region}
-
-
-
来源
-
{selectedFriend.source}
-
-
- -
-
- - 标签 -
-
- {selectedFriend.tags.map((tag: FriendTag) => ( - - {tag.name} - - ))} - {selectedFriend.tags.length === 0 && 暂无标签} -
-
- - {selectedFriend.notes && ( -
-
备注信息
-
{selectedFriend.notes}
-
- )} - -
- - + {/* 好友详情弹窗 */} + + + + 好友详情 + + {selectedFriend && ( +
+
+ + + {selectedFriend.nickname[0]} + +
+
{selectedFriend.nickname}
+
{selectedFriend.wechatId}
+ {selectedFriend.remark && ( +
备注: {selectedFriend.remark}
+ )}
- )} - -
-
+ +
+
+
添加时间
+
{selectedFriend.addTime}
+
+
+
最近互动
+
{selectedFriend.lastInteraction}
+
+
+
地区
+
{selectedFriend.region}
+
+
+
来源
+
{selectedFriend.source}
+
+
+ +
+
+ + 标签 +
+
+ {selectedFriend.tags.map((tag: FriendTag) => ( + + {tag.name} + + ))} + {selectedFriend.tags.length === 0 && 暂无标签} +
+
+ + {selectedFriend.notes && ( +
+
备注信息
+
{selectedFriend.notes}
+
+ )} + +
+ + +
+
+ )} +
+
+
) : (

未找到账号信息

diff --git a/Cunkebao/package-lock.json b/Cunkebao/package-lock.json index 913a19d4..7c3729c0 100755 --- a/Cunkebao/package-lock.json +++ b/Cunkebao/package-lock.json @@ -54,6 +54,7 @@ "react-day-picker": "latest", "react-dom": "^19", "react-hook-form": "^7.54.1", + "react-hot-toast": "^2.5.2", "react-resizable-panels": "^2.1.7", "recharts": "latest", "regenerator-runtime": "latest", @@ -76,6 +77,7 @@ "version": "5.2.0", "resolved": "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.2.0.tgz", "integrity": "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==", + "dev": true, "engines": { "node": ">=10" }, @@ -861,6 +863,7 @@ "version": "8.0.2", "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "dev": true, "dependencies": { "string-width": "^5.1.2", "string-width-cjs": "npm:string-width@^4.2.0", @@ -877,6 +880,7 @@ "version": "6.1.0", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", + "dev": true, "engines": { "node": ">=12" }, @@ -888,6 +892,7 @@ "version": "7.1.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dev": true, "dependencies": { "ansi-regex": "^6.0.1" }, @@ -902,6 +907,7 @@ "version": "0.3.8", "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.8.tgz", "integrity": "sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==", + "dev": true, "dependencies": { "@jridgewell/set-array": "^1.2.1", "@jridgewell/sourcemap-codec": "^1.4.10", @@ -915,6 +921,7 @@ "version": "3.1.2", "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "dev": true, "engines": { "node": ">=6.0.0" } @@ -923,6 +930,7 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", + "dev": true, "engines": { "node": ">=6.0.0" } @@ -930,12 +938,14 @@ "node_modules/@jridgewell/sourcemap-codec": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", - "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==" + "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", + "dev": true }, "node_modules/@jridgewell/trace-mapping": { "version": "0.3.25", "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", + "dev": true, "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", "@jridgewell/sourcemap-codec": "^1.4.14" @@ -1097,6 +1107,7 @@ "version": "2.1.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, "dependencies": { "@nodelib/fs.stat": "2.0.5", "run-parallel": "^1.1.9" @@ -1109,6 +1120,7 @@ "version": "2.0.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, "engines": { "node": ">= 8" } @@ -1117,6 +1129,7 @@ "version": "1.2.8", "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, "dependencies": { "@nodelib/fs.scandir": "2.1.5", "fastq": "^1.6.0" @@ -1129,6 +1142,7 @@ "version": "0.11.0", "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "dev": true, "optional": true, "engines": { "node": ">=14" @@ -2577,7 +2591,7 @@ "version": "19.0.12", "resolved": "https://registry.npmjs.org/@types/react/-/react-19.0.12.tgz", "integrity": "sha512-V6Ar115dBDrjbtXSrS+/Oruobc+qVbbUxDFC1RSbRqLt5SYvxxyIDrSC85RWml54g+jfNeEMZhEj7wW07ONQhA==", - "devOptional": true, + "dev": true, "dependencies": { "csstype": "^3.0.2" } @@ -2586,7 +2600,7 @@ "version": "19.0.4", "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-19.0.4.tgz", "integrity": "sha512-4fSQ8vWFkg+TGhePfUzVmat3eC14TXYSsiiDSLI0dVLsrm9gZFABjPy/Qu6TKgl1tq1Bu1yDsuQgY3A3DOjCcg==", - "devOptional": true, + "dev": true, "peerDependencies": { "@types/react": "^19.0.0" } @@ -2631,12 +2645,14 @@ "node_modules/any-promise": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", - "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==" + "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==", + "dev": true }, "node_modules/anymatch": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, "dependencies": { "normalize-path": "^3.0.0", "picomatch": "^2.0.4" @@ -2648,7 +2664,8 @@ "node_modules/arg": { "version": "5.0.2", "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", - "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==" + "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==", + "dev": true }, "node_modules/aria-hidden": { "version": "1.2.4", @@ -2763,6 +2780,7 @@ "version": "2.3.0", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", + "dev": true, "engines": { "node": ">=8" }, @@ -2774,6 +2792,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, "dependencies": { "balanced-match": "^1.0.0" } @@ -2782,6 +2801,7 @@ "version": "3.0.3", "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "dev": true, "dependencies": { "fill-range": "^7.1.1" }, @@ -2887,6 +2907,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz", "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==", + "dev": true, "engines": { "node": ">= 6" } @@ -2952,6 +2973,7 @@ "version": "3.6.0", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "dev": true, "dependencies": { "anymatch": "~3.1.2", "braces": "~3.0.2", @@ -2975,6 +2997,7 @@ "version": "5.1.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, "dependencies": { "is-glob": "^4.0.1" }, @@ -3048,6 +3071,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "devOptional": true, "dependencies": { "color-name": "~1.1.4" }, @@ -3091,6 +3115,7 @@ "version": "7.0.6", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "dev": true, "dependencies": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", @@ -3104,6 +3129,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "dev": true, "bin": { "cssesc": "bin/cssesc" }, @@ -3530,12 +3556,14 @@ "node_modules/didyoumean": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz", - "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==" + "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==", + "dev": true }, "node_modules/dlv": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", - "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==" + "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==", + "dev": true }, "node_modules/dom-helpers": { "version": "5.2.1", @@ -3593,7 +3621,8 @@ "node_modules/eastasianwidth": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", - "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==" + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "dev": true }, "node_modules/electron-to-chromium": { "version": "1.5.128", @@ -3628,7 +3657,8 @@ "node_modules/emoji-regex": { "version": "9.2.2", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==" + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true }, "node_modules/es-abstract": { "version": "1.23.9", @@ -3817,6 +3847,7 @@ "version": "3.3.3", "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", + "dev": true, "dependencies": { "@nodelib/fs.stat": "^2.0.2", "@nodelib/fs.walk": "^1.2.3", @@ -3832,6 +3863,7 @@ "version": "5.1.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, "dependencies": { "is-glob": "^4.0.1" }, @@ -3843,6 +3875,7 @@ "version": "1.19.1", "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.19.1.tgz", "integrity": "sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==", + "dev": true, "dependencies": { "reusify": "^1.0.4" } @@ -3856,6 +3889,7 @@ "version": "7.1.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "dev": true, "dependencies": { "to-regex-range": "^5.0.1" }, @@ -3901,6 +3935,7 @@ "version": "3.3.1", "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz", "integrity": "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==", + "dev": true, "dependencies": { "cross-spawn": "^7.0.6", "signal-exit": "^4.0.1" @@ -3933,6 +3968,7 @@ "version": "2.3.3", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, "hasInstallScript": true, "optional": true, "os": [ @@ -4045,6 +4081,7 @@ "version": "10.4.5", "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", + "dev": true, "dependencies": { "foreground-child": "^3.1.0", "jackspeak": "^3.1.2", @@ -4064,6 +4101,7 @@ "version": "6.0.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, "dependencies": { "is-glob": "^4.0.3" }, @@ -4086,6 +4124,15 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/goober": { + "version": "2.1.16", + "resolved": "https://registry.npmjs.org/goober/-/goober-2.1.16.tgz", + "integrity": "sha512-erjk19y1U33+XAMe1VTvIONHYoSqE4iS7BYUZfHaqeohLmnC0FdxEh7rQU+6MZ4OajItzjZFSRtVANrQwNq6/g==", + "license": "MIT", + "peerDependencies": { + "csstype": "^3.0.10" + } + }, "node_modules/gopd": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", @@ -4316,6 +4363,7 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, "dependencies": { "binary-extensions": "^2.0.0" }, @@ -4403,6 +4451,7 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, "engines": { "node": ">=0.10.0" } @@ -4425,6 +4474,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, "engines": { "node": ">=8" } @@ -4450,6 +4500,7 @@ "version": "4.0.3", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, "dependencies": { "is-extglob": "^2.1.1" }, @@ -4472,6 +4523,7 @@ "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, "engines": { "node": ">=0.12.0" } @@ -4624,12 +4676,14 @@ "node_modules/isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true }, "node_modules/jackspeak": { "version": "3.4.3", "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", + "dev": true, "dependencies": { "@isaacs/cliui": "^8.0.2" }, @@ -4644,6 +4698,7 @@ "version": "1.21.7", "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.7.tgz", "integrity": "sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A==", + "dev": true, "bin": { "jiti": "bin/jiti.js" } @@ -4687,6 +4742,7 @@ "version": "3.1.3", "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.3.tgz", "integrity": "sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==", + "dev": true, "engines": { "node": ">=14" }, @@ -4697,7 +4753,8 @@ "node_modules/lines-and-columns": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", - "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==" + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "dev": true }, "node_modules/lodash": { "version": "4.17.21", @@ -4726,7 +4783,8 @@ "node_modules/lru-cache": { "version": "10.4.3", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", - "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==" + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "dev": true }, "node_modules/lucide-react": { "version": "0.454.0", @@ -4748,6 +4806,7 @@ "version": "1.4.1", "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, "engines": { "node": ">= 8" } @@ -4756,6 +4815,7 @@ "version": "4.0.8", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", + "dev": true, "dependencies": { "braces": "^3.0.3", "picomatch": "^2.3.1" @@ -4768,6 +4828,7 @@ "version": "9.0.5", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, "dependencies": { "brace-expansion": "^2.0.1" }, @@ -4790,6 +4851,7 @@ "version": "7.1.2", "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "dev": true, "engines": { "node": ">=16 || 14 >=14.17" } @@ -4817,6 +4879,7 @@ "version": "2.7.0", "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", + "dev": true, "dependencies": { "any-promise": "^1.0.0", "object-assign": "^4.0.1", @@ -4938,6 +5001,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, "engines": { "node": ">=0.10.0" } @@ -4962,6 +5026,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==", + "dev": true, "engines": { "node": ">= 6" } @@ -5043,7 +5108,8 @@ "node_modules/package-json-from-dist": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", - "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==" + "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==", + "dev": true }, "node_modules/path-is-absolute": { "version": "1.0.1", @@ -5057,6 +5123,7 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, "engines": { "node": ">=8" } @@ -5070,6 +5137,7 @@ "version": "1.11.1", "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", + "dev": true, "dependencies": { "lru-cache": "^10.2.0", "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" @@ -5095,6 +5163,7 @@ "version": "2.3.1", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, "engines": { "node": ">=8.6" }, @@ -5106,6 +5175,7 @@ "version": "2.3.0", "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", + "dev": true, "engines": { "node": ">=0.10.0" } @@ -5114,6 +5184,7 @@ "version": "4.0.7", "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.7.tgz", "integrity": "sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==", + "dev": true, "engines": { "node": ">= 6" } @@ -5130,6 +5201,7 @@ "version": "8.5.3", "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.3.tgz", "integrity": "sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A==", + "dev": true, "funding": [ { "type": "opencollective", @@ -5157,6 +5229,7 @@ "version": "15.1.0", "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-15.1.0.tgz", "integrity": "sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==", + "dev": true, "dependencies": { "postcss-value-parser": "^4.0.0", "read-cache": "^1.0.0", @@ -5173,6 +5246,7 @@ "version": "4.0.1", "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.1.tgz", "integrity": "sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==", + "dev": true, "dependencies": { "camelcase-css": "^2.0.1" }, @@ -5191,6 +5265,7 @@ "version": "4.0.2", "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-4.0.2.tgz", "integrity": "sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==", + "dev": true, "funding": [ { "type": "opencollective", @@ -5225,6 +5300,7 @@ "version": "6.2.0", "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.2.0.tgz", "integrity": "sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ==", + "dev": true, "funding": [ { "type": "opencollective", @@ -5249,6 +5325,7 @@ "version": "6.1.2", "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz", "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==", + "dev": true, "dependencies": { "cssesc": "^3.0.0", "util-deprecate": "^1.0.2" @@ -5281,6 +5358,7 @@ "version": "1.2.3", "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, "funding": [ { "type": "github", @@ -5363,6 +5441,23 @@ "react": "^16.8.0 || ^17 || ^18 || ^19" } }, + "node_modules/react-hot-toast": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/react-hot-toast/-/react-hot-toast-2.5.2.tgz", + "integrity": "sha512-Tun3BbCxzmXXM7C+NI4qiv6lT0uwGh4oAfeJyNOjYUejTsm35mK9iCaYLGv8cBz9L5YxZLx/2ii7zsIwPtPUdw==", + "license": "MIT", + "dependencies": { + "csstype": "^3.1.3", + "goober": "^2.1.16" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "react": ">=16", + "react-dom": ">=16" + } + }, "node_modules/react-is": { "version": "18.3.1", "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", @@ -5476,6 +5571,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==", + "dev": true, "dependencies": { "pify": "^2.3.0" } @@ -5484,6 +5580,7 @@ "version": "3.6.0", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, "dependencies": { "picomatch": "^2.2.1" }, @@ -5602,6 +5699,7 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", + "dev": true, "engines": { "iojs": ">=1.0.0", "node": ">=0.10.0" @@ -5635,6 +5733,7 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, "funding": [ { "type": "github", @@ -5832,6 +5931,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, "dependencies": { "shebang-regex": "^3.0.0" }, @@ -5843,6 +5943,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, "engines": { "node": ">=8" } @@ -5963,6 +6064,7 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true, "engines": { "node": ">=14" }, @@ -6026,6 +6128,7 @@ "version": "5.1.2", "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dev": true, "dependencies": { "eastasianwidth": "^0.2.0", "emoji-regex": "^9.2.2", @@ -6043,6 +6146,7 @@ "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -6056,6 +6160,7 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, "engines": { "node": ">=8" } @@ -6063,12 +6168,14 @@ "node_modules/string-width-cjs/node_modules/emoji-regex": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true }, "node_modules/string-width-cjs/node_modules/strip-ansi": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, "dependencies": { "ansi-regex": "^5.0.1" }, @@ -6080,6 +6187,7 @@ "version": "6.1.0", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", + "dev": true, "engines": { "node": ">=12" }, @@ -6091,6 +6199,7 @@ "version": "7.1.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dev": true, "dependencies": { "ansi-regex": "^6.0.1" }, @@ -6170,6 +6279,7 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, "dependencies": { "ansi-regex": "^5.0.1" }, @@ -6181,6 +6291,7 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, "engines": { "node": ">=8" } @@ -6211,6 +6322,7 @@ "version": "3.35.0", "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.35.0.tgz", "integrity": "sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==", + "dev": true, "dependencies": { "@jridgewell/gen-mapping": "^0.3.2", "commander": "^4.0.0", @@ -6232,6 +6344,7 @@ "version": "4.1.1", "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", + "dev": true, "engines": { "node": ">= 6" } @@ -6273,6 +6386,7 @@ "version": "3.4.17", "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.17.tgz", "integrity": "sha512-w33E2aCvSDP0tW9RZuNXadXlkHXqFzSkQew/aIa2i/Sj8fThxwovwlXHSPXTbAHwEIhBFXAedUhP2tueAKP8Og==", + "dev": true, "dependencies": { "@alloc/quick-lru": "^5.2.0", "arg": "^5.0.2", @@ -6386,6 +6500,7 @@ "version": "3.3.1", "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", + "dev": true, "dependencies": { "any-promise": "^1.0.0" } @@ -6394,6 +6509,7 @@ "version": "1.6.0", "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", + "dev": true, "dependencies": { "thenify": ">= 3.1.0 < 4" }, @@ -6410,6 +6526,7 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, "dependencies": { "is-number": "^7.0.0" }, @@ -6420,7 +6537,8 @@ "node_modules/ts-interface-checker": { "version": "0.1.13", "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz", - "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==" + "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==", + "dev": true }, "node_modules/tslib": { "version": "2.8.1", @@ -6646,7 +6764,8 @@ "node_modules/util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "dev": true }, "node_modules/vaul": { "version": "0.9.9", @@ -6685,6 +6804,7 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, "dependencies": { "isexe": "^2.0.0" }, @@ -6813,6 +6933,7 @@ "version": "8.1.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "dev": true, "dependencies": { "ansi-styles": "^6.1.0", "string-width": "^5.0.1", @@ -6830,6 +6951,7 @@ "version": "7.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", @@ -6846,6 +6968,7 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, "engines": { "node": ">=8" } @@ -6854,6 +6977,7 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, "dependencies": { "color-convert": "^2.0.1" }, @@ -6867,12 +6991,14 @@ "node_modules/wrap-ansi-cjs/node_modules/emoji-regex": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true }, "node_modules/wrap-ansi-cjs/node_modules/string-width": { "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -6886,6 +7012,7 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, "dependencies": { "ansi-regex": "^5.0.1" }, @@ -6897,6 +7024,7 @@ "version": "6.1.0", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", + "dev": true, "engines": { "node": ">=12" }, @@ -6908,6 +7036,7 @@ "version": "6.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "dev": true, "engines": { "node": ">=12" }, @@ -6919,6 +7048,7 @@ "version": "7.1.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dev": true, "dependencies": { "ansi-regex": "^6.0.1" }, @@ -6938,6 +7068,7 @@ "version": "2.7.0", "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.7.0.tgz", "integrity": "sha512-+hSoy/QHluxmC9kCIJyL/uyFmLmc+e5CFR5Wa+bpIhIj85LVb9ZH2nVnqrHoSvKogwODv0ClqZkmiSSaIH5LTA==", + "dev": true, "bin": { "yaml": "bin.mjs" }, diff --git a/Cunkebao/package.json b/Cunkebao/package.json index c903c780..334e7308 100755 --- a/Cunkebao/package.json +++ b/Cunkebao/package.json @@ -9,6 +9,7 @@ "lint": "next lint" }, "dependencies": { + "@ant-design/plots": "latest", "@hookform/resolvers": "^3.9.1", "@radix-ui/react-accordion": "latest", "@radix-ui/react-alert-dialog": "^1.1.4", @@ -20,6 +21,7 @@ "@radix-ui/react-dialog": "latest", "@radix-ui/react-dropdown-menu": "latest", "@radix-ui/react-hover-card": "^1.1.4", + "@radix-ui/react-icons": "latest", "@radix-ui/react-label": "latest", "@radix-ui/react-menubar": "^1.1.4", "@radix-ui/react-navigation-menu": "^1.2.3", @@ -37,7 +39,9 @@ "@radix-ui/react-toggle": "^1.1.1", "@radix-ui/react-toggle-group": "^1.1.1", "@radix-ui/react-tooltip": "latest", + "@tanstack/react-table": "latest", "autoprefixer": "^10.4.20", + "chart.js": "latest", "class-variance-authority": "^0.7.1", "clsx": "^2.1.1", "cmdk": "1.0.4", @@ -51,18 +55,15 @@ "react-day-picker": "latest", "react-dom": "^19", "react-hook-form": "^7.54.1", + "react-hot-toast": "^2.5.2", "react-resizable-panels": "^2.1.7", "recharts": "latest", + "regenerator-runtime": "latest", "sonner": "^1.7.1", "tailwind-merge": "^2.5.5", "tailwindcss-animate": "^1.0.7", "vaul": "^0.9.6", - "zod": "^3.24.1", - "@ant-design/plots": "latest", - "regenerator-runtime": "latest", - "chart.js": "latest", - "@tanstack/react-table": "latest", - "@radix-ui/react-icons": "latest" + "zod": "^3.24.1" }, "devDependencies": { "@types/node": "^22", @@ -72,4 +73,4 @@ "tailwindcss": "^3.4.17", "typescript": "^5" } -} \ No newline at end of file +} diff --git a/Server/application/plan/config/route.php b/Server/application/plan/config/route.php index 6cd861c8..c9ff6463 100644 --- a/Server/application/plan/config/route.php +++ b/Server/application/plan/config/route.php @@ -16,4 +16,9 @@ Route::group('v1/', function () { Route::group('traffic/tags', function () { Route::get('', 'app\\plan\\controller\\TrafficTag@index'); // 获取标签列表 }); + + // 流量池相关 + Route::group('traffic/pool', function () { + Route::post('import', 'app\\plan\\controller\\TrafficPool@importOrders'); // 导入订单标签 + }); })->middleware(['jwt']); \ No newline at end of file diff --git a/Server/application/plan/controller/TrafficPool.php b/Server/application/plan/controller/TrafficPool.php new file mode 100644 index 00000000..d6120c71 --- /dev/null +++ b/Server/application/plan/controller/TrafficPool.php @@ -0,0 +1,71 @@ + 400, + 'msg' => '缺少必要参数' + ]); + } + + // 批量处理数据 + $successCount = 0; + $failCount = 0; + + foreach ($data['mobile'] as $index => $mobile) { + // 导入到流量池 + $poolData[] = [ + 'mobile' => $mobile, + 'from' => $data['from'][$index] ?? '', + 'createTime' => time() + ]; + + // 导入到流量来源 + $sourceData[] = [ + 'mobile' => $mobile, + 'sceneId' => $data['sceneId'], + 'createTime' => time() + ]; + } + + new + + return json([ + 'code' => 200, + 'msg' => '导入完成', + 'data' => [ + 'success' => $successCount, + 'fail' => $failCount + ] + ]); + + } catch (\Exception $e) { + return json([ + 'code' => 500, + 'msg' => '导入失败:' . $e->getMessage() + ]); + } + } +} \ No newline at end of file diff --git a/Server/application/plan/model/BaseModel.php b/Server/application/plan/model/BaseModel.php new file mode 100644 index 00000000..1177fd48 --- /dev/null +++ b/Server/application/plan/model/BaseModel.php @@ -0,0 +1,60 @@ + $item) { + if (is_integer($key)) { + $temp[] = "{$item} = VALUES({$item})"; + } else { + $temp[] = "{$key} = {$item}"; + } + } + $duplicate = implode(',', $temp); + } + } + if (!empty($limit)) { + // 分批写入 自动启动事务支持 + $this->startTrans(); + + try { + // array_chunk 函数把数组分割为新的数组块。 + //其中每个数组的单元数目由 size 参数决定。最后一个数组的单元数目可能会少几个。 + //可选参数 preserve_key 是一个布尔值,它指定新数组的元素是否有和原数组相同的键(用于关联数组),还是从 0 开始的新数字键(用于索引数组)。默认是分配新的键。 + $array = array_chunk($data, $limit, true); + $count = 0; + + foreach ($array as $item) { + $sql = $this->fetchSql(true)->insertAll($item); + $sql = preg_replace("/INSERT\s*INTO\s*/", "INSERT IGNORE INTO ", $sql); + if (is_string($duplicate)) { + $sql = $sql . ' ON DUPLICATE KEY UPDATE ' . $duplicate; + } + $count += $this->execute($sql); // 获取影响函数 + } + // 提交事务 + $this->commit(); + } catch (\Exception $e) { + $this->rollback(); + throw $e; + } + return $count; + } else { + $sql = $this->fetchSql(true)->insertAll($data); + $sql = preg_replace("/INSERT\s*INTO\s*/", "INSERT IGNORE INTO ", $sql); + if (is_string($duplicate)) { + $sql = $sql . ' ON DUPLICATE KEY UPDATE ' . $duplicate; + } + return $this->execute($sql); + } + } +} \ No newline at end of file diff --git a/Server/application/plan/model/TrafficPool.php b/Server/application/plan/model/TrafficPool.php index ff971597..cbd39888 100644 --- a/Server/application/plan/model/TrafficPool.php +++ b/Server/application/plan/model/TrafficPool.php @@ -1,12 +1,10 @@ =0.10.0" - } - }, - "node_modules/react-dom": { - "version": "19.1.0", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.1.0.tgz", - "integrity": "sha512-Xs1hdnE+DyKgeHJeJznQmYMIBG3TKIHJJT95Q58nHLSrElKlGQqDTR2HQ9fx5CN/Gk6Vh/kupBTDLU11/nDk/g==", - "license": "MIT", - "peer": true, - "dependencies": { - "scheduler": "^0.26.0" - }, - "peerDependencies": { - "react": "^19.1.0" - } - }, - "node_modules/scheduler": { - "version": "0.26.0", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.26.0.tgz", - "integrity": "sha512-NlHwttCI/l5gCPR3D1nNXtWABUmBwvZpEQiD4IXSbIDq8BzLIK/7Ir5gTFSGZDUu37K5cMNp0hFtzO38sC7gWA==", - "license": "MIT", - "peer": true - }, - "node_modules/sonner": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/sonner/-/sonner-2.0.3.tgz", - "integrity": "sha512-njQ4Hht92m0sMqqHVDL32V2Oun9W1+PHO9NDv9FHfJjT3JT22IG4Jpo3FPQy+mouRKCXFWO+r67v6MrHX2zeIA==", - "license": "MIT", - "peerDependencies": { - "react": "^18.0.0 || ^19.0.0 || ^19.0.0-rc", - "react-dom": "^18.0.0 || ^19.0.0 || ^19.0.0-rc" - } - } - } -} diff --git a/node_modules/react-dom/LICENSE b/node_modules/react-dom/LICENSE deleted file mode 100644 index b93be905..00000000 --- a/node_modules/react-dom/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -MIT License - -Copyright (c) Meta Platforms, Inc. and affiliates. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. diff --git a/node_modules/react-dom/README.md b/node_modules/react-dom/README.md deleted file mode 100644 index b078f194..00000000 --- a/node_modules/react-dom/README.md +++ /dev/null @@ -1,60 +0,0 @@ -# `react-dom` - -This package serves as the entry point to the DOM and server renderers for React. It is intended to be paired with the generic React package, which is shipped as `react` to npm. - -## Installation - -```sh -npm install react react-dom -``` - -## Usage - -### In the browser - -```js -import { createRoot } from 'react-dom/client'; - -function App() { - return
Hello World
; -} - -const root = createRoot(document.getElementById('root')); -root.render(); -``` - -### On the server - -```js -import { renderToPipeableStream } from 'react-dom/server'; - -function App() { - return
Hello World
; -} - -function handleRequest(res) { - // ... in your server handler ... - const stream = renderToPipeableStream(, { - onShellReady() { - res.statusCode = 200; - res.setHeader('Content-type', 'text/html'); - stream.pipe(res); - }, - // ... - }); -} -``` - -## API - -### `react-dom` - -See https://react.dev/reference/react-dom - -### `react-dom/client` - -See https://react.dev/reference/react-dom/client - -### `react-dom/server` - -See https://react.dev/reference/react-dom/server diff --git a/node_modules/react-dom/cjs/react-dom-client.development.js b/node_modules/react-dom/cjs/react-dom-client.development.js deleted file mode 100644 index dd10829d..00000000 --- a/node_modules/react-dom/cjs/react-dom-client.development.js +++ /dev/null @@ -1,24990 +0,0 @@ -/** - * @license React - * react-dom-client.development.js - * - * Copyright (c) Meta Platforms, Inc. and affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */ - -/* - Modernizr 3.0.0pre (Custom Build) | MIT -*/ -"use strict"; -"production" !== process.env.NODE_ENV && - (function () { - function findHook(fiber, id) { - for (fiber = fiber.memoizedState; null !== fiber && 0 < id; ) - (fiber = fiber.next), id--; - return fiber; - } - function copyWithSetImpl(obj, path, index, value) { - if (index >= path.length) return value; - var key = path[index], - updated = isArrayImpl(obj) ? obj.slice() : assign({}, obj); - updated[key] = copyWithSetImpl(obj[key], path, index + 1, value); - return updated; - } - function copyWithRename(obj, oldPath, newPath) { - if (oldPath.length !== newPath.length) - console.warn("copyWithRename() expects paths of the same length"); - else { - for (var i = 0; i < newPath.length - 1; i++) - if (oldPath[i] !== newPath[i]) { - console.warn( - "copyWithRename() expects paths to be the same except for the deepest key" - ); - return; - } - return copyWithRenameImpl(obj, oldPath, newPath, 0); - } - } - function copyWithRenameImpl(obj, oldPath, newPath, index) { - var oldKey = oldPath[index], - updated = isArrayImpl(obj) ? obj.slice() : assign({}, obj); - index + 1 === oldPath.length - ? ((updated[newPath[index]] = updated[oldKey]), - isArrayImpl(updated) - ? updated.splice(oldKey, 1) - : delete updated[oldKey]) - : (updated[oldKey] = copyWithRenameImpl( - obj[oldKey], - oldPath, - newPath, - index + 1 - )); - return updated; - } - function copyWithDeleteImpl(obj, path, index) { - var key = path[index], - updated = isArrayImpl(obj) ? obj.slice() : assign({}, obj); - if (index + 1 === path.length) - return ( - isArrayImpl(updated) ? updated.splice(key, 1) : delete updated[key], - updated - ); - updated[key] = copyWithDeleteImpl(obj[key], path, index + 1); - return updated; - } - function shouldSuspendImpl() { - return !1; - } - function shouldErrorImpl() { - return null; - } - function warnForMissingKey() {} - function warnInvalidHookAccess() { - console.error( - "Do not call Hooks inside useEffect(...), useMemo(...), or other built-in Hooks. You can only call Hooks at the top level of your React function. For more information, see https://react.dev/link/rules-of-hooks" - ); - } - function warnInvalidContextAccess() { - console.error( - "Context can only be read while React is rendering. In classes, you can read it in the render method or getDerivedStateFromProps. In function components, you can read it directly in the function body, but not inside Hooks like useReducer() or useMemo()." - ); - } - function noop$2() {} - function setToSortedString(set) { - var array = []; - set.forEach(function (value) { - array.push(value); - }); - return array.sort().join(", "); - } - function createFiber(tag, pendingProps, key, mode) { - return new FiberNode(tag, pendingProps, key, mode); - } - function scheduleRoot(root, element) { - root.context === emptyContextObject && - (updateContainerImpl(root.current, 2, element, root, null, null), - flushSyncWork$1()); - } - function scheduleRefresh(root, update) { - if (null !== resolveFamily) { - var staleFamilies = update.staleFamilies; - update = update.updatedFamilies; - flushPendingEffects(); - scheduleFibersWithFamiliesRecursively( - root.current, - update, - staleFamilies - ); - flushSyncWork$1(); - } - } - function setRefreshHandler(handler) { - resolveFamily = handler; - } - function isValidContainer(node) { - return !( - !node || - (1 !== node.nodeType && 9 !== node.nodeType && 11 !== node.nodeType) - ); - } - function getNearestMountedFiber(fiber) { - var node = fiber, - nearestMounted = fiber; - if (fiber.alternate) for (; node.return; ) node = node.return; - else { - fiber = node; - do - (node = fiber), - 0 !== (node.flags & 4098) && (nearestMounted = node.return), - (fiber = node.return); - while (fiber); - } - return 3 === node.tag ? nearestMounted : null; - } - function getSuspenseInstanceFromFiber(fiber) { - if (13 === fiber.tag) { - var suspenseState = fiber.memoizedState; - null === suspenseState && - ((fiber = fiber.alternate), - null !== fiber && (suspenseState = fiber.memoizedState)); - if (null !== suspenseState) return suspenseState.dehydrated; - } - return null; - } - function assertIsMounted(fiber) { - if (getNearestMountedFiber(fiber) !== fiber) - throw Error("Unable to find node on an unmounted component."); - } - function findCurrentFiberUsingSlowPath(fiber) { - var alternate = fiber.alternate; - if (!alternate) { - alternate = getNearestMountedFiber(fiber); - if (null === alternate) - throw Error("Unable to find node on an unmounted component."); - return alternate !== fiber ? null : fiber; - } - for (var a = fiber, b = alternate; ; ) { - var parentA = a.return; - if (null === parentA) break; - var parentB = parentA.alternate; - if (null === parentB) { - b = parentA.return; - if (null !== b) { - a = b; - continue; - } - break; - } - if (parentA.child === parentB.child) { - for (parentB = parentA.child; parentB; ) { - if (parentB === a) return assertIsMounted(parentA), fiber; - if (parentB === b) return assertIsMounted(parentA), alternate; - parentB = parentB.sibling; - } - throw Error("Unable to find node on an unmounted component."); - } - if (a.return !== b.return) (a = parentA), (b = parentB); - else { - for (var didFindChild = !1, _child = parentA.child; _child; ) { - if (_child === a) { - didFindChild = !0; - a = parentA; - b = parentB; - break; - } - if (_child === b) { - didFindChild = !0; - b = parentA; - a = parentB; - break; - } - _child = _child.sibling; - } - if (!didFindChild) { - for (_child = parentB.child; _child; ) { - if (_child === a) { - didFindChild = !0; - a = parentB; - b = parentA; - break; - } - if (_child === b) { - didFindChild = !0; - b = parentB; - a = parentA; - break; - } - _child = _child.sibling; - } - if (!didFindChild) - throw Error( - "Child was not found in either parent set. This indicates a bug in React related to the return pointer. Please file an issue." - ); - } - } - if (a.alternate !== b) - throw Error( - "Return fibers should always be each others' alternates. This error is likely caused by a bug in React. Please file an issue." - ); - } - if (3 !== a.tag) - throw Error("Unable to find node on an unmounted component."); - return a.stateNode.current === a ? fiber : alternate; - } - function findCurrentHostFiberImpl(node) { - var tag = node.tag; - if (5 === tag || 26 === tag || 27 === tag || 6 === tag) return node; - for (node = node.child; null !== node; ) { - tag = findCurrentHostFiberImpl(node); - if (null !== tag) return tag; - node = node.sibling; - } - return null; - } - function getIteratorFn(maybeIterable) { - if (null === maybeIterable || "object" !== typeof maybeIterable) - return null; - maybeIterable = - (MAYBE_ITERATOR_SYMBOL && maybeIterable[MAYBE_ITERATOR_SYMBOL]) || - maybeIterable["@@iterator"]; - return "function" === typeof maybeIterable ? maybeIterable : null; - } - function getComponentNameFromType(type) { - if (null == type) return null; - if ("function" === typeof type) - return type.$$typeof === REACT_CLIENT_REFERENCE - ? null - : type.displayName || type.name || null; - if ("string" === typeof type) return type; - switch (type) { - case REACT_FRAGMENT_TYPE: - return "Fragment"; - case REACT_PROFILER_TYPE: - return "Profiler"; - case REACT_STRICT_MODE_TYPE: - return "StrictMode"; - case REACT_SUSPENSE_TYPE: - return "Suspense"; - case REACT_SUSPENSE_LIST_TYPE: - return "SuspenseList"; - case REACT_ACTIVITY_TYPE: - return "Activity"; - } - if ("object" === typeof type) - switch ( - ("number" === typeof type.tag && - console.error( - "Received an unexpected object in getComponentNameFromType(). This is likely a bug in React. Please file an issue." - ), - type.$$typeof) - ) { - case REACT_PORTAL_TYPE: - return "Portal"; - case REACT_CONTEXT_TYPE: - return (type.displayName || "Context") + ".Provider"; - case REACT_CONSUMER_TYPE: - return (type._context.displayName || "Context") + ".Consumer"; - case REACT_FORWARD_REF_TYPE: - var innerType = type.render; - type = type.displayName; - type || - ((type = innerType.displayName || innerType.name || ""), - (type = "" !== type ? "ForwardRef(" + type + ")" : "ForwardRef")); - return type; - case REACT_MEMO_TYPE: - return ( - (innerType = type.displayName || null), - null !== innerType - ? innerType - : getComponentNameFromType(type.type) || "Memo" - ); - case REACT_LAZY_TYPE: - innerType = type._payload; - type = type._init; - try { - return getComponentNameFromType(type(innerType)); - } catch (x) {} - } - return null; - } - function getComponentNameFromOwner(owner) { - return "number" === typeof owner.tag - ? getComponentNameFromFiber(owner) - : "string" === typeof owner.name - ? owner.name - : null; - } - function getComponentNameFromFiber(fiber) { - var type = fiber.type; - switch (fiber.tag) { - case 31: - return "Activity"; - case 24: - return "Cache"; - case 9: - return (type._context.displayName || "Context") + ".Consumer"; - case 10: - return (type.displayName || "Context") + ".Provider"; - case 18: - return "DehydratedFragment"; - case 11: - return ( - (fiber = type.render), - (fiber = fiber.displayName || fiber.name || ""), - type.displayName || - ("" !== fiber ? "ForwardRef(" + fiber + ")" : "ForwardRef") - ); - case 7: - return "Fragment"; - case 26: - case 27: - case 5: - return type; - case 4: - return "Portal"; - case 3: - return "Root"; - case 6: - return "Text"; - case 16: - return getComponentNameFromType(type); - case 8: - return type === REACT_STRICT_MODE_TYPE ? "StrictMode" : "Mode"; - case 22: - return "Offscreen"; - case 12: - return "Profiler"; - case 21: - return "Scope"; - case 13: - return "Suspense"; - case 19: - return "SuspenseList"; - case 25: - return "TracingMarker"; - case 1: - case 0: - case 14: - case 15: - if ("function" === typeof type) - return type.displayName || type.name || null; - if ("string" === typeof type) return type; - break; - case 29: - type = fiber._debugInfo; - if (null != type) - for (var i = type.length - 1; 0 <= i; i--) - if ("string" === typeof type[i].name) return type[i].name; - if (null !== fiber.return) - return getComponentNameFromFiber(fiber.return); - } - return null; - } - function createCursor(defaultValue) { - return { current: defaultValue }; - } - function pop(cursor, fiber) { - 0 > index$jscomp$0 - ? console.error("Unexpected pop.") - : (fiber !== fiberStack[index$jscomp$0] && - console.error("Unexpected Fiber popped."), - (cursor.current = valueStack[index$jscomp$0]), - (valueStack[index$jscomp$0] = null), - (fiberStack[index$jscomp$0] = null), - index$jscomp$0--); - } - function push(cursor, value, fiber) { - index$jscomp$0++; - valueStack[index$jscomp$0] = cursor.current; - fiberStack[index$jscomp$0] = fiber; - cursor.current = value; - } - function requiredContext(c) { - null === c && - console.error( - "Expected host context to exist. This error is likely caused by a bug in React. Please file an issue." - ); - return c; - } - function pushHostContainer(fiber, nextRootInstance) { - push(rootInstanceStackCursor, nextRootInstance, fiber); - push(contextFiberStackCursor, fiber, fiber); - push(contextStackCursor, null, fiber); - var nextRootContext = nextRootInstance.nodeType; - switch (nextRootContext) { - case 9: - case 11: - nextRootContext = 9 === nextRootContext ? "#document" : "#fragment"; - nextRootInstance = (nextRootInstance = - nextRootInstance.documentElement) - ? (nextRootInstance = nextRootInstance.namespaceURI) - ? getOwnHostContext(nextRootInstance) - : HostContextNamespaceNone - : HostContextNamespaceNone; - break; - default: - if ( - ((nextRootContext = nextRootInstance.tagName), - (nextRootInstance = nextRootInstance.namespaceURI)) - ) - (nextRootInstance = getOwnHostContext(nextRootInstance)), - (nextRootInstance = getChildHostContextProd( - nextRootInstance, - nextRootContext - )); - else - switch (nextRootContext) { - case "svg": - nextRootInstance = HostContextNamespaceSvg; - break; - case "math": - nextRootInstance = HostContextNamespaceMath; - break; - default: - nextRootInstance = HostContextNamespaceNone; - } - } - nextRootContext = nextRootContext.toLowerCase(); - nextRootContext = updatedAncestorInfoDev(null, nextRootContext); - nextRootContext = { - context: nextRootInstance, - ancestorInfo: nextRootContext - }; - pop(contextStackCursor, fiber); - push(contextStackCursor, nextRootContext, fiber); - } - function popHostContainer(fiber) { - pop(contextStackCursor, fiber); - pop(contextFiberStackCursor, fiber); - pop(rootInstanceStackCursor, fiber); - } - function getHostContext() { - return requiredContext(contextStackCursor.current); - } - function pushHostContext(fiber) { - null !== fiber.memoizedState && - push(hostTransitionProviderCursor, fiber, fiber); - var context = requiredContext(contextStackCursor.current); - var type = fiber.type; - var nextContext = getChildHostContextProd(context.context, type); - type = updatedAncestorInfoDev(context.ancestorInfo, type); - nextContext = { context: nextContext, ancestorInfo: type }; - context !== nextContext && - (push(contextFiberStackCursor, fiber, fiber), - push(contextStackCursor, nextContext, fiber)); - } - function popHostContext(fiber) { - contextFiberStackCursor.current === fiber && - (pop(contextStackCursor, fiber), pop(contextFiberStackCursor, fiber)); - hostTransitionProviderCursor.current === fiber && - (pop(hostTransitionProviderCursor, fiber), - (HostTransitionContext._currentValue = NotPendingTransition)); - } - function typeName(value) { - return ( - ("function" === typeof Symbol && - Symbol.toStringTag && - value[Symbol.toStringTag]) || - value.constructor.name || - "Object" - ); - } - function willCoercionThrow(value) { - try { - return testStringCoercion(value), !1; - } catch (e) { - return !0; - } - } - function testStringCoercion(value) { - return "" + value; - } - function checkAttributeStringCoercion(value, attributeName) { - if (willCoercionThrow(value)) - return ( - console.error( - "The provided `%s` attribute is an unsupported type %s. This value must be coerced to a string before using it here.", - attributeName, - typeName(value) - ), - testStringCoercion(value) - ); - } - function checkCSSPropertyStringCoercion(value, propName) { - if (willCoercionThrow(value)) - return ( - console.error( - "The provided `%s` CSS property is an unsupported type %s. This value must be coerced to a string before using it here.", - propName, - typeName(value) - ), - testStringCoercion(value) - ); - } - function checkFormFieldValueStringCoercion(value) { - if (willCoercionThrow(value)) - return ( - console.error( - "Form field values (value, checked, defaultValue, or defaultChecked props) must be strings, not %s. This value must be coerced to a string before using it here.", - typeName(value) - ), - testStringCoercion(value) - ); - } - function injectInternals(internals) { - if ("undefined" === typeof __REACT_DEVTOOLS_GLOBAL_HOOK__) return !1; - var hook = __REACT_DEVTOOLS_GLOBAL_HOOK__; - if (hook.isDisabled) return !0; - if (!hook.supportsFiber) - return ( - console.error( - "The installed version of React DevTools is too old and will not work with the current version of React. Please update React DevTools. https://react.dev/link/react-devtools" - ), - !0 - ); - try { - (rendererID = hook.inject(internals)), (injectedHook = hook); - } catch (err) { - console.error("React instrumentation encountered an error: %s.", err); - } - return hook.checkDCE ? !0 : !1; - } - function setIsStrictModeForDevtools(newIsStrictMode) { - "function" === typeof log$1 && - unstable_setDisableYieldValue(newIsStrictMode); - if (injectedHook && "function" === typeof injectedHook.setStrictMode) - try { - injectedHook.setStrictMode(rendererID, newIsStrictMode); - } catch (err) { - hasLoggedError || - ((hasLoggedError = !0), - console.error( - "React instrumentation encountered an error: %s", - err - )); - } - } - function injectProfilingHooks(profilingHooks) { - injectedProfilingHooks = profilingHooks; - } - function markCommitStopped() { - null !== injectedProfilingHooks && - "function" === typeof injectedProfilingHooks.markCommitStopped && - injectedProfilingHooks.markCommitStopped(); - } - function markComponentRenderStarted(fiber) { - null !== injectedProfilingHooks && - "function" === - typeof injectedProfilingHooks.markComponentRenderStarted && - injectedProfilingHooks.markComponentRenderStarted(fiber); - } - function markComponentRenderStopped() { - null !== injectedProfilingHooks && - "function" === - typeof injectedProfilingHooks.markComponentRenderStopped && - injectedProfilingHooks.markComponentRenderStopped(); - } - function markRenderStarted(lanes) { - null !== injectedProfilingHooks && - "function" === typeof injectedProfilingHooks.markRenderStarted && - injectedProfilingHooks.markRenderStarted(lanes); - } - function markRenderStopped() { - null !== injectedProfilingHooks && - "function" === typeof injectedProfilingHooks.markRenderStopped && - injectedProfilingHooks.markRenderStopped(); - } - function markStateUpdateScheduled(fiber, lane) { - null !== injectedProfilingHooks && - "function" === typeof injectedProfilingHooks.markStateUpdateScheduled && - injectedProfilingHooks.markStateUpdateScheduled(fiber, lane); - } - function clz32Fallback(x) { - x >>>= 0; - return 0 === x ? 32 : (31 - ((log(x) / LN2) | 0)) | 0; - } - function getLabelForLane(lane) { - if (lane & 1) return "SyncHydrationLane"; - if (lane & 2) return "Sync"; - if (lane & 4) return "InputContinuousHydration"; - if (lane & 8) return "InputContinuous"; - if (lane & 16) return "DefaultHydration"; - if (lane & 32) return "Default"; - if (lane & 128) return "TransitionHydration"; - if (lane & 4194048) return "Transition"; - if (lane & 62914560) return "Retry"; - if (lane & 67108864) return "SelectiveHydration"; - if (lane & 134217728) return "IdleHydration"; - if (lane & 268435456) return "Idle"; - if (lane & 536870912) return "Offscreen"; - if (lane & 1073741824) return "Deferred"; - } - function getHighestPriorityLanes(lanes) { - var pendingSyncLanes = lanes & 42; - if (0 !== pendingSyncLanes) return pendingSyncLanes; - switch (lanes & -lanes) { - case 1: - return 1; - case 2: - return 2; - case 4: - return 4; - case 8: - return 8; - case 16: - return 16; - case 32: - return 32; - case 64: - return 64; - case 128: - return 128; - case 256: - case 512: - case 1024: - case 2048: - case 4096: - case 8192: - case 16384: - case 32768: - case 65536: - case 131072: - case 262144: - case 524288: - case 1048576: - case 2097152: - return lanes & 4194048; - case 4194304: - case 8388608: - case 16777216: - case 33554432: - return lanes & 62914560; - case 67108864: - return 67108864; - case 134217728: - return 134217728; - case 268435456: - return 268435456; - case 536870912: - return 536870912; - case 1073741824: - return 0; - default: - return ( - console.error( - "Should have found matching lanes. This is a bug in React." - ), - lanes - ); - } - } - function getNextLanes(root, wipLanes, rootHasPendingCommit) { - var pendingLanes = root.pendingLanes; - if (0 === pendingLanes) return 0; - var nextLanes = 0, - suspendedLanes = root.suspendedLanes, - pingedLanes = root.pingedLanes; - root = root.warmLanes; - var nonIdlePendingLanes = pendingLanes & 134217727; - 0 !== nonIdlePendingLanes - ? ((pendingLanes = nonIdlePendingLanes & ~suspendedLanes), - 0 !== pendingLanes - ? (nextLanes = getHighestPriorityLanes(pendingLanes)) - : ((pingedLanes &= nonIdlePendingLanes), - 0 !== pingedLanes - ? (nextLanes = getHighestPriorityLanes(pingedLanes)) - : rootHasPendingCommit || - ((rootHasPendingCommit = nonIdlePendingLanes & ~root), - 0 !== rootHasPendingCommit && - (nextLanes = - getHighestPriorityLanes(rootHasPendingCommit))))) - : ((nonIdlePendingLanes = pendingLanes & ~suspendedLanes), - 0 !== nonIdlePendingLanes - ? (nextLanes = getHighestPriorityLanes(nonIdlePendingLanes)) - : 0 !== pingedLanes - ? (nextLanes = getHighestPriorityLanes(pingedLanes)) - : rootHasPendingCommit || - ((rootHasPendingCommit = pendingLanes & ~root), - 0 !== rootHasPendingCommit && - (nextLanes = getHighestPriorityLanes(rootHasPendingCommit)))); - return 0 === nextLanes - ? 0 - : 0 !== wipLanes && - wipLanes !== nextLanes && - 0 === (wipLanes & suspendedLanes) && - ((suspendedLanes = nextLanes & -nextLanes), - (rootHasPendingCommit = wipLanes & -wipLanes), - suspendedLanes >= rootHasPendingCommit || - (32 === suspendedLanes && 0 !== (rootHasPendingCommit & 4194048))) - ? wipLanes - : nextLanes; - } - function checkIfRootIsPrerendering(root, renderLanes) { - return ( - 0 === - (root.pendingLanes & - ~(root.suspendedLanes & ~root.pingedLanes) & - renderLanes) - ); - } - function computeExpirationTime(lane, currentTime) { - switch (lane) { - case 1: - case 2: - case 4: - case 8: - case 64: - return currentTime + 250; - case 16: - case 32: - case 128: - case 256: - case 512: - case 1024: - case 2048: - case 4096: - case 8192: - case 16384: - case 32768: - case 65536: - case 131072: - case 262144: - case 524288: - case 1048576: - case 2097152: - return currentTime + 5e3; - case 4194304: - case 8388608: - case 16777216: - case 33554432: - return -1; - case 67108864: - case 134217728: - case 268435456: - case 536870912: - case 1073741824: - return -1; - default: - return ( - console.error( - "Should have found matching lanes. This is a bug in React." - ), - -1 - ); - } - } - function claimNextTransitionLane() { - var lane = nextTransitionLane; - nextTransitionLane <<= 1; - 0 === (nextTransitionLane & 4194048) && (nextTransitionLane = 256); - return lane; - } - function claimNextRetryLane() { - var lane = nextRetryLane; - nextRetryLane <<= 1; - 0 === (nextRetryLane & 62914560) && (nextRetryLane = 4194304); - return lane; - } - function createLaneMap(initial) { - for (var laneMap = [], i = 0; 31 > i; i++) laneMap.push(initial); - return laneMap; - } - function markRootUpdated$1(root, updateLane) { - root.pendingLanes |= updateLane; - 268435456 !== updateLane && - ((root.suspendedLanes = 0), - (root.pingedLanes = 0), - (root.warmLanes = 0)); - } - function markRootFinished( - root, - finishedLanes, - remainingLanes, - spawnedLane, - updatedLanes, - suspendedRetryLanes - ) { - var previouslyPendingLanes = root.pendingLanes; - root.pendingLanes = remainingLanes; - root.suspendedLanes = 0; - root.pingedLanes = 0; - root.warmLanes = 0; - root.expiredLanes &= remainingLanes; - root.entangledLanes &= remainingLanes; - root.errorRecoveryDisabledLanes &= remainingLanes; - root.shellSuspendCounter = 0; - var entanglements = root.entanglements, - expirationTimes = root.expirationTimes, - hiddenUpdates = root.hiddenUpdates; - for ( - remainingLanes = previouslyPendingLanes & ~remainingLanes; - 0 < remainingLanes; - - ) { - var index = 31 - clz32(remainingLanes), - lane = 1 << index; - entanglements[index] = 0; - expirationTimes[index] = -1; - var hiddenUpdatesForLane = hiddenUpdates[index]; - if (null !== hiddenUpdatesForLane) - for ( - hiddenUpdates[index] = null, index = 0; - index < hiddenUpdatesForLane.length; - index++ - ) { - var update = hiddenUpdatesForLane[index]; - null !== update && (update.lane &= -536870913); - } - remainingLanes &= ~lane; - } - 0 !== spawnedLane && markSpawnedDeferredLane(root, spawnedLane, 0); - 0 !== suspendedRetryLanes && - 0 === updatedLanes && - 0 !== root.tag && - (root.suspendedLanes |= - suspendedRetryLanes & ~(previouslyPendingLanes & ~finishedLanes)); - } - function markSpawnedDeferredLane(root, spawnedLane, entangledLanes) { - root.pendingLanes |= spawnedLane; - root.suspendedLanes &= ~spawnedLane; - var spawnedLaneIndex = 31 - clz32(spawnedLane); - root.entangledLanes |= spawnedLane; - root.entanglements[spawnedLaneIndex] = - root.entanglements[spawnedLaneIndex] | - 1073741824 | - (entangledLanes & 4194090); - } - function markRootEntangled(root, entangledLanes) { - var rootEntangledLanes = (root.entangledLanes |= entangledLanes); - for (root = root.entanglements; rootEntangledLanes; ) { - var index = 31 - clz32(rootEntangledLanes), - lane = 1 << index; - (lane & entangledLanes) | (root[index] & entangledLanes) && - (root[index] |= entangledLanes); - rootEntangledLanes &= ~lane; - } - } - function getBumpedLaneForHydrationByLane(lane) { - switch (lane) { - case 2: - lane = 1; - break; - case 8: - lane = 4; - break; - case 32: - lane = 16; - break; - case 256: - case 512: - case 1024: - case 2048: - case 4096: - case 8192: - case 16384: - case 32768: - case 65536: - case 131072: - case 262144: - case 524288: - case 1048576: - case 2097152: - case 4194304: - case 8388608: - case 16777216: - case 33554432: - lane = 128; - break; - case 268435456: - lane = 134217728; - break; - default: - lane = 0; - } - return lane; - } - function addFiberToLanesMap(root, fiber, lanes) { - if (isDevToolsPresent) - for (root = root.pendingUpdatersLaneMap; 0 < lanes; ) { - var index = 31 - clz32(lanes), - lane = 1 << index; - root[index].add(fiber); - lanes &= ~lane; - } - } - function movePendingFibersToMemoized(root, lanes) { - if (isDevToolsPresent) - for ( - var pendingUpdatersLaneMap = root.pendingUpdatersLaneMap, - memoizedUpdaters = root.memoizedUpdaters; - 0 < lanes; - - ) { - var index = 31 - clz32(lanes); - root = 1 << index; - index = pendingUpdatersLaneMap[index]; - 0 < index.size && - (index.forEach(function (fiber) { - var alternate = fiber.alternate; - (null !== alternate && memoizedUpdaters.has(alternate)) || - memoizedUpdaters.add(fiber); - }), - index.clear()); - lanes &= ~root; - } - } - function lanesToEventPriority(lanes) { - lanes &= -lanes; - return 0 !== DiscreteEventPriority && DiscreteEventPriority < lanes - ? 0 !== ContinuousEventPriority && ContinuousEventPriority < lanes - ? 0 !== (lanes & 134217727) - ? DefaultEventPriority - : IdleEventPriority - : ContinuousEventPriority - : DiscreteEventPriority; - } - function resolveUpdatePriority() { - var updatePriority = ReactDOMSharedInternals.p; - if (0 !== updatePriority) return updatePriority; - updatePriority = window.event; - return void 0 === updatePriority - ? DefaultEventPriority - : getEventPriority(updatePriority.type); - } - function runWithPriority(priority, fn) { - var previousPriority = ReactDOMSharedInternals.p; - try { - return (ReactDOMSharedInternals.p = priority), fn(); - } finally { - ReactDOMSharedInternals.p = previousPriority; - } - } - function detachDeletedInstance(node) { - delete node[internalInstanceKey]; - delete node[internalPropsKey]; - delete node[internalEventHandlersKey]; - delete node[internalEventHandlerListenersKey]; - delete node[internalEventHandlesSetKey]; - } - function getClosestInstanceFromNode(targetNode) { - var targetInst = targetNode[internalInstanceKey]; - if (targetInst) return targetInst; - for (var parentNode = targetNode.parentNode; parentNode; ) { - if ( - (targetInst = - parentNode[internalContainerInstanceKey] || - parentNode[internalInstanceKey]) - ) { - parentNode = targetInst.alternate; - if ( - null !== targetInst.child || - (null !== parentNode && null !== parentNode.child) - ) - for ( - targetNode = getParentSuspenseInstance(targetNode); - null !== targetNode; - - ) { - if ((parentNode = targetNode[internalInstanceKey])) - return parentNode; - targetNode = getParentSuspenseInstance(targetNode); - } - return targetInst; - } - targetNode = parentNode; - parentNode = targetNode.parentNode; - } - return null; - } - function getInstanceFromNode(node) { - if ( - (node = node[internalInstanceKey] || node[internalContainerInstanceKey]) - ) { - var tag = node.tag; - if ( - 5 === tag || - 6 === tag || - 13 === tag || - 26 === tag || - 27 === tag || - 3 === tag - ) - return node; - } - return null; - } - function getNodeFromInstance(inst) { - var tag = inst.tag; - if (5 === tag || 26 === tag || 27 === tag || 6 === tag) - return inst.stateNode; - throw Error("getNodeFromInstance: Invalid argument."); - } - function getResourcesFromRoot(root) { - var resources = root[internalRootNodeResourcesKey]; - resources || - (resources = root[internalRootNodeResourcesKey] = - { hoistableStyles: new Map(), hoistableScripts: new Map() }); - return resources; - } - function markNodeAsHoistable(node) { - node[internalHoistableMarker] = !0; - } - function registerTwoPhaseEvent(registrationName, dependencies) { - registerDirectEvent(registrationName, dependencies); - registerDirectEvent(registrationName + "Capture", dependencies); - } - function registerDirectEvent(registrationName, dependencies) { - registrationNameDependencies[registrationName] && - console.error( - "EventRegistry: More than one plugin attempted to publish the same registration name, `%s`.", - registrationName - ); - registrationNameDependencies[registrationName] = dependencies; - var lowerCasedName = registrationName.toLowerCase(); - possibleRegistrationNames[lowerCasedName] = registrationName; - "onDoubleClick" === registrationName && - (possibleRegistrationNames.ondblclick = registrationName); - for ( - registrationName = 0; - registrationName < dependencies.length; - registrationName++ - ) - allNativeEvents.add(dependencies[registrationName]); - } - function checkControlledValueProps(tagName, props) { - hasReadOnlyValue[props.type] || - props.onChange || - props.onInput || - props.readOnly || - props.disabled || - null == props.value || - ("select" === tagName - ? console.error( - "You provided a `value` prop to a form field without an `onChange` handler. This will render a read-only field. If the field should be mutable use `defaultValue`. Otherwise, set `onChange`." - ) - : console.error( - "You provided a `value` prop to a form field without an `onChange` handler. This will render a read-only field. If the field should be mutable use `defaultValue`. Otherwise, set either `onChange` or `readOnly`." - )); - props.onChange || - props.readOnly || - props.disabled || - null == props.checked || - console.error( - "You provided a `checked` prop to a form field without an `onChange` handler. This will render a read-only field. If the field should be mutable use `defaultChecked`. Otherwise, set either `onChange` or `readOnly`." - ); - } - function isAttributeNameSafe(attributeName) { - if (hasOwnProperty.call(validatedAttributeNameCache, attributeName)) - return !0; - if (hasOwnProperty.call(illegalAttributeNameCache, attributeName)) - return !1; - if (VALID_ATTRIBUTE_NAME_REGEX.test(attributeName)) - return (validatedAttributeNameCache[attributeName] = !0); - illegalAttributeNameCache[attributeName] = !0; - console.error("Invalid attribute name: `%s`", attributeName); - return !1; - } - function getValueForAttributeOnCustomComponent(node, name, expected) { - if (isAttributeNameSafe(name)) { - if (!node.hasAttribute(name)) { - switch (typeof expected) { - case "symbol": - case "object": - return expected; - case "function": - return expected; - case "boolean": - if (!1 === expected) return expected; - } - return void 0 === expected ? void 0 : null; - } - node = node.getAttribute(name); - if ("" === node && !0 === expected) return !0; - checkAttributeStringCoercion(expected, name); - return node === "" + expected ? expected : node; - } - } - function setValueForAttribute(node, name, value) { - if (isAttributeNameSafe(name)) - if (null === value) node.removeAttribute(name); - else { - switch (typeof value) { - case "undefined": - case "function": - case "symbol": - node.removeAttribute(name); - return; - case "boolean": - var prefix = name.toLowerCase().slice(0, 5); - if ("data-" !== prefix && "aria-" !== prefix) { - node.removeAttribute(name); - return; - } - } - checkAttributeStringCoercion(value, name); - node.setAttribute(name, "" + value); - } - } - function setValueForKnownAttribute(node, name, value) { - if (null === value) node.removeAttribute(name); - else { - switch (typeof value) { - case "undefined": - case "function": - case "symbol": - case "boolean": - node.removeAttribute(name); - return; - } - checkAttributeStringCoercion(value, name); - node.setAttribute(name, "" + value); - } - } - function setValueForNamespacedAttribute(node, namespace, name, value) { - if (null === value) node.removeAttribute(name); - else { - switch (typeof value) { - case "undefined": - case "function": - case "symbol": - case "boolean": - node.removeAttribute(name); - return; - } - checkAttributeStringCoercion(value, name); - node.setAttributeNS(namespace, name, "" + value); - } - } - function disabledLog() {} - function disableLogs() { - if (0 === disabledDepth) { - prevLog = console.log; - prevInfo = console.info; - prevWarn = console.warn; - prevError = console.error; - prevGroup = console.group; - prevGroupCollapsed = console.groupCollapsed; - prevGroupEnd = console.groupEnd; - var props = { - configurable: !0, - enumerable: !0, - value: disabledLog, - writable: !0 - }; - Object.defineProperties(console, { - info: props, - log: props, - warn: props, - error: props, - group: props, - groupCollapsed: props, - groupEnd: props - }); - } - disabledDepth++; - } - function reenableLogs() { - disabledDepth--; - if (0 === disabledDepth) { - var props = { configurable: !0, enumerable: !0, writable: !0 }; - Object.defineProperties(console, { - log: assign({}, props, { value: prevLog }), - info: assign({}, props, { value: prevInfo }), - warn: assign({}, props, { value: prevWarn }), - error: assign({}, props, { value: prevError }), - group: assign({}, props, { value: prevGroup }), - groupCollapsed: assign({}, props, { value: prevGroupCollapsed }), - groupEnd: assign({}, props, { value: prevGroupEnd }) - }); - } - 0 > disabledDepth && - console.error( - "disabledDepth fell below zero. This is a bug in React. Please file an issue." - ); - } - function describeBuiltInComponentFrame(name) { - if (void 0 === prefix) - try { - throw Error(); - } catch (x) { - var match = x.stack.trim().match(/\n( *(at )?)/); - prefix = (match && match[1]) || ""; - suffix = - -1 < x.stack.indexOf("\n at") - ? " ()" - : -1 < x.stack.indexOf("@") - ? "@unknown:0:0" - : ""; - } - return "\n" + prefix + name + suffix; - } - function describeNativeComponentFrame(fn, construct) { - if (!fn || reentry) return ""; - var frame = componentFrameCache.get(fn); - if (void 0 !== frame) return frame; - reentry = !0; - frame = Error.prepareStackTrace; - Error.prepareStackTrace = void 0; - var previousDispatcher = null; - previousDispatcher = ReactSharedInternals.H; - ReactSharedInternals.H = null; - disableLogs(); - try { - var RunInRootFrame = { - DetermineComponentFrameRoot: function () { - try { - if (construct) { - var Fake = function () { - throw Error(); - }; - Object.defineProperty(Fake.prototype, "props", { - set: function () { - throw Error(); - } - }); - if ("object" === typeof Reflect && Reflect.construct) { - try { - Reflect.construct(Fake, []); - } catch (x) { - var control = x; - } - Reflect.construct(fn, [], Fake); - } else { - try { - Fake.call(); - } catch (x$0) { - control = x$0; - } - fn.call(Fake.prototype); - } - } else { - try { - throw Error(); - } catch (x$1) { - control = x$1; - } - (Fake = fn()) && - "function" === typeof Fake.catch && - Fake.catch(function () {}); - } - } catch (sample) { - if (sample && control && "string" === typeof sample.stack) - return [sample.stack, control.stack]; - } - return [null, null]; - } - }; - RunInRootFrame.DetermineComponentFrameRoot.displayName = - "DetermineComponentFrameRoot"; - var namePropDescriptor = Object.getOwnPropertyDescriptor( - RunInRootFrame.DetermineComponentFrameRoot, - "name" - ); - namePropDescriptor && - namePropDescriptor.configurable && - Object.defineProperty( - RunInRootFrame.DetermineComponentFrameRoot, - "name", - { value: "DetermineComponentFrameRoot" } - ); - var _RunInRootFrame$Deter = - RunInRootFrame.DetermineComponentFrameRoot(), - sampleStack = _RunInRootFrame$Deter[0], - controlStack = _RunInRootFrame$Deter[1]; - if (sampleStack && controlStack) { - var sampleLines = sampleStack.split("\n"), - controlLines = controlStack.split("\n"); - for ( - _RunInRootFrame$Deter = namePropDescriptor = 0; - namePropDescriptor < sampleLines.length && - !sampleLines[namePropDescriptor].includes( - "DetermineComponentFrameRoot" - ); - - ) - namePropDescriptor++; - for ( - ; - _RunInRootFrame$Deter < controlLines.length && - !controlLines[_RunInRootFrame$Deter].includes( - "DetermineComponentFrameRoot" - ); - - ) - _RunInRootFrame$Deter++; - if ( - namePropDescriptor === sampleLines.length || - _RunInRootFrame$Deter === controlLines.length - ) - for ( - namePropDescriptor = sampleLines.length - 1, - _RunInRootFrame$Deter = controlLines.length - 1; - 1 <= namePropDescriptor && - 0 <= _RunInRootFrame$Deter && - sampleLines[namePropDescriptor] !== - controlLines[_RunInRootFrame$Deter]; - - ) - _RunInRootFrame$Deter--; - for ( - ; - 1 <= namePropDescriptor && 0 <= _RunInRootFrame$Deter; - namePropDescriptor--, _RunInRootFrame$Deter-- - ) - if ( - sampleLines[namePropDescriptor] !== - controlLines[_RunInRootFrame$Deter] - ) { - if (1 !== namePropDescriptor || 1 !== _RunInRootFrame$Deter) { - do - if ( - (namePropDescriptor--, - _RunInRootFrame$Deter--, - 0 > _RunInRootFrame$Deter || - sampleLines[namePropDescriptor] !== - controlLines[_RunInRootFrame$Deter]) - ) { - var _frame = - "\n" + - sampleLines[namePropDescriptor].replace( - " at new ", - " at " - ); - fn.displayName && - _frame.includes("") && - (_frame = _frame.replace("", fn.displayName)); - "function" === typeof fn && - componentFrameCache.set(fn, _frame); - return _frame; - } - while (1 <= namePropDescriptor && 0 <= _RunInRootFrame$Deter); - } - break; - } - } - } finally { - (reentry = !1), - (ReactSharedInternals.H = previousDispatcher), - reenableLogs(), - (Error.prepareStackTrace = frame); - } - sampleLines = (sampleLines = fn ? fn.displayName || fn.name : "") - ? describeBuiltInComponentFrame(sampleLines) - : ""; - "function" === typeof fn && componentFrameCache.set(fn, sampleLines); - return sampleLines; - } - function formatOwnerStack(error) { - var prevPrepareStackTrace = Error.prepareStackTrace; - Error.prepareStackTrace = void 0; - error = error.stack; - Error.prepareStackTrace = prevPrepareStackTrace; - error.startsWith("Error: react-stack-top-frame\n") && - (error = error.slice(29)); - prevPrepareStackTrace = error.indexOf("\n"); - -1 !== prevPrepareStackTrace && - (error = error.slice(prevPrepareStackTrace + 1)); - prevPrepareStackTrace = error.indexOf("react-stack-bottom-frame"); - -1 !== prevPrepareStackTrace && - (prevPrepareStackTrace = error.lastIndexOf( - "\n", - prevPrepareStackTrace - )); - if (-1 !== prevPrepareStackTrace) - error = error.slice(0, prevPrepareStackTrace); - else return ""; - return error; - } - function describeFiber(fiber) { - switch (fiber.tag) { - case 26: - case 27: - case 5: - return describeBuiltInComponentFrame(fiber.type); - case 16: - return describeBuiltInComponentFrame("Lazy"); - case 13: - return describeBuiltInComponentFrame("Suspense"); - case 19: - return describeBuiltInComponentFrame("SuspenseList"); - case 0: - case 15: - return describeNativeComponentFrame(fiber.type, !1); - case 11: - return describeNativeComponentFrame(fiber.type.render, !1); - case 1: - return describeNativeComponentFrame(fiber.type, !0); - case 31: - return describeBuiltInComponentFrame("Activity"); - default: - return ""; - } - } - function getStackByFiberInDevAndProd(workInProgress) { - try { - var info = ""; - do { - info += describeFiber(workInProgress); - var debugInfo = workInProgress._debugInfo; - if (debugInfo) - for (var i = debugInfo.length - 1; 0 <= i; i--) { - var entry = debugInfo[i]; - if ("string" === typeof entry.name) { - var JSCompiler_temp_const = info, - env = entry.env; - var JSCompiler_inline_result = describeBuiltInComponentFrame( - entry.name + (env ? " [" + env + "]" : "") - ); - info = JSCompiler_temp_const + JSCompiler_inline_result; - } - } - workInProgress = workInProgress.return; - } while (workInProgress); - return info; - } catch (x) { - return "\nError generating stack: " + x.message + "\n" + x.stack; - } - } - function describeFunctionComponentFrameWithoutLineNumber(fn) { - return (fn = fn ? fn.displayName || fn.name : "") - ? describeBuiltInComponentFrame(fn) - : ""; - } - function getCurrentFiberOwnerNameInDevOrNull() { - if (null === current) return null; - var owner = current._debugOwner; - return null != owner ? getComponentNameFromOwner(owner) : null; - } - function getCurrentFiberStackInDev() { - if (null === current) return ""; - var workInProgress = current; - try { - var info = ""; - 6 === workInProgress.tag && (workInProgress = workInProgress.return); - switch (workInProgress.tag) { - case 26: - case 27: - case 5: - info += describeBuiltInComponentFrame(workInProgress.type); - break; - case 13: - info += describeBuiltInComponentFrame("Suspense"); - break; - case 19: - info += describeBuiltInComponentFrame("SuspenseList"); - break; - case 31: - info += describeBuiltInComponentFrame("Activity"); - break; - case 30: - case 0: - case 15: - case 1: - workInProgress._debugOwner || - "" !== info || - (info += describeFunctionComponentFrameWithoutLineNumber( - workInProgress.type - )); - break; - case 11: - workInProgress._debugOwner || - "" !== info || - (info += describeFunctionComponentFrameWithoutLineNumber( - workInProgress.type.render - )); - } - for (; workInProgress; ) - if ("number" === typeof workInProgress.tag) { - var fiber = workInProgress; - workInProgress = fiber._debugOwner; - var debugStack = fiber._debugStack; - workInProgress && - debugStack && - ("string" !== typeof debugStack && - (fiber._debugStack = debugStack = formatOwnerStack(debugStack)), - "" !== debugStack && (info += "\n" + debugStack)); - } else if (null != workInProgress.debugStack) { - var ownerStack = workInProgress.debugStack; - (workInProgress = workInProgress.owner) && - ownerStack && - (info += "\n" + formatOwnerStack(ownerStack)); - } else break; - var JSCompiler_inline_result = info; - } catch (x) { - JSCompiler_inline_result = - "\nError generating stack: " + x.message + "\n" + x.stack; - } - return JSCompiler_inline_result; - } - function runWithFiberInDEV(fiber, callback, arg0, arg1, arg2, arg3, arg4) { - var previousFiber = current; - setCurrentFiber(fiber); - try { - return null !== fiber && fiber._debugTask - ? fiber._debugTask.run( - callback.bind(null, arg0, arg1, arg2, arg3, arg4) - ) - : callback(arg0, arg1, arg2, arg3, arg4); - } finally { - setCurrentFiber(previousFiber); - } - throw Error( - "runWithFiberInDEV should never be called in production. This is a bug in React." - ); - } - function setCurrentFiber(fiber) { - ReactSharedInternals.getCurrentStack = - null === fiber ? null : getCurrentFiberStackInDev; - isRendering = !1; - current = fiber; - } - function getToStringValue(value) { - switch (typeof value) { - case "bigint": - case "boolean": - case "number": - case "string": - case "undefined": - return value; - case "object": - return checkFormFieldValueStringCoercion(value), value; - default: - return ""; - } - } - function isCheckable(elem) { - var type = elem.type; - return ( - (elem = elem.nodeName) && - "input" === elem.toLowerCase() && - ("checkbox" === type || "radio" === type) - ); - } - function trackValueOnNode(node) { - var valueField = isCheckable(node) ? "checked" : "value", - descriptor = Object.getOwnPropertyDescriptor( - node.constructor.prototype, - valueField - ); - checkFormFieldValueStringCoercion(node[valueField]); - var currentValue = "" + node[valueField]; - if ( - !node.hasOwnProperty(valueField) && - "undefined" !== typeof descriptor && - "function" === typeof descriptor.get && - "function" === typeof descriptor.set - ) { - var get = descriptor.get, - set = descriptor.set; - Object.defineProperty(node, valueField, { - configurable: !0, - get: function () { - return get.call(this); - }, - set: function (value) { - checkFormFieldValueStringCoercion(value); - currentValue = "" + value; - set.call(this, value); - } - }); - Object.defineProperty(node, valueField, { - enumerable: descriptor.enumerable - }); - return { - getValue: function () { - return currentValue; - }, - setValue: function (value) { - checkFormFieldValueStringCoercion(value); - currentValue = "" + value; - }, - stopTracking: function () { - node._valueTracker = null; - delete node[valueField]; - } - }; - } - } - function track(node) { - node._valueTracker || (node._valueTracker = trackValueOnNode(node)); - } - function updateValueIfChanged(node) { - if (!node) return !1; - var tracker = node._valueTracker; - if (!tracker) return !0; - var lastValue = tracker.getValue(); - var value = ""; - node && - (value = isCheckable(node) - ? node.checked - ? "true" - : "false" - : node.value); - node = value; - return node !== lastValue ? (tracker.setValue(node), !0) : !1; - } - function getActiveElement(doc) { - doc = doc || ("undefined" !== typeof document ? document : void 0); - if ("undefined" === typeof doc) return null; - try { - return doc.activeElement || doc.body; - } catch (e) { - return doc.body; - } - } - function escapeSelectorAttributeValueInsideDoubleQuotes(value) { - return value.replace( - escapeSelectorAttributeValueInsideDoubleQuotesRegex, - function (ch) { - return "\\" + ch.charCodeAt(0).toString(16) + " "; - } - ); - } - function validateInputProps(element, props) { - void 0 === props.checked || - void 0 === props.defaultChecked || - didWarnCheckedDefaultChecked || - (console.error( - "%s contains an input of type %s with both checked and defaultChecked props. Input elements must be either controlled or uncontrolled (specify either the checked prop, or the defaultChecked prop, but not both). Decide between using a controlled or uncontrolled input element and remove one of these props. More info: https://react.dev/link/controlled-components", - getCurrentFiberOwnerNameInDevOrNull() || "A component", - props.type - ), - (didWarnCheckedDefaultChecked = !0)); - void 0 === props.value || - void 0 === props.defaultValue || - didWarnValueDefaultValue$1 || - (console.error( - "%s contains an input of type %s with both value and defaultValue props. Input elements must be either controlled or uncontrolled (specify either the value prop, or the defaultValue prop, but not both). Decide between using a controlled or uncontrolled input element and remove one of these props. More info: https://react.dev/link/controlled-components", - getCurrentFiberOwnerNameInDevOrNull() || "A component", - props.type - ), - (didWarnValueDefaultValue$1 = !0)); - } - function updateInput( - element, - value, - defaultValue, - lastDefaultValue, - checked, - defaultChecked, - type, - name - ) { - element.name = ""; - null != type && - "function" !== typeof type && - "symbol" !== typeof type && - "boolean" !== typeof type - ? (checkAttributeStringCoercion(type, "type"), (element.type = type)) - : element.removeAttribute("type"); - if (null != value) - if ("number" === type) { - if ((0 === value && "" === element.value) || element.value != value) - element.value = "" + getToStringValue(value); - } else - element.value !== "" + getToStringValue(value) && - (element.value = "" + getToStringValue(value)); - else - ("submit" !== type && "reset" !== type) || - element.removeAttribute("value"); - null != value - ? setDefaultValue(element, type, getToStringValue(value)) - : null != defaultValue - ? setDefaultValue(element, type, getToStringValue(defaultValue)) - : null != lastDefaultValue && element.removeAttribute("value"); - null == checked && - null != defaultChecked && - (element.defaultChecked = !!defaultChecked); - null != checked && - (element.checked = - checked && - "function" !== typeof checked && - "symbol" !== typeof checked); - null != name && - "function" !== typeof name && - "symbol" !== typeof name && - "boolean" !== typeof name - ? (checkAttributeStringCoercion(name, "name"), - (element.name = "" + getToStringValue(name))) - : element.removeAttribute("name"); - } - function initInput( - element, - value, - defaultValue, - checked, - defaultChecked, - type, - name, - isHydrating - ) { - null != type && - "function" !== typeof type && - "symbol" !== typeof type && - "boolean" !== typeof type && - (checkAttributeStringCoercion(type, "type"), (element.type = type)); - if (null != value || null != defaultValue) { - if ( - !( - ("submit" !== type && "reset" !== type) || - (void 0 !== value && null !== value) - ) - ) - return; - defaultValue = - null != defaultValue ? "" + getToStringValue(defaultValue) : ""; - value = null != value ? "" + getToStringValue(value) : defaultValue; - isHydrating || value === element.value || (element.value = value); - element.defaultValue = value; - } - checked = null != checked ? checked : defaultChecked; - checked = - "function" !== typeof checked && - "symbol" !== typeof checked && - !!checked; - element.checked = isHydrating ? element.checked : !!checked; - element.defaultChecked = !!checked; - null != name && - "function" !== typeof name && - "symbol" !== typeof name && - "boolean" !== typeof name && - (checkAttributeStringCoercion(name, "name"), (element.name = name)); - } - function setDefaultValue(node, type, value) { - ("number" === type && getActiveElement(node.ownerDocument) === node) || - node.defaultValue === "" + value || - (node.defaultValue = "" + value); - } - function validateOptionProps(element, props) { - null == props.value && - ("object" === typeof props.children && null !== props.children - ? React.Children.forEach(props.children, function (child) { - null == child || - "string" === typeof child || - "number" === typeof child || - "bigint" === typeof child || - didWarnInvalidChild || - ((didWarnInvalidChild = !0), - console.error( - "Cannot infer the option value of complex children. Pass a `value` prop or use a plain string as children to