1824 lines
96 KiB
JavaScript
1824 lines
96 KiB
JavaScript
(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) <export default as X>");
|
||
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) <export default as MessageCircle>");
|
||
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) <export default as Users>");
|
||
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) <export default as Music>");
|
||
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) <export default as Home>");
|
||
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) <export default as MessageCircle>");
|
||
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) <export default as User>");
|
||
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
|