(globalThis.TURBOPACK || (globalThis.TURBOPACK = [])).push([typeof document === "object" ? document.currentScript : undefined, "[project]/lib/book-data.ts [app-client] (ecmascript)", ((__turbopack_context__) => { "use strict"; __turbopack_context__.s([ "AUTHOR_SHARE", ()=>AUTHOR_SHARE, "BASE_BOOK_PRICE", ()=>BASE_BOOK_PRICE, "DISTRIBUTOR_SHARE", ()=>DISTRIBUTOR_SHARE, "FULL_BOOK_PRICE", ()=>FULL_BOOK_PRICE, "PRICE_INCREMENT_PER_SECTION", ()=>PRICE_INCREMENT_PER_SECTION, "SECTION_PRICE", ()=>SECTION_PRICE, "addCustomSection", ()=>addCustomSection, "bookData", ()=>bookData, "getAllSections", ()=>getAllSections, "getChapterBySection", ()=>getChapterBySection, "getFullBookPrice", ()=>getFullBookPrice, "getSectionById", ()=>getSectionById, "isSectionUnlocked", ()=>isSectionUnlocked, "specialSections", ()=>specialSections ]); const BASE_BOOK_PRICE = 9.9; const PRICE_INCREMENT_PER_SECTION = 1; const SECTION_PRICE = 1; const AUTHOR_SHARE = 0.9; const DISTRIBUTOR_SHARE = 0.1; function getFullBookPrice(sectionsCount) { return 9.9; } const bookData = [ { id: "part-1", number: "01", title: "真实的人", subtitle: "人性观察与社交逻辑", chapters: [ { id: "chapter-1", title: "人与人之间的底层逻辑", sections: [ { id: "1.1", title: "自行车荷总:一个行业做到极致是什么样", price: 1, isFree: true, filePath: "book/_第一篇|真实的人/第1章|人与人之间的底层逻辑/1.1 自行车荷总:一个行业做到极致是什么样.md" }, { id: "1.2", title: "老墨:资源整合高手的社交方法", price: 1, isFree: false, unlockAfterDays: 3, filePath: "book/_第一篇|真实的人/第1章|人与人之间的底层逻辑/1.2 老墨:资源整合高手的社交方法.md" }, { id: "1.3", title: "笑声背后的MBTI:为什么ENTJ适合做资源,INTP适合做系统", price: 1, isFree: false, filePath: "book/_第一篇|真实的人/第1章|人与人之间的底层逻辑/1.3 笑声背后的MBTI:为什么ENTJ适合做资源,INTP适合做系统.md" }, { id: "1.4", title: "人性的三角结构:情绪、价值、利益", price: 1, isFree: false, filePath: "book/_第一篇|真实的人/第1章|人与人之间的底层逻辑/1.4 人性的三角结构:情绪、价值、利益.md" }, { id: "1.5", title: "为什么99%的合作死在沟通差而不是能力差", price: 1, isFree: false, filePath: "book/_第一篇|真实的人/第1章|人与人之间的底层逻辑/1.5 为什么99%的合作死在沟通差而不是能力差.md" } ] }, { id: "chapter-2", title: "人性困境案例", sections: [ { id: "2.1", title: "相亲故事:你以为找的是人,实际是在找模式", price: 1, isFree: false, unlockAfterDays: 3, filePath: "book/_第一篇|真实的人/第2章|人性困境案例/2.1 相亲故事:你以为找的是人,实际是在找模式.md" }, { id: "2.2", title: "找工作迷茫者:为什么简历解决不了人生", price: 1, isFree: false, unlockAfterDays: 3, filePath: "book/_第一篇|真实的人/第2章|人性困境案例/2.2 找工作迷茫者:为什么简历解决不了人生.md" }, { id: "2.3", title: "撸运费险:小钱困住大脑的真实心理", price: 1, isFree: false, unlockAfterDays: 3, filePath: "book/_第一篇|真实的人/第2章|人性困境案例/2.3 撸运费险:小钱困住大脑的真实心理.md" }, { id: "2.4", title: "游戏上瘾的年轻人:不是游戏吸引他,是生活没吸引力", price: 1, isFree: false, unlockAfterDays: 3, filePath: "book/_第一篇|真实的人/第2章|人性困境案例/2.4 游戏上瘾的年轻人:不是游戏吸引他,是生活没吸引力.md" }, { id: "2.5", title: "健康焦虑(我的糖尿病经历):疾病是人生的第一次清醒", price: 1, isFree: false, unlockAfterDays: 3, filePath: "book/_第一篇|真实的人/第2章|人性困境案例/2.5 健康焦虑(我的糖尿病经历):疾病是人生的第一次清醒.md" } ] } ] }, { id: "part-2", number: "02", title: "真实的行业", subtitle: "社会运作的底层规则", chapters: [ { id: "chapter-3", title: "电商篇", sections: [ { id: "3.1", title: "电商财税窗口:我错过的第一桶金", price: 1, isFree: false, unlockAfterDays: 3, filePath: "book/第二篇|真实的行业/第3章|电商篇/3.1 电商财税窗口:我错过的第一桶金.md" }, { id: "3.2", title: "3000万流水如何跑出来(退税模式解析)", price: 1, isFree: false, unlockAfterDays: 3, filePath: "book/第二篇|真实的行业/第3章|电商篇/3.2 3000万流水如何跑出来(退税模式解析).md" }, { id: "3.3", title: "供应链之王vs打工人:利润不在前端", price: 1, isFree: false, unlockAfterDays: 3, filePath: "book/第二篇|真实的行业/第3章|电商篇/3.3 供应链之王 vs 打工人:利润不在前端.md" }, { id: "3.4", title: "社区团购的底层逻辑", price: 1, isFree: false, unlockAfterDays: 3, filePath: "book/第二篇|真实的行业/第3章|电商篇/3.4 社区团购的底层逻辑.md" }, { id: "3.5", title: "跨境电商与退税套利", price: 1, isFree: false, unlockAfterDays: 3, filePath: "book/第二篇|真实的行业/第3章|电商篇/3.5 跨境电商与退税套利.md" } ] }, { id: "chapter-4", title: "内容商业篇", sections: [ { id: "4.1", title: "旅游号:30天10万粉的真实逻辑", price: 1, isFree: false, unlockAfterDays: 3, filePath: "book/第二篇|真实的行业/第4章|内容商业篇/4.1 旅游号:30天10万粉的真实逻辑.md" }, { id: "4.2", title: "做号工厂:如何让一个号变成一个机器", price: 1, isFree: false, unlockAfterDays: 3, filePath: "book/第二篇|真实的行业/第4章|内容商业篇/4.2 做号工厂:如何让一个号变成一个机器.md" }, { id: "4.3", title: "情绪内容为什么比专业内容更赚钱", price: 1, isFree: false, unlockAfterDays: 3, filePath: "book/第二篇|真实的行业/第4章|内容商业篇/4.3 情绪内容为什么比专业内容更赚钱.md" }, { id: "4.4", title: "猫与宠物号:为什么宠物赛道永不过时", price: 1, isFree: false, unlockAfterDays: 3, filePath: "book/第二篇|真实的行业/第4章|内容商业篇/4.4 猫与宠物号:为什么宠物赛道永不过时.md" }, { id: "4.5", title: "直播间里的三种人:演员、技术工、系统流", price: 1, isFree: false, unlockAfterDays: 3, filePath: "book/第二篇|真实的行业/第4章|内容商业篇/4.5 直播间里的三种人:演员、技术工、系统流.md" } ] }, { id: "chapter-5", title: "传统行业篇", sections: [ { id: "5.1", title: "羽毛球馆:为什么体育培训是最稳定的现金流", price: 1, isFree: false, unlockAfterDays: 3, filePath: "book/第二篇|真实的行业/第5章|传统行业篇/5.1 羽毛球馆:为什么体育培训是最稳定的现金流.md" }, { id: "5.2", title: "旅游供应链:资源越老越值钱", price: 1, isFree: false, unlockAfterDays: 3, filePath: "book/第二篇|真实的行业/第5章|传统行业篇/5.2 旅游供应链:资源越老越值钱.md" }, { id: "5.3", title: "景区联盟:门票不是目的,是流量入口", price: 1, isFree: false, unlockAfterDays: 3, filePath: "book/第二篇|真实的行业/第5章|传统行业篇/5.3 景区联盟:门票不是目的,是流量入口.md" }, { id: "5.4", title: "拍卖行抱朴:我人生错过的4件大钱机会(完整版)", price: 1, isFree: false, unlockAfterDays: 3, filePath: "book/第二篇|真实的行业/第5章|传统行业篇/5.4 拍卖行抱朴:我人生错过的4件大钱机会(完整版).md" }, { id: "5.5", title: "飞机票供应链:为什么越便宜越亏", price: 1, isFree: false, unlockAfterDays: 3, filePath: "book/第二篇|真实的行业/第5章|传统行业篇/5.5 飞机票供应链:为什么越便宜越亏.md" } ] } ] }, { id: "part-3", number: "03", title: "真实的错误", subtitle: "错过机会比失败更贵", chapters: [ { id: "chapter-6", title: "我人生错过的4件大钱", sections: [ { id: "6.1", title: "错过电商财税(2016-2017)", price: 1, isFree: false, unlockAfterDays: 3, filePath: "book/第三篇|真实的错误/第6章|我人生错过的4件大钱/6.1 错过电商财税(2016-2017).md" }, { id: "6.2", title: "错过供应链(2017-2018)", price: 1, isFree: false, unlockAfterDays: 3, filePath: "book/第三篇|真实的错误/第6章|我人生错过的4件大钱/6.2 错过供应链(2017-2018).md" }, { id: "6.3", title: "错过内容红利(2018-2019)", price: 1, isFree: false, unlockAfterDays: 3, filePath: "book/第三篇|真实的错误/第6章|我人生错过的4件大钱/6.3 错过内容红利(2018-2019).md" }, { id: "6.4", title: "错过资源资产化(2019-2020)", price: 1, isFree: false, unlockAfterDays: 3, filePath: "book/第三篇|真实的错误/第6章|我人生错过的4件大钱/6.4 错过资源资产化(2019-2020).md" } ] }, { id: "chapter-7", title: "别人犯的错误", sections: [ { id: "7.1", title: "投资房年轻人的迷茫:资金vs能力", price: 1, isFree: false, unlockAfterDays: 3, filePath: "book/第三篇|真实的错误/第7章|别人犯的错误/7.1 投资房年轻人的迷茫:资金 vs 能力.md" }, { id: "7.2", title: "信息差骗局:永远有人靠卖学习赚钱", price: 1, isFree: false, unlockAfterDays: 3, filePath: "book/第三篇|真实的错误/第7章|别人犯的错误/7.2 信息差骗局:永远有人靠卖学习赚钱.md" }, { id: "7.3", title: "在Soul找恋爱但想赚钱的人", price: 1, isFree: false, unlockAfterDays: 3, filePath: "book/第三篇|真实的错误/第7章|别人犯的错误/7.3 在Soul找恋爱但想赚钱的人.md" }, { id: "7.4", title: "创业者的三种死法:冲动、轻信、没结构", price: 1, isFree: false, unlockAfterDays: 3, filePath: "book/第三篇|真实的错误/第7章|别人犯的错误/7.4 创业者的三种死法:冲动、轻信、没结构.md" }, { id: "7.5", title: "人情生意的终点:关系越多亏得越多", price: 1, isFree: false, unlockAfterDays: 3, filePath: "book/第三篇|真实的错误/第7章|别人犯的错误/7.5 人情生意的终点:关系越多亏得越多.md" } ] } ] }, { id: "part-4", number: "04", title: "真实的赚钱", subtitle: "所有行业的杠杆结构", chapters: [ { id: "chapter-8", title: "底层结构", sections: [ { id: "8.1", title: "流量杠杆:抖音、Soul、飞书", price: 1, isFree: false, unlockAfterDays: 3, filePath: "book/第四篇|真实的赚钱/第8章|底层结构/8.1 流量杠杆:抖音、Soul、飞书.md" }, { id: "8.2", title: "价格杠杆:供应链与信息差", price: 1, isFree: false, unlockAfterDays: 3, filePath: "book/第四篇|真实的赚钱/第8章|底层结构/8.2 价格杠杆:供应链与信息差.md" }, { id: "8.3", title: "时间杠杆:自动化+AI", price: 1, isFree: false, unlockAfterDays: 3, filePath: "book/第四篇|真实的赚钱/第8章|底层结构/8.3 时间杠杆:自动化 + AI.md" }, { id: "8.4", title: "情绪杠杆:咨询、婚恋、生意场", price: 1, isFree: false, unlockAfterDays: 3, filePath: "book/第四篇|真实的赚钱/第8章|底层结构/8.4 情绪杠杆:咨询、婚恋、生意场.md" }, { id: "8.5", title: "社交杠杆:认识谁比你会什么更重要", price: 1, isFree: false, unlockAfterDays: 3, filePath: "book/第四篇|真实的赚钱/第8章|底层结构/8.5 社交杠杆:认识谁比你会什么更重要.md" }, { id: "8.6", title: "云阿米巴:分不属于自己的钱", price: 1, isFree: false, unlockAfterDays: 3, filePath: "book/第四篇|真实的赚钱/第8章|底层结构/8.6 云阿米巴:分不属于自己的钱.md" } ] }, { id: "chapter-9", title: "我在Soul上亲访的赚钱案例", sections: [ { id: "9.1", title: "游戏账号私域:账号即资产", price: 1, isFree: false, unlockAfterDays: 3, filePath: "book/第四篇|真实的赚钱/第9章|我在Soul上亲访的赚钱案例/9.1 游戏账号私域:账号即资产.md" }, { id: "9.2", title: "健康包模式:高复购、高毛利", price: 1, isFree: false, unlockAfterDays: 3, filePath: "book/第四篇|真实的赚钱/第9章|我在Soul上亲访的赚钱案例/9.2 健康包模式:高复购、高毛利.md" }, { id: "9.3", title: "药物私域:长期关系赛道", price: 1, isFree: false, unlockAfterDays: 3, filePath: "book/第四篇|真实的赚钱/第9章|我在Soul上亲访的赚钱案例/9.3 药物私域:长期关系赛道.md" }, { id: "9.4", title: "残疾机构合作:退税×AI×人力成本", price: 1, isFree: false, unlockAfterDays: 3, filePath: "book/第四篇|真实的赚钱/第9章|我在Soul上亲访的赚钱案例/9.4 残疾机构合作:退税 × AI × 人力成本.md" }, { id: "9.5", title: "私域银行:粉丝即小股东", price: 1, isFree: false, unlockAfterDays: 3, filePath: "book/第四篇|真实的赚钱/第9章|我在Soul上亲访的赚钱案例/9.5 私域银行:粉丝即小股东.md" }, { id: "9.6", title: "Soul派对房:陌生人成交的最快场景", price: 1, isFree: false, unlockAfterDays: 3, filePath: "book/第四篇|真实的赚钱/第9章|我在Soul上亲访的赚钱案例/9.6 Soul派对房:陌生人成交的最快场景.md" }, { id: "9.7", title: "飞书中台:从聊天到成交的流程化体系", price: 1, isFree: false, unlockAfterDays: 3, filePath: "book/第四篇|真实的赚钱/第9章|我在Soul上亲访的赚钱案例/9.7 飞书中台:从聊天到成交的流程化体系.md" } ] } ] }, { id: "part-5", number: "05", title: "真实的未来", subtitle: "人与系统的关系", chapters: [ { id: "chapter-10", title: "未来职业的变化趋势", sections: [ { id: "10.1", title: "AI代聊与岗位替换", price: 1, isFree: false, unlockAfterDays: 3, filePath: "book/第五篇|真实的社会/第10章|未来职业的变化趋势/10.1 AI代聊与岗位替换.md" }, { id: "10.2", title: "系统化工作vs杂乱工作", price: 1, isFree: false, unlockAfterDays: 3, filePath: "book/第五篇|真实的社会/第10章|未来职业的变化趋势/10.2 系统化工作 vs 杂乱工作.md" }, { id: "10.3", title: "为什么链接能力会成为第一价值", price: 1, isFree: false, unlockAfterDays: 3, filePath: "book/第五篇|真实的社会/第10章|未来职业的变化趋势/10.3 为什么链接能力会成为第一价值.md" }, { id: "10.4", title: "新型公司:Soul-飞书-线下的三位一体", price: 1, isFree: false, unlockAfterDays: 3, filePath: "book/第五篇|真实的社会/第10章|未来职业的变化趋势/10.4 新型公司:Soul-飞书-线下的三位一体.md" } ] }, { id: "chapter-11", title: "中国社会商业生态的未来", sections: [ { id: "11.1", title: "城市之间的模式差", price: 1, isFree: false, unlockAfterDays: 3, filePath: "book/第五篇|真实的社会/第11章|中国社会商业生态的未来/11.1 城市之间的模式差.md" }, { id: "11.2", title: "厦门样本:低成本高效率经济", price: 1, isFree: false, unlockAfterDays: 3, filePath: "book/第五篇|真实的社会/第11章|中国社会商业生态的未来/11.2 厦门样本:低成本高效率经济.md" }, { id: "11.3", title: "流量红利的终局", price: 1, isFree: false, unlockAfterDays: 3, filePath: "book/第五篇|真实的社会/第11章|中国社会商业生态的未来/11.3 流量红利的终局.md" }, { id: "11.4", title: "大模型+供应链的组合拳", price: 1, isFree: false, unlockAfterDays: 3, filePath: "book/第五篇|真实的社会/第11章|中国社会商业生态的未来/11.4 大模型 + 供应链的组合拳.md" }, { id: "11.5", title: "社会分层的最终逻辑", price: 1, isFree: false, unlockAfterDays: 3, filePath: "book/第五篇|真实的社会/第11章|中国社会商业生态的未来/11.5 社会分层的最终逻辑.md" } ] } ] } ]; const specialSections = { preface: { id: "preface", title: "序言|为什么我每天早上6点在Soul开播?", price: 0, isFree: true, filePath: "book/序言|为什么我每天早上6点在Soul开播?.md" }, epilogue: { id: "epilogue", title: "尾声|终极答案:努力不是关键,选择才是", price: 0, isFree: true, filePath: "book/尾声|终极答案:努力不是关键,选择才是.md" } }; const FULL_BOOK_PRICE = getFullBookPrice(); function getAllSections() { const sections = []; if ("TURBOPACK compile-time truthy", 1) { const customSections = JSON.parse(localStorage.getItem("custom_sections") || "[]"); sections.push(...customSections); } bookData.forEach((part)=>{ part.chapters.forEach((chapter)=>{ sections.push(...chapter.sections); }); }); return sections; } function getSectionById(id) { if ("TURBOPACK compile-time truthy", 1) { const customSections = JSON.parse(localStorage.getItem("custom_sections") || "[]"); const customSection = customSections.find((s)=>s.id === id); if (customSection) return customSection; } for (const part of bookData){ for (const chapter of part.chapters){ const section = chapter.sections.find((s)=>s.id === id); if (section) return section; } } return undefined; } function getChapterBySection(sectionId) { for (const part of bookData){ for (const chapter of part.chapters){ if (chapter.sections.some((s)=>s.id === sectionId)) { return { part, chapter }; } } } return undefined; } function isSectionUnlocked(section) { if (section.isFree) return true; if (!section.unlockAfterDays || !section.createdAt) return false; const createdDate = new Date(section.createdAt); const unlockDate = new Date(createdDate.getTime() + section.unlockAfterDays * 24 * 60 * 60 * 1000); return new Date() >= unlockDate; } function addCustomSection(section) { const newSection = { ...section, createdAt: new Date().toISOString() }; if ("TURBOPACK compile-time truthy", 1) { const customSections = JSON.parse(localStorage.getItem("custom_sections") || "[]"); customSections.push(newSection); localStorage.setItem("custom_sections", JSON.stringify(customSections)); } return newSection; } if (typeof globalThis.$RefreshHelpers$ === 'object' && globalThis.$RefreshHelpers !== null) { __turbopack_context__.k.registerExports(__turbopack_context__.m, globalThis.$RefreshHelpers$); } }), "[project]/lib/store.ts [app-client] (ecmascript)", ((__turbopack_context__) => { "use strict"; __turbopack_context__.s([ "useStore", ()=>useStore ]); var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$zustand$2f$esm$2f$react$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/zustand/esm/react.mjs [app-client] (ecmascript)"); var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$zustand$2f$esm$2f$middleware$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/zustand/esm/middleware.mjs [app-client] (ecmascript)"); var __TURBOPACK__imported__module__$5b$project$5d2f$lib$2f$book$2d$data$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/lib/book-data.ts [app-client] (ecmascript)"); "use client"; ; ; ; const defaultSettings = { distributorShare: 90, authorShare: 10, paymentMethods: { wechat: { enabled: true, qrCode: "", account: "", websiteAppId: "", websiteAppSecret: "", serviceAppId: "", serviceAppSecret: "", mpVerifyCode: "", merchantId: "", apiKey: "" }, alipay: { enabled: true, qrCode: "", account: "", partnerId: "", securityKey: "", mobilePayEnabled: true, paymentInterface: "official" }, usdt: { enabled: true, network: "TRC20", address: "", exchangeRate: 7.2 }, paypal: { enabled: false, email: "", exchangeRate: 7.2 } }, sectionPrice: 1, baseBookPrice: 9.9, pricePerSection: 1, qrCodes: [ { id: "default", name: "Soul派对群", url: "https://soul.cn/party", imageUrl: "/images/image.png", weight: 1, enabled: true } ], liveQRCodes: [ { id: "party-group", name: "派对群活码", urls: [ "https://soul.cn/party1", "https://soul.cn/party2", "https://soul.cn/party3" ], imageUrl: "/images/image.png", redirectType: "random", clickCount: 0, enabled: true } ], feishuSync: { enabled: false, docUrl: "", autoSync: false, syncInterval: 60 }, authorInfo: { name: "卡若", description: "连续创业者,私域运营专家,每天早上6-9点在Soul派对房分享真实商业故事", liveTime: "06:00-09:00", platform: "Soul派对房" } }; const useStore = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$zustand$2f$esm$2f$react$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__["create"])()((0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$zustand$2f$esm$2f$middleware$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__["persist"])((set, get)=>({ user: null, isLoggedIn: false, purchases: [], withdrawals: [], settings: defaultSettings, login: async (phone, code)=>{ if (code !== "123456") { return false; } const users = JSON.parse(localStorage.getItem("users") || "[]"); const existingUser = users.find((u)=>u.phone === phone); if (existingUser) { set({ user: existingUser, isLoggedIn: true }); return true; } return false; }, logout: ()=>{ set({ user: null, isLoggedIn: false }); }, register: async (phone, nickname, referralCode)=>{ const users = JSON.parse(localStorage.getItem("users") || "[]"); if (users.find((u)=>u.phone === phone)) { return false; } const newUser = { id: `user_${Date.now()}`, phone, nickname, isAdmin: false, purchasedSections: [], hasFullBook: false, referralCode: `REF${Date.now().toString(36).toUpperCase()}`, referredBy: referralCode, earnings: 0, pendingEarnings: 0, withdrawnEarnings: 0, referralCount: 0, createdAt: new Date().toISOString() }; if (referralCode) { const referrer = users.find((u)=>u.referralCode === referralCode); if (referrer) { referrer.referralCount = (referrer.referralCount || 0) + 1; localStorage.setItem("users", JSON.stringify(users)); } } users.push(newUser); localStorage.setItem("users", JSON.stringify(users)); set({ user: newUser, isLoggedIn: true }); return true; }, purchaseSection: async (sectionId, sectionTitle, paymentMethod)=>{ const { user, settings } = get(); if (!user) return false; const amount = settings.sectionPrice; const purchase = { id: `purchase_${Date.now()}`, userId: user.id, userPhone: user.phone, userNickname: user.nickname, type: "section", sectionId, sectionTitle, amount, paymentMethod, referralCode: user.referredBy, status: "completed", createdAt: new Date().toISOString() }; const updatedUser = { ...user, purchasedSections: [ ...user.purchasedSections, sectionId ] }; const users = JSON.parse(localStorage.getItem("users") || "[]"); const userIndex = users.findIndex((u)=>u.id === user.id); if (userIndex !== -1) { users[userIndex] = updatedUser; localStorage.setItem("users", JSON.stringify(users)); } if (user.referredBy) { const referrer = users.find((u)=>u.referralCode === user.referredBy); if (referrer) { const referrerEarnings = amount * (settings.distributorShare / 100); referrer.earnings += referrerEarnings; referrer.pendingEarnings = (referrer.pendingEarnings || 0) + referrerEarnings; purchase.referrerEarnings = referrerEarnings; localStorage.setItem("users", JSON.stringify(users)); } } const purchases = JSON.parse(localStorage.getItem("all_purchases") || "[]"); purchases.push(purchase); localStorage.setItem("all_purchases", JSON.stringify(purchases)); set({ user: updatedUser, purchases: [ ...get().purchases, purchase ] }); return true; }, purchaseFullBook: async (paymentMethod)=>{ const { user, settings } = get(); if (!user) return false; const fullBookPrice = (0, __TURBOPACK__imported__module__$5b$project$5d2f$lib$2f$book$2d$data$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__["getFullBookPrice"])(); const purchase = { id: `purchase_${Date.now()}`, userId: user.id, userPhone: user.phone, userNickname: user.nickname, type: "fullbook", amount: fullBookPrice, paymentMethod, referralCode: user.referredBy, status: "completed", createdAt: new Date().toISOString() }; const updatedUser = { ...user, hasFullBook: true }; const users = JSON.parse(localStorage.getItem("users") || "[]"); const userIndex = users.findIndex((u)=>u.id === user.id); if (userIndex !== -1) { users[userIndex] = updatedUser; localStorage.setItem("users", JSON.stringify(users)); } if (user.referredBy) { const referrer = users.find((u)=>u.referralCode === user.referredBy); if (referrer) { const referrerEarnings = fullBookPrice * (settings.distributorShare / 100); referrer.earnings += referrerEarnings; referrer.pendingEarnings = (referrer.pendingEarnings || 0) + referrerEarnings; purchase.referrerEarnings = referrerEarnings; localStorage.setItem("users", JSON.stringify(users)); } } const purchases = JSON.parse(localStorage.getItem("all_purchases") || "[]"); purchases.push(purchase); localStorage.setItem("all_purchases", JSON.stringify(purchases)); set({ user: updatedUser, purchases: [ ...get().purchases, purchase ] }); return true; }, hasPurchased: (sectionId)=>{ const { user } = get(); if (!user) return false; if (user.hasFullBook) return true; return user.purchasedSections.includes(sectionId); }, adminLogin: (username, password)=>{ if (username.toLowerCase() === "admin" && password === "key123456") { const adminUser = { id: "admin", phone: "admin", nickname: "管理员", isAdmin: true, purchasedSections: [], hasFullBook: true, referralCode: "ADMIN", earnings: 0, pendingEarnings: 0, withdrawnEarnings: 0, referralCount: 0, createdAt: new Date().toISOString() }; set({ user: adminUser, isLoggedIn: true }); return true; } return false; }, updateSettings: (newSettings)=>{ const { settings } = get(); const updatedSettings = { ...settings, ...newSettings }; if (newSettings.distributorShare !== undefined) { updatedSettings.authorShare = 100 - newSettings.distributorShare; } set({ settings: updatedSettings }); if ("TURBOPACK compile-time truthy", 1) { localStorage.setItem("app_settings", JSON.stringify(updatedSettings)); } }, getAllUsers: ()=>{ if ("TURBOPACK compile-time falsy", 0) //TURBOPACK unreachable ; return JSON.parse(localStorage.getItem("users") || "[]"); }, getAllPurchases: ()=>{ if ("TURBOPACK compile-time falsy", 0) //TURBOPACK unreachable ; return JSON.parse(localStorage.getItem("all_purchases") || "[]"); }, addUser: (userData)=>{ if ("TURBOPACK compile-time falsy", 0) //TURBOPACK unreachable ; const users = JSON.parse(localStorage.getItem("users") || "[]"); const newUser = { id: `user_${Date.now()}`, phone: userData.phone || "", nickname: userData.nickname || "新用户", isAdmin: false, purchasedSections: [], hasFullBook: false, referralCode: `REF${Date.now().toString(36).toUpperCase()}`, earnings: 0, pendingEarnings: 0, withdrawnEarnings: 0, referralCount: 0, createdAt: new Date().toISOString(), ...userData }; users.push(newUser); localStorage.setItem("users", JSON.stringify(users)); return newUser; }, updateUser: (userId, updates)=>{ if ("TURBOPACK compile-time falsy", 0) //TURBOPACK unreachable ; const users = JSON.parse(localStorage.getItem("users") || "[]"); const index = users.findIndex((u)=>u.id === userId); if (index !== -1) { users[index] = { ...users[index], ...updates }; localStorage.setItem("users", JSON.stringify(users)); } }, deleteUser: (userId)=>{ if ("TURBOPACK compile-time falsy", 0) //TURBOPACK unreachable ; const users = JSON.parse(localStorage.getItem("users") || "[]"); const filtered = users.filter((u)=>u.id !== userId); localStorage.setItem("users", JSON.stringify(filtered)); }, addPurchase: (purchaseData)=>set((state)=>{ const newPurchase = { id: Math.random().toString(36).substring(2, 9), createdAt: new Date().toISOString(), ...purchaseData }; // 如果是全书购买,更新用户状态 if (state.user && purchaseData.userId === state.user.id) { const updatedUser = { ...state.user }; if (purchaseData.type === "fullbook") { updatedUser.hasFullBook = true; } else if (purchaseData.sectionId) { updatedUser.purchasedSections = [ ...updatedUser.purchasedSections, purchaseData.sectionId ]; } // 更新 users 数组 const updatedUsers = state.users?.map((u)=>u.id === updatedUser.id ? updatedUser : u) || []; return { purchases: [ ...state.purchases, newPurchase ], user: updatedUser }; } return { purchases: [ ...state.purchases, newPurchase ] }; }), requestWithdrawal: (amount, method, account, name)=>set((state)=>{ if (!state.user) return {}; if (state.user.earnings < amount) return {}; const newWithdrawal = { id: Math.random().toString(36).substring(2, 9), userId: state.user.id, amount, method, account, name, status: "pending", createdAt: new Date().toISOString() }; // 扣除余额,增加冻结/提现中金额 const updatedUser = { ...state.user, earnings: state.user.earnings - amount, pendingEarnings: state.user.pendingEarnings + amount }; return { withdrawals: [ ...state.withdrawals || [], newWithdrawal ], user: updatedUser }; }), completeWithdrawal: (id)=>set((state)=>{ const withdrawals = state.withdrawals || []; const withdrawalIndex = withdrawals.findIndex((w)=>w.id === id); if (withdrawalIndex === -1) return {}; const withdrawal = withdrawals[withdrawalIndex]; if (withdrawal.status !== "pending") return {}; const updatedWithdrawals = [ ...withdrawals ]; updatedWithdrawals[withdrawalIndex] = { ...withdrawal, status: "completed", completedAt: new Date().toISOString() }; // 这里我们只是更新状态,资金已经在申请时扣除了 // 实际场景中可能需要确认转账成功 return { withdrawals: updatedWithdrawals }; }), updateLiveQRCode: (config)=>set((state)=>{ const { settings } = state; const updatedLiveQRCodes = settings.liveQRCodes.map((qr)=>qr.id === config.id ? { ...qr, ...config } : qr); // 如果不存在且有id,则添加? 暂时只支持更新 return { settings: { ...settings, liveQRCodes: updatedLiveQRCodes } }; }), getRandomQRCode: ()=>{ const { settings } = get(); const enabledQRs = settings.qrCodes.filter((qr)=>qr.enabled); if (enabledQRs.length === 0) return null; const totalWeight = enabledQRs.reduce((sum, qr)=>sum + qr.weight, 0); let random = Math.random() * totalWeight; for (const qr of enabledQRs){ random -= qr.weight; if (random <= 0) return qr; } return enabledQRs[0]; }, getLiveQRCodeUrl: (qrId)=>{ const { settings } = get(); const liveQR = settings.liveQRCodes.find((qr)=>qr.id === qrId && qr.enabled); if (!liveQR || liveQR.urls.length === 0) return null; // 更新点击次数 liveQR.clickCount++; if (liveQR.redirectType === "random") { const randomIndex = Math.floor(Math.random() * liveQR.urls.length); return liveQR.urls[randomIndex]; } else if (liveQR.redirectType === "sequential") { const index = liveQR.clickCount % liveQR.urls.length; return liveQR.urls[index]; } else if (liveQR.redirectType === "weighted" && liveQR.weights) { const totalWeight = liveQR.weights.reduce((sum, w)=>sum + w, 0); let random = Math.random() * totalWeight; for(let i = 0; i < liveQR.urls.length; i++){ random -= liveQR.weights[i] || 1; if (random <= 0) return liveQR.urls[i]; } } return liveQR.urls[0]; }, exportData: ()=>{ const { user, purchases, settings } = get(); const data = { user, purchases, settings, exportDate: new Date().toISOString() }; return JSON.stringify(data, null, 2); }, fetchSettings: async ()=>{ try { const res = await fetch("/api/config"); if (!res.ok) throw new Error("Failed to fetch config"); const data = await res.json(); const { settings } = get(); // Deep merge payment methods to preserve existing defaults if API is partial const mergedPaymentMethods = { ...settings.paymentMethods, wechat: { ...settings.paymentMethods.wechat, ...data.paymentMethods?.wechat }, alipay: { ...settings.paymentMethods.alipay, ...data.paymentMethods?.alipay }, usdt: { ...settings.paymentMethods.usdt, ...data.paymentMethods?.usdt }, paypal: { ...settings.paymentMethods.paypal, ...data.paymentMethods?.paypal } }; const newSettings = { paymentMethods: mergedPaymentMethods, authorInfo: { ...settings.authorInfo, ...data.authorInfo } }; set({ settings: { ...settings, ...newSettings } }); } catch (error) { console.error("Failed to sync settings:", error); } } }), { name: "soul-experiment-storage" })); if (typeof globalThis.$RefreshHelpers$ === 'object' && globalThis.$RefreshHelpers !== null) { __turbopack_context__.k.registerExports(__turbopack_context__.m, globalThis.$RefreshHelpers$); } }), "[project]/lib/utils.ts [app-client] (ecmascript)", ((__turbopack_context__) => { "use strict"; __turbopack_context__.s([ "cn", ()=>cn ]); var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$clsx$2f$dist$2f$clsx$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/clsx/dist/clsx.mjs [app-client] (ecmascript)"); var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$tailwind$2d$merge$2f$dist$2f$bundle$2d$mjs$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/tailwind-merge/dist/bundle-mjs.mjs [app-client] (ecmascript)"); ; ; function cn(...inputs) { return (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$tailwind$2d$merge$2f$dist$2f$bundle$2d$mjs$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__["twMerge"])((0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$clsx$2f$dist$2f$clsx$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__["clsx"])(inputs)); } if (typeof globalThis.$RefreshHelpers$ === 'object' && globalThis.$RefreshHelpers !== null) { __turbopack_context__.k.registerExports(__turbopack_context__.m, globalThis.$RefreshHelpers$); } }), "[project]/components/ui/button.tsx [app-client] (ecmascript)", ((__turbopack_context__) => { "use strict"; __turbopack_context__.s([ "Button", ()=>Button, "buttonVariants", ()=>buttonVariants ]); var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/compiled/react/jsx-dev-runtime.js [app-client] (ecmascript)"); var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f40$radix$2d$ui$2f$react$2d$slot$2f$dist$2f$index$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/@radix-ui/react-slot/dist/index.mjs [app-client] (ecmascript)"); var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$class$2d$variance$2d$authority$2f$dist$2f$index$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/class-variance-authority/dist/index.mjs [app-client] (ecmascript)"); var __TURBOPACK__imported__module__$5b$project$5d2f$lib$2f$utils$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/lib/utils.ts [app-client] (ecmascript)"); ; ; ; ; const buttonVariants = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$class$2d$variance$2d$authority$2f$dist$2f$index$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__["cva"])("inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-all disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 shrink-0 [&_svg]:shrink-0 outline-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive", { variants: { variant: { default: 'bg-primary text-primary-foreground hover:bg-primary/90', destructive: 'bg-destructive text-white hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/60', outline: 'border bg-background shadow-xs hover:bg-accent hover:text-accent-foreground dark:bg-input/30 dark:border-input dark:hover:bg-input/50', secondary: 'bg-secondary text-secondary-foreground hover:bg-secondary/80', ghost: 'hover:bg-accent hover:text-accent-foreground dark:hover:bg-accent/50', link: 'text-primary underline-offset-4 hover:underline' }, size: { default: 'h-9 px-4 py-2 has-[>svg]:px-3', sm: 'h-8 rounded-md gap-1.5 px-3 has-[>svg]:px-2.5', lg: 'h-10 rounded-md px-6 has-[>svg]:px-4', icon: 'size-9', 'icon-sm': 'size-8', 'icon-lg': 'size-10' } }, defaultVariants: { variant: 'default', size: 'default' } }); function Button({ className, variant, size, asChild = false, ...props }) { const Comp = asChild ? __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f40$radix$2d$ui$2f$react$2d$slot$2f$dist$2f$index$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__["Slot"] : 'button'; return /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(Comp, { "data-slot": "button", className: (0, __TURBOPACK__imported__module__$5b$project$5d2f$lib$2f$utils$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__["cn"])(buttonVariants({ variant, size, className })), ...props }, void 0, false, { fileName: "[project]/components/ui/button.tsx", lineNumber: 52, columnNumber: 5 }, this); } _c = Button; ; var _c; __turbopack_context__.k.register(_c, "Button"); if (typeof globalThis.$RefreshHelpers$ === 'object' && globalThis.$RefreshHelpers !== null) { __turbopack_context__.k.registerExports(__turbopack_context__.m, globalThis.$RefreshHelpers$); } }), "[project]/components/modules/marketing/qr-code-modal.tsx [app-client] (ecmascript)", ((__turbopack_context__) => { "use strict"; __turbopack_context__.s([ "QRCodeModal", ()=>QRCodeModal ]); var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/compiled/react/jsx-dev-runtime.js [app-client] (ecmascript)"); var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$x$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__X$3e$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/x.js [app-client] (ecmascript) "); var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$message$2d$circle$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__MessageCircle$3e$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/message-circle.js [app-client] (ecmascript) "); var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$users$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Users$3e$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/users.js [app-client] (ecmascript) "); var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$music$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Music$3e$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/music.js [app-client] (ecmascript) "); var __TURBOPACK__imported__module__$5b$project$5d2f$lib$2f$store$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/lib/store.ts [app-client] (ecmascript)"); var __TURBOPACK__imported__module__$5b$project$5d2f$components$2f$ui$2f$button$2e$tsx__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/components/ui/button.tsx [app-client] (ecmascript)"); var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$image$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/image.js [app-client] (ecmascript)"); var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/compiled/react/index.js [app-client] (ecmascript)"); ; var _s = __turbopack_context__.k.signature(); "use client"; ; ; ; ; ; function QRCodeModal({ isOpen, onClose }) { _s(); const { settings, getLiveQRCodeUrl } = (0, __TURBOPACK__imported__module__$5b$project$5d2f$lib$2f$store$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useStore"])(); const [isJoining, setIsJoining] = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useState"])(false); const [qrCodeUrl, setQrCodeUrl] = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useState"])("/images/party-group-qr.png") // Default fallback ; // Fetch config on mount (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useEffect"])({ "QRCodeModal.useEffect": ()=>{ const fetchConfig = { "QRCodeModal.useEffect.fetchConfig": async ()=>{ try { const res = await fetch('/api/config'); const data = await res.json(); if (data.marketing?.partyGroup?.qrCode) { setQrCodeUrl(data.marketing.partyGroup.qrCode); } } catch (e) { console.error("Failed to load QR config", e); } } }["QRCodeModal.useEffect.fetchConfig"]; fetchConfig(); } }["QRCodeModal.useEffect"], []); if (!isOpen) return null; const handleJoin = ()=>{ setIsJoining(true); // 获取活码随机URL const url = getLiveQRCodeUrl("party-group"); if (url) { window.open(url, "_blank"); } setTimeout(()=>setIsJoining(false), 1000); }; return /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { className: "fixed inset-0 z-50 flex items-center justify-center p-4", children: [ /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { className: "absolute inset-0 bg-black/80 backdrop-blur-md", onClick: onClose }, void 0, false, { fileName: "[project]/components/modules/marketing/qr-code-modal.tsx", lineNumber: 49, columnNumber: 7 }, this), /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { className: "relative w-full max-w-[320px] bg-[#1a1a1a] rounded-3xl border border-white/10 overflow-hidden shadow-2xl animate-in fade-in zoom-in-95 duration-200", children: [ /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { className: "absolute top-0 left-0 right-0 h-32 bg-gradient-to-b from-[#7000ff]/20 to-transparent pointer-events-none" }, void 0, false, { fileName: "[project]/components/modules/marketing/qr-code-modal.tsx", lineNumber: 55, columnNumber: 9 }, this), /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("button", { onClick: onClose, className: "absolute top-4 right-4 p-2 text-white/50 hover:text-white transition-colors z-10 bg-black/20 rounded-full backdrop-blur-sm", children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$x$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__X$3e$__["X"], { className: "w-5 h-5" }, void 0, false, { fileName: "[project]/components/modules/marketing/qr-code-modal.tsx", lineNumber: 61, columnNumber: 11 }, this) }, void 0, false, { fileName: "[project]/components/modules/marketing/qr-code-modal.tsx", lineNumber: 57, columnNumber: 9 }, this), /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { className: "p-8 flex flex-col items-center text-center relative", children: [ /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { className: "w-16 h-16 mb-6 rounded-full bg-gradient-to-tr from-[#7000ff] to-[#bd00ff] p-[2px] shadow-lg shadow-purple-500/20", children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { className: "w-full h-full rounded-full bg-[#1a1a1a] flex items-center justify-center", children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$music$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Music$3e$__["Music"], { className: "w-8 h-8 text-[#bd00ff]" }, void 0, false, { fileName: "[project]/components/modules/marketing/qr-code-modal.tsx", lineNumber: 69, columnNumber: 15 }, this) }, void 0, false, { fileName: "[project]/components/modules/marketing/qr-code-modal.tsx", lineNumber: 68, columnNumber: 13 }, this) }, void 0, false, { fileName: "[project]/components/modules/marketing/qr-code-modal.tsx", lineNumber: 67, columnNumber: 11 }, this), /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("h3", { className: "text-xl font-bold text-white mb-2 tracking-tight", children: "Soul 创业派对" }, void 0, false, { fileName: "[project]/components/modules/marketing/qr-code-modal.tsx", lineNumber: 73, columnNumber: 11 }, this), /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { className: "flex items-center gap-2 mb-6", children: [ /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", { className: "px-2 py-0.5 rounded-full bg-white/10 text-[10px] text-white/70 border border-white/5", children: "Live" }, void 0, false, { fileName: "[project]/components/modules/marketing/qr-code-modal.tsx", lineNumber: 78, columnNumber: 13 }, this), /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("p", { className: "text-white/60 text-xs", children: [ settings.authorInfo?.liveTime || "06:00-09:00", " · ", settings.authorInfo?.name || "卡若" ] }, void 0, true, { fileName: "[project]/components/modules/marketing/qr-code-modal.tsx", lineNumber: 81, columnNumber: 13 }, this) ] }, void 0, true, { fileName: "[project]/components/modules/marketing/qr-code-modal.tsx", lineNumber: 77, columnNumber: 11 }, this), /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { className: "bg-white p-3 rounded-2xl shadow-xl mb-6 transform transition-transform hover:scale-105 duration-300", children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { className: "relative w-48 h-48", children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$image$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"], { src: qrCodeUrl, alt: "派对群二维码", fill: true, className: "object-contain" }, void 0, false, { fileName: "[project]/components/modules/marketing/qr-code-modal.tsx", lineNumber: 89, columnNumber: 17 }, this) }, void 0, false, { fileName: "[project]/components/modules/marketing/qr-code-modal.tsx", lineNumber: 88, columnNumber: 13 }, this) }, void 0, false, { fileName: "[project]/components/modules/marketing/qr-code-modal.tsx", lineNumber: 87, columnNumber: 11 }, this), /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("p", { className: "text-white/40 text-xs mb-6 px-4", children: [ "扫码加入私域流量实战群", /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("br", {}, void 0, false, { fileName: "[project]/components/modules/marketing/qr-code-modal.tsx", lineNumber: 99, columnNumber: 24 }, this), "获取《私域运营100问》" ] }, void 0, true, { fileName: "[project]/components/modules/marketing/qr-code-modal.tsx", lineNumber: 98, columnNumber: 11 }, this), /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$components$2f$ui$2f$button$2e$tsx__$5b$app$2d$client$5d$__$28$ecmascript$29$__["Button"], { onClick: handleJoin, disabled: isJoining, className: "w-full bg-gradient-to-r from-[#7000ff] to-[#bd00ff] hover:opacity-90 text-white font-medium rounded-xl h-12 shadow-lg shadow-purple-900/20 border-0 transition-all active:scale-95", children: isJoining ? /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", { className: "flex items-center gap-2", children: [ /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$users$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Users$3e$__["Users"], { className: "w-4 h-4 animate-pulse" }, void 0, false, { fileName: "[project]/components/modules/marketing/qr-code-modal.tsx", lineNumber: 109, columnNumber: 21 }, this), "跳转中..." ] }, void 0, true, { fileName: "[project]/components/modules/marketing/qr-code-modal.tsx", lineNumber: 108, columnNumber: 17 }, this) : /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", { className: "flex items-center gap-2", children: [ /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$message$2d$circle$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__MessageCircle$3e$__["MessageCircle"], { className: "w-4 h-4" }, void 0, false, { fileName: "[project]/components/modules/marketing/qr-code-modal.tsx", lineNumber: 114, columnNumber: 21 }, this), "立即加入" ] }, void 0, true, { fileName: "[project]/components/modules/marketing/qr-code-modal.tsx", lineNumber: 113, columnNumber: 17 }, this) }, void 0, false, { fileName: "[project]/components/modules/marketing/qr-code-modal.tsx", lineNumber: 102, columnNumber: 11 }, this) ] }, void 0, true, { fileName: "[project]/components/modules/marketing/qr-code-modal.tsx", lineNumber: 64, columnNumber: 9 }, this) ] }, void 0, true, { fileName: "[project]/components/modules/marketing/qr-code-modal.tsx", lineNumber: 52, columnNumber: 7 }, this) ] }, void 0, true, { fileName: "[project]/components/modules/marketing/qr-code-modal.tsx", lineNumber: 48, columnNumber: 5 }, this); } _s(QRCodeModal, "/ucfs1EDP5H72dMCTbj4tEd/43w=", false, function() { return [ __TURBOPACK__imported__module__$5b$project$5d2f$lib$2f$store$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useStore"] ]; }); _c = QRCodeModal; var _c; __turbopack_context__.k.register(_c, "QRCodeModal"); if (typeof globalThis.$RefreshHelpers$ === 'object' && globalThis.$RefreshHelpers !== null) { __turbopack_context__.k.registerExports(__turbopack_context__.m, globalThis.$RefreshHelpers$); } }), "[project]/components/bottom-nav.tsx [app-client] (ecmascript)", ((__turbopack_context__) => { "use strict"; __turbopack_context__.s([ "BottomNav", ()=>BottomNav ]); var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/compiled/react/jsx-dev-runtime.js [app-client] (ecmascript)"); var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$client$2f$app$2d$dir$2f$link$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/client/app-dir/link.js [app-client] (ecmascript)"); var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$navigation$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/navigation.js [app-client] (ecmascript)"); var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$house$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Home$3e$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/house.js [app-client] (ecmascript) "); var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$message$2d$circle$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__MessageCircle$3e$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/message-circle.js [app-client] (ecmascript) "); var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$user$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__User$3e$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/user.js [app-client] (ecmascript) "); var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/compiled/react/index.js [app-client] (ecmascript)"); var __TURBOPACK__imported__module__$5b$project$5d2f$components$2f$modules$2f$marketing$2f$qr$2d$code$2d$modal$2e$tsx__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/components/modules/marketing/qr-code-modal.tsx [app-client] (ecmascript)"); ; var _s = __turbopack_context__.k.signature(); "use client"; ; ; ; ; ; function BottomNav() { _s(); const pathname = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$navigation$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["usePathname"])(); const [showQRModal, setShowQRModal] = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useState"])(false); if (pathname.startsWith("/documentation")) { return null; } const navItems = [ { href: "/", icon: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$house$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Home$3e$__["Home"], label: "首页" }, { action: ()=>setShowQRModal(true), icon: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$message$2d$circle$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__MessageCircle$3e$__["MessageCircle"], label: "派对群" }, { href: "/my", icon: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$user$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__User$3e$__["User"], label: "我的" } ]; return /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["Fragment"], { children: [ /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("nav", { className: "fixed bottom-0 left-0 right-0 z-40 bg-[#0f2137]/95 backdrop-blur-md border-t border-gray-700/50", children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { className: "flex items-center justify-around py-3 max-w-lg mx-auto", children: navItems.map((item, index)=>{ const isActive = item.href ? pathname === item.href : false; const Icon = item.icon; if (item.action) { return /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("button", { onClick: item.action, className: "flex flex-col items-center py-2 px-6 text-gray-400 hover:text-[#38bdac] transition-colors", children: [ /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(Icon, { className: "w-6 h-6 mb-1" }, void 0, false, { fileName: "[project]/components/bottom-nav.tsx", lineNumber: 38, columnNumber: 19 }, this), /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", { className: "text-xs", children: item.label }, void 0, false, { fileName: "[project]/components/bottom-nav.tsx", lineNumber: 39, columnNumber: 19 }, this) ] }, index, true, { fileName: "[project]/components/bottom-nav.tsx", lineNumber: 33, columnNumber: 17 }, this); } return /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$client$2f$app$2d$dir$2f$link$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"], { href: item.href, className: `flex flex-col items-center py-2 px-6 transition-colors ${isActive ? "text-[#38bdac]" : "text-gray-400 hover:text-white"}`, children: [ /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(Icon, { className: "w-6 h-6 mb-1" }, void 0, false, { fileName: "[project]/components/bottom-nav.tsx", lineNumber: 52, columnNumber: 17 }, this), /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", { className: "text-xs", children: item.label }, void 0, false, { fileName: "[project]/components/bottom-nav.tsx", lineNumber: 53, columnNumber: 17 }, this) ] }, index, true, { fileName: "[project]/components/bottom-nav.tsx", lineNumber: 45, columnNumber: 15 }, this); }) }, void 0, false, { fileName: "[project]/components/bottom-nav.tsx", lineNumber: 26, columnNumber: 9 }, this) }, void 0, false, { fileName: "[project]/components/bottom-nav.tsx", lineNumber: 25, columnNumber: 7 }, this), /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$components$2f$modules$2f$marketing$2f$qr$2d$code$2d$modal$2e$tsx__$5b$app$2d$client$5d$__$28$ecmascript$29$__["QRCodeModal"], { isOpen: showQRModal, onClose: ()=>setShowQRModal(false) }, void 0, false, { fileName: "[project]/components/bottom-nav.tsx", lineNumber: 59, columnNumber: 7 }, this) ] }, void 0, true); } _s(BottomNav, "muXLHfRZNOyxtkIQkWSm+QpOoV8=", false, function() { return [ __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$navigation$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["usePathname"] ]; }); _c = BottomNav; var _c; __turbopack_context__.k.register(_c, "BottomNav"); if (typeof globalThis.$RefreshHelpers$ === 'object' && globalThis.$RefreshHelpers !== null) { __turbopack_context__.k.registerExports(__turbopack_context__.m, globalThis.$RefreshHelpers$); } }), "[project]/components/config-loader.tsx [app-client] (ecmascript)", ((__turbopack_context__) => { "use strict"; __turbopack_context__.s([ "ConfigLoader", ()=>ConfigLoader ]); var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/compiled/react/index.js [app-client] (ecmascript)"); var __TURBOPACK__imported__module__$5b$project$5d2f$lib$2f$store$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/lib/store.ts [app-client] (ecmascript)"); var _s = __turbopack_context__.k.signature(); "use client"; ; ; function ConfigLoader() { _s(); const { fetchSettings } = (0, __TURBOPACK__imported__module__$5b$project$5d2f$lib$2f$store$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useStore"])(); (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useEffect"])({ "ConfigLoader.useEffect": ()=>{ fetchSettings(); } }["ConfigLoader.useEffect"], [ fetchSettings ]); return null; } _s(ConfigLoader, "kz/V1F89ERJfgn2lZLGvZAS6fxw=", false, function() { return [ __TURBOPACK__imported__module__$5b$project$5d2f$lib$2f$store$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useStore"] ]; }); _c = ConfigLoader; var _c; __turbopack_context__.k.register(_c, "ConfigLoader"); if (typeof globalThis.$RefreshHelpers$ === 'object' && globalThis.$RefreshHelpers !== null) { __turbopack_context__.k.registerExports(__turbopack_context__.m, globalThis.$RefreshHelpers$); } }), "[project]/components/layout-wrapper.tsx [app-client] (ecmascript)", ((__turbopack_context__) => { "use strict"; __turbopack_context__.s([ "LayoutWrapper", ()=>LayoutWrapper ]); var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/compiled/react/jsx-dev-runtime.js [app-client] (ecmascript)"); var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$navigation$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/navigation.js [app-client] (ecmascript)"); var __TURBOPACK__imported__module__$5b$project$5d2f$components$2f$bottom$2d$nav$2e$tsx__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/components/bottom-nav.tsx [app-client] (ecmascript)"); var __TURBOPACK__imported__module__$5b$project$5d2f$components$2f$config$2d$loader$2e$tsx__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/components/config-loader.tsx [app-client] (ecmascript)"); ; var _s = __turbopack_context__.k.signature(); "use client"; ; ; ; function LayoutWrapper({ children }) { _s(); const pathname = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$navigation$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["usePathname"])(); const isAdmin = pathname?.startsWith("/admin"); if (isAdmin) { return /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { className: "min-h-screen bg-gray-100 text-gray-900 font-sans", children: [ /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$components$2f$config$2d$loader$2e$tsx__$5b$app$2d$client$5d$__$28$ecmascript$29$__["ConfigLoader"], {}, void 0, false, { fileName: "[project]/components/layout-wrapper.tsx", lineNumber: 14, columnNumber: 9 }, this), children ] }, void 0, true, { fileName: "[project]/components/layout-wrapper.tsx", lineNumber: 13, columnNumber: 7 }, this); } return /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { className: "mx-auto max-w-[430px] min-h-screen bg-[#0a1628] shadow-2xl relative font-sans antialiased", children: [ /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$components$2f$config$2d$loader$2e$tsx__$5b$app$2d$client$5d$__$28$ecmascript$29$__["ConfigLoader"], {}, void 0, false, { fileName: "[project]/components/layout-wrapper.tsx", lineNumber: 22, columnNumber: 7 }, this), children, /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$components$2f$bottom$2d$nav$2e$tsx__$5b$app$2d$client$5d$__$28$ecmascript$29$__["BottomNav"], {}, void 0, false, { fileName: "[project]/components/layout-wrapper.tsx", lineNumber: 24, columnNumber: 7 }, this) ] }, void 0, true, { fileName: "[project]/components/layout-wrapper.tsx", lineNumber: 21, columnNumber: 5 }, this); } _s(LayoutWrapper, "xbyQPtUVMO7MNj7WjJlpdWqRcTo=", false, function() { return [ __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$navigation$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["usePathname"] ]; }); _c = LayoutWrapper; var _c; __turbopack_context__.k.register(_c, "LayoutWrapper"); if (typeof globalThis.$RefreshHelpers$ === 'object' && globalThis.$RefreshHelpers !== null) { __turbopack_context__.k.registerExports(__turbopack_context__.m, globalThis.$RefreshHelpers$); } }), ]); //# sourceMappingURL=_f06e89f2._.js.map