diff --git a/.next/dev/logs/next-development.log b/.next/dev/logs/next-development.log index 791f722e..a3c998ad 100644 --- a/.next/dev/logs/next-development.log +++ b/.next/dev/logs/next-development.log @@ -3012,3 +3012,882 @@ It can also happen if the client has a browser extension installed which messes [03:34:23.699] Browser LOG %c[Vercel Web Analytics]%c [pageview] http://localhost:3000/relationship color: rgb(120, 120, 120) color: inherit {"dp":"/relationship","o":"http://localhost:3000/relationship","sdkn":"@vercel/analytics/next","sdkv":"1.5.0","sv":"0.1.3","ts":1763881106379} [03:34:23.714] Server LOG 🌳 GET /api/trees 返回数据: {} [03:34:23.773] Server LOG 👥 GET /api/trees/[treeId]/members 返回数据: {} +[03:34:55.268] Server LOG 🌳 GET /api/trees 返回数据: {} +[03:34:56.891] Browser INFO %cDownload the React DevTools for a better development experience: https://react.dev/link/react-devtools font-weight:bold +[03:34:57.146] Browser LOG %c[Vercel Web Analytics]%c Debug mode is enabled by default in development. No requests will be sent to the server. color: rgb(120, 120, 120) color: inherit +[03:34:57.146] Browser LOG %c[Vercel Web Analytics]%c Running queued event color: rgb(120, 120, 120) color: inherit pageview {"path":"/auth/signin","route":"/auth/signin"} +[03:34:57.146] Browser LOG %c[Vercel Web Analytics]%c [pageview] http://localhost:3000/auth/signin color: rgb(120, 120, 120) color: inherit {"dp":"/auth/signin","o":"http://localhost:3000/auth/signin","sdkn":"@vercel/analytics/next","sdkv":"1.5.0","sv":"0.1.3","ts":1763881139884} +[03:34:59.759] Server LOG 🌳 GET /api/trees 返回数据: {} +[03:35:00.493] Server LOG 👥 GET /api/trees/[treeId]/members 返回数据: {} +[03:35:00.964] Browser INFO %cDownload the React DevTools for a better development experience: https://react.dev/link/react-devtools font-weight:bold +[03:35:01.549] Server LOG 🌳 GET /api/trees 返回数据: {} +[03:35:01.703] Server LOG 🌳 GET /api/trees 返回数据: {} +[03:35:01.723] Server LOG 👥 GET /api/trees/[treeId]/members 返回数据: {} +[03:35:01.808] Server LOG 🌳 GET /api/trees 返回数据: {} +[03:35:01.829] Server LOG 🌳 GET /api/trees 返回数据: {} +[03:35:01.902] Server LOG 👥 GET /api/trees/[treeId]/members 返回数据: {} +[03:35:01.942] Browser ERROR 加载家族树失败: HTTP error! status: 404 +[03:35:02.044] Browser LOG %c[Vercel Web Analytics]%c Debug mode is enabled by default in development. No requests will be sent to the server. color: rgb(120, 120, 120) color: inherit +[03:35:02.044] Browser LOG %c[Vercel Web Analytics]%c Running queued event color: rgb(120, 120, 120) color: inherit pageview {"path":"/","route":"/"} +[03:35:02.044] Browser LOG %c[Vercel Web Analytics]%c [pageview] http://localhost:3000/ color: rgb(120, 120, 120) color: inherit {"dp":"/","o":"http://localhost:3000/","sdkn":"@vercel/analytics/next","sdkv":"1.5.0","sv":"0.1.3","ts":1763881144636} +[03:35:06.250] Server LOG 🌳 GET /api/trees 返回数据: {} +[03:35:07.878] Browser LOG %c[Vercel Web Analytics]%c [pageview] http://localhost:3000/tree?treeId=cmib8zhtw001nhhxlvi284hss color: rgb(120, 120, 120) color: inherit {"dp":"/tree","o":"http://localhost:3000/tree?treeId=cmib8zhtw001nhhxlvi284hss","sdkn":"@vercel/analytics/next","sdkv":"1.5.0","sv":"0.1.3","ts":1763881149883} +[03:35:08.039] Server LOG 🌳 GET /api/trees 返回数据: {} +[03:35:08.060] Server LOG 🌳 GET /api/trees 返回数据: {} +[03:35:10.152] Server LOG 🌳 GET /api/trees 返回数据: {} +[03:35:10.215] Server LOG 👥 GET /api/trees/[treeId]/members 返回数据: {} +[03:35:10.250] Browser LOG %c[Vercel Web Analytics]%c [pageview] http://localhost:3000/members/cmib8zhu6001xhhxl53olzpvd color: rgb(120, 120, 120) color: inherit {"dp":"/members/[id]","o":"http://localhost:3000/members/cmib8zhu6001xhhxl53olzpvd","sdkn":"@vercel/analytics/next","sdkv":"1.5.0","sv":"0.1.3","ts":1763881152972} +[03:35:10.466] Server LOG 🌳 GET /api/trees 返回数据: {} +[03:35:10.490] Server LOG 🌳 GET /api/trees 返回数据: {} +[03:35:12.288] Server LOG 🌳 GET /api/trees 返回数据: {} +[03:35:12.302] Server LOG 🌳 GET /api/trees 返回数据: {} +[03:35:12.420] Browser LOG %c[Vercel Web Analytics]%c [pageview] http://localhost:3000/tree?treeId=cmib8zhtw001nhhxlvi284hss color: rgb(120, 120, 120) color: inherit {"dp":"/tree","o":"http://localhost:3000/tree?treeId=cmib8zhtw001nhhxlvi284hss","sdkn":"@vercel/analytics/next","sdkv":"1.5.0","sv":"0.1.3","ts":1763881155115} +[03:35:16.075] Browser WARN Warning: Missing `Description` or `aria-describedby={undefined}` for {DialogContent}. +[03:35:16.075] Browser WARN Warning: Missing `Description` or `aria-describedby={undefined}` for {DialogContent}. +[03:35:30.271] Server LOG 🌳 GET /api/trees 返回数据: {} +[03:35:30.346] Server LOG 👥 GET /api/trees/[treeId]/members 返回数据: {} +[03:35:30.357] Browser LOG %c[Vercel Web Analytics]%c [pageview] http://localhost:3000/relationship color: rgb(120, 120, 120) color: inherit {"dp":"/relationship","o":"http://localhost:3000/relationship","sdkn":"@vercel/analytics/next","sdkv":"1.5.0","sv":"0.1.3","ts":1763881173086} +[03:35:30.565] Server LOG 🌳 GET /api/trees 返回数据: {} +[03:35:30.581] Server LOG 🌳 GET /api/trees 返回数据: {} +[03:36:05.620] Server LOG 🌳 GET /api/trees 返回数据: {} +[03:36:05.647] Server LOG 🌳 GET /api/trees 返回数据: {} +[03:36:05.729] Browser LOG %c[Vercel Web Analytics]%c [pageview] http://localhost:3000/?treeId=cmib8zhtw001nhhxlvi284hss color: rgb(120, 120, 120) color: inherit {"dp":"/","o":"http://localhost:3000/?treeId=cmib8zhtw001nhhxlvi284hss","sdkn":"@vercel/analytics/next","sdkv":"1.5.0","sv":"0.1.3","ts":1763881208436} +[03:36:08.592] Browser INFO %cDownload the React DevTools for a better development experience: https://react.dev/link/react-devtools font-weight:bold +[03:36:09.315] Server LOG 🌳 GET /api/trees 返回数据: {} +[03:36:09.401] Server LOG 🌳 GET /api/trees/[treeId] 返回数据: {} +[03:36:09.489] Server LOG 👥 GET /api/trees/[treeId]/members 返回数据: {} +[03:36:09.581] Browser LOG %c[Vercel Web Analytics]%c Debug mode is enabled by default in development. No requests will be sent to the server. color: rgb(120, 120, 120) color: inherit +[03:36:09.581] Browser LOG %c[Vercel Web Analytics]%c Running queued event color: rgb(120, 120, 120) color: inherit pageview {"path":"/","route":"/"} +[03:36:09.581] Browser LOG %c[Vercel Web Analytics]%c [pageview] http://localhost:3000/?treeId=cmib8zhtw001nhhxlvi284hss color: rgb(120, 120, 120) color: inherit {"dp":"/","o":"http://localhost:3000/?treeId=cmib8zhtw001nhhxlvi284hss","sdkn":"@vercel/analytics/next","sdkv":"1.5.0","sv":"0.1.3","ts":1763881212279} +[03:36:19.832] Server LOG 🌳 GET /api/trees 返回数据: {} +[03:36:23.719] Browser LOG %c[Vercel Web Analytics]%c [pageview] http://localhost:3000/tree?treeId=cmib8zhtw001nhhxlvi284hss color: rgb(120, 120, 120) color: inherit {"dp":"/tree","o":"http://localhost:3000/tree?treeId=cmib8zhtw001nhhxlvi284hss","sdkn":"@vercel/analytics/next","sdkv":"1.5.0","sv":"0.1.3","ts":1763881225903} +[03:36:23.799] Server LOG 🌳 GET /api/trees 返回数据: {} +[03:36:23.826] Server LOG 🌳 GET /api/trees 返回数据: {} +[03:36:27.902] Browser LOG D3OrgChartFlow render, selectedMembers: [] relationMode: false +[03:36:27.902] Browser LOG D3OrgChartFlow render, selectedMembers: [] relationMode: false +[03:36:27.902] Browser LOG D3OrgChartFlow render, selectedMembers: [] relationMode: false +[03:36:27.902] Browser LOG D3OrgChartFlow render, selectedMembers: [] relationMode: false +[03:36:27.902] Browser LOG D3OrgChartFlow render, selectedMembers: [] relationMode: false +[03:36:27.902] Browser LOG D3OrgChartFlow render, selectedMembers: [] relationMode: false +[03:36:33.883] Browser LOG D3 onMemberClick triggered: cmib8zhua0021hhxl1ifpasaj relationMode: true +[03:36:33.883] Browser LOG Calling handleMemberClick +[03:36:35.143] Browser LOG D3 onMemberClick triggered: cmib8zhv2002nhhxleq3plqnw relationMode: true +[03:36:35.143] Browser LOG Calling handleMemberClick +[03:36:35.143] Browser WARN Warning: Missing `Description` or `aria-describedby={undefined}` for {DialogContent}. +[03:36:35.143] Browser WARN Warning: Missing `Description` or `aria-describedby={undefined}` for {DialogContent}. +[03:36:42.888] Browser LOG D3 onMemberClick triggered: cmib8zhua0021hhxl1ifpasaj relationMode: true +[03:36:42.888] Browser LOG Calling handleMemberClick +[03:36:43.971] Browser LOG D3 onMemberClick triggered: cmib8zhvn0035hhxlzrcl0o49 relationMode: true +[03:36:43.971] Browser LOG Calling handleMemberClick +[03:36:43.971] Browser WARN Warning: Missing `Description` or `aria-describedby={undefined}` for {DialogContent}. +[03:36:43.971] Browser WARN Warning: Missing `Description` or `aria-describedby={undefined}` for {DialogContent}. +[03:37:14.165] Browser LOG D3 onMemberClick triggered: cmib8zhua0021hhxl1ifpasaj relationMode: true +[03:37:14.165] Browser LOG Calling handleMemberClick +[03:37:16.379] Browser LOG D3 onMemberClick triggered: cmib8zhvn0035hhxlzrcl0o49 relationMode: true +[03:37:16.379] Browser LOG Calling handleMemberClick +[03:37:16.379] Browser WARN Warning: Missing `Description` or `aria-describedby={undefined}` for {DialogContent}. +[03:37:16.379] Browser WARN Warning: Missing `Description` or `aria-describedby={undefined}` for {DialogContent}. +[03:37:26.349] Server LOG 🌳 GET /api/trees 返回数据: {} +[03:37:26.419] Server LOG 🌳 GET /api/trees 返回数据: {} +[03:37:26.430] Browser LOG %c[Vercel Web Analytics]%c [pageview] http://localhost:3000/?treeId=cmib8zhtw001nhhxlvi284hss color: rgb(120, 120, 120) color: inherit {"dp":"/","o":"http://localhost:3000/?treeId=cmib8zhtw001nhhxlvi284hss","sdkn":"@vercel/analytics/next","sdkv":"1.5.0","sv":"0.1.3","ts":1763881289148} +[03:38:20.068] Server LOG 🌳 GET /api/trees 返回数据: {} +[03:38:20.530] Server LOG ✓ Compiled in 58ms +[03:38:42.803] Browser INFO %cDownload the React DevTools for a better development experience: https://react.dev/link/react-devtools font-weight:bold +[03:38:42.994] Browser LOG %c[Vercel Web Analytics]%c Debug mode is enabled by default in development. No requests will be sent to the server. color: rgb(120, 120, 120) color: inherit +[03:38:42.994] Browser LOG %c[Vercel Web Analytics]%c Running queued event color: rgb(120, 120, 120) color: inherit pageview {"path":"/auth/signin","route":"/auth/signin"} +[03:38:42.994] Browser LOG %c[Vercel Web Analytics]%c [pageview] http://localhost:3000/auth/signin color: rgb(120, 120, 120) color: inherit {"dp":"/auth/signin","o":"http://localhost:3000/auth/signin","sdkn":"@vercel/analytics/next","sdkv":"1.5.0","sv":"0.1.3","ts":1763881365723} +[03:38:47.188] Server LOG 🌳 GET /api/trees 返回数据: {} +[03:38:47.464] Browser INFO %cDownload the React DevTools for a better development experience: https://react.dev/link/react-devtools font-weight:bold +[03:38:47.628] Browser LOG %c[Vercel Web Analytics]%c Debug mode is enabled by default in development. No requests will be sent to the server. color: rgb(120, 120, 120) color: inherit +[03:38:47.628] Browser LOG %c[Vercel Web Analytics]%c Running queued event color: rgb(120, 120, 120) color: inherit pageview {"path":"/","route":"/"} +[03:38:47.628] Browser LOG %c[Vercel Web Analytics]%c [pageview] http://localhost:3000/ color: rgb(120, 120, 120) color: inherit {"dp":"/","o":"http://localhost:3000/","sdkn":"@vercel/analytics/next","sdkv":"1.5.0","sv":"0.1.3","ts":1763881370285} +[03:38:47.905] Server LOG 🌳 GET /api/trees 返回数据: {} +[03:38:48.150] Server LOG 🌳 GET /api/trees 返回数据: {} +[03:38:48.414] Server LOG 👥 GET /api/trees/[treeId]/members 返回数据: {} +[03:38:48.494] Server LOG 🌳 GET /api/trees 返回数据: {} +[03:38:48.669] Server LOG 🌳 GET /api/trees/[treeId] 返回数据: {} +[03:38:48.800] Server LOG 👥 GET /api/trees/[treeId]/members 返回数据: {} +[03:38:49.019] Server LOG 👥 GET /api/trees/[treeId]/members 返回数据: {} +[03:38:49.334] Server LOG 🌳 GET /api/trees 返回数据: {} +[03:38:49.360] Server LOG 🌳 GET /api/trees 返回数据: {} +[03:38:51.945] Server LOG 🌳 GET /api/trees 返回数据: {} +[03:39:14.822] Browser LOG %c[Vercel Web Analytics]%c [pageview] http://localhost:3000/tree?treeId=cmib8zhrq0003hhxlvnsi96nh color: rgb(120, 120, 120) color: inherit {"dp":"/tree","o":"http://localhost:3000/tree?treeId=cmib8zhrq0003hhxlvnsi96nh","sdkn":"@vercel/analytics/next","sdkv":"1.5.0","sv":"0.1.3","ts":1763881397009} +[03:39:14.906] Server LOG 🌳 GET /api/trees 返回数据: {} +[03:39:14.929] Server LOG 🌳 GET /api/trees 返回数据: {} +[03:39:21.433] Browser LOG D3OrgChartFlow render, selectedMembers: [] relationMode: false +[03:39:21.433] Browser LOG D3OrgChartFlow render, selectedMembers: [] relationMode: false +[03:39:21.433] Browser LOG D3OrgChartFlow render, selectedMembers: [] relationMode: false +[03:39:21.433] Browser LOG D3OrgChartFlow render, selectedMembers: [] relationMode: false +[03:39:21.433] Browser LOG D3OrgChartFlow render, selectedMembers: [] relationMode: false +[03:39:21.433] Browser LOG D3OrgChartFlow render, selectedMembers: [] relationMode: false +[03:39:21.433] Browser LOG D3OrgChartFlow render, selectedMembers: [] relationMode: false +[03:39:21.433] Browser LOG D3OrgChartFlow render, selectedMembers: [] relationMode: false +[03:39:30.377] Server LOG 🌳 GET /api/trees 返回数据: {} +[03:39:30.407] Server LOG 🌳 GET /api/trees 返回数据: {} +[03:39:30.455] Browser LOG %c[Vercel Web Analytics]%c [pageview] http://localhost:3000/?treeId=cmib8zhrq0003hhxlvnsi96nh color: rgb(120, 120, 120) color: inherit {"dp":"/","o":"http://localhost:3000/?treeId=cmib8zhrq0003hhxlvnsi96nh","sdkn":"@vercel/analytics/next","sdkv":"1.5.0","sv":"0.1.3","ts":1763881413178} +[03:39:42.582] Browser LOG %c[Vercel Web Analytics]%c [pageview] http://localhost:3000/members?treeId=cmib8zhrq0003hhxlvnsi96nh color: rgb(120, 120, 120) color: inherit {"dp":"/members","o":"http://localhost:3000/members?treeId=cmib8zhrq0003hhxlvnsi96nh","sdkn":"@vercel/analytics/next","sdkv":"1.5.0","sv":"0.1.3","ts":1763881425299} +[03:39:42.786] Server LOG 🌳 GET /api/trees 返回数据: {} +[03:39:42.801] Server LOG 🌳 GET /api/trees 返回数据: {} +[03:39:51.221] Server LOG 🌳 GET /api/trees 返回数据: {} +[03:39:51.255] Server LOG 👥 GET /api/trees/[treeId]/members 返回数据: {} +[03:39:51.271] Browser LOG %c[Vercel Web Analytics]%c [pageview] http://localhost:3000/members/cmib8zht8001bhhxlzoa6z9y2 color: rgb(120, 120, 120) color: inherit {"dp":"/members/[id]","o":"http://localhost:3000/members/cmib8zht8001bhhxlzoa6z9y2","sdkn":"@vercel/analytics/next","sdkv":"1.5.0","sv":"0.1.3","ts":1763881434000} +[03:39:51.487] Server LOG 🌳 GET /api/trees 返回数据: {} +[03:39:51.508] Server LOG 🌳 GET /api/trees 返回数据: {} +[03:40:09.271] Server LOG 🌳 GET /api/trees 返回数据: {} +[03:40:09.289] Server LOG 🌳 GET /api/trees 返回数据: {} +[03:40:09.335] Browser LOG %c[Vercel Web Analytics]%c [pageview] http://localhost:3000/members?treeId=cmib8zhrq0003hhxlvnsi96nh color: rgb(120, 120, 120) color: inherit {"dp":"/members","o":"http://localhost:3000/members?treeId=cmib8zhrq0003hhxlvnsi96nh","sdkn":"@vercel/analytics/next","sdkv":"1.5.0","sv":"0.1.3","ts":1763881452058} +[03:40:14.543] Server LOG 🌳 GET /api/trees 返回数据: {} +[03:40:14.563] Server LOG 🌳 GET /api/trees 返回数据: {} +[03:40:14.579] Server LOG 🌳 GET /api/trees 返回数据: {} +[03:40:14.618] Server LOG 👥 GET /api/trees/[treeId]/members 返回数据: {} +[03:40:14.642] Browser LOG %c[Vercel Web Analytics]%c [pageview] http://localhost:3000/members/cmib8zht8001bhhxlzoa6z9y2 color: rgb(120, 120, 120) color: inherit {"dp":"/members/[id]","o":"http://localhost:3000/members/cmib8zht8001bhhxlzoa6z9y2","sdkn":"@vercel/analytics/next","sdkv":"1.5.0","sv":"0.1.3","ts":1763881457360} +[03:41:27.057] Server LOG ✓ Compiled in 70ms +[03:41:33.582] Server LOG 🌳 GET /api/trees 返回数据: {} +[03:41:53.325] Server LOG 🌳 GET /api/trees 返回数据: {} +[03:41:54.021] Browser INFO %cDownload the React DevTools for a better development experience: https://react.dev/link/react-devtools font-weight:bold +[03:41:54.142] Server LOG 🌳 GET /api/trees 返回数据: {} +[03:41:54.162] Server LOG 🌳 GET /api/trees 返回数据: {} +[03:41:54.179] Browser LOG %c[Vercel Web Analytics]%c Debug mode is enabled by default in development. No requests will be sent to the server. color: rgb(120, 120, 120) color: inherit +[03:41:54.179] Browser LOG %c[Vercel Web Analytics]%c Running queued event color: rgb(120, 120, 120) color: inherit pageview {"path":"/members/cmib8zht8001bhhxlzoa6z9y2","route":"/members/[id]"} +[03:41:54.179] Browser LOG %c[Vercel Web Analytics]%c [pageview] http://localhost:3000/members/cmib8zht8001bhhxlzoa6z9y2 color: rgb(120, 120, 120) color: inherit {"dp":"/members/[id]","o":"http://localhost:3000/members/cmib8zht8001bhhxlzoa6z9y2","sdkn":"@vercel/analytics/next","sdkv":"1.5.0","sv":"0.1.3","ts":1763881556906} +[03:41:54.189] Server LOG 👥 GET /api/trees/[treeId]/members 返回数据: {} +[03:42:03.510] Browser LOG %c[Vercel Web Analytics]%c [pageview] http://localhost:3000/members?treeId=cmib8zhrq0003hhxlvnsi96nh color: rgb(120, 120, 120) color: inherit {"dp":"/members","o":"http://localhost:3000/members?treeId=cmib8zhrq0003hhxlvnsi96nh","sdkn":"@vercel/analytics/next","sdkv":"1.5.0","sv":"0.1.3","ts":1763881566235} +[03:42:03.728] Server LOG 🌳 GET /api/trees 返回数据: {} +[03:42:03.742] Server LOG 🌳 GET /api/trees 返回数据: {} +[03:42:07.470] Server LOG 🌳 GET /api/trees 返回数据: {} +[03:42:07.482] Server LOG 🌳 GET /api/trees 返回数据: {} +[03:42:07.497] Server LOG 🌳 GET /api/trees 返回数据: {} +[03:42:07.532] Server LOG 👥 GET /api/trees/[treeId]/members 返回数据: {} +[03:42:07.572] Browser LOG %c[Vercel Web Analytics]%c [pageview] http://localhost:3000/members/cmib8zht8001bhhxlzoa6z9y2 color: rgb(120, 120, 120) color: inherit {"dp":"/members/[id]","o":"http://localhost:3000/members/cmib8zht8001bhhxlzoa6z9y2","sdkn":"@vercel/analytics/next","sdkv":"1.5.0","sv":"0.1.3","ts":1763881570293} +[03:42:49.635] Server LOG 🌳 GET /api/trees 返回数据: {} +[03:43:00.745] Server LOG 🌳 GET /api/trees 返回数据: {} +[03:43:00.760] Server LOG 🌳 GET /api/trees 返回数据: {} +[03:43:00.840] Browser LOG %c[Vercel Web Analytics]%c [pageview] http://localhost:3000/members?treeId=cmib8zhrq0003hhxlvnsi96nh color: rgb(120, 120, 120) color: inherit {"dp":"/members","o":"http://localhost:3000/members?treeId=cmib8zhrq0003hhxlvnsi96nh","sdkn":"@vercel/analytics/next","sdkv":"1.5.0","sv":"0.1.3","ts":1763881623568} +[03:43:01.784] Server LOG 🌳 GET /api/trees 返回数据: {} +[03:43:01.804] Server LOG 🌳 GET /api/trees 返回数据: {} +[03:43:01.842] Server LOG 🌳 GET /api/trees 返回数据: {} +[03:43:01.855] Server LOG 👥 GET /api/trees/[treeId]/members 返回数据: {} +[03:43:01.887] Browser LOG %c[Vercel Web Analytics]%c [pageview] http://localhost:3000/members/cmib8zht10011hhxla6g9be98 color: rgb(120, 120, 120) color: inherit {"dp":"/members/[id]","o":"http://localhost:3000/members/cmib8zht10011hhxla6g9be98","sdkn":"@vercel/analytics/next","sdkv":"1.5.0","sv":"0.1.3","ts":1763881624608} +[03:43:09.206] Server LOG 🌳 GET /api/trees 返回数据: {} +[03:43:09.219] Server LOG 🌳 GET /api/trees 返回数据: {} +[03:43:09.301] Browser LOG %c[Vercel Web Analytics]%c [pageview] http://localhost:3000/members?treeId=cmib8zhrq0003hhxlvnsi96nh color: rgb(120, 120, 120) color: inherit {"dp":"/members","o":"http://localhost:3000/members?treeId=cmib8zhrq0003hhxlvnsi96nh","sdkn":"@vercel/analytics/next","sdkv":"1.5.0","sv":"0.1.3","ts":1763881632029} +[03:43:09.681] Server LOG ✓ Compiled in 89ms +[03:43:11.900] Server LOG ✓ Compiled in 125ms +[03:43:14.827] Browser LOG %c[Vercel Web Analytics]%c [pageview] http://localhost:3000/tree?treeId=cmib8zhrq0003hhxlvnsi96nh color: rgb(120, 120, 120) color: inherit {"dp":"/tree","o":"http://localhost:3000/tree?treeId=cmib8zhrq0003hhxlvnsi96nh","sdkn":"@vercel/analytics/next","sdkv":"1.5.0","sv":"0.1.3","ts":1763881636996} +[03:43:14.901] Server LOG 🌳 GET /api/trees 返回数据: {} +[03:43:14.924] Server LOG 🌳 GET /api/trees 返回数据: {} +[03:43:26.117] Server LOG 🌳 GET /api/trees 返回数据: {} +[03:43:26.131] Server LOG 🌳 GET /api/trees 返回数据: {} +[03:43:26.153] Server LOG 🌳 GET /api/trees 返回数据: {} +[03:43:26.163] Server LOG 👥 GET /api/trees/[treeId]/members 返回数据: {} +[03:43:26.216] Browser LOG %c[Vercel Web Analytics]%c [pageview] http://localhost:3000/members/cmib8zht8001bhhxlzoa6z9y2 color: rgb(120, 120, 120) color: inherit {"dp":"/members/[id]","o":"http://localhost:3000/members/cmib8zht8001bhhxlzoa6z9y2","sdkn":"@vercel/analytics/next","sdkv":"1.5.0","sv":"0.1.3","ts":1763881648939} +[03:43:47.315] Server LOG 🌳 GET /api/trees 返回数据: {} +[03:43:47.373] Server LOG 🌳 GET /api/trees 返回数据: {} +[03:43:47.403] Browser LOG %c[Vercel Web Analytics]%c [pageview] http://localhost:3000/tree?treeId=cmib8zhrq0003hhxlvnsi96nh color: rgb(120, 120, 120) color: inherit {"dp":"/tree","o":"http://localhost:3000/tree?treeId=cmib8zhrq0003hhxlvnsi96nh","sdkn":"@vercel/analytics/next","sdkv":"1.5.0","sv":"0.1.3","ts":1763881670135} +[03:43:48.985] Server LOG 🌳 GET /api/trees 返回数据: {} +[03:43:49.003] Server LOG 🌳 GET /api/trees 返回数据: {} +[03:43:49.028] Server LOG 🌳 GET /api/trees 返回数据: {} +[03:43:49.046] Server LOG 👥 GET /api/trees/[treeId]/members 返回数据: {} +[03:43:49.077] Browser LOG %c[Vercel Web Analytics]%c [pageview] http://localhost:3000/members/cmib8zhs5000dhhxlo39he5la color: rgb(120, 120, 120) color: inherit {"dp":"/members/[id]","o":"http://localhost:3000/members/cmib8zhs5000dhhxlo39he5la","sdkn":"@vercel/analytics/next","sdkv":"1.5.0","sv":"0.1.3","ts":1763881671798} +[03:44:00.785] Server LOG 🌳 GET /api/trees 返回数据: {} +[03:44:00.805] Server LOG 🌳 GET /api/trees 返回数据: {} +[03:44:00.872] Browser LOG %c[Vercel Web Analytics]%c [pageview] http://localhost:3000/tree?treeId=cmib8zhrq0003hhxlvnsi96nh color: rgb(120, 120, 120) color: inherit {"dp":"/tree","o":"http://localhost:3000/tree?treeId=cmib8zhrq0003hhxlvnsi96nh","sdkn":"@vercel/analytics/next","sdkv":"1.5.0","sv":"0.1.3","ts":1763881683602} +[03:44:07.285] Server LOG 🌳 GET /api/trees 返回数据: {} +[03:44:07.302] Server LOG 🌳 GET /api/trees 返回数据: {} +[03:44:07.376] Browser LOG %c[Vercel Web Analytics]%c [pageview] http://localhost:3000/members?treeId=cmib8zhrq0003hhxlvnsi96nh color: rgb(120, 120, 120) color: inherit {"dp":"/members","o":"http://localhost:3000/members?treeId=cmib8zhrq0003hhxlvnsi96nh","sdkn":"@vercel/analytics/next","sdkv":"1.5.0","sv":"0.1.3","ts":1763881690107} +[03:44:08.690] Server LOG 🌳 GET /api/trees 返回数据: {} +[03:44:08.753] Server LOG 👥 GET /api/trees/[treeId]/members 返回数据: {} +[03:44:08.768] Browser LOG %c[Vercel Web Analytics]%c [pageview] http://localhost:3000/members/new color: rgb(120, 120, 120) color: inherit {"dp":"/members/new","o":"http://localhost:3000/members/new","sdkn":"@vercel/analytics/next","sdkv":"1.5.0","sv":"0.1.3","ts":1763881691463} +[03:44:08.947] Server LOG 🌳 GET /api/trees 返回数据: {} +[03:44:08.961] Server LOG 🌳 GET /api/trees 返回数据: {} +[03:45:24.610] Server LOG 🌳 GET /api/trees 返回数据: {} +[03:45:24.628] Server LOG 🌳 GET /api/trees 返回数据: {} +[03:45:24.654] Server LOG 🌳 GET /api/trees 返回数据: {} +[03:45:24.662] Server LOG 👥 GET /api/trees/[treeId]/members 返回数据: {} +[03:45:24.698] Browser LOG %c[Vercel Web Analytics]%c [pageview] http://localhost:3000/members/f912b7c7-1b54-4c3f-a54b-2ebf91a62bb9 color: rgb(120, 120, 120) color: inherit {"dp":"/members/[id]","o":"http://localhost:3000/members/f912b7c7-1b54-4c3f-a54b-2ebf91a62bb9","sdkn":"@vercel/analytics/next","sdkv":"1.5.0","sv":"0.1.3","ts":1763881767429} +[03:45:52.944] Server LOG 🌳 GET /api/trees 返回数据: {} +[03:45:58.059] Server LOG 🌳 GET /api/trees 返回数据: {} +[03:45:59.297] Server LOG 🌳 GET /api/trees 返回数据: {} +[03:45:59.318] Server LOG 🌳 GET /api/trees 返回数据: {} +[03:45:59.403] Browser LOG %c[Vercel Web Analytics]%c [pageview] http://localhost:3000/members?treeId=cmib8zhrq0003hhxlvnsi96nh color: rgb(120, 120, 120) color: inherit {"dp":"/members","o":"http://localhost:3000/members?treeId=cmib8zhrq0003hhxlvnsi96nh","sdkn":"@vercel/analytics/next","sdkv":"1.5.0","sv":"0.1.3","ts":1763881802119} +[03:46:15.051] Server LOG 🌳 GET /api/trees 返回数据: {} +[03:46:15.071] Server LOG 🌳 GET /api/trees 返回数据: {} +[03:46:15.083] Server LOG 🌳 GET /api/trees 返回数据: {} +[03:46:15.116] Server LOG 👥 GET /api/trees/[treeId]/members 返回数据: {} +[03:46:15.185] Browser LOG %c[Vercel Web Analytics]%c [pageview] http://localhost:3000/members/cmibdnu7f000h13eixib24twb color: rgb(120, 120, 120) color: inherit {"dp":"/members/[id]","o":"http://localhost:3000/members/cmibdnu7f000h13eixib24twb","sdkn":"@vercel/analytics/next","sdkv":"1.5.0","sv":"0.1.3","ts":1763881817881} +[03:46:15.843] Server LOG ✓ Compiled in 60ms +[03:47:14.578] Server LOG 🌳 GET /api/trees 返回数据: {} +[03:47:16.275] Server LOG 🌳 GET /api/trees 返回数据: {} +[03:47:16.294] Server LOG 🌳 GET /api/trees 返回数据: {} +[03:47:16.402] Browser LOG %c[Vercel Web Analytics]%c [pageview] http://localhost:3000/members?treeId=cmib8zhrq0003hhxlvnsi96nh color: rgb(120, 120, 120) color: inherit {"dp":"/members","o":"http://localhost:3000/members?treeId=cmib8zhrq0003hhxlvnsi96nh","sdkn":"@vercel/analytics/next","sdkv":"1.5.0","sv":"0.1.3","ts":1763881879092} +[03:47:18.372] Server LOG 🌳 GET /api/trees 返回数据: {} +[03:47:18.445] Server LOG 🌳 GET /api/trees 返回数据: {} +[03:47:18.513] Browser LOG %c[Vercel Web Analytics]%c [pageview] http://localhost:3000/tree?treeId=cmib8zhrq0003hhxlvnsi96nh color: rgb(120, 120, 120) color: inherit {"dp":"/tree","o":"http://localhost:3000/tree?treeId=cmib8zhrq0003hhxlvnsi96nh","sdkn":"@vercel/analytics/next","sdkv":"1.5.0","sv":"0.1.3","ts":1763881881202} +[03:47:29.892] Server LOG 🌳 GET /api/trees 返回数据: {} +[03:47:29.910] Server LOG 🌳 GET /api/trees 返回数据: {} +[03:47:30.035] Browser LOG %c[Vercel Web Analytics]%c [pageview] http://localhost:3000/members?treeId=cmib8zhrq0003hhxlvnsi96nh color: rgb(120, 120, 120) color: inherit {"dp":"/members","o":"http://localhost:3000/members?treeId=cmib8zhrq0003hhxlvnsi96nh","sdkn":"@vercel/analytics/next","sdkv":"1.5.0","sv":"0.1.3","ts":1763881892727} +[03:47:41.882] Server LOG 🌳 GET /api/trees 返回数据: {} +[03:47:41.898] Server LOG 🌳 GET /api/trees 返回数据: {} +[03:47:41.919] Server LOG 🌳 GET /api/trees 返回数据: {} +[03:47:41.961] Server LOG 👥 GET /api/trees/[treeId]/members 返回数据: {} +[03:47:42.024] Browser LOG %c[Vercel Web Analytics]%c [pageview] http://localhost:3000/members/cmibdnu7f000h13eixib24twb color: rgb(120, 120, 120) color: inherit {"dp":"/members/[id]","o":"http://localhost:3000/members/cmibdnu7f000h13eixib24twb","sdkn":"@vercel/analytics/next","sdkv":"1.5.0","sv":"0.1.3","ts":1763881904712} +[03:48:28.816] Server LOG 🌳 GET /api/trees 返回数据: {} +[03:48:28.835] Server LOG 🌳 GET /api/trees 返回数据: {} +[03:48:28.969] Browser LOG %c[Vercel Web Analytics]%c [pageview] http://localhost:3000/tree?treeId=cmib8zhrq0003hhxlvnsi96nh color: rgb(120, 120, 120) color: inherit {"dp":"/tree","o":"http://localhost:3000/tree?treeId=cmib8zhrq0003hhxlvnsi96nh","sdkn":"@vercel/analytics/next","sdkv":"1.5.0","sv":"0.1.3","ts":1763881951650} +[03:48:32.302] Browser LOG D3OrgChartFlow render, selectedMembers: [] relationMode: false +[03:48:32.302] Browser LOG D3OrgChartFlow render, selectedMembers: [] relationMode: false +[03:48:32.302] Browser LOG D3OrgChartFlow render, selectedMembers: [] relationMode: false +[03:48:32.302] Browser LOG D3OrgChartFlow render, selectedMembers: [] relationMode: false +[03:48:32.302] Browser LOG D3OrgChartFlow render, selectedMembers: [] relationMode: false +[03:48:32.302] Browser LOG D3OrgChartFlow render, selectedMembers: [] relationMode: false +[03:48:32.302] Browser LOG D3OrgChartFlow render, selectedMembers: [] relationMode: false +[03:48:32.302] Browser LOG D3OrgChartFlow render, selectedMembers: [] relationMode: false +[03:48:32.302] Browser LOG D3OrgChartFlow render, selectedMembers: [] relationMode: false +[03:48:32.302] Browser LOG D3OrgChartFlow render, selectedMembers: [] relationMode: false +[03:48:32.302] Browser LOG D3OrgChartFlow render, selectedMembers: [] relationMode: false +[03:48:32.302] Browser LOG D3OrgChartFlow render, selectedMembers: [] relationMode: false +[03:49:33.759] Server LOG 🌳 GET /api/trees 返回数据: {} +[03:50:08.625] Server LOG 🌳 GET /api/trees 返回数据: {} +[03:50:08.640] Server LOG 🌳 GET /api/trees 返回数据: {} +[03:50:08.727] Browser LOG %c[Vercel Web Analytics]%c [pageview] http://localhost:3000/members?treeId=cmib8zhrq0003hhxlvnsi96nh color: rgb(120, 120, 120) color: inherit {"dp":"/members","o":"http://localhost:3000/members?treeId=cmib8zhrq0003hhxlvnsi96nh","sdkn":"@vercel/analytics/next","sdkv":"1.5.0","sv":"0.1.3","ts":1763882051465} +[03:50:11.306] Server LOG 🌳 GET /api/trees 返回数据: {} +[03:50:11.320] Server LOG 🌳 GET /api/trees 返回数据: {} +[03:50:11.336] Server LOG 🌳 GET /api/trees 返回数据: {} +[03:50:11.563] Browser LOG %c[Vercel Web Analytics]%c [pageview] http://localhost:3000/members/cmibdnu7f000h13eixib24twb color: rgb(120, 120, 120) color: inherit {"dp":"/members/[id]","o":"http://localhost:3000/members/cmibdnu7f000h13eixib24twb","sdkn":"@vercel/analytics/next","sdkv":"1.5.0","sv":"0.1.3","ts":1763882054145} +[03:50:11.580] Server LOG 👥 GET /api/trees/[treeId]/members 返回数据: {} +[03:50:14.832] Server LOG 🌳 GET /api/trees 返回数据: {} +[03:50:14.846] Server LOG 🌳 GET /api/trees 返回数据: {} +[03:50:14.874] Server LOG 🌳 GET /api/trees 返回数据: {} +[03:50:15.158] Server LOG 👥 GET /api/trees/[treeId]/members 返回数据: {} +[03:50:15.340] Browser LOG %c[Vercel Web Analytics]%c [pageview] http://localhost:3000/members color: rgb(120, 120, 120) color: inherit {"dp":"/members","o":"http://localhost:3000/members","sdkn":"@vercel/analytics/next","sdkv":"1.5.0","sv":"0.1.3","ts":1763882057672} +[03:50:16.782] Server LOG 🌳 GET /api/trees 返回数据: {} +[03:50:16.795] Server LOG 🌳 GET /api/trees 返回数据: {} +[03:50:16.813] Server LOG 🌳 GET /api/trees 返回数据: {} +[03:50:17.078] Server LOG 👥 GET /api/trees/[treeId]/members 返回数据: {} +[03:50:17.217] Browser LOG %c[Vercel Web Analytics]%c [pageview] http://localhost:3000/members/new color: rgb(120, 120, 120) color: inherit {"dp":"/members/new","o":"http://localhost:3000/members/new","sdkn":"@vercel/analytics/next","sdkv":"1.5.0","sv":"0.1.3","ts":1763882059622} +[03:51:16.253] Server LOG 🌳 GET /api/trees 返回数据: {} +[03:51:16.288] Server LOG 🌳 GET /api/trees 返回数据: {} +[03:51:16.308] Server LOG 🌳 GET /api/trees 返回数据: {} +[03:51:16.350] Server LOG 👥 GET /api/trees/[treeId]/members 返回数据: {} +[03:51:16.375] Browser LOG %c[Vercel Web Analytics]%c [pageview] http://localhost:3000/members/916a6467-4d68-46a2-847e-dd3c6cb88268 color: rgb(120, 120, 120) color: inherit {"dp":"/members/[id]","o":"http://localhost:3000/members/916a6467-4d68-46a2-847e-dd3c6cb88268","sdkn":"@vercel/analytics/next","sdkv":"1.5.0","sv":"0.1.3","ts":1763882119051} +[03:51:28.101] Server LOG 🌳 GET /api/trees 返回数据: {} +[03:51:28.119] Server LOG 🌳 GET /api/trees 返回数据: {} +[03:51:28.207] Browser LOG %c[Vercel Web Analytics]%c [pageview] http://localhost:3000/members?treeId=cmib8zhrq0003hhxlvnsi96nh color: rgb(120, 120, 120) color: inherit {"dp":"/members","o":"http://localhost:3000/members?treeId=cmib8zhrq0003hhxlvnsi96nh","sdkn":"@vercel/analytics/next","sdkv":"1.5.0","sv":"0.1.3","ts":1763882130910} +[03:51:32.809] Server LOG 🌳 GET /api/trees 返回数据: {} +[03:51:32.826] Server LOG 🌳 GET /api/trees 返回数据: {} +[03:51:32.840] Server LOG 🌳 GET /api/trees 返回数据: {} +[03:51:32.875] Server LOG 👥 GET /api/trees/[treeId]/members 返回数据: {} +[03:51:32.940] Browser LOG %c[Vercel Web Analytics]%c [pageview] http://localhost:3000/members/cmibdvdad000n13ei0juo7xxm color: rgb(120, 120, 120) color: inherit {"dp":"/members/[id]","o":"http://localhost:3000/members/cmibdvdad000n13ei0juo7xxm","sdkn":"@vercel/analytics/next","sdkv":"1.5.0","sv":"0.1.3","ts":1763882135619} +[03:51:38.505] Server LOG 🌳 GET /api/trees 返回数据: {} +[03:51:38.522] Server LOG 🌳 GET /api/trees 返回数据: {} +[03:51:38.632] Browser LOG %c[Vercel Web Analytics]%c [pageview] http://localhost:3000/members?treeId=cmib8zhrq0003hhxlvnsi96nh color: rgb(120, 120, 120) color: inherit {"dp":"/members","o":"http://localhost:3000/members?treeId=cmib8zhrq0003hhxlvnsi96nh","sdkn":"@vercel/analytics/next","sdkv":"1.5.0","sv":"0.1.3","ts":1763882141310} +[03:51:41.107] Server LOG 🌳 GET /api/trees 返回数据: {} +[03:51:41.129] Server LOG 🌳 GET /api/trees 返回数据: {} +[03:51:41.273] Browser LOG %c[Vercel Web Analytics]%c [pageview] http://localhost:3000/tree?treeId=cmib8zhrq0003hhxlvnsi96nh color: rgb(120, 120, 120) color: inherit {"dp":"/tree","o":"http://localhost:3000/tree?treeId=cmib8zhrq0003hhxlvnsi96nh","sdkn":"@vercel/analytics/next","sdkv":"1.5.0","sv":"0.1.3","ts":1763882143916} +[03:52:17.796] Server LOG ✓ Compiled in 54ms +[03:53:16.125] Server LOG ✓ Compiled in 76ms +[03:53:33.143] Server LOG 🌳 GET /api/trees 返回数据: {} +[03:53:33.539] Server LOG 🌳 GET /api/trees 返回数据: {} +[03:53:33.591] Server LOG 🌳 GET /api/trees 返回数据: {} +[03:53:33.673] Browser LOG %c[Vercel Web Analytics]%c [pageview] http://localhost:3000/members?treeId=cmib8zhrq0003hhxlvnsi96nh color: rgb(120, 120, 120) color: inherit {"dp":"/members","o":"http://localhost:3000/members?treeId=cmib8zhrq0003hhxlvnsi96nh","sdkn":"@vercel/analytics/next","sdkv":"1.5.0","sv":"0.1.3","ts":1763882256352} +[03:53:34.855] Server LOG 🌳 GET /api/trees 返回数据: {} +[03:53:34.866] Server LOG 🌳 GET /api/trees 返回数据: {} +[03:53:34.888] Server LOG 🌳 GET /api/trees 返回数据: {} +[03:53:35.169] Server LOG 👥 GET /api/trees/[treeId]/members 返回数据: {} +[03:53:35.321] Browser LOG %c[Vercel Web Analytics]%c [pageview] http://localhost:3000/members/new color: rgb(120, 120, 120) color: inherit {"dp":"/members/new","o":"http://localhost:3000/members/new","sdkn":"@vercel/analytics/next","sdkv":"1.5.0","sv":"0.1.3","ts":1763882257667} +[03:54:55.986] Server LOG 🌳 GET /api/trees 返回数据: {} +[03:54:56.000] Server LOG 🌳 GET /api/trees 返回数据: {} +[03:54:56.020] Server LOG 🌳 GET /api/trees 返回数据: {} +[03:54:56.252] Server LOG 👥 GET /api/trees/[treeId]/members 返回数据: {} +[03:54:56.337] Browser LOG %c[Vercel Web Analytics]%c [pageview] http://localhost:3000/members color: rgb(120, 120, 120) color: inherit {"dp":"/members","o":"http://localhost:3000/members","sdkn":"@vercel/analytics/next","sdkv":"1.5.0","sv":"0.1.3","ts":1763882338804} +[03:55:06.385] Server LOG 🌳 GET /api/trees 返回数据: {} +[03:55:06.405] Server LOG 🌳 GET /api/trees 返回数据: {} +[03:55:06.548] Browser LOG %c[Vercel Web Analytics]%c [pageview] http://localhost:3000/tree?treeId=cmib8zhrq0003hhxlvnsi96nh color: rgb(120, 120, 120) color: inherit {"dp":"/tree","o":"http://localhost:3000/tree?treeId=cmib8zhrq0003hhxlvnsi96nh","sdkn":"@vercel/analytics/next","sdkv":"1.5.0","sv":"0.1.3","ts":1763882349200} +[03:55:11.655] Browser LOG D3OrgChartFlow render, selectedMembers: [] relationMode: false +[03:55:11.655] Browser LOG D3OrgChartFlow render, selectedMembers: [] relationMode: false +[03:55:11.655] Browser LOG D3OrgChartFlow render, selectedMembers: [] relationMode: false +[03:55:11.655] Browser LOG D3OrgChartFlow render, selectedMembers: [] relationMode: false +[03:55:11.655] Browser LOG D3OrgChartFlow render, selectedMembers: [] relationMode: false +[03:55:11.655] Browser LOG D3OrgChartFlow render, selectedMembers: [] relationMode: false +[03:55:11.655] Browser LOG D3OrgChartFlow render, selectedMembers: [] relationMode: false +[03:55:11.655] Browser LOG D3OrgChartFlow render, selectedMembers: [] relationMode: false +[03:56:05.965] Server LOG ✓ Compiled in 67ms +[03:56:06.237] Server LOG 🌳 GET /api/trees 返回数据: {} +[03:56:07.642] Browser LOG D3OrgChartFlow render, selectedMembers: [] relationMode: false +[03:56:07.642] Browser LOG D3OrgChartFlow render, selectedMembers: [] relationMode: false +[03:56:07.642] Browser LOG D3OrgChartFlow render, selectedMembers: [] relationMode: false +[03:56:07.642] Browser LOG D3OrgChartFlow render, selectedMembers: [] relationMode: false +[03:56:07.642] Browser LOG D3OrgChartFlow render, selectedMembers: [] relationMode: false +[03:56:07.642] Browser LOG D3OrgChartFlow render, selectedMembers: [] relationMode: false +[03:56:07.642] Browser LOG D3OrgChartFlow render, selectedMembers: [] relationMode: false +[03:56:07.642] Browser LOG D3OrgChartFlow render, selectedMembers: [] relationMode: false +[03:56:10.583] Server LOG 🌳 GET /api/trees 返回数据: {} +[03:56:10.598] Server LOG 🌳 GET /api/trees 返回数据: {} +[03:56:10.694] Browser LOG %c[Vercel Web Analytics]%c [pageview] http://localhost:3000/members?treeId=cmib8zhrq0003hhxlvnsi96nh color: rgb(120, 120, 120) color: inherit {"dp":"/members","o":"http://localhost:3000/members?treeId=cmib8zhrq0003hhxlvnsi96nh","sdkn":"@vercel/analytics/next","sdkv":"1.5.0","sv":"0.1.3","ts":1763882413401} +[03:56:22.296] Server LOG 🌳 GET /api/trees 返回数据: {} +[03:56:22.314] Server LOG 🌳 GET /api/trees 返回数据: {} +[03:56:22.325] Server LOG 🌳 GET /api/trees 返回数据: {} +[03:56:22.559] Server LOG 👥 GET /api/trees/[treeId]/members 返回数据: {} +[03:56:22.686] Browser LOG %c[Vercel Web Analytics]%c [pageview] http://localhost:3000/members/new color: rgb(120, 120, 120) color: inherit {"dp":"/members/new","o":"http://localhost:3000/members/new","sdkn":"@vercel/analytics/next","sdkv":"1.5.0","sv":"0.1.3","ts":1763882425086} +[03:56:46.388] Server LOG ✓ Compiled in 62ms +[03:56:59.315] Server LOG 🌳 GET /api/trees 返回数据: {} +[03:57:58.458] Server LOG ✓ Compiled in 83ms +[03:59:09.531] Server LOG ✓ Compiled in 69ms +[03:59:09.704] Browser ERROR uncaughtError: ReferenceError: handleSpouseChange is not defined +[03:59:31.140] Server LOG ✓ Compiled in 59ms +[03:59:31.183] Server WARN ⚠ Fast Refresh had to perform a full reload due to a runtime error. +[03:59:32.250] Browser LOG %c[Vercel Web Analytics]%c [pageview] http://localhost:3000/members/new color: rgb(120, 120, 120) color: inherit {"dp":"/members/new","o":"http://localhost:3000/members/new","sdkn":"@vercel/analytics/next","sdkv":"1.5.0","sv":"0.1.3","ts":1763882614167} +[03:59:32.953] Browser INFO %cDownload the React DevTools for a better development experience: https://react.dev/link/react-devtools font-weight:bold +[03:59:33.610] Server LOG 🌳 GET /api/trees 返回数据: {} +[03:59:33.638] Server LOG 🌳 GET /api/trees 返回数据: {} +[03:59:33.703] Server LOG 👥 GET /api/trees/[treeId]/members 返回数据: {} +[03:59:33.812] Browser LOG %c[Vercel Web Analytics]%c Debug mode is enabled by default in development. No requests will be sent to the server. color: rgb(120, 120, 120) color: inherit +[03:59:33.812] Browser LOG %c[Vercel Web Analytics]%c Running queued event color: rgb(120, 120, 120) color: inherit pageview {"path":"/members/new","route":"/members/new"} +[03:59:33.812] Browser LOG %c[Vercel Web Analytics]%c [pageview] http://localhost:3000/members/new color: rgb(120, 120, 120) color: inherit {"dp":"/members/new","o":"http://localhost:3000/members/new","sdkn":"@vercel/analytics/next","sdkv":"1.5.0","sv":"0.1.3","ts":1763882616492} +[03:59:37.649] Server LOG 🌳 GET /api/trees 返回数据: {} +[03:59:44.622] Browser LOG %c[Vercel Web Analytics]%c [pageview] http://localhost:3000/members?treeId=cmib8zhrq0003hhxlvnsi96nh color: rgb(120, 120, 120) color: inherit {"dp":"/members","o":"http://localhost:3000/members?treeId=cmib8zhrq0003hhxlvnsi96nh","sdkn":"@vercel/analytics/next","sdkv":"1.5.0","sv":"0.1.3","ts":1763882627321} +[03:59:44.807] Server LOG 🌳 GET /api/trees 返回数据: {} +[03:59:44.822] Server LOG 🌳 GET /api/trees 返回数据: {} +[03:59:46.029] Server LOG 🌳 GET /api/trees 返回数据: {} +[03:59:46.042] Server LOG 🌳 GET /api/trees 返回数据: {} +[03:59:46.053] Server LOG 🌳 GET /api/trees 返回数据: {} +[03:59:46.340] Server LOG 👥 GET /api/trees/[treeId]/members 返回数据: {} +[03:59:46.464] Browser LOG %c[Vercel Web Analytics]%c [pageview] http://localhost:3000/members/new color: rgb(120, 120, 120) color: inherit {"dp":"/members/new","o":"http://localhost:3000/members/new","sdkn":"@vercel/analytics/next","sdkv":"1.5.0","sv":"0.1.3","ts":1763882628857} +[04:00:51.401] Server LOG ✓ Compiled in 56ms +[04:00:58.934] Server LOG ✓ Compiled in 56ms +[04:01:06.184] Server LOG 🌳 GET /api/trees 返回数据: {} +[04:01:07.539] Server LOG ✓ Compiled in 72ms +[04:01:20.865] Server LOG ✓ Compiled in 54ms +[04:01:34.453] Server LOG ✓ Compiled in 68ms +[04:01:35.566] Server LOG 🌳 GET /api/trees 返回数据: {} +[04:01:35.579] Server LOG 🌳 GET /api/trees 返回数据: {} +[04:01:35.593] Server LOG 🌳 GET /api/trees 返回数据: {} +[04:01:35.911] Server LOG 👥 GET /api/trees/[treeId]/members 返回数据: {} +[04:01:35.978] Browser LOG %c[Vercel Web Analytics]%c [pageview] http://localhost:3000/members color: rgb(120, 120, 120) color: inherit {"dp":"/members","o":"http://localhost:3000/members","sdkn":"@vercel/analytics/next","sdkv":"1.5.0","sv":"0.1.3","ts":1763882738394} +[04:01:46.964] Server LOG ✓ Compiled in 59ms +[04:02:49.577] Server LOG 🌳 GET /api/trees 返回数据: {} +[04:02:50.098] Browser LOG %c[Vercel Web Analytics]%c [pageview] http://localhost:3000/tree?treeId=cmib8zhrq0003hhxlvnsi96nh color: rgb(120, 120, 120) color: inherit {"dp":"/tree","o":"http://localhost:3000/tree?treeId=cmib8zhrq0003hhxlvnsi96nh","sdkn":"@vercel/analytics/next","sdkv":"1.5.0","sv":"0.1.3","ts":1763882812827} +[04:02:50.870] Server LOG 🌳 GET /api/trees 返回数据: {} +[04:02:50.902] Server LOG 🌳 GET /api/trees 返回数据: {} +[04:03:02.574] Browser LOG D3OrgChartFlow render, selectedMembers: [] relationMode: false +[04:03:02.574] Browser LOG D3OrgChartFlow render, selectedMembers: [] relationMode: false +[04:03:02.574] Browser LOG D3OrgChartFlow render, selectedMembers: [] relationMode: false +[04:03:02.574] Browser LOG D3OrgChartFlow render, selectedMembers: [] relationMode: false +[04:03:02.574] Browser LOG D3OrgChartFlow render, selectedMembers: [] relationMode: false +[04:03:02.574] Browser LOG D3OrgChartFlow render, selectedMembers: [] relationMode: false +[04:03:02.574] Browser LOG D3OrgChartFlow render, selectedMembers: [] relationMode: false +[04:03:02.574] Browser LOG D3OrgChartFlow render, selectedMembers: [] relationMode: false +[04:03:03.451] Server LOG ✓ Compiled in 66ms +[04:03:12.165] Server LOG 🌳 GET /api/trees 返回数据: {} +[04:03:12.252] Browser LOG %c[Vercel Web Analytics]%c [pageview] http://localhost:3000/members?treeId=cmib8zhrq0003hhxlvnsi96nh color: rgb(120, 120, 120) color: inherit {"dp":"/members","o":"http://localhost:3000/members?treeId=cmib8zhrq0003hhxlvnsi96nh","sdkn":"@vercel/analytics/next","sdkv":"1.5.0","sv":"0.1.3","ts":1763882834922} +[04:03:12.378] Server LOG 🌳 GET /api/trees 返回数据: {} +[04:03:22.664] Browser INFO %cDownload the React DevTools for a better development experience: https://react.dev/link/react-devtools font-weight:bold +[04:03:22.859] Browser LOG %c[Vercel Web Analytics]%c Debug mode is enabled by default in development. No requests will be sent to the server. color: rgb(120, 120, 120) color: inherit +[04:03:22.859] Browser LOG %c[Vercel Web Analytics]%c Running queued event color: rgb(120, 120, 120) color: inherit pageview {"path":"/members","route":"/members"} +[04:03:22.859] Browser LOG %c[Vercel Web Analytics]%c [pageview] http://localhost:3000/members?treeId=cmib8zhrq0003hhxlvnsi96nh color: rgb(120, 120, 120) color: inherit {"dp":"/members","o":"http://localhost:3000/members?treeId=cmib8zhrq0003hhxlvnsi96nh","sdkn":"@vercel/analytics/next","sdkv":"1.5.0","sv":"0.1.3","ts":1763882845587} +[04:03:22.907] Server LOG 🌳 GET /api/trees 返回数据: {} +[04:03:22.915] Server LOG 🌳 GET /api/trees/[treeId] 返回数据: {} +[04:03:22.981] Server LOG 👥 GET /api/trees/[treeId]/members 返回数据: {} +[04:04:15.370] Server LOG 🌳 GET /api/trees 返回数据: {} +[04:04:15.600] Server LOG 🌳 GET /api/trees 返回数据: {} +[04:04:15.658] Server LOG 👥 GET /api/trees/[treeId]/members 返回数据: {} +[04:04:15.670] Browser LOG %c[Vercel Web Analytics]%c [pageview] http://localhost:3000/members/cmibe8n5a000v13eibqryw8ey color: rgb(120, 120, 120) color: inherit {"dp":"/members/[id]","o":"http://localhost:3000/members/cmibe8n5a000v13eibqryw8ey","sdkn":"@vercel/analytics/next","sdkv":"1.5.0","sv":"0.1.3","ts":1763882898406} +[04:04:15.897] Server LOG 🌳 GET /api/trees 返回数据: {} +[04:04:15.919] Server LOG 🌳 GET /api/trees 返回数据: {} +[04:04:28.060] Server LOG ✓ Compiled in 59ms +[04:04:41.079] Server LOG 🌳 GET /api/trees 返回数据: {} +[04:04:41.104] Server LOG 🌳 GET /api/trees 返回数据: {} +[04:04:41.149] Browser LOG %c[Vercel Web Analytics]%c [pageview] http://localhost:3000/members?treeId=cmib8zhrq0003hhxlvnsi96nh color: rgb(120, 120, 120) color: inherit {"dp":"/members","o":"http://localhost:3000/members?treeId=cmib8zhrq0003hhxlvnsi96nh","sdkn":"@vercel/analytics/next","sdkv":"1.5.0","sv":"0.1.3","ts":1763882923805} +[04:04:45.654] Server LOG 🌳 GET /api/trees 返回数据: {} +[04:04:45.667] Server LOG 🌳 GET /api/trees 返回数据: {} +[04:04:45.678] Server LOG 🌳 GET /api/trees 返回数据: {} +[04:04:45.726] Server LOG 👥 GET /api/trees/[treeId]/members 返回数据: {} +[04:04:45.786] Browser LOG %c[Vercel Web Analytics]%c [pageview] http://localhost:3000/members/cmibe8n5a000v13eibqryw8ey color: rgb(120, 120, 120) color: inherit {"dp":"/members/[id]","o":"http://localhost:3000/members/cmibe8n5a000v13eibqryw8ey","sdkn":"@vercel/analytics/next","sdkv":"1.5.0","sv":"0.1.3","ts":1763882928483} +[04:05:27.919] Browser LOG %c[Vercel Web Analytics]%c [pageview] http://localhost:3000/tree?treeId=cmib8zhrq0003hhxlvnsi96nh color: rgb(120, 120, 120) color: inherit {"dp":"/tree","o":"http://localhost:3000/tree?treeId=cmib8zhrq0003hhxlvnsi96nh","sdkn":"@vercel/analytics/next","sdkv":"1.5.0","sv":"0.1.3","ts":1763882969799} +[04:05:28.061] Server LOG 🌳 GET /api/trees 返回数据: {} +[04:05:28.077] Server LOG 🌳 GET /api/trees 返回数据: {} +[04:05:41.091] Server LOG 🌳 GET /api/trees 返回数据: {} +[04:05:41.105] Server LOG 🌳 GET /api/trees 返回数据: {} +[04:05:41.223] Browser LOG %c[Vercel Web Analytics]%c [pageview] http://localhost:3000/members?treeId=cmib8zhrq0003hhxlvnsi96nh color: rgb(120, 120, 120) color: inherit {"dp":"/members","o":"http://localhost:3000/members?treeId=cmib8zhrq0003hhxlvnsi96nh","sdkn":"@vercel/analytics/next","sdkv":"1.5.0","sv":"0.1.3","ts":1763882983668} +[04:05:51.164] Server LOG 🌳 GET /api/trees 返回数据: {} +[04:05:51.174] Server LOG 🌳 GET /api/trees 返回数据: {} +[04:05:51.191] Server LOG 🌳 GET /api/trees 返回数据: {} +[04:05:51.235] Server LOG 👥 GET /api/trees/[treeId]/members 返回数据: {} +[04:05:51.311] Browser LOG %c[Vercel Web Analytics]%c [pageview] http://localhost:3000/members/cmib8zhrv0007hhxl3q1knmo9 color: rgb(120, 120, 120) color: inherit {"dp":"/members/[id]","o":"http://localhost:3000/members/cmib8zhrv0007hhxl3q1knmo9","sdkn":"@vercel/analytics/next","sdkv":"1.5.0","sv":"0.1.3","ts":1763882993738} +[04:06:10.416] Server LOG 🌳 GET /api/trees 返回数据: {} +[04:06:10.448] Server LOG 🌳 GET /api/trees 返回数据: {} +[04:06:10.503] Browser LOG %c[Vercel Web Analytics]%c [pageview] http://localhost:3000/members?treeId=cmib8zhrq0003hhxlvnsi96nh color: rgb(120, 120, 120) color: inherit {"dp":"/members","o":"http://localhost:3000/members?treeId=cmib8zhrq0003hhxlvnsi96nh","sdkn":"@vercel/analytics/next","sdkv":"1.5.0","sv":"0.1.3","ts":1763883012955} +[04:06:11.830] Server LOG 🌳 GET /api/trees 返回数据: {} +[04:06:11.845] Server LOG 🌳 GET /api/trees 返回数据: {} +[04:06:11.859] Server LOG 🌳 GET /api/trees 返回数据: {} +[04:06:11.909] Server LOG 👥 GET /api/trees/[treeId]/members 返回数据: {} +[04:06:11.976] Browser LOG %c[Vercel Web Analytics]%c [pageview] http://localhost:3000/members/cmibe8n5a000v13eibqryw8ey color: rgb(120, 120, 120) color: inherit {"dp":"/members/[id]","o":"http://localhost:3000/members/cmibe8n5a000v13eibqryw8ey","sdkn":"@vercel/analytics/next","sdkv":"1.5.0","sv":"0.1.3","ts":1763883014404} +[04:06:24.595] Server LOG 🌳 GET /api/trees 返回数据: {} +[04:06:24.617] Server LOG 🌳 GET /api/trees 返回数据: {} +[04:06:24.745] Browser LOG %c[Vercel Web Analytics]%c [pageview] http://localhost:3000/members?treeId=cmib8zhrq0003hhxlvnsi96nh color: rgb(120, 120, 120) color: inherit {"dp":"/members","o":"http://localhost:3000/members?treeId=cmib8zhrq0003hhxlvnsi96nh","sdkn":"@vercel/analytics/next","sdkv":"1.5.0","sv":"0.1.3","ts":1763883027163} +[04:06:27.316] Server LOG 🌳 GET /api/trees 返回数据: {} +[04:06:27.329] Server LOG 🌳 GET /api/trees 返回数据: {} +[04:06:27.479] Browser LOG %c[Vercel Web Analytics]%c [pageview] http://localhost:3000/tree?treeId=cmib8zhrq0003hhxlvnsi96nh color: rgb(120, 120, 120) color: inherit {"dp":"/tree","o":"http://localhost:3000/tree?treeId=cmib8zhrq0003hhxlvnsi96nh","sdkn":"@vercel/analytics/next","sdkv":"1.5.0","sv":"0.1.3","ts":1763883029889} +[04:06:32.739] Browser LOG D3OrgChartFlow render, selectedMembers: [] relationMode: false +[04:06:32.739] Browser LOG D3OrgChartFlow render, selectedMembers: [] relationMode: false +[04:06:32.739] Browser LOG D3OrgChartFlow render, selectedMembers: [] relationMode: false +[04:06:32.739] Browser LOG D3OrgChartFlow render, selectedMembers: [] relationMode: false +[04:06:32.739] Browser LOG D3OrgChartFlow render, selectedMembers: [] relationMode: false +[04:06:32.739] Browser LOG D3OrgChartFlow render, selectedMembers: [] relationMode: false +[04:06:32.739] Browser LOG D3OrgChartFlow render, selectedMembers: [] relationMode: false +[04:06:32.739] Browser LOG D3OrgChartFlow render, selectedMembers: [] relationMode: false +[04:06:32.739] Browser LOG D3OrgChartFlow render, selectedMembers: [] relationMode: false +[04:06:32.739] Browser LOG D3OrgChartFlow render, selectedMembers: [] relationMode: false +[04:06:55.004] Browser LOG D3 onMemberClick triggered: cmibdvdad000n13ei0juo7xxm relationMode: false +[04:06:55.004] Browser LOG Navigating to member detail +[04:06:55.004] Browser LOG D3 onMemberClick triggered: cmibdvdad000n13ei0juo7xxm relationMode: false +[04:06:55.004] Browser LOG Navigating to member detail +[04:06:55.103] Server LOG 🌳 GET /api/trees 返回数据: {} +[04:06:55.124] Server LOG 🌳 GET /api/trees 返回数据: {} +[04:06:55.146] Server LOG 🌳 GET /api/trees 返回数据: {} +[04:06:55.189] Server LOG 👥 GET /api/trees/[treeId]/members 返回数据: {} +[04:06:55.227] Browser LOG %c[Vercel Web Analytics]%c [pageview] http://localhost:3000/members/cmibdvdad000n13ei0juo7xxm color: rgb(120, 120, 120) color: inherit {"dp":"/members/[id]","o":"http://localhost:3000/members/cmibdvdad000n13ei0juo7xxm","sdkn":"@vercel/analytics/next","sdkv":"1.5.0","sv":"0.1.3","ts":1763883057612} +[04:06:57.866] Server LOG 🌳 GET /api/trees 返回数据: {} +[04:06:57.881] Server LOG 🌳 GET /api/trees 返回数据: {} +[04:06:58.102] Browser LOG D3OrgChartFlow render, selectedMembers: [] relationMode: false +[04:06:58.102] Browser LOG D3OrgChartFlow render, selectedMembers: [] relationMode: false +[04:06:58.102] Browser LOG D3OrgChartFlow render, selectedMembers: [] relationMode: false +[04:06:58.102] Browser LOG D3OrgChartFlow render, selectedMembers: [] relationMode: false +[04:06:58.102] Browser LOG %c[Vercel Web Analytics]%c [pageview] http://localhost:3000/tree?treeId=cmib8zhrq0003hhxlvnsi96nh&view=d3-org-chart color: rgb(120, 120, 120) color: inherit {"dp":"/tree","o":"http://localhost:3000/tree?treeId=cmib8zhrq0003hhxlvnsi96nh&view=d3-org-chart","sdkn":"@vercel/analytics/next","sdkv":"1.5.0","sv":"0.1.3","ts":1763883060438} +[04:06:58.102] Browser LOG D3OrgChartFlow render, selectedMembers: [] relationMode: false +[04:06:58.102] Browser LOG D3OrgChartFlow render, selectedMembers: [] relationMode: false +[04:06:58.102] Browser LOG D3OrgChartFlow render, selectedMembers: [] relationMode: false +[04:06:58.102] Browser LOG D3OrgChartFlow render, selectedMembers: [] relationMode: false +[04:07:00.256] Browser LOG D3 onMemberClick triggered: cmib8zhsm000rhhxlwm3mv5ci relationMode: false +[04:07:00.256] Browser LOG Navigating to member detail +[04:07:00.256] Browser LOG D3 onMemberClick triggered: cmib8zhsm000rhhxlwm3mv5ci relationMode: false +[04:07:00.256] Browser LOG Navigating to member detail +[04:07:00.256] Browser LOG D3 onMemberClick triggered: cmib8zhsm000rhhxlwm3mv5ci relationMode: false +[04:07:00.256] Browser LOG Navigating to member detail +[04:07:00.319] Server LOG 🌳 GET /api/trees 返回数据: {} +[04:07:00.333] Server LOG 🌳 GET /api/trees 返回数据: {} +[04:07:00.348] Server LOG 🌳 GET /api/trees 返回数据: {} +[04:07:00.421] Server LOG 👥 GET /api/trees/[treeId]/members 返回数据: {} +[04:07:00.480] Browser LOG %c[Vercel Web Analytics]%c [pageview] http://localhost:3000/members/cmib8zhsm000rhhxlwm3mv5ci color: rgb(120, 120, 120) color: inherit {"dp":"/members/[id]","o":"http://localhost:3000/members/cmib8zhsm000rhhxlwm3mv5ci","sdkn":"@vercel/analytics/next","sdkv":"1.5.0","sv":"0.1.3","ts":1763883062883} +[04:07:13.478] Server LOG 🌳 GET /api/trees 返回数据: {} +[04:07:13.494] Server LOG 🌳 GET /api/trees 返回数据: {} +[04:07:13.713] Browser LOG D3OrgChartFlow render, selectedMembers: [] relationMode: false +[04:07:13.713] Browser LOG D3OrgChartFlow render, selectedMembers: [] relationMode: false +[04:07:13.713] Browser LOG D3OrgChartFlow render, selectedMembers: [] relationMode: false +[04:07:13.713] Browser LOG D3OrgChartFlow render, selectedMembers: [] relationMode: false +[04:07:13.713] Browser LOG %c[Vercel Web Analytics]%c [pageview] http://localhost:3000/tree?treeId=cmib8zhrq0003hhxlvnsi96nh&view=d3-org-chart color: rgb(120, 120, 120) color: inherit {"dp":"/tree","o":"http://localhost:3000/tree?treeId=cmib8zhrq0003hhxlvnsi96nh&view=d3-org-chart","sdkn":"@vercel/analytics/next","sdkv":"1.5.0","sv":"0.1.3","ts":1763883076046} +[04:07:13.713] Browser LOG D3OrgChartFlow render, selectedMembers: [] relationMode: false +[04:07:13.713] Browser LOG D3OrgChartFlow render, selectedMembers: [] relationMode: false +[04:07:13.713] Browser LOG D3OrgChartFlow render, selectedMembers: [] relationMode: false +[04:07:13.713] Browser LOG D3OrgChartFlow render, selectedMembers: [] relationMode: false +[04:07:15.877] Browser LOG D3 onMemberClick triggered: cmibdvdad000n13ei0juo7xxm relationMode: false +[04:07:15.877] Browser LOG Navigating to member detail +[04:07:15.877] Browser LOG D3 onMemberClick triggered: cmibdvdad000n13ei0juo7xxm relationMode: false +[04:07:15.877] Browser LOG Navigating to member detail +[04:07:15.877] Browser LOG D3 onMemberClick triggered: cmibdvdad000n13ei0juo7xxm relationMode: false +[04:07:15.877] Browser LOG Navigating to member detail +[04:07:15.943] Server LOG 🌳 GET /api/trees 返回数据: {} +[04:07:15.959] Server LOG 🌳 GET /api/trees 返回数据: {} +[04:07:15.976] Server LOG 🌳 GET /api/trees 返回数据: {} +[04:07:16.040] Server LOG 👥 GET /api/trees/[treeId]/members 返回数据: {} +[04:07:16.095] Browser LOG %c[Vercel Web Analytics]%c [pageview] http://localhost:3000/members/cmibdvdad000n13ei0juo7xxm color: rgb(120, 120, 120) color: inherit {"dp":"/members/[id]","o":"http://localhost:3000/members/cmibdvdad000n13ei0juo7xxm","sdkn":"@vercel/analytics/next","sdkv":"1.5.0","sv":"0.1.3","ts":1763883078505} +[04:07:19.385] Server LOG 🌳 GET /api/trees 返回数据: {} +[04:07:19.399] Server LOG 🌳 GET /api/trees 返回数据: {} +[04:07:19.656] Browser LOG D3OrgChartFlow render, selectedMembers: [] relationMode: false +[04:07:19.656] Browser LOG D3OrgChartFlow render, selectedMembers: [] relationMode: false +[04:07:19.656] Browser LOG D3OrgChartFlow render, selectedMembers: [] relationMode: false +[04:07:19.656] Browser LOG D3OrgChartFlow render, selectedMembers: [] relationMode: false +[04:07:19.656] Browser LOG %c[Vercel Web Analytics]%c [pageview] http://localhost:3000/tree?treeId=cmib8zhrq0003hhxlvnsi96nh&view=d3-org-chart color: rgb(120, 120, 120) color: inherit {"dp":"/tree","o":"http://localhost:3000/tree?treeId=cmib8zhrq0003hhxlvnsi96nh&view=d3-org-chart","sdkn":"@vercel/analytics/next","sdkv":"1.5.0","sv":"0.1.3","ts":1763883081952} +[04:07:19.656] Browser LOG D3OrgChartFlow render, selectedMembers: [] relationMode: false +[04:07:19.656] Browser LOG D3OrgChartFlow render, selectedMembers: [] relationMode: false +[04:07:19.656] Browser LOG D3OrgChartFlow render, selectedMembers: [] relationMode: false +[04:07:19.656] Browser LOG D3OrgChartFlow render, selectedMembers: [] relationMode: false +[04:07:20.992] Server LOG 🌳 GET /api/trees 返回数据: {} +[04:07:21.013] Server LOG 🌳 GET /api/trees 返回数据: {} +[04:07:21.039] Server LOG 🌳 GET /api/trees 返回数据: {} +[04:07:21.113] Server LOG 👥 GET /api/trees/[treeId]/members 返回数据: {} +[04:07:21.120] Browser LOG D3 onMemberClick triggered: cmib8zht8001bhhxlzoa6z9y2 relationMode: false +[04:07:21.120] Browser LOG Navigating to member detail +[04:07:21.120] Browser LOG %c[Vercel Web Analytics]%c [pageview] http://localhost:3000/members/cmib8zht8001bhhxlzoa6z9y2 color: rgb(120, 120, 120) color: inherit {"dp":"/members/[id]","o":"http://localhost:3000/members/cmib8zht8001bhhxlzoa6z9y2","sdkn":"@vercel/analytics/next","sdkv":"1.5.0","sv":"0.1.3","ts":1763883083544} +[04:07:35.415] Server LOG 🌳 GET /api/trees 返回数据: {} +[04:07:35.433] Server LOG 🌳 GET /api/trees 返回数据: {} +[04:07:35.558] Browser LOG %c[Vercel Web Analytics]%c [pageview] http://localhost:3000/tree?treeId=cmib8zhrq0003hhxlvnsi96nh color: rgb(120, 120, 120) color: inherit {"dp":"/tree","o":"http://localhost:3000/tree?treeId=cmib8zhrq0003hhxlvnsi96nh","sdkn":"@vercel/analytics/next","sdkv":"1.5.0","sv":"0.1.3","ts":1763883097984} +[04:07:46.257] Server LOG 🌳 GET /api/trees 返回数据: {} +[04:07:46.271] Server LOG 🌳 GET /api/trees 返回数据: {} +[04:07:46.371] Browser LOG %c[Vercel Web Analytics]%c [pageview] http://localhost:3000/members?treeId=cmib8zhrq0003hhxlvnsi96nh color: rgb(120, 120, 120) color: inherit {"dp":"/members","o":"http://localhost:3000/members?treeId=cmib8zhrq0003hhxlvnsi96nh","sdkn":"@vercel/analytics/next","sdkv":"1.5.0","sv":"0.1.3","ts":1763883108825} +[04:07:56.127] Server LOG 🌳 GET /api/trees 返回数据: {} +[04:07:56.142] Server LOG 🌳 GET /api/trees 返回数据: {} +[04:07:56.158] Server LOG 🌳 GET /api/trees 返回数据: {} +[04:07:56.201] Server LOG 👥 GET /api/trees/[treeId]/members 返回数据: {} +[04:07:56.259] Browser LOG %c[Vercel Web Analytics]%c [pageview] http://localhost:3000/members/cmibdvdad000n13ei0juo7xxm color: rgb(120, 120, 120) color: inherit {"dp":"/members/[id]","o":"http://localhost:3000/members/cmibdvdad000n13ei0juo7xxm","sdkn":"@vercel/analytics/next","sdkv":"1.5.0","sv":"0.1.3","ts":1763883118695} +[04:10:20.583] Server LOG ✓ Compiled in 67ms +[04:10:25.272] Server LOG 🌳 GET /api/trees 返回数据: {} +[04:12:50.111] Server LOG ✓ Compiled in 63ms +[04:13:00.234] Server LOG 🌳 GET /api/trees 返回数据: {} +[04:13:00.724] Browser INFO %cDownload the React DevTools for a better development experience: https://react.dev/link/react-devtools font-weight:bold +[04:13:01.000] Browser LOG %c[Vercel Web Analytics]%c Debug mode is enabled by default in development. No requests will be sent to the server. color: rgb(120, 120, 120) color: inherit +[04:13:01.000] Browser LOG %c[Vercel Web Analytics]%c Running queued event color: rgb(120, 120, 120) color: inherit pageview {"path":"/members/cmibdvdad000n13ei0juo7xxm","route":"/members/[id]"} +[04:13:01.000] Browser LOG %c[Vercel Web Analytics]%c [pageview] http://localhost:3000/members/cmibdvdad000n13ei0juo7xxm color: rgb(120, 120, 120) color: inherit {"dp":"/members/[id]","o":"http://localhost:3000/members/cmibdvdad000n13ei0juo7xxm","sdkn":"@vercel/analytics/next","sdkv":"1.5.0","sv":"0.1.3","ts":1763883423417} +[04:13:01.036] Server LOG 🌳 GET /api/trees 返回数据: {} +[04:13:01.056] Server LOG 🌳 GET /api/trees 返回数据: {} +[04:13:01.278] Server LOG 👥 GET /api/trees/[treeId]/members 返回数据: {} +[04:13:08.570] Server LOG ✓ Compiled in 58ms +[04:13:12.536] Browser INFO %cDownload the React DevTools for a better development experience: https://react.dev/link/react-devtools font-weight:bold +[04:13:12.749] Browser LOG %c[Vercel Web Analytics]%c Debug mode is enabled by default in development. No requests will be sent to the server. color: rgb(120, 120, 120) color: inherit +[04:13:12.749] Browser LOG %c[Vercel Web Analytics]%c Running queued event color: rgb(120, 120, 120) color: inherit pageview {"path":"/members/cmibdvdad000n13ei0juo7xxm","route":"/members/[id]"} +[04:13:12.749] Browser LOG %c[Vercel Web Analytics]%c [pageview] http://localhost:3000/members/cmibdvdad000n13ei0juo7xxm color: rgb(120, 120, 120) color: inherit {"dp":"/members/[id]","o":"http://localhost:3000/members/cmibdvdad000n13ei0juo7xxm","sdkn":"@vercel/analytics/next","sdkv":"1.5.0","sv":"0.1.3","ts":1763883435205} +[04:13:12.800] Server LOG 🌳 GET /api/trees 返回数据: {} +[04:13:12.820] Server LOG 🌳 GET /api/trees 返回数据: {} +[04:13:12.878] Server LOG 👥 GET /api/trees/[treeId]/members 返回数据: {} +[04:13:39.657] Browser LOG %c[Vercel Web Analytics]%c [pageview] http://localhost:3000/tree?treeId=cmib8zhrq0003hhxlvnsi96nh color: rgb(120, 120, 120) color: inherit {"dp":"/tree","o":"http://localhost:3000/tree?treeId=cmib8zhrq0003hhxlvnsi96nh","sdkn":"@vercel/analytics/next","sdkv":"1.5.0","sv":"0.1.3","ts":1763883461558} +[04:13:39.814] Server LOG 🌳 GET /api/trees 返回数据: {} +[04:13:39.831] Server LOG 🌳 GET /api/trees 返回数据: {} +[04:14:05.398] Server LOG 🌳 GET /api/trees 返回数据: {} +[04:14:05.410] Server LOG 🌳 GET /api/trees 返回数据: {} +[04:14:05.425] Server LOG 🌳 GET /api/trees 返回数据: {} +[04:14:05.471] Server LOG 👥 GET /api/trees/[treeId]/members 返回数据: {} +[04:14:05.532] Browser LOG %c[Vercel Web Analytics]%c [pageview] http://localhost:3000/members/cmibdvdad000n13ei0juo7xxm color: rgb(120, 120, 120) color: inherit {"dp":"/members/[id]","o":"http://localhost:3000/members/cmibdvdad000n13ei0juo7xxm","sdkn":"@vercel/analytics/next","sdkv":"1.5.0","sv":"0.1.3","ts":1763883487942} +[04:14:19.384] Server LOG 🌳 GET /api/trees 返回数据: {} +[04:14:19.495] Server LOG 🌳 GET /api/trees 返回数据: {} +[04:14:19.596] Browser LOG %c[Vercel Web Analytics]%c [pageview] http://localhost:3000/tree?treeId=cmib8zhrq0003hhxlvnsi96nh color: rgb(120, 120, 120) color: inherit {"dp":"/tree","o":"http://localhost:3000/tree?treeId=cmib8zhrq0003hhxlvnsi96nh","sdkn":"@vercel/analytics/next","sdkv":"1.5.0","sv":"0.1.3","ts":1763883501929} +[04:14:32.745] Server LOG 🌳 GET /api/trees 返回数据: {} +[04:14:32.762] Server LOG 🌳 GET /api/trees 返回数据: {} +[04:14:32.779] Server LOG 🌳 GET /api/trees 返回数据: {} +[04:14:32.822] Server LOG 👥 GET /api/trees/[treeId]/members 返回数据: {} +[04:14:32.915] Browser LOG %c[Vercel Web Analytics]%c [pageview] http://localhost:3000/members/cmib8zhsy000zhhxlj2wvxjok color: rgb(120, 120, 120) color: inherit {"dp":"/members/[id]","o":"http://localhost:3000/members/cmib8zhsy000zhhxlj2wvxjok","sdkn":"@vercel/analytics/next","sdkv":"1.5.0","sv":"0.1.3","ts":1763883515283} +[04:14:39.964] Server LOG 🌳 GET /api/trees 返回数据: {} +[04:14:39.977] Server LOG 🌳 GET /api/trees 返回数据: {} +[04:14:40.111] Browser LOG %c[Vercel Web Analytics]%c [pageview] http://localhost:3000/tree?treeId=cmib8zhrq0003hhxlvnsi96nh color: rgb(120, 120, 120) color: inherit {"dp":"/tree","o":"http://localhost:3000/tree?treeId=cmib8zhrq0003hhxlvnsi96nh","sdkn":"@vercel/analytics/next","sdkv":"1.5.0","sv":"0.1.3","ts":1763883522502} +[04:15:29.369] Server LOG ✓ Compiled in 60ms +[04:15:33.531] Server LOG 🌳 GET /api/trees 返回数据: {} +[04:15:33.929] Server LOG 🌳 GET /api/trees 返回数据: {} +[04:15:33.958] Server LOG 🌳 GET /api/trees 返回数据: {} +[04:15:33.974] Server LOG 🌳 GET /api/trees 返回数据: {} +[04:15:34.091] Browser LOG %c[Vercel Web Analytics]%c [pageview] http://localhost:3000/members/cmibdvdad000n13ei0juo7xxm color: rgb(120, 120, 120) color: inherit {"dp":"/members/[id]","o":"http://localhost:3000/members/cmibdvdad000n13ei0juo7xxm","sdkn":"@vercel/analytics/next","sdkv":"1.5.0","sv":"0.1.3","ts":1763883576455} +[04:15:34.099] Server LOG 👥 GET /api/trees/[treeId]/members 返回数据: {} +[04:15:41.396] Server LOG 🌳 GET /api/trees 返回数据: {} +[04:15:41.415] Server LOG 🌳 GET /api/trees 返回数据: {} +[04:15:41.556] Browser LOG %c[Vercel Web Analytics]%c [pageview] http://localhost:3000/tree?treeId=cmib8zhrq0003hhxlvnsi96nh color: rgb(120, 120, 120) color: inherit {"dp":"/tree","o":"http://localhost:3000/tree?treeId=cmib8zhrq0003hhxlvnsi96nh","sdkn":"@vercel/analytics/next","sdkv":"1.5.0","sv":"0.1.3","ts":1763883583922} +[04:15:43.305] Server LOG 🌳 GET /api/trees 返回数据: {} +[04:15:43.318] Server LOG 🌳 GET /api/trees 返回数据: {} +[04:15:43.331] Server LOG 🌳 GET /api/trees 返回数据: {} +[04:15:43.377] Server LOG 👥 GET /api/trees/[treeId]/members 返回数据: {} +[04:15:43.444] Browser LOG %c[Vercel Web Analytics]%c [pageview] http://localhost:3000/members/cmib8zht8001bhhxlzoa6z9y2 color: rgb(120, 120, 120) color: inherit {"dp":"/members/[id]","o":"http://localhost:3000/members/cmib8zht8001bhhxlzoa6z9y2","sdkn":"@vercel/analytics/next","sdkv":"1.5.0","sv":"0.1.3","ts":1763883585831} +[04:15:54.417] Server LOG 🌳 GET /api/trees 返回数据: {} +[04:15:54.432] Server LOG 🌳 GET /api/trees 返回数据: {} +[04:15:54.631] Browser LOG %c[Vercel Web Analytics]%c [pageview] http://localhost:3000/tree?treeId=cmib8zhrq0003hhxlvnsi96nh color: rgb(120, 120, 120) color: inherit {"dp":"/tree","o":"http://localhost:3000/tree?treeId=cmib8zhrq0003hhxlvnsi96nh","sdkn":"@vercel/analytics/next","sdkv":"1.5.0","sv":"0.1.3","ts":1763883596939} +[04:15:56.086] Server LOG 🌳 GET /api/trees 返回数据: {} +[04:15:56.103] Server LOG 🌳 GET /api/trees 返回数据: {} +[04:15:56.115] Server LOG 🌳 GET /api/trees 返回数据: {} +[04:15:56.155] Server LOG 👥 GET /api/trees/[treeId]/members 返回数据: {} +[04:15:56.225] Browser LOG %c[Vercel Web Analytics]%c [pageview] http://localhost:3000/members/cmib8zht8001bhhxlzoa6z9y2 color: rgb(120, 120, 120) color: inherit {"dp":"/members/[id]","o":"http://localhost:3000/members/cmib8zht8001bhhxlzoa6z9y2","sdkn":"@vercel/analytics/next","sdkv":"1.5.0","sv":"0.1.3","ts":1763883598612} +[04:16:46.915] Browser LOG %c[Vercel Web Analytics]%c [pageview] http://localhost:3000/members?treeId=cmib8zhrq0003hhxlvnsi96nh color: rgb(120, 120, 120) color: inherit {"dp":"/members","o":"http://localhost:3000/members?treeId=cmib8zhrq0003hhxlvnsi96nh","sdkn":"@vercel/analytics/next","sdkv":"1.5.0","sv":"0.1.3","ts":1763883649337} +[04:16:47.123] Server LOG 🌳 GET /api/trees 返回数据: {} +[04:16:47.137] Server LOG 🌳 GET /api/trees 返回数据: {} +[04:16:49.945] Server LOG 🌳 GET /api/trees 返回数据: {} +[04:16:49.966] Server LOG 🌳 GET /api/trees 返回数据: {} +[04:16:50.119] Browser LOG %c[Vercel Web Analytics]%c [pageview] http://localhost:3000/tree?treeId=cmib8zhrq0003hhxlvnsi96nh color: rgb(120, 120, 120) color: inherit {"dp":"/tree","o":"http://localhost:3000/tree?treeId=cmib8zhrq0003hhxlvnsi96nh","sdkn":"@vercel/analytics/next","sdkv":"1.5.0","sv":"0.1.3","ts":1763883652474} +[04:16:51.009] Server LOG 🌳 GET /api/trees 返回数据: {} +[04:16:51.025] Server LOG 🌳 GET /api/trees 返回数据: {} +[04:16:51.042] Server LOG 🌳 GET /api/trees 返回数据: {} +[04:16:51.075] Server LOG 👥 GET /api/trees/[treeId]/members 返回数据: {} +[04:16:51.143] Browser LOG %c[Vercel Web Analytics]%c [pageview] http://localhost:3000/members/cmibdvdad000n13ei0juo7xxm color: rgb(120, 120, 120) color: inherit {"dp":"/members/[id]","o":"http://localhost:3000/members/cmibdvdad000n13ei0juo7xxm","sdkn":"@vercel/analytics/next","sdkv":"1.5.0","sv":"0.1.3","ts":1763883653532} +[04:17:01.096] Server LOG 🌳 GET /api/trees 返回数据: {} +[04:17:01.114] Server LOG 🌳 GET /api/trees 返回数据: {} +[04:17:01.263] Browser LOG %c[Vercel Web Analytics]%c [pageview] http://localhost:3000/tree?treeId=cmib8zhrq0003hhxlvnsi96nh color: rgb(120, 120, 120) color: inherit {"dp":"/tree","o":"http://localhost:3000/tree?treeId=cmib8zhrq0003hhxlvnsi96nh","sdkn":"@vercel/analytics/next","sdkv":"1.5.0","sv":"0.1.3","ts":1763883663622} +[04:17:04.694] Server LOG 🌳 GET /api/trees 返回数据: {} +[04:17:04.709] Server LOG 🌳 GET /api/trees 返回数据: {} +[04:17:04.724] Server LOG 🌳 GET /api/trees 返回数据: {} +[04:17:04.758] Server LOG 👥 GET /api/trees/[treeId]/members 返回数据: {} +[04:17:04.833] Browser LOG %c[Vercel Web Analytics]%c [pageview] http://localhost:3000/members/cmibe02rs000r13eiug7grp9w color: rgb(120, 120, 120) color: inherit {"dp":"/members/[id]","o":"http://localhost:3000/members/cmibe02rs000r13eiug7grp9w","sdkn":"@vercel/analytics/next","sdkv":"1.5.0","sv":"0.1.3","ts":1763883667216} +[04:17:22.141] Server LOG 🌳 GET /api/trees 返回数据: {} +[04:17:22.161] Server LOG 🌳 GET /api/trees 返回数据: {} +[04:17:22.277] Browser LOG %c[Vercel Web Analytics]%c [pageview] http://localhost:3000/tree?treeId=cmib8zhrq0003hhxlvnsi96nh color: rgb(120, 120, 120) color: inherit {"dp":"/tree","o":"http://localhost:3000/tree?treeId=cmib8zhrq0003hhxlvnsi96nh","sdkn":"@vercel/analytics/next","sdkv":"1.5.0","sv":"0.1.3","ts":1763883684668} +[04:17:23.618] Server LOG 🌳 GET /api/trees 返回数据: {} +[04:17:23.631] Server LOG 🌳 GET /api/trees 返回数据: {} +[04:17:23.645] Server LOG 🌳 GET /api/trees 返回数据: {} +[04:17:23.688] Server LOG 👥 GET /api/trees/[treeId]/members 返回数据: {} +[04:17:23.751] Browser LOG %c[Vercel Web Analytics]%c [pageview] http://localhost:3000/members/cmib8zht70019hhxlg7l25qh6 color: rgb(120, 120, 120) color: inherit {"dp":"/members/[id]","o":"http://localhost:3000/members/cmib8zht70019hhxlg7l25qh6","sdkn":"@vercel/analytics/next","sdkv":"1.5.0","sv":"0.1.3","ts":1763883686136} +[04:17:27.874] Server LOG 🌳 GET /api/trees 返回数据: {} +[04:17:27.920] Server LOG 🌳 GET /api/trees 返回数据: {} +[04:17:27.981] Browser LOG %c[Vercel Web Analytics]%c [pageview] http://localhost:3000/members?treeId=cmib8zhrq0003hhxlvnsi96nh color: rgb(120, 120, 120) color: inherit {"dp":"/members","o":"http://localhost:3000/members?treeId=cmib8zhrq0003hhxlvnsi96nh","sdkn":"@vercel/analytics/next","sdkv":"1.5.0","sv":"0.1.3","ts":1763883690401} +[04:17:31.404] Server LOG 🌳 GET /api/trees 返回数据: {} +[04:17:31.416] Server LOG 🌳 GET /api/trees 返回数据: {} +[04:17:31.542] Browser LOG %c[Vercel Web Analytics]%c [pageview] http://localhost:3000/tree?treeId=cmib8zhrq0003hhxlvnsi96nh color: rgb(120, 120, 120) color: inherit {"dp":"/tree","o":"http://localhost:3000/tree?treeId=cmib8zhrq0003hhxlvnsi96nh","sdkn":"@vercel/analytics/next","sdkv":"1.5.0","sv":"0.1.3","ts":1763883693932} +[04:17:40.863] Server LOG 🌳 GET /api/trees 返回数据: {} +[04:17:40.881] Server LOG 🌳 GET /api/trees 返回数据: {} +[04:17:40.897] Server LOG 🌳 GET /api/trees 返回数据: {} +[04:17:40.935] Server LOG 👥 GET /api/trees/[treeId]/members 返回数据: {} +[04:17:41.007] Browser LOG %c[Vercel Web Analytics]%c [pageview] http://localhost:3000/members/cmib8zht50017hhxldt6nnba6 color: rgb(120, 120, 120) color: inherit {"dp":"/members/[id]","o":"http://localhost:3000/members/cmib8zht50017hhxldt6nnba6","sdkn":"@vercel/analytics/next","sdkv":"1.5.0","sv":"0.1.3","ts":1763883703384} +[04:17:44.104] Server LOG 🌳 GET /api/trees 返回数据: {} +[04:17:44.122] Server LOG 🌳 GET /api/trees 返回数据: {} +[04:17:44.287] Browser LOG %c[Vercel Web Analytics]%c [pageview] http://localhost:3000/tree?treeId=cmib8zhrq0003hhxlvnsi96nh color: rgb(120, 120, 120) color: inherit {"dp":"/tree","o":"http://localhost:3000/tree?treeId=cmib8zhrq0003hhxlvnsi96nh","sdkn":"@vercel/analytics/next","sdkv":"1.5.0","sv":"0.1.3","ts":1763883706628} +[04:17:45.202] Server LOG 🌳 GET /api/trees 返回数据: {} +[04:17:45.224] Server LOG 🌳 GET /api/trees 返回数据: {} +[04:17:45.241] Server LOG 🌳 GET /api/trees 返回数据: {} +[04:17:45.267] Server LOG 👥 GET /api/trees/[treeId]/members 返回数据: {} +[04:17:45.336] Browser LOG %c[Vercel Web Analytics]%c [pageview] http://localhost:3000/members/cmib8zht40015hhxlblc0udh0 color: rgb(120, 120, 120) color: inherit {"dp":"/members/[id]","o":"http://localhost:3000/members/cmib8zht40015hhxlblc0udh0","sdkn":"@vercel/analytics/next","sdkv":"1.5.0","sv":"0.1.3","ts":1763883707717} +[04:17:47.498] Server LOG 🌳 GET /api/trees 返回数据: {} +[04:17:47.515] Server LOG 🌳 GET /api/trees 返回数据: {} +[04:17:47.690] Browser LOG %c[Vercel Web Analytics]%c [pageview] http://localhost:3000/tree?treeId=cmib8zhrq0003hhxlvnsi96nh color: rgb(120, 120, 120) color: inherit {"dp":"/tree","o":"http://localhost:3000/tree?treeId=cmib8zhrq0003hhxlvnsi96nh","sdkn":"@vercel/analytics/next","sdkv":"1.5.0","sv":"0.1.3","ts":1763883710020} +[04:17:50.061] Server LOG 🌳 GET /api/trees 返回数据: {} +[04:17:50.073] Server LOG 🌳 GET /api/trees 返回数据: {} +[04:17:50.091] Server LOG 🌳 GET /api/trees 返回数据: {} +[04:17:50.180] Server LOG 👥 GET /api/trees/[treeId]/members 返回数据: {} +[04:17:50.226] Browser LOG %c[Vercel Web Analytics]%c [pageview] http://localhost:3000/members/cmib8zhto001lhhxlkizg2ig6 color: rgb(120, 120, 120) color: inherit {"dp":"/members/[id]","o":"http://localhost:3000/members/cmib8zhto001lhhxlkizg2ig6","sdkn":"@vercel/analytics/next","sdkv":"1.5.0","sv":"0.1.3","ts":1763883712579} +[04:17:53.239] Server LOG 🌳 GET /api/trees 返回数据: {} +[04:17:53.267] Server LOG 🌳 GET /api/trees 返回数据: {} +[04:17:53.442] Browser LOG %c[Vercel Web Analytics]%c [pageview] http://localhost:3000/tree?treeId=cmib8zhrq0003hhxlvnsi96nh color: rgb(120, 120, 120) color: inherit {"dp":"/tree","o":"http://localhost:3000/tree?treeId=cmib8zhrq0003hhxlvnsi96nh","sdkn":"@vercel/analytics/next","sdkv":"1.5.0","sv":"0.1.3","ts":1763883715761} +[04:18:04.740] Server LOG 🌳 GET /api/trees 返回数据: {} +[04:18:04.762] Server LOG 🌳 GET /api/trees 返回数据: {} +[04:18:04.779] Server LOG 🌳 GET /api/trees 返回数据: {} +[04:18:04.825] Server LOG 👥 GET /api/trees/[treeId]/members 返回数据: {} +[04:18:04.841] Browser LOG %c[Vercel Web Analytics]%c [pageview] http://localhost:3000/members/cmib8zhso000thhxl6jztirc0 color: rgb(120, 120, 120) color: inherit {"dp":"/members/[id]","o":"http://localhost:3000/members/cmib8zhso000thhxl6jztirc0","sdkn":"@vercel/analytics/next","sdkv":"1.5.0","sv":"0.1.3","ts":1763883727226} +[04:18:07.228] Server LOG 🌳 GET /api/trees 返回数据: {} +[04:18:07.248] Server LOG 🌳 GET /api/trees 返回数据: {} +[04:18:07.405] Browser LOG %c[Vercel Web Analytics]%c [pageview] http://localhost:3000/tree?treeId=cmib8zhrq0003hhxlvnsi96nh color: rgb(120, 120, 120) color: inherit {"dp":"/tree","o":"http://localhost:3000/tree?treeId=cmib8zhrq0003hhxlvnsi96nh","sdkn":"@vercel/analytics/next","sdkv":"1.5.0","sv":"0.1.3","ts":1763883729748} +[04:18:08.421] Server LOG 🌳 GET /api/trees 返回数据: {} +[04:18:08.436] Server LOG 🌳 GET /api/trees 返回数据: {} +[04:18:08.455] Server LOG 🌳 GET /api/trees 返回数据: {} +[04:18:08.484] Server LOG 👥 GET /api/trees/[treeId]/members 返回数据: {} +[04:18:08.548] Browser LOG %c[Vercel Web Analytics]%c [pageview] http://localhost:3000/members/cmibe02rs000r13eiug7grp9w color: rgb(120, 120, 120) color: inherit {"dp":"/members/[id]","o":"http://localhost:3000/members/cmibe02rs000r13eiug7grp9w","sdkn":"@vercel/analytics/next","sdkv":"1.5.0","sv":"0.1.3","ts":1763883730937} +[04:18:11.178] Server LOG 🌳 GET /api/trees 返回数据: {} +[04:18:11.191] Server LOG 🌳 GET /api/trees 返回数据: {} +[04:18:11.345] Browser LOG %c[Vercel Web Analytics]%c [pageview] http://localhost:3000/tree?treeId=cmib8zhrq0003hhxlvnsi96nh color: rgb(120, 120, 120) color: inherit {"dp":"/tree","o":"http://localhost:3000/tree?treeId=cmib8zhrq0003hhxlvnsi96nh","sdkn":"@vercel/analytics/next","sdkv":"1.5.0","sv":"0.1.3","ts":1763883733698} +[04:18:12.546] Server LOG 🌳 GET /api/trees 返回数据: {} +[04:18:12.565] Server LOG 🌳 GET /api/trees 返回数据: {} +[04:18:12.579] Server LOG 🌳 GET /api/trees 返回数据: {} +[04:18:12.607] Server LOG 👥 GET /api/trees/[treeId]/members 返回数据: {} +[04:18:12.690] Browser LOG %c[Vercel Web Analytics]%c [pageview] http://localhost:3000/members/cmibe02rs000r13eiug7grp9w color: rgb(120, 120, 120) color: inherit {"dp":"/members/[id]","o":"http://localhost:3000/members/cmibe02rs000r13eiug7grp9w","sdkn":"@vercel/analytics/next","sdkv":"1.5.0","sv":"0.1.3","ts":1763883735066} +[04:18:14.929] Server LOG 🌳 GET /api/trees 返回数据: {} +[04:18:14.942] Server LOG 🌳 GET /api/trees 返回数据: {} +[04:18:15.077] Browser LOG %c[Vercel Web Analytics]%c [pageview] http://localhost:3000/tree?treeId=cmib8zhrq0003hhxlvnsi96nh color: rgb(120, 120, 120) color: inherit {"dp":"/tree","o":"http://localhost:3000/tree?treeId=cmib8zhrq0003hhxlvnsi96nh","sdkn":"@vercel/analytics/next","sdkv":"1.5.0","sv":"0.1.3","ts":1763883737451} +[04:18:17.487] Server LOG 🌳 GET /api/trees 返回数据: {} +[04:18:17.503] Server LOG 🌳 GET /api/trees 返回数据: {} +[04:18:17.524] Server LOG 🌳 GET /api/trees 返回数据: {} +[04:18:17.551] Server LOG 👥 GET /api/trees/[treeId]/members 返回数据: {} +[04:18:17.628] Browser LOG %c[Vercel Web Analytics]%c [pageview] http://localhost:3000/members/cmib8zhso000thhxl6jztirc0 color: rgb(120, 120, 120) color: inherit {"dp":"/members/[id]","o":"http://localhost:3000/members/cmib8zhso000thhxl6jztirc0","sdkn":"@vercel/analytics/next","sdkv":"1.5.0","sv":"0.1.3","ts":1763883740003} +[04:18:23.291] Server LOG 🌳 GET /api/trees 返回数据: {} +[04:18:23.307] Server LOG 🌳 GET /api/trees 返回数据: {} +[04:18:23.455] Browser LOG %c[Vercel Web Analytics]%c [pageview] http://localhost:3000/tree?treeId=cmib8zhrq0003hhxlvnsi96nh color: rgb(120, 120, 120) color: inherit {"dp":"/tree","o":"http://localhost:3000/tree?treeId=cmib8zhrq0003hhxlvnsi96nh","sdkn":"@vercel/analytics/next","sdkv":"1.5.0","sv":"0.1.3","ts":1763883745815} +[04:18:31.630] Server LOG 🌳 GET /api/trees 返回数据: {} +[04:18:31.646] Server LOG 🌳 GET /api/trees 返回数据: {} +[04:18:31.661] Server LOG 🌳 GET /api/trees 返回数据: {} +[04:18:31.692] Server LOG 👥 GET /api/trees/[treeId]/members 返回数据: {} +[04:18:31.788] Browser LOG %c[Vercel Web Analytics]%c [pageview] http://localhost:3000/members/cmibe8n5a000v13eibqryw8ey color: rgb(120, 120, 120) color: inherit {"dp":"/members/[id]","o":"http://localhost:3000/members/cmibe8n5a000v13eibqryw8ey","sdkn":"@vercel/analytics/next","sdkv":"1.5.0","sv":"0.1.3","ts":1763883754145} +[04:18:42.647] Server LOG 🌳 GET /api/trees 返回数据: {} +[04:18:42.668] Server LOG 🌳 GET /api/trees 返回数据: {} +[04:18:42.811] Browser LOG %c[Vercel Web Analytics]%c [pageview] http://localhost:3000/tree?treeId=cmib8zhrq0003hhxlvnsi96nh color: rgb(120, 120, 120) color: inherit {"dp":"/tree","o":"http://localhost:3000/tree?treeId=cmib8zhrq0003hhxlvnsi96nh","sdkn":"@vercel/analytics/next","sdkv":"1.5.0","sv":"0.1.3","ts":1763883765170} +[04:18:45.038] Server LOG 🌳 GET /api/trees 返回数据: {} +[04:18:45.051] Server LOG 🌳 GET /api/trees 返回数据: {} +[04:18:45.066] Server LOG 🌳 GET /api/trees 返回数据: {} +[04:18:45.099] Server LOG 👥 GET /api/trees/[treeId]/members 返回数据: {} +[04:18:45.174] Browser LOG %c[Vercel Web Analytics]%c [pageview] http://localhost:3000/members/cmibe8n5a000v13eibqryw8ey color: rgb(120, 120, 120) color: inherit {"dp":"/members/[id]","o":"http://localhost:3000/members/cmibe8n5a000v13eibqryw8ey","sdkn":"@vercel/analytics/next","sdkv":"1.5.0","sv":"0.1.3","ts":1763883767555} +[04:18:50.454] Server LOG 🌳 GET /api/trees 返回数据: {} +[04:18:50.474] Server LOG 🌳 GET /api/trees 返回数据: {} +[04:18:50.623] Browser LOG %c[Vercel Web Analytics]%c [pageview] http://localhost:3000/tree?treeId=cmib8zhrq0003hhxlvnsi96nh color: rgb(120, 120, 120) color: inherit {"dp":"/tree","o":"http://localhost:3000/tree?treeId=cmib8zhrq0003hhxlvnsi96nh","sdkn":"@vercel/analytics/next","sdkv":"1.5.0","sv":"0.1.3","ts":1763883772977} +[04:18:56.386] Server LOG 🌳 GET /api/trees 返回数据: {} +[04:18:56.406] Server LOG 🌳 GET /api/trees 返回数据: {} +[04:18:56.489] Browser LOG %c[Vercel Web Analytics]%c [pageview] http://localhost:3000/members?treeId=cmib8zhrq0003hhxlvnsi96nh color: rgb(120, 120, 120) color: inherit {"dp":"/members","o":"http://localhost:3000/members?treeId=cmib8zhrq0003hhxlvnsi96nh","sdkn":"@vercel/analytics/next","sdkv":"1.5.0","sv":"0.1.3","ts":1763883778910} +[04:19:03.463] Server LOG 🌳 GET /api/trees 返回数据: {} +[04:19:03.477] Server LOG 🌳 GET /api/trees 返回数据: {} +[04:19:03.490] Server LOG 🌳 GET /api/trees 返回数据: {} +[04:19:03.534] Server LOG 👥 GET /api/trees/[treeId]/members 返回数据: {} +[04:19:03.594] Browser LOG %c[Vercel Web Analytics]%c [pageview] http://localhost:3000/members/cmibe8n5a000v13eibqryw8ey color: rgb(120, 120, 120) color: inherit {"dp":"/members/[id]","o":"http://localhost:3000/members/cmibe8n5a000v13eibqryw8ey","sdkn":"@vercel/analytics/next","sdkv":"1.5.0","sv":"0.1.3","ts":1763883785982} +[04:20:13.663] Server LOG ✓ Compiled in 57ms +[04:20:16.229] Server LOG 🌳 GET /api/trees 返回数据: {} +[04:20:22.379] Server LOG 🌳 GET /api/trees 返回数据: {} +[04:20:22.452] Server LOG 🌳 GET /api/trees 返回数据: {} +[04:20:22.563] Browser LOG %c[Vercel Web Analytics]%c [pageview] http://localhost:3000/tree?treeId=cmib8zhrq0003hhxlvnsi96nh color: rgb(120, 120, 120) color: inherit {"dp":"/tree","o":"http://localhost:3000/tree?treeId=cmib8zhrq0003hhxlvnsi96nh","sdkn":"@vercel/analytics/next","sdkv":"1.5.0","sv":"0.1.3","ts":1763883864892} +[04:20:30.045] Browser INFO %cDownload the React DevTools for a better development experience: https://react.dev/link/react-devtools font-weight:bold +[04:20:30.280] Server LOG 🌳 GET /api/trees 返回数据: {} +[04:20:30.305] Server LOG 🌳 GET /api/trees/[treeId] 返回数据: {} +[04:20:30.368] Server LOG 👥 GET /api/trees/[treeId]/members 返回数据: {} +[04:20:30.543] Browser LOG %c[Vercel Web Analytics]%c Debug mode is enabled by default in development. No requests will be sent to the server. color: rgb(120, 120, 120) color: inherit +[04:20:30.543] Browser LOG %c[Vercel Web Analytics]%c Running queued event color: rgb(120, 120, 120) color: inherit pageview {"path":"/tree","route":"/tree"} +[04:20:30.543] Browser LOG %c[Vercel Web Analytics]%c [pageview] http://localhost:3000/tree?treeId=cmib8zhrq0003hhxlvnsi96nh color: rgb(120, 120, 120) color: inherit {"dp":"/tree","o":"http://localhost:3000/tree?treeId=cmib8zhrq0003hhxlvnsi96nh","sdkn":"@vercel/analytics/next","sdkv":"1.5.0","sv":"0.1.3","ts":1763883872823} +[04:20:34.662] Browser LOG D3OrgChartFlow render, selectedMembers: [] relationMode: false +[04:20:34.662] Browser LOG D3OrgChartFlow render, selectedMembers: [] relationMode: false +[04:20:34.662] Browser LOG D3OrgChartFlow render, selectedMembers: [] relationMode: false +[04:20:34.662] Browser LOG D3OrgChartFlow render, selectedMembers: [] relationMode: false +[04:20:34.662] Browser LOG D3OrgChartFlow render, selectedMembers: [] relationMode: false +[04:20:34.662] Browser LOG D3OrgChartFlow render, selectedMembers: [] relationMode: false +[04:20:34.662] Browser LOG D3OrgChartFlow render, selectedMembers: [] relationMode: false +[04:20:34.662] Browser LOG D3OrgChartFlow render, selectedMembers: [] relationMode: false +[04:21:05.156] Server LOG 🌳 GET /api/trees 返回数据: {} +[04:21:34.465] Browser LOG %c[Vercel Web Analytics]%c [pageview] http://localhost:3000/members?treeId=cmib8zhrq0003hhxlvnsi96nh color: rgb(120, 120, 120) color: inherit {"dp":"/members","o":"http://localhost:3000/members?treeId=cmib8zhrq0003hhxlvnsi96nh","sdkn":"@vercel/analytics/next","sdkv":"1.5.0","sv":"0.1.3","ts":1763883936880} +[04:21:34.672] Server LOG 🌳 GET /api/trees 返回数据: {} +[04:21:34.690] Server LOG 🌳 GET /api/trees 返回数据: {} +[04:21:36.086] Server LOG 🌳 GET /api/trees 返回数据: {} +[04:21:36.185] Server LOG 👥 GET /api/trees/[treeId]/members 返回数据: {} +[04:21:36.195] Browser LOG %c[Vercel Web Analytics]%c [pageview] http://localhost:3000/members/new color: rgb(120, 120, 120) color: inherit {"dp":"/members/new","o":"http://localhost:3000/members/new","sdkn":"@vercel/analytics/next","sdkv":"1.5.0","sv":"0.1.3","ts":1763883938614} +[04:21:36.420] Server LOG 🌳 GET /api/trees 返回数据: {} +[04:21:36.435] Server LOG 🌳 GET /api/trees 返回数据: {} +[04:22:52.025] Server LOG 🌳 GET /api/trees 返回数据: {} +[04:22:52.043] Server LOG 🌳 GET /api/trees 返回数据: {} +[04:22:52.061] Server LOG 🌳 GET /api/trees 返回数据: {} +[04:22:52.341] Browser LOG %c[Vercel Web Analytics]%c [pageview] http://localhost:3000/members color: rgb(120, 120, 120) color: inherit {"dp":"/members","o":"http://localhost:3000/members","sdkn":"@vercel/analytics/next","sdkv":"1.5.0","sv":"0.1.3","ts":1763884014539} +[04:22:52.369] Server LOG 👥 GET /api/trees/[treeId]/members 返回数据: {} +[04:23:07.117] Server LOG 🌳 GET /api/trees 返回数据: {} +[04:23:07.208] Server LOG 🌳 GET /api/trees 返回数据: {} +[04:23:07.231] Browser LOG %c[Vercel Web Analytics]%c [pageview] http://localhost:3000/tree?treeId=cmib8zhrq0003hhxlvnsi96nh color: rgb(120, 120, 120) color: inherit {"dp":"/tree","o":"http://localhost:3000/tree?treeId=cmib8zhrq0003hhxlvnsi96nh","sdkn":"@vercel/analytics/next","sdkv":"1.5.0","sv":"0.1.3","ts":1763884029600} +[04:24:30.576] Server LOG ✓ Compiled in 127ms +[04:25:13.097] Server LOG ✓ Compiled in 111ms +[04:25:20.095] Server LOG 🌳 GET /api/trees 返回数据: {} +[04:25:22.331] Browser INFO %cDownload the React DevTools for a better development experience: https://react.dev/link/react-devtools font-weight:bold +[04:25:23.269] Browser LOG %c[Vercel Web Analytics]%c Debug mode is enabled by default in development. No requests will be sent to the server. color: rgb(120, 120, 120) color: inherit +[04:25:23.269] Browser LOG %c[Vercel Web Analytics]%c Running queued event color: rgb(120, 120, 120) color: inherit pageview {"path":"/tree","route":"/tree"} +[04:25:23.269] Browser LOG %c[Vercel Web Analytics]%c [pageview] http://localhost:3000/tree?treeId=cmib8zhrq0003hhxlvnsi96nh color: rgb(120, 120, 120) color: inherit {"dp":"/tree","o":"http://localhost:3000/tree?treeId=cmib8zhrq0003hhxlvnsi96nh","sdkn":"@vercel/analytics/next","sdkv":"1.5.0","sv":"0.1.3","ts":1763884165703} +[04:25:23.297] Server LOG 🌳 GET /api/trees 返回数据: {} +[04:25:23.306] Server LOG 🌳 GET /api/trees/[treeId] 返回数据: {} +[04:25:23.365] Server LOG 👥 GET /api/trees/[treeId]/members 返回数据: {} +[04:25:58.339] Server LOG ✓ Compiled in 123ms +[04:26:17.310] Server LOG 🌳 GET /api/trees 返回数据: {} +[04:26:20.019] Browser INFO %cDownload the React DevTools for a better development experience: https://react.dev/link/react-devtools font-weight:bold +[04:26:20.225] Browser LOG %c[Vercel Web Analytics]%c Debug mode is enabled by default in development. No requests will be sent to the server. color: rgb(120, 120, 120) color: inherit +[04:26:20.225] Browser LOG %c[Vercel Web Analytics]%c Running queued event color: rgb(120, 120, 120) color: inherit pageview {"path":"/tree","route":"/tree"} +[04:26:20.225] Browser LOG %c[Vercel Web Analytics]%c [pageview] http://localhost:3000/tree?treeId=cmib8zhrq0003hhxlvnsi96nh color: rgb(120, 120, 120) color: inherit {"dp":"/tree","o":"http://localhost:3000/tree?treeId=cmib8zhrq0003hhxlvnsi96nh","sdkn":"@vercel/analytics/next","sdkv":"1.5.0","sv":"0.1.3","ts":1763884222620} +[04:26:20.247] Server LOG 🌳 GET /api/trees/[treeId] 返回数据: {} +[04:26:20.278] Server LOG 👥 GET /api/trees/[treeId]/members 返回数据: {} +[04:26:20.285] Server LOG 🌳 GET /api/trees 返回数据: {} +[04:26:44.700] Server LOG ✓ Compiled in 57ms +[04:26:48.635] Server LOG 🌳 GET /api/trees 返回数据: {} +[04:26:50.944] Server LOG 🌳 GET /api/trees 返回数据: {} +[04:26:50.986] Server LOG 👥 GET /api/trees/[treeId]/members 返回数据: {} +[04:26:50.993] Browser LOG %c[Vercel Web Analytics]%c [pageview] http://localhost:3000/members/cmib8zhsa000hhhxlm0bt3ny3 color: rgb(120, 120, 120) color: inherit {"dp":"/members/[id]","o":"http://localhost:3000/members/cmib8zhsa000hhhxlm0bt3ny3","sdkn":"@vercel/analytics/next","sdkv":"1.5.0","sv":"0.1.3","ts":1763884253424} +[04:26:51.244] Server LOG 🌳 GET /api/trees 返回数据: {} +[04:26:51.263] Server LOG 🌳 GET /api/trees 返回数据: {} +[04:27:04.581] Server LOG 🌳 GET /api/trees 返回数据: {} +[04:27:04.675] Browser LOG %c[Vercel Web Analytics]%c [pageview] http://localhost:3000/tree?treeId=cmib8zhrq0003hhxlvnsi96nh color: rgb(120, 120, 120) color: inherit {"dp":"/tree","o":"http://localhost:3000/tree?treeId=cmib8zhrq0003hhxlvnsi96nh","sdkn":"@vercel/analytics/next","sdkv":"1.5.0","sv":"0.1.3","ts":1763884267002} +[04:27:04.698] Server LOG 🌳 GET /api/trees 返回数据: {} +[04:27:23.343] Server LOG 🌳 GET /api/trees 返回数据: {} +[04:27:28.456] Browser INFO %cDownload the React DevTools for a better development experience: https://react.dev/link/react-devtools font-weight:bold +[04:27:29.141] Server LOG 🌳 GET /api/trees 返回数据: {} +[04:27:29.147] Server LOG 🌳 GET /api/trees/[treeId] 返回数据: {} +[04:27:29.188] Browser LOG %c[Vercel Web Analytics]%c Debug mode is enabled by default in development. No requests will be sent to the server. color: rgb(120, 120, 120) color: inherit +[04:27:29.188] Browser LOG %c[Vercel Web Analytics]%c Running queued event color: rgb(120, 120, 120) color: inherit pageview {"path":"/tree","route":"/tree"} +[04:27:29.188] Browser LOG %c[Vercel Web Analytics]%c [pageview] http://localhost:3000/tree?treeId=cmib8zhrq0003hhxlvnsi96nh color: rgb(120, 120, 120) color: inherit {"dp":"/tree","o":"http://localhost:3000/tree?treeId=cmib8zhrq0003hhxlvnsi96nh","sdkn":"@vercel/analytics/next","sdkv":"1.5.0","sv":"0.1.3","ts":1763884291598} +[04:27:29.198] Server LOG 👥 GET /api/trees/[treeId]/members 返回数据: {} +[04:27:56.634] Server LOG 🌳 GET /api/trees 返回数据: {} +[04:27:56.657] Server LOG 👥 GET /api/trees/[treeId]/members 返回数据: {} +[04:27:56.721] Browser LOG %c[Vercel Web Analytics]%c [pageview] http://localhost:3000/members/cmib8zhrv0007hhxl3q1knmo9 color: rgb(120, 120, 120) color: inherit {"dp":"/members/[id]","o":"http://localhost:3000/members/cmib8zhrv0007hhxl3q1knmo9","sdkn":"@vercel/analytics/next","sdkv":"1.5.0","sv":"0.1.3","ts":1763884319151} +[04:27:56.937] Server LOG 🌳 GET /api/trees 返回数据: {} +[04:27:56.954] Server LOG 🌳 GET /api/trees 返回数据: {} +[04:28:03.920] Server LOG 🌳 GET /api/trees 返回数据: {} +[04:28:04.526] Browser WARN Warning: Missing `Description` or `aria-describedby={undefined}` for {DialogContent}. +[04:28:04.526] Browser WARN Warning: Missing `Description` or `aria-describedby={undefined}` for {DialogContent}. +[04:28:14.528] Server LOG 🌳 GET /api/trees 返回数据: {} +[04:28:14.544] Server LOG 🌳 GET /api/trees 返回数据: {} +[04:28:14.638] Browser LOG %c[Vercel Web Analytics]%c [pageview] http://localhost:3000/tree?treeId=cmib8zhrq0003hhxlvnsi96nh color: rgb(120, 120, 120) color: inherit {"dp":"/tree","o":"http://localhost:3000/tree?treeId=cmib8zhrq0003hhxlvnsi96nh","sdkn":"@vercel/analytics/next","sdkv":"1.5.0","sv":"0.1.3","ts":1763884337049} +[04:28:32.250] Browser LOG %c[Vercel Web Analytics]%c [pageview] http://localhost:3000/members?treeId=cmib8zhrq0003hhxlvnsi96nh color: rgb(120, 120, 120) color: inherit {"dp":"/members","o":"http://localhost:3000/members?treeId=cmib8zhrq0003hhxlvnsi96nh","sdkn":"@vercel/analytics/next","sdkv":"1.5.0","sv":"0.1.3","ts":1763884354671} +[04:28:32.461] Server LOG 🌳 GET /api/trees 返回数据: {} +[04:28:32.475] Server LOG 🌳 GET /api/trees 返回数据: {} +[04:28:47.668] Server LOG 🌳 GET /api/trees 返回数据: {} +[04:28:47.692] Server LOG 🌳 GET /api/trees 返回数据: {} +[04:28:47.713] Server LOG 🌳 GET /api/trees 返回数据: {} +[04:28:47.761] Browser LOG %c[Vercel Web Analytics]%c [pageview] http://localhost:3000/members/cmib8zhsk000phhxl0b7ow8vz color: rgb(120, 120, 120) color: inherit {"dp":"/members/[id]","o":"http://localhost:3000/members/cmib8zhsk000phhxl0b7ow8vz","sdkn":"@vercel/analytics/next","sdkv":"1.5.0","sv":"0.1.3","ts":1763884370171} +[04:28:47.766] Server LOG 👥 GET /api/trees/[treeId]/members 返回数据: {} +[04:28:51.726] Server LOG 🌳 GET /api/trees 返回数据: {} +[04:28:51.740] Server LOG 🌳 GET /api/trees 返回数据: {} +[04:28:51.826] Browser LOG %c[Vercel Web Analytics]%c [pageview] http://localhost:3000/members?treeId=cmib8zhrq0003hhxlvnsi96nh color: rgb(120, 120, 120) color: inherit {"dp":"/members","o":"http://localhost:3000/members?treeId=cmib8zhrq0003hhxlvnsi96nh","sdkn":"@vercel/analytics/next","sdkv":"1.5.0","sv":"0.1.3","ts":1763884374247} +[04:28:57.163] Server LOG 🌳 GET /api/trees 返回数据: {} +[04:28:57.181] Server LOG 🌳 GET /api/trees 返回数据: {} +[04:28:57.233] Server LOG 🌳 GET /api/trees 返回数据: {} +[04:28:57.251] Browser LOG %c[Vercel Web Analytics]%c [pageview] http://localhost:3000/members/cmib8zhsk000phhxl0b7ow8vz color: rgb(120, 120, 120) color: inherit {"dp":"/members/[id]","o":"http://localhost:3000/members/cmib8zhsk000phhxl0b7ow8vz","sdkn":"@vercel/analytics/next","sdkv":"1.5.0","sv":"0.1.3","ts":1763884379664} +[04:28:57.259] Server LOG 👥 GET /api/trees/[treeId]/members 返回数据: {} +[04:29:02.488] Server LOG 🌳 GET /api/trees 返回数据: {} +[04:29:02.507] Server LOG 🌳 GET /api/trees 返回数据: {} +[04:29:02.575] Browser LOG %c[Vercel Web Analytics]%c [pageview] http://localhost:3000/tree?treeId=cmib8zhrq0003hhxlvnsi96nh color: rgb(120, 120, 120) color: inherit {"dp":"/tree","o":"http://localhost:3000/tree?treeId=cmib8zhrq0003hhxlvnsi96nh","sdkn":"@vercel/analytics/next","sdkv":"1.5.0","sv":"0.1.3","ts":1763884385000} +[04:29:13.572] Server LOG 🌳 GET /api/trees 返回数据: {} +[04:29:13.596] Server LOG 🌳 GET /api/trees 返回数据: {} +[04:29:13.637] Server LOG 🌳 GET /api/trees 返回数据: {} +[04:29:13.651] Server LOG 👥 GET /api/trees/[treeId]/members 返回数据: {} +[04:29:13.669] Browser LOG %c[Vercel Web Analytics]%c [pageview] http://localhost:3000/members/cmib8zhsk000phhxl0b7ow8vz color: rgb(120, 120, 120) color: inherit {"dp":"/members/[id]","o":"http://localhost:3000/members/cmib8zhsk000phhxl0b7ow8vz","sdkn":"@vercel/analytics/next","sdkv":"1.5.0","sv":"0.1.3","ts":1763884396078} +[04:29:15.848] Server LOG 🌳 GET /api/trees 返回数据: {} +[04:29:15.862] Server LOG 🌳 GET /api/trees 返回数据: {} +[04:29:15.961] Browser LOG %c[Vercel Web Analytics]%c [pageview] http://localhost:3000/tree?treeId=cmib8zhrq0003hhxlvnsi96nh color: rgb(120, 120, 120) color: inherit {"dp":"/tree","o":"http://localhost:3000/tree?treeId=cmib8zhrq0003hhxlvnsi96nh","sdkn":"@vercel/analytics/next","sdkv":"1.5.0","sv":"0.1.3","ts":1763884398365} +[04:29:19.944] Browser LOG D3OrgChartFlow render, selectedMembers: [] relationMode: false +[04:29:19.944] Browser LOG D3OrgChartFlow render, selectedMembers: [] relationMode: false +[04:29:19.944] Browser LOG D3OrgChartFlow render, selectedMembers: [] relationMode: false +[04:29:19.944] Browser LOG D3OrgChartFlow render, selectedMembers: [] relationMode: false +[04:29:19.944] Browser LOG D3OrgChartFlow render, selectedMembers: [] relationMode: false +[04:29:19.944] Browser LOG D3OrgChartFlow render, selectedMembers: [] relationMode: false +[04:29:19.944] Browser LOG D3OrgChartFlow render, selectedMembers: [] relationMode: false +[04:29:19.944] Browser LOG D3OrgChartFlow render, selectedMembers: [] relationMode: false +[04:29:31.787] Server LOG 🌳 GET /api/trees 返回数据: {} +[04:29:31.805] Server LOG 🌳 GET /api/trees 返回数据: {} +[04:29:31.830] Server LOG 🌳 GET /api/trees 返回数据: {} +[04:29:31.843] Server LOG 👥 GET /api/trees/[treeId]/members 返回数据: {} +[04:29:31.881] Browser LOG D3 onMemberClick triggered: cmib8zhrz0009hhxlgs0r588g relationMode: false +[04:29:31.881] Browser LOG Navigating to member detail +[04:29:31.881] Browser LOG %c[Vercel Web Analytics]%c [pageview] http://localhost:3000/members/cmib8zhrz0009hhxlgs0r588g color: rgb(120, 120, 120) color: inherit {"dp":"/members/[id]","o":"http://localhost:3000/members/cmib8zhrz0009hhxlgs0r588g","sdkn":"@vercel/analytics/next","sdkv":"1.5.0","sv":"0.1.3","ts":1763884414296} +[04:29:34.635] Server LOG 🌳 GET /api/trees 返回数据: {} +[04:29:34.653] Server LOG 🌳 GET /api/trees 返回数据: {} +[04:29:34.847] Browser LOG D3OrgChartFlow render, selectedMembers: [] relationMode: false +[04:29:34.847] Browser LOG D3OrgChartFlow render, selectedMembers: [] relationMode: false +[04:29:34.847] Browser LOG D3OrgChartFlow render, selectedMembers: [] relationMode: false +[04:29:34.847] Browser LOG D3OrgChartFlow render, selectedMembers: [] relationMode: false +[04:29:34.847] Browser LOG %c[Vercel Web Analytics]%c [pageview] http://localhost:3000/tree?treeId=cmib8zhrq0003hhxlvnsi96nh&view=d3-org-chart color: rgb(120, 120, 120) color: inherit {"dp":"/tree","o":"http://localhost:3000/tree?treeId=cmib8zhrq0003hhxlvnsi96nh&view=d3-org-chart","sdkn":"@vercel/analytics/next","sdkv":"1.5.0","sv":"0.1.3","ts":1763884417146} +[04:29:34.847] Browser LOG D3OrgChartFlow render, selectedMembers: [] relationMode: false +[04:29:34.847] Browser LOG D3OrgChartFlow render, selectedMembers: [] relationMode: false +[04:29:34.848] Browser LOG D3OrgChartFlow render, selectedMembers: [] relationMode: false +[04:29:34.848] Browser LOG D3OrgChartFlow render, selectedMembers: [] relationMode: false +[04:29:39.880] Browser LOG D3 onMemberClick triggered: cmib8zhrz0009hhxlgs0r588g relationMode: true +[04:29:39.880] Browser LOG Calling handleMemberClick +[04:29:41.169] Browser LOG D3 onMemberClick triggered: cmib8zhto001lhhxlkizg2ig6 relationMode: true +[04:29:41.169] Browser LOG Calling handleMemberClick +[04:29:41.169] Browser WARN Warning: Missing `Description` or `aria-describedby={undefined}` for {DialogContent}. +[04:29:41.169] Browser WARN Warning: Missing `Description` or `aria-describedby={undefined}` for {DialogContent}. +[04:29:56.817] Browser WARN Warning: Missing `Description` or `aria-describedby={undefined}` for {DialogContent}. +[04:29:56.817] Browser WARN Warning: Missing `Description` or `aria-describedby={undefined}` for {DialogContent}. +[04:30:05.577] Browser WARN Warning: Missing `Description` or `aria-describedby={undefined}` for {DialogContent}. +[04:30:05.577] Browser WARN Warning: Missing `Description` or `aria-describedby={undefined}` for {DialogContent}. +[04:30:16.762] Browser WARN Warning: Missing `Description` or `aria-describedby={undefined}` for {DialogContent}. +[04:30:16.762] Browser WARN Warning: Missing `Description` or `aria-describedby={undefined}` for {DialogContent}. +[04:30:23.427] Browser WARN Warning: Missing `Description` or `aria-describedby={undefined}` for {DialogContent}. +[04:30:23.427] Browser WARN Warning: Missing `Description` or `aria-describedby={undefined}` for {DialogContent}. +[04:30:29.550] Browser WARN Warning: Missing `Description` or `aria-describedby={undefined}` for {DialogContent}. +[04:30:29.550] Browser WARN Warning: Missing `Description` or `aria-describedby={undefined}` for {DialogContent}. +[04:30:54.271] Server LOG 🌳 GET /api/trees 返回数据: {} +[04:30:56.218] Browser LOG D3OrgChartFlow render, selectedMembers: [] relationMode: false +[04:30:56.218] Browser LOG D3OrgChartFlow render, selectedMembers: [] relationMode: false +[04:30:56.218] Browser LOG D3OrgChartFlow render, selectedMembers: [] relationMode: false +[04:30:56.218] Browser LOG D3OrgChartFlow render, selectedMembers: [] relationMode: false +[04:30:56.218] Browser LOG D3OrgChartFlow render, selectedMembers: [] relationMode: false +[04:30:56.218] Browser LOG D3OrgChartFlow render, selectedMembers: [] relationMode: false +[04:30:56.218] Browser LOG D3OrgChartFlow render, selectedMembers: [] relationMode: false +[04:30:56.218] Browser LOG D3OrgChartFlow render, selectedMembers: [] relationMode: false +[04:31:09.909] Server LOG 🌳 GET /api/trees 返回数据: {} +[04:31:14.026] Browser LOG D3 onMemberClick triggered: cmib8zhsa000hhhxlm0bt3ny3 relationMode: true +[04:31:14.026] Browser LOG Calling handleMemberClick +[04:31:15.668] Browser LOG D3 onMemberClick triggered: cmib8zhti001dhhxlzhzwnmmv relationMode: true +[04:31:15.668] Browser LOG Calling handleMemberClick +[04:31:15.668] Browser WARN Warning: Missing `Description` or `aria-describedby={undefined}` for {DialogContent}. +[04:31:15.668] Browser WARN Warning: Missing `Description` or `aria-describedby={undefined}` for {DialogContent}. +[04:31:28.477] Browser LOG %c[Vercel Web Analytics]%c [pageview] http://localhost:3000/?treeId=cmib8zhrq0003hhxlvnsi96nh color: rgb(120, 120, 120) color: inherit {"dp":"/","o":"http://localhost:3000/?treeId=cmib8zhrq0003hhxlvnsi96nh","sdkn":"@vercel/analytics/next","sdkv":"1.5.0","sv":"0.1.3","ts":1763884530893} +[04:31:28.765] Server LOG 🌳 GET /api/trees 返回数据: {} +[04:31:28.810] Server LOG 🌳 GET /api/trees 返回数据: {} +[04:31:49.490] Server LOG 🌳 GET /api/trees 返回数据: {} +[04:31:49.519] Server LOG 🌳 GET /api/trees 返回数据: {} +[04:31:49.532] Browser LOG %c[Vercel Web Analytics]%c [pageview] http://localhost:3000/members/cmib8zhrs0005hhxlk83tffvl color: rgb(120, 120, 120) color: inherit {"dp":"/members/[id]","o":"http://localhost:3000/members/cmib8zhrs0005hhxlk83tffvl","sdkn":"@vercel/analytics/next","sdkv":"1.5.0","sv":"0.1.3","ts":1763884551938} +[04:31:49.554] Server LOG 🌳 GET /api/trees 返回数据: {} +[04:31:49.571] Server LOG 👥 GET /api/trees/[treeId]/members 返回数据: {} +[04:31:51.537] Server LOG 🌳 GET /api/trees 返回数据: {} +[04:31:51.568] Server LOG 🌳 GET /api/trees 返回数据: {} +[04:31:51.636] Browser LOG %c[Vercel Web Analytics]%c [pageview] http://localhost:3000/?treeId=cmib8zhrq0003hhxlvnsi96nh color: rgb(120, 120, 120) color: inherit {"dp":"/","o":"http://localhost:3000/?treeId=cmib8zhrq0003hhxlvnsi96nh","sdkn":"@vercel/analytics/next","sdkv":"1.5.0","sv":"0.1.3","ts":1763884554032} +[04:31:54.573] Server LOG 🌳 GET /api/trees 返回数据: {} +[04:31:54.591] Server LOG 🌳 GET /api/trees 返回数据: {} +[04:31:54.669] Browser LOG %c[Vercel Web Analytics]%c [pageview] http://localhost:3000/tree?treeId=cmib8zhrq0003hhxlvnsi96nh color: rgb(120, 120, 120) color: inherit {"dp":"/tree","o":"http://localhost:3000/tree?treeId=cmib8zhrq0003hhxlvnsi96nh","sdkn":"@vercel/analytics/next","sdkv":"1.5.0","sv":"0.1.3","ts":1763884557082} +[04:31:56.475] Server LOG 🌳 GET /api/trees 返回数据: {} +[04:31:56.491] Server LOG 🌳 GET /api/trees 返回数据: {} +[04:31:56.583] Browser LOG %c[Vercel Web Analytics]%c [pageview] http://localhost:3000/members?treeId=cmib8zhrq0003hhxlvnsi96nh color: rgb(120, 120, 120) color: inherit {"dp":"/members","o":"http://localhost:3000/members?treeId=cmib8zhrq0003hhxlvnsi96nh","sdkn":"@vercel/analytics/next","sdkv":"1.5.0","sv":"0.1.3","ts":1763884558987} +[04:31:58.131] Browser LOG %c[Vercel Web Analytics]%c [pageview] http://localhost:3000/timeline?treeId=cmib8zhrq0003hhxlvnsi96nh color: rgb(120, 120, 120) color: inherit {"dp":"/timeline","o":"http://localhost:3000/timeline?treeId=cmib8zhrq0003hhxlvnsi96nh","sdkn":"@vercel/analytics/next","sdkv":"1.5.0","sv":"0.1.3","ts":1763884560508} +[04:31:58.131] Browser LOG 迁徙数据: {"lines":[{"coords":[[117.12,36.65],[117.12,36.65]],"fromName":"济南","toName":"济南"},{"coords":[[117.12,36.65],[117.12,36.65]],"fromName":"济南","toName":"济南"},{"coords":[[117.12,36.65],[121.48,31.22]],"fromName":"济南","toName":"上海"},{"coords":[[117.12,36.65],[114.07,22.62]],"fromName":"济南","toName":"深圳"},{"coords":[[117.12,36.65],[120.19,30.26]],"fromName":"济南","toName":"杭州"},{"coords":[[117.12,36.65],[104.06,30.67]],"fromName":"济南","toName":"成都"},{"coords":[[117.12,36.65],[120.62,31.32]],"fromName":"济南","toName":"苏州"},{"coords":[[117.12,36.65],[108.95,34.27]],"fromName":"济南","toName":"西安"},{"coords":[[117.12,36.65],[117.12,36.65]],"fromName":"济南","toName":"济南"},{"coords":[[117.12,36.65],[117.12,36.65]],"fromName":"济南","toName":"济南"}],"migrations":[{"father":{"address":null,"ancestralHome":"山东省济南市","artName":null,"avatarImageId":null,"avatarUrl":null,"bio":"参加过抗日战争,新中国成立后在政府部门工作。","birthDate":"1910-01-20","birthPlace":"山东省济南市历城区","burialPlace":null,"childrenIds":["cmib8zhse000jhhxlt3ppgfn2","cmib8zhsj000nhhxlg7s8axjz"],"courtesyName":null,"createdAt":"2025-11-23T04:58:33.023Z","deathDate":"1985-06-15","email":null,"fatherId":"cmib8zhrs0005hhxlk83tffvl","fullName":"王建国","gender":"MALE","generation":2,"generationName":"建","givenName":"建国","id":"cmib8zhrz0009hhxlgs0r588g","isLunarDate":false,"motherId":"cmib8zhrv0007hhxl3q1knmo9","phone":null,"photoIds":[],"posthumousName":null,"rank":null,"spouseFatherName":null,"spouseIds":["cmib8zhs1000bhhxlovwol0op"],"spouseMotherName":null,"surname":"王","tags":["抗战老兵","公务员","退伍军人"],"telephone":null,"treeId":"cmib8zhrq0003hhxlvnsi96nh","updatedAt":"2025-11-23T05:04:04.978Z"},"from":"山东省济南市历城区","person":{"address":"山东省济南市历下区解放路123号","ancestralHome":"山东省济南市","artName":null,"avatarImageId":null,"avatarUrl":null,"bio":"工程师,从事机械制造行业。","birthDate":"1945-04-18","birthPlace":"山东省济南市历下区","burialPlace":null,"childrenIds":["cmib8zhsx000xhhxlpbjrwykn","cmib8zht10011hhxla6g9be98"],"courtesyName":null,"createdAt":"2025-11-23T04:58:33.039Z","deathDate":null,"email":"wangming@example.com","fatherId":"cmib8zhrz0009hhxlgs0r588g","fullName":"王明","gender":"MALE","generation":3,"generationName":"明","givenName":"明","id":"cmib8zhse000jhhxlt3ppgfn2","isLunarDate":false,"motherId":"cmib8zhs1000bhhxlovwol0op","phone":"13800138001","photoIds":[],"posthumousName":null,"rank":null,"spouseFatherName":null,"spouseIds":["cmib8zhsg000lhhxlqxteubiw"],"spouseMotherName":null,"surname":"王","tags":["工程师","在世"],"telephone":null,"treeId":"cmib8zhrq0003hhxlvnsi96nh","updatedAt":"2025-11-23T07:40:46.245Z"},"to":"山东省济南市历下区","year":1945},{"father":{"address":null,"ancestralHome":"山东省济南市","artName":null,"avatarImageId":null,"avatarUrl":null,"bio":"参加过抗日战争,新中国成立后在政府部门工作。","birthDate":"1910-01-20","birthPlace":"山东省济南市历城区","burialPlace":null,"childrenIds":["cmib8zhse000jhhxlt3ppgfn2","cmib8zhsj000nhhxlg7s8axjz"],"courtesyName":null,"createdAt":"2025-11-23T04:58:33.023Z","deathDate":"1985-06-15","email":null,"fatherId":"cmib8zhrs0005hhxlk83tffvl","fullName":"王建国","gender":"MALE","generation":2,"generationName":"建","givenName":"建国","id":"cmib8zhrz0009hhxlgs0r588g","isLunarDate":false,"motherId":"cmib8zhrv0007hhxl3q1knmo9","phone":null,"photoIds":[],"posthumousName":null,"rank":null,"spouseFatherName":null,"spouseIds":["cmib8zhs1000bhhxlovwol0op"],"spouseMotherName":null,"surname":"王","tags":["抗战老兵","公务员","退伍军人"],"telephone":null,"treeId":"cmib8zhrq0003hhxlvnsi96nh","updatedAt":"2025-11-23T05:04:04.978Z"},"from":"山东省济南市历城区","person":{"address":null,"ancestralHome":"山东省济南市","artName":null,"avatarImageId":null,"avatarUrl":null,"bio":"教师,在中学任教。","birthDate":"1950-09-12","birthPlace":"山东省济南市历下区","burialPlace":null,"childrenIds":["cmib8zht20013hhxl039l48mr"],"courtesyName":null,"createdAt":"2025-11-23T04:58:33.043Z","deathDate":null,"email":null,"fatherId":"cmib8zhrz0009hhxlgs0r588g","fullName":"王亮","gender":"MALE","generation":3,"generationName":"明","givenName":"亮","id":"cmib8zhsj000nhhxlg7s8axjz","isLunarDate":false,"motherId":"cmib8zhs1000bhhxlovwol0op","phone":"13800138003","photoIds":[],"posthumousName":null,"rank":null,"spouseFatherName":null,"spouseIds":[],"spouseMotherName":null,"surname":"王","tags":["教师","在世"],"telephone":null,"treeId":"cmib8zhrq0003hhxlvnsi96nh","updatedAt":"2025-11-23T04:58:33.072Z"},"to":"山东省济南市历下区","year":1950},{"father":{"address":"山东省济南市历下区解放路123号","ancestralHome":"山东省济南市","artName":null,"avatarImageId":null,"avatarUrl":null,"bio":"工程师,从事机械制造行业。","birthDate":"1945-04-18","birthPlace":"山东省济南市历下区","burialPlace":null,"childrenIds":["cmib8zhsx000xhhxlpbjrwykn","cmib8zht10011hhxla6g9be98"],"courtesyName":null,"createdAt":"2025-11-23T04:58:33.039Z","deathDate":null,"email":"wangming@example.com","fatherId":"cmib8zhrz0009hhxlgs0r588g","fullName":"王明","gender":"MALE","generation":3,"generationName":"明","givenName":"明","id":"cmib8zhse000jhhxlt3ppgfn2","isLunarDate":false,"motherId":"cmib8zhs1000bhhxlovwol0op","phone":"13800138001","photoIds":[],"posthumousName":null,"rank":null,"spouseFatherName":null,"spouseIds":["cmib8zhsg000lhhxlqxteubiw"],"spouseMotherName":null,"surname":"王","tags":["工程师","在世"],"telephone":null,"treeId":"cmib8zhrq0003hhxlvnsi96nh","updatedAt":"2025-11-23T07:40:46.245Z"},"from":"山东省济南市历下区","person":{"address":"上海市浦东新区陆家嘴环路1000号","ancestralHome":"山东省济南市","artName":null,"avatarImageId":null,"avatarUrl":null,"bio":"金融分析师,在投资银行工作。","birthDate":"1978-03-22","birthPlace":"上海市浦东新区","burialPlace":null,"childrenIds":["cmib8zhtl001hhhxl289f3j07"],"courtesyName":null,"createdAt":"2025-11-23T04:58:33.061Z","deathDate":null,"email":"wanglei@example.com","fatherId":"cmib8zhse000jhhxlt3ppgfn2","fullName":"王磊","gender":"MALE","generation":4,"generationName":"浩","givenName":"磊","id":"cmib8zht10011hhxla6g9be98","isLunarDate":false,"motherId":"cmib8zhsg000lhhxlqxteubiw","phone":"13900139003","photoIds":[],"posthumousName":null,"rank":null,"spouseFatherName":null,"spouseIds":[],"spouseMotherName":null,"surname":"王","tags":["金融","在世","上海"],"telephone":null,"treeId":"cmib8zhrq0003hhxlvnsi96nh","updatedAt":"2025-11-23T04:58:33.088Z"},"to":"上海市浦东新区","year":1978},{"father":{"address":null,"ancestralHome":"山东省济南市","artName":null,"avatarImageId":null,"avatarUrl":null,"bio":"教师,在中学任教。","birthDate":"1950-09-12","birthPlace":"山东省济南市历下区","burialPlace":null,"childrenIds":["cmib8zht20013hhxl039l48mr"],"courtesyName":null,"createdAt":"2025-11-23T04:58:33.043Z","deathDate":null,"email":null,"fatherId":"cmib8zhrz0009hhxlgs0r588g","fullName":"王亮","gender":"MALE","generation":3,"generationName":"明","givenName":"亮","id":"cmib8zhsj000nhhxlg7s8axjz","isLunarDate":false,"motherId":"cmib8zhs1000bhhxlovwol0op","phone":"13800138003","photoIds":[],"posthumousName":null,"rank":null,"spouseFatherName":null,"spouseIds":[],"spouseMotherName":null,"surname":"王","tags":["教师","在世"],"telephone":null,"treeId":"cmib8zhrq0003hhxlvnsi96nh","updatedAt":"2025-11-23T04:58:33.072Z"},"from":"山东省济南市历下区","person":{"address":"广东省深圳市南山区科技园","ancestralHome":"山东省济南市","artName":null,"avatarImageId":null,"avatarUrl":null,"bio":"创业者,经营科技公司。","birthDate":"1980-11-08","birthPlace":"广东省深圳市","burialPlace":null,"childrenIds":["cmib8zhtm001jhhxlxi4lvq62"],"courtesyName":null,"createdAt":"2025-11-23T04:58:33.063Z","deathDate":null,"email":"wangchao@example.com","fatherId":"cmib8zhsj000nhhxlg7s8axjz","fullName":"王超","gender":"MALE","generation":4,"generationName":"浩","givenName":"超","id":"cmib8zht20013hhxl039l48mr","isLunarDate":false,"motherId":null,"phone":"13900139004","photoIds":[],"posthumousName":null,"rank":null,"spouseFatherName":null,"spouseIds":[],"spouseMotherName":null,"surname":"王","tags":["创业者","在世","深圳"],"telephone":null,"treeId":"cmib8zhrq0003hhxlvnsi96nh","updatedAt":"2025-11-23T04:58:33.089Z"},"to":"广东省深圳市","year":1980},{"father":{"address":null,"ancestralHome":"山东省济南市","artName":null,"avatarImageId":null,"avatarUrl":null,"bio":"医生,继承父业。","birthDate":"1952-02-28","birthPlace":"山东省济南市历城区","burialPlace":null,"childrenIds":["cmib8zht40015hhxlblc0udh0","cmib8zht50017hhxldt6nnba6"],"courtesyName":null,"createdAt":"2025-11-23T04:58:33.044Z","deathDate":null,"email":null,"fatherId":"cmib8zhs5000dhhxlo39he5la","fullName":"王强","gender":"MALE","generation":3,"generationName":"明","givenName":"强","id":"cmib8zhsk000phhxl0b7ow8vz","isLunarDate":false,"motherId":"cmib8zhs6000fhhxl8h0rd5as","phone":"13800138004","photoIds":[],"posthumousName":null,"rank":null,"spouseFatherName":null,"spouseIds":["cmib8zhsm000rhhxlwm3mv5ci"],"spouseMotherName":null,"surname":"王","tags":["医生","在世"],"telephone":null,"treeId":"cmib8zhrq0003hhxlvnsi96nh","updatedAt":"2025-11-23T04:58:33.073Z"},"from":"山东省济南市历城区","person":{"address":"浙江省杭州市西湖区文三路","ancestralHome":"山东省济南市","artName":null,"avatarImageId":null,"avatarUrl":null,"bio":"医生,在浙江大学附属医院工作。","birthDate":"1982-05-15","birthPlace":"浙江省杭州市","burialPlace":null,"childrenIds":["cmib8zhto001lhhxlkizg2ig6"],"courtesyName":null,"createdAt":"2025-11-23T04:58:33.064Z","deathDate":null,"email":"wangpeng@example.com","fatherId":"cmib8zhsk000phhxl0b7ow8vz","fullName":"王鹏","gender":"MALE","generation":4,"generationName":"浩","givenName":"鹏","id":"cmib8zht40015hhxlblc0udh0","isLunarDate":false,"motherId":"cmib8zhsm000rhhxlwm3mv5ci","phone":"13900139005","photoIds":[],"posthumousName":null,"rank":null,"spouseFatherName":null,"spouseIds":[],"spouseMotherName":null,"surname":"王","tags":["医生","在世","杭州"],"telephone":null,"treeId":"cmib8zhrq0003hhxlvnsi96nh","updatedAt":"2025-11-23T04:58:33.091Z"},"to":"浙江省杭州市","year":1982},{"father":{"address":null,"ancestralHome":"山东省济南市","artName":null,"avatarImageId":null,"avatarUrl":null,"bio":"医生,继承父业。","birthDate":"1952-02-28","birthPlace":"山东省济南市历城区","burialPlace":null,"childrenIds":["cmib8zht40015hhxlblc0udh0","cmib8zht50017hhxldt6nnba6"],"courtesyName":null,"createdAt":"2025-11-23T04:58:33.044Z","deathDate":null,"email":null,"fatherId":"cmib8zhs5000dhhxlo39he5la","fullName":"王强","gender":"MALE","generation":3,"generationName":"明","givenName":"强","id":"cmib8zhsk000phhxl0b7ow8vz","isLunarDate":false,"motherId":"cmib8zhs6000fhhxl8h0rd5as","phone":"13800138004","photoIds":[],"posthumousName":null,"rank":null,"spouseFatherName":null,"spouseIds":["cmib8zhsm000rhhxlwm3mv5ci"],"spouseMotherName":null,"surname":"王","tags":["医生","在世"],"telephone":null,"treeId":"cmib8zhrq0003hhxlvnsi96nh","updatedAt":"2025-11-23T04:58:33.073Z"},"from":"山东省济南市历城区","person":{"address":"四川省成都市武侯区天府大道","ancestralHome":"山东省济南市","artName":null,"avatarImageId":null,"avatarUrl":null,"bio":"教师,在大学任教。","birthDate":"1984-08-20","birthPlace":"四川省成都市","burialPlace":null,"childrenIds":[],"courtesyName":null,"createdAt":"2025-11-23T04:58:33.066Z","deathDate":null,"email":"wangting@example.com","fatherId":"cmib8zhsk000phhxl0b7ow8vz","fullName":"王婷","gender":"FEMALE","generation":4,"generationName":"浩","givenName":"婷","id":"cmib8zht50017hhxldt6nnba6","isLunarDate":false,"motherId":"cmib8zhsm000rhhxlwm3mv5ci","phone":"13900139006","photoIds":[],"posthumousName":null,"rank":null,"spouseFatherName":null,"spouseIds":[],"spouseMotherName":null,"surname":"王","tags":["教师","在世","成都"],"telephone":null,"treeId":"cmib8zhrq0003hhxlvnsi96nh","updatedAt":"2025-11-23T04:58:33.066Z"},"to":"四川省成都市","year":1984},{"father":{"address":null,"ancestralHome":"山东省济南市","artName":null,"avatarImageId":null,"avatarUrl":null,"bio":"护士,在医院工作。","birthDate":"1954-07-20","birthPlace":"山东省济南市历城区","burialPlace":null,"childrenIds":["cmib8zht70019hhxlg7l25qh6"],"courtesyName":null,"createdAt":"2025-11-23T04:58:33.049Z","deathDate":null,"email":null,"fatherId":"cmib8zhs5000dhhxlo39he5la","fullName":"王丽","gender":"FEMALE","generation":3,"generationName":"明","givenName":"丽","id":"cmib8zhso000thhxl6jztirc0","isLunarDate":false,"motherId":"cmib8zhs6000fhhxl8h0rd5as","phone":"13800138006","photoIds":[],"posthumousName":null,"rank":null,"spouseFatherName":null,"spouseIds":["cmibe02rs000r13eiug7grp9w"],"spouseMotherName":null,"surname":"王","tags":["护士","在世"],"telephone":null,"treeId":"cmib8zhrq0003hhxlvnsi96nh","updatedAt":"2025-11-23T07:18:58.316Z"},"from":"山东省济南市历城区","person":{"address":"江苏省苏州市工业园区","ancestralHome":"山东省济南市","artName":null,"avatarImageId":null,"avatarUrl":null,"bio":"护士,在医院工作。","birthDate":"1986-02-14","birthPlace":"江苏省苏州市","burialPlace":null,"childrenIds":[],"courtesyName":null,"createdAt":"2025-11-23T04:58:33.067Z","deathDate":null,"email":"wangna@example.com","fatherId":"cmib8zhso000thhxl6jztirc0","fullName":"王娜","gender":"FEMALE","generation":4,"generationName":"浩","givenName":"娜","id":"cmib8zht70019hhxlg7l25qh6","isLunarDate":false,"motherId":"cmibe02rs000r13eiug7grp9w","phone":"13900139007","photoIds":[],"posthumousName":null,"rank":null,"spouseFatherName":null,"spouseIds":[],"spouseMotherName":null,"surname":"王","tags":["护士","在世","苏州"],"telephone":null,"treeId":"cmib8zhrq0003hhxlvnsi96nh","updatedAt":"2025-11-23T07:41:20.485Z"},"to":"江苏省苏州市","year":1986},{"father":{"address":null,"ancestralHome":"山东省济南市","artName":null,"avatarImageId":null,"avatarUrl":null,"bio":"军人,服役20年后转业。","birthDate":"1956-12-08","birthPlace":"山东省济南市历城区","burialPlace":null,"childrenIds":["cmib8zht8001bhhxlzoa6z9y2"],"courtesyName":null,"createdAt":"2025-11-23T04:58:33.050Z","deathDate":null,"email":null,"fatherId":"cmib8zhs5000dhhxlo39he5la","fullName":"王军","gender":"MALE","generation":3,"generationName":"明","givenName":"军","id":"cmib8zhsq000vhhxl2whod7u2","isLunarDate":false,"motherId":"cmib8zhs6000fhhxl8h0rd5as","phone":"13800138007","photoIds":[],"posthumousName":null,"rank":null,"spouseFatherName":null,"spouseIds":["cmibdvdad000n13ei0juo7xxm"],"spouseMotherName":null,"surname":"王","tags":["军人","在世"],"telephone":null,"treeId":"cmib8zhrq0003hhxlvnsi96nh","updatedAt":"2025-11-23T07:40:46.248Z"},"from":"山东省济南市历城区","person":{"address":"陕西省西安市雁塔区高新路","ancestralHome":"山东省济南市","artName":null,"avatarImageId":null,"avatarUrl":null,"bio":"工程师,在航天企业工作。","birthDate":"1988-07-30","birthPlace":"陕西省西安市","burialPlace":null,"childrenIds":[],"courtesyName":null,"createdAt":"2025-11-23T04:58:33.068Z","deathDate":null,"email":"wangtao@example.com","fatherId":"cmib8zhsq000vhhxl2whod7u2","fullName":"王涛","gender":"MALE","generation":4,"generationName":"浩","givenName":"涛","id":"cmib8zht8001bhhxlzoa6z9y2","isLunarDate":false,"motherId":"cmibdvdad000n13ei0juo7xxm","phone":"13900139008","photoIds":[],"posthumousName":null,"rank":null,"spouseFatherName":null,"spouseIds":[],"spouseMotherName":null,"surname":"王","tags":["工程师","在世","西安"],"telephone":null,"treeId":"cmib8zhrq0003hhxlvnsi96nh","updatedAt":"2025-11-23T07:40:46.240Z"},"to":"陕西省西安市","year":1988},{"father":{"address":"山东省济南市高新区科技路456号","ancestralHome":"山东省济南市","artName":null,"avatarImageId":null,"avatarUrl":null,"bio":"软件工程师,在互联网公司工作。","birthDate":"1975-06-10","birthPlace":"山东省济南市历下区","burialPlace":null,"childrenIds":["cmib8zhti001dhhxlzhzwnmmv","cmib8zhtj001fhhxlq9zssb2u"],"courtesyName":null,"createdAt":"2025-11-23T04:58:33.057Z","deathDate":null,"email":"wanghao@example.com","fatherId":"cmib8zhse000jhhxlt3ppgfn2","fullName":"王浩","gender":"MALE","generation":4,"generationName":"浩","givenName":"浩","id":"cmib8zhsx000xhhxlpbjrwykn","isLunarDate":false,"motherId":"cmib8zhsg000lhhxlqxteubiw","phone":"13900139001","photoIds":[],"posthumousName":null,"rank":null,"spouseFatherName":null,"spouseIds":["cmib8zhsy000zhhxlj2wvxjok"],"spouseMotherName":null,"surname":"王","tags":["程序员","在世"],"telephone":null,"treeId":"cmib8zhrq0003hhxlvnsi96nh","updatedAt":"2025-11-23T04:58:33.085Z"},"from":"山东省济南市历下区","person":{"address":null,"ancestralHome":"山东省济南市","artName":null,"avatarImageId":null,"avatarUrl":null,"bio":"在读大学生,就读于计算机科学专业。","birthDate":"2005-03-20","birthPlace":"山东省济南市高新区","burialPlace":null,"childrenIds":[],"courtesyName":null,"createdAt":"2025-11-23T04:58:33.078Z","deathDate":null,"email":null,"fatherId":"cmib8zhsx000xhhxlpbjrwykn","fullName":"王子轩","gender":"MALE","generation":5,"generationName":"子","givenName":"子轩","id":"cmib8zhti001dhhxlzhzwnmmv","isLunarDate":false,"motherId":"cmib8zhsy000zhhxlj2wvxjok","phone":null,"photoIds":[],"posthumousName":null,"rank":null,"spouseFatherName":null,"spouseIds":[],"spouseMotherName":null,"surname":"王","tags":["学生","在世"],"telephone":null,"treeId":"cmib8zhrq0003hhxlvnsi96nh","updatedAt":"2025-11-23T04:58:33.078Z"},"to":"山东省济南市高新区","year":2005},{"father":{"address":"山东省济南市高新区科技路456号","ancestralHome":"山东省济南市","artName":null,"avatarImageId":null,"avatarUrl":null,"bio":"软件工程师,在互联网公司工作。","birthDate":"1975-06-10","birthPlace":"山东省济南市历下区","burialPlace":null,"childrenIds":["cmib8zhti001dhhxlzhzwnmmv","cmib8zhtj001fhhxlq9zssb2u"],"courtesyName":null,"createdAt":"2025-11-23T04:58:33.057Z","deathDate":null,"email":"wanghao@example.com","fatherId":"cmib8zhse000jhhxlt3ppgfn2","fullName":"王浩","gender":"MALE","generation":4,"generationName":"浩","givenName":"浩","id":"cmib8zhsx000xhhxlpbjrwykn","isLunarDate":false,"motherId":"cmib8zhsg000lhhxlqxteubiw","phone":"13900139001","photoIds":[],"posthumousName":null,"rank":null,"spouseFatherName":null,"spouseIds":["cmib8zhsy000zhhxlj2wvxjok"],"spouseMotherName":null,"surname":"王","tags":["程序员","在世"],"telephone":null,"treeId":"cmib8zhrq0003hhxlvnsi96nh","updatedAt":"2025-11-23T04:58:33.085Z"},"from":"山东省济南市历下区","person":{"address":null,"ancestralHome":"山东省济南市","artName":null,"avatarImageId":null,"avatarUrl":null,"bio":"在读高中生。","birthDate":"2008-07-15","birthPlace":"山东省济南市高新区","burialPlace":null,"childrenIds":[],"courtesyName":null,"createdAt":"2025-11-23T04:58:33.079Z","deathDate":null,"email":null,"fatherId":"cmib8zhsx000xhhxlpbjrwykn","fullName":"王梓涵","gender":"FEMALE","generation":5,"generationName":"子","givenName":"梓涵","id":"cmib8zhtj001fhhxlq9zssb2u","isLunarDate":false,"motherId":"cmib8zhsy000zhhxlj2wvxjok","phone":null,"photoIds":[],"posthumousName":null,"rank":null,"spouseFatherName":null,"spouseIds":[],"spouseMotherName":null,"surname":"王","tags":["学生","在世"],"telephone":null,"treeId":"cmib8zhrq0003hhxlvnsi96nh","updatedAt":"2025-11-23T04:58:33.079Z"},"to":"山东省济南市高新区","year":2008}]} +[04:31:58.131] Browser LOG 迁徙数据: {"lines":[{"coords":[[117.12,36.65],[117.12,36.65]],"fromName":"济南","toName":"济南"},{"coords":[[117.12,36.65],[117.12,36.65]],"fromName":"济南","toName":"济南"},{"coords":[[117.12,36.65],[121.48,31.22]],"fromName":"济南","toName":"上海"},{"coords":[[117.12,36.65],[114.07,22.62]],"fromName":"济南","toName":"深圳"},{"coords":[[117.12,36.65],[120.19,30.26]],"fromName":"济南","toName":"杭州"},{"coords":[[117.12,36.65],[104.06,30.67]],"fromName":"济南","toName":"成都"},{"coords":[[117.12,36.65],[120.62,31.32]],"fromName":"济南","toName":"苏州"},{"coords":[[117.12,36.65],[108.95,34.27]],"fromName":"济南","toName":"西安"},{"coords":[[117.12,36.65],[117.12,36.65]],"fromName":"济南","toName":"济南"},{"coords":[[117.12,36.65],[117.12,36.65]],"fromName":"济南","toName":"济南"}],"migrations":[{"father":{"address":null,"ancestralHome":"山东省济南市","artName":null,"avatarImageId":null,"avatarUrl":null,"bio":"参加过抗日战争,新中国成立后在政府部门工作。","birthDate":"1910-01-20","birthPlace":"山东省济南市历城区","burialPlace":null,"childrenIds":["cmib8zhse000jhhxlt3ppgfn2","cmib8zhsj000nhhxlg7s8axjz"],"courtesyName":null,"createdAt":"2025-11-23T04:58:33.023Z","deathDate":"1985-06-15","email":null,"fatherId":"cmib8zhrs0005hhxlk83tffvl","fullName":"王建国","gender":"MALE","generation":2,"generationName":"建","givenName":"建国","id":"cmib8zhrz0009hhxlgs0r588g","isLunarDate":false,"motherId":"cmib8zhrv0007hhxl3q1knmo9","phone":null,"photoIds":[],"posthumousName":null,"rank":null,"spouseFatherName":null,"spouseIds":["cmib8zhs1000bhhxlovwol0op"],"spouseMotherName":null,"surname":"王","tags":["抗战老兵","公务员","退伍军人"],"telephone":null,"treeId":"cmib8zhrq0003hhxlvnsi96nh","updatedAt":"2025-11-23T05:04:04.978Z"},"from":"山东省济南市历城区","person":{"address":"山东省济南市历下区解放路123号","ancestralHome":"山东省济南市","artName":null,"avatarImageId":null,"avatarUrl":null,"bio":"工程师,从事机械制造行业。","birthDate":"1945-04-18","birthPlace":"山东省济南市历下区","burialPlace":null,"childrenIds":["cmib8zhsx000xhhxlpbjrwykn","cmib8zht10011hhxla6g9be98"],"courtesyName":null,"createdAt":"2025-11-23T04:58:33.039Z","deathDate":null,"email":"wangming@example.com","fatherId":"cmib8zhrz0009hhxlgs0r588g","fullName":"王明","gender":"MALE","generation":3,"generationName":"明","givenName":"明","id":"cmib8zhse000jhhxlt3ppgfn2","isLunarDate":false,"motherId":"cmib8zhs1000bhhxlovwol0op","phone":"13800138001","photoIds":[],"posthumousName":null,"rank":null,"spouseFatherName":null,"spouseIds":["cmib8zhsg000lhhxlqxteubiw"],"spouseMotherName":null,"surname":"王","tags":["工程师","在世"],"telephone":null,"treeId":"cmib8zhrq0003hhxlvnsi96nh","updatedAt":"2025-11-23T07:40:46.245Z"},"to":"山东省济南市历下区","year":1945},{"father":{"address":null,"ancestralHome":"山东省济南市","artName":null,"avatarImageId":null,"avatarUrl":null,"bio":"参加过抗日战争,新中国成立后在政府部门工作。","birthDate":"1910-01-20","birthPlace":"山东省济南市历城区","burialPlace":null,"childrenIds":["cmib8zhse000jhhxlt3ppgfn2","cmib8zhsj000nhhxlg7s8axjz"],"courtesyName":null,"createdAt":"2025-11-23T04:58:33.023Z","deathDate":"1985-06-15","email":null,"fatherId":"cmib8zhrs0005hhxlk83tffvl","fullName":"王建国","gender":"MALE","generation":2,"generationName":"建","givenName":"建国","id":"cmib8zhrz0009hhxlgs0r588g","isLunarDate":false,"motherId":"cmib8zhrv0007hhxl3q1knmo9","phone":null,"photoIds":[],"posthumousName":null,"rank":null,"spouseFatherName":null,"spouseIds":["cmib8zhs1000bhhxlovwol0op"],"spouseMotherName":null,"surname":"王","tags":["抗战老兵","公务员","退伍军人"],"telephone":null,"treeId":"cmib8zhrq0003hhxlvnsi96nh","updatedAt":"2025-11-23T05:04:04.978Z"},"from":"山东省济南市历城区","person":{"address":null,"ancestralHome":"山东省济南市","artName":null,"avatarImageId":null,"avatarUrl":null,"bio":"教师,在中学任教。","birthDate":"1950-09-12","birthPlace":"山东省济南市历下区","burialPlace":null,"childrenIds":["cmib8zht20013hhxl039l48mr"],"courtesyName":null,"createdAt":"2025-11-23T04:58:33.043Z","deathDate":null,"email":null,"fatherId":"cmib8zhrz0009hhxlgs0r588g","fullName":"王亮","gender":"MALE","generation":3,"generationName":"明","givenName":"亮","id":"cmib8zhsj000nhhxlg7s8axjz","isLunarDate":false,"motherId":"cmib8zhs1000bhhxlovwol0op","phone":"13800138003","photoIds":[],"posthumousName":null,"rank":null,"spouseFatherName":null,"spouseIds":[],"spouseMotherName":null,"surname":"王","tags":["教师","在世"],"telephone":null,"treeId":"cmib8zhrq0003hhxlvnsi96nh","updatedAt":"2025-11-23T04:58:33.072Z"},"to":"山东省济南市历下区","year":1950},{"father":{"address":"山东省济南市历下区解放路123号","ancestralHome":"山东省济南市","artName":null,"avatarImageId":null,"avatarUrl":null,"bio":"工程师,从事机械制造行业。","birthDate":"1945-04-18","birthPlace":"山东省济南市历下区","burialPlace":null,"childrenIds":["cmib8zhsx000xhhxlpbjrwykn","cmib8zht10011hhxla6g9be98"],"courtesyName":null,"createdAt":"2025-11-23T04:58:33.039Z","deathDate":null,"email":"wangming@example.com","fatherId":"cmib8zhrz0009hhxlgs0r588g","fullName":"王明","gender":"MALE","generation":3,"generationName":"明","givenName":"明","id":"cmib8zhse000jhhxlt3ppgfn2","isLunarDate":false,"motherId":"cmib8zhs1000bhhxlovwol0op","phone":"13800138001","photoIds":[],"posthumousName":null,"rank":null,"spouseFatherName":null,"spouseIds":["cmib8zhsg000lhhxlqxteubiw"],"spouseMotherName":null,"surname":"王","tags":["工程师","在世"],"telephone":null,"treeId":"cmib8zhrq0003hhxlvnsi96nh","updatedAt":"2025-11-23T07:40:46.245Z"},"from":"山东省济南市历下区","person":{"address":"上海市浦东新区陆家嘴环路1000号","ancestralHome":"山东省济南市","artName":null,"avatarImageId":null,"avatarUrl":null,"bio":"金融分析师,在投资银行工作。","birthDate":"1978-03-22","birthPlace":"上海市浦东新区","burialPlace":null,"childrenIds":["cmib8zhtl001hhhxl289f3j07"],"courtesyName":null,"createdAt":"2025-11-23T04:58:33.061Z","deathDate":null,"email":"wanglei@example.com","fatherId":"cmib8zhse000jhhxlt3ppgfn2","fullName":"王磊","gender":"MALE","generation":4,"generationName":"浩","givenName":"磊","id":"cmib8zht10011hhxla6g9be98","isLunarDate":false,"motherId":"cmib8zhsg000lhhxlqxteubiw","phone":"13900139003","photoIds":[],"posthumousName":null,"rank":null,"spouseFatherName":null,"spouseIds":[],"spouseMotherName":null,"surname":"王","tags":["金融","在世","上海"],"telephone":null,"treeId":"cmib8zhrq0003hhxlvnsi96nh","updatedAt":"2025-11-23T04:58:33.088Z"},"to":"上海市浦东新区","year":1978},{"father":{"address":null,"ancestralHome":"山东省济南市","artName":null,"avatarImageId":null,"avatarUrl":null,"bio":"教师,在中学任教。","birthDate":"1950-09-12","birthPlace":"山东省济南市历下区","burialPlace":null,"childrenIds":["cmib8zht20013hhxl039l48mr"],"courtesyName":null,"createdAt":"2025-11-23T04:58:33.043Z","deathDate":null,"email":null,"fatherId":"cmib8zhrz0009hhxlgs0r588g","fullName":"王亮","gender":"MALE","generation":3,"generationName":"明","givenName":"亮","id":"cmib8zhsj000nhhxlg7s8axjz","isLunarDate":false,"motherId":"cmib8zhs1000bhhxlovwol0op","phone":"13800138003","photoIds":[],"posthumousName":null,"rank":null,"spouseFatherName":null,"spouseIds":[],"spouseMotherName":null,"surname":"王","tags":["教师","在世"],"telephone":null,"treeId":"cmib8zhrq0003hhxlvnsi96nh","updatedAt":"2025-11-23T04:58:33.072Z"},"from":"山东省济南市历下区","person":{"address":"广东省深圳市南山区科技园","ancestralHome":"山东省济南市","artName":null,"avatarImageId":null,"avatarUrl":null,"bio":"创业者,经营科技公司。","birthDate":"1980-11-08","birthPlace":"广东省深圳市","burialPlace":null,"childrenIds":["cmib8zhtm001jhhxlxi4lvq62"],"courtesyName":null,"createdAt":"2025-11-23T04:58:33.063Z","deathDate":null,"email":"wangchao@example.com","fatherId":"cmib8zhsj000nhhxlg7s8axjz","fullName":"王超","gender":"MALE","generation":4,"generationName":"浩","givenName":"超","id":"cmib8zht20013hhxl039l48mr","isLunarDate":false,"motherId":null,"phone":"13900139004","photoIds":[],"posthumousName":null,"rank":null,"spouseFatherName":null,"spouseIds":[],"spouseMotherName":null,"surname":"王","tags":["创业者","在世","深圳"],"telephone":null,"treeId":"cmib8zhrq0003hhxlvnsi96nh","updatedAt":"2025-11-23T04:58:33.089Z"},"to":"广东省深圳市","year":1980},{"father":{"address":null,"ancestralHome":"山东省济南市","artName":null,"avatarImageId":null,"avatarUrl":null,"bio":"医生,继承父业。","birthDate":"1952-02-28","birthPlace":"山东省济南市历城区","burialPlace":null,"childrenIds":["cmib8zht40015hhxlblc0udh0","cmib8zht50017hhxldt6nnba6"],"courtesyName":null,"createdAt":"2025-11-23T04:58:33.044Z","deathDate":null,"email":null,"fatherId":"cmib8zhs5000dhhxlo39he5la","fullName":"王强","gender":"MALE","generation":3,"generationName":"明","givenName":"强","id":"cmib8zhsk000phhxl0b7ow8vz","isLunarDate":false,"motherId":"cmib8zhs6000fhhxl8h0rd5as","phone":"13800138004","photoIds":[],"posthumousName":null,"rank":null,"spouseFatherName":null,"spouseIds":["cmib8zhsm000rhhxlwm3mv5ci"],"spouseMotherName":null,"surname":"王","tags":["医生","在世"],"telephone":null,"treeId":"cmib8zhrq0003hhxlvnsi96nh","updatedAt":"2025-11-23T04:58:33.073Z"},"from":"山东省济南市历城区","person":{"address":"浙江省杭州市西湖区文三路","ancestralHome":"山东省济南市","artName":null,"avatarImageId":null,"avatarUrl":null,"bio":"医生,在浙江大学附属医院工作。","birthDate":"1982-05-15","birthPlace":"浙江省杭州市","burialPlace":null,"childrenIds":["cmib8zhto001lhhxlkizg2ig6"],"courtesyName":null,"createdAt":"2025-11-23T04:58:33.064Z","deathDate":null,"email":"wangpeng@example.com","fatherId":"cmib8zhsk000phhxl0b7ow8vz","fullName":"王鹏","gender":"MALE","generation":4,"generationName":"浩","givenName":"鹏","id":"cmib8zht40015hhxlblc0udh0","isLunarDate":false,"motherId":"cmib8zhsm000rhhxlwm3mv5ci","phone":"13900139005","photoIds":[],"posthumousName":null,"rank":null,"spouseFatherName":null,"spouseIds":[],"spouseMotherName":null,"surname":"王","tags":["医生","在世","杭州"],"telephone":null,"treeId":"cmib8zhrq0003hhxlvnsi96nh","updatedAt":"2025-11-23T04:58:33.091Z"},"to":"浙江省杭州市","year":1982},{"father":{"address":null,"ancestralHome":"山东省济南市","artName":null,"avatarImageId":null,"avatarUrl":null,"bio":"医生,继承父业。","birthDate":"1952-02-28","birthPlace":"山东省济南市历城区","burialPlace":null,"childrenIds":["cmib8zht40015hhxlblc0udh0","cmib8zht50017hhxldt6nnba6"],"courtesyName":null,"createdAt":"2025-11-23T04:58:33.044Z","deathDate":null,"email":null,"fatherId":"cmib8zhs5000dhhxlo39he5la","fullName":"王强","gender":"MALE","generation":3,"generationName":"明","givenName":"强","id":"cmib8zhsk000phhxl0b7ow8vz","isLunarDate":false,"motherId":"cmib8zhs6000fhhxl8h0rd5as","phone":"13800138004","photoIds":[],"posthumousName":null,"rank":null,"spouseFatherName":null,"spouseIds":["cmib8zhsm000rhhxlwm3mv5ci"],"spouseMotherName":null,"surname":"王","tags":["医生","在世"],"telephone":null,"treeId":"cmib8zhrq0003hhxlvnsi96nh","updatedAt":"2025-11-23T04:58:33.073Z"},"from":"山东省济南市历城区","person":{"address":"四川省成都市武侯区天府大道","ancestralHome":"山东省济南市","artName":null,"avatarImageId":null,"avatarUrl":null,"bio":"教师,在大学任教。","birthDate":"1984-08-20","birthPlace":"四川省成都市","burialPlace":null,"childrenIds":[],"courtesyName":null,"createdAt":"2025-11-23T04:58:33.066Z","deathDate":null,"email":"wangting@example.com","fatherId":"cmib8zhsk000phhxl0b7ow8vz","fullName":"王婷","gender":"FEMALE","generation":4,"generationName":"浩","givenName":"婷","id":"cmib8zht50017hhxldt6nnba6","isLunarDate":false,"motherId":"cmib8zhsm000rhhxlwm3mv5ci","phone":"13900139006","photoIds":[],"posthumousName":null,"rank":null,"spouseFatherName":null,"spouseIds":[],"spouseMotherName":null,"surname":"王","tags":["教师","在世","成都"],"telephone":null,"treeId":"cmib8zhrq0003hhxlvnsi96nh","updatedAt":"2025-11-23T04:58:33.066Z"},"to":"四川省成都市","year":1984},{"father":{"address":null,"ancestralHome":"山东省济南市","artName":null,"avatarImageId":null,"avatarUrl":null,"bio":"护士,在医院工作。","birthDate":"1954-07-20","birthPlace":"山东省济南市历城区","burialPlace":null,"childrenIds":["cmib8zht70019hhxlg7l25qh6"],"courtesyName":null,"createdAt":"2025-11-23T04:58:33.049Z","deathDate":null,"email":null,"fatherId":"cmib8zhs5000dhhxlo39he5la","fullName":"王丽","gender":"FEMALE","generation":3,"generationName":"明","givenName":"丽","id":"cmib8zhso000thhxl6jztirc0","isLunarDate":false,"motherId":"cmib8zhs6000fhhxl8h0rd5as","phone":"13800138006","photoIds":[],"posthumousName":null,"rank":null,"spouseFatherName":null,"spouseIds":["cmibe02rs000r13eiug7grp9w"],"spouseMotherName":null,"surname":"王","tags":["护士","在世"],"telephone":null,"treeId":"cmib8zhrq0003hhxlvnsi96nh","updatedAt":"2025-11-23T07:18:58.316Z"},"from":"山东省济南市历城区","person":{"address":"江苏省苏州市工业园区","ancestralHome":"山东省济南市","artName":null,"avatarImageId":null,"avatarUrl":null,"bio":"护士,在医院工作。","birthDate":"1986-02-14","birthPlace":"江苏省苏州市","burialPlace":null,"childrenIds":[],"courtesyName":null,"createdAt":"2025-11-23T04:58:33.067Z","deathDate":null,"email":"wangna@example.com","fatherId":"cmib8zhso000thhxl6jztirc0","fullName":"王娜","gender":"FEMALE","generation":4,"generationName":"浩","givenName":"娜","id":"cmib8zht70019hhxlg7l25qh6","isLunarDate":false,"motherId":"cmibe02rs000r13eiug7grp9w","phone":"13900139007","photoIds":[],"posthumousName":null,"rank":null,"spouseFatherName":null,"spouseIds":[],"spouseMotherName":null,"surname":"王","tags":["护士","在世","苏州"],"telephone":null,"treeId":"cmib8zhrq0003hhxlvnsi96nh","updatedAt":"2025-11-23T07:41:20.485Z"},"to":"江苏省苏州市","year":1986},{"father":{"address":null,"ancestralHome":"山东省济南市","artName":null,"avatarImageId":null,"avatarUrl":null,"bio":"军人,服役20年后转业。","birthDate":"1956-12-08","birthPlace":"山东省济南市历城区","burialPlace":null,"childrenIds":["cmib8zht8001bhhxlzoa6z9y2"],"courtesyName":null,"createdAt":"2025-11-23T04:58:33.050Z","deathDate":null,"email":null,"fatherId":"cmib8zhs5000dhhxlo39he5la","fullName":"王军","gender":"MALE","generation":3,"generationName":"明","givenName":"军","id":"cmib8zhsq000vhhxl2whod7u2","isLunarDate":false,"motherId":"cmib8zhs6000fhhxl8h0rd5as","phone":"13800138007","photoIds":[],"posthumousName":null,"rank":null,"spouseFatherName":null,"spouseIds":["cmibdvdad000n13ei0juo7xxm"],"spouseMotherName":null,"surname":"王","tags":["军人","在世"],"telephone":null,"treeId":"cmib8zhrq0003hhxlvnsi96nh","updatedAt":"2025-11-23T07:40:46.248Z"},"from":"山东省济南市历城区","person":{"address":"陕西省西安市雁塔区高新路","ancestralHome":"山东省济南市","artName":null,"avatarImageId":null,"avatarUrl":null,"bio":"工程师,在航天企业工作。","birthDate":"1988-07-30","birthPlace":"陕西省西安市","burialPlace":null,"childrenIds":[],"courtesyName":null,"createdAt":"2025-11-23T04:58:33.068Z","deathDate":null,"email":"wangtao@example.com","fatherId":"cmib8zhsq000vhhxl2whod7u2","fullName":"王涛","gender":"MALE","generation":4,"generationName":"浩","givenName":"涛","id":"cmib8zht8001bhhxlzoa6z9y2","isLunarDate":false,"motherId":"cmibdvdad000n13ei0juo7xxm","phone":"13900139008","photoIds":[],"posthumousName":null,"rank":null,"spouseFatherName":null,"spouseIds":[],"spouseMotherName":null,"surname":"王","tags":["工程师","在世","西安"],"telephone":null,"treeId":"cmib8zhrq0003hhxlvnsi96nh","updatedAt":"2025-11-23T07:40:46.240Z"},"to":"陕西省西安市","year":1988},{"father":{"address":"山东省济南市高新区科技路456号","ancestralHome":"山东省济南市","artName":null,"avatarImageId":null,"avatarUrl":null,"bio":"软件工程师,在互联网公司工作。","birthDate":"1975-06-10","birthPlace":"山东省济南市历下区","burialPlace":null,"childrenIds":["cmib8zhti001dhhxlzhzwnmmv","cmib8zhtj001fhhxlq9zssb2u"],"courtesyName":null,"createdAt":"2025-11-23T04:58:33.057Z","deathDate":null,"email":"wanghao@example.com","fatherId":"cmib8zhse000jhhxlt3ppgfn2","fullName":"王浩","gender":"MALE","generation":4,"generationName":"浩","givenName":"浩","id":"cmib8zhsx000xhhxlpbjrwykn","isLunarDate":false,"motherId":"cmib8zhsg000lhhxlqxteubiw","phone":"13900139001","photoIds":[],"posthumousName":null,"rank":null,"spouseFatherName":null,"spouseIds":["cmib8zhsy000zhhxlj2wvxjok"],"spouseMotherName":null,"surname":"王","tags":["程序员","在世"],"telephone":null,"treeId":"cmib8zhrq0003hhxlvnsi96nh","updatedAt":"2025-11-23T04:58:33.085Z"},"from":"山东省济南市历下区","person":{"address":null,"ancestralHome":"山东省济南市","artName":null,"avatarImageId":null,"avatarUrl":null,"bio":"在读大学生,就读于计算机科学专业。","birthDate":"2005-03-20","birthPlace":"山东省济南市高新区","burialPlace":null,"childrenIds":[],"courtesyName":null,"createdAt":"2025-11-23T04:58:33.078Z","deathDate":null,"email":null,"fatherId":"cmib8zhsx000xhhxlpbjrwykn","fullName":"王子轩","gender":"MALE","generation":5,"generationName":"子","givenName":"子轩","id":"cmib8zhti001dhhxlzhzwnmmv","isLunarDate":false,"motherId":"cmib8zhsy000zhhxlj2wvxjok","phone":null,"photoIds":[],"posthumousName":null,"rank":null,"spouseFatherName":null,"spouseIds":[],"spouseMotherName":null,"surname":"王","tags":["学生","在世"],"telephone":null,"treeId":"cmib8zhrq0003hhxlvnsi96nh","updatedAt":"2025-11-23T04:58:33.078Z"},"to":"山东省济南市高新区","year":2005},{"father":{"address":"山东省济南市高新区科技路456号","ancestralHome":"山东省济南市","artName":null,"avatarImageId":null,"avatarUrl":null,"bio":"软件工程师,在互联网公司工作。","birthDate":"1975-06-10","birthPlace":"山东省济南市历下区","burialPlace":null,"childrenIds":["cmib8zhti001dhhxlzhzwnmmv","cmib8zhtj001fhhxlq9zssb2u"],"courtesyName":null,"createdAt":"2025-11-23T04:58:33.057Z","deathDate":null,"email":"wanghao@example.com","fatherId":"cmib8zhse000jhhxlt3ppgfn2","fullName":"王浩","gender":"MALE","generation":4,"generationName":"浩","givenName":"浩","id":"cmib8zhsx000xhhxlpbjrwykn","isLunarDate":false,"motherId":"cmib8zhsg000lhhxlqxteubiw","phone":"13900139001","photoIds":[],"posthumousName":null,"rank":null,"spouseFatherName":null,"spouseIds":["cmib8zhsy000zhhxlj2wvxjok"],"spouseMotherName":null,"surname":"王","tags":["程序员","在世"],"telephone":null,"treeId":"cmib8zhrq0003hhxlvnsi96nh","updatedAt":"2025-11-23T04:58:33.085Z"},"from":"山东省济南市历下区","person":{"address":null,"ancestralHome":"山东省济南市","artName":null,"avatarImageId":null,"avatarUrl":null,"bio":"在读高中生。","birthDate":"2008-07-15","birthPlace":"山东省济南市高新区","burialPlace":null,"childrenIds":[],"courtesyName":null,"createdAt":"2025-11-23T04:58:33.079Z","deathDate":null,"email":null,"fatherId":"cmib8zhsx000xhhxlpbjrwykn","fullName":"王梓涵","gender":"FEMALE","generation":5,"generationName":"子","givenName":"梓涵","id":"cmib8zhtj001fhhxlq9zssb2u","isLunarDate":false,"motherId":"cmib8zhsy000zhhxlj2wvxjok","phone":null,"photoIds":[],"posthumousName":null,"rank":null,"spouseFatherName":null,"spouseIds":[],"spouseMotherName":null,"surname":"王","tags":["学生","在世"],"telephone":null,"treeId":"cmib8zhrq0003hhxlvnsi96nh","updatedAt":"2025-11-23T04:58:33.079Z"},"to":"山东省济南市高新区","year":2008}]} +[04:31:58.131] Browser LOG 迁徙数据: {"lines":[{"coords":[[117.12,36.65],[117.12,36.65]],"fromName":"济南","toName":"济南"},{"coords":[[117.12,36.65],[117.12,36.65]],"fromName":"济南","toName":"济南"},{"coords":[[117.12,36.65],[121.48,31.22]],"fromName":"济南","toName":"上海"},{"coords":[[117.12,36.65],[114.07,22.62]],"fromName":"济南","toName":"深圳"},{"coords":[[117.12,36.65],[120.19,30.26]],"fromName":"济南","toName":"杭州"},{"coords":[[117.12,36.65],[104.06,30.67]],"fromName":"济南","toName":"成都"},{"coords":[[117.12,36.65],[120.62,31.32]],"fromName":"济南","toName":"苏州"},{"coords":[[117.12,36.65],[108.95,34.27]],"fromName":"济南","toName":"西安"},{"coords":[[117.12,36.65],[117.12,36.65]],"fromName":"济南","toName":"济南"},{"coords":[[117.12,36.65],[117.12,36.65]],"fromName":"济南","toName":"济南"}],"migrations":[{"father":{"address":null,"ancestralHome":"山东省济南市","artName":null,"avatarImageId":null,"avatarUrl":null,"bio":"参加过抗日战争,新中国成立后在政府部门工作。","birthDate":"1910-01-20","birthPlace":"山东省济南市历城区","burialPlace":null,"childrenIds":["cmib8zhse000jhhxlt3ppgfn2","cmib8zhsj000nhhxlg7s8axjz"],"courtesyName":null,"createdAt":"2025-11-23T04:58:33.023Z","deathDate":"1985-06-15","email":null,"fatherId":"cmib8zhrs0005hhxlk83tffvl","fullName":"王建国","gender":"MALE","generation":2,"generationName":"建","givenName":"建国","id":"cmib8zhrz0009hhxlgs0r588g","isLunarDate":false,"motherId":"cmib8zhrv0007hhxl3q1knmo9","phone":null,"photoIds":[],"posthumousName":null,"rank":null,"spouseFatherName":null,"spouseIds":["cmib8zhs1000bhhxlovwol0op"],"spouseMotherName":null,"surname":"王","tags":["抗战老兵","公务员","退伍军人"],"telephone":null,"treeId":"cmib8zhrq0003hhxlvnsi96nh","updatedAt":"2025-11-23T05:04:04.978Z"},"from":"山东省济南市历城区","person":{"address":"山东省济南市历下区解放路123号","ancestralHome":"山东省济南市","artName":null,"avatarImageId":null,"avatarUrl":null,"bio":"工程师,从事机械制造行业。","birthDate":"1945-04-18","birthPlace":"山东省济南市历下区","burialPlace":null,"childrenIds":["cmib8zhsx000xhhxlpbjrwykn","cmib8zht10011hhxla6g9be98"],"courtesyName":null,"createdAt":"2025-11-23T04:58:33.039Z","deathDate":null,"email":"wangming@example.com","fatherId":"cmib8zhrz0009hhxlgs0r588g","fullName":"王明","gender":"MALE","generation":3,"generationName":"明","givenName":"明","id":"cmib8zhse000jhhxlt3ppgfn2","isLunarDate":false,"motherId":"cmib8zhs1000bhhxlovwol0op","phone":"13800138001","photoIds":[],"posthumousName":null,"rank":null,"spouseFatherName":null,"spouseIds":["cmib8zhsg000lhhxlqxteubiw"],"spouseMotherName":null,"surname":"王","tags":["工程师","在世"],"telephone":null,"treeId":"cmib8zhrq0003hhxlvnsi96nh","updatedAt":"2025-11-23T07:40:46.245Z"},"to":"山东省济南市历下区","year":1945},{"father":{"address":null,"ancestralHome":"山东省济南市","artName":null,"avatarImageId":null,"avatarUrl":null,"bio":"参加过抗日战争,新中国成立后在政府部门工作。","birthDate":"1910-01-20","birthPlace":"山东省济南市历城区","burialPlace":null,"childrenIds":["cmib8zhse000jhhxlt3ppgfn2","cmib8zhsj000nhhxlg7s8axjz"],"courtesyName":null,"createdAt":"2025-11-23T04:58:33.023Z","deathDate":"1985-06-15","email":null,"fatherId":"cmib8zhrs0005hhxlk83tffvl","fullName":"王建国","gender":"MALE","generation":2,"generationName":"建","givenName":"建国","id":"cmib8zhrz0009hhxlgs0r588g","isLunarDate":false,"motherId":"cmib8zhrv0007hhxl3q1knmo9","phone":null,"photoIds":[],"posthumousName":null,"rank":null,"spouseFatherName":null,"spouseIds":["cmib8zhs1000bhhxlovwol0op"],"spouseMotherName":null,"surname":"王","tags":["抗战老兵","公务员","退伍军人"],"telephone":null,"treeId":"cmib8zhrq0003hhxlvnsi96nh","updatedAt":"2025-11-23T05:04:04.978Z"},"from":"山东省济南市历城区","person":{"address":null,"ancestralHome":"山东省济南市","artName":null,"avatarImageId":null,"avatarUrl":null,"bio":"教师,在中学任教。","birthDate":"1950-09-12","birthPlace":"山东省济南市历下区","burialPlace":null,"childrenIds":["cmib8zht20013hhxl039l48mr"],"courtesyName":null,"createdAt":"2025-11-23T04:58:33.043Z","deathDate":null,"email":null,"fatherId":"cmib8zhrz0009hhxlgs0r588g","fullName":"王亮","gender":"MALE","generation":3,"generationName":"明","givenName":"亮","id":"cmib8zhsj000nhhxlg7s8axjz","isLunarDate":false,"motherId":"cmib8zhs1000bhhxlovwol0op","phone":"13800138003","photoIds":[],"posthumousName":null,"rank":null,"spouseFatherName":null,"spouseIds":[],"spouseMotherName":null,"surname":"王","tags":["教师","在世"],"telephone":null,"treeId":"cmib8zhrq0003hhxlvnsi96nh","updatedAt":"2025-11-23T04:58:33.072Z"},"to":"山东省济南市历下区","year":1950},{"father":{"address":"山东省济南市历下区解放路123号","ancestralHome":"山东省济南市","artName":null,"avatarImageId":null,"avatarUrl":null,"bio":"工程师,从事机械制造行业。","birthDate":"1945-04-18","birthPlace":"山东省济南市历下区","burialPlace":null,"childrenIds":["cmib8zhsx000xhhxlpbjrwykn","cmib8zht10011hhxla6g9be98"],"courtesyName":null,"createdAt":"2025-11-23T04:58:33.039Z","deathDate":null,"email":"wangming@example.com","fatherId":"cmib8zhrz0009hhxlgs0r588g","fullName":"王明","gender":"MALE","generation":3,"generationName":"明","givenName":"明","id":"cmib8zhse000jhhxlt3ppgfn2","isLunarDate":false,"motherId":"cmib8zhs1000bhhxlovwol0op","phone":"13800138001","photoIds":[],"posthumousName":null,"rank":null,"spouseFatherName":null,"spouseIds":["cmib8zhsg000lhhxlqxteubiw"],"spouseMotherName":null,"surname":"王","tags":["工程师","在世"],"telephone":null,"treeId":"cmib8zhrq0003hhxlvnsi96nh","updatedAt":"2025-11-23T07:40:46.245Z"},"from":"山东省济南市历下区","person":{"address":"上海市浦东新区陆家嘴环路1000号","ancestralHome":"山东省济南市","artName":null,"avatarImageId":null,"avatarUrl":null,"bio":"金融分析师,在投资银行工作。","birthDate":"1978-03-22","birthPlace":"上海市浦东新区","burialPlace":null,"childrenIds":["cmib8zhtl001hhhxl289f3j07"],"courtesyName":null,"createdAt":"2025-11-23T04:58:33.061Z","deathDate":null,"email":"wanglei@example.com","fatherId":"cmib8zhse000jhhxlt3ppgfn2","fullName":"王磊","gender":"MALE","generation":4,"generationName":"浩","givenName":"磊","id":"cmib8zht10011hhxla6g9be98","isLunarDate":false,"motherId":"cmib8zhsg000lhhxlqxteubiw","phone":"13900139003","photoIds":[],"posthumousName":null,"rank":null,"spouseFatherName":null,"spouseIds":[],"spouseMotherName":null,"surname":"王","tags":["金融","在世","上海"],"telephone":null,"treeId":"cmib8zhrq0003hhxlvnsi96nh","updatedAt":"2025-11-23T04:58:33.088Z"},"to":"上海市浦东新区","year":1978},{"father":{"address":null,"ancestralHome":"山东省济南市","artName":null,"avatarImageId":null,"avatarUrl":null,"bio":"教师,在中学任教。","birthDate":"1950-09-12","birthPlace":"山东省济南市历下区","burialPlace":null,"childrenIds":["cmib8zht20013hhxl039l48mr"],"courtesyName":null,"createdAt":"2025-11-23T04:58:33.043Z","deathDate":null,"email":null,"fatherId":"cmib8zhrz0009hhxlgs0r588g","fullName":"王亮","gender":"MALE","generation":3,"generationName":"明","givenName":"亮","id":"cmib8zhsj000nhhxlg7s8axjz","isLunarDate":false,"motherId":"cmib8zhs1000bhhxlovwol0op","phone":"13800138003","photoIds":[],"posthumousName":null,"rank":null,"spouseFatherName":null,"spouseIds":[],"spouseMotherName":null,"surname":"王","tags":["教师","在世"],"telephone":null,"treeId":"cmib8zhrq0003hhxlvnsi96nh","updatedAt":"2025-11-23T04:58:33.072Z"},"from":"山东省济南市历下区","person":{"address":"广东省深圳市南山区科技园","ancestralHome":"山东省济南市","artName":null,"avatarImageId":null,"avatarUrl":null,"bio":"创业者,经营科技公司。","birthDate":"1980-11-08","birthPlace":"广东省深圳市","burialPlace":null,"childrenIds":["cmib8zhtm001jhhxlxi4lvq62"],"courtesyName":null,"createdAt":"2025-11-23T04:58:33.063Z","deathDate":null,"email":"wangchao@example.com","fatherId":"cmib8zhsj000nhhxlg7s8axjz","fullName":"王超","gender":"MALE","generation":4,"generationName":"浩","givenName":"超","id":"cmib8zht20013hhxl039l48mr","isLunarDate":false,"motherId":null,"phone":"13900139004","photoIds":[],"posthumousName":null,"rank":null,"spouseFatherName":null,"spouseIds":[],"spouseMotherName":null,"surname":"王","tags":["创业者","在世","深圳"],"telephone":null,"treeId":"cmib8zhrq0003hhxlvnsi96nh","updatedAt":"2025-11-23T04:58:33.089Z"},"to":"广东省深圳市","year":1980},{"father":{"address":null,"ancestralHome":"山东省济南市","artName":null,"avatarImageId":null,"avatarUrl":null,"bio":"医生,继承父业。","birthDate":"1952-02-28","birthPlace":"山东省济南市历城区","burialPlace":null,"childrenIds":["cmib8zht40015hhxlblc0udh0","cmib8zht50017hhxldt6nnba6"],"courtesyName":null,"createdAt":"2025-11-23T04:58:33.044Z","deathDate":null,"email":null,"fatherId":"cmib8zhs5000dhhxlo39he5la","fullName":"王强","gender":"MALE","generation":3,"generationName":"明","givenName":"强","id":"cmib8zhsk000phhxl0b7ow8vz","isLunarDate":false,"motherId":"cmib8zhs6000fhhxl8h0rd5as","phone":"13800138004","photoIds":[],"posthumousName":null,"rank":null,"spouseFatherName":null,"spouseIds":["cmib8zhsm000rhhxlwm3mv5ci"],"spouseMotherName":null,"surname":"王","tags":["医生","在世"],"telephone":null,"treeId":"cmib8zhrq0003hhxlvnsi96nh","updatedAt":"2025-11-23T04:58:33.073Z"},"from":"山东省济南市历城区","person":{"address":"浙江省杭州市西湖区文三路","ancestralHome":"山东省济南市","artName":null,"avatarImageId":null,"avatarUrl":null,"bio":"医生,在浙江大学附属医院工作。","birthDate":"1982-05-15","birthPlace":"浙江省杭州市","burialPlace":null,"childrenIds":["cmib8zhto001lhhxlkizg2ig6"],"courtesyName":null,"createdAt":"2025-11-23T04:58:33.064Z","deathDate":null,"email":"wangpeng@example.com","fatherId":"cmib8zhsk000phhxl0b7ow8vz","fullName":"王鹏","gender":"MALE","generation":4,"generationName":"浩","givenName":"鹏","id":"cmib8zht40015hhxlblc0udh0","isLunarDate":false,"motherId":"cmib8zhsm000rhhxlwm3mv5ci","phone":"13900139005","photoIds":[],"posthumousName":null,"rank":null,"spouseFatherName":null,"spouseIds":[],"spouseMotherName":null,"surname":"王","tags":["医生","在世","杭州"],"telephone":null,"treeId":"cmib8zhrq0003hhxlvnsi96nh","updatedAt":"2025-11-23T04:58:33.091Z"},"to":"浙江省杭州市","year":1982},{"father":{"address":null,"ancestralHome":"山东省济南市","artName":null,"avatarImageId":null,"avatarUrl":null,"bio":"医生,继承父业。","birthDate":"1952-02-28","birthPlace":"山东省济南市历城区","burialPlace":null,"childrenIds":["cmib8zht40015hhxlblc0udh0","cmib8zht50017hhxldt6nnba6"],"courtesyName":null,"createdAt":"2025-11-23T04:58:33.044Z","deathDate":null,"email":null,"fatherId":"cmib8zhs5000dhhxlo39he5la","fullName":"王强","gender":"MALE","generation":3,"generationName":"明","givenName":"强","id":"cmib8zhsk000phhxl0b7ow8vz","isLunarDate":false,"motherId":"cmib8zhs6000fhhxl8h0rd5as","phone":"13800138004","photoIds":[],"posthumousName":null,"rank":null,"spouseFatherName":null,"spouseIds":["cmib8zhsm000rhhxlwm3mv5ci"],"spouseMotherName":null,"surname":"王","tags":["医生","在世"],"telephone":null,"treeId":"cmib8zhrq0003hhxlvnsi96nh","updatedAt":"2025-11-23T04:58:33.073Z"},"from":"山东省济南市历城区","person":{"address":"四川省成都市武侯区天府大道","ancestralHome":"山东省济南市","artName":null,"avatarImageId":null,"avatarUrl":null,"bio":"教师,在大学任教。","birthDate":"1984-08-20","birthPlace":"四川省成都市","burialPlace":null,"childrenIds":[],"courtesyName":null,"createdAt":"2025-11-23T04:58:33.066Z","deathDate":null,"email":"wangting@example.com","fatherId":"cmib8zhsk000phhxl0b7ow8vz","fullName":"王婷","gender":"FEMALE","generation":4,"generationName":"浩","givenName":"婷","id":"cmib8zht50017hhxldt6nnba6","isLunarDate":false,"motherId":"cmib8zhsm000rhhxlwm3mv5ci","phone":"13900139006","photoIds":[],"posthumousName":null,"rank":null,"spouseFatherName":null,"spouseIds":[],"spouseMotherName":null,"surname":"王","tags":["教师","在世","成都"],"telephone":null,"treeId":"cmib8zhrq0003hhxlvnsi96nh","updatedAt":"2025-11-23T04:58:33.066Z"},"to":"四川省成都市","year":1984},{"father":{"address":null,"ancestralHome":"山东省济南市","artName":null,"avatarImageId":null,"avatarUrl":null,"bio":"护士,在医院工作。","birthDate":"1954-07-20","birthPlace":"山东省济南市历城区","burialPlace":null,"childrenIds":["cmib8zht70019hhxlg7l25qh6"],"courtesyName":null,"createdAt":"2025-11-23T04:58:33.049Z","deathDate":null,"email":null,"fatherId":"cmib8zhs5000dhhxlo39he5la","fullName":"王丽","gender":"FEMALE","generation":3,"generationName":"明","givenName":"丽","id":"cmib8zhso000thhxl6jztirc0","isLunarDate":false,"motherId":"cmib8zhs6000fhhxl8h0rd5as","phone":"13800138006","photoIds":[],"posthumousName":null,"rank":null,"spouseFatherName":null,"spouseIds":["cmibe02rs000r13eiug7grp9w"],"spouseMotherName":null,"surname":"王","tags":["护士","在世"],"telephone":null,"treeId":"cmib8zhrq0003hhxlvnsi96nh","updatedAt":"2025-11-23T07:18:58.316Z"},"from":"山东省济南市历城区","person":{"address":"江苏省苏州市工业园区","ancestralHome":"山东省济南市","artName":null,"avatarImageId":null,"avatarUrl":null,"bio":"护士,在医院工作。","birthDate":"1986-02-14","birthPlace":"江苏省苏州市","burialPlace":null,"childrenIds":[],"courtesyName":null,"createdAt":"2025-11-23T04:58:33.067Z","deathDate":null,"email":"wangna@example.com","fatherId":"cmib8zhso000thhxl6jztirc0","fullName":"王娜","gender":"FEMALE","generation":4,"generationName":"浩","givenName":"娜","id":"cmib8zht70019hhxlg7l25qh6","isLunarDate":false,"motherId":"cmibe02rs000r13eiug7grp9w","phone":"13900139007","photoIds":[],"posthumousName":null,"rank":null,"spouseFatherName":null,"spouseIds":[],"spouseMotherName":null,"surname":"王","tags":["护士","在世","苏州"],"telephone":null,"treeId":"cmib8zhrq0003hhxlvnsi96nh","updatedAt":"2025-11-23T07:41:20.485Z"},"to":"江苏省苏州市","year":1986},{"father":{"address":null,"ancestralHome":"山东省济南市","artName":null,"avatarImageId":null,"avatarUrl":null,"bio":"军人,服役20年后转业。","birthDate":"1956-12-08","birthPlace":"山东省济南市历城区","burialPlace":null,"childrenIds":["cmib8zht8001bhhxlzoa6z9y2"],"courtesyName":null,"createdAt":"2025-11-23T04:58:33.050Z","deathDate":null,"email":null,"fatherId":"cmib8zhs5000dhhxlo39he5la","fullName":"王军","gender":"MALE","generation":3,"generationName":"明","givenName":"军","id":"cmib8zhsq000vhhxl2whod7u2","isLunarDate":false,"motherId":"cmib8zhs6000fhhxl8h0rd5as","phone":"13800138007","photoIds":[],"posthumousName":null,"rank":null,"spouseFatherName":null,"spouseIds":["cmibdvdad000n13ei0juo7xxm"],"spouseMotherName":null,"surname":"王","tags":["军人","在世"],"telephone":null,"treeId":"cmib8zhrq0003hhxlvnsi96nh","updatedAt":"2025-11-23T07:40:46.248Z"},"from":"山东省济南市历城区","person":{"address":"陕西省西安市雁塔区高新路","ancestralHome":"山东省济南市","artName":null,"avatarImageId":null,"avatarUrl":null,"bio":"工程师,在航天企业工作。","birthDate":"1988-07-30","birthPlace":"陕西省西安市","burialPlace":null,"childrenIds":[],"courtesyName":null,"createdAt":"2025-11-23T04:58:33.068Z","deathDate":null,"email":"wangtao@example.com","fatherId":"cmib8zhsq000vhhxl2whod7u2","fullName":"王涛","gender":"MALE","generation":4,"generationName":"浩","givenName":"涛","id":"cmib8zht8001bhhxlzoa6z9y2","isLunarDate":false,"motherId":"cmibdvdad000n13ei0juo7xxm","phone":"13900139008","photoIds":[],"posthumousName":null,"rank":null,"spouseFatherName":null,"spouseIds":[],"spouseMotherName":null,"surname":"王","tags":["工程师","在世","西安"],"telephone":null,"treeId":"cmib8zhrq0003hhxlvnsi96nh","updatedAt":"2025-11-23T07:40:46.240Z"},"to":"陕西省西安市","year":1988},{"father":{"address":"山东省济南市高新区科技路456号","ancestralHome":"山东省济南市","artName":null,"avatarImageId":null,"avatarUrl":null,"bio":"软件工程师,在互联网公司工作。","birthDate":"1975-06-10","birthPlace":"山东省济南市历下区","burialPlace":null,"childrenIds":["cmib8zhti001dhhxlzhzwnmmv","cmib8zhtj001fhhxlq9zssb2u"],"courtesyName":null,"createdAt":"2025-11-23T04:58:33.057Z","deathDate":null,"email":"wanghao@example.com","fatherId":"cmib8zhse000jhhxlt3ppgfn2","fullName":"王浩","gender":"MALE","generation":4,"generationName":"浩","givenName":"浩","id":"cmib8zhsx000xhhxlpbjrwykn","isLunarDate":false,"motherId":"cmib8zhsg000lhhxlqxteubiw","phone":"13900139001","photoIds":[],"posthumousName":null,"rank":null,"spouseFatherName":null,"spouseIds":["cmib8zhsy000zhhxlj2wvxjok"],"spouseMotherName":null,"surname":"王","tags":["程序员","在世"],"telephone":null,"treeId":"cmib8zhrq0003hhxlvnsi96nh","updatedAt":"2025-11-23T04:58:33.085Z"},"from":"山东省济南市历下区","person":{"address":null,"ancestralHome":"山东省济南市","artName":null,"avatarImageId":null,"avatarUrl":null,"bio":"在读大学生,就读于计算机科学专业。","birthDate":"2005-03-20","birthPlace":"山东省济南市高新区","burialPlace":null,"childrenIds":[],"courtesyName":null,"createdAt":"2025-11-23T04:58:33.078Z","deathDate":null,"email":null,"fatherId":"cmib8zhsx000xhhxlpbjrwykn","fullName":"王子轩","gender":"MALE","generation":5,"generationName":"子","givenName":"子轩","id":"cmib8zhti001dhhxlzhzwnmmv","isLunarDate":false,"motherId":"cmib8zhsy000zhhxlj2wvxjok","phone":null,"photoIds":[],"posthumousName":null,"rank":null,"spouseFatherName":null,"spouseIds":[],"spouseMotherName":null,"surname":"王","tags":["学生","在世"],"telephone":null,"treeId":"cmib8zhrq0003hhxlvnsi96nh","updatedAt":"2025-11-23T04:58:33.078Z"},"to":"山东省济南市高新区","year":2005},{"father":{"address":"山东省济南市高新区科技路456号","ancestralHome":"山东省济南市","artName":null,"avatarImageId":null,"avatarUrl":null,"bio":"软件工程师,在互联网公司工作。","birthDate":"1975-06-10","birthPlace":"山东省济南市历下区","burialPlace":null,"childrenIds":["cmib8zhti001dhhxlzhzwnmmv","cmib8zhtj001fhhxlq9zssb2u"],"courtesyName":null,"createdAt":"2025-11-23T04:58:33.057Z","deathDate":null,"email":"wanghao@example.com","fatherId":"cmib8zhse000jhhxlt3ppgfn2","fullName":"王浩","gender":"MALE","generation":4,"generationName":"浩","givenName":"浩","id":"cmib8zhsx000xhhxlpbjrwykn","isLunarDate":false,"motherId":"cmib8zhsg000lhhxlqxteubiw","phone":"13900139001","photoIds":[],"posthumousName":null,"rank":null,"spouseFatherName":null,"spouseIds":["cmib8zhsy000zhhxlj2wvxjok"],"spouseMotherName":null,"surname":"王","tags":["程序员","在世"],"telephone":null,"treeId":"cmib8zhrq0003hhxlvnsi96nh","updatedAt":"2025-11-23T04:58:33.085Z"},"from":"山东省济南市历下区","person":{"address":null,"ancestralHome":"山东省济南市","artName":null,"avatarImageId":null,"avatarUrl":null,"bio":"在读高中生。","birthDate":"2008-07-15","birthPlace":"山东省济南市高新区","burialPlace":null,"childrenIds":[],"courtesyName":null,"createdAt":"2025-11-23T04:58:33.079Z","deathDate":null,"email":null,"fatherId":"cmib8zhsx000xhhxlpbjrwykn","fullName":"王梓涵","gender":"FEMALE","generation":5,"generationName":"子","givenName":"梓涵","id":"cmib8zhtj001fhhxlq9zssb2u","isLunarDate":false,"motherId":"cmib8zhsy000zhhxlj2wvxjok","phone":null,"photoIds":[],"posthumousName":null,"rank":null,"spouseFatherName":null,"spouseIds":[],"spouseMotherName":null,"surname":"王","tags":["学生","在世"],"telephone":null,"treeId":"cmib8zhrq0003hhxlvnsi96nh","updatedAt":"2025-11-23T04:58:33.079Z"},"to":"山东省济南市高新区","year":2008}]} +[04:31:58.327] Server LOG 🌳 GET /api/trees 返回数据: {} +[04:31:58.344] Server LOG 🌳 GET /api/trees 返回数据: {} +[04:31:58.461] Browser LOG 迁徙数据: {"lines":[{"coords":[[117.12,36.65],[117.12,36.65]],"fromName":"济南","toName":"济南"},{"coords":[[117.12,36.65],[117.12,36.65]],"fromName":"济南","toName":"济南"},{"coords":[[117.12,36.65],[121.48,31.22]],"fromName":"济南","toName":"上海"},{"coords":[[117.12,36.65],[114.07,22.62]],"fromName":"济南","toName":"深圳"},{"coords":[[117.12,36.65],[120.19,30.26]],"fromName":"济南","toName":"杭州"},{"coords":[[117.12,36.65],[104.06,30.67]],"fromName":"济南","toName":"成都"},{"coords":[[117.12,36.65],[120.62,31.32]],"fromName":"济南","toName":"苏州"},{"coords":[[117.12,36.65],[108.95,34.27]],"fromName":"济南","toName":"西安"},{"coords":[[117.12,36.65],[117.12,36.65]],"fromName":"济南","toName":"济南"},{"coords":[[117.12,36.65],[117.12,36.65]],"fromName":"济南","toName":"济南"}],"migrations":[{"father":{"address":null,"ancestralHome":"山东省济南市","artName":null,"avatarImageId":null,"avatarUrl":null,"bio":"参加过抗日战争,新中国成立后在政府部门工作。","birthDate":"1910-01-20","birthPlace":"山东省济南市历城区","burialPlace":null,"childrenIds":["cmib8zhse000jhhxlt3ppgfn2","cmib8zhsj000nhhxlg7s8axjz"],"courtesyName":null,"createdAt":"2025-11-23T04:58:33.023Z","deathDate":"1985-06-15","email":null,"fatherId":"cmib8zhrs0005hhxlk83tffvl","fullName":"王建国","gender":"MALE","generation":2,"generationName":"建","givenName":"建国","id":"cmib8zhrz0009hhxlgs0r588g","isLunarDate":false,"motherId":"cmib8zhrv0007hhxl3q1knmo9","phone":null,"photoIds":[],"posthumousName":null,"rank":null,"spouseFatherName":null,"spouseIds":["cmib8zhs1000bhhxlovwol0op"],"spouseMotherName":null,"surname":"王","tags":["抗战老兵","公务员","退伍军人"],"telephone":null,"treeId":"cmib8zhrq0003hhxlvnsi96nh","updatedAt":"2025-11-23T05:04:04.978Z"},"from":"山东省济南市历城区","person":{"address":"山东省济南市历下区解放路123号","ancestralHome":"山东省济南市","artName":null,"avatarImageId":null,"avatarUrl":null,"bio":"工程师,从事机械制造行业。","birthDate":"1945-04-18","birthPlace":"山东省济南市历下区","burialPlace":null,"childrenIds":["cmib8zhsx000xhhxlpbjrwykn","cmib8zht10011hhxla6g9be98"],"courtesyName":null,"createdAt":"2025-11-23T04:58:33.039Z","deathDate":null,"email":"wangming@example.com","fatherId":"cmib8zhrz0009hhxlgs0r588g","fullName":"王明","gender":"MALE","generation":3,"generationName":"明","givenName":"明","id":"cmib8zhse000jhhxlt3ppgfn2","isLunarDate":false,"motherId":"cmib8zhs1000bhhxlovwol0op","phone":"13800138001","photoIds":[],"posthumousName":null,"rank":null,"spouseFatherName":null,"spouseIds":["cmib8zhsg000lhhxlqxteubiw"],"spouseMotherName":null,"surname":"王","tags":["工程师","在世"],"telephone":null,"treeId":"cmib8zhrq0003hhxlvnsi96nh","updatedAt":"2025-11-23T07:40:46.245Z"},"to":"山东省济南市历下区","year":1945},{"father":{"address":null,"ancestralHome":"山东省济南市","artName":null,"avatarImageId":null,"avatarUrl":null,"bio":"参加过抗日战争,新中国成立后在政府部门工作。","birthDate":"1910-01-20","birthPlace":"山东省济南市历城区","burialPlace":null,"childrenIds":["cmib8zhse000jhhxlt3ppgfn2","cmib8zhsj000nhhxlg7s8axjz"],"courtesyName":null,"createdAt":"2025-11-23T04:58:33.023Z","deathDate":"1985-06-15","email":null,"fatherId":"cmib8zhrs0005hhxlk83tffvl","fullName":"王建国","gender":"MALE","generation":2,"generationName":"建","givenName":"建国","id":"cmib8zhrz0009hhxlgs0r588g","isLunarDate":false,"motherId":"cmib8zhrv0007hhxl3q1knmo9","phone":null,"photoIds":[],"posthumousName":null,"rank":null,"spouseFatherName":null,"spouseIds":["cmib8zhs1000bhhxlovwol0op"],"spouseMotherName":null,"surname":"王","tags":["抗战老兵","公务员","退伍军人"],"telephone":null,"treeId":"cmib8zhrq0003hhxlvnsi96nh","updatedAt":"2025-11-23T05:04:04.978Z"},"from":"山东省济南市历城区","person":{"address":null,"ancestralHome":"山东省济南市","artName":null,"avatarImageId":null,"avatarUrl":null,"bio":"教师,在中学任教。","birthDate":"1950-09-12","birthPlace":"山东省济南市历下区","burialPlace":null,"childrenIds":["cmib8zht20013hhxl039l48mr"],"courtesyName":null,"createdAt":"2025-11-23T04:58:33.043Z","deathDate":null,"email":null,"fatherId":"cmib8zhrz0009hhxlgs0r588g","fullName":"王亮","gender":"MALE","generation":3,"generationName":"明","givenName":"亮","id":"cmib8zhsj000nhhxlg7s8axjz","isLunarDate":false,"motherId":"cmib8zhs1000bhhxlovwol0op","phone":"13800138003","photoIds":[],"posthumousName":null,"rank":null,"spouseFatherName":null,"spouseIds":[],"spouseMotherName":null,"surname":"王","tags":["教师","在世"],"telephone":null,"treeId":"cmib8zhrq0003hhxlvnsi96nh","updatedAt":"2025-11-23T04:58:33.072Z"},"to":"山东省济南市历下区","year":1950},{"father":{"address":"山东省济南市历下区解放路123号","ancestralHome":"山东省济南市","artName":null,"avatarImageId":null,"avatarUrl":null,"bio":"工程师,从事机械制造行业。","birthDate":"1945-04-18","birthPlace":"山东省济南市历下区","burialPlace":null,"childrenIds":["cmib8zhsx000xhhxlpbjrwykn","cmib8zht10011hhxla6g9be98"],"courtesyName":null,"createdAt":"2025-11-23T04:58:33.039Z","deathDate":null,"email":"wangming@example.com","fatherId":"cmib8zhrz0009hhxlgs0r588g","fullName":"王明","gender":"MALE","generation":3,"generationName":"明","givenName":"明","id":"cmib8zhse000jhhxlt3ppgfn2","isLunarDate":false,"motherId":"cmib8zhs1000bhhxlovwol0op","phone":"13800138001","photoIds":[],"posthumousName":null,"rank":null,"spouseFatherName":null,"spouseIds":["cmib8zhsg000lhhxlqxteubiw"],"spouseMotherName":null,"surname":"王","tags":["工程师","在世"],"telephone":null,"treeId":"cmib8zhrq0003hhxlvnsi96nh","updatedAt":"2025-11-23T07:40:46.245Z"},"from":"山东省济南市历下区","person":{"address":"上海市浦东新区陆家嘴环路1000号","ancestralHome":"山东省济南市","artName":null,"avatarImageId":null,"avatarUrl":null,"bio":"金融分析师,在投资银行工作。","birthDate":"1978-03-22","birthPlace":"上海市浦东新区","burialPlace":null,"childrenIds":["cmib8zhtl001hhhxl289f3j07"],"courtesyName":null,"createdAt":"2025-11-23T04:58:33.061Z","deathDate":null,"email":"wanglei@example.com","fatherId":"cmib8zhse000jhhxlt3ppgfn2","fullName":"王磊","gender":"MALE","generation":4,"generationName":"浩","givenName":"磊","id":"cmib8zht10011hhxla6g9be98","isLunarDate":false,"motherId":"cmib8zhsg000lhhxlqxteubiw","phone":"13900139003","photoIds":[],"posthumousName":null,"rank":null,"spouseFatherName":null,"spouseIds":[],"spouseMotherName":null,"surname":"王","tags":["金融","在世","上海"],"telephone":null,"treeId":"cmib8zhrq0003hhxlvnsi96nh","updatedAt":"2025-11-23T04:58:33.088Z"},"to":"上海市浦东新区","year":1978},{"father":{"address":null,"ancestralHome":"山东省济南市","artName":null,"avatarImageId":null,"avatarUrl":null,"bio":"教师,在中学任教。","birthDate":"1950-09-12","birthPlace":"山东省济南市历下区","burialPlace":null,"childrenIds":["cmib8zht20013hhxl039l48mr"],"courtesyName":null,"createdAt":"2025-11-23T04:58:33.043Z","deathDate":null,"email":null,"fatherId":"cmib8zhrz0009hhxlgs0r588g","fullName":"王亮","gender":"MALE","generation":3,"generationName":"明","givenName":"亮","id":"cmib8zhsj000nhhxlg7s8axjz","isLunarDate":false,"motherId":"cmib8zhs1000bhhxlovwol0op","phone":"13800138003","photoIds":[],"posthumousName":null,"rank":null,"spouseFatherName":null,"spouseIds":[],"spouseMotherName":null,"surname":"王","tags":["教师","在世"],"telephone":null,"treeId":"cmib8zhrq0003hhxlvnsi96nh","updatedAt":"2025-11-23T04:58:33.072Z"},"from":"山东省济南市历下区","person":{"address":"广东省深圳市南山区科技园","ancestralHome":"山东省济南市","artName":null,"avatarImageId":null,"avatarUrl":null,"bio":"创业者,经营科技公司。","birthDate":"1980-11-08","birthPlace":"广东省深圳市","burialPlace":null,"childrenIds":["cmib8zhtm001jhhxlxi4lvq62"],"courtesyName":null,"createdAt":"2025-11-23T04:58:33.063Z","deathDate":null,"email":"wangchao@example.com","fatherId":"cmib8zhsj000nhhxlg7s8axjz","fullName":"王超","gender":"MALE","generation":4,"generationName":"浩","givenName":"超","id":"cmib8zht20013hhxl039l48mr","isLunarDate":false,"motherId":null,"phone":"13900139004","photoIds":[],"posthumousName":null,"rank":null,"spouseFatherName":null,"spouseIds":[],"spouseMotherName":null,"surname":"王","tags":["创业者","在世","深圳"],"telephone":null,"treeId":"cmib8zhrq0003hhxlvnsi96nh","updatedAt":"2025-11-23T04:58:33.089Z"},"to":"广东省深圳市","year":1980},{"father":{"address":null,"ancestralHome":"山东省济南市","artName":null,"avatarImageId":null,"avatarUrl":null,"bio":"医生,继承父业。","birthDate":"1952-02-28","birthPlace":"山东省济南市历城区","burialPlace":null,"childrenIds":["cmib8zht40015hhxlblc0udh0","cmib8zht50017hhxldt6nnba6"],"courtesyName":null,"createdAt":"2025-11-23T04:58:33.044Z","deathDate":null,"email":null,"fatherId":"cmib8zhs5000dhhxlo39he5la","fullName":"王强","gender":"MALE","generation":3,"generationName":"明","givenName":"强","id":"cmib8zhsk000phhxl0b7ow8vz","isLunarDate":false,"motherId":"cmib8zhs6000fhhxl8h0rd5as","phone":"13800138004","photoIds":[],"posthumousName":null,"rank":null,"spouseFatherName":null,"spouseIds":["cmib8zhsm000rhhxlwm3mv5ci"],"spouseMotherName":null,"surname":"王","tags":["医生","在世"],"telephone":null,"treeId":"cmib8zhrq0003hhxlvnsi96nh","updatedAt":"2025-11-23T04:58:33.073Z"},"from":"山东省济南市历城区","person":{"address":"浙江省杭州市西湖区文三路","ancestralHome":"山东省济南市","artName":null,"avatarImageId":null,"avatarUrl":null,"bio":"医生,在浙江大学附属医院工作。","birthDate":"1982-05-15","birthPlace":"浙江省杭州市","burialPlace":null,"childrenIds":["cmib8zhto001lhhxlkizg2ig6"],"courtesyName":null,"createdAt":"2025-11-23T04:58:33.064Z","deathDate":null,"email":"wangpeng@example.com","fatherId":"cmib8zhsk000phhxl0b7ow8vz","fullName":"王鹏","gender":"MALE","generation":4,"generationName":"浩","givenName":"鹏","id":"cmib8zht40015hhxlblc0udh0","isLunarDate":false,"motherId":"cmib8zhsm000rhhxlwm3mv5ci","phone":"13900139005","photoIds":[],"posthumousName":null,"rank":null,"spouseFatherName":null,"spouseIds":[],"spouseMotherName":null,"surname":"王","tags":["医生","在世","杭州"],"telephone":null,"treeId":"cmib8zhrq0003hhxlvnsi96nh","updatedAt":"2025-11-23T04:58:33.091Z"},"to":"浙江省杭州市","year":1982},{"father":{"address":null,"ancestralHome":"山东省济南市","artName":null,"avatarImageId":null,"avatarUrl":null,"bio":"医生,继承父业。","birthDate":"1952-02-28","birthPlace":"山东省济南市历城区","burialPlace":null,"childrenIds":["cmib8zht40015hhxlblc0udh0","cmib8zht50017hhxldt6nnba6"],"courtesyName":null,"createdAt":"2025-11-23T04:58:33.044Z","deathDate":null,"email":null,"fatherId":"cmib8zhs5000dhhxlo39he5la","fullName":"王强","gender":"MALE","generation":3,"generationName":"明","givenName":"强","id":"cmib8zhsk000phhxl0b7ow8vz","isLunarDate":false,"motherId":"cmib8zhs6000fhhxl8h0rd5as","phone":"13800138004","photoIds":[],"posthumousName":null,"rank":null,"spouseFatherName":null,"spouseIds":["cmib8zhsm000rhhxlwm3mv5ci"],"spouseMotherName":null,"surname":"王","tags":["医生","在世"],"telephone":null,"treeId":"cmib8zhrq0003hhxlvnsi96nh","updatedAt":"2025-11-23T04:58:33.073Z"},"from":"山东省济南市历城区","person":{"address":"四川省成都市武侯区天府大道","ancestralHome":"山东省济南市","artName":null,"avatarImageId":null,"avatarUrl":null,"bio":"教师,在大学任教。","birthDate":"1984-08-20","birthPlace":"四川省成都市","burialPlace":null,"childrenIds":[],"courtesyName":null,"createdAt":"2025-11-23T04:58:33.066Z","deathDate":null,"email":"wangting@example.com","fatherId":"cmib8zhsk000phhxl0b7ow8vz","fullName":"王婷","gender":"FEMALE","generation":4,"generationName":"浩","givenName":"婷","id":"cmib8zht50017hhxldt6nnba6","isLunarDate":false,"motherId":"cmib8zhsm000rhhxlwm3mv5ci","phone":"13900139006","photoIds":[],"posthumousName":null,"rank":null,"spouseFatherName":null,"spouseIds":[],"spouseMotherName":null,"surname":"王","tags":["教师","在世","成都"],"telephone":null,"treeId":"cmib8zhrq0003hhxlvnsi96nh","updatedAt":"2025-11-23T04:58:33.066Z"},"to":"四川省成都市","year":1984},{"father":{"address":null,"ancestralHome":"山东省济南市","artName":null,"avatarImageId":null,"avatarUrl":null,"bio":"护士,在医院工作。","birthDate":"1954-07-20","birthPlace":"山东省济南市历城区","burialPlace":null,"childrenIds":["cmib8zht70019hhxlg7l25qh6"],"courtesyName":null,"createdAt":"2025-11-23T04:58:33.049Z","deathDate":null,"email":null,"fatherId":"cmib8zhs5000dhhxlo39he5la","fullName":"王丽","gender":"FEMALE","generation":3,"generationName":"明","givenName":"丽","id":"cmib8zhso000thhxl6jztirc0","isLunarDate":false,"motherId":"cmib8zhs6000fhhxl8h0rd5as","phone":"13800138006","photoIds":[],"posthumousName":null,"rank":null,"spouseFatherName":null,"spouseIds":["cmibe02rs000r13eiug7grp9w"],"spouseMotherName":null,"surname":"王","tags":["护士","在世"],"telephone":null,"treeId":"cmib8zhrq0003hhxlvnsi96nh","updatedAt":"2025-11-23T07:18:58.316Z"},"from":"山东省济南市历城区","person":{"address":"江苏省苏州市工业园区","ancestralHome":"山东省济南市","artName":null,"avatarImageId":null,"avatarUrl":null,"bio":"护士,在医院工作。","birthDate":"1986-02-14","birthPlace":"江苏省苏州市","burialPlace":null,"childrenIds":[],"courtesyName":null,"createdAt":"2025-11-23T04:58:33.067Z","deathDate":null,"email":"wangna@example.com","fatherId":"cmib8zhso000thhxl6jztirc0","fullName":"王娜","gender":"FEMALE","generation":4,"generationName":"浩","givenName":"娜","id":"cmib8zht70019hhxlg7l25qh6","isLunarDate":false,"motherId":"cmibe02rs000r13eiug7grp9w","phone":"13900139007","photoIds":[],"posthumousName":null,"rank":null,"spouseFatherName":null,"spouseIds":[],"spouseMotherName":null,"surname":"王","tags":["护士","在世","苏州"],"telephone":null,"treeId":"cmib8zhrq0003hhxlvnsi96nh","updatedAt":"2025-11-23T07:41:20.485Z"},"to":"江苏省苏州市","year":1986},{"father":{"address":null,"ancestralHome":"山东省济南市","artName":null,"avatarImageId":null,"avatarUrl":null,"bio":"军人,服役20年后转业。","birthDate":"1956-12-08","birthPlace":"山东省济南市历城区","burialPlace":null,"childrenIds":["cmib8zht8001bhhxlzoa6z9y2"],"courtesyName":null,"createdAt":"2025-11-23T04:58:33.050Z","deathDate":null,"email":null,"fatherId":"cmib8zhs5000dhhxlo39he5la","fullName":"王军","gender":"MALE","generation":3,"generationName":"明","givenName":"军","id":"cmib8zhsq000vhhxl2whod7u2","isLunarDate":false,"motherId":"cmib8zhs6000fhhxl8h0rd5as","phone":"13800138007","photoIds":[],"posthumousName":null,"rank":null,"spouseFatherName":null,"spouseIds":["cmibdvdad000n13ei0juo7xxm"],"spouseMotherName":null,"surname":"王","tags":["军人","在世"],"telephone":null,"treeId":"cmib8zhrq0003hhxlvnsi96nh","updatedAt":"2025-11-23T07:40:46.248Z"},"from":"山东省济南市历城区","person":{"address":"陕西省西安市雁塔区高新路","ancestralHome":"山东省济南市","artName":null,"avatarImageId":null,"avatarUrl":null,"bio":"工程师,在航天企业工作。","birthDate":"1988-07-30","birthPlace":"陕西省西安市","burialPlace":null,"childrenIds":[],"courtesyName":null,"createdAt":"2025-11-23T04:58:33.068Z","deathDate":null,"email":"wangtao@example.com","fatherId":"cmib8zhsq000vhhxl2whod7u2","fullName":"王涛","gender":"MALE","generation":4,"generationName":"浩","givenName":"涛","id":"cmib8zht8001bhhxlzoa6z9y2","isLunarDate":false,"motherId":"cmibdvdad000n13ei0juo7xxm","phone":"13900139008","photoIds":[],"posthumousName":null,"rank":null,"spouseFatherName":null,"spouseIds":[],"spouseMotherName":null,"surname":"王","tags":["工程师","在世","西安"],"telephone":null,"treeId":"cmib8zhrq0003hhxlvnsi96nh","updatedAt":"2025-11-23T07:40:46.240Z"},"to":"陕西省西安市","year":1988},{"father":{"address":"山东省济南市高新区科技路456号","ancestralHome":"山东省济南市","artName":null,"avatarImageId":null,"avatarUrl":null,"bio":"软件工程师,在互联网公司工作。","birthDate":"1975-06-10","birthPlace":"山东省济南市历下区","burialPlace":null,"childrenIds":["cmib8zhti001dhhxlzhzwnmmv","cmib8zhtj001fhhxlq9zssb2u"],"courtesyName":null,"createdAt":"2025-11-23T04:58:33.057Z","deathDate":null,"email":"wanghao@example.com","fatherId":"cmib8zhse000jhhxlt3ppgfn2","fullName":"王浩","gender":"MALE","generation":4,"generationName":"浩","givenName":"浩","id":"cmib8zhsx000xhhxlpbjrwykn","isLunarDate":false,"motherId":"cmib8zhsg000lhhxlqxteubiw","phone":"13900139001","photoIds":[],"posthumousName":null,"rank":null,"spouseFatherName":null,"spouseIds":["cmib8zhsy000zhhxlj2wvxjok"],"spouseMotherName":null,"surname":"王","tags":["程序员","在世"],"telephone":null,"treeId":"cmib8zhrq0003hhxlvnsi96nh","updatedAt":"2025-11-23T04:58:33.085Z"},"from":"山东省济南市历下区","person":{"address":null,"ancestralHome":"山东省济南市","artName":null,"avatarImageId":null,"avatarUrl":null,"bio":"在读大学生,就读于计算机科学专业。","birthDate":"2005-03-20","birthPlace":"山东省济南市高新区","burialPlace":null,"childrenIds":[],"courtesyName":null,"createdAt":"2025-11-23T04:58:33.078Z","deathDate":null,"email":null,"fatherId":"cmib8zhsx000xhhxlpbjrwykn","fullName":"王子轩","gender":"MALE","generation":5,"generationName":"子","givenName":"子轩","id":"cmib8zhti001dhhxlzhzwnmmv","isLunarDate":false,"motherId":"cmib8zhsy000zhhxlj2wvxjok","phone":null,"photoIds":[],"posthumousName":null,"rank":null,"spouseFatherName":null,"spouseIds":[],"spouseMotherName":null,"surname":"王","tags":["学生","在世"],"telephone":null,"treeId":"cmib8zhrq0003hhxlvnsi96nh","updatedAt":"2025-11-23T04:58:33.078Z"},"to":"山东省济南市高新区","year":2005},{"father":{"address":"山东省济南市高新区科技路456号","ancestralHome":"山东省济南市","artName":null,"avatarImageId":null,"avatarUrl":null,"bio":"软件工程师,在互联网公司工作。","birthDate":"1975-06-10","birthPlace":"山东省济南市历下区","burialPlace":null,"childrenIds":["cmib8zhti001dhhxlzhzwnmmv","cmib8zhtj001fhhxlq9zssb2u"],"courtesyName":null,"createdAt":"2025-11-23T04:58:33.057Z","deathDate":null,"email":"wanghao@example.com","fatherId":"cmib8zhse000jhhxlt3ppgfn2","fullName":"王浩","gender":"MALE","generation":4,"generationName":"浩","givenName":"浩","id":"cmib8zhsx000xhhxlpbjrwykn","isLunarDate":false,"motherId":"cmib8zhsg000lhhxlqxteubiw","phone":"13900139001","photoIds":[],"posthumousName":null,"rank":null,"spouseFatherName":null,"spouseIds":["cmib8zhsy000zhhxlj2wvxjok"],"spouseMotherName":null,"surname":"王","tags":["程序员","在世"],"telephone":null,"treeId":"cmib8zhrq0003hhxlvnsi96nh","updatedAt":"2025-11-23T04:58:33.085Z"},"from":"山东省济南市历下区","person":{"address":null,"ancestralHome":"山东省济南市","artName":null,"avatarImageId":null,"avatarUrl":null,"bio":"在读高中生。","birthDate":"2008-07-15","birthPlace":"山东省济南市高新区","burialPlace":null,"childrenIds":[],"courtesyName":null,"createdAt":"2025-11-23T04:58:33.079Z","deathDate":null,"email":null,"fatherId":"cmib8zhsx000xhhxlpbjrwykn","fullName":"王梓涵","gender":"FEMALE","generation":5,"generationName":"子","givenName":"梓涵","id":"cmib8zhtj001fhhxlq9zssb2u","isLunarDate":false,"motherId":"cmib8zhsy000zhhxlj2wvxjok","phone":null,"photoIds":[],"posthumousName":null,"rank":null,"spouseFatherName":null,"spouseIds":[],"spouseMotherName":null,"surname":"王","tags":["学生","在世"],"telephone":null,"treeId":"cmib8zhrq0003hhxlvnsi96nh","updatedAt":"2025-11-23T04:58:33.079Z"},"to":"山东省济南市高新区","year":2008}]} +[04:31:58.461] Browser LOG 迁徙数据: {"lines":[{"coords":[[117.12,36.65],[117.12,36.65]],"fromName":"济南","toName":"济南"},{"coords":[[117.12,36.65],[117.12,36.65]],"fromName":"济南","toName":"济南"},{"coords":[[117.12,36.65],[121.48,31.22]],"fromName":"济南","toName":"上海"},{"coords":[[117.12,36.65],[114.07,22.62]],"fromName":"济南","toName":"深圳"},{"coords":[[117.12,36.65],[120.19,30.26]],"fromName":"济南","toName":"杭州"},{"coords":[[117.12,36.65],[104.06,30.67]],"fromName":"济南","toName":"成都"},{"coords":[[117.12,36.65],[120.62,31.32]],"fromName":"济南","toName":"苏州"},{"coords":[[117.12,36.65],[108.95,34.27]],"fromName":"济南","toName":"西安"},{"coords":[[117.12,36.65],[117.12,36.65]],"fromName":"济南","toName":"济南"},{"coords":[[117.12,36.65],[117.12,36.65]],"fromName":"济南","toName":"济南"}],"migrations":[{"father":{"address":null,"ancestralHome":"山东省济南市","artName":null,"avatarImageId":null,"avatarUrl":null,"bio":"参加过抗日战争,新中国成立后在政府部门工作。","birthDate":"1910-01-20","birthPlace":"山东省济南市历城区","burialPlace":null,"childrenIds":["cmib8zhse000jhhxlt3ppgfn2","cmib8zhsj000nhhxlg7s8axjz"],"courtesyName":null,"createdAt":"2025-11-23T04:58:33.023Z","deathDate":"1985-06-15","email":null,"fatherId":"cmib8zhrs0005hhxlk83tffvl","fullName":"王建国","gender":"MALE","generation":2,"generationName":"建","givenName":"建国","id":"cmib8zhrz0009hhxlgs0r588g","isLunarDate":false,"motherId":"cmib8zhrv0007hhxl3q1knmo9","phone":null,"photoIds":[],"posthumousName":null,"rank":null,"spouseFatherName":null,"spouseIds":["cmib8zhs1000bhhxlovwol0op"],"spouseMotherName":null,"surname":"王","tags":["抗战老兵","公务员","退伍军人"],"telephone":null,"treeId":"cmib8zhrq0003hhxlvnsi96nh","updatedAt":"2025-11-23T05:04:04.978Z"},"from":"山东省济南市历城区","person":{"address":"山东省济南市历下区解放路123号","ancestralHome":"山东省济南市","artName":null,"avatarImageId":null,"avatarUrl":null,"bio":"工程师,从事机械制造行业。","birthDate":"1945-04-18","birthPlace":"山东省济南市历下区","burialPlace":null,"childrenIds":["cmib8zhsx000xhhxlpbjrwykn","cmib8zht10011hhxla6g9be98"],"courtesyName":null,"createdAt":"2025-11-23T04:58:33.039Z","deathDate":null,"email":"wangming@example.com","fatherId":"cmib8zhrz0009hhxlgs0r588g","fullName":"王明","gender":"MALE","generation":3,"generationName":"明","givenName":"明","id":"cmib8zhse000jhhxlt3ppgfn2","isLunarDate":false,"motherId":"cmib8zhs1000bhhxlovwol0op","phone":"13800138001","photoIds":[],"posthumousName":null,"rank":null,"spouseFatherName":null,"spouseIds":["cmib8zhsg000lhhxlqxteubiw"],"spouseMotherName":null,"surname":"王","tags":["工程师","在世"],"telephone":null,"treeId":"cmib8zhrq0003hhxlvnsi96nh","updatedAt":"2025-11-23T07:40:46.245Z"},"to":"山东省济南市历下区","year":1945},{"father":{"address":null,"ancestralHome":"山东省济南市","artName":null,"avatarImageId":null,"avatarUrl":null,"bio":"参加过抗日战争,新中国成立后在政府部门工作。","birthDate":"1910-01-20","birthPlace":"山东省济南市历城区","burialPlace":null,"childrenIds":["cmib8zhse000jhhxlt3ppgfn2","cmib8zhsj000nhhxlg7s8axjz"],"courtesyName":null,"createdAt":"2025-11-23T04:58:33.023Z","deathDate":"1985-06-15","email":null,"fatherId":"cmib8zhrs0005hhxlk83tffvl","fullName":"王建国","gender":"MALE","generation":2,"generationName":"建","givenName":"建国","id":"cmib8zhrz0009hhxlgs0r588g","isLunarDate":false,"motherId":"cmib8zhrv0007hhxl3q1knmo9","phone":null,"photoIds":[],"posthumousName":null,"rank":null,"spouseFatherName":null,"spouseIds":["cmib8zhs1000bhhxlovwol0op"],"spouseMotherName":null,"surname":"王","tags":["抗战老兵","公务员","退伍军人"],"telephone":null,"treeId":"cmib8zhrq0003hhxlvnsi96nh","updatedAt":"2025-11-23T05:04:04.978Z"},"from":"山东省济南市历城区","person":{"address":null,"ancestralHome":"山东省济南市","artName":null,"avatarImageId":null,"avatarUrl":null,"bio":"教师,在中学任教。","birthDate":"1950-09-12","birthPlace":"山东省济南市历下区","burialPlace":null,"childrenIds":["cmib8zht20013hhxl039l48mr"],"courtesyName":null,"createdAt":"2025-11-23T04:58:33.043Z","deathDate":null,"email":null,"fatherId":"cmib8zhrz0009hhxlgs0r588g","fullName":"王亮","gender":"MALE","generation":3,"generationName":"明","givenName":"亮","id":"cmib8zhsj000nhhxlg7s8axjz","isLunarDate":false,"motherId":"cmib8zhs1000bhhxlovwol0op","phone":"13800138003","photoIds":[],"posthumousName":null,"rank":null,"spouseFatherName":null,"spouseIds":[],"spouseMotherName":null,"surname":"王","tags":["教师","在世"],"telephone":null,"treeId":"cmib8zhrq0003hhxlvnsi96nh","updatedAt":"2025-11-23T04:58:33.072Z"},"to":"山东省济南市历下区","year":1950},{"father":{"address":"山东省济南市历下区解放路123号","ancestralHome":"山东省济南市","artName":null,"avatarImageId":null,"avatarUrl":null,"bio":"工程师,从事机械制造行业。","birthDate":"1945-04-18","birthPlace":"山东省济南市历下区","burialPlace":null,"childrenIds":["cmib8zhsx000xhhxlpbjrwykn","cmib8zht10011hhxla6g9be98"],"courtesyName":null,"createdAt":"2025-11-23T04:58:33.039Z","deathDate":null,"email":"wangming@example.com","fatherId":"cmib8zhrz0009hhxlgs0r588g","fullName":"王明","gender":"MALE","generation":3,"generationName":"明","givenName":"明","id":"cmib8zhse000jhhxlt3ppgfn2","isLunarDate":false,"motherId":"cmib8zhs1000bhhxlovwol0op","phone":"13800138001","photoIds":[],"posthumousName":null,"rank":null,"spouseFatherName":null,"spouseIds":["cmib8zhsg000lhhxlqxteubiw"],"spouseMotherName":null,"surname":"王","tags":["工程师","在世"],"telephone":null,"treeId":"cmib8zhrq0003hhxlvnsi96nh","updatedAt":"2025-11-23T07:40:46.245Z"},"from":"山东省济南市历下区","person":{"address":"上海市浦东新区陆家嘴环路1000号","ancestralHome":"山东省济南市","artName":null,"avatarImageId":null,"avatarUrl":null,"bio":"金融分析师,在投资银行工作。","birthDate":"1978-03-22","birthPlace":"上海市浦东新区","burialPlace":null,"childrenIds":["cmib8zhtl001hhhxl289f3j07"],"courtesyName":null,"createdAt":"2025-11-23T04:58:33.061Z","deathDate":null,"email":"wanglei@example.com","fatherId":"cmib8zhse000jhhxlt3ppgfn2","fullName":"王磊","gender":"MALE","generation":4,"generationName":"浩","givenName":"磊","id":"cmib8zht10011hhxla6g9be98","isLunarDate":false,"motherId":"cmib8zhsg000lhhxlqxteubiw","phone":"13900139003","photoIds":[],"posthumousName":null,"rank":null,"spouseFatherName":null,"spouseIds":[],"spouseMotherName":null,"surname":"王","tags":["金融","在世","上海"],"telephone":null,"treeId":"cmib8zhrq0003hhxlvnsi96nh","updatedAt":"2025-11-23T04:58:33.088Z"},"to":"上海市浦东新区","year":1978},{"father":{"address":null,"ancestralHome":"山东省济南市","artName":null,"avatarImageId":null,"avatarUrl":null,"bio":"教师,在中学任教。","birthDate":"1950-09-12","birthPlace":"山东省济南市历下区","burialPlace":null,"childrenIds":["cmib8zht20013hhxl039l48mr"],"courtesyName":null,"createdAt":"2025-11-23T04:58:33.043Z","deathDate":null,"email":null,"fatherId":"cmib8zhrz0009hhxlgs0r588g","fullName":"王亮","gender":"MALE","generation":3,"generationName":"明","givenName":"亮","id":"cmib8zhsj000nhhxlg7s8axjz","isLunarDate":false,"motherId":"cmib8zhs1000bhhxlovwol0op","phone":"13800138003","photoIds":[],"posthumousName":null,"rank":null,"spouseFatherName":null,"spouseIds":[],"spouseMotherName":null,"surname":"王","tags":["教师","在世"],"telephone":null,"treeId":"cmib8zhrq0003hhxlvnsi96nh","updatedAt":"2025-11-23T04:58:33.072Z"},"from":"山东省济南市历下区","person":{"address":"广东省深圳市南山区科技园","ancestralHome":"山东省济南市","artName":null,"avatarImageId":null,"avatarUrl":null,"bio":"创业者,经营科技公司。","birthDate":"1980-11-08","birthPlace":"广东省深圳市","burialPlace":null,"childrenIds":["cmib8zhtm001jhhxlxi4lvq62"],"courtesyName":null,"createdAt":"2025-11-23T04:58:33.063Z","deathDate":null,"email":"wangchao@example.com","fatherId":"cmib8zhsj000nhhxlg7s8axjz","fullName":"王超","gender":"MALE","generation":4,"generationName":"浩","givenName":"超","id":"cmib8zht20013hhxl039l48mr","isLunarDate":false,"motherId":null,"phone":"13900139004","photoIds":[],"posthumousName":null,"rank":null,"spouseFatherName":null,"spouseIds":[],"spouseMotherName":null,"surname":"王","tags":["创业者","在世","深圳"],"telephone":null,"treeId":"cmib8zhrq0003hhxlvnsi96nh","updatedAt":"2025-11-23T04:58:33.089Z"},"to":"广东省深圳市","year":1980},{"father":{"address":null,"ancestralHome":"山东省济南市","artName":null,"avatarImageId":null,"avatarUrl":null,"bio":"医生,继承父业。","birthDate":"1952-02-28","birthPlace":"山东省济南市历城区","burialPlace":null,"childrenIds":["cmib8zht40015hhxlblc0udh0","cmib8zht50017hhxldt6nnba6"],"courtesyName":null,"createdAt":"2025-11-23T04:58:33.044Z","deathDate":null,"email":null,"fatherId":"cmib8zhs5000dhhxlo39he5la","fullName":"王强","gender":"MALE","generation":3,"generationName":"明","givenName":"强","id":"cmib8zhsk000phhxl0b7ow8vz","isLunarDate":false,"motherId":"cmib8zhs6000fhhxl8h0rd5as","phone":"13800138004","photoIds":[],"posthumousName":null,"rank":null,"spouseFatherName":null,"spouseIds":["cmib8zhsm000rhhxlwm3mv5ci"],"spouseMotherName":null,"surname":"王","tags":["医生","在世"],"telephone":null,"treeId":"cmib8zhrq0003hhxlvnsi96nh","updatedAt":"2025-11-23T04:58:33.073Z"},"from":"山东省济南市历城区","person":{"address":"浙江省杭州市西湖区文三路","ancestralHome":"山东省济南市","artName":null,"avatarImageId":null,"avatarUrl":null,"bio":"医生,在浙江大学附属医院工作。","birthDate":"1982-05-15","birthPlace":"浙江省杭州市","burialPlace":null,"childrenIds":["cmib8zhto001lhhxlkizg2ig6"],"courtesyName":null,"createdAt":"2025-11-23T04:58:33.064Z","deathDate":null,"email":"wangpeng@example.com","fatherId":"cmib8zhsk000phhxl0b7ow8vz","fullName":"王鹏","gender":"MALE","generation":4,"generationName":"浩","givenName":"鹏","id":"cmib8zht40015hhxlblc0udh0","isLunarDate":false,"motherId":"cmib8zhsm000rhhxlwm3mv5ci","phone":"13900139005","photoIds":[],"posthumousName":null,"rank":null,"spouseFatherName":null,"spouseIds":[],"spouseMotherName":null,"surname":"王","tags":["医生","在世","杭州"],"telephone":null,"treeId":"cmib8zhrq0003hhxlvnsi96nh","updatedAt":"2025-11-23T04:58:33.091Z"},"to":"浙江省杭州市","year":1982},{"father":{"address":null,"ancestralHome":"山东省济南市","artName":null,"avatarImageId":null,"avatarUrl":null,"bio":"医生,继承父业。","birthDate":"1952-02-28","birthPlace":"山东省济南市历城区","burialPlace":null,"childrenIds":["cmib8zht40015hhxlblc0udh0","cmib8zht50017hhxldt6nnba6"],"courtesyName":null,"createdAt":"2025-11-23T04:58:33.044Z","deathDate":null,"email":null,"fatherId":"cmib8zhs5000dhhxlo39he5la","fullName":"王强","gender":"MALE","generation":3,"generationName":"明","givenName":"强","id":"cmib8zhsk000phhxl0b7ow8vz","isLunarDate":false,"motherId":"cmib8zhs6000fhhxl8h0rd5as","phone":"13800138004","photoIds":[],"posthumousName":null,"rank":null,"spouseFatherName":null,"spouseIds":["cmib8zhsm000rhhxlwm3mv5ci"],"spouseMotherName":null,"surname":"王","tags":["医生","在世"],"telephone":null,"treeId":"cmib8zhrq0003hhxlvnsi96nh","updatedAt":"2025-11-23T04:58:33.073Z"},"from":"山东省济南市历城区","person":{"address":"四川省成都市武侯区天府大道","ancestralHome":"山东省济南市","artName":null,"avatarImageId":null,"avatarUrl":null,"bio":"教师,在大学任教。","birthDate":"1984-08-20","birthPlace":"四川省成都市","burialPlace":null,"childrenIds":[],"courtesyName":null,"createdAt":"2025-11-23T04:58:33.066Z","deathDate":null,"email":"wangting@example.com","fatherId":"cmib8zhsk000phhxl0b7ow8vz","fullName":"王婷","gender":"FEMALE","generation":4,"generationName":"浩","givenName":"婷","id":"cmib8zht50017hhxldt6nnba6","isLunarDate":false,"motherId":"cmib8zhsm000rhhxlwm3mv5ci","phone":"13900139006","photoIds":[],"posthumousName":null,"rank":null,"spouseFatherName":null,"spouseIds":[],"spouseMotherName":null,"surname":"王","tags":["教师","在世","成都"],"telephone":null,"treeId":"cmib8zhrq0003hhxlvnsi96nh","updatedAt":"2025-11-23T04:58:33.066Z"},"to":"四川省成都市","year":1984},{"father":{"address":null,"ancestralHome":"山东省济南市","artName":null,"avatarImageId":null,"avatarUrl":null,"bio":"护士,在医院工作。","birthDate":"1954-07-20","birthPlace":"山东省济南市历城区","burialPlace":null,"childrenIds":["cmib8zht70019hhxlg7l25qh6"],"courtesyName":null,"createdAt":"2025-11-23T04:58:33.049Z","deathDate":null,"email":null,"fatherId":"cmib8zhs5000dhhxlo39he5la","fullName":"王丽","gender":"FEMALE","generation":3,"generationName":"明","givenName":"丽","id":"cmib8zhso000thhxl6jztirc0","isLunarDate":false,"motherId":"cmib8zhs6000fhhxl8h0rd5as","phone":"13800138006","photoIds":[],"posthumousName":null,"rank":null,"spouseFatherName":null,"spouseIds":["cmibe02rs000r13eiug7grp9w"],"spouseMotherName":null,"surname":"王","tags":["护士","在世"],"telephone":null,"treeId":"cmib8zhrq0003hhxlvnsi96nh","updatedAt":"2025-11-23T07:18:58.316Z"},"from":"山东省济南市历城区","person":{"address":"江苏省苏州市工业园区","ancestralHome":"山东省济南市","artName":null,"avatarImageId":null,"avatarUrl":null,"bio":"护士,在医院工作。","birthDate":"1986-02-14","birthPlace":"江苏省苏州市","burialPlace":null,"childrenIds":[],"courtesyName":null,"createdAt":"2025-11-23T04:58:33.067Z","deathDate":null,"email":"wangna@example.com","fatherId":"cmib8zhso000thhxl6jztirc0","fullName":"王娜","gender":"FEMALE","generation":4,"generationName":"浩","givenName":"娜","id":"cmib8zht70019hhxlg7l25qh6","isLunarDate":false,"motherId":"cmibe02rs000r13eiug7grp9w","phone":"13900139007","photoIds":[],"posthumousName":null,"rank":null,"spouseFatherName":null,"spouseIds":[],"spouseMotherName":null,"surname":"王","tags":["护士","在世","苏州"],"telephone":null,"treeId":"cmib8zhrq0003hhxlvnsi96nh","updatedAt":"2025-11-23T07:41:20.485Z"},"to":"江苏省苏州市","year":1986},{"father":{"address":null,"ancestralHome":"山东省济南市","artName":null,"avatarImageId":null,"avatarUrl":null,"bio":"军人,服役20年后转业。","birthDate":"1956-12-08","birthPlace":"山东省济南市历城区","burialPlace":null,"childrenIds":["cmib8zht8001bhhxlzoa6z9y2"],"courtesyName":null,"createdAt":"2025-11-23T04:58:33.050Z","deathDate":null,"email":null,"fatherId":"cmib8zhs5000dhhxlo39he5la","fullName":"王军","gender":"MALE","generation":3,"generationName":"明","givenName":"军","id":"cmib8zhsq000vhhxl2whod7u2","isLunarDate":false,"motherId":"cmib8zhs6000fhhxl8h0rd5as","phone":"13800138007","photoIds":[],"posthumousName":null,"rank":null,"spouseFatherName":null,"spouseIds":["cmibdvdad000n13ei0juo7xxm"],"spouseMotherName":null,"surname":"王","tags":["军人","在世"],"telephone":null,"treeId":"cmib8zhrq0003hhxlvnsi96nh","updatedAt":"2025-11-23T07:40:46.248Z"},"from":"山东省济南市历城区","person":{"address":"陕西省西安市雁塔区高新路","ancestralHome":"山东省济南市","artName":null,"avatarImageId":null,"avatarUrl":null,"bio":"工程师,在航天企业工作。","birthDate":"1988-07-30","birthPlace":"陕西省西安市","burialPlace":null,"childrenIds":[],"courtesyName":null,"createdAt":"2025-11-23T04:58:33.068Z","deathDate":null,"email":"wangtao@example.com","fatherId":"cmib8zhsq000vhhxl2whod7u2","fullName":"王涛","gender":"MALE","generation":4,"generationName":"浩","givenName":"涛","id":"cmib8zht8001bhhxlzoa6z9y2","isLunarDate":false,"motherId":"cmibdvdad000n13ei0juo7xxm","phone":"13900139008","photoIds":[],"posthumousName":null,"rank":null,"spouseFatherName":null,"spouseIds":[],"spouseMotherName":null,"surname":"王","tags":["工程师","在世","西安"],"telephone":null,"treeId":"cmib8zhrq0003hhxlvnsi96nh","updatedAt":"2025-11-23T07:40:46.240Z"},"to":"陕西省西安市","year":1988},{"father":{"address":"山东省济南市高新区科技路456号","ancestralHome":"山东省济南市","artName":null,"avatarImageId":null,"avatarUrl":null,"bio":"软件工程师,在互联网公司工作。","birthDate":"1975-06-10","birthPlace":"山东省济南市历下区","burialPlace":null,"childrenIds":["cmib8zhti001dhhxlzhzwnmmv","cmib8zhtj001fhhxlq9zssb2u"],"courtesyName":null,"createdAt":"2025-11-23T04:58:33.057Z","deathDate":null,"email":"wanghao@example.com","fatherId":"cmib8zhse000jhhxlt3ppgfn2","fullName":"王浩","gender":"MALE","generation":4,"generationName":"浩","givenName":"浩","id":"cmib8zhsx000xhhxlpbjrwykn","isLunarDate":false,"motherId":"cmib8zhsg000lhhxlqxteubiw","phone":"13900139001","photoIds":[],"posthumousName":null,"rank":null,"spouseFatherName":null,"spouseIds":["cmib8zhsy000zhhxlj2wvxjok"],"spouseMotherName":null,"surname":"王","tags":["程序员","在世"],"telephone":null,"treeId":"cmib8zhrq0003hhxlvnsi96nh","updatedAt":"2025-11-23T04:58:33.085Z"},"from":"山东省济南市历下区","person":{"address":null,"ancestralHome":"山东省济南市","artName":null,"avatarImageId":null,"avatarUrl":null,"bio":"在读大学生,就读于计算机科学专业。","birthDate":"2005-03-20","birthPlace":"山东省济南市高新区","burialPlace":null,"childrenIds":[],"courtesyName":null,"createdAt":"2025-11-23T04:58:33.078Z","deathDate":null,"email":null,"fatherId":"cmib8zhsx000xhhxlpbjrwykn","fullName":"王子轩","gender":"MALE","generation":5,"generationName":"子","givenName":"子轩","id":"cmib8zhti001dhhxlzhzwnmmv","isLunarDate":false,"motherId":"cmib8zhsy000zhhxlj2wvxjok","phone":null,"photoIds":[],"posthumousName":null,"rank":null,"spouseFatherName":null,"spouseIds":[],"spouseMotherName":null,"surname":"王","tags":["学生","在世"],"telephone":null,"treeId":"cmib8zhrq0003hhxlvnsi96nh","updatedAt":"2025-11-23T04:58:33.078Z"},"to":"山东省济南市高新区","year":2005},{"father":{"address":"山东省济南市高新区科技路456号","ancestralHome":"山东省济南市","artName":null,"avatarImageId":null,"avatarUrl":null,"bio":"软件工程师,在互联网公司工作。","birthDate":"1975-06-10","birthPlace":"山东省济南市历下区","burialPlace":null,"childrenIds":["cmib8zhti001dhhxlzhzwnmmv","cmib8zhtj001fhhxlq9zssb2u"],"courtesyName":null,"createdAt":"2025-11-23T04:58:33.057Z","deathDate":null,"email":"wanghao@example.com","fatherId":"cmib8zhse000jhhxlt3ppgfn2","fullName":"王浩","gender":"MALE","generation":4,"generationName":"浩","givenName":"浩","id":"cmib8zhsx000xhhxlpbjrwykn","isLunarDate":false,"motherId":"cmib8zhsg000lhhxlqxteubiw","phone":"13900139001","photoIds":[],"posthumousName":null,"rank":null,"spouseFatherName":null,"spouseIds":["cmib8zhsy000zhhxlj2wvxjok"],"spouseMotherName":null,"surname":"王","tags":["程序员","在世"],"telephone":null,"treeId":"cmib8zhrq0003hhxlvnsi96nh","updatedAt":"2025-11-23T04:58:33.085Z"},"from":"山东省济南市历下区","person":{"address":null,"ancestralHome":"山东省济南市","artName":null,"avatarImageId":null,"avatarUrl":null,"bio":"在读高中生。","birthDate":"2008-07-15","birthPlace":"山东省济南市高新区","burialPlace":null,"childrenIds":[],"courtesyName":null,"createdAt":"2025-11-23T04:58:33.079Z","deathDate":null,"email":null,"fatherId":"cmib8zhsx000xhhxlpbjrwykn","fullName":"王梓涵","gender":"FEMALE","generation":5,"generationName":"子","givenName":"梓涵","id":"cmib8zhtj001fhhxlq9zssb2u","isLunarDate":false,"motherId":"cmib8zhsy000zhhxlj2wvxjok","phone":null,"photoIds":[],"posthumousName":null,"rank":null,"spouseFatherName":null,"spouseIds":[],"spouseMotherName":null,"surname":"王","tags":["学生","在世"],"telephone":null,"treeId":"cmib8zhrq0003hhxlvnsi96nh","updatedAt":"2025-11-23T04:58:33.079Z"},"to":"山东省济南市高新区","year":2008}]} +[04:31:58.461] Browser LOG 迁徙数据: {"lines":[{"coords":[[117.12,36.65],[117.12,36.65]],"fromName":"济南","toName":"济南"},{"coords":[[117.12,36.65],[117.12,36.65]],"fromName":"济南","toName":"济南"},{"coords":[[117.12,36.65],[121.48,31.22]],"fromName":"济南","toName":"上海"},{"coords":[[117.12,36.65],[114.07,22.62]],"fromName":"济南","toName":"深圳"},{"coords":[[117.12,36.65],[120.19,30.26]],"fromName":"济南","toName":"杭州"},{"coords":[[117.12,36.65],[104.06,30.67]],"fromName":"济南","toName":"成都"},{"coords":[[117.12,36.65],[120.62,31.32]],"fromName":"济南","toName":"苏州"},{"coords":[[117.12,36.65],[108.95,34.27]],"fromName":"济南","toName":"西安"},{"coords":[[117.12,36.65],[117.12,36.65]],"fromName":"济南","toName":"济南"},{"coords":[[117.12,36.65],[117.12,36.65]],"fromName":"济南","toName":"济南"}],"migrations":[{"father":{"address":null,"ancestralHome":"山东省济南市","artName":null,"avatarImageId":null,"avatarUrl":null,"bio":"参加过抗日战争,新中国成立后在政府部门工作。","birthDate":"1910-01-20","birthPlace":"山东省济南市历城区","burialPlace":null,"childrenIds":["cmib8zhse000jhhxlt3ppgfn2","cmib8zhsj000nhhxlg7s8axjz"],"courtesyName":null,"createdAt":"2025-11-23T04:58:33.023Z","deathDate":"1985-06-15","email":null,"fatherId":"cmib8zhrs0005hhxlk83tffvl","fullName":"王建国","gender":"MALE","generation":2,"generationName":"建","givenName":"建国","id":"cmib8zhrz0009hhxlgs0r588g","isLunarDate":false,"motherId":"cmib8zhrv0007hhxl3q1knmo9","phone":null,"photoIds":[],"posthumousName":null,"rank":null,"spouseFatherName":null,"spouseIds":["cmib8zhs1000bhhxlovwol0op"],"spouseMotherName":null,"surname":"王","tags":["抗战老兵","公务员","退伍军人"],"telephone":null,"treeId":"cmib8zhrq0003hhxlvnsi96nh","updatedAt":"2025-11-23T05:04:04.978Z"},"from":"山东省济南市历城区","person":{"address":"山东省济南市历下区解放路123号","ancestralHome":"山东省济南市","artName":null,"avatarImageId":null,"avatarUrl":null,"bio":"工程师,从事机械制造行业。","birthDate":"1945-04-18","birthPlace":"山东省济南市历下区","burialPlace":null,"childrenIds":["cmib8zhsx000xhhxlpbjrwykn","cmib8zht10011hhxla6g9be98"],"courtesyName":null,"createdAt":"2025-11-23T04:58:33.039Z","deathDate":null,"email":"wangming@example.com","fatherId":"cmib8zhrz0009hhxlgs0r588g","fullName":"王明","gender":"MALE","generation":3,"generationName":"明","givenName":"明","id":"cmib8zhse000jhhxlt3ppgfn2","isLunarDate":false,"motherId":"cmib8zhs1000bhhxlovwol0op","phone":"13800138001","photoIds":[],"posthumousName":null,"rank":null,"spouseFatherName":null,"spouseIds":["cmib8zhsg000lhhxlqxteubiw"],"spouseMotherName":null,"surname":"王","tags":["工程师","在世"],"telephone":null,"treeId":"cmib8zhrq0003hhxlvnsi96nh","updatedAt":"2025-11-23T07:40:46.245Z"},"to":"山东省济南市历下区","year":1945},{"father":{"address":null,"ancestralHome":"山东省济南市","artName":null,"avatarImageId":null,"avatarUrl":null,"bio":"参加过抗日战争,新中国成立后在政府部门工作。","birthDate":"1910-01-20","birthPlace":"山东省济南市历城区","burialPlace":null,"childrenIds":["cmib8zhse000jhhxlt3ppgfn2","cmib8zhsj000nhhxlg7s8axjz"],"courtesyName":null,"createdAt":"2025-11-23T04:58:33.023Z","deathDate":"1985-06-15","email":null,"fatherId":"cmib8zhrs0005hhxlk83tffvl","fullName":"王建国","gender":"MALE","generation":2,"generationName":"建","givenName":"建国","id":"cmib8zhrz0009hhxlgs0r588g","isLunarDate":false,"motherId":"cmib8zhrv0007hhxl3q1knmo9","phone":null,"photoIds":[],"posthumousName":null,"rank":null,"spouseFatherName":null,"spouseIds":["cmib8zhs1000bhhxlovwol0op"],"spouseMotherName":null,"surname":"王","tags":["抗战老兵","公务员","退伍军人"],"telephone":null,"treeId":"cmib8zhrq0003hhxlvnsi96nh","updatedAt":"2025-11-23T05:04:04.978Z"},"from":"山东省济南市历城区","person":{"address":null,"ancestralHome":"山东省济南市","artName":null,"avatarImageId":null,"avatarUrl":null,"bio":"教师,在中学任教。","birthDate":"1950-09-12","birthPlace":"山东省济南市历下区","burialPlace":null,"childrenIds":["cmib8zht20013hhxl039l48mr"],"courtesyName":null,"createdAt":"2025-11-23T04:58:33.043Z","deathDate":null,"email":null,"fatherId":"cmib8zhrz0009hhxlgs0r588g","fullName":"王亮","gender":"MALE","generation":3,"generationName":"明","givenName":"亮","id":"cmib8zhsj000nhhxlg7s8axjz","isLunarDate":false,"motherId":"cmib8zhs1000bhhxlovwol0op","phone":"13800138003","photoIds":[],"posthumousName":null,"rank":null,"spouseFatherName":null,"spouseIds":[],"spouseMotherName":null,"surname":"王","tags":["教师","在世"],"telephone":null,"treeId":"cmib8zhrq0003hhxlvnsi96nh","updatedAt":"2025-11-23T04:58:33.072Z"},"to":"山东省济南市历下区","year":1950},{"father":{"address":"山东省济南市历下区解放路123号","ancestralHome":"山东省济南市","artName":null,"avatarImageId":null,"avatarUrl":null,"bio":"工程师,从事机械制造行业。","birthDate":"1945-04-18","birthPlace":"山东省济南市历下区","burialPlace":null,"childrenIds":["cmib8zhsx000xhhxlpbjrwykn","cmib8zht10011hhxla6g9be98"],"courtesyName":null,"createdAt":"2025-11-23T04:58:33.039Z","deathDate":null,"email":"wangming@example.com","fatherId":"cmib8zhrz0009hhxlgs0r588g","fullName":"王明","gender":"MALE","generation":3,"generationName":"明","givenName":"明","id":"cmib8zhse000jhhxlt3ppgfn2","isLunarDate":false,"motherId":"cmib8zhs1000bhhxlovwol0op","phone":"13800138001","photoIds":[],"posthumousName":null,"rank":null,"spouseFatherName":null,"spouseIds":["cmib8zhsg000lhhxlqxteubiw"],"spouseMotherName":null,"surname":"王","tags":["工程师","在世"],"telephone":null,"treeId":"cmib8zhrq0003hhxlvnsi96nh","updatedAt":"2025-11-23T07:40:46.245Z"},"from":"山东省济南市历下区","person":{"address":"上海市浦东新区陆家嘴环路1000号","ancestralHome":"山东省济南市","artName":null,"avatarImageId":null,"avatarUrl":null,"bio":"金融分析师,在投资银行工作。","birthDate":"1978-03-22","birthPlace":"上海市浦东新区","burialPlace":null,"childrenIds":["cmib8zhtl001hhhxl289f3j07"],"courtesyName":null,"createdAt":"2025-11-23T04:58:33.061Z","deathDate":null,"email":"wanglei@example.com","fatherId":"cmib8zhse000jhhxlt3ppgfn2","fullName":"王磊","gender":"MALE","generation":4,"generationName":"浩","givenName":"磊","id":"cmib8zht10011hhxla6g9be98","isLunarDate":false,"motherId":"cmib8zhsg000lhhxlqxteubiw","phone":"13900139003","photoIds":[],"posthumousName":null,"rank":null,"spouseFatherName":null,"spouseIds":[],"spouseMotherName":null,"surname":"王","tags":["金融","在世","上海"],"telephone":null,"treeId":"cmib8zhrq0003hhxlvnsi96nh","updatedAt":"2025-11-23T04:58:33.088Z"},"to":"上海市浦东新区","year":1978},{"father":{"address":null,"ancestralHome":"山东省济南市","artName":null,"avatarImageId":null,"avatarUrl":null,"bio":"教师,在中学任教。","birthDate":"1950-09-12","birthPlace":"山东省济南市历下区","burialPlace":null,"childrenIds":["cmib8zht20013hhxl039l48mr"],"courtesyName":null,"createdAt":"2025-11-23T04:58:33.043Z","deathDate":null,"email":null,"fatherId":"cmib8zhrz0009hhxlgs0r588g","fullName":"王亮","gender":"MALE","generation":3,"generationName":"明","givenName":"亮","id":"cmib8zhsj000nhhxlg7s8axjz","isLunarDate":false,"motherId":"cmib8zhs1000bhhxlovwol0op","phone":"13800138003","photoIds":[],"posthumousName":null,"rank":null,"spouseFatherName":null,"spouseIds":[],"spouseMotherName":null,"surname":"王","tags":["教师","在世"],"telephone":null,"treeId":"cmib8zhrq0003hhxlvnsi96nh","updatedAt":"2025-11-23T04:58:33.072Z"},"from":"山东省济南市历下区","person":{"address":"广东省深圳市南山区科技园","ancestralHome":"山东省济南市","artName":null,"avatarImageId":null,"avatarUrl":null,"bio":"创业者,经营科技公司。","birthDate":"1980-11-08","birthPlace":"广东省深圳市","burialPlace":null,"childrenIds":["cmib8zhtm001jhhxlxi4lvq62"],"courtesyName":null,"createdAt":"2025-11-23T04:58:33.063Z","deathDate":null,"email":"wangchao@example.com","fatherId":"cmib8zhsj000nhhxlg7s8axjz","fullName":"王超","gender":"MALE","generation":4,"generationName":"浩","givenName":"超","id":"cmib8zht20013hhxl039l48mr","isLunarDate":false,"motherId":null,"phone":"13900139004","photoIds":[],"posthumousName":null,"rank":null,"spouseFatherName":null,"spouseIds":[],"spouseMotherName":null,"surname":"王","tags":["创业者","在世","深圳"],"telephone":null,"treeId":"cmib8zhrq0003hhxlvnsi96nh","updatedAt":"2025-11-23T04:58:33.089Z"},"to":"广东省深圳市","year":1980},{"father":{"address":null,"ancestralHome":"山东省济南市","artName":null,"avatarImageId":null,"avatarUrl":null,"bio":"医生,继承父业。","birthDate":"1952-02-28","birthPlace":"山东省济南市历城区","burialPlace":null,"childrenIds":["cmib8zht40015hhxlblc0udh0","cmib8zht50017hhxldt6nnba6"],"courtesyName":null,"createdAt":"2025-11-23T04:58:33.044Z","deathDate":null,"email":null,"fatherId":"cmib8zhs5000dhhxlo39he5la","fullName":"王强","gender":"MALE","generation":3,"generationName":"明","givenName":"强","id":"cmib8zhsk000phhxl0b7ow8vz","isLunarDate":false,"motherId":"cmib8zhs6000fhhxl8h0rd5as","phone":"13800138004","photoIds":[],"posthumousName":null,"rank":null,"spouseFatherName":null,"spouseIds":["cmib8zhsm000rhhxlwm3mv5ci"],"spouseMotherName":null,"surname":"王","tags":["医生","在世"],"telephone":null,"treeId":"cmib8zhrq0003hhxlvnsi96nh","updatedAt":"2025-11-23T04:58:33.073Z"},"from":"山东省济南市历城区","person":{"address":"浙江省杭州市西湖区文三路","ancestralHome":"山东省济南市","artName":null,"avatarImageId":null,"avatarUrl":null,"bio":"医生,在浙江大学附属医院工作。","birthDate":"1982-05-15","birthPlace":"浙江省杭州市","burialPlace":null,"childrenIds":["cmib8zhto001lhhxlkizg2ig6"],"courtesyName":null,"createdAt":"2025-11-23T04:58:33.064Z","deathDate":null,"email":"wangpeng@example.com","fatherId":"cmib8zhsk000phhxl0b7ow8vz","fullName":"王鹏","gender":"MALE","generation":4,"generationName":"浩","givenName":"鹏","id":"cmib8zht40015hhxlblc0udh0","isLunarDate":false,"motherId":"cmib8zhsm000rhhxlwm3mv5ci","phone":"13900139005","photoIds":[],"posthumousName":null,"rank":null,"spouseFatherName":null,"spouseIds":[],"spouseMotherName":null,"surname":"王","tags":["医生","在世","杭州"],"telephone":null,"treeId":"cmib8zhrq0003hhxlvnsi96nh","updatedAt":"2025-11-23T04:58:33.091Z"},"to":"浙江省杭州市","year":1982},{"father":{"address":null,"ancestralHome":"山东省济南市","artName":null,"avatarImageId":null,"avatarUrl":null,"bio":"医生,继承父业。","birthDate":"1952-02-28","birthPlace":"山东省济南市历城区","burialPlace":null,"childrenIds":["cmib8zht40015hhxlblc0udh0","cmib8zht50017hhxldt6nnba6"],"courtesyName":null,"createdAt":"2025-11-23T04:58:33.044Z","deathDate":null,"email":null,"fatherId":"cmib8zhs5000dhhxlo39he5la","fullName":"王强","gender":"MALE","generation":3,"generationName":"明","givenName":"强","id":"cmib8zhsk000phhxl0b7ow8vz","isLunarDate":false,"motherId":"cmib8zhs6000fhhxl8h0rd5as","phone":"13800138004","photoIds":[],"posthumousName":null,"rank":null,"spouseFatherName":null,"spouseIds":["cmib8zhsm000rhhxlwm3mv5ci"],"spouseMotherName":null,"surname":"王","tags":["医生","在世"],"telephone":null,"treeId":"cmib8zhrq0003hhxlvnsi96nh","updatedAt":"2025-11-23T04:58:33.073Z"},"from":"山东省济南市历城区","person":{"address":"四川省成都市武侯区天府大道","ancestralHome":"山东省济南市","artName":null,"avatarImageId":null,"avatarUrl":null,"bio":"教师,在大学任教。","birthDate":"1984-08-20","birthPlace":"四川省成都市","burialPlace":null,"childrenIds":[],"courtesyName":null,"createdAt":"2025-11-23T04:58:33.066Z","deathDate":null,"email":"wangting@example.com","fatherId":"cmib8zhsk000phhxl0b7ow8vz","fullName":"王婷","gender":"FEMALE","generation":4,"generationName":"浩","givenName":"婷","id":"cmib8zht50017hhxldt6nnba6","isLunarDate":false,"motherId":"cmib8zhsm000rhhxlwm3mv5ci","phone":"13900139006","photoIds":[],"posthumousName":null,"rank":null,"spouseFatherName":null,"spouseIds":[],"spouseMotherName":null,"surname":"王","tags":["教师","在世","成都"],"telephone":null,"treeId":"cmib8zhrq0003hhxlvnsi96nh","updatedAt":"2025-11-23T04:58:33.066Z"},"to":"四川省成都市","year":1984},{"father":{"address":null,"ancestralHome":"山东省济南市","artName":null,"avatarImageId":null,"avatarUrl":null,"bio":"护士,在医院工作。","birthDate":"1954-07-20","birthPlace":"山东省济南市历城区","burialPlace":null,"childrenIds":["cmib8zht70019hhxlg7l25qh6"],"courtesyName":null,"createdAt":"2025-11-23T04:58:33.049Z","deathDate":null,"email":null,"fatherId":"cmib8zhs5000dhhxlo39he5la","fullName":"王丽","gender":"FEMALE","generation":3,"generationName":"明","givenName":"丽","id":"cmib8zhso000thhxl6jztirc0","isLunarDate":false,"motherId":"cmib8zhs6000fhhxl8h0rd5as","phone":"13800138006","photoIds":[],"posthumousName":null,"rank":null,"spouseFatherName":null,"spouseIds":["cmibe02rs000r13eiug7grp9w"],"spouseMotherName":null,"surname":"王","tags":["护士","在世"],"telephone":null,"treeId":"cmib8zhrq0003hhxlvnsi96nh","updatedAt":"2025-11-23T07:18:58.316Z"},"from":"山东省济南市历城区","person":{"address":"江苏省苏州市工业园区","ancestralHome":"山东省济南市","artName":null,"avatarImageId":null,"avatarUrl":null,"bio":"护士,在医院工作。","birthDate":"1986-02-14","birthPlace":"江苏省苏州市","burialPlace":null,"childrenIds":[],"courtesyName":null,"createdAt":"2025-11-23T04:58:33.067Z","deathDate":null,"email":"wangna@example.com","fatherId":"cmib8zhso000thhxl6jztirc0","fullName":"王娜","gender":"FEMALE","generation":4,"generationName":"浩","givenName":"娜","id":"cmib8zht70019hhxlg7l25qh6","isLunarDate":false,"motherId":"cmibe02rs000r13eiug7grp9w","phone":"13900139007","photoIds":[],"posthumousName":null,"rank":null,"spouseFatherName":null,"spouseIds":[],"spouseMotherName":null,"surname":"王","tags":["护士","在世","苏州"],"telephone":null,"treeId":"cmib8zhrq0003hhxlvnsi96nh","updatedAt":"2025-11-23T07:41:20.485Z"},"to":"江苏省苏州市","year":1986},{"father":{"address":null,"ancestralHome":"山东省济南市","artName":null,"avatarImageId":null,"avatarUrl":null,"bio":"军人,服役20年后转业。","birthDate":"1956-12-08","birthPlace":"山东省济南市历城区","burialPlace":null,"childrenIds":["cmib8zht8001bhhxlzoa6z9y2"],"courtesyName":null,"createdAt":"2025-11-23T04:58:33.050Z","deathDate":null,"email":null,"fatherId":"cmib8zhs5000dhhxlo39he5la","fullName":"王军","gender":"MALE","generation":3,"generationName":"明","givenName":"军","id":"cmib8zhsq000vhhxl2whod7u2","isLunarDate":false,"motherId":"cmib8zhs6000fhhxl8h0rd5as","phone":"13800138007","photoIds":[],"posthumousName":null,"rank":null,"spouseFatherName":null,"spouseIds":["cmibdvdad000n13ei0juo7xxm"],"spouseMotherName":null,"surname":"王","tags":["军人","在世"],"telephone":null,"treeId":"cmib8zhrq0003hhxlvnsi96nh","updatedAt":"2025-11-23T07:40:46.248Z"},"from":"山东省济南市历城区","person":{"address":"陕西省西安市雁塔区高新路","ancestralHome":"山东省济南市","artName":null,"avatarImageId":null,"avatarUrl":null,"bio":"工程师,在航天企业工作。","birthDate":"1988-07-30","birthPlace":"陕西省西安市","burialPlace":null,"childrenIds":[],"courtesyName":null,"createdAt":"2025-11-23T04:58:33.068Z","deathDate":null,"email":"wangtao@example.com","fatherId":"cmib8zhsq000vhhxl2whod7u2","fullName":"王涛","gender":"MALE","generation":4,"generationName":"浩","givenName":"涛","id":"cmib8zht8001bhhxlzoa6z9y2","isLunarDate":false,"motherId":"cmibdvdad000n13ei0juo7xxm","phone":"13900139008","photoIds":[],"posthumousName":null,"rank":null,"spouseFatherName":null,"spouseIds":[],"spouseMotherName":null,"surname":"王","tags":["工程师","在世","西安"],"telephone":null,"treeId":"cmib8zhrq0003hhxlvnsi96nh","updatedAt":"2025-11-23T07:40:46.240Z"},"to":"陕西省西安市","year":1988},{"father":{"address":"山东省济南市高新区科技路456号","ancestralHome":"山东省济南市","artName":null,"avatarImageId":null,"avatarUrl":null,"bio":"软件工程师,在互联网公司工作。","birthDate":"1975-06-10","birthPlace":"山东省济南市历下区","burialPlace":null,"childrenIds":["cmib8zhti001dhhxlzhzwnmmv","cmib8zhtj001fhhxlq9zssb2u"],"courtesyName":null,"createdAt":"2025-11-23T04:58:33.057Z","deathDate":null,"email":"wanghao@example.com","fatherId":"cmib8zhse000jhhxlt3ppgfn2","fullName":"王浩","gender":"MALE","generation":4,"generationName":"浩","givenName":"浩","id":"cmib8zhsx000xhhxlpbjrwykn","isLunarDate":false,"motherId":"cmib8zhsg000lhhxlqxteubiw","phone":"13900139001","photoIds":[],"posthumousName":null,"rank":null,"spouseFatherName":null,"spouseIds":["cmib8zhsy000zhhxlj2wvxjok"],"spouseMotherName":null,"surname":"王","tags":["程序员","在世"],"telephone":null,"treeId":"cmib8zhrq0003hhxlvnsi96nh","updatedAt":"2025-11-23T04:58:33.085Z"},"from":"山东省济南市历下区","person":{"address":null,"ancestralHome":"山东省济南市","artName":null,"avatarImageId":null,"avatarUrl":null,"bio":"在读大学生,就读于计算机科学专业。","birthDate":"2005-03-20","birthPlace":"山东省济南市高新区","burialPlace":null,"childrenIds":[],"courtesyName":null,"createdAt":"2025-11-23T04:58:33.078Z","deathDate":null,"email":null,"fatherId":"cmib8zhsx000xhhxlpbjrwykn","fullName":"王子轩","gender":"MALE","generation":5,"generationName":"子","givenName":"子轩","id":"cmib8zhti001dhhxlzhzwnmmv","isLunarDate":false,"motherId":"cmib8zhsy000zhhxlj2wvxjok","phone":null,"photoIds":[],"posthumousName":null,"rank":null,"spouseFatherName":null,"spouseIds":[],"spouseMotherName":null,"surname":"王","tags":["学生","在世"],"telephone":null,"treeId":"cmib8zhrq0003hhxlvnsi96nh","updatedAt":"2025-11-23T04:58:33.078Z"},"to":"山东省济南市高新区","year":2005},{"father":{"address":"山东省济南市高新区科技路456号","ancestralHome":"山东省济南市","artName":null,"avatarImageId":null,"avatarUrl":null,"bio":"软件工程师,在互联网公司工作。","birthDate":"1975-06-10","birthPlace":"山东省济南市历下区","burialPlace":null,"childrenIds":["cmib8zhti001dhhxlzhzwnmmv","cmib8zhtj001fhhxlq9zssb2u"],"courtesyName":null,"createdAt":"2025-11-23T04:58:33.057Z","deathDate":null,"email":"wanghao@example.com","fatherId":"cmib8zhse000jhhxlt3ppgfn2","fullName":"王浩","gender":"MALE","generation":4,"generationName":"浩","givenName":"浩","id":"cmib8zhsx000xhhxlpbjrwykn","isLunarDate":false,"motherId":"cmib8zhsg000lhhxlqxteubiw","phone":"13900139001","photoIds":[],"posthumousName":null,"rank":null,"spouseFatherName":null,"spouseIds":["cmib8zhsy000zhhxlj2wvxjok"],"spouseMotherName":null,"surname":"王","tags":["程序员","在世"],"telephone":null,"treeId":"cmib8zhrq0003hhxlvnsi96nh","updatedAt":"2025-11-23T04:58:33.085Z"},"from":"山东省济南市历下区","person":{"address":null,"ancestralHome":"山东省济南市","artName":null,"avatarImageId":null,"avatarUrl":null,"bio":"在读高中生。","birthDate":"2008-07-15","birthPlace":"山东省济南市高新区","burialPlace":null,"childrenIds":[],"courtesyName":null,"createdAt":"2025-11-23T04:58:33.079Z","deathDate":null,"email":null,"fatherId":"cmib8zhsx000xhhxlpbjrwykn","fullName":"王梓涵","gender":"FEMALE","generation":5,"generationName":"子","givenName":"梓涵","id":"cmib8zhtj001fhhxlq9zssb2u","isLunarDate":false,"motherId":"cmib8zhsy000zhhxlj2wvxjok","phone":null,"photoIds":[],"posthumousName":null,"rank":null,"spouseFatherName":null,"spouseIds":[],"spouseMotherName":null,"surname":"王","tags":["学生","在世"],"telephone":null,"treeId":"cmib8zhrq0003hhxlvnsi96nh","updatedAt":"2025-11-23T04:58:33.079Z"},"to":"山东省济南市高新区","year":2008}]} +[04:32:01.402] Browser WARN {} diff --git a/.next/dev/server/app-paths-manifest.json b/.next/dev/server/app-paths-manifest.json index a7a2e286..928309f8 100644 --- a/.next/dev/server/app-paths-manifest.json +++ b/.next/dev/server/app-paths-manifest.json @@ -10,6 +10,7 @@ "/api/user/profile/route": "app/api/user/profile/route.js", "/auth/signin/page": "app/auth/signin/page.js", "/members/[id]/page": "app/members/[id]/page.js", + "/members/new/page": "app/members/new/page.js", "/members/page": "app/members/page.js", "/page": "app/page.js", "/relationship-test/page": "app/relationship-test/page.js", diff --git a/.next/dev/server/app/members/[id]/page_client-reference-manifest.js b/.next/dev/server/app/members/[id]/page_client-reference-manifest.js index aaf10fb4..112b81d8 100644 --- a/.next/dev/server/app/members/[id]/page_client-reference-manifest.js +++ b/.next/dev/server/app/members/[id]/page_client-reference-manifest.js @@ -1,2 +1,2 @@ globalThis.__RSC_MANIFEST = globalThis.__RSC_MANIFEST || {}; -globalThis.__RSC_MANIFEST["/members/[id]/page"] = {"moduleLoading":{"prefix":"","crossOrigin":null},"clientModules":{"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/client/components/layout-router.js ":{"id":"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/components/layout-router.js [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/4e98a_next_dist_85312e63._.js","/_next/static/chunks/4e98a_next_dist_client_components_builtin_global-error_98813eb2.js"],"async":false},"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/client/components/layout-router.js":{"id":"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/components/layout-router.js [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/4e98a_next_dist_85312e63._.js","/_next/static/chunks/4e98a_next_dist_client_components_builtin_global-error_98813eb2.js"],"async":false},"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/client/components/render-from-template-context.js ":{"id":"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/components/render-from-template-context.js [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/4e98a_next_dist_85312e63._.js","/_next/static/chunks/4e98a_next_dist_client_components_builtin_global-error_98813eb2.js"],"async":false},"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/client/components/render-from-template-context.js":{"id":"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/components/render-from-template-context.js [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/4e98a_next_dist_85312e63._.js","/_next/static/chunks/4e98a_next_dist_client_components_builtin_global-error_98813eb2.js"],"async":false},"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/client/components/client-page.js ":{"id":"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/components/client-page.js [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/4e98a_next_dist_85312e63._.js","/_next/static/chunks/4e98a_next_dist_client_components_builtin_global-error_98813eb2.js"],"async":false},"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/client/components/client-page.js":{"id":"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/components/client-page.js [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/4e98a_next_dist_85312e63._.js","/_next/static/chunks/4e98a_next_dist_client_components_builtin_global-error_98813eb2.js"],"async":false},"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/client/components/client-segment.js ":{"id":"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/components/client-segment.js [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/4e98a_next_dist_85312e63._.js","/_next/static/chunks/4e98a_next_dist_client_components_builtin_global-error_98813eb2.js"],"async":false},"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/client/components/client-segment.js":{"id":"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/components/client-segment.js [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/4e98a_next_dist_85312e63._.js","/_next/static/chunks/4e98a_next_dist_client_components_builtin_global-error_98813eb2.js"],"async":false},"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/client/components/http-access-fallback/error-boundary.js ":{"id":"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/components/http-access-fallback/error-boundary.js [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/4e98a_next_dist_85312e63._.js","/_next/static/chunks/4e98a_next_dist_client_components_builtin_global-error_98813eb2.js"],"async":false},"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/client/components/http-access-fallback/error-boundary.js":{"id":"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/components/http-access-fallback/error-boundary.js [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/4e98a_next_dist_85312e63._.js","/_next/static/chunks/4e98a_next_dist_client_components_builtin_global-error_98813eb2.js"],"async":false},"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/lib/metadata/generate/icon-mark.js ":{"id":"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/lib/metadata/generate/icon-mark.js [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/4e98a_next_dist_85312e63._.js","/_next/static/chunks/4e98a_next_dist_client_components_builtin_global-error_98813eb2.js"],"async":false},"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/lib/metadata/generate/icon-mark.js":{"id":"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/lib/metadata/generate/icon-mark.js [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/4e98a_next_dist_85312e63._.js","/_next/static/chunks/4e98a_next_dist_client_components_builtin_global-error_98813eb2.js"],"async":false},"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/lib/framework/boundary-components.js ":{"id":"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/lib/framework/boundary-components.js [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/4e98a_next_dist_85312e63._.js","/_next/static/chunks/4e98a_next_dist_client_components_builtin_global-error_98813eb2.js"],"async":false},"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/lib/framework/boundary-components.js":{"id":"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/lib/framework/boundary-components.js [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/4e98a_next_dist_85312e63._.js","/_next/static/chunks/4e98a_next_dist_client_components_builtin_global-error_98813eb2.js"],"async":false},"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/next-devtools/userspace/app/segment-explorer-node.js ":{"id":"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/next-devtools/userspace/app/segment-explorer-node.js [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/4e98a_next_dist_85312e63._.js","/_next/static/chunks/4e98a_next_dist_client_components_builtin_global-error_98813eb2.js"],"async":false},"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/next-devtools/userspace/app/segment-explorer-node.js":{"id":"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/next-devtools/userspace/app/segment-explorer-node.js [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/4e98a_next_dist_85312e63._.js","/_next/static/chunks/4e98a_next_dist_client_components_builtin_global-error_98813eb2.js"],"async":false},"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/components/builtin/global-error.js ":{"id":"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/components/builtin/global-error.js [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/4e98a_next_dist_85312e63._.js","/_next/static/chunks/4e98a_next_dist_client_components_builtin_global-error_98813eb2.js"],"async":false},"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/components/builtin/global-error.js":{"id":"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/components/builtin/global-error.js [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/4e98a_next_dist_85312e63._.js","/_next/static/chunks/4e98a_next_dist_client_components_builtin_global-error_98813eb2.js"],"async":false},"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/@vercel+analytics@1.5.0_next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0__react@19.2.0/node_modules/@vercel/analytics/dist/next/index.mjs ":{"id":"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/@vercel+analytics@1.5.0_next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0__react@19.2.0/node_modules/@vercel/analytics/dist/next/index.mjs [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/Documents_go-new_chinese-family-tree_2268dbd5._.js","/_next/static/chunks/a0629__pnpm_8124a564._.js","/_next/static/chunks/Documents_go-new_chinese-family-tree_app_layout_tsx_98813eb2._.js"],"async":false},"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/@vercel+analytics@1.5.0_next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0__react@19.2.0/node_modules/@vercel/analytics/dist/next/index.mjs":{"id":"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/@vercel+analytics@1.5.0_next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0__react@19.2.0/node_modules/@vercel/analytics/dist/next/index.mjs [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/Documents_go-new_chinese-family-tree_2268dbd5._.js","/_next/static/chunks/a0629__pnpm_8124a564._.js","/_next/static/chunks/Documents_go-new_chinese-family-tree_app_layout_tsx_98813eb2._.js"],"async":false},"[project]/Documents/go-new/chinese-family-tree/context/family-context.tsx ":{"id":"[project]/Documents/go-new/chinese-family-tree/context/family-context.tsx [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/Documents_go-new_chinese-family-tree_2268dbd5._.js","/_next/static/chunks/a0629__pnpm_8124a564._.js","/_next/static/chunks/Documents_go-new_chinese-family-tree_app_layout_tsx_98813eb2._.js"],"async":false},"[project]/Documents/go-new/chinese-family-tree/context/family-context.tsx":{"id":"[project]/Documents/go-new/chinese-family-tree/context/family-context.tsx [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/Documents_go-new_chinese-family-tree_2268dbd5._.js","/_next/static/chunks/a0629__pnpm_8124a564._.js","/_next/static/chunks/Documents_go-new_chinese-family-tree_app_layout_tsx_98813eb2._.js"],"async":false},"[project]/Documents/go-new/chinese-family-tree/components/pwa/pwa-provider.tsx ":{"id":"[project]/Documents/go-new/chinese-family-tree/components/pwa/pwa-provider.tsx [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/Documents_go-new_chinese-family-tree_2268dbd5._.js","/_next/static/chunks/a0629__pnpm_8124a564._.js","/_next/static/chunks/Documents_go-new_chinese-family-tree_app_layout_tsx_98813eb2._.js"],"async":false},"[project]/Documents/go-new/chinese-family-tree/components/pwa/pwa-provider.tsx":{"id":"[project]/Documents/go-new/chinese-family-tree/components/pwa/pwa-provider.tsx [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/Documents_go-new_chinese-family-tree_2268dbd5._.js","/_next/static/chunks/a0629__pnpm_8124a564._.js","/_next/static/chunks/Documents_go-new_chinese-family-tree_app_layout_tsx_98813eb2._.js"],"async":false},"[project]/Documents/go-new/chinese-family-tree/components/providers/session-provider.tsx ":{"id":"[project]/Documents/go-new/chinese-family-tree/components/providers/session-provider.tsx [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/Documents_go-new_chinese-family-tree_2268dbd5._.js","/_next/static/chunks/a0629__pnpm_8124a564._.js","/_next/static/chunks/Documents_go-new_chinese-family-tree_app_layout_tsx_98813eb2._.js"],"async":false},"[project]/Documents/go-new/chinese-family-tree/components/providers/session-provider.tsx":{"id":"[project]/Documents/go-new/chinese-family-tree/components/providers/session-provider.tsx [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/Documents_go-new_chinese-family-tree_2268dbd5._.js","/_next/static/chunks/a0629__pnpm_8124a564._.js","/_next/static/chunks/Documents_go-new_chinese-family-tree_app_layout_tsx_98813eb2._.js"],"async":false},"[project]/Documents/go-new/chinese-family-tree/components/ui/alert-dialog-custom.tsx ":{"id":"[project]/Documents/go-new/chinese-family-tree/components/ui/alert-dialog-custom.tsx [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/Documents_go-new_chinese-family-tree_2268dbd5._.js","/_next/static/chunks/a0629__pnpm_8124a564._.js","/_next/static/chunks/Documents_go-new_chinese-family-tree_app_layout_tsx_98813eb2._.js"],"async":false},"[project]/Documents/go-new/chinese-family-tree/components/ui/alert-dialog-custom.tsx":{"id":"[project]/Documents/go-new/chinese-family-tree/components/ui/alert-dialog-custom.tsx [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/Documents_go-new_chinese-family-tree_2268dbd5._.js","/_next/static/chunks/a0629__pnpm_8124a564._.js","/_next/static/chunks/Documents_go-new_chinese-family-tree_app_layout_tsx_98813eb2._.js"],"async":false},"[project]/Documents/go-new/chinese-family-tree/app/members/[id]/page.tsx ":{"id":"[project]/Documents/go-new/chinese-family-tree/app/members/[id]/page.tsx [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/Documents_go-new_chinese-family-tree_2268dbd5._.js","/_next/static/chunks/a0629__pnpm_8124a564._.js","/_next/static/chunks/Documents_go-new_chinese-family-tree_app_layout_tsx_98813eb2._.js","/_next/static/chunks/Documents_go-new_chinese-family-tree_fa7c1a71._.js","/_next/static/chunks/a0629__pnpm_a5fa0ed9._.js","/_next/static/chunks/Documents_go-new_chinese-family-tree_app_members_%5Bid%5D_page_tsx_03538adf._.js"],"async":false},"[project]/Documents/go-new/chinese-family-tree/app/members/[id]/page.tsx":{"id":"[project]/Documents/go-new/chinese-family-tree/app/members/[id]/page.tsx [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/Documents_go-new_chinese-family-tree_2268dbd5._.js","/_next/static/chunks/a0629__pnpm_8124a564._.js","/_next/static/chunks/Documents_go-new_chinese-family-tree_app_layout_tsx_98813eb2._.js","/_next/static/chunks/Documents_go-new_chinese-family-tree_fa7c1a71._.js","/_next/static/chunks/a0629__pnpm_a5fa0ed9._.js","/_next/static/chunks/Documents_go-new_chinese-family-tree_app_members_%5Bid%5D_page_tsx_03538adf._.js"],"async":false}},"ssrModuleMapping":{"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/components/layout-router.js [app-client] (ecmascript)":{"*":{"id":"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/client/components/layout-router.js [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/4e98a_next_dist_8a92b219._.js","server/chunks/ssr/[root-of-the-server]__1aaf5479._.js"],"async":false}},"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/components/render-from-template-context.js [app-client] (ecmascript)":{"*":{"id":"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/client/components/render-from-template-context.js [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/4e98a_next_dist_8a92b219._.js","server/chunks/ssr/[root-of-the-server]__1aaf5479._.js"],"async":false}},"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/components/client-page.js [app-client] (ecmascript)":{"*":{"id":"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/client/components/client-page.js [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/4e98a_next_dist_8a92b219._.js","server/chunks/ssr/[root-of-the-server]__1aaf5479._.js"],"async":false}},"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/components/client-segment.js [app-client] (ecmascript)":{"*":{"id":"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/client/components/client-segment.js [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/4e98a_next_dist_8a92b219._.js","server/chunks/ssr/[root-of-the-server]__1aaf5479._.js"],"async":false}},"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/components/http-access-fallback/error-boundary.js [app-client] (ecmascript)":{"*":{"id":"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/client/components/http-access-fallback/error-boundary.js [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/4e98a_next_dist_8a92b219._.js","server/chunks/ssr/[root-of-the-server]__1aaf5479._.js"],"async":false}},"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/lib/metadata/generate/icon-mark.js [app-client] (ecmascript)":{"*":{"id":"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/lib/metadata/generate/icon-mark.js [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/4e98a_next_dist_8a92b219._.js","server/chunks/ssr/[root-of-the-server]__1aaf5479._.js"],"async":false}},"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/lib/framework/boundary-components.js [app-client] (ecmascript)":{"*":{"id":"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/lib/framework/boundary-components.js [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/4e98a_next_dist_8a92b219._.js","server/chunks/ssr/[root-of-the-server]__1aaf5479._.js"],"async":false}},"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/next-devtools/userspace/app/segment-explorer-node.js [app-client] (ecmascript)":{"*":{"id":"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/next-devtools/userspace/app/segment-explorer-node.js [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/4e98a_next_dist_8a92b219._.js","server/chunks/ssr/[root-of-the-server]__1aaf5479._.js"],"async":false}},"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/components/builtin/global-error.js [app-client] (ecmascript)":{"*":{"id":"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/components/builtin/global-error.js [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/4e98a_next_dist_8a92b219._.js","server/chunks/ssr/[root-of-the-server]__1aaf5479._.js"],"async":false}},"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/@vercel+analytics@1.5.0_next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0__react@19.2.0/node_modules/@vercel/analytics/dist/next/index.mjs [app-client] (ecmascript)":{"*":{"id":"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/@vercel+analytics@1.5.0_next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0__react@19.2.0/node_modules/@vercel/analytics/dist/next/index.mjs [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__9d08ee54._.js","server/chunks/ssr/a0629__pnpm_a0c33371._.js"],"async":false}},"[project]/Documents/go-new/chinese-family-tree/context/family-context.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/Documents/go-new/chinese-family-tree/context/family-context.tsx [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__9d08ee54._.js","server/chunks/ssr/a0629__pnpm_a0c33371._.js"],"async":false}},"[project]/Documents/go-new/chinese-family-tree/components/pwa/pwa-provider.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/Documents/go-new/chinese-family-tree/components/pwa/pwa-provider.tsx [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__9d08ee54._.js","server/chunks/ssr/a0629__pnpm_a0c33371._.js"],"async":false}},"[project]/Documents/go-new/chinese-family-tree/components/providers/session-provider.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/Documents/go-new/chinese-family-tree/components/providers/session-provider.tsx [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__9d08ee54._.js","server/chunks/ssr/a0629__pnpm_a0c33371._.js"],"async":false}},"[project]/Documents/go-new/chinese-family-tree/components/ui/alert-dialog-custom.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/Documents/go-new/chinese-family-tree/components/ui/alert-dialog-custom.tsx [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__9d08ee54._.js","server/chunks/ssr/a0629__pnpm_a0c33371._.js"],"async":false}},"[project]/Documents/go-new/chinese-family-tree/app/members/[id]/page.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/Documents/go-new/chinese-family-tree/app/members/[id]/page.tsx [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__9d08ee54._.js","server/chunks/ssr/a0629__pnpm_a0c33371._.js","server/chunks/ssr/[root-of-the-server]__10b90bc2._.js","server/chunks/ssr/4e98a_next_dist_c8d928f7._.js","server/chunks/ssr/f6bfd_@radix-ui_react-select_dist_index_mjs_9c1e4dbd._.js","server/chunks/ssr/3032b_dexie_289025a5._.js","server/chunks/ssr/a0629__pnpm_a5a9d9cf._.js"],"async":false}}},"edgeSSRModuleMapping":{},"rscModuleMapping":{"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/components/layout-router.js [app-client] (ecmascript)":{"*":{"id":"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/client/components/layout-router.js [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/components/render-from-template-context.js [app-client] (ecmascript)":{"*":{"id":"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/client/components/render-from-template-context.js [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/components/client-page.js [app-client] (ecmascript)":{"*":{"id":"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/client/components/client-page.js [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/components/client-segment.js [app-client] (ecmascript)":{"*":{"id":"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/client/components/client-segment.js [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/components/http-access-fallback/error-boundary.js [app-client] (ecmascript)":{"*":{"id":"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/client/components/http-access-fallback/error-boundary.js [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/lib/metadata/generate/icon-mark.js [app-client] (ecmascript)":{"*":{"id":"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/lib/metadata/generate/icon-mark.js [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/lib/framework/boundary-components.js [app-client] (ecmascript)":{"*":{"id":"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/lib/framework/boundary-components.js [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/next-devtools/userspace/app/segment-explorer-node.js [app-client] (ecmascript)":{"*":{"id":"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/next-devtools/userspace/app/segment-explorer-node.js [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/components/builtin/global-error.js [app-client] (ecmascript)":{"*":{"id":"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/components/builtin/global-error.js [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/@vercel+analytics@1.5.0_next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0__react@19.2.0/node_modules/@vercel/analytics/dist/next/index.mjs [app-client] (ecmascript)":{"*":{"id":"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/@vercel+analytics@1.5.0_next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0__react@19.2.0/node_modules/@vercel/analytics/dist/next/index.mjs [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/Documents/go-new/chinese-family-tree/context/family-context.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/Documents/go-new/chinese-family-tree/context/family-context.tsx [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/Documents/go-new/chinese-family-tree/components/pwa/pwa-provider.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/Documents/go-new/chinese-family-tree/components/pwa/pwa-provider.tsx [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/Documents/go-new/chinese-family-tree/components/providers/session-provider.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/Documents/go-new/chinese-family-tree/components/providers/session-provider.tsx [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/Documents/go-new/chinese-family-tree/components/ui/alert-dialog-custom.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/Documents/go-new/chinese-family-tree/components/ui/alert-dialog-custom.tsx [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/Documents/go-new/chinese-family-tree/app/members/[id]/page.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/Documents/go-new/chinese-family-tree/app/members/[id]/page.tsx [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}}},"edgeRscModuleMapping":{},"entryCSSFiles":{"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/components/builtin/global-error":[],"[project]/Documents/go-new/chinese-family-tree/app/layout":[{"path":"static/chunks/[root-of-the-server]__6d150df4._.css","inlined":false}],"[project]/Documents/go-new/chinese-family-tree/app/members/[id]/page":[{"path":"static/chunks/[root-of-the-server]__6d150df4._.css","inlined":false},{"path":"static/chunks/4c051_react-image-crop_dist_ReactCrop_bde06fd8.css","inlined":false}]},"entryJSFiles":{"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/components/builtin/global-error":["static/chunks/4e98a_next_dist_85312e63._.js","static/chunks/4e98a_next_dist_client_components_builtin_global-error_98813eb2.js"],"[project]/Documents/go-new/chinese-family-tree/app/layout":["static/chunks/Documents_go-new_chinese-family-tree_2268dbd5._.js","static/chunks/a0629__pnpm_8124a564._.js","static/chunks/Documents_go-new_chinese-family-tree_app_layout_tsx_98813eb2._.js"],"[project]/Documents/go-new/chinese-family-tree/app/members/[id]/page":["static/chunks/Documents_go-new_chinese-family-tree_2268dbd5._.js","static/chunks/a0629__pnpm_8124a564._.js","static/chunks/Documents_go-new_chinese-family-tree_app_layout_tsx_98813eb2._.js","static/chunks/Documents_go-new_chinese-family-tree_fa7c1a71._.js","static/chunks/a0629__pnpm_a5fa0ed9._.js","static/chunks/Documents_go-new_chinese-family-tree_app_members_[id]_page_tsx_03538adf._.js"]}} +globalThis.__RSC_MANIFEST["/members/[id]/page"] = {"moduleLoading":{"prefix":"","crossOrigin":null},"clientModules":{"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/client/components/layout-router.js ":{"id":"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/components/layout-router.js [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/4e98a_next_dist_85312e63._.js","/_next/static/chunks/4e98a_next_dist_client_components_builtin_global-error_98813eb2.js"],"async":false},"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/client/components/layout-router.js":{"id":"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/components/layout-router.js [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/4e98a_next_dist_85312e63._.js","/_next/static/chunks/4e98a_next_dist_client_components_builtin_global-error_98813eb2.js"],"async":false},"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/client/components/render-from-template-context.js ":{"id":"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/components/render-from-template-context.js [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/4e98a_next_dist_85312e63._.js","/_next/static/chunks/4e98a_next_dist_client_components_builtin_global-error_98813eb2.js"],"async":false},"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/client/components/render-from-template-context.js":{"id":"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/components/render-from-template-context.js [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/4e98a_next_dist_85312e63._.js","/_next/static/chunks/4e98a_next_dist_client_components_builtin_global-error_98813eb2.js"],"async":false},"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/client/components/client-page.js ":{"id":"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/components/client-page.js [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/4e98a_next_dist_85312e63._.js","/_next/static/chunks/4e98a_next_dist_client_components_builtin_global-error_98813eb2.js"],"async":false},"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/client/components/client-page.js":{"id":"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/components/client-page.js [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/4e98a_next_dist_85312e63._.js","/_next/static/chunks/4e98a_next_dist_client_components_builtin_global-error_98813eb2.js"],"async":false},"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/client/components/client-segment.js ":{"id":"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/components/client-segment.js [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/4e98a_next_dist_85312e63._.js","/_next/static/chunks/4e98a_next_dist_client_components_builtin_global-error_98813eb2.js"],"async":false},"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/client/components/client-segment.js":{"id":"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/components/client-segment.js [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/4e98a_next_dist_85312e63._.js","/_next/static/chunks/4e98a_next_dist_client_components_builtin_global-error_98813eb2.js"],"async":false},"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/client/components/http-access-fallback/error-boundary.js ":{"id":"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/components/http-access-fallback/error-boundary.js [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/4e98a_next_dist_85312e63._.js","/_next/static/chunks/4e98a_next_dist_client_components_builtin_global-error_98813eb2.js"],"async":false},"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/client/components/http-access-fallback/error-boundary.js":{"id":"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/components/http-access-fallback/error-boundary.js [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/4e98a_next_dist_85312e63._.js","/_next/static/chunks/4e98a_next_dist_client_components_builtin_global-error_98813eb2.js"],"async":false},"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/lib/metadata/generate/icon-mark.js ":{"id":"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/lib/metadata/generate/icon-mark.js [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/4e98a_next_dist_85312e63._.js","/_next/static/chunks/4e98a_next_dist_client_components_builtin_global-error_98813eb2.js"],"async":false},"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/lib/metadata/generate/icon-mark.js":{"id":"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/lib/metadata/generate/icon-mark.js [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/4e98a_next_dist_85312e63._.js","/_next/static/chunks/4e98a_next_dist_client_components_builtin_global-error_98813eb2.js"],"async":false},"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/lib/framework/boundary-components.js ":{"id":"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/lib/framework/boundary-components.js [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/4e98a_next_dist_85312e63._.js","/_next/static/chunks/4e98a_next_dist_client_components_builtin_global-error_98813eb2.js"],"async":false},"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/lib/framework/boundary-components.js":{"id":"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/lib/framework/boundary-components.js [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/4e98a_next_dist_85312e63._.js","/_next/static/chunks/4e98a_next_dist_client_components_builtin_global-error_98813eb2.js"],"async":false},"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/next-devtools/userspace/app/segment-explorer-node.js ":{"id":"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/next-devtools/userspace/app/segment-explorer-node.js [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/4e98a_next_dist_85312e63._.js","/_next/static/chunks/4e98a_next_dist_client_components_builtin_global-error_98813eb2.js"],"async":false},"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/next-devtools/userspace/app/segment-explorer-node.js":{"id":"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/next-devtools/userspace/app/segment-explorer-node.js [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/4e98a_next_dist_85312e63._.js","/_next/static/chunks/4e98a_next_dist_client_components_builtin_global-error_98813eb2.js"],"async":false},"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/components/builtin/global-error.js ":{"id":"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/components/builtin/global-error.js [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/4e98a_next_dist_85312e63._.js","/_next/static/chunks/4e98a_next_dist_client_components_builtin_global-error_98813eb2.js"],"async":false},"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/components/builtin/global-error.js":{"id":"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/components/builtin/global-error.js [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/4e98a_next_dist_85312e63._.js","/_next/static/chunks/4e98a_next_dist_client_components_builtin_global-error_98813eb2.js"],"async":false},"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/@vercel+analytics@1.5.0_next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0__react@19.2.0/node_modules/@vercel/analytics/dist/next/index.mjs ":{"id":"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/@vercel+analytics@1.5.0_next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0__react@19.2.0/node_modules/@vercel/analytics/dist/next/index.mjs [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/Documents_go-new_chinese-family-tree_2268dbd5._.js","/_next/static/chunks/a0629__pnpm_8124a564._.js","/_next/static/chunks/Documents_go-new_chinese-family-tree_app_layout_tsx_98813eb2._.js"],"async":false},"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/@vercel+analytics@1.5.0_next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0__react@19.2.0/node_modules/@vercel/analytics/dist/next/index.mjs":{"id":"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/@vercel+analytics@1.5.0_next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0__react@19.2.0/node_modules/@vercel/analytics/dist/next/index.mjs [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/Documents_go-new_chinese-family-tree_2268dbd5._.js","/_next/static/chunks/a0629__pnpm_8124a564._.js","/_next/static/chunks/Documents_go-new_chinese-family-tree_app_layout_tsx_98813eb2._.js"],"async":false},"[project]/Documents/go-new/chinese-family-tree/context/family-context.tsx ":{"id":"[project]/Documents/go-new/chinese-family-tree/context/family-context.tsx [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/Documents_go-new_chinese-family-tree_2268dbd5._.js","/_next/static/chunks/a0629__pnpm_8124a564._.js","/_next/static/chunks/Documents_go-new_chinese-family-tree_app_layout_tsx_98813eb2._.js"],"async":false},"[project]/Documents/go-new/chinese-family-tree/context/family-context.tsx":{"id":"[project]/Documents/go-new/chinese-family-tree/context/family-context.tsx [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/Documents_go-new_chinese-family-tree_2268dbd5._.js","/_next/static/chunks/a0629__pnpm_8124a564._.js","/_next/static/chunks/Documents_go-new_chinese-family-tree_app_layout_tsx_98813eb2._.js"],"async":false},"[project]/Documents/go-new/chinese-family-tree/components/pwa/pwa-provider.tsx ":{"id":"[project]/Documents/go-new/chinese-family-tree/components/pwa/pwa-provider.tsx [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/Documents_go-new_chinese-family-tree_2268dbd5._.js","/_next/static/chunks/a0629__pnpm_8124a564._.js","/_next/static/chunks/Documents_go-new_chinese-family-tree_app_layout_tsx_98813eb2._.js"],"async":false},"[project]/Documents/go-new/chinese-family-tree/components/pwa/pwa-provider.tsx":{"id":"[project]/Documents/go-new/chinese-family-tree/components/pwa/pwa-provider.tsx [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/Documents_go-new_chinese-family-tree_2268dbd5._.js","/_next/static/chunks/a0629__pnpm_8124a564._.js","/_next/static/chunks/Documents_go-new_chinese-family-tree_app_layout_tsx_98813eb2._.js"],"async":false},"[project]/Documents/go-new/chinese-family-tree/components/providers/session-provider.tsx ":{"id":"[project]/Documents/go-new/chinese-family-tree/components/providers/session-provider.tsx [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/Documents_go-new_chinese-family-tree_2268dbd5._.js","/_next/static/chunks/a0629__pnpm_8124a564._.js","/_next/static/chunks/Documents_go-new_chinese-family-tree_app_layout_tsx_98813eb2._.js"],"async":false},"[project]/Documents/go-new/chinese-family-tree/components/providers/session-provider.tsx":{"id":"[project]/Documents/go-new/chinese-family-tree/components/providers/session-provider.tsx [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/Documents_go-new_chinese-family-tree_2268dbd5._.js","/_next/static/chunks/a0629__pnpm_8124a564._.js","/_next/static/chunks/Documents_go-new_chinese-family-tree_app_layout_tsx_98813eb2._.js"],"async":false},"[project]/Documents/go-new/chinese-family-tree/components/ui/alert-dialog-custom.tsx ":{"id":"[project]/Documents/go-new/chinese-family-tree/components/ui/alert-dialog-custom.tsx [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/Documents_go-new_chinese-family-tree_2268dbd5._.js","/_next/static/chunks/a0629__pnpm_8124a564._.js","/_next/static/chunks/Documents_go-new_chinese-family-tree_app_layout_tsx_98813eb2._.js"],"async":false},"[project]/Documents/go-new/chinese-family-tree/components/ui/alert-dialog-custom.tsx":{"id":"[project]/Documents/go-new/chinese-family-tree/components/ui/alert-dialog-custom.tsx [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/Documents_go-new_chinese-family-tree_2268dbd5._.js","/_next/static/chunks/a0629__pnpm_8124a564._.js","/_next/static/chunks/Documents_go-new_chinese-family-tree_app_layout_tsx_98813eb2._.js"],"async":false},"[project]/Documents/go-new/chinese-family-tree/app/members/[id]/page.tsx ":{"id":"[project]/Documents/go-new/chinese-family-tree/app/members/[id]/page.tsx [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/Documents_go-new_chinese-family-tree_2268dbd5._.js","/_next/static/chunks/a0629__pnpm_8124a564._.js","/_next/static/chunks/Documents_go-new_chinese-family-tree_app_layout_tsx_98813eb2._.js","/_next/static/chunks/Documents_go-new_chinese-family-tree_fa7c1a71._.js","/_next/static/chunks/a0629__pnpm_98cfd81b._.js","/_next/static/chunks/Documents_go-new_chinese-family-tree_app_members_%5Bid%5D_page_tsx_03538adf._.js"],"async":false},"[project]/Documents/go-new/chinese-family-tree/app/members/[id]/page.tsx":{"id":"[project]/Documents/go-new/chinese-family-tree/app/members/[id]/page.tsx [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/Documents_go-new_chinese-family-tree_2268dbd5._.js","/_next/static/chunks/a0629__pnpm_8124a564._.js","/_next/static/chunks/Documents_go-new_chinese-family-tree_app_layout_tsx_98813eb2._.js","/_next/static/chunks/Documents_go-new_chinese-family-tree_fa7c1a71._.js","/_next/static/chunks/a0629__pnpm_98cfd81b._.js","/_next/static/chunks/Documents_go-new_chinese-family-tree_app_members_%5Bid%5D_page_tsx_03538adf._.js"],"async":false}},"ssrModuleMapping":{"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/components/layout-router.js [app-client] (ecmascript)":{"*":{"id":"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/client/components/layout-router.js [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/4e98a_next_dist_8a92b219._.js","server/chunks/ssr/[root-of-the-server]__1aaf5479._.js"],"async":false}},"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/components/render-from-template-context.js [app-client] (ecmascript)":{"*":{"id":"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/client/components/render-from-template-context.js [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/4e98a_next_dist_8a92b219._.js","server/chunks/ssr/[root-of-the-server]__1aaf5479._.js"],"async":false}},"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/components/client-page.js [app-client] (ecmascript)":{"*":{"id":"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/client/components/client-page.js [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/4e98a_next_dist_8a92b219._.js","server/chunks/ssr/[root-of-the-server]__1aaf5479._.js"],"async":false}},"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/components/client-segment.js [app-client] (ecmascript)":{"*":{"id":"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/client/components/client-segment.js [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/4e98a_next_dist_8a92b219._.js","server/chunks/ssr/[root-of-the-server]__1aaf5479._.js"],"async":false}},"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/components/http-access-fallback/error-boundary.js [app-client] (ecmascript)":{"*":{"id":"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/client/components/http-access-fallback/error-boundary.js [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/4e98a_next_dist_8a92b219._.js","server/chunks/ssr/[root-of-the-server]__1aaf5479._.js"],"async":false}},"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/lib/metadata/generate/icon-mark.js [app-client] (ecmascript)":{"*":{"id":"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/lib/metadata/generate/icon-mark.js [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/4e98a_next_dist_8a92b219._.js","server/chunks/ssr/[root-of-the-server]__1aaf5479._.js"],"async":false}},"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/lib/framework/boundary-components.js [app-client] (ecmascript)":{"*":{"id":"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/lib/framework/boundary-components.js [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/4e98a_next_dist_8a92b219._.js","server/chunks/ssr/[root-of-the-server]__1aaf5479._.js"],"async":false}},"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/next-devtools/userspace/app/segment-explorer-node.js [app-client] (ecmascript)":{"*":{"id":"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/next-devtools/userspace/app/segment-explorer-node.js [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/4e98a_next_dist_8a92b219._.js","server/chunks/ssr/[root-of-the-server]__1aaf5479._.js"],"async":false}},"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/components/builtin/global-error.js [app-client] (ecmascript)":{"*":{"id":"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/components/builtin/global-error.js [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/4e98a_next_dist_8a92b219._.js","server/chunks/ssr/[root-of-the-server]__1aaf5479._.js"],"async":false}},"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/@vercel+analytics@1.5.0_next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0__react@19.2.0/node_modules/@vercel/analytics/dist/next/index.mjs [app-client] (ecmascript)":{"*":{"id":"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/@vercel+analytics@1.5.0_next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0__react@19.2.0/node_modules/@vercel/analytics/dist/next/index.mjs [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__9d08ee54._.js","server/chunks/ssr/a0629__pnpm_a0c33371._.js"],"async":false}},"[project]/Documents/go-new/chinese-family-tree/context/family-context.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/Documents/go-new/chinese-family-tree/context/family-context.tsx [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__9d08ee54._.js","server/chunks/ssr/a0629__pnpm_a0c33371._.js"],"async":false}},"[project]/Documents/go-new/chinese-family-tree/components/pwa/pwa-provider.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/Documents/go-new/chinese-family-tree/components/pwa/pwa-provider.tsx [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__9d08ee54._.js","server/chunks/ssr/a0629__pnpm_a0c33371._.js"],"async":false}},"[project]/Documents/go-new/chinese-family-tree/components/providers/session-provider.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/Documents/go-new/chinese-family-tree/components/providers/session-provider.tsx [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__9d08ee54._.js","server/chunks/ssr/a0629__pnpm_a0c33371._.js"],"async":false}},"[project]/Documents/go-new/chinese-family-tree/components/ui/alert-dialog-custom.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/Documents/go-new/chinese-family-tree/components/ui/alert-dialog-custom.tsx [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__9d08ee54._.js","server/chunks/ssr/a0629__pnpm_a0c33371._.js"],"async":false}},"[project]/Documents/go-new/chinese-family-tree/app/members/[id]/page.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/Documents/go-new/chinese-family-tree/app/members/[id]/page.tsx [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__9d08ee54._.js","server/chunks/ssr/a0629__pnpm_a0c33371._.js","server/chunks/ssr/[root-of-the-server]__10b90bc2._.js","server/chunks/ssr/4e98a_next_dist_c8d928f7._.js","server/chunks/ssr/f6bfd_@radix-ui_react-select_dist_index_mjs_9c1e4dbd._.js","server/chunks/ssr/3032b_dexie_289025a5._.js","server/chunks/ssr/a0629__pnpm_7c1f1e29._.js"],"async":false}}},"edgeSSRModuleMapping":{},"rscModuleMapping":{"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/components/layout-router.js [app-client] (ecmascript)":{"*":{"id":"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/client/components/layout-router.js [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/components/render-from-template-context.js [app-client] (ecmascript)":{"*":{"id":"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/client/components/render-from-template-context.js [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/components/client-page.js [app-client] (ecmascript)":{"*":{"id":"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/client/components/client-page.js [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/components/client-segment.js [app-client] (ecmascript)":{"*":{"id":"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/client/components/client-segment.js [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/components/http-access-fallback/error-boundary.js [app-client] (ecmascript)":{"*":{"id":"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/client/components/http-access-fallback/error-boundary.js [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/lib/metadata/generate/icon-mark.js [app-client] (ecmascript)":{"*":{"id":"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/lib/metadata/generate/icon-mark.js [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/lib/framework/boundary-components.js [app-client] (ecmascript)":{"*":{"id":"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/lib/framework/boundary-components.js [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/next-devtools/userspace/app/segment-explorer-node.js [app-client] (ecmascript)":{"*":{"id":"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/next-devtools/userspace/app/segment-explorer-node.js [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/components/builtin/global-error.js [app-client] (ecmascript)":{"*":{"id":"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/components/builtin/global-error.js [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/@vercel+analytics@1.5.0_next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0__react@19.2.0/node_modules/@vercel/analytics/dist/next/index.mjs [app-client] (ecmascript)":{"*":{"id":"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/@vercel+analytics@1.5.0_next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0__react@19.2.0/node_modules/@vercel/analytics/dist/next/index.mjs [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/Documents/go-new/chinese-family-tree/context/family-context.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/Documents/go-new/chinese-family-tree/context/family-context.tsx [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/Documents/go-new/chinese-family-tree/components/pwa/pwa-provider.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/Documents/go-new/chinese-family-tree/components/pwa/pwa-provider.tsx [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/Documents/go-new/chinese-family-tree/components/providers/session-provider.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/Documents/go-new/chinese-family-tree/components/providers/session-provider.tsx [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/Documents/go-new/chinese-family-tree/components/ui/alert-dialog-custom.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/Documents/go-new/chinese-family-tree/components/ui/alert-dialog-custom.tsx [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/Documents/go-new/chinese-family-tree/app/members/[id]/page.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/Documents/go-new/chinese-family-tree/app/members/[id]/page.tsx [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}}},"edgeRscModuleMapping":{},"entryCSSFiles":{"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/components/builtin/global-error":[],"[project]/Documents/go-new/chinese-family-tree/app/layout":[{"path":"static/chunks/[root-of-the-server]__6d150df4._.css","inlined":false}],"[project]/Documents/go-new/chinese-family-tree/app/members/[id]/page":[{"path":"static/chunks/[root-of-the-server]__6d150df4._.css","inlined":false},{"path":"static/chunks/4c051_react-image-crop_dist_ReactCrop_bde06fd8.css","inlined":false}]},"entryJSFiles":{"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/components/builtin/global-error":["static/chunks/4e98a_next_dist_85312e63._.js","static/chunks/4e98a_next_dist_client_components_builtin_global-error_98813eb2.js"],"[project]/Documents/go-new/chinese-family-tree/app/layout":["static/chunks/Documents_go-new_chinese-family-tree_2268dbd5._.js","static/chunks/a0629__pnpm_8124a564._.js","static/chunks/Documents_go-new_chinese-family-tree_app_layout_tsx_98813eb2._.js"],"[project]/Documents/go-new/chinese-family-tree/app/members/[id]/page":["static/chunks/Documents_go-new_chinese-family-tree_2268dbd5._.js","static/chunks/a0629__pnpm_8124a564._.js","static/chunks/Documents_go-new_chinese-family-tree_app_layout_tsx_98813eb2._.js","static/chunks/Documents_go-new_chinese-family-tree_fa7c1a71._.js","static/chunks/a0629__pnpm_98cfd81b._.js","static/chunks/Documents_go-new_chinese-family-tree_app_members_[id]_page_tsx_03538adf._.js"]}} diff --git a/.next/dev/server/app/members/new/page.js b/.next/dev/server/app/members/new/page.js new file mode 100644 index 00000000..77f33028 --- /dev/null +++ b/.next/dev/server/app/members/new/page.js @@ -0,0 +1,15 @@ +var R=require("../../../chunks/ssr/[turbopack]_runtime.js")("server/app/members/new/page.js") +R.c("server/chunks/ssr/4e98a_next_dist_03c86f03._.js") +R.c("server/chunks/ssr/[root-of-the-server]__ebcf4d5f._.js") +R.c("server/chunks/ssr/4e98a_next_dist_0643e073._.js") +R.c("server/chunks/ssr/[root-of-the-server]__7f148858._.js") +R.c("server/chunks/ssr/4e98a_next_dist_client_components_builtin_global-error_196f2367.js") +R.c("server/chunks/ssr/[root-of-the-server]__b37c7274._.js") +R.c("server/chunks/ssr/Documents_go-new_chinese-family-tree_app_loading_tsx_b1f283e0._.js") +R.c("server/chunks/ssr/4e98a_next_dist_client_components_1ee43648._.js") +R.c("server/chunks/ssr/4e98a_next_dist_client_components_builtin_forbidden_243a9611.js") +R.c("server/chunks/ssr/4e98a_next_dist_client_components_builtin_unauthorized_719c1458.js") +R.c("server/chunks/ssr/Documents_go-new_chinese-family-tree_app_members_loading_tsx_ed6b6dde._.js") +R.c("server/chunks/ssr/fb354_chinese-family-tree__next-internal_server_app_members_new_page_actions_269eb31e.js") +R.m("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/build/templates/app-page.js?page=/members/new/page { GLOBAL_ERROR_MODULE => \"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/components/builtin/global-error.js [app-rsc] (ecmascript, Next.js Server Component)\", MODULE_0 => \"[project]/Documents/go-new/chinese-family-tree/app/layout.tsx [app-rsc] (ecmascript, Next.js Server Component)\", MODULE_1 => \"[project]/Documents/go-new/chinese-family-tree/app/loading.tsx [app-rsc] (ecmascript, Next.js Server Component)\", MODULE_2 => \"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/components/builtin/not-found.js [app-rsc] (ecmascript, Next.js Server Component)\", MODULE_3 => \"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/components/builtin/forbidden.js [app-rsc] (ecmascript, Next.js Server Component)\", MODULE_4 => \"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/components/builtin/unauthorized.js [app-rsc] (ecmascript, Next.js Server Component)\", MODULE_5 => \"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/components/builtin/global-error.js [app-rsc] (ecmascript, Next.js Server Component)\", MODULE_6 => \"[project]/Documents/go-new/chinese-family-tree/app/members/loading.tsx [app-rsc] (ecmascript, Next.js Server Component)\", MODULE_7 => \"[project]/Documents/go-new/chinese-family-tree/app/members/new/page.tsx [app-rsc] (ecmascript, Next.js Server Component)\" } [app-rsc] (ecmascript)") +module.exports=R.m("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/build/templates/app-page.js?page=/members/new/page { GLOBAL_ERROR_MODULE => \"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/components/builtin/global-error.js [app-rsc] (ecmascript, Next.js Server Component)\", MODULE_0 => \"[project]/Documents/go-new/chinese-family-tree/app/layout.tsx [app-rsc] (ecmascript, Next.js Server Component)\", MODULE_1 => \"[project]/Documents/go-new/chinese-family-tree/app/loading.tsx [app-rsc] (ecmascript, Next.js Server Component)\", MODULE_2 => \"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/components/builtin/not-found.js [app-rsc] (ecmascript, Next.js Server Component)\", MODULE_3 => \"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/components/builtin/forbidden.js [app-rsc] (ecmascript, Next.js Server Component)\", MODULE_4 => \"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/components/builtin/unauthorized.js [app-rsc] (ecmascript, Next.js Server Component)\", MODULE_5 => \"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/components/builtin/global-error.js [app-rsc] (ecmascript, Next.js Server Component)\", MODULE_6 => \"[project]/Documents/go-new/chinese-family-tree/app/members/loading.tsx [app-rsc] (ecmascript, Next.js Server Component)\", MODULE_7 => \"[project]/Documents/go-new/chinese-family-tree/app/members/new/page.tsx [app-rsc] (ecmascript, Next.js Server Component)\" } [app-rsc] (ecmascript)").exports diff --git a/.next/dev/server/app/members/new/page.js.map b/.next/dev/server/app/members/new/page.js.map new file mode 100644 index 00000000..c15d7ec0 --- /dev/null +++ b/.next/dev/server/app/members/new/page.js.map @@ -0,0 +1,5 @@ +{ + "version": 3, + "sources": [], + "sections": [] +} \ No newline at end of file diff --git a/.next/dev/server/app/members/new/page/app-paths-manifest.json b/.next/dev/server/app/members/new/page/app-paths-manifest.json new file mode 100644 index 00000000..0a7e7df4 --- /dev/null +++ b/.next/dev/server/app/members/new/page/app-paths-manifest.json @@ -0,0 +1,3 @@ +{ + "/members/new/page": "app/members/new/page.js" +} \ No newline at end of file diff --git a/.next/dev/server/app/members/new/page/build-manifest.json b/.next/dev/server/app/members/new/page/build-manifest.json new file mode 100644 index 00000000..c38372f3 --- /dev/null +++ b/.next/dev/server/app/members/new/page/build-manifest.json @@ -0,0 +1,22 @@ +{ + "devFiles": [], + "ampDevFiles": [], + "polyfillFiles": [ + "static/chunks/4e98a_next_dist_build_polyfills_polyfill-nomodule.js" + ], + "lowPriorityFiles": [], + "rootMainFiles": [ + "static/chunks/[turbopack]_browser_dev_hmr-client_hmr-client_ts_67e3ae72._.js", + "static/chunks/4e98a_next_dist_compiled_react-dom_da552622._.js", + "static/chunks/4e98a_next_dist_compiled_react-server-dom-turbopack_c5146742._.js", + "static/chunks/4e98a_next_dist_compiled_next-devtools_index_59922e46.js", + "static/chunks/4e98a_next_dist_compiled_21c48460._.js", + "static/chunks/4e98a_next_dist_client_d594727a._.js", + "static/chunks/4e98a_next_dist_24912bf1._.js", + "static/chunks/6704b_@swc_helpers_cjs_8771abe4._.js", + "static/chunks/Documents_go-new_chinese-family-tree_a0ff3932._.js", + "static/chunks/turbopack-Documents_go-new_chinese-family-tree_b39b5e67._.js" + ], + "pages": {}, + "ampFirstPages": [] +} \ No newline at end of file diff --git a/.next/dev/server/app/members/new/page/next-font-manifest.json b/.next/dev/server/app/members/new/page/next-font-manifest.json new file mode 100644 index 00000000..acf6422a --- /dev/null +++ b/.next/dev/server/app/members/new/page/next-font-manifest.json @@ -0,0 +1,11 @@ +{ + "pages": {}, + "app": { + "[project]/Documents/go-new/chinese-family-tree/app/members/new/page": [ + "static/media/caa3a2e1cccd8315-s.p.853070df.woff2", + "static/media/797e433ab948586e-s.p.dbea232f.woff2" + ] + }, + "appUsingSizeAdjust": true, + "pagesUsingSizeAdjust": false +} \ No newline at end of file diff --git a/.next/dev/server/app/members/new/page/react-loadable-manifest.json b/.next/dev/server/app/members/new/page/react-loadable-manifest.json new file mode 100644 index 00000000..9e26dfee --- /dev/null +++ b/.next/dev/server/app/members/new/page/react-loadable-manifest.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/.next/dev/server/app/members/new/page/server-reference-manifest.json b/.next/dev/server/app/members/new/page/server-reference-manifest.json new file mode 100644 index 00000000..27a92af5 --- /dev/null +++ b/.next/dev/server/app/members/new/page/server-reference-manifest.json @@ -0,0 +1,4 @@ +{ + "node": {}, + "edge": {} +} \ No newline at end of file diff --git a/.next/dev/server/app/members/new/page_client-reference-manifest.js b/.next/dev/server/app/members/new/page_client-reference-manifest.js new file mode 100644 index 00000000..f0d40b22 --- /dev/null +++ b/.next/dev/server/app/members/new/page_client-reference-manifest.js @@ -0,0 +1,2 @@ +globalThis.__RSC_MANIFEST = globalThis.__RSC_MANIFEST || {}; +globalThis.__RSC_MANIFEST["/members/new/page"] = {"moduleLoading":{"prefix":"","crossOrigin":null},"clientModules":{"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/client/components/layout-router.js ":{"id":"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/components/layout-router.js [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/4e98a_next_dist_85312e63._.js","/_next/static/chunks/4e98a_next_dist_client_components_builtin_global-error_98813eb2.js"],"async":false},"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/client/components/layout-router.js":{"id":"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/components/layout-router.js [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/4e98a_next_dist_85312e63._.js","/_next/static/chunks/4e98a_next_dist_client_components_builtin_global-error_98813eb2.js"],"async":false},"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/client/components/render-from-template-context.js ":{"id":"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/components/render-from-template-context.js [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/4e98a_next_dist_85312e63._.js","/_next/static/chunks/4e98a_next_dist_client_components_builtin_global-error_98813eb2.js"],"async":false},"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/client/components/render-from-template-context.js":{"id":"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/components/render-from-template-context.js [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/4e98a_next_dist_85312e63._.js","/_next/static/chunks/4e98a_next_dist_client_components_builtin_global-error_98813eb2.js"],"async":false},"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/client/components/client-page.js ":{"id":"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/components/client-page.js [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/4e98a_next_dist_85312e63._.js","/_next/static/chunks/4e98a_next_dist_client_components_builtin_global-error_98813eb2.js"],"async":false},"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/client/components/client-page.js":{"id":"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/components/client-page.js [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/4e98a_next_dist_85312e63._.js","/_next/static/chunks/4e98a_next_dist_client_components_builtin_global-error_98813eb2.js"],"async":false},"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/client/components/client-segment.js ":{"id":"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/components/client-segment.js [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/4e98a_next_dist_85312e63._.js","/_next/static/chunks/4e98a_next_dist_client_components_builtin_global-error_98813eb2.js"],"async":false},"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/client/components/client-segment.js":{"id":"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/components/client-segment.js [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/4e98a_next_dist_85312e63._.js","/_next/static/chunks/4e98a_next_dist_client_components_builtin_global-error_98813eb2.js"],"async":false},"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/client/components/http-access-fallback/error-boundary.js ":{"id":"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/components/http-access-fallback/error-boundary.js [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/4e98a_next_dist_85312e63._.js","/_next/static/chunks/4e98a_next_dist_client_components_builtin_global-error_98813eb2.js"],"async":false},"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/client/components/http-access-fallback/error-boundary.js":{"id":"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/components/http-access-fallback/error-boundary.js [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/4e98a_next_dist_85312e63._.js","/_next/static/chunks/4e98a_next_dist_client_components_builtin_global-error_98813eb2.js"],"async":false},"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/lib/metadata/generate/icon-mark.js ":{"id":"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/lib/metadata/generate/icon-mark.js [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/4e98a_next_dist_85312e63._.js","/_next/static/chunks/4e98a_next_dist_client_components_builtin_global-error_98813eb2.js"],"async":false},"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/lib/metadata/generate/icon-mark.js":{"id":"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/lib/metadata/generate/icon-mark.js [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/4e98a_next_dist_85312e63._.js","/_next/static/chunks/4e98a_next_dist_client_components_builtin_global-error_98813eb2.js"],"async":false},"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/lib/framework/boundary-components.js ":{"id":"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/lib/framework/boundary-components.js [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/4e98a_next_dist_85312e63._.js","/_next/static/chunks/4e98a_next_dist_client_components_builtin_global-error_98813eb2.js"],"async":false},"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/lib/framework/boundary-components.js":{"id":"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/lib/framework/boundary-components.js [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/4e98a_next_dist_85312e63._.js","/_next/static/chunks/4e98a_next_dist_client_components_builtin_global-error_98813eb2.js"],"async":false},"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/next-devtools/userspace/app/segment-explorer-node.js ":{"id":"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/next-devtools/userspace/app/segment-explorer-node.js [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/4e98a_next_dist_85312e63._.js","/_next/static/chunks/4e98a_next_dist_client_components_builtin_global-error_98813eb2.js"],"async":false},"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/next-devtools/userspace/app/segment-explorer-node.js":{"id":"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/next-devtools/userspace/app/segment-explorer-node.js [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/4e98a_next_dist_85312e63._.js","/_next/static/chunks/4e98a_next_dist_client_components_builtin_global-error_98813eb2.js"],"async":false},"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/components/builtin/global-error.js ":{"id":"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/components/builtin/global-error.js [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/4e98a_next_dist_85312e63._.js","/_next/static/chunks/4e98a_next_dist_client_components_builtin_global-error_98813eb2.js"],"async":false},"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/components/builtin/global-error.js":{"id":"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/components/builtin/global-error.js [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/4e98a_next_dist_85312e63._.js","/_next/static/chunks/4e98a_next_dist_client_components_builtin_global-error_98813eb2.js"],"async":false},"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/@vercel+analytics@1.5.0_next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0__react@19.2.0/node_modules/@vercel/analytics/dist/next/index.mjs ":{"id":"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/@vercel+analytics@1.5.0_next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0__react@19.2.0/node_modules/@vercel/analytics/dist/next/index.mjs [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/Documents_go-new_chinese-family-tree_2268dbd5._.js","/_next/static/chunks/a0629__pnpm_8124a564._.js","/_next/static/chunks/Documents_go-new_chinese-family-tree_app_layout_tsx_98813eb2._.js"],"async":false},"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/@vercel+analytics@1.5.0_next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0__react@19.2.0/node_modules/@vercel/analytics/dist/next/index.mjs":{"id":"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/@vercel+analytics@1.5.0_next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0__react@19.2.0/node_modules/@vercel/analytics/dist/next/index.mjs [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/Documents_go-new_chinese-family-tree_2268dbd5._.js","/_next/static/chunks/a0629__pnpm_8124a564._.js","/_next/static/chunks/Documents_go-new_chinese-family-tree_app_layout_tsx_98813eb2._.js"],"async":false},"[project]/Documents/go-new/chinese-family-tree/context/family-context.tsx ":{"id":"[project]/Documents/go-new/chinese-family-tree/context/family-context.tsx [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/Documents_go-new_chinese-family-tree_2268dbd5._.js","/_next/static/chunks/a0629__pnpm_8124a564._.js","/_next/static/chunks/Documents_go-new_chinese-family-tree_app_layout_tsx_98813eb2._.js"],"async":false},"[project]/Documents/go-new/chinese-family-tree/context/family-context.tsx":{"id":"[project]/Documents/go-new/chinese-family-tree/context/family-context.tsx [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/Documents_go-new_chinese-family-tree_2268dbd5._.js","/_next/static/chunks/a0629__pnpm_8124a564._.js","/_next/static/chunks/Documents_go-new_chinese-family-tree_app_layout_tsx_98813eb2._.js"],"async":false},"[project]/Documents/go-new/chinese-family-tree/components/pwa/pwa-provider.tsx ":{"id":"[project]/Documents/go-new/chinese-family-tree/components/pwa/pwa-provider.tsx [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/Documents_go-new_chinese-family-tree_2268dbd5._.js","/_next/static/chunks/a0629__pnpm_8124a564._.js","/_next/static/chunks/Documents_go-new_chinese-family-tree_app_layout_tsx_98813eb2._.js"],"async":false},"[project]/Documents/go-new/chinese-family-tree/components/pwa/pwa-provider.tsx":{"id":"[project]/Documents/go-new/chinese-family-tree/components/pwa/pwa-provider.tsx [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/Documents_go-new_chinese-family-tree_2268dbd5._.js","/_next/static/chunks/a0629__pnpm_8124a564._.js","/_next/static/chunks/Documents_go-new_chinese-family-tree_app_layout_tsx_98813eb2._.js"],"async":false},"[project]/Documents/go-new/chinese-family-tree/components/providers/session-provider.tsx ":{"id":"[project]/Documents/go-new/chinese-family-tree/components/providers/session-provider.tsx [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/Documents_go-new_chinese-family-tree_2268dbd5._.js","/_next/static/chunks/a0629__pnpm_8124a564._.js","/_next/static/chunks/Documents_go-new_chinese-family-tree_app_layout_tsx_98813eb2._.js"],"async":false},"[project]/Documents/go-new/chinese-family-tree/components/providers/session-provider.tsx":{"id":"[project]/Documents/go-new/chinese-family-tree/components/providers/session-provider.tsx [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/Documents_go-new_chinese-family-tree_2268dbd5._.js","/_next/static/chunks/a0629__pnpm_8124a564._.js","/_next/static/chunks/Documents_go-new_chinese-family-tree_app_layout_tsx_98813eb2._.js"],"async":false},"[project]/Documents/go-new/chinese-family-tree/components/ui/alert-dialog-custom.tsx ":{"id":"[project]/Documents/go-new/chinese-family-tree/components/ui/alert-dialog-custom.tsx [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/Documents_go-new_chinese-family-tree_2268dbd5._.js","/_next/static/chunks/a0629__pnpm_8124a564._.js","/_next/static/chunks/Documents_go-new_chinese-family-tree_app_layout_tsx_98813eb2._.js"],"async":false},"[project]/Documents/go-new/chinese-family-tree/components/ui/alert-dialog-custom.tsx":{"id":"[project]/Documents/go-new/chinese-family-tree/components/ui/alert-dialog-custom.tsx [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/Documents_go-new_chinese-family-tree_2268dbd5._.js","/_next/static/chunks/a0629__pnpm_8124a564._.js","/_next/static/chunks/Documents_go-new_chinese-family-tree_app_layout_tsx_98813eb2._.js"],"async":false},"[project]/Documents/go-new/chinese-family-tree/app/members/new/page.tsx ":{"id":"[project]/Documents/go-new/chinese-family-tree/app/members/new/page.tsx [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/Documents_go-new_chinese-family-tree_2268dbd5._.js","/_next/static/chunks/a0629__pnpm_8124a564._.js","/_next/static/chunks/Documents_go-new_chinese-family-tree_app_layout_tsx_98813eb2._.js","/_next/static/chunks/Documents_go-new_chinese-family-tree_5461dd2a._.js","/_next/static/chunks/a0629__pnpm_1cbf85e1._.js","/_next/static/chunks/Documents_go-new_chinese-family-tree_app_members_new_page_tsx_03538adf._.js"],"async":false},"[project]/Documents/go-new/chinese-family-tree/app/members/new/page.tsx":{"id":"[project]/Documents/go-new/chinese-family-tree/app/members/new/page.tsx [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/Documents_go-new_chinese-family-tree_2268dbd5._.js","/_next/static/chunks/a0629__pnpm_8124a564._.js","/_next/static/chunks/Documents_go-new_chinese-family-tree_app_layout_tsx_98813eb2._.js","/_next/static/chunks/Documents_go-new_chinese-family-tree_5461dd2a._.js","/_next/static/chunks/a0629__pnpm_1cbf85e1._.js","/_next/static/chunks/Documents_go-new_chinese-family-tree_app_members_new_page_tsx_03538adf._.js"],"async":false}},"ssrModuleMapping":{"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/components/layout-router.js [app-client] (ecmascript)":{"*":{"id":"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/client/components/layout-router.js [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/4e98a_next_dist_8a92b219._.js","server/chunks/ssr/[root-of-the-server]__1aaf5479._.js"],"async":false}},"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/components/render-from-template-context.js [app-client] (ecmascript)":{"*":{"id":"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/client/components/render-from-template-context.js [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/4e98a_next_dist_8a92b219._.js","server/chunks/ssr/[root-of-the-server]__1aaf5479._.js"],"async":false}},"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/components/client-page.js [app-client] (ecmascript)":{"*":{"id":"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/client/components/client-page.js [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/4e98a_next_dist_8a92b219._.js","server/chunks/ssr/[root-of-the-server]__1aaf5479._.js"],"async":false}},"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/components/client-segment.js [app-client] (ecmascript)":{"*":{"id":"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/client/components/client-segment.js [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/4e98a_next_dist_8a92b219._.js","server/chunks/ssr/[root-of-the-server]__1aaf5479._.js"],"async":false}},"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/components/http-access-fallback/error-boundary.js [app-client] (ecmascript)":{"*":{"id":"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/client/components/http-access-fallback/error-boundary.js [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/4e98a_next_dist_8a92b219._.js","server/chunks/ssr/[root-of-the-server]__1aaf5479._.js"],"async":false}},"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/lib/metadata/generate/icon-mark.js [app-client] (ecmascript)":{"*":{"id":"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/lib/metadata/generate/icon-mark.js [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/4e98a_next_dist_8a92b219._.js","server/chunks/ssr/[root-of-the-server]__1aaf5479._.js"],"async":false}},"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/lib/framework/boundary-components.js [app-client] (ecmascript)":{"*":{"id":"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/lib/framework/boundary-components.js [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/4e98a_next_dist_8a92b219._.js","server/chunks/ssr/[root-of-the-server]__1aaf5479._.js"],"async":false}},"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/next-devtools/userspace/app/segment-explorer-node.js [app-client] (ecmascript)":{"*":{"id":"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/next-devtools/userspace/app/segment-explorer-node.js [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/4e98a_next_dist_8a92b219._.js","server/chunks/ssr/[root-of-the-server]__1aaf5479._.js"],"async":false}},"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/components/builtin/global-error.js [app-client] (ecmascript)":{"*":{"id":"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/components/builtin/global-error.js [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/4e98a_next_dist_8a92b219._.js","server/chunks/ssr/[root-of-the-server]__1aaf5479._.js"],"async":false}},"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/@vercel+analytics@1.5.0_next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0__react@19.2.0/node_modules/@vercel/analytics/dist/next/index.mjs [app-client] (ecmascript)":{"*":{"id":"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/@vercel+analytics@1.5.0_next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0__react@19.2.0/node_modules/@vercel/analytics/dist/next/index.mjs [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__9d08ee54._.js","server/chunks/ssr/a0629__pnpm_a0c33371._.js"],"async":false}},"[project]/Documents/go-new/chinese-family-tree/context/family-context.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/Documents/go-new/chinese-family-tree/context/family-context.tsx [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__9d08ee54._.js","server/chunks/ssr/a0629__pnpm_a0c33371._.js"],"async":false}},"[project]/Documents/go-new/chinese-family-tree/components/pwa/pwa-provider.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/Documents/go-new/chinese-family-tree/components/pwa/pwa-provider.tsx [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__9d08ee54._.js","server/chunks/ssr/a0629__pnpm_a0c33371._.js"],"async":false}},"[project]/Documents/go-new/chinese-family-tree/components/providers/session-provider.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/Documents/go-new/chinese-family-tree/components/providers/session-provider.tsx [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__9d08ee54._.js","server/chunks/ssr/a0629__pnpm_a0c33371._.js"],"async":false}},"[project]/Documents/go-new/chinese-family-tree/components/ui/alert-dialog-custom.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/Documents/go-new/chinese-family-tree/components/ui/alert-dialog-custom.tsx [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__9d08ee54._.js","server/chunks/ssr/a0629__pnpm_a0c33371._.js"],"async":false}},"[project]/Documents/go-new/chinese-family-tree/app/members/new/page.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/Documents/go-new/chinese-family-tree/app/members/new/page.tsx [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__9d08ee54._.js","server/chunks/ssr/a0629__pnpm_a0c33371._.js","server/chunks/ssr/[root-of-the-server]__3f095049._.js","server/chunks/ssr/4e98a_next_dist_c8d928f7._.js","server/chunks/ssr/f6bfd_@radix-ui_react-select_dist_index_mjs_9c1e4dbd._.js","server/chunks/ssr/3032b_dexie_289025a5._.js","server/chunks/ssr/a0629__pnpm_4f9037fd._.js"],"async":false}}},"edgeSSRModuleMapping":{},"rscModuleMapping":{"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/components/layout-router.js [app-client] (ecmascript)":{"*":{"id":"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/client/components/layout-router.js [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/components/render-from-template-context.js [app-client] (ecmascript)":{"*":{"id":"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/client/components/render-from-template-context.js [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/components/client-page.js [app-client] (ecmascript)":{"*":{"id":"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/client/components/client-page.js [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/components/client-segment.js [app-client] (ecmascript)":{"*":{"id":"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/client/components/client-segment.js [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/components/http-access-fallback/error-boundary.js [app-client] (ecmascript)":{"*":{"id":"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/client/components/http-access-fallback/error-boundary.js [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/lib/metadata/generate/icon-mark.js [app-client] (ecmascript)":{"*":{"id":"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/lib/metadata/generate/icon-mark.js [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/lib/framework/boundary-components.js [app-client] (ecmascript)":{"*":{"id":"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/lib/framework/boundary-components.js [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/next-devtools/userspace/app/segment-explorer-node.js [app-client] (ecmascript)":{"*":{"id":"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/next-devtools/userspace/app/segment-explorer-node.js [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/components/builtin/global-error.js [app-client] (ecmascript)":{"*":{"id":"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/components/builtin/global-error.js [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/@vercel+analytics@1.5.0_next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0__react@19.2.0/node_modules/@vercel/analytics/dist/next/index.mjs [app-client] (ecmascript)":{"*":{"id":"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/@vercel+analytics@1.5.0_next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0__react@19.2.0/node_modules/@vercel/analytics/dist/next/index.mjs [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/Documents/go-new/chinese-family-tree/context/family-context.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/Documents/go-new/chinese-family-tree/context/family-context.tsx [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/Documents/go-new/chinese-family-tree/components/pwa/pwa-provider.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/Documents/go-new/chinese-family-tree/components/pwa/pwa-provider.tsx [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/Documents/go-new/chinese-family-tree/components/providers/session-provider.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/Documents/go-new/chinese-family-tree/components/providers/session-provider.tsx [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/Documents/go-new/chinese-family-tree/components/ui/alert-dialog-custom.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/Documents/go-new/chinese-family-tree/components/ui/alert-dialog-custom.tsx [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/Documents/go-new/chinese-family-tree/app/members/new/page.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/Documents/go-new/chinese-family-tree/app/members/new/page.tsx [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}}},"edgeRscModuleMapping":{},"entryCSSFiles":{"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/components/builtin/global-error":[],"[project]/Documents/go-new/chinese-family-tree/app/layout":[{"path":"static/chunks/[root-of-the-server]__6d150df4._.css","inlined":false}],"[project]/Documents/go-new/chinese-family-tree/app/members/new/page":[{"path":"static/chunks/[root-of-the-server]__6d150df4._.css","inlined":false},{"path":"static/chunks/4c051_react-image-crop_dist_ReactCrop_bde06fd8.css","inlined":false}]},"entryJSFiles":{"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/components/builtin/global-error":["static/chunks/4e98a_next_dist_85312e63._.js","static/chunks/4e98a_next_dist_client_components_builtin_global-error_98813eb2.js"],"[project]/Documents/go-new/chinese-family-tree/app/layout":["static/chunks/Documents_go-new_chinese-family-tree_2268dbd5._.js","static/chunks/a0629__pnpm_8124a564._.js","static/chunks/Documents_go-new_chinese-family-tree_app_layout_tsx_98813eb2._.js"],"[project]/Documents/go-new/chinese-family-tree/app/members/new/page":["static/chunks/Documents_go-new_chinese-family-tree_2268dbd5._.js","static/chunks/a0629__pnpm_8124a564._.js","static/chunks/Documents_go-new_chinese-family-tree_app_layout_tsx_98813eb2._.js","static/chunks/Documents_go-new_chinese-family-tree_5461dd2a._.js","static/chunks/a0629__pnpm_1cbf85e1._.js","static/chunks/Documents_go-new_chinese-family-tree_app_members_new_page_tsx_03538adf._.js"]}} diff --git a/.next/dev/server/app/members/page_client-reference-manifest.js b/.next/dev/server/app/members/page_client-reference-manifest.js index f36766ca..9028cdae 100644 --- a/.next/dev/server/app/members/page_client-reference-manifest.js +++ b/.next/dev/server/app/members/page_client-reference-manifest.js @@ -1,2 +1,2 @@ globalThis.__RSC_MANIFEST = globalThis.__RSC_MANIFEST || {}; -globalThis.__RSC_MANIFEST["/members/page"] = {"moduleLoading":{"prefix":"","crossOrigin":null},"clientModules":{"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/client/components/layout-router.js ":{"id":"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/components/layout-router.js [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/4e98a_next_dist_85312e63._.js","/_next/static/chunks/4e98a_next_dist_client_components_builtin_global-error_98813eb2.js"],"async":false},"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/client/components/layout-router.js":{"id":"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/components/layout-router.js [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/4e98a_next_dist_85312e63._.js","/_next/static/chunks/4e98a_next_dist_client_components_builtin_global-error_98813eb2.js"],"async":false},"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/client/components/render-from-template-context.js ":{"id":"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/components/render-from-template-context.js [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/4e98a_next_dist_85312e63._.js","/_next/static/chunks/4e98a_next_dist_client_components_builtin_global-error_98813eb2.js"],"async":false},"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/client/components/render-from-template-context.js":{"id":"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/components/render-from-template-context.js [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/4e98a_next_dist_85312e63._.js","/_next/static/chunks/4e98a_next_dist_client_components_builtin_global-error_98813eb2.js"],"async":false},"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/client/components/client-page.js ":{"id":"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/components/client-page.js [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/4e98a_next_dist_85312e63._.js","/_next/static/chunks/4e98a_next_dist_client_components_builtin_global-error_98813eb2.js"],"async":false},"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/client/components/client-page.js":{"id":"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/components/client-page.js [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/4e98a_next_dist_85312e63._.js","/_next/static/chunks/4e98a_next_dist_client_components_builtin_global-error_98813eb2.js"],"async":false},"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/client/components/client-segment.js ":{"id":"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/components/client-segment.js [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/4e98a_next_dist_85312e63._.js","/_next/static/chunks/4e98a_next_dist_client_components_builtin_global-error_98813eb2.js"],"async":false},"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/client/components/client-segment.js":{"id":"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/components/client-segment.js [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/4e98a_next_dist_85312e63._.js","/_next/static/chunks/4e98a_next_dist_client_components_builtin_global-error_98813eb2.js"],"async":false},"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/client/components/http-access-fallback/error-boundary.js ":{"id":"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/components/http-access-fallback/error-boundary.js [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/4e98a_next_dist_85312e63._.js","/_next/static/chunks/4e98a_next_dist_client_components_builtin_global-error_98813eb2.js"],"async":false},"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/client/components/http-access-fallback/error-boundary.js":{"id":"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/components/http-access-fallback/error-boundary.js [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/4e98a_next_dist_85312e63._.js","/_next/static/chunks/4e98a_next_dist_client_components_builtin_global-error_98813eb2.js"],"async":false},"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/lib/metadata/generate/icon-mark.js ":{"id":"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/lib/metadata/generate/icon-mark.js [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/4e98a_next_dist_85312e63._.js","/_next/static/chunks/4e98a_next_dist_client_components_builtin_global-error_98813eb2.js"],"async":false},"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/lib/metadata/generate/icon-mark.js":{"id":"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/lib/metadata/generate/icon-mark.js [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/4e98a_next_dist_85312e63._.js","/_next/static/chunks/4e98a_next_dist_client_components_builtin_global-error_98813eb2.js"],"async":false},"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/lib/framework/boundary-components.js ":{"id":"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/lib/framework/boundary-components.js [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/4e98a_next_dist_85312e63._.js","/_next/static/chunks/4e98a_next_dist_client_components_builtin_global-error_98813eb2.js"],"async":false},"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/lib/framework/boundary-components.js":{"id":"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/lib/framework/boundary-components.js [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/4e98a_next_dist_85312e63._.js","/_next/static/chunks/4e98a_next_dist_client_components_builtin_global-error_98813eb2.js"],"async":false},"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/next-devtools/userspace/app/segment-explorer-node.js ":{"id":"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/next-devtools/userspace/app/segment-explorer-node.js [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/4e98a_next_dist_85312e63._.js","/_next/static/chunks/4e98a_next_dist_client_components_builtin_global-error_98813eb2.js"],"async":false},"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/next-devtools/userspace/app/segment-explorer-node.js":{"id":"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/next-devtools/userspace/app/segment-explorer-node.js [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/4e98a_next_dist_85312e63._.js","/_next/static/chunks/4e98a_next_dist_client_components_builtin_global-error_98813eb2.js"],"async":false},"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/components/builtin/global-error.js ":{"id":"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/components/builtin/global-error.js [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/4e98a_next_dist_85312e63._.js","/_next/static/chunks/4e98a_next_dist_client_components_builtin_global-error_98813eb2.js"],"async":false},"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/components/builtin/global-error.js":{"id":"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/components/builtin/global-error.js [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/4e98a_next_dist_85312e63._.js","/_next/static/chunks/4e98a_next_dist_client_components_builtin_global-error_98813eb2.js"],"async":false},"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/@vercel+analytics@1.5.0_next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0__react@19.2.0/node_modules/@vercel/analytics/dist/next/index.mjs ":{"id":"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/@vercel+analytics@1.5.0_next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0__react@19.2.0/node_modules/@vercel/analytics/dist/next/index.mjs [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/Documents_go-new_chinese-family-tree_2268dbd5._.js","/_next/static/chunks/a0629__pnpm_8124a564._.js","/_next/static/chunks/Documents_go-new_chinese-family-tree_app_layout_tsx_98813eb2._.js"],"async":false},"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/@vercel+analytics@1.5.0_next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0__react@19.2.0/node_modules/@vercel/analytics/dist/next/index.mjs":{"id":"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/@vercel+analytics@1.5.0_next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0__react@19.2.0/node_modules/@vercel/analytics/dist/next/index.mjs [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/Documents_go-new_chinese-family-tree_2268dbd5._.js","/_next/static/chunks/a0629__pnpm_8124a564._.js","/_next/static/chunks/Documents_go-new_chinese-family-tree_app_layout_tsx_98813eb2._.js"],"async":false},"[project]/Documents/go-new/chinese-family-tree/context/family-context.tsx ":{"id":"[project]/Documents/go-new/chinese-family-tree/context/family-context.tsx [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/Documents_go-new_chinese-family-tree_2268dbd5._.js","/_next/static/chunks/a0629__pnpm_8124a564._.js","/_next/static/chunks/Documents_go-new_chinese-family-tree_app_layout_tsx_98813eb2._.js"],"async":false},"[project]/Documents/go-new/chinese-family-tree/context/family-context.tsx":{"id":"[project]/Documents/go-new/chinese-family-tree/context/family-context.tsx [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/Documents_go-new_chinese-family-tree_2268dbd5._.js","/_next/static/chunks/a0629__pnpm_8124a564._.js","/_next/static/chunks/Documents_go-new_chinese-family-tree_app_layout_tsx_98813eb2._.js"],"async":false},"[project]/Documents/go-new/chinese-family-tree/components/pwa/pwa-provider.tsx ":{"id":"[project]/Documents/go-new/chinese-family-tree/components/pwa/pwa-provider.tsx [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/Documents_go-new_chinese-family-tree_2268dbd5._.js","/_next/static/chunks/a0629__pnpm_8124a564._.js","/_next/static/chunks/Documents_go-new_chinese-family-tree_app_layout_tsx_98813eb2._.js"],"async":false},"[project]/Documents/go-new/chinese-family-tree/components/pwa/pwa-provider.tsx":{"id":"[project]/Documents/go-new/chinese-family-tree/components/pwa/pwa-provider.tsx [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/Documents_go-new_chinese-family-tree_2268dbd5._.js","/_next/static/chunks/a0629__pnpm_8124a564._.js","/_next/static/chunks/Documents_go-new_chinese-family-tree_app_layout_tsx_98813eb2._.js"],"async":false},"[project]/Documents/go-new/chinese-family-tree/components/providers/session-provider.tsx ":{"id":"[project]/Documents/go-new/chinese-family-tree/components/providers/session-provider.tsx [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/Documents_go-new_chinese-family-tree_2268dbd5._.js","/_next/static/chunks/a0629__pnpm_8124a564._.js","/_next/static/chunks/Documents_go-new_chinese-family-tree_app_layout_tsx_98813eb2._.js"],"async":false},"[project]/Documents/go-new/chinese-family-tree/components/providers/session-provider.tsx":{"id":"[project]/Documents/go-new/chinese-family-tree/components/providers/session-provider.tsx [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/Documents_go-new_chinese-family-tree_2268dbd5._.js","/_next/static/chunks/a0629__pnpm_8124a564._.js","/_next/static/chunks/Documents_go-new_chinese-family-tree_app_layout_tsx_98813eb2._.js"],"async":false},"[project]/Documents/go-new/chinese-family-tree/components/ui/alert-dialog-custom.tsx ":{"id":"[project]/Documents/go-new/chinese-family-tree/components/ui/alert-dialog-custom.tsx [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/Documents_go-new_chinese-family-tree_2268dbd5._.js","/_next/static/chunks/a0629__pnpm_8124a564._.js","/_next/static/chunks/Documents_go-new_chinese-family-tree_app_layout_tsx_98813eb2._.js"],"async":false},"[project]/Documents/go-new/chinese-family-tree/components/ui/alert-dialog-custom.tsx":{"id":"[project]/Documents/go-new/chinese-family-tree/components/ui/alert-dialog-custom.tsx [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/Documents_go-new_chinese-family-tree_2268dbd5._.js","/_next/static/chunks/a0629__pnpm_8124a564._.js","/_next/static/chunks/Documents_go-new_chinese-family-tree_app_layout_tsx_98813eb2._.js"],"async":false},"[project]/Documents/go-new/chinese-family-tree/app/members/page.tsx ":{"id":"[project]/Documents/go-new/chinese-family-tree/app/members/page.tsx [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/Documents_go-new_chinese-family-tree_2268dbd5._.js","/_next/static/chunks/a0629__pnpm_8124a564._.js","/_next/static/chunks/Documents_go-new_chinese-family-tree_app_layout_tsx_98813eb2._.js","/_next/static/chunks/Documents_go-new_chinese-family-tree_c5040fe9._.js","/_next/static/chunks/a0629__pnpm_67be5524._.js","/_next/static/chunks/Documents_go-new_chinese-family-tree_app_members_page_tsx_03538adf._.js"],"async":false},"[project]/Documents/go-new/chinese-family-tree/app/members/page.tsx":{"id":"[project]/Documents/go-new/chinese-family-tree/app/members/page.tsx [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/Documents_go-new_chinese-family-tree_2268dbd5._.js","/_next/static/chunks/a0629__pnpm_8124a564._.js","/_next/static/chunks/Documents_go-new_chinese-family-tree_app_layout_tsx_98813eb2._.js","/_next/static/chunks/Documents_go-new_chinese-family-tree_c5040fe9._.js","/_next/static/chunks/a0629__pnpm_67be5524._.js","/_next/static/chunks/Documents_go-new_chinese-family-tree_app_members_page_tsx_03538adf._.js"],"async":false}},"ssrModuleMapping":{"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/components/layout-router.js [app-client] (ecmascript)":{"*":{"id":"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/client/components/layout-router.js [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/4e98a_next_dist_8a92b219._.js","server/chunks/ssr/[root-of-the-server]__1aaf5479._.js"],"async":false}},"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/components/render-from-template-context.js [app-client] (ecmascript)":{"*":{"id":"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/client/components/render-from-template-context.js [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/4e98a_next_dist_8a92b219._.js","server/chunks/ssr/[root-of-the-server]__1aaf5479._.js"],"async":false}},"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/components/client-page.js [app-client] (ecmascript)":{"*":{"id":"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/client/components/client-page.js [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/4e98a_next_dist_8a92b219._.js","server/chunks/ssr/[root-of-the-server]__1aaf5479._.js"],"async":false}},"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/components/client-segment.js [app-client] (ecmascript)":{"*":{"id":"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/client/components/client-segment.js [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/4e98a_next_dist_8a92b219._.js","server/chunks/ssr/[root-of-the-server]__1aaf5479._.js"],"async":false}},"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/components/http-access-fallback/error-boundary.js [app-client] (ecmascript)":{"*":{"id":"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/client/components/http-access-fallback/error-boundary.js [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/4e98a_next_dist_8a92b219._.js","server/chunks/ssr/[root-of-the-server]__1aaf5479._.js"],"async":false}},"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/lib/metadata/generate/icon-mark.js [app-client] (ecmascript)":{"*":{"id":"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/lib/metadata/generate/icon-mark.js [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/4e98a_next_dist_8a92b219._.js","server/chunks/ssr/[root-of-the-server]__1aaf5479._.js"],"async":false}},"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/lib/framework/boundary-components.js [app-client] (ecmascript)":{"*":{"id":"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/lib/framework/boundary-components.js [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/4e98a_next_dist_8a92b219._.js","server/chunks/ssr/[root-of-the-server]__1aaf5479._.js"],"async":false}},"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/next-devtools/userspace/app/segment-explorer-node.js [app-client] (ecmascript)":{"*":{"id":"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/next-devtools/userspace/app/segment-explorer-node.js [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/4e98a_next_dist_8a92b219._.js","server/chunks/ssr/[root-of-the-server]__1aaf5479._.js"],"async":false}},"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/components/builtin/global-error.js [app-client] (ecmascript)":{"*":{"id":"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/components/builtin/global-error.js [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/4e98a_next_dist_8a92b219._.js","server/chunks/ssr/[root-of-the-server]__1aaf5479._.js"],"async":false}},"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/@vercel+analytics@1.5.0_next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0__react@19.2.0/node_modules/@vercel/analytics/dist/next/index.mjs [app-client] (ecmascript)":{"*":{"id":"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/@vercel+analytics@1.5.0_next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0__react@19.2.0/node_modules/@vercel/analytics/dist/next/index.mjs [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__9d08ee54._.js","server/chunks/ssr/a0629__pnpm_a0c33371._.js"],"async":false}},"[project]/Documents/go-new/chinese-family-tree/context/family-context.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/Documents/go-new/chinese-family-tree/context/family-context.tsx [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__9d08ee54._.js","server/chunks/ssr/a0629__pnpm_a0c33371._.js"],"async":false}},"[project]/Documents/go-new/chinese-family-tree/components/pwa/pwa-provider.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/Documents/go-new/chinese-family-tree/components/pwa/pwa-provider.tsx [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__9d08ee54._.js","server/chunks/ssr/a0629__pnpm_a0c33371._.js"],"async":false}},"[project]/Documents/go-new/chinese-family-tree/components/providers/session-provider.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/Documents/go-new/chinese-family-tree/components/providers/session-provider.tsx [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__9d08ee54._.js","server/chunks/ssr/a0629__pnpm_a0c33371._.js"],"async":false}},"[project]/Documents/go-new/chinese-family-tree/components/ui/alert-dialog-custom.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/Documents/go-new/chinese-family-tree/components/ui/alert-dialog-custom.tsx [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__9d08ee54._.js","server/chunks/ssr/a0629__pnpm_a0c33371._.js"],"async":false}},"[project]/Documents/go-new/chinese-family-tree/app/members/page.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/Documents/go-new/chinese-family-tree/app/members/page.tsx [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__9d08ee54._.js","server/chunks/ssr/a0629__pnpm_a0c33371._.js","server/chunks/ssr/Documents_go-new_chinese-family-tree_735c6a78._.js","server/chunks/ssr/4e98a_next_dist_c8d928f7._.js","server/chunks/ssr/3032b_dexie_289025a5._.js","server/chunks/ssr/f6bfd_@radix-ui_react-select_dist_index_mjs_9c1e4dbd._.js","server/chunks/ssr/a0629__pnpm_6060e9ae._.js"],"async":false}}},"edgeSSRModuleMapping":{},"rscModuleMapping":{"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/components/layout-router.js [app-client] (ecmascript)":{"*":{"id":"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/client/components/layout-router.js [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/components/render-from-template-context.js [app-client] (ecmascript)":{"*":{"id":"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/client/components/render-from-template-context.js [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/components/client-page.js [app-client] (ecmascript)":{"*":{"id":"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/client/components/client-page.js [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/components/client-segment.js [app-client] (ecmascript)":{"*":{"id":"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/client/components/client-segment.js [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/components/http-access-fallback/error-boundary.js [app-client] (ecmascript)":{"*":{"id":"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/client/components/http-access-fallback/error-boundary.js [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/lib/metadata/generate/icon-mark.js [app-client] (ecmascript)":{"*":{"id":"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/lib/metadata/generate/icon-mark.js [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/lib/framework/boundary-components.js [app-client] (ecmascript)":{"*":{"id":"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/lib/framework/boundary-components.js [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/next-devtools/userspace/app/segment-explorer-node.js [app-client] (ecmascript)":{"*":{"id":"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/next-devtools/userspace/app/segment-explorer-node.js [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/components/builtin/global-error.js [app-client] (ecmascript)":{"*":{"id":"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/components/builtin/global-error.js [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/@vercel+analytics@1.5.0_next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0__react@19.2.0/node_modules/@vercel/analytics/dist/next/index.mjs [app-client] (ecmascript)":{"*":{"id":"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/@vercel+analytics@1.5.0_next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0__react@19.2.0/node_modules/@vercel/analytics/dist/next/index.mjs [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/Documents/go-new/chinese-family-tree/context/family-context.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/Documents/go-new/chinese-family-tree/context/family-context.tsx [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/Documents/go-new/chinese-family-tree/components/pwa/pwa-provider.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/Documents/go-new/chinese-family-tree/components/pwa/pwa-provider.tsx [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/Documents/go-new/chinese-family-tree/components/providers/session-provider.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/Documents/go-new/chinese-family-tree/components/providers/session-provider.tsx [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/Documents/go-new/chinese-family-tree/components/ui/alert-dialog-custom.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/Documents/go-new/chinese-family-tree/components/ui/alert-dialog-custom.tsx [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/Documents/go-new/chinese-family-tree/app/members/page.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/Documents/go-new/chinese-family-tree/app/members/page.tsx [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}}},"edgeRscModuleMapping":{},"entryCSSFiles":{"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/components/builtin/global-error":[],"[project]/Documents/go-new/chinese-family-tree/app/layout":[{"path":"static/chunks/[root-of-the-server]__6d150df4._.css","inlined":false}],"[project]/Documents/go-new/chinese-family-tree/app/members/page":[{"path":"static/chunks/[root-of-the-server]__6d150df4._.css","inlined":false}]},"entryJSFiles":{"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/components/builtin/global-error":["static/chunks/4e98a_next_dist_85312e63._.js","static/chunks/4e98a_next_dist_client_components_builtin_global-error_98813eb2.js"],"[project]/Documents/go-new/chinese-family-tree/app/layout":["static/chunks/Documents_go-new_chinese-family-tree_2268dbd5._.js","static/chunks/a0629__pnpm_8124a564._.js","static/chunks/Documents_go-new_chinese-family-tree_app_layout_tsx_98813eb2._.js"],"[project]/Documents/go-new/chinese-family-tree/app/members/page":["static/chunks/Documents_go-new_chinese-family-tree_2268dbd5._.js","static/chunks/a0629__pnpm_8124a564._.js","static/chunks/Documents_go-new_chinese-family-tree_app_layout_tsx_98813eb2._.js","static/chunks/Documents_go-new_chinese-family-tree_c5040fe9._.js","static/chunks/a0629__pnpm_67be5524._.js","static/chunks/Documents_go-new_chinese-family-tree_app_members_page_tsx_03538adf._.js"]}} +globalThis.__RSC_MANIFEST["/members/page"] = {"moduleLoading":{"prefix":"","crossOrigin":null},"clientModules":{"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/client/components/layout-router.js ":{"id":"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/components/layout-router.js [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/4e98a_next_dist_85312e63._.js","/_next/static/chunks/4e98a_next_dist_client_components_builtin_global-error_98813eb2.js"],"async":false},"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/client/components/layout-router.js":{"id":"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/components/layout-router.js [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/4e98a_next_dist_85312e63._.js","/_next/static/chunks/4e98a_next_dist_client_components_builtin_global-error_98813eb2.js"],"async":false},"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/client/components/render-from-template-context.js ":{"id":"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/components/render-from-template-context.js [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/4e98a_next_dist_85312e63._.js","/_next/static/chunks/4e98a_next_dist_client_components_builtin_global-error_98813eb2.js"],"async":false},"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/client/components/render-from-template-context.js":{"id":"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/components/render-from-template-context.js [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/4e98a_next_dist_85312e63._.js","/_next/static/chunks/4e98a_next_dist_client_components_builtin_global-error_98813eb2.js"],"async":false},"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/client/components/client-page.js ":{"id":"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/components/client-page.js [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/4e98a_next_dist_85312e63._.js","/_next/static/chunks/4e98a_next_dist_client_components_builtin_global-error_98813eb2.js"],"async":false},"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/client/components/client-page.js":{"id":"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/components/client-page.js [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/4e98a_next_dist_85312e63._.js","/_next/static/chunks/4e98a_next_dist_client_components_builtin_global-error_98813eb2.js"],"async":false},"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/client/components/client-segment.js ":{"id":"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/components/client-segment.js [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/4e98a_next_dist_85312e63._.js","/_next/static/chunks/4e98a_next_dist_client_components_builtin_global-error_98813eb2.js"],"async":false},"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/client/components/client-segment.js":{"id":"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/components/client-segment.js [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/4e98a_next_dist_85312e63._.js","/_next/static/chunks/4e98a_next_dist_client_components_builtin_global-error_98813eb2.js"],"async":false},"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/client/components/http-access-fallback/error-boundary.js ":{"id":"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/components/http-access-fallback/error-boundary.js [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/4e98a_next_dist_85312e63._.js","/_next/static/chunks/4e98a_next_dist_client_components_builtin_global-error_98813eb2.js"],"async":false},"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/client/components/http-access-fallback/error-boundary.js":{"id":"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/components/http-access-fallback/error-boundary.js [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/4e98a_next_dist_85312e63._.js","/_next/static/chunks/4e98a_next_dist_client_components_builtin_global-error_98813eb2.js"],"async":false},"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/lib/metadata/generate/icon-mark.js ":{"id":"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/lib/metadata/generate/icon-mark.js [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/4e98a_next_dist_85312e63._.js","/_next/static/chunks/4e98a_next_dist_client_components_builtin_global-error_98813eb2.js"],"async":false},"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/lib/metadata/generate/icon-mark.js":{"id":"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/lib/metadata/generate/icon-mark.js [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/4e98a_next_dist_85312e63._.js","/_next/static/chunks/4e98a_next_dist_client_components_builtin_global-error_98813eb2.js"],"async":false},"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/lib/framework/boundary-components.js ":{"id":"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/lib/framework/boundary-components.js [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/4e98a_next_dist_85312e63._.js","/_next/static/chunks/4e98a_next_dist_client_components_builtin_global-error_98813eb2.js"],"async":false},"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/lib/framework/boundary-components.js":{"id":"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/lib/framework/boundary-components.js [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/4e98a_next_dist_85312e63._.js","/_next/static/chunks/4e98a_next_dist_client_components_builtin_global-error_98813eb2.js"],"async":false},"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/next-devtools/userspace/app/segment-explorer-node.js ":{"id":"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/next-devtools/userspace/app/segment-explorer-node.js [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/4e98a_next_dist_85312e63._.js","/_next/static/chunks/4e98a_next_dist_client_components_builtin_global-error_98813eb2.js"],"async":false},"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/next-devtools/userspace/app/segment-explorer-node.js":{"id":"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/next-devtools/userspace/app/segment-explorer-node.js [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/4e98a_next_dist_85312e63._.js","/_next/static/chunks/4e98a_next_dist_client_components_builtin_global-error_98813eb2.js"],"async":false},"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/components/builtin/global-error.js ":{"id":"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/components/builtin/global-error.js [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/4e98a_next_dist_85312e63._.js","/_next/static/chunks/4e98a_next_dist_client_components_builtin_global-error_98813eb2.js"],"async":false},"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/components/builtin/global-error.js":{"id":"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/components/builtin/global-error.js [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/4e98a_next_dist_85312e63._.js","/_next/static/chunks/4e98a_next_dist_client_components_builtin_global-error_98813eb2.js"],"async":false},"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/@vercel+analytics@1.5.0_next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0__react@19.2.0/node_modules/@vercel/analytics/dist/next/index.mjs ":{"id":"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/@vercel+analytics@1.5.0_next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0__react@19.2.0/node_modules/@vercel/analytics/dist/next/index.mjs [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/Documents_go-new_chinese-family-tree_2268dbd5._.js","/_next/static/chunks/a0629__pnpm_8124a564._.js","/_next/static/chunks/Documents_go-new_chinese-family-tree_app_layout_tsx_98813eb2._.js"],"async":false},"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/@vercel+analytics@1.5.0_next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0__react@19.2.0/node_modules/@vercel/analytics/dist/next/index.mjs":{"id":"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/@vercel+analytics@1.5.0_next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0__react@19.2.0/node_modules/@vercel/analytics/dist/next/index.mjs [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/Documents_go-new_chinese-family-tree_2268dbd5._.js","/_next/static/chunks/a0629__pnpm_8124a564._.js","/_next/static/chunks/Documents_go-new_chinese-family-tree_app_layout_tsx_98813eb2._.js"],"async":false},"[project]/Documents/go-new/chinese-family-tree/context/family-context.tsx ":{"id":"[project]/Documents/go-new/chinese-family-tree/context/family-context.tsx [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/Documents_go-new_chinese-family-tree_2268dbd5._.js","/_next/static/chunks/a0629__pnpm_8124a564._.js","/_next/static/chunks/Documents_go-new_chinese-family-tree_app_layout_tsx_98813eb2._.js"],"async":false},"[project]/Documents/go-new/chinese-family-tree/context/family-context.tsx":{"id":"[project]/Documents/go-new/chinese-family-tree/context/family-context.tsx [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/Documents_go-new_chinese-family-tree_2268dbd5._.js","/_next/static/chunks/a0629__pnpm_8124a564._.js","/_next/static/chunks/Documents_go-new_chinese-family-tree_app_layout_tsx_98813eb2._.js"],"async":false},"[project]/Documents/go-new/chinese-family-tree/components/pwa/pwa-provider.tsx ":{"id":"[project]/Documents/go-new/chinese-family-tree/components/pwa/pwa-provider.tsx [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/Documents_go-new_chinese-family-tree_2268dbd5._.js","/_next/static/chunks/a0629__pnpm_8124a564._.js","/_next/static/chunks/Documents_go-new_chinese-family-tree_app_layout_tsx_98813eb2._.js"],"async":false},"[project]/Documents/go-new/chinese-family-tree/components/pwa/pwa-provider.tsx":{"id":"[project]/Documents/go-new/chinese-family-tree/components/pwa/pwa-provider.tsx [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/Documents_go-new_chinese-family-tree_2268dbd5._.js","/_next/static/chunks/a0629__pnpm_8124a564._.js","/_next/static/chunks/Documents_go-new_chinese-family-tree_app_layout_tsx_98813eb2._.js"],"async":false},"[project]/Documents/go-new/chinese-family-tree/components/providers/session-provider.tsx ":{"id":"[project]/Documents/go-new/chinese-family-tree/components/providers/session-provider.tsx [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/Documents_go-new_chinese-family-tree_2268dbd5._.js","/_next/static/chunks/a0629__pnpm_8124a564._.js","/_next/static/chunks/Documents_go-new_chinese-family-tree_app_layout_tsx_98813eb2._.js"],"async":false},"[project]/Documents/go-new/chinese-family-tree/components/providers/session-provider.tsx":{"id":"[project]/Documents/go-new/chinese-family-tree/components/providers/session-provider.tsx [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/Documents_go-new_chinese-family-tree_2268dbd5._.js","/_next/static/chunks/a0629__pnpm_8124a564._.js","/_next/static/chunks/Documents_go-new_chinese-family-tree_app_layout_tsx_98813eb2._.js"],"async":false},"[project]/Documents/go-new/chinese-family-tree/components/ui/alert-dialog-custom.tsx ":{"id":"[project]/Documents/go-new/chinese-family-tree/components/ui/alert-dialog-custom.tsx [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/Documents_go-new_chinese-family-tree_2268dbd5._.js","/_next/static/chunks/a0629__pnpm_8124a564._.js","/_next/static/chunks/Documents_go-new_chinese-family-tree_app_layout_tsx_98813eb2._.js"],"async":false},"[project]/Documents/go-new/chinese-family-tree/components/ui/alert-dialog-custom.tsx":{"id":"[project]/Documents/go-new/chinese-family-tree/components/ui/alert-dialog-custom.tsx [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/Documents_go-new_chinese-family-tree_2268dbd5._.js","/_next/static/chunks/a0629__pnpm_8124a564._.js","/_next/static/chunks/Documents_go-new_chinese-family-tree_app_layout_tsx_98813eb2._.js"],"async":false},"[project]/Documents/go-new/chinese-family-tree/app/members/page.tsx ":{"id":"[project]/Documents/go-new/chinese-family-tree/app/members/page.tsx [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/Documents_go-new_chinese-family-tree_2268dbd5._.js","/_next/static/chunks/a0629__pnpm_8124a564._.js","/_next/static/chunks/Documents_go-new_chinese-family-tree_app_layout_tsx_98813eb2._.js","/_next/static/chunks/Documents_go-new_chinese-family-tree_c5040fe9._.js","/_next/static/chunks/a0629__pnpm_7e21e42e._.js","/_next/static/chunks/Documents_go-new_chinese-family-tree_app_members_page_tsx_03538adf._.js"],"async":false},"[project]/Documents/go-new/chinese-family-tree/app/members/page.tsx":{"id":"[project]/Documents/go-new/chinese-family-tree/app/members/page.tsx [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/Documents_go-new_chinese-family-tree_2268dbd5._.js","/_next/static/chunks/a0629__pnpm_8124a564._.js","/_next/static/chunks/Documents_go-new_chinese-family-tree_app_layout_tsx_98813eb2._.js","/_next/static/chunks/Documents_go-new_chinese-family-tree_c5040fe9._.js","/_next/static/chunks/a0629__pnpm_7e21e42e._.js","/_next/static/chunks/Documents_go-new_chinese-family-tree_app_members_page_tsx_03538adf._.js"],"async":false}},"ssrModuleMapping":{"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/components/layout-router.js [app-client] (ecmascript)":{"*":{"id":"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/client/components/layout-router.js [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/4e98a_next_dist_8a92b219._.js","server/chunks/ssr/[root-of-the-server]__1aaf5479._.js"],"async":false}},"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/components/render-from-template-context.js [app-client] (ecmascript)":{"*":{"id":"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/client/components/render-from-template-context.js [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/4e98a_next_dist_8a92b219._.js","server/chunks/ssr/[root-of-the-server]__1aaf5479._.js"],"async":false}},"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/components/client-page.js [app-client] (ecmascript)":{"*":{"id":"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/client/components/client-page.js [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/4e98a_next_dist_8a92b219._.js","server/chunks/ssr/[root-of-the-server]__1aaf5479._.js"],"async":false}},"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/components/client-segment.js [app-client] (ecmascript)":{"*":{"id":"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/client/components/client-segment.js [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/4e98a_next_dist_8a92b219._.js","server/chunks/ssr/[root-of-the-server]__1aaf5479._.js"],"async":false}},"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/components/http-access-fallback/error-boundary.js [app-client] (ecmascript)":{"*":{"id":"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/client/components/http-access-fallback/error-boundary.js [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/4e98a_next_dist_8a92b219._.js","server/chunks/ssr/[root-of-the-server]__1aaf5479._.js"],"async":false}},"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/lib/metadata/generate/icon-mark.js [app-client] (ecmascript)":{"*":{"id":"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/lib/metadata/generate/icon-mark.js [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/4e98a_next_dist_8a92b219._.js","server/chunks/ssr/[root-of-the-server]__1aaf5479._.js"],"async":false}},"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/lib/framework/boundary-components.js [app-client] (ecmascript)":{"*":{"id":"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/lib/framework/boundary-components.js [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/4e98a_next_dist_8a92b219._.js","server/chunks/ssr/[root-of-the-server]__1aaf5479._.js"],"async":false}},"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/next-devtools/userspace/app/segment-explorer-node.js [app-client] (ecmascript)":{"*":{"id":"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/next-devtools/userspace/app/segment-explorer-node.js [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/4e98a_next_dist_8a92b219._.js","server/chunks/ssr/[root-of-the-server]__1aaf5479._.js"],"async":false}},"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/components/builtin/global-error.js [app-client] (ecmascript)":{"*":{"id":"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/components/builtin/global-error.js [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/4e98a_next_dist_8a92b219._.js","server/chunks/ssr/[root-of-the-server]__1aaf5479._.js"],"async":false}},"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/@vercel+analytics@1.5.0_next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0__react@19.2.0/node_modules/@vercel/analytics/dist/next/index.mjs [app-client] (ecmascript)":{"*":{"id":"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/@vercel+analytics@1.5.0_next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0__react@19.2.0/node_modules/@vercel/analytics/dist/next/index.mjs [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__9d08ee54._.js","server/chunks/ssr/a0629__pnpm_a0c33371._.js"],"async":false}},"[project]/Documents/go-new/chinese-family-tree/context/family-context.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/Documents/go-new/chinese-family-tree/context/family-context.tsx [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__9d08ee54._.js","server/chunks/ssr/a0629__pnpm_a0c33371._.js"],"async":false}},"[project]/Documents/go-new/chinese-family-tree/components/pwa/pwa-provider.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/Documents/go-new/chinese-family-tree/components/pwa/pwa-provider.tsx [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__9d08ee54._.js","server/chunks/ssr/a0629__pnpm_a0c33371._.js"],"async":false}},"[project]/Documents/go-new/chinese-family-tree/components/providers/session-provider.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/Documents/go-new/chinese-family-tree/components/providers/session-provider.tsx [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__9d08ee54._.js","server/chunks/ssr/a0629__pnpm_a0c33371._.js"],"async":false}},"[project]/Documents/go-new/chinese-family-tree/components/ui/alert-dialog-custom.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/Documents/go-new/chinese-family-tree/components/ui/alert-dialog-custom.tsx [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__9d08ee54._.js","server/chunks/ssr/a0629__pnpm_a0c33371._.js"],"async":false}},"[project]/Documents/go-new/chinese-family-tree/app/members/page.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/Documents/go-new/chinese-family-tree/app/members/page.tsx [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__9d08ee54._.js","server/chunks/ssr/a0629__pnpm_a0c33371._.js","server/chunks/ssr/Documents_go-new_chinese-family-tree_735c6a78._.js","server/chunks/ssr/4e98a_next_dist_c8d928f7._.js","server/chunks/ssr/3032b_dexie_289025a5._.js","server/chunks/ssr/f6bfd_@radix-ui_react-select_dist_index_mjs_9c1e4dbd._.js","server/chunks/ssr/a0629__pnpm_47f654a9._.js"],"async":false}}},"edgeSSRModuleMapping":{},"rscModuleMapping":{"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/components/layout-router.js [app-client] (ecmascript)":{"*":{"id":"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/client/components/layout-router.js [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/components/render-from-template-context.js [app-client] (ecmascript)":{"*":{"id":"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/client/components/render-from-template-context.js [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/components/client-page.js [app-client] (ecmascript)":{"*":{"id":"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/client/components/client-page.js [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/components/client-segment.js [app-client] (ecmascript)":{"*":{"id":"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/client/components/client-segment.js [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/components/http-access-fallback/error-boundary.js [app-client] (ecmascript)":{"*":{"id":"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/client/components/http-access-fallback/error-boundary.js [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/lib/metadata/generate/icon-mark.js [app-client] (ecmascript)":{"*":{"id":"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/lib/metadata/generate/icon-mark.js [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/lib/framework/boundary-components.js [app-client] (ecmascript)":{"*":{"id":"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/lib/framework/boundary-components.js [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/next-devtools/userspace/app/segment-explorer-node.js [app-client] (ecmascript)":{"*":{"id":"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/next-devtools/userspace/app/segment-explorer-node.js [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/components/builtin/global-error.js [app-client] (ecmascript)":{"*":{"id":"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/components/builtin/global-error.js [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/@vercel+analytics@1.5.0_next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0__react@19.2.0/node_modules/@vercel/analytics/dist/next/index.mjs [app-client] (ecmascript)":{"*":{"id":"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/@vercel+analytics@1.5.0_next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0__react@19.2.0/node_modules/@vercel/analytics/dist/next/index.mjs [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/Documents/go-new/chinese-family-tree/context/family-context.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/Documents/go-new/chinese-family-tree/context/family-context.tsx [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/Documents/go-new/chinese-family-tree/components/pwa/pwa-provider.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/Documents/go-new/chinese-family-tree/components/pwa/pwa-provider.tsx [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/Documents/go-new/chinese-family-tree/components/providers/session-provider.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/Documents/go-new/chinese-family-tree/components/providers/session-provider.tsx [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/Documents/go-new/chinese-family-tree/components/ui/alert-dialog-custom.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/Documents/go-new/chinese-family-tree/components/ui/alert-dialog-custom.tsx [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/Documents/go-new/chinese-family-tree/app/members/page.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/Documents/go-new/chinese-family-tree/app/members/page.tsx [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}}},"edgeRscModuleMapping":{},"entryCSSFiles":{"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/components/builtin/global-error":[],"[project]/Documents/go-new/chinese-family-tree/app/layout":[{"path":"static/chunks/[root-of-the-server]__6d150df4._.css","inlined":false}],"[project]/Documents/go-new/chinese-family-tree/app/members/page":[{"path":"static/chunks/[root-of-the-server]__6d150df4._.css","inlined":false}]},"entryJSFiles":{"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/components/builtin/global-error":["static/chunks/4e98a_next_dist_85312e63._.js","static/chunks/4e98a_next_dist_client_components_builtin_global-error_98813eb2.js"],"[project]/Documents/go-new/chinese-family-tree/app/layout":["static/chunks/Documents_go-new_chinese-family-tree_2268dbd5._.js","static/chunks/a0629__pnpm_8124a564._.js","static/chunks/Documents_go-new_chinese-family-tree_app_layout_tsx_98813eb2._.js"],"[project]/Documents/go-new/chinese-family-tree/app/members/page":["static/chunks/Documents_go-new_chinese-family-tree_2268dbd5._.js","static/chunks/a0629__pnpm_8124a564._.js","static/chunks/Documents_go-new_chinese-family-tree_app_layout_tsx_98813eb2._.js","static/chunks/Documents_go-new_chinese-family-tree_c5040fe9._.js","static/chunks/a0629__pnpm_7e21e42e._.js","static/chunks/Documents_go-new_chinese-family-tree_app_members_page_tsx_03538adf._.js"]}} diff --git a/.next/dev/server/chunks/[root-of-the-server]__30c51266._.js b/.next/dev/server/chunks/[root-of-the-server]__30c51266._.js index 2e90435b..7ce9e970 100644 --- a/.next/dev/server/chunks/[root-of-the-server]__30c51266._.js +++ b/.next/dev/server/chunks/[root-of-the-server]__30c51266._.js @@ -280,11 +280,32 @@ const createMemberSchema = __TURBOPACK__imported__module__$5b$project$5d2f$Docum fullName: __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$zod$40$3$2e$25$2e$76$2f$node_modules$2f$zod$2f$v3$2f$external$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__$3c$export__$2a$__as__z$3e$__["z"].string().min(1), gender: __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$zod$40$3$2e$25$2e$76$2f$node_modules$2f$zod$2f$v3$2f$external$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__$3c$export__$2a$__as__z$3e$__["z"].nativeEnum(__TURBOPACK__imported__module__$5b$externals$5d2f40$prisma$2f$client__$5b$external$5d$__$2840$prisma$2f$client$2c$__cjs$29$__["Gender"]), generation: __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$zod$40$3$2e$25$2e$76$2f$node_modules$2f$zod$2f$v3$2f$external$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__$3c$export__$2a$__as__z$3e$__["z"].number().int().positive(), + generationName: __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$zod$40$3$2e$25$2e$76$2f$node_modules$2f$zod$2f$v3$2f$external$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__$3c$export__$2a$__as__z$3e$__["z"].string().optional(), + courtesyName: __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$zod$40$3$2e$25$2e$76$2f$node_modules$2f$zod$2f$v3$2f$external$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__$3c$export__$2a$__as__z$3e$__["z"].string().optional(), + artName: __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$zod$40$3$2e$25$2e$76$2f$node_modules$2f$zod$2f$v3$2f$external$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__$3c$export__$2a$__as__z$3e$__["z"].string().optional(), + posthumousName: __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$zod$40$3$2e$25$2e$76$2f$node_modules$2f$zod$2f$v3$2f$external$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__$3c$export__$2a$__as__z$3e$__["z"].string().optional(), + rank: __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$zod$40$3$2e$25$2e$76$2f$node_modules$2f$zod$2f$v3$2f$external$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__$3c$export__$2a$__as__z$3e$__["z"].number().optional(), birthDate: __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$zod$40$3$2e$25$2e$76$2f$node_modules$2f$zod$2f$v3$2f$external$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__$3c$export__$2a$__as__z$3e$__["z"].string().optional(), deathDate: __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$zod$40$3$2e$25$2e$76$2f$node_modules$2f$zod$2f$v3$2f$external$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__$3c$export__$2a$__as__z$3e$__["z"].string().optional(), + isLunarDate: __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$zod$40$3$2e$25$2e$76$2f$node_modules$2f$zod$2f$v3$2f$external$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__$3c$export__$2a$__as__z$3e$__["z"].boolean().optional(), + ancestralHome: __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$zod$40$3$2e$25$2e$76$2f$node_modules$2f$zod$2f$v3$2f$external$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__$3c$export__$2a$__as__z$3e$__["z"].string().optional(), + birthPlace: __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$zod$40$3$2e$25$2e$76$2f$node_modules$2f$zod$2f$v3$2f$external$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__$3c$export__$2a$__as__z$3e$__["z"].string().optional(), + burialPlace: __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$zod$40$3$2e$25$2e$76$2f$node_modules$2f$zod$2f$v3$2f$external$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__$3c$export__$2a$__as__z$3e$__["z"].string().optional(), + phone: __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$zod$40$3$2e$25$2e$76$2f$node_modules$2f$zod$2f$v3$2f$external$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__$3c$export__$2a$__as__z$3e$__["z"].string().optional(), + telephone: __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$zod$40$3$2e$25$2e$76$2f$node_modules$2f$zod$2f$v3$2f$external$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__$3c$export__$2a$__as__z$3e$__["z"].string().optional(), + email: __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$zod$40$3$2e$25$2e$76$2f$node_modules$2f$zod$2f$v3$2f$external$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__$3c$export__$2a$__as__z$3e$__["z"].string().optional(), + address: __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$zod$40$3$2e$25$2e$76$2f$node_modules$2f$zod$2f$v3$2f$external$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__$3c$export__$2a$__as__z$3e$__["z"].string().optional(), fatherId: __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$zod$40$3$2e$25$2e$76$2f$node_modules$2f$zod$2f$v3$2f$external$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__$3c$export__$2a$__as__z$3e$__["z"].string().optional(), motherId: __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$zod$40$3$2e$25$2e$76$2f$node_modules$2f$zod$2f$v3$2f$external$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__$3c$export__$2a$__as__z$3e$__["z"].string().optional(), - spouseIds: __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$zod$40$3$2e$25$2e$76$2f$node_modules$2f$zod$2f$v3$2f$external$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__$3c$export__$2a$__as__z$3e$__["z"].array(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$zod$40$3$2e$25$2e$76$2f$node_modules$2f$zod$2f$v3$2f$external$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__$3c$export__$2a$__as__z$3e$__["z"].string()).optional() + spouseIds: __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$zod$40$3$2e$25$2e$76$2f$node_modules$2f$zod$2f$v3$2f$external$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__$3c$export__$2a$__as__z$3e$__["z"].array(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$zod$40$3$2e$25$2e$76$2f$node_modules$2f$zod$2f$v3$2f$external$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__$3c$export__$2a$__as__z$3e$__["z"].string()).optional(), + childrenIds: __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$zod$40$3$2e$25$2e$76$2f$node_modules$2f$zod$2f$v3$2f$external$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__$3c$export__$2a$__as__z$3e$__["z"].array(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$zod$40$3$2e$25$2e$76$2f$node_modules$2f$zod$2f$v3$2f$external$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__$3c$export__$2a$__as__z$3e$__["z"].string()).optional(), + spouseFatherName: __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$zod$40$3$2e$25$2e$76$2f$node_modules$2f$zod$2f$v3$2f$external$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__$3c$export__$2a$__as__z$3e$__["z"].string().optional(), + spouseMotherName: __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$zod$40$3$2e$25$2e$76$2f$node_modules$2f$zod$2f$v3$2f$external$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__$3c$export__$2a$__as__z$3e$__["z"].string().optional(), + bio: __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$zod$40$3$2e$25$2e$76$2f$node_modules$2f$zod$2f$v3$2f$external$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__$3c$export__$2a$__as__z$3e$__["z"].string().optional(), + tags: __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$zod$40$3$2e$25$2e$76$2f$node_modules$2f$zod$2f$v3$2f$external$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__$3c$export__$2a$__as__z$3e$__["z"].array(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$zod$40$3$2e$25$2e$76$2f$node_modules$2f$zod$2f$v3$2f$external$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__$3c$export__$2a$__as__z$3e$__["z"].string()).optional(), + avatarUrl: __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$zod$40$3$2e$25$2e$76$2f$node_modules$2f$zod$2f$v3$2f$external$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__$3c$export__$2a$__as__z$3e$__["z"].string().optional(), + avatarImageId: __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$zod$40$3$2e$25$2e$76$2f$node_modules$2f$zod$2f$v3$2f$external$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__$3c$export__$2a$__as__z$3e$__["z"].string().optional(), + photoIds: __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$zod$40$3$2e$25$2e$76$2f$node_modules$2f$zod$2f$v3$2f$external$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__$3c$export__$2a$__as__z$3e$__["z"].array(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$zod$40$3$2e$25$2e$76$2f$node_modules$2f$zod$2f$v3$2f$external$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__$3c$export__$2a$__as__z$3e$__["z"].string()).optional() }); async function GET(req, { params }) { try { @@ -397,6 +418,104 @@ async function POST(req, { params }) { treeId } }); + // 维护配偶双向关系 + if (data.spouseIds && data.spouseIds.length > 0) { + for (const spouseId of data.spouseIds){ + const spouse = await __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$lib$2f$prisma$2e$ts__$5b$app$2d$route$5d$__$28$ecmascript$29$__["prisma"].familyMember.findUnique({ + where: { + id: spouseId + } + }); + if (spouse && !spouse.spouseIds.includes(member.id)) { + await __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$lib$2f$prisma$2e$ts__$5b$app$2d$route$5d$__$28$ecmascript$29$__["prisma"].familyMember.update({ + where: { + id: spouseId + }, + data: { + spouseIds: [ + ...spouse.spouseIds, + member.id + ] + } + }); + } + } + } + // 维护父母-子女双向关系 + // 1. 如果设置了父亲,将当前成员添加到父亲的子女列表 + if (data.fatherId) { + const father = await __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$lib$2f$prisma$2e$ts__$5b$app$2d$route$5d$__$28$ecmascript$29$__["prisma"].familyMember.findUnique({ + where: { + id: data.fatherId + } + }); + if (father && !father.childrenIds.includes(member.id)) { + await __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$lib$2f$prisma$2e$ts__$5b$app$2d$route$5d$__$28$ecmascript$29$__["prisma"].familyMember.update({ + where: { + id: data.fatherId + }, + data: { + childrenIds: [ + ...father.childrenIds, + member.id + ] + } + }); + } + } + // 2. 如果设置了母亲,将当前成员添加到母亲的子女列表 + if (data.motherId) { + const mother = await __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$lib$2f$prisma$2e$ts__$5b$app$2d$route$5d$__$28$ecmascript$29$__["prisma"].familyMember.findUnique({ + where: { + id: data.motherId + } + }); + if (mother && !mother.childrenIds.includes(member.id)) { + await __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$lib$2f$prisma$2e$ts__$5b$app$2d$route$5d$__$28$ecmascript$29$__["prisma"].familyMember.update({ + where: { + id: data.motherId + }, + data: { + childrenIds: [ + ...mother.childrenIds, + member.id + ] + } + }); + } + } + // 3. 如果设置了子女,将当前成员设置为子女的父亲或母亲 + if (data.childrenIds && data.childrenIds.length > 0) { + for (const childId of data.childrenIds){ + const child = await __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$lib$2f$prisma$2e$ts__$5b$app$2d$route$5d$__$28$ecmascript$29$__["prisma"].familyMember.findUnique({ + where: { + id: childId + } + }); + if (child) { + // 根据当前成员的性别设置为父亲或母亲 + if (data.gender === 'MALE' && !child.fatherId) { + await __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$lib$2f$prisma$2e$ts__$5b$app$2d$route$5d$__$28$ecmascript$29$__["prisma"].familyMember.update({ + where: { + id: childId + }, + data: { + fatherId: member.id + } + }); + } else if (data.gender === 'FEMALE' && !child.motherId) { + await __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$lib$2f$prisma$2e$ts__$5b$app$2d$route$5d$__$28$ecmascript$29$__["prisma"].familyMember.update({ + where: { + id: childId + }, + data: { + motherId: member.id + } + }); + } + } + } + } // 记录操作日志 await __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$lib$2f$prisma$2e$ts__$5b$app$2d$route$5d$__$28$ecmascript$29$__["prisma"].activityLog.create({ data: { diff --git a/.next/dev/server/chunks/[root-of-the-server]__30c51266._.js.map b/.next/dev/server/chunks/[root-of-the-server]__30c51266._.js.map index 167f2297..6cdb0faf 100644 --- a/.next/dev/server/chunks/[root-of-the-server]__30c51266._.js.map +++ b/.next/dev/server/chunks/[root-of-the-server]__30c51266._.js.map @@ -5,5 +5,5 @@ {"offset": {"line": 112, "column": 0}, "map": {"version":3,"sources":["file:///Users/freedak/Documents/go-new/chinese-family-tree/lib/prisma.ts"],"sourcesContent":["import { PrismaClient } from '@prisma/client'\n\nconst globalForPrisma = globalThis as unknown as {\n prisma: PrismaClient | undefined\n}\n\nexport const prisma = globalForPrisma.prisma ?? new PrismaClient()\n\nif (process.env.NODE_ENV !== 'production') globalForPrisma.prisma = prisma\n"],"names":[],"mappings":";;;;AAAA;;AAEA,MAAM,kBAAkB;AAIjB,MAAM,SAAS,gBAAgB,MAAM,IAAI,IAAI,6IAAY;AAEhE,wCAA2C,gBAAgB,MAAM,GAAG"}}, {"offset": {"line": 125, "column": 0}, "map": {"version":3,"sources":["file:///Users/freedak/Documents/go-new/chinese-family-tree/lib/auth.ts"],"sourcesContent":["import type { NextAuthOptions } from \"next-auth\"\nimport CredentialsProvider from \"next-auth/providers/credentials\"\nimport { prisma } from \"./prisma\"\nimport bcrypt from \"bcryptjs\"\n\nexport const authOptions: NextAuthOptions = {\n providers: [\n CredentialsProvider({\n name: \"credentials\",\n credentials: {\n email: { label: \"Email\", type: \"email\" },\n password: { label: \"Password\", type: \"password\" }\n },\n async authorize(credentials) {\n if (!credentials?.email || !credentials?.password) {\n throw new Error(\"请输入邮箱和密码\")\n }\n\n const user = await prisma.user.findUnique({\n where: { email: credentials.email }\n })\n\n if (!user || !user.password) {\n throw new Error(\"用户不存在\")\n }\n\n const isValid = await bcrypt.compare(credentials.password, user.password)\n\n if (!isValid) {\n throw new Error(\"密码错误\")\n }\n\n return {\n id: user.id,\n email: user.email,\n name: user.name,\n }\n }\n })\n ],\n session: {\n strategy: \"jwt\"\n },\n pages: {\n signIn: \"/auth/signin\",\n },\n callbacks: {\n async jwt({ token, user }) {\n if (user) {\n token.id = user.id\n }\n return token\n },\n async session({ session, token }) {\n if (session.user) {\n session.user.id = token.id as string\n }\n return session\n }\n }\n}\n"],"names":[],"mappings":";;;;AACA;AACA;AACA;;;;AAEO,MAAM,cAA+B;IAC1C,WAAW;QACT,IAAA,8aAAmB,EAAC;YAClB,MAAM;YACN,aAAa;gBACX,OAAO;oBAAE,OAAO;oBAAS,MAAM;gBAAQ;gBACvC,UAAU;oBAAE,OAAO;oBAAY,MAAM;gBAAW;YAClD;YACA,MAAM,WAAU,WAAW;gBACzB,IAAI,CAAC,aAAa,SAAS,CAAC,aAAa,UAAU;oBACjD,MAAM,IAAI,MAAM;gBAClB;gBAEA,MAAM,OAAO,MAAM,gLAAM,CAAC,IAAI,CAAC,UAAU,CAAC;oBACxC,OAAO;wBAAE,OAAO,YAAY,KAAK;oBAAC;gBACpC;gBAEA,IAAI,CAAC,QAAQ,CAAC,KAAK,QAAQ,EAAE;oBAC3B,MAAM,IAAI,MAAM;gBAClB;gBAEA,MAAM,UAAU,MAAM,0PAAM,CAAC,OAAO,CAAC,YAAY,QAAQ,EAAE,KAAK,QAAQ;gBAExE,IAAI,CAAC,SAAS;oBACZ,MAAM,IAAI,MAAM;gBAClB;gBAEA,OAAO;oBACL,IAAI,KAAK,EAAE;oBACX,OAAO,KAAK,KAAK;oBACjB,MAAM,KAAK,IAAI;gBACjB;YACF;QACF;KACD;IACD,SAAS;QACP,UAAU;IACZ;IACA,OAAO;QACL,QAAQ;IACV;IACA,WAAW;QACT,MAAM,KAAI,EAAE,KAAK,EAAE,IAAI,EAAE;YACvB,IAAI,MAAM;gBACR,MAAM,EAAE,GAAG,KAAK,EAAE;YACpB;YACA,OAAO;QACT;QACA,MAAM,SAAQ,EAAE,OAAO,EAAE,KAAK,EAAE;YAC9B,IAAI,QAAQ,IAAI,EAAE;gBAChB,QAAQ,IAAI,CAAC,EAAE,GAAG,MAAM,EAAE;YAC5B;YACA,OAAO;QACT;IACF;AACF"}}, {"offset": {"line": 198, "column": 0}, "map": {"version":3,"sources":["file:///Users/freedak/Documents/go-new/chinese-family-tree/lib/permissions.ts"],"sourcesContent":["import { prisma } from \"./prisma\"\nimport { Role } from \"@prisma/client\"\n\nexport async function checkPermission(\n userId: string,\n treeId: string,\n requiredRole: Role = Role.VIEWER\n) {\n // 检查是否是所有者\n const tree = await prisma.familyTree.findFirst({\n where: {\n id: treeId,\n ownerId: userId\n }\n })\n\n if (tree) {\n return { hasPermission: true, role: Role.OWNER }\n }\n\n // 检查协作者权限\n const collaborator = await prisma.treeCollaborator.findFirst({\n where: {\n treeId,\n userId\n }\n })\n\n if (!collaborator) {\n return { hasPermission: false, role: null }\n }\n\n const roleHierarchy = {\n [Role.OWNER]: 3,\n [Role.EDITOR]: 2,\n [Role.VIEWER]: 1\n }\n\n const hasPermission = roleHierarchy[collaborator.role] >= roleHierarchy[requiredRole]\n\n return { hasPermission, role: collaborator.role }\n}\n\nexport async function requireAuth(userId: string | undefined) {\n if (!userId) {\n throw new Error(\"未授权\")\n }\n return userId\n}\n"],"names":[],"mappings":";;;;;;AAAA;AACA;;;AAEO,eAAe,gBACpB,MAAc,EACd,MAAc,EACd,eAAqB,qIAAI,CAAC,MAAM;IAEhC,WAAW;IACX,MAAM,OAAO,MAAM,gLAAM,CAAC,UAAU,CAAC,SAAS,CAAC;QAC7C,OAAO;YACL,IAAI;YACJ,SAAS;QACX;IACF;IAEA,IAAI,MAAM;QACR,OAAO;YAAE,eAAe;YAAM,MAAM,qIAAI,CAAC,KAAK;QAAC;IACjD;IAEA,UAAU;IACV,MAAM,eAAe,MAAM,gLAAM,CAAC,gBAAgB,CAAC,SAAS,CAAC;QAC3D,OAAO;YACL;YACA;QACF;IACF;IAEA,IAAI,CAAC,cAAc;QACjB,OAAO;YAAE,eAAe;YAAO,MAAM;QAAK;IAC5C;IAEA,MAAM,gBAAgB;QACpB,CAAC,qIAAI,CAAC,KAAK,CAAC,EAAE;QACd,CAAC,qIAAI,CAAC,MAAM,CAAC,EAAE;QACf,CAAC,qIAAI,CAAC,MAAM,CAAC,EAAE;IACjB;IAEA,MAAM,gBAAgB,aAAa,CAAC,aAAa,IAAI,CAAC,IAAI,aAAa,CAAC,aAAa;IAErF,OAAO;QAAE;QAAe,MAAM,aAAa,IAAI;IAAC;AAClD;AAEO,eAAe,YAAY,MAA0B;IAC1D,IAAI,CAAC,QAAQ;QACX,MAAM,IAAI,MAAM;IAClB;IACA,OAAO;AACT"}}, - {"offset": {"line": 256, "column": 0}, "map": {"version":3,"sources":["file:///Users/freedak/Documents/go-new/chinese-family-tree/app/api/trees/%5BtreeId%5D/members/route.ts"],"sourcesContent":["import { NextRequest, NextResponse } from \"next/server\"\nimport { getServerSession } from \"next-auth\"\nimport { authOptions } from \"@/lib/auth\"\nimport { prisma } from \"@/lib/prisma\"\nimport { checkPermission } from \"@/lib/permissions\"\nimport { Role, Gender } from \"@prisma/client\"\nimport { z } from \"zod\"\n\nconst createMemberSchema = z.object({\n surname: z.string().min(1),\n givenName: z.string().min(1),\n fullName: z.string().min(1),\n gender: z.nativeEnum(Gender),\n generation: z.number().int().positive(),\n birthDate: z.string().optional(),\n deathDate: z.string().optional(),\n fatherId: z.string().optional(),\n motherId: z.string().optional(),\n spouseIds: z.array(z.string()).optional(),\n // ... 其他字段\n})\n\n// 获取家族树的所有成员\nexport async function GET(\n req: NextRequest,\n { params }: { params: Promise<{ treeId: string }> }\n) {\n try {\n const session = await getServerSession(authOptions)\n \n if (!session?.user?.id) {\n return NextResponse.json({ error: \"未授权\" }, { status: 401 })\n }\n\n const { treeId } = await params\n\n // 检查权限\n const { hasPermission } = await checkPermission(session.user.id, treeId)\n if (!hasPermission) {\n return NextResponse.json({ error: \"无权访问此家族树\" }, { status: 403 })\n }\n\n // 获取家族树信息\n const tree = await prisma.familyTree.findUnique({\n where: { id: treeId },\n select: { rootMemberId: true }\n })\n\n const members = await prisma.familyMember.findMany({\n where: { treeId },\n orderBy: [\n { generation: 'asc' },\n { createdAt: 'asc' }\n ]\n })\n\n // 如果没有设置 rootMemberId,尝试找到第一代成员作为根\n let rootId = tree?.rootMemberId\n if (!rootId && members.length > 0) {\n const firstGenMember = members.find((m: any) => m.generation === 1)\n if (firstGenMember) {\n rootId = firstGenMember.id\n // 更新家族树的 rootMemberId\n await prisma.familyTree.update({\n where: { id: treeId },\n data: { rootMemberId: firstGenMember.id }\n })\n }\n }\n\n console.log('👥 GET /api/trees/[treeId]/members 返回数据:', {\n treeId,\n userId: session.user.id,\n membersCount: members.length,\n rootId,\n members: members.map(m => ({ id: m.id, fullName: m.fullName, generation: m.generation }))\n })\n\n return NextResponse.json({ members, rootId })\n } catch (error) {\n console.error(\"获取成员失败:\", error)\n return NextResponse.json(\n { error: \"获取成员失败\" },\n { status: 500 }\n )\n }\n}\n\n// 创建新成员\nexport async function POST(\n req: NextRequest,\n { params }: { params: Promise<{ treeId: string }> }\n) {\n try {\n const session = await getServerSession(authOptions)\n \n if (!session?.user?.id) {\n return NextResponse.json({ error: \"未授权\" }, { status: 401 })\n }\n\n const { treeId } = await params\n\n // 检查权限(需要 EDITOR 权限)\n const { hasPermission } = await checkPermission(session.user.id, treeId, Role.EDITOR)\n if (!hasPermission) {\n return NextResponse.json({ error: \"无权限添加成员\" }, { status: 403 })\n }\n\n const body = await req.json()\n const data = createMemberSchema.parse(body)\n\n const member = await prisma.familyMember.create({\n data: {\n ...data,\n treeId,\n }\n })\n\n // 记录操作日志\n await prisma.activityLog.create({\n data: {\n treeId,\n userId: session.user.id,\n action: 'CREATE',\n entityType: 'MEMBER',\n entityId: member.id,\n entityName: member.fullName,\n }\n })\n\n return NextResponse.json({ member }, { status: 201 })\n } catch (error) {\n if (error instanceof z.ZodError) {\n return NextResponse.json(\n { error: error.errors[0].message },\n { status: 400 }\n )\n }\n \n console.error(\"创建成员失败:\", error)\n return NextResponse.json(\n { error: \"创建成员失败\" },\n { status: 500 }\n )\n }\n}\n"],"names":[],"mappings":"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"}}] + {"offset": {"line": 256, "column": 0}, "map": {"version":3,"sources":["file:///Users/freedak/Documents/go-new/chinese-family-tree/app/api/trees/%5BtreeId%5D/members/route.ts"],"sourcesContent":["import { NextRequest, NextResponse } from \"next/server\"\nimport { getServerSession } from \"next-auth\"\nimport { authOptions } from \"@/lib/auth\"\nimport { prisma } from \"@/lib/prisma\"\nimport { checkPermission } from \"@/lib/permissions\"\nimport { Role, Gender } from \"@prisma/client\"\nimport { z } from \"zod\"\n\nconst createMemberSchema = z.object({\n surname: z.string().min(1),\n givenName: z.string().min(1),\n fullName: z.string().min(1),\n gender: z.nativeEnum(Gender),\n generation: z.number().int().positive(),\n generationName: z.string().optional(),\n courtesyName: z.string().optional(),\n artName: z.string().optional(),\n posthumousName: z.string().optional(),\n rank: z.number().optional(),\n birthDate: z.string().optional(),\n deathDate: z.string().optional(),\n isLunarDate: z.boolean().optional(),\n ancestralHome: z.string().optional(),\n birthPlace: z.string().optional(),\n burialPlace: z.string().optional(),\n phone: z.string().optional(),\n telephone: z.string().optional(),\n email: z.string().optional(),\n address: z.string().optional(),\n fatherId: z.string().optional(),\n motherId: z.string().optional(),\n spouseIds: z.array(z.string()).optional(),\n childrenIds: z.array(z.string()).optional(),\n spouseFatherName: z.string().optional(),\n spouseMotherName: z.string().optional(),\n bio: z.string().optional(),\n tags: z.array(z.string()).optional(),\n avatarUrl: z.string().optional(),\n avatarImageId: z.string().optional(),\n photoIds: z.array(z.string()).optional(),\n})\n\n// 获取家族树的所有成员\nexport async function GET(\n req: NextRequest,\n { params }: { params: Promise<{ treeId: string }> }\n) {\n try {\n const session = await getServerSession(authOptions)\n \n if (!session?.user?.id) {\n return NextResponse.json({ error: \"未授权\" }, { status: 401 })\n }\n\n const { treeId } = await params\n\n // 检查权限\n const { hasPermission } = await checkPermission(session.user.id, treeId)\n if (!hasPermission) {\n return NextResponse.json({ error: \"无权访问此家族树\" }, { status: 403 })\n }\n\n // 获取家族树信息\n const tree = await prisma.familyTree.findUnique({\n where: { id: treeId },\n select: { rootMemberId: true }\n })\n\n const members = await prisma.familyMember.findMany({\n where: { treeId },\n orderBy: [\n { generation: 'asc' },\n { createdAt: 'asc' }\n ]\n })\n\n // 如果没有设置 rootMemberId,尝试找到第一代成员作为根\n let rootId = tree?.rootMemberId\n if (!rootId && members.length > 0) {\n const firstGenMember = members.find((m: any) => m.generation === 1)\n if (firstGenMember) {\n rootId = firstGenMember.id\n // 更新家族树的 rootMemberId\n await prisma.familyTree.update({\n where: { id: treeId },\n data: { rootMemberId: firstGenMember.id }\n })\n }\n }\n\n console.log('👥 GET /api/trees/[treeId]/members 返回数据:', {\n treeId,\n userId: session.user.id,\n membersCount: members.length,\n rootId,\n members: members.map(m => ({ id: m.id, fullName: m.fullName, generation: m.generation }))\n })\n\n return NextResponse.json({ members, rootId })\n } catch (error) {\n console.error(\"获取成员失败:\", error)\n return NextResponse.json(\n { error: \"获取成员失败\" },\n { status: 500 }\n )\n }\n}\n\n// 创建新成员\nexport async function POST(\n req: NextRequest,\n { params }: { params: Promise<{ treeId: string }> }\n) {\n try {\n const session = await getServerSession(authOptions)\n \n if (!session?.user?.id) {\n return NextResponse.json({ error: \"未授权\" }, { status: 401 })\n }\n\n const { treeId } = await params\n\n // 检查权限(需要 EDITOR 权限)\n const { hasPermission } = await checkPermission(session.user.id, treeId, Role.EDITOR)\n if (!hasPermission) {\n return NextResponse.json({ error: \"无权限添加成员\" }, { status: 403 })\n }\n\n const body = await req.json()\n const data = createMemberSchema.parse(body)\n\n const member = await prisma.familyMember.create({\n data: {\n ...data,\n treeId,\n }\n })\n\n // 维护配偶双向关系\n if (data.spouseIds && data.spouseIds.length > 0) {\n for (const spouseId of data.spouseIds) {\n const spouse = await prisma.familyMember.findUnique({\n where: { id: spouseId }\n })\n \n if (spouse && !spouse.spouseIds.includes(member.id)) {\n await prisma.familyMember.update({\n where: { id: spouseId },\n data: {\n spouseIds: [...spouse.spouseIds, member.id]\n }\n })\n }\n }\n }\n\n // 维护父母-子女双向关系\n // 1. 如果设置了父亲,将当前成员添加到父亲的子女列表\n if (data.fatherId) {\n const father = await prisma.familyMember.findUnique({\n where: { id: data.fatherId }\n })\n \n if (father && !father.childrenIds.includes(member.id)) {\n await prisma.familyMember.update({\n where: { id: data.fatherId },\n data: {\n childrenIds: [...father.childrenIds, member.id]\n }\n })\n }\n }\n\n // 2. 如果设置了母亲,将当前成员添加到母亲的子女列表\n if (data.motherId) {\n const mother = await prisma.familyMember.findUnique({\n where: { id: data.motherId }\n })\n \n if (mother && !mother.childrenIds.includes(member.id)) {\n await prisma.familyMember.update({\n where: { id: data.motherId },\n data: {\n childrenIds: [...mother.childrenIds, member.id]\n }\n })\n }\n }\n\n // 3. 如果设置了子女,将当前成员设置为子女的父亲或母亲\n if (data.childrenIds && data.childrenIds.length > 0) {\n for (const childId of data.childrenIds) {\n const child = await prisma.familyMember.findUnique({\n where: { id: childId }\n })\n \n if (child) {\n // 根据当前成员的性别设置为父亲或母亲\n if (data.gender === 'MALE' && !child.fatherId) {\n await prisma.familyMember.update({\n where: { id: childId },\n data: { fatherId: member.id }\n })\n } else if (data.gender === 'FEMALE' && !child.motherId) {\n await prisma.familyMember.update({\n where: { id: childId },\n data: { motherId: member.id }\n })\n }\n }\n }\n }\n\n // 记录操作日志\n await prisma.activityLog.create({\n data: {\n treeId,\n userId: session.user.id,\n action: 'CREATE',\n entityType: 'MEMBER',\n entityId: member.id,\n entityName: member.fullName,\n }\n })\n\n return NextResponse.json({ member }, { status: 201 })\n } catch (error) {\n if (error instanceof z.ZodError) {\n return NextResponse.json(\n { error: error.errors[0].message },\n { status: 400 }\n )\n }\n \n console.error(\"创建成员失败:\", error)\n return NextResponse.json(\n { error: \"创建成员失败\" },\n { status: 500 }\n )\n }\n}\n"],"names":[],"mappings":";;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;AAEA,MAAM,qBAAqB,kRAAC,CAAC,MAAM,CAAC;IAClC,SAAS,kRAAC,CAAC,MAAM,GAAG,GAAG,CAAC;IACxB,WAAW,kRAAC,CAAC,MAAM,GAAG,GAAG,CAAC;IAC1B,UAAU,kRAAC,CAAC,MAAM,GAAG,GAAG,CAAC;IACzB,QAAQ,kRAAC,CAAC,UAAU,CAAC,uIAAM;IAC3B,YAAY,kRAAC,CAAC,MAAM,GAAG,GAAG,GAAG,QAAQ;IACrC,gBAAgB,kRAAC,CAAC,MAAM,GAAG,QAAQ;IACnC,cAAc,kRAAC,CAAC,MAAM,GAAG,QAAQ;IACjC,SAAS,kRAAC,CAAC,MAAM,GAAG,QAAQ;IAC5B,gBAAgB,kRAAC,CAAC,MAAM,GAAG,QAAQ;IACnC,MAAM,kRAAC,CAAC,MAAM,GAAG,QAAQ;IACzB,WAAW,kRAAC,CAAC,MAAM,GAAG,QAAQ;IAC9B,WAAW,kRAAC,CAAC,MAAM,GAAG,QAAQ;IAC9B,aAAa,kRAAC,CAAC,OAAO,GAAG,QAAQ;IACjC,eAAe,kRAAC,CAAC,MAAM,GAAG,QAAQ;IAClC,YAAY,kRAAC,CAAC,MAAM,GAAG,QAAQ;IAC/B,aAAa,kRAAC,CAAC,MAAM,GAAG,QAAQ;IAChC,OAAO,kRAAC,CAAC,MAAM,GAAG,QAAQ;IAC1B,WAAW,kRAAC,CAAC,MAAM,GAAG,QAAQ;IAC9B,OAAO,kRAAC,CAAC,MAAM,GAAG,QAAQ;IAC1B,SAAS,kRAAC,CAAC,MAAM,GAAG,QAAQ;IAC5B,UAAU,kRAAC,CAAC,MAAM,GAAG,QAAQ;IAC7B,UAAU,kRAAC,CAAC,MAAM,GAAG,QAAQ;IAC7B,WAAW,kRAAC,CAAC,KAAK,CAAC,kRAAC,CAAC,MAAM,IAAI,QAAQ;IACvC,aAAa,kRAAC,CAAC,KAAK,CAAC,kRAAC,CAAC,MAAM,IAAI,QAAQ;IACzC,kBAAkB,kRAAC,CAAC,MAAM,GAAG,QAAQ;IACrC,kBAAkB,kRAAC,CAAC,MAAM,GAAG,QAAQ;IACrC,KAAK,kRAAC,CAAC,MAAM,GAAG,QAAQ;IACxB,MAAM,kRAAC,CAAC,KAAK,CAAC,kRAAC,CAAC,MAAM,IAAI,QAAQ;IAClC,WAAW,kRAAC,CAAC,MAAM,GAAG,QAAQ;IAC9B,eAAe,kRAAC,CAAC,MAAM,GAAG,QAAQ;IAClC,UAAU,kRAAC,CAAC,KAAK,CAAC,kRAAC,CAAC,MAAM,IAAI,QAAQ;AACxC;AAGO,eAAe,IACpB,GAAgB,EAChB,EAAE,MAAM,EAA2C;IAEnD,IAAI;QACF,MAAM,UAAU,MAAM,IAAA,oaAAgB,EAAC,mLAAW;QAElD,IAAI,CAAC,SAAS,MAAM,IAAI;YACtB,OAAO,sUAAY,CAAC,IAAI,CAAC;gBAAE,OAAO;YAAM,GAAG;gBAAE,QAAQ;YAAI;QAC3D;QAEA,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM;QAEzB,OAAO;QACP,MAAM,EAAE,aAAa,EAAE,GAAG,MAAM,IAAA,8LAAe,EAAC,QAAQ,IAAI,CAAC,EAAE,EAAE;QACjE,IAAI,CAAC,eAAe;YAClB,OAAO,sUAAY,CAAC,IAAI,CAAC;gBAAE,OAAO;YAAW,GAAG;gBAAE,QAAQ;YAAI;QAChE;QAEA,UAAU;QACV,MAAM,OAAO,MAAM,gLAAM,CAAC,UAAU,CAAC,UAAU,CAAC;YAC9C,OAAO;gBAAE,IAAI;YAAO;YACpB,QAAQ;gBAAE,cAAc;YAAK;QAC/B;QAEA,MAAM,UAAU,MAAM,gLAAM,CAAC,YAAY,CAAC,QAAQ,CAAC;YACjD,OAAO;gBAAE;YAAO;YAChB,SAAS;gBACP;oBAAE,YAAY;gBAAM;gBACpB;oBAAE,WAAW;gBAAM;aACpB;QACH;QAEA,mCAAmC;QACnC,IAAI,SAAS,MAAM;QACnB,IAAI,CAAC,UAAU,QAAQ,MAAM,GAAG,GAAG;YACjC,MAAM,iBAAiB,QAAQ,IAAI,CAAC,CAAC,IAAW,EAAE,UAAU,KAAK;YACjE,IAAI,gBAAgB;gBAClB,SAAS,eAAe,EAAE;gBAC1B,sBAAsB;gBACtB,MAAM,gLAAM,CAAC,UAAU,CAAC,MAAM,CAAC;oBAC7B,OAAO;wBAAE,IAAI;oBAAO;oBACpB,MAAM;wBAAE,cAAc,eAAe,EAAE;oBAAC;gBAC1C;YACF;QACF;QAEA,QAAQ,GAAG,CAAC,4CAA4C;YACtD;YACA,QAAQ,QAAQ,IAAI,CAAC,EAAE;YACvB,cAAc,QAAQ,MAAM;YAC5B;YACA,SAAS,QAAQ,GAAG,CAAC,CAAA,IAAK,CAAC;oBAAE,IAAI,EAAE,EAAE;oBAAE,UAAU,EAAE,QAAQ;oBAAE,YAAY,EAAE,UAAU;gBAAC,CAAC;QACzF;QAEA,OAAO,sUAAY,CAAC,IAAI,CAAC;YAAE;YAAS;QAAO;IAC7C,EAAE,OAAO,OAAO;QACd,QAAQ,KAAK,CAAC,WAAW;QACzB,OAAO,sUAAY,CAAC,IAAI,CACtB;YAAE,OAAO;QAAS,GAClB;YAAE,QAAQ;QAAI;IAElB;AACF;AAGO,eAAe,KACpB,GAAgB,EAChB,EAAE,MAAM,EAA2C;IAEnD,IAAI;QACF,MAAM,UAAU,MAAM,IAAA,oaAAgB,EAAC,mLAAW;QAElD,IAAI,CAAC,SAAS,MAAM,IAAI;YACtB,OAAO,sUAAY,CAAC,IAAI,CAAC;gBAAE,OAAO;YAAM,GAAG;gBAAE,QAAQ;YAAI;QAC3D;QAEA,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM;QAEzB,qBAAqB;QACrB,MAAM,EAAE,aAAa,EAAE,GAAG,MAAM,IAAA,8LAAe,EAAC,QAAQ,IAAI,CAAC,EAAE,EAAE,QAAQ,qIAAI,CAAC,MAAM;QACpF,IAAI,CAAC,eAAe;YAClB,OAAO,sUAAY,CAAC,IAAI,CAAC;gBAAE,OAAO;YAAU,GAAG;gBAAE,QAAQ;YAAI;QAC/D;QAEA,MAAM,OAAO,MAAM,IAAI,IAAI;QAC3B,MAAM,OAAO,mBAAmB,KAAK,CAAC;QAEtC,MAAM,SAAS,MAAM,gLAAM,CAAC,YAAY,CAAC,MAAM,CAAC;YAC9C,MAAM;gBACJ,GAAG,IAAI;gBACP;YACF;QACF;QAEA,WAAW;QACX,IAAI,KAAK,SAAS,IAAI,KAAK,SAAS,CAAC,MAAM,GAAG,GAAG;YAC/C,KAAK,MAAM,YAAY,KAAK,SAAS,CAAE;gBACrC,MAAM,SAAS,MAAM,gLAAM,CAAC,YAAY,CAAC,UAAU,CAAC;oBAClD,OAAO;wBAAE,IAAI;oBAAS;gBACxB;gBAEA,IAAI,UAAU,CAAC,OAAO,SAAS,CAAC,QAAQ,CAAC,OAAO,EAAE,GAAG;oBACnD,MAAM,gLAAM,CAAC,YAAY,CAAC,MAAM,CAAC;wBAC/B,OAAO;4BAAE,IAAI;wBAAS;wBACtB,MAAM;4BACJ,WAAW;mCAAI,OAAO,SAAS;gCAAE,OAAO,EAAE;6BAAC;wBAC7C;oBACF;gBACF;YACF;QACF;QAEA,cAAc;QACd,6BAA6B;QAC7B,IAAI,KAAK,QAAQ,EAAE;YACjB,MAAM,SAAS,MAAM,gLAAM,CAAC,YAAY,CAAC,UAAU,CAAC;gBAClD,OAAO;oBAAE,IAAI,KAAK,QAAQ;gBAAC;YAC7B;YAEA,IAAI,UAAU,CAAC,OAAO,WAAW,CAAC,QAAQ,CAAC,OAAO,EAAE,GAAG;gBACrD,MAAM,gLAAM,CAAC,YAAY,CAAC,MAAM,CAAC;oBAC/B,OAAO;wBAAE,IAAI,KAAK,QAAQ;oBAAC;oBAC3B,MAAM;wBACJ,aAAa;+BAAI,OAAO,WAAW;4BAAE,OAAO,EAAE;yBAAC;oBACjD;gBACF;YACF;QACF;QAEA,6BAA6B;QAC7B,IAAI,KAAK,QAAQ,EAAE;YACjB,MAAM,SAAS,MAAM,gLAAM,CAAC,YAAY,CAAC,UAAU,CAAC;gBAClD,OAAO;oBAAE,IAAI,KAAK,QAAQ;gBAAC;YAC7B;YAEA,IAAI,UAAU,CAAC,OAAO,WAAW,CAAC,QAAQ,CAAC,OAAO,EAAE,GAAG;gBACrD,MAAM,gLAAM,CAAC,YAAY,CAAC,MAAM,CAAC;oBAC/B,OAAO;wBAAE,IAAI,KAAK,QAAQ;oBAAC;oBAC3B,MAAM;wBACJ,aAAa;+BAAI,OAAO,WAAW;4BAAE,OAAO,EAAE;yBAAC;oBACjD;gBACF;YACF;QACF;QAEA,8BAA8B;QAC9B,IAAI,KAAK,WAAW,IAAI,KAAK,WAAW,CAAC,MAAM,GAAG,GAAG;YACnD,KAAK,MAAM,WAAW,KAAK,WAAW,CAAE;gBACtC,MAAM,QAAQ,MAAM,gLAAM,CAAC,YAAY,CAAC,UAAU,CAAC;oBACjD,OAAO;wBAAE,IAAI;oBAAQ;gBACvB;gBAEA,IAAI,OAAO;oBACT,oBAAoB;oBACpB,IAAI,KAAK,MAAM,KAAK,UAAU,CAAC,MAAM,QAAQ,EAAE;wBAC7C,MAAM,gLAAM,CAAC,YAAY,CAAC,MAAM,CAAC;4BAC/B,OAAO;gCAAE,IAAI;4BAAQ;4BACrB,MAAM;gCAAE,UAAU,OAAO,EAAE;4BAAC;wBAC9B;oBACF,OAAO,IAAI,KAAK,MAAM,KAAK,YAAY,CAAC,MAAM,QAAQ,EAAE;wBACtD,MAAM,gLAAM,CAAC,YAAY,CAAC,MAAM,CAAC;4BAC/B,OAAO;gCAAE,IAAI;4BAAQ;4BACrB,MAAM;gCAAE,UAAU,OAAO,EAAE;4BAAC;wBAC9B;oBACF;gBACF;YACF;QACF;QAEA,SAAS;QACT,MAAM,gLAAM,CAAC,WAAW,CAAC,MAAM,CAAC;YAC9B,MAAM;gBACJ;gBACA,QAAQ,QAAQ,IAAI,CAAC,EAAE;gBACvB,QAAQ;gBACR,YAAY;gBACZ,UAAU,OAAO,EAAE;gBACnB,YAAY,OAAO,QAAQ;YAC7B;QACF;QAEA,OAAO,sUAAY,CAAC,IAAI,CAAC;YAAE;QAAO,GAAG;YAAE,QAAQ;QAAI;IACrD,EAAE,OAAO,OAAO;QACd,IAAI,iBAAiB,kRAAC,CAAC,QAAQ,EAAE;YAC/B,OAAO,sUAAY,CAAC,IAAI,CACtB;gBAAE,OAAO,MAAM,MAAM,CAAC,EAAE,CAAC,OAAO;YAAC,GACjC;gBAAE,QAAQ;YAAI;QAElB;QAEA,QAAQ,KAAK,CAAC,WAAW;QACzB,OAAO,sUAAY,CAAC,IAAI,CACtB;YAAE,OAAO;QAAS,GAClB;YAAE,QAAQ;QAAI;IAElB;AACF"}}] } \ No newline at end of file diff --git a/.next/dev/server/chunks/[root-of-the-server]__a8e2023b._.js b/.next/dev/server/chunks/[root-of-the-server]__a8e2023b._.js index dd8ed3f1..01294680 100644 --- a/.next/dev/server/chunks/[root-of-the-server]__a8e2023b._.js +++ b/.next/dev/server/chunks/[root-of-the-server]__a8e2023b._.js @@ -363,6 +363,212 @@ async function PATCH(req, { params }) { updatedAt: new Date() } }); + // 维护配偶双向关系 + if (body.spouseIds !== undefined) { + const newSpouseIds = body.spouseIds || []; + const oldSpouseIds = existingMember.spouseIds || []; + // 添加新配偶的反向关系 + for (const spouseId of newSpouseIds){ + if (!oldSpouseIds.includes(spouseId)) { + const spouse = await __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$lib$2f$prisma$2e$ts__$5b$app$2d$route$5d$__$28$ecmascript$29$__["prisma"].familyMember.findUnique({ + where: { + id: spouseId + } + }); + if (spouse && !spouse.spouseIds.includes(memberId)) { + await __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$lib$2f$prisma$2e$ts__$5b$app$2d$route$5d$__$28$ecmascript$29$__["prisma"].familyMember.update({ + where: { + id: spouseId + }, + data: { + spouseIds: [ + ...spouse.spouseIds, + memberId + ] + } + }); + } + } + } + // 移除旧配偶的反向关系 + for (const oldSpouseId of oldSpouseIds){ + if (!newSpouseIds.includes(oldSpouseId)) { + const spouse = await __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$lib$2f$prisma$2e$ts__$5b$app$2d$route$5d$__$28$ecmascript$29$__["prisma"].familyMember.findUnique({ + where: { + id: oldSpouseId + } + }); + if (spouse && spouse.spouseIds.includes(memberId)) { + await __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$lib$2f$prisma$2e$ts__$5b$app$2d$route$5d$__$28$ecmascript$29$__["prisma"].familyMember.update({ + where: { + id: oldSpouseId + }, + data: { + spouseIds: spouse.spouseIds.filter((id)=>id !== memberId) + } + }); + } + } + } + } + // 维护父母-子女双向关系 + // 1. 处理父亲关系变化 + if (body.fatherId !== undefined) { + const oldFatherId = existingMember.fatherId; + const newFatherId = body.fatherId; + // 从旧父亲的子女列表中移除 + if (oldFatherId && oldFatherId !== newFatherId) { + const oldFather = await __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$lib$2f$prisma$2e$ts__$5b$app$2d$route$5d$__$28$ecmascript$29$__["prisma"].familyMember.findUnique({ + where: { + id: oldFatherId + } + }); + if (oldFather && oldFather.childrenIds.includes(memberId)) { + await __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$lib$2f$prisma$2e$ts__$5b$app$2d$route$5d$__$28$ecmascript$29$__["prisma"].familyMember.update({ + where: { + id: oldFatherId + }, + data: { + childrenIds: oldFather.childrenIds.filter((id)=>id !== memberId) + } + }); + } + } + // 添加到新父亲的子女列表 + if (newFatherId && newFatherId !== oldFatherId) { + const newFather = await __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$lib$2f$prisma$2e$ts__$5b$app$2d$route$5d$__$28$ecmascript$29$__["prisma"].familyMember.findUnique({ + where: { + id: newFatherId + } + }); + if (newFather && !newFather.childrenIds.includes(memberId)) { + await __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$lib$2f$prisma$2e$ts__$5b$app$2d$route$5d$__$28$ecmascript$29$__["prisma"].familyMember.update({ + where: { + id: newFatherId + }, + data: { + childrenIds: [ + ...newFather.childrenIds, + memberId + ] + } + }); + } + } + } + // 2. 处理母亲关系变化 + if (body.motherId !== undefined) { + const oldMotherId = existingMember.motherId; + const newMotherId = body.motherId; + // 从旧母亲的子女列表中移除 + if (oldMotherId && oldMotherId !== newMotherId) { + const oldMother = await __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$lib$2f$prisma$2e$ts__$5b$app$2d$route$5d$__$28$ecmascript$29$__["prisma"].familyMember.findUnique({ + where: { + id: oldMotherId + } + }); + if (oldMother && oldMother.childrenIds.includes(memberId)) { + await __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$lib$2f$prisma$2e$ts__$5b$app$2d$route$5d$__$28$ecmascript$29$__["prisma"].familyMember.update({ + where: { + id: oldMotherId + }, + data: { + childrenIds: oldMother.childrenIds.filter((id)=>id !== memberId) + } + }); + } + } + // 添加到新母亲的子女列表 + if (newMotherId && newMotherId !== oldMotherId) { + const newMother = await __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$lib$2f$prisma$2e$ts__$5b$app$2d$route$5d$__$28$ecmascript$29$__["prisma"].familyMember.findUnique({ + where: { + id: newMotherId + } + }); + if (newMother && !newMother.childrenIds.includes(memberId)) { + await __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$lib$2f$prisma$2e$ts__$5b$app$2d$route$5d$__$28$ecmascript$29$__["prisma"].familyMember.update({ + where: { + id: newMotherId + }, + data: { + childrenIds: [ + ...newMother.childrenIds, + memberId + ] + } + }); + } + } + } + // 3. 处理子女关系变化 + if (body.childrenIds !== undefined) { + const newChildrenIds = body.childrenIds || []; + const oldChildrenIds = existingMember.childrenIds || []; + // 添加新子女的父母关系 + for (const childId of newChildrenIds){ + if (!oldChildrenIds.includes(childId)) { + const child = await __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$lib$2f$prisma$2e$ts__$5b$app$2d$route$5d$__$28$ecmascript$29$__["prisma"].familyMember.findUnique({ + where: { + id: childId + } + }); + if (child) { + // 根据当前成员的性别设置为父亲或母亲 + if (member.gender === 'MALE' && !child.fatherId) { + await __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$lib$2f$prisma$2e$ts__$5b$app$2d$route$5d$__$28$ecmascript$29$__["prisma"].familyMember.update({ + where: { + id: childId + }, + data: { + fatherId: memberId + } + }); + } else if (member.gender === 'FEMALE' && !child.motherId) { + await __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$lib$2f$prisma$2e$ts__$5b$app$2d$route$5d$__$28$ecmascript$29$__["prisma"].familyMember.update({ + where: { + id: childId + }, + data: { + motherId: memberId + } + }); + } + } + } + } + // 移除旧子女的父母关系 + for (const oldChildId of oldChildrenIds){ + if (!newChildrenIds.includes(oldChildId)) { + const child = await __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$lib$2f$prisma$2e$ts__$5b$app$2d$route$5d$__$28$ecmascript$29$__["prisma"].familyMember.findUnique({ + where: { + id: oldChildId + } + }); + if (child) { + // 根据当前成员的性别移除父亲或母亲 + if (member.gender === 'MALE' && child.fatherId === memberId) { + await __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$lib$2f$prisma$2e$ts__$5b$app$2d$route$5d$__$28$ecmascript$29$__["prisma"].familyMember.update({ + where: { + id: oldChildId + }, + data: { + fatherId: null + } + }); + } else if (member.gender === 'FEMALE' && child.motherId === memberId) { + await __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$lib$2f$prisma$2e$ts__$5b$app$2d$route$5d$__$28$ecmascript$29$__["prisma"].familyMember.update({ + where: { + id: oldChildId + }, + data: { + motherId: null + } + }); + } + } + } + } + } // 记录操作日志 await __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$lib$2f$prisma$2e$ts__$5b$app$2d$route$5d$__$28$ecmascript$29$__["prisma"].activityLog.create({ data: { diff --git a/.next/dev/server/chunks/[root-of-the-server]__a8e2023b._.js.map b/.next/dev/server/chunks/[root-of-the-server]__a8e2023b._.js.map index 1a68ba7a..8d51e69c 100644 --- a/.next/dev/server/chunks/[root-of-the-server]__a8e2023b._.js.map +++ b/.next/dev/server/chunks/[root-of-the-server]__a8e2023b._.js.map @@ -5,5 +5,5 @@ {"offset": {"line": 112, "column": 0}, "map": {"version":3,"sources":["file:///Users/freedak/Documents/go-new/chinese-family-tree/lib/prisma.ts"],"sourcesContent":["import { PrismaClient } from '@prisma/client'\n\nconst globalForPrisma = globalThis as unknown as {\n prisma: PrismaClient | undefined\n}\n\nexport const prisma = globalForPrisma.prisma ?? new PrismaClient()\n\nif (process.env.NODE_ENV !== 'production') globalForPrisma.prisma = prisma\n"],"names":[],"mappings":";;;;AAAA;;AAEA,MAAM,kBAAkB;AAIjB,MAAM,SAAS,gBAAgB,MAAM,IAAI,IAAI,6IAAY;AAEhE,wCAA2C,gBAAgB,MAAM,GAAG"}}, {"offset": {"line": 125, "column": 0}, "map": {"version":3,"sources":["file:///Users/freedak/Documents/go-new/chinese-family-tree/lib/auth.ts"],"sourcesContent":["import type { NextAuthOptions } from \"next-auth\"\nimport CredentialsProvider from \"next-auth/providers/credentials\"\nimport { prisma } from \"./prisma\"\nimport bcrypt from \"bcryptjs\"\n\nexport const authOptions: NextAuthOptions = {\n providers: [\n CredentialsProvider({\n name: \"credentials\",\n credentials: {\n email: { label: \"Email\", type: \"email\" },\n password: { label: \"Password\", type: \"password\" }\n },\n async authorize(credentials) {\n if (!credentials?.email || !credentials?.password) {\n throw new Error(\"请输入邮箱和密码\")\n }\n\n const user = await prisma.user.findUnique({\n where: { email: credentials.email }\n })\n\n if (!user || !user.password) {\n throw new Error(\"用户不存在\")\n }\n\n const isValid = await bcrypt.compare(credentials.password, user.password)\n\n if (!isValid) {\n throw new Error(\"密码错误\")\n }\n\n return {\n id: user.id,\n email: user.email,\n name: user.name,\n }\n }\n })\n ],\n session: {\n strategy: \"jwt\"\n },\n pages: {\n signIn: \"/auth/signin\",\n },\n callbacks: {\n async jwt({ token, user }) {\n if (user) {\n token.id = user.id\n }\n return token\n },\n async session({ session, token }) {\n if (session.user) {\n session.user.id = token.id as string\n }\n return session\n }\n }\n}\n"],"names":[],"mappings":";;;;AACA;AACA;AACA;;;;AAEO,MAAM,cAA+B;IAC1C,WAAW;QACT,IAAA,8aAAmB,EAAC;YAClB,MAAM;YACN,aAAa;gBACX,OAAO;oBAAE,OAAO;oBAAS,MAAM;gBAAQ;gBACvC,UAAU;oBAAE,OAAO;oBAAY,MAAM;gBAAW;YAClD;YACA,MAAM,WAAU,WAAW;gBACzB,IAAI,CAAC,aAAa,SAAS,CAAC,aAAa,UAAU;oBACjD,MAAM,IAAI,MAAM;gBAClB;gBAEA,MAAM,OAAO,MAAM,gLAAM,CAAC,IAAI,CAAC,UAAU,CAAC;oBACxC,OAAO;wBAAE,OAAO,YAAY,KAAK;oBAAC;gBACpC;gBAEA,IAAI,CAAC,QAAQ,CAAC,KAAK,QAAQ,EAAE;oBAC3B,MAAM,IAAI,MAAM;gBAClB;gBAEA,MAAM,UAAU,MAAM,0PAAM,CAAC,OAAO,CAAC,YAAY,QAAQ,EAAE,KAAK,QAAQ;gBAExE,IAAI,CAAC,SAAS;oBACZ,MAAM,IAAI,MAAM;gBAClB;gBAEA,OAAO;oBACL,IAAI,KAAK,EAAE;oBACX,OAAO,KAAK,KAAK;oBACjB,MAAM,KAAK,IAAI;gBACjB;YACF;QACF;KACD;IACD,SAAS;QACP,UAAU;IACZ;IACA,OAAO;QACL,QAAQ;IACV;IACA,WAAW;QACT,MAAM,KAAI,EAAE,KAAK,EAAE,IAAI,EAAE;YACvB,IAAI,MAAM;gBACR,MAAM,EAAE,GAAG,KAAK,EAAE;YACpB;YACA,OAAO;QACT;QACA,MAAM,SAAQ,EAAE,OAAO,EAAE,KAAK,EAAE;YAC9B,IAAI,QAAQ,IAAI,EAAE;gBAChB,QAAQ,IAAI,CAAC,EAAE,GAAG,MAAM,EAAE;YAC5B;YACA,OAAO;QACT;IACF;AACF"}}, {"offset": {"line": 198, "column": 0}, "map": {"version":3,"sources":["file:///Users/freedak/Documents/go-new/chinese-family-tree/lib/permissions.ts"],"sourcesContent":["import { prisma } from \"./prisma\"\nimport { Role } from \"@prisma/client\"\n\nexport async function checkPermission(\n userId: string,\n treeId: string,\n requiredRole: Role = Role.VIEWER\n) {\n // 检查是否是所有者\n const tree = await prisma.familyTree.findFirst({\n where: {\n id: treeId,\n ownerId: userId\n }\n })\n\n if (tree) {\n return { hasPermission: true, role: Role.OWNER }\n }\n\n // 检查协作者权限\n const collaborator = await prisma.treeCollaborator.findFirst({\n where: {\n treeId,\n userId\n }\n })\n\n if (!collaborator) {\n return { hasPermission: false, role: null }\n }\n\n const roleHierarchy = {\n [Role.OWNER]: 3,\n [Role.EDITOR]: 2,\n [Role.VIEWER]: 1\n }\n\n const hasPermission = roleHierarchy[collaborator.role] >= roleHierarchy[requiredRole]\n\n return { hasPermission, role: collaborator.role }\n}\n\nexport async function requireAuth(userId: string | undefined) {\n if (!userId) {\n throw new Error(\"未授权\")\n }\n return userId\n}\n"],"names":[],"mappings":";;;;;;AAAA;AACA;;;AAEO,eAAe,gBACpB,MAAc,EACd,MAAc,EACd,eAAqB,qIAAI,CAAC,MAAM;IAEhC,WAAW;IACX,MAAM,OAAO,MAAM,gLAAM,CAAC,UAAU,CAAC,SAAS,CAAC;QAC7C,OAAO;YACL,IAAI;YACJ,SAAS;QACX;IACF;IAEA,IAAI,MAAM;QACR,OAAO;YAAE,eAAe;YAAM,MAAM,qIAAI,CAAC,KAAK;QAAC;IACjD;IAEA,UAAU;IACV,MAAM,eAAe,MAAM,gLAAM,CAAC,gBAAgB,CAAC,SAAS,CAAC;QAC3D,OAAO;YACL;YACA;QACF;IACF;IAEA,IAAI,CAAC,cAAc;QACjB,OAAO;YAAE,eAAe;YAAO,MAAM;QAAK;IAC5C;IAEA,MAAM,gBAAgB;QACpB,CAAC,qIAAI,CAAC,KAAK,CAAC,EAAE;QACd,CAAC,qIAAI,CAAC,MAAM,CAAC,EAAE;QACf,CAAC,qIAAI,CAAC,MAAM,CAAC,EAAE;IACjB;IAEA,MAAM,gBAAgB,aAAa,CAAC,aAAa,IAAI,CAAC,IAAI,aAAa,CAAC,aAAa;IAErF,OAAO;QAAE;QAAe,MAAM,aAAa,IAAI;IAAC;AAClD;AAEO,eAAe,YAAY,MAA0B;IAC1D,IAAI,CAAC,QAAQ;QACX,MAAM,IAAI,MAAM;IAClB;IACA,OAAO;AACT"}}, - {"offset": {"line": 256, "column": 0}, "map": {"version":3,"sources":["file:///Users/freedak/Documents/go-new/chinese-family-tree/app/api/trees/%5BtreeId%5D/members/%5BmemberId%5D/route.ts"],"sourcesContent":["import { NextRequest, NextResponse } from \"next/server\"\nimport { getServerSession } from \"next-auth\"\nimport { authOptions } from \"@/lib/auth\"\nimport { prisma } from \"@/lib/prisma\"\nimport { checkPermission } from \"@/lib/permissions\"\nimport { Role } from \"@prisma/client\"\n\n// 获取单个成员\nexport async function GET(\n req: NextRequest,\n { params }: { params: Promise<{ treeId: string; memberId: string }> }\n) {\n try {\n const session = await getServerSession(authOptions)\n \n if (!session?.user?.id) {\n return NextResponse.json({ error: \"未授权\" }, { status: 401 })\n }\n\n const { treeId, memberId } = await params\n\n // 检查权限\n const { hasPermission } = await checkPermission(session.user.id, treeId)\n if (!hasPermission) {\n return NextResponse.json({ error: \"无权访问此家族树\" }, { status: 403 })\n }\n\n const member = await prisma.familyMember.findFirst({\n where: {\n id: memberId,\n treeId,\n }\n })\n\n if (!member) {\n return NextResponse.json({ error: \"成员不存在\" }, { status: 404 })\n }\n\n return NextResponse.json({ member })\n } catch (error) {\n console.error(\"获取成员失败:\", error)\n return NextResponse.json(\n { error: \"获取成员失败\" },\n { status: 500 }\n )\n }\n}\n\n// 更新成员\nexport async function PATCH(\n req: NextRequest,\n { params }: { params: Promise<{ treeId: string; memberId: string }> }\n) {\n try {\n const session = await getServerSession(authOptions)\n \n if (!session?.user?.id) {\n return NextResponse.json({ error: \"未授权\" }, { status: 401 })\n }\n\n const { treeId, memberId } = await params\n\n // 检查权限(需要 EDITOR 权限)\n const { hasPermission } = await checkPermission(session.user.id, treeId, Role.EDITOR)\n if (!hasPermission) {\n return NextResponse.json({ error: \"无权限修改成员\" }, { status: 403 })\n }\n\n const body = await req.json()\n\n // 检查成员是否存在\n const existingMember = await prisma.familyMember.findFirst({\n where: {\n id: memberId,\n treeId,\n }\n })\n\n if (!existingMember) {\n return NextResponse.json({ error: \"成员不存在\" }, { status: 404 })\n }\n\n const member = await prisma.familyMember.update({\n where: { id: memberId },\n data: {\n ...body,\n updatedAt: new Date(),\n }\n })\n\n // 记录操作日志\n await prisma.activityLog.create({\n data: {\n treeId,\n userId: session.user.id,\n action: 'UPDATE',\n entityType: 'MEMBER',\n entityId: member.id,\n entityName: member.fullName,\n changes: body,\n }\n })\n\n return NextResponse.json({ member })\n } catch (error) {\n console.error(\"更新成员失败:\", error)\n return NextResponse.json(\n { error: \"更新成员失败\" },\n { status: 500 }\n )\n }\n}\n\n// 删除成员\nexport async function DELETE(\n req: NextRequest,\n { params }: { params: Promise<{ treeId: string; memberId: string }> }\n) {\n try {\n const session = await getServerSession(authOptions)\n \n if (!session?.user?.id) {\n return NextResponse.json({ error: \"未授权\" }, { status: 401 })\n }\n\n const { treeId, memberId } = await params\n\n // 检查权限(需要 EDITOR 权限)\n const { hasPermission } = await checkPermission(session.user.id, treeId, Role.EDITOR)\n if (!hasPermission) {\n return NextResponse.json({ error: \"无权限删除成员\" }, { status: 403 })\n }\n\n // 检查成员是否存在\n const existingMember = await prisma.familyMember.findFirst({\n where: {\n id: memberId,\n treeId,\n }\n })\n\n if (!existingMember) {\n return NextResponse.json({ error: \"成员不存在\" }, { status: 404 })\n }\n\n await prisma.familyMember.delete({\n where: { id: memberId }\n })\n\n // 记录操作日志\n await prisma.activityLog.create({\n data: {\n treeId,\n userId: session.user.id,\n action: 'DELETE',\n entityType: 'MEMBER',\n entityId: memberId,\n entityName: existingMember.fullName,\n }\n })\n\n return NextResponse.json({ success: true })\n } catch (error) {\n console.error(\"删除成员失败:\", error)\n return NextResponse.json(\n { error: \"删除成员失败\" },\n { status: 500 }\n )\n }\n}\n"],"names":[],"mappings":"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"}}] + {"offset": {"line": 256, "column": 0}, "map": {"version":3,"sources":["file:///Users/freedak/Documents/go-new/chinese-family-tree/app/api/trees/%5BtreeId%5D/members/%5BmemberId%5D/route.ts"],"sourcesContent":["import { NextRequest, NextResponse } from \"next/server\"\nimport { getServerSession } from \"next-auth\"\nimport { authOptions } from \"@/lib/auth\"\nimport { prisma } from \"@/lib/prisma\"\nimport { checkPermission } from \"@/lib/permissions\"\nimport { Role } from \"@prisma/client\"\n\n// 获取单个成员\nexport async function GET(\n req: NextRequest,\n { params }: { params: Promise<{ treeId: string; memberId: string }> }\n) {\n try {\n const session = await getServerSession(authOptions)\n \n if (!session?.user?.id) {\n return NextResponse.json({ error: \"未授权\" }, { status: 401 })\n }\n\n const { treeId, memberId } = await params\n\n // 检查权限\n const { hasPermission } = await checkPermission(session.user.id, treeId)\n if (!hasPermission) {\n return NextResponse.json({ error: \"无权访问此家族树\" }, { status: 403 })\n }\n\n const member = await prisma.familyMember.findFirst({\n where: {\n id: memberId,\n treeId,\n }\n })\n\n if (!member) {\n return NextResponse.json({ error: \"成员不存在\" }, { status: 404 })\n }\n\n return NextResponse.json({ member })\n } catch (error) {\n console.error(\"获取成员失败:\", error)\n return NextResponse.json(\n { error: \"获取成员失败\" },\n { status: 500 }\n )\n }\n}\n\n// 更新成员\nexport async function PATCH(\n req: NextRequest,\n { params }: { params: Promise<{ treeId: string; memberId: string }> }\n) {\n try {\n const session = await getServerSession(authOptions)\n \n if (!session?.user?.id) {\n return NextResponse.json({ error: \"未授权\" }, { status: 401 })\n }\n\n const { treeId, memberId } = await params\n\n // 检查权限(需要 EDITOR 权限)\n const { hasPermission } = await checkPermission(session.user.id, treeId, Role.EDITOR)\n if (!hasPermission) {\n return NextResponse.json({ error: \"无权限修改成员\" }, { status: 403 })\n }\n\n const body = await req.json()\n\n // 检查成员是否存在\n const existingMember = await prisma.familyMember.findFirst({\n where: {\n id: memberId,\n treeId,\n }\n })\n\n if (!existingMember) {\n return NextResponse.json({ error: \"成员不存在\" }, { status: 404 })\n }\n\n const member = await prisma.familyMember.update({\n where: { id: memberId },\n data: {\n ...body,\n updatedAt: new Date(),\n }\n })\n\n // 维护配偶双向关系\n if (body.spouseIds !== undefined) {\n const newSpouseIds = body.spouseIds || []\n const oldSpouseIds = existingMember.spouseIds || []\n \n // 添加新配偶的反向关系\n for (const spouseId of newSpouseIds) {\n if (!oldSpouseIds.includes(spouseId)) {\n const spouse = await prisma.familyMember.findUnique({\n where: { id: spouseId }\n })\n \n if (spouse && !spouse.spouseIds.includes(memberId)) {\n await prisma.familyMember.update({\n where: { id: spouseId },\n data: {\n spouseIds: [...spouse.spouseIds, memberId]\n }\n })\n }\n }\n }\n \n // 移除旧配偶的反向关系\n for (const oldSpouseId of oldSpouseIds) {\n if (!newSpouseIds.includes(oldSpouseId)) {\n const spouse = await prisma.familyMember.findUnique({\n where: { id: oldSpouseId }\n })\n \n if (spouse && spouse.spouseIds.includes(memberId)) {\n await prisma.familyMember.update({\n where: { id: oldSpouseId },\n data: {\n spouseIds: spouse.spouseIds.filter(id => id !== memberId)\n }\n })\n }\n }\n }\n }\n\n // 维护父母-子女双向关系\n // 1. 处理父亲关系变化\n if (body.fatherId !== undefined) {\n const oldFatherId = existingMember.fatherId\n const newFatherId = body.fatherId\n \n // 从旧父亲的子女列表中移除\n if (oldFatherId && oldFatherId !== newFatherId) {\n const oldFather = await prisma.familyMember.findUnique({\n where: { id: oldFatherId }\n })\n if (oldFather && oldFather.childrenIds.includes(memberId)) {\n await prisma.familyMember.update({\n where: { id: oldFatherId },\n data: {\n childrenIds: oldFather.childrenIds.filter(id => id !== memberId)\n }\n })\n }\n }\n \n // 添加到新父亲的子女列表\n if (newFatherId && newFatherId !== oldFatherId) {\n const newFather = await prisma.familyMember.findUnique({\n where: { id: newFatherId }\n })\n if (newFather && !newFather.childrenIds.includes(memberId)) {\n await prisma.familyMember.update({\n where: { id: newFatherId },\n data: {\n childrenIds: [...newFather.childrenIds, memberId]\n }\n })\n }\n }\n }\n\n // 2. 处理母亲关系变化\n if (body.motherId !== undefined) {\n const oldMotherId = existingMember.motherId\n const newMotherId = body.motherId\n \n // 从旧母亲的子女列表中移除\n if (oldMotherId && oldMotherId !== newMotherId) {\n const oldMother = await prisma.familyMember.findUnique({\n where: { id: oldMotherId }\n })\n if (oldMother && oldMother.childrenIds.includes(memberId)) {\n await prisma.familyMember.update({\n where: { id: oldMotherId },\n data: {\n childrenIds: oldMother.childrenIds.filter(id => id !== memberId)\n }\n })\n }\n }\n \n // 添加到新母亲的子女列表\n if (newMotherId && newMotherId !== oldMotherId) {\n const newMother = await prisma.familyMember.findUnique({\n where: { id: newMotherId }\n })\n if (newMother && !newMother.childrenIds.includes(memberId)) {\n await prisma.familyMember.update({\n where: { id: newMotherId },\n data: {\n childrenIds: [...newMother.childrenIds, memberId]\n }\n })\n }\n }\n }\n\n // 3. 处理子女关系变化\n if (body.childrenIds !== undefined) {\n const newChildrenIds = body.childrenIds || []\n const oldChildrenIds = existingMember.childrenIds || []\n \n // 添加新子女的父母关系\n for (const childId of newChildrenIds) {\n if (!oldChildrenIds.includes(childId)) {\n const child = await prisma.familyMember.findUnique({\n where: { id: childId }\n })\n \n if (child) {\n // 根据当前成员的性别设置为父亲或母亲\n if (member.gender === 'MALE' && !child.fatherId) {\n await prisma.familyMember.update({\n where: { id: childId },\n data: { fatherId: memberId }\n })\n } else if (member.gender === 'FEMALE' && !child.motherId) {\n await prisma.familyMember.update({\n where: { id: childId },\n data: { motherId: memberId }\n })\n }\n }\n }\n }\n \n // 移除旧子女的父母关系\n for (const oldChildId of oldChildrenIds) {\n if (!newChildrenIds.includes(oldChildId)) {\n const child = await prisma.familyMember.findUnique({\n where: { id: oldChildId }\n })\n \n if (child) {\n // 根据当前成员的性别移除父亲或母亲\n if (member.gender === 'MALE' && child.fatherId === memberId) {\n await prisma.familyMember.update({\n where: { id: oldChildId },\n data: { fatherId: null }\n })\n } else if (member.gender === 'FEMALE' && child.motherId === memberId) {\n await prisma.familyMember.update({\n where: { id: oldChildId },\n data: { motherId: null }\n })\n }\n }\n }\n }\n }\n\n // 记录操作日志\n await prisma.activityLog.create({\n data: {\n treeId,\n userId: session.user.id,\n action: 'UPDATE',\n entityType: 'MEMBER',\n entityId: member.id,\n entityName: member.fullName,\n changes: body,\n }\n })\n\n return NextResponse.json({ member })\n } catch (error) {\n console.error(\"更新成员失败:\", error)\n return NextResponse.json(\n { error: \"更新成员失败\" },\n { status: 500 }\n )\n }\n}\n\n// 删除成员\nexport async function DELETE(\n req: NextRequest,\n { params }: { params: Promise<{ treeId: string; memberId: string }> }\n) {\n try {\n const session = await getServerSession(authOptions)\n \n if (!session?.user?.id) {\n return NextResponse.json({ error: \"未授权\" }, { status: 401 })\n }\n\n const { treeId, memberId } = await params\n\n // 检查权限(需要 EDITOR 权限)\n const { hasPermission } = await checkPermission(session.user.id, treeId, Role.EDITOR)\n if (!hasPermission) {\n return NextResponse.json({ error: \"无权限删除成员\" }, { status: 403 })\n }\n\n // 检查成员是否存在\n const existingMember = await prisma.familyMember.findFirst({\n where: {\n id: memberId,\n treeId,\n }\n })\n\n if (!existingMember) {\n return NextResponse.json({ error: \"成员不存在\" }, { status: 404 })\n }\n\n await prisma.familyMember.delete({\n where: { id: memberId }\n })\n\n // 记录操作日志\n await prisma.activityLog.create({\n data: {\n treeId,\n userId: session.user.id,\n action: 'DELETE',\n entityType: 'MEMBER',\n entityId: memberId,\n entityName: existingMember.fullName,\n }\n })\n\n return NextResponse.json({ success: true })\n } catch (error) {\n console.error(\"删除成员失败:\", error)\n return NextResponse.json(\n { error: \"删除成员失败\" },\n { status: 500 }\n )\n }\n}\n"],"names":[],"mappings":"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"}}] } \ No newline at end of file diff --git a/.next/dev/server/chunks/ssr/4e98a_next_dist_03c86f03._.js b/.next/dev/server/chunks/ssr/4e98a_next_dist_03c86f03._.js new file mode 100644 index 00000000..6d088855 --- /dev/null +++ b/.next/dev/server/chunks/ssr/4e98a_next_dist_03c86f03._.js @@ -0,0 +1,9312 @@ +module.exports = [ +"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/server/route-modules/app-page/module.compiled.js [app-ssr] (ecmascript)", ((__turbopack_context__, module, exports) => { + +if ("TURBOPACK compile-time falsy", 0) //TURBOPACK unreachable +; +else { + if ("TURBOPACK compile-time falsy", 0) //TURBOPACK unreachable + ; + else { + if ("TURBOPACK compile-time truthy", 1) { + if ("TURBOPACK compile-time truthy", 1) { + module.exports = __turbopack_context__.r("[externals]/next/dist/compiled/next-server/app-page-turbo.runtime.dev.js [external] (next/dist/compiled/next-server/app-page-turbo.runtime.dev.js, cjs)"); + } else //TURBOPACK unreachable + ; + } else //TURBOPACK unreachable + ; + } +} //# sourceMappingURL=module.compiled.js.map +}), +"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/server/route-kind.js [app-rsc] (ecmascript, Next.js server utility)", ((__turbopack_context__) => { + +__turbopack_context__.n(__turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/server/route-kind.js [app-rsc] (ecmascript)"));}), +"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/server/instrumentation/utils.js [app-rsc] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "getRevalidateReason", + ()=>getRevalidateReason +]); +function getRevalidateReason(params) { + if (params.isOnDemandRevalidate) { + return 'on-demand'; + } + if (params.isStaticGeneration) { + return 'stale'; + } + return undefined; +} //# sourceMappingURL=utils.js.map +}), +"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/server/app-render/interop-default.js [app-rsc] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +/** + * Interop between "export default" and "module.exports". + */ __turbopack_context__.s([ + "interopDefault", + ()=>interopDefault +]); +function interopDefault(mod) { + return mod.default || mod; +} //# sourceMappingURL=interop-default.js.map +}), +"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/server/app-render/strip-flight-headers.js [app-rsc] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "stripFlightHeaders", + ()=>stripFlightHeaders +]); +var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$client$2f$components$2f$app$2d$router$2d$headers$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/client/components/app-router-headers.js [app-rsc] (ecmascript)"); +; +function stripFlightHeaders(headers) { + for (const header of __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$client$2f$components$2f$app$2d$router$2d$headers$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["FLIGHT_HEADERS"]){ + delete headers[header]; + } +} //# sourceMappingURL=strip-flight-headers.js.map +}), +"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/server/web/spec-extension/adapters/headers.js [app-rsc] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "HeadersAdapter", + ()=>HeadersAdapter, + "ReadonlyHeadersError", + ()=>ReadonlyHeadersError +]); +var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$web$2f$spec$2d$extension$2f$adapters$2f$reflect$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/server/web/spec-extension/adapters/reflect.js [app-rsc] (ecmascript)"); +; +class ReadonlyHeadersError extends Error { + constructor(){ + super('Headers cannot be modified. Read more: https://nextjs.org/docs/app/api-reference/functions/headers'); + } + static callable() { + throw new ReadonlyHeadersError(); + } +} +class HeadersAdapter extends Headers { + constructor(headers){ + // We've already overridden the methods that would be called, so we're just + // calling the super constructor to ensure that the instanceof check works. + super(); + this.headers = new Proxy(headers, { + get (target, prop, receiver) { + // Because this is just an object, we expect that all "get" operations + // are for properties. If it's a "get" for a symbol, we'll just return + // the symbol. + if (typeof prop === 'symbol') { + return __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$web$2f$spec$2d$extension$2f$adapters$2f$reflect$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["ReflectAdapter"].get(target, prop, receiver); + } + const lowercased = prop.toLowerCase(); + // Let's find the original casing of the key. This assumes that there is + // no mixed case keys (e.g. "Content-Type" and "content-type") in the + // headers object. + const original = Object.keys(headers).find((o)=>o.toLowerCase() === lowercased); + // If the original casing doesn't exist, return undefined. + if (typeof original === 'undefined') return; + // If the original casing exists, return the value. + return __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$web$2f$spec$2d$extension$2f$adapters$2f$reflect$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["ReflectAdapter"].get(target, original, receiver); + }, + set (target, prop, value, receiver) { + if (typeof prop === 'symbol') { + return __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$web$2f$spec$2d$extension$2f$adapters$2f$reflect$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["ReflectAdapter"].set(target, prop, value, receiver); + } + const lowercased = prop.toLowerCase(); + // Let's find the original casing of the key. This assumes that there is + // no mixed case keys (e.g. "Content-Type" and "content-type") in the + // headers object. + const original = Object.keys(headers).find((o)=>o.toLowerCase() === lowercased); + // If the original casing doesn't exist, use the prop as the key. + return __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$web$2f$spec$2d$extension$2f$adapters$2f$reflect$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["ReflectAdapter"].set(target, original ?? prop, value, receiver); + }, + has (target, prop) { + if (typeof prop === 'symbol') return __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$web$2f$spec$2d$extension$2f$adapters$2f$reflect$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["ReflectAdapter"].has(target, prop); + const lowercased = prop.toLowerCase(); + // Let's find the original casing of the key. This assumes that there is + // no mixed case keys (e.g. "Content-Type" and "content-type") in the + // headers object. + const original = Object.keys(headers).find((o)=>o.toLowerCase() === lowercased); + // If the original casing doesn't exist, return false. + if (typeof original === 'undefined') return false; + // If the original casing exists, return true. + return __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$web$2f$spec$2d$extension$2f$adapters$2f$reflect$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["ReflectAdapter"].has(target, original); + }, + deleteProperty (target, prop) { + if (typeof prop === 'symbol') return __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$web$2f$spec$2d$extension$2f$adapters$2f$reflect$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["ReflectAdapter"].deleteProperty(target, prop); + const lowercased = prop.toLowerCase(); + // Let's find the original casing of the key. This assumes that there is + // no mixed case keys (e.g. "Content-Type" and "content-type") in the + // headers object. + const original = Object.keys(headers).find((o)=>o.toLowerCase() === lowercased); + // If the original casing doesn't exist, return true. + if (typeof original === 'undefined') return true; + // If the original casing exists, delete the property. + return __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$web$2f$spec$2d$extension$2f$adapters$2f$reflect$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["ReflectAdapter"].deleteProperty(target, original); + } + }); + } + /** + * Seals a Headers instance to prevent modification by throwing an error when + * any mutating method is called. + */ static seal(headers) { + return new Proxy(headers, { + get (target, prop, receiver) { + switch(prop){ + case 'append': + case 'delete': + case 'set': + return ReadonlyHeadersError.callable; + default: + return __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$web$2f$spec$2d$extension$2f$adapters$2f$reflect$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["ReflectAdapter"].get(target, prop, receiver); + } + } + }); + } + /** + * Merges a header value into a string. This stores multiple values as an + * array, so we need to merge them into a string. + * + * @param value a header value + * @returns a merged header value (a string) + */ merge(value) { + if (Array.isArray(value)) return value.join(', '); + return value; + } + /** + * Creates a Headers instance from a plain object or a Headers instance. + * + * @param headers a plain object or a Headers instance + * @returns a headers instance + */ static from(headers) { + if (headers instanceof Headers) return headers; + return new HeadersAdapter(headers); + } + append(name, value) { + const existing = this.headers[name]; + if (typeof existing === 'string') { + this.headers[name] = [ + existing, + value + ]; + } else if (Array.isArray(existing)) { + existing.push(value); + } else { + this.headers[name] = value; + } + } + delete(name) { + delete this.headers[name]; + } + get(name) { + const value = this.headers[name]; + if (typeof value !== 'undefined') return this.merge(value); + return null; + } + has(name) { + return typeof this.headers[name] !== 'undefined'; + } + set(name, value) { + this.headers[name] = value; + } + forEach(callbackfn, thisArg) { + for (const [name, value] of this.entries()){ + callbackfn.call(thisArg, value, name, this); + } + } + *entries() { + for (const key of Object.keys(this.headers)){ + const name = key.toLowerCase(); + // We assert here that this is a string because we got it from the + // Object.keys() call above. + const value = this.get(name); + yield [ + name, + value + ]; + } + } + *keys() { + for (const key of Object.keys(this.headers)){ + const name = key.toLowerCase(); + yield name; + } + } + *values() { + for (const key of Object.keys(this.headers)){ + // We assert here that this is a string because we got it from the + // Object.keys() call above. + const value = this.get(key); + yield value; + } + } + [Symbol.iterator]() { + return this.entries(); + } +} //# sourceMappingURL=headers.js.map +}), +"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/compiled/cookie/index.js [app-rsc] (ecmascript)", ((__turbopack_context__, module, exports) => { + +(()=>{ + "use strict"; + if (typeof __nccwpck_require__ !== "undefined") __nccwpck_require__.ab = ("TURBOPACK compile-time value", "/ROOT/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/compiled/cookie") + "/"; + var e = {}; + (()=>{ + var r = e; + /*! + * cookie + * Copyright(c) 2012-2014 Roman Shtylman + * Copyright(c) 2015 Douglas Christopher Wilson + * MIT Licensed + */ r.parse = parse; + r.serialize = serialize; + var i = decodeURIComponent; + var t = encodeURIComponent; + var a = /; */; + var n = /^[\u0009\u0020-\u007e\u0080-\u00ff]+$/; + function parse(e, r) { + if (typeof e !== "string") { + throw new TypeError("argument str must be a string"); + } + var t = {}; + var n = r || {}; + var o = e.split(a); + var s = n.decode || i; + for(var p = 0; p < o.length; p++){ + var f = o[p]; + var u = f.indexOf("="); + if (u < 0) { + continue; + } + var v = f.substr(0, u).trim(); + var c = f.substr(++u, f.length).trim(); + if ('"' == c[0]) { + c = c.slice(1, -1); + } + if (undefined == t[v]) { + t[v] = tryDecode(c, s); + } + } + return t; + } + function serialize(e, r, i) { + var a = i || {}; + var o = a.encode || t; + if (typeof o !== "function") { + throw new TypeError("option encode is invalid"); + } + if (!n.test(e)) { + throw new TypeError("argument name is invalid"); + } + var s = o(r); + if (s && !n.test(s)) { + throw new TypeError("argument val is invalid"); + } + var p = e + "=" + s; + if (null != a.maxAge) { + var f = a.maxAge - 0; + if (isNaN(f) || !isFinite(f)) { + throw new TypeError("option maxAge is invalid"); + } + p += "; Max-Age=" + Math.floor(f); + } + if (a.domain) { + if (!n.test(a.domain)) { + throw new TypeError("option domain is invalid"); + } + p += "; Domain=" + a.domain; + } + if (a.path) { + if (!n.test(a.path)) { + throw new TypeError("option path is invalid"); + } + p += "; Path=" + a.path; + } + if (a.expires) { + if (typeof a.expires.toUTCString !== "function") { + throw new TypeError("option expires is invalid"); + } + p += "; Expires=" + a.expires.toUTCString(); + } + if (a.httpOnly) { + p += "; HttpOnly"; + } + if (a.secure) { + p += "; Secure"; + } + if (a.sameSite) { + var u = typeof a.sameSite === "string" ? a.sameSite.toLowerCase() : a.sameSite; + switch(u){ + case true: + p += "; SameSite=Strict"; + break; + case "lax": + p += "; SameSite=Lax"; + break; + case "strict": + p += "; SameSite=Strict"; + break; + case "none": + p += "; SameSite=None"; + break; + default: + throw new TypeError("option sameSite is invalid"); + } + } + return p; + } + function tryDecode(e, r) { + try { + return r(e); + } catch (r) { + return e; + } + } + })(); + module.exports = e; +})(); +}), +"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/server/api-utils/index.js [app-rsc] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "ApiError", + ()=>ApiError, + "COOKIE_NAME_PRERENDER_BYPASS", + ()=>COOKIE_NAME_PRERENDER_BYPASS, + "COOKIE_NAME_PRERENDER_DATA", + ()=>COOKIE_NAME_PRERENDER_DATA, + "RESPONSE_LIMIT_DEFAULT", + ()=>RESPONSE_LIMIT_DEFAULT, + "SYMBOL_CLEARED_COOKIES", + ()=>SYMBOL_CLEARED_COOKIES, + "SYMBOL_PREVIEW_DATA", + ()=>SYMBOL_PREVIEW_DATA, + "checkIsOnDemandRevalidate", + ()=>checkIsOnDemandRevalidate, + "clearPreviewData", + ()=>clearPreviewData, + "redirect", + ()=>redirect, + "sendError", + ()=>sendError, + "sendStatusCode", + ()=>sendStatusCode, + "setLazyProp", + ()=>setLazyProp, + "wrapApiHandler", + ()=>wrapApiHandler +]); +var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$web$2f$spec$2d$extension$2f$adapters$2f$headers$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/server/web/spec-extension/adapters/headers.js [app-rsc] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$constants$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/lib/constants.js [app-rsc] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$trace$2f$tracer$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/server/lib/trace/tracer.js [app-rsc] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$trace$2f$constants$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/server/lib/trace/constants.js [app-rsc] (ecmascript)"); +; +; +; +; +function wrapApiHandler(page, handler) { + return (...args)=>{ + (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$trace$2f$tracer$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["getTracer"])().setRootSpanAttribute('next.route', page); + // Call API route method + return (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$trace$2f$tracer$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["getTracer"])().trace(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$trace$2f$constants$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["NodeSpan"].runHandler, { + spanName: `executing api route (pages) ${page}` + }, ()=>handler(...args)); + }; +} +function sendStatusCode(res, statusCode) { + res.statusCode = statusCode; + return res; +} +function redirect(res, statusOrUrl, url) { + if (typeof statusOrUrl === 'string') { + url = statusOrUrl; + statusOrUrl = 307; + } + if (typeof statusOrUrl !== 'number' || typeof url !== 'string') { + throw Object.defineProperty(new Error(`Invalid redirect arguments. Please use a single argument URL, e.g. res.redirect('/destination') or use a status code and URL, e.g. res.redirect(307, '/destination').`), "__NEXT_ERROR_CODE", { + value: "E389", + enumerable: false, + configurable: true + }); + } + res.writeHead(statusOrUrl, { + Location: url + }); + res.write(url); + res.end(); + return res; +} +function checkIsOnDemandRevalidate(req, previewProps) { + const headers = __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$web$2f$spec$2d$extension$2f$adapters$2f$headers$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["HeadersAdapter"].from(req.headers); + const previewModeId = headers.get(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$constants$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["PRERENDER_REVALIDATE_HEADER"]); + const isOnDemandRevalidate = previewModeId === previewProps.previewModeId; + const revalidateOnlyGenerated = headers.has(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$constants$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["PRERENDER_REVALIDATE_ONLY_GENERATED_HEADER"]); + return { + isOnDemandRevalidate, + revalidateOnlyGenerated + }; +} +const COOKIE_NAME_PRERENDER_BYPASS = `__prerender_bypass`; +const COOKIE_NAME_PRERENDER_DATA = `__next_preview_data`; +const RESPONSE_LIMIT_DEFAULT = 4 * 1024 * 1024; +const SYMBOL_PREVIEW_DATA = Symbol(COOKIE_NAME_PRERENDER_DATA); +const SYMBOL_CLEARED_COOKIES = Symbol(COOKIE_NAME_PRERENDER_BYPASS); +function clearPreviewData(res, options = {}) { + if (SYMBOL_CLEARED_COOKIES in res) { + return res; + } + const { serialize } = __turbopack_context__.r("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/compiled/cookie/index.js [app-rsc] (ecmascript)"); + const previous = res.getHeader('Set-Cookie'); + res.setHeader(`Set-Cookie`, [ + ...typeof previous === 'string' ? [ + previous + ] : Array.isArray(previous) ? previous : [], + serialize(COOKIE_NAME_PRERENDER_BYPASS, '', { + // To delete a cookie, set `expires` to a date in the past: + // https://tools.ietf.org/html/rfc6265#section-4.1.1 + // `Max-Age: 0` is not valid, thus ignored, and the cookie is persisted. + expires: new Date(0), + httpOnly: true, + sameSite: ("TURBOPACK compile-time falsy", 0) ? "TURBOPACK unreachable" : 'lax', + secure: ("TURBOPACK compile-time value", "development") !== 'development', + path: '/', + ...options.path !== undefined ? { + path: options.path + } : undefined + }), + serialize(COOKIE_NAME_PRERENDER_DATA, '', { + // To delete a cookie, set `expires` to a date in the past: + // https://tools.ietf.org/html/rfc6265#section-4.1.1 + // `Max-Age: 0` is not valid, thus ignored, and the cookie is persisted. + expires: new Date(0), + httpOnly: true, + sameSite: ("TURBOPACK compile-time falsy", 0) ? "TURBOPACK unreachable" : 'lax', + secure: ("TURBOPACK compile-time value", "development") !== 'development', + path: '/', + ...options.path !== undefined ? { + path: options.path + } : undefined + }) + ]); + Object.defineProperty(res, SYMBOL_CLEARED_COOKIES, { + value: true, + enumerable: false + }); + return res; +} +class ApiError extends Error { + constructor(statusCode, message){ + super(message); + this.statusCode = statusCode; + } +} +function sendError(res, statusCode, message) { + res.statusCode = statusCode; + res.statusMessage = message; + res.end(message); +} +function setLazyProp({ req }, prop, getter) { + const opts = { + configurable: true, + enumerable: true + }; + const optsReset = { + ...opts, + writable: true + }; + Object.defineProperty(req, prop, { + ...opts, + get: ()=>{ + const value = getter(); + // we set the property on the object to avoid recalculating it + Object.defineProperty(req, prop, { + ...optsReset, + value + }); + return value; + }, + set: (value)=>{ + Object.defineProperty(req, prop, { + ...optsReset, + value + }); + } + }); +} //# sourceMappingURL=index.js.map +}), +"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/server/api-utils/get-cookie-parser.js [app-rsc] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +/** + * Parse cookies from the `headers` of request + * @param req request object + */ __turbopack_context__.s([ + "getCookieParser", + ()=>getCookieParser +]); +function getCookieParser(headers) { + return function parseCookie() { + const { cookie } = headers; + if (!cookie) { + return {}; + } + const { parse: parseCookieFn } = __turbopack_context__.r("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/compiled/cookie/index.js [app-rsc] (ecmascript)"); + return parseCookieFn(Array.isArray(cookie) ? cookie.join('; ') : cookie); + }; +} //# sourceMappingURL=get-cookie-parser.js.map +}), +"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/server/base-http/index.js [app-rsc] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "BaseNextRequest", + ()=>BaseNextRequest, + "BaseNextResponse", + ()=>BaseNextResponse +]); +var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$client$2f$components$2f$redirect$2d$status$2d$code$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/client/components/redirect-status-code.js [app-rsc] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$api$2d$utils$2f$get$2d$cookie$2d$parser$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/server/api-utils/get-cookie-parser.js [app-rsc] (ecmascript)"); +; +; +class BaseNextRequest { + constructor(method, url, body){ + this.method = method; + this.url = url; + this.body = body; + } + // Utils implemented using the abstract methods above + get cookies() { + if (this._cookies) return this._cookies; + return this._cookies = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$api$2d$utils$2f$get$2d$cookie$2d$parser$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["getCookieParser"])(this.headers)(); + } +} +class BaseNextResponse { + constructor(destination){ + this.destination = destination; + } + // Utils implemented using the abstract methods above + redirect(destination, statusCode) { + this.setHeader('Location', destination); + this.statusCode = statusCode; + // Since IE11 doesn't support the 308 header add backwards + // compatibility using refresh header + if (statusCode === __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$client$2f$components$2f$redirect$2d$status$2d$code$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["RedirectStatusCode"].PermanentRedirect) { + this.setHeader('Refresh', `0;url=${destination}`); + } + return this; + } +} //# sourceMappingURL=index.js.map +}), +"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/server/base-http/node.js [app-rsc] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "NodeNextRequest", + ()=>NodeNextRequest, + "NodeNextResponse", + ()=>NodeNextResponse +]); +var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$api$2d$utils$2f$index$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/server/api-utils/index.js [app-rsc] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$request$2d$meta$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/server/request-meta.js [app-rsc] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$base$2d$http$2f$index$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/server/base-http/index.js [app-rsc] (ecmascript)"); +; +; +; +let prop; +class NodeNextRequest extends __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$base$2d$http$2f$index$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["BaseNextRequest"] { + static #_ = prop = _NEXT_REQUEST_META = __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$request$2d$meta$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["NEXT_REQUEST_META"]; + constructor(_req){ + var _this__req; + super(_req.method.toUpperCase(), _req.url, _req), this._req = _req, this.headers = this._req.headers, this.fetchMetrics = (_this__req = this._req) == null ? void 0 : _this__req.fetchMetrics, this[_NEXT_REQUEST_META] = this._req[__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$request$2d$meta$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["NEXT_REQUEST_META"]] || {}, this.streaming = false; + } + get originalRequest() { + // Need to mimic these changes to the original req object for places where we use it: + // render.tsx, api/ssg requests + this._req[__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$request$2d$meta$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["NEXT_REQUEST_META"]] = this[__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$request$2d$meta$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["NEXT_REQUEST_META"]]; + this._req.url = this.url; + this._req.cookies = this.cookies; + return this._req; + } + set originalRequest(value) { + this._req = value; + } + /** + * Returns the request body as a Web Readable Stream. The body here can only + * be read once as the body will start flowing as soon as the data handler + * is attached. + * + * @internal + */ stream() { + if (this.streaming) { + throw Object.defineProperty(new Error('Invariant: NodeNextRequest.stream() can only be called once'), "__NEXT_ERROR_CODE", { + value: "E467", + enumerable: false, + configurable: true + }); + } + this.streaming = true; + return new ReadableStream({ + start: (controller)=>{ + this._req.on('data', (chunk)=>{ + controller.enqueue(new Uint8Array(chunk)); + }); + this._req.on('end', ()=>{ + controller.close(); + }); + this._req.on('error', (err)=>{ + controller.error(err); + }); + } + }); + } +} +class NodeNextResponse extends __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$base$2d$http$2f$index$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["BaseNextResponse"] { + get originalResponse() { + if (__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$api$2d$utils$2f$index$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["SYMBOL_CLEARED_COOKIES"] in this) { + this._res[__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$api$2d$utils$2f$index$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["SYMBOL_CLEARED_COOKIES"]] = this[__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$api$2d$utils$2f$index$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["SYMBOL_CLEARED_COOKIES"]]; + } + return this._res; + } + constructor(_res){ + super(_res), this._res = _res, this.textBody = undefined; + } + get sent() { + return this._res.finished || this._res.headersSent; + } + get statusCode() { + return this._res.statusCode; + } + set statusCode(value) { + this._res.statusCode = value; + } + get statusMessage() { + return this._res.statusMessage; + } + set statusMessage(value) { + this._res.statusMessage = value; + } + setHeader(name, value) { + this._res.setHeader(name, value); + return this; + } + removeHeader(name) { + this._res.removeHeader(name); + return this; + } + getHeaderValues(name) { + const values = this._res.getHeader(name); + if (values === undefined) return undefined; + return (Array.isArray(values) ? values : [ + values + ]).map((value)=>value.toString()); + } + hasHeader(name) { + return this._res.hasHeader(name); + } + getHeader(name) { + const values = this.getHeaderValues(name); + return Array.isArray(values) ? values.join(',') : undefined; + } + getHeaders() { + return this._res.getHeaders(); + } + appendHeader(name, value) { + const currentValues = this.getHeaderValues(name) ?? []; + if (!currentValues.includes(value)) { + this._res.setHeader(name, [ + ...currentValues, + value + ]); + } + return this; + } + body(value) { + this.textBody = value; + return this; + } + send() { + this._res.end(this.textBody); + } + onClose(callback) { + this.originalResponse.on('close', callback); + } +} +var _NEXT_REQUEST_META; //# sourceMappingURL=node.js.map +}), +"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/server/lib/experimental/ppr.js [app-rsc] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +/** + * If set to `incremental`, only those leaf pages that export + * `experimental_ppr = true` will have partial prerendering enabled. If any + * page exports this value as `false` or does not export it at all will not + * have partial prerendering enabled. If set to a boolean, the options for + * `experimental_ppr` will be ignored. + */ /** + * Returns true if partial prerendering is enabled for the application. It does + * not tell you if a given route has PPR enabled, as that requires analysis of + * the route's configuration. + * + * @see {@link checkIsRoutePPREnabled} - for checking if a specific route has PPR enabled. + */ __turbopack_context__.s([ + "checkIsAppPPREnabled", + ()=>checkIsAppPPREnabled, + "checkIsRoutePPREnabled", + ()=>checkIsRoutePPREnabled +]); +function checkIsAppPPREnabled(config) { + // If the config is undefined, partial prerendering is disabled. + if (typeof config === 'undefined') return false; + // If the config is a boolean, use it directly. + if (typeof config === 'boolean') return config; + // If the config is a string, it must be 'incremental' to enable partial + // prerendering. + if (config === 'incremental') return true; + return false; +} +function checkIsRoutePPREnabled(config) { + // If the config is undefined, partial prerendering is disabled. + if (typeof config === 'undefined') return false; + // If the config is a boolean, use it directly. + if (typeof config === 'boolean') return config; + return false; +} //# sourceMappingURL=ppr.js.map +}), +"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/compiled/zod/index.cjs [app-rsc] (ecmascript)", ((__turbopack_context__, module, exports) => { + +(()=>{ + "use strict"; + var e = { + 629: function(e, t, s) { + var r = this && this.__createBinding || (Object.create ? function(e, t, s, r) { + if (r === undefined) r = s; + var a = Object.getOwnPropertyDescriptor(t, s); + if (!a || ("get" in a ? !t.__esModule : a.writable || a.configurable)) { + a = { + enumerable: true, + get: function() { + return t[s]; + } + }; + } + Object.defineProperty(e, r, a); + } : function(e, t, s, r) { + if (r === undefined) r = s; + e[r] = t[s]; + }); + var a = this && this.__setModuleDefault || (Object.create ? function(e, t) { + Object.defineProperty(e, "default", { + enumerable: true, + value: t + }); + } : function(e, t) { + e["default"] = t; + }); + var n = this && this.__importStar || function(e) { + if (e && e.__esModule) return e; + var t = {}; + if (e != null) { + for(var s in e)if (s !== "default" && Object.prototype.hasOwnProperty.call(e, s)) r(t, e, s); + } + a(t, e); + return t; + }; + var i = this && this.__exportStar || function(e, t) { + for(var s in e)if (s !== "default" && !Object.prototype.hasOwnProperty.call(t, s)) r(t, e, s); + }; + Object.defineProperty(t, "__esModule", { + value: true + }); + t.z = void 0; + const o = n(s(923)); + t.z = o; + i(s(923), t); + t["default"] = o; + }, + 348: (e, t, s)=>{ + Object.defineProperty(t, "__esModule", { + value: true + }); + t.ZodError = t.quotelessJson = t.ZodIssueCode = void 0; + const r = s(709); + t.ZodIssueCode = r.util.arrayToEnum([ + "invalid_type", + "invalid_literal", + "custom", + "invalid_union", + "invalid_union_discriminator", + "invalid_enum_value", + "unrecognized_keys", + "invalid_arguments", + "invalid_return_type", + "invalid_date", + "invalid_string", + "too_small", + "too_big", + "invalid_intersection_types", + "not_multiple_of", + "not_finite" + ]); + const quotelessJson = (e)=>{ + const t = JSON.stringify(e, null, 2); + return t.replace(/"([^"]+)":/g, "$1:"); + }; + t.quotelessJson = quotelessJson; + class ZodError extends Error { + get errors() { + return this.issues; + } + constructor(e){ + super(); + this.issues = []; + this.addIssue = (e)=>{ + this.issues = [ + ...this.issues, + e + ]; + }; + this.addIssues = (e = [])=>{ + this.issues = [ + ...this.issues, + ...e + ]; + }; + const t = new.target.prototype; + if (Object.setPrototypeOf) { + Object.setPrototypeOf(this, t); + } else { + this.__proto__ = t; + } + this.name = "ZodError"; + this.issues = e; + } + format(e) { + const t = e || function(e) { + return e.message; + }; + const s = { + _errors: [] + }; + const processError = (e)=>{ + for (const r of e.issues){ + if (r.code === "invalid_union") { + r.unionErrors.map(processError); + } else if (r.code === "invalid_return_type") { + processError(r.returnTypeError); + } else if (r.code === "invalid_arguments") { + processError(r.argumentsError); + } else if (r.path.length === 0) { + s._errors.push(t(r)); + } else { + let e = s; + let a = 0; + while(a < r.path.length){ + const s = r.path[a]; + const n = a === r.path.length - 1; + if (!n) { + e[s] = e[s] || { + _errors: [] + }; + } else { + e[s] = e[s] || { + _errors: [] + }; + e[s]._errors.push(t(r)); + } + e = e[s]; + a++; + } + } + } + }; + processError(this); + return s; + } + static assert(e) { + if (!(e instanceof ZodError)) { + throw new Error(`Not a ZodError: ${e}`); + } + } + toString() { + return this.message; + } + get message() { + return JSON.stringify(this.issues, r.util.jsonStringifyReplacer, 2); + } + get isEmpty() { + return this.issues.length === 0; + } + flatten(e = (e)=>e.message) { + const t = {}; + const s = []; + for (const r of this.issues){ + if (r.path.length > 0) { + const s = r.path[0]; + t[s] = t[s] || []; + t[s].push(e(r)); + } else { + s.push(e(r)); + } + } + return { + formErrors: s, + fieldErrors: t + }; + } + get formErrors() { + return this.flatten(); + } + } + t.ZodError = ZodError; + ZodError.create = (e)=>{ + const t = new ZodError(e); + return t; + }; + }, + 61: function(e, t, s) { + var r = this && this.__importDefault || function(e) { + return e && e.__esModule ? e : { + default: e + }; + }; + Object.defineProperty(t, "__esModule", { + value: true + }); + t.defaultErrorMap = void 0; + t.setErrorMap = setErrorMap; + t.getErrorMap = getErrorMap; + const a = r(s(871)); + t.defaultErrorMap = a.default; + let n = a.default; + function setErrorMap(e) { + n = e; + } + function getErrorMap() { + return n; + } + }, + 923: function(e, t, s) { + var r = this && this.__createBinding || (Object.create ? function(e, t, s, r) { + if (r === undefined) r = s; + var a = Object.getOwnPropertyDescriptor(t, s); + if (!a || ("get" in a ? !t.__esModule : a.writable || a.configurable)) { + a = { + enumerable: true, + get: function() { + return t[s]; + } + }; + } + Object.defineProperty(e, r, a); + } : function(e, t, s, r) { + if (r === undefined) r = s; + e[r] = t[s]; + }); + var a = this && this.__exportStar || function(e, t) { + for(var s in e)if (s !== "default" && !Object.prototype.hasOwnProperty.call(t, s)) r(t, e, s); + }; + Object.defineProperty(t, "__esModule", { + value: true + }); + a(s(61), t); + a(s(818), t); + a(s(515), t); + a(s(709), t); + a(s(155), t); + a(s(348), t); + }, + 538: (e, t)=>{ + Object.defineProperty(t, "__esModule", { + value: true + }); + t.errorUtil = void 0; + var s; + (function(e) { + e.errToObj = (e)=>typeof e === "string" ? { + message: e + } : e || {}; + e.toString = (e)=>typeof e === "string" ? e : e?.message; + })(s || (t.errorUtil = s = {})); + }, + 818: function(e, t, s) { + var r = this && this.__importDefault || function(e) { + return e && e.__esModule ? e : { + default: e + }; + }; + Object.defineProperty(t, "__esModule", { + value: true + }); + t.isAsync = t.isValid = t.isDirty = t.isAborted = t.OK = t.DIRTY = t.INVALID = t.ParseStatus = t.EMPTY_PATH = t.makeIssue = void 0; + t.addIssueToContext = addIssueToContext; + const a = s(61); + const n = r(s(871)); + const makeIssue = (e)=>{ + const { data: t, path: s, errorMaps: r, issueData: a } = e; + const n = [ + ...s, + ...a.path || [] + ]; + const i = { + ...a, + path: n + }; + if (a.message !== undefined) { + return { + ...a, + path: n, + message: a.message + }; + } + let o = ""; + const d = r.filter((e)=>!!e).slice().reverse(); + for (const e of d){ + o = e(i, { + data: t, + defaultError: o + }).message; + } + return { + ...a, + path: n, + message: o + }; + }; + t.makeIssue = makeIssue; + t.EMPTY_PATH = []; + function addIssueToContext(e, s) { + const r = (0, a.getErrorMap)(); + const i = (0, t.makeIssue)({ + issueData: s, + data: e.data, + path: e.path, + errorMaps: [ + e.common.contextualErrorMap, + e.schemaErrorMap, + r, + r === n.default ? undefined : n.default + ].filter((e)=>!!e) + }); + e.common.issues.push(i); + } + class ParseStatus { + constructor(){ + this.value = "valid"; + } + dirty() { + if (this.value === "valid") this.value = "dirty"; + } + abort() { + if (this.value !== "aborted") this.value = "aborted"; + } + static mergeArray(e, s) { + const r = []; + for (const a of s){ + if (a.status === "aborted") return t.INVALID; + if (a.status === "dirty") e.dirty(); + r.push(a.value); + } + return { + status: e.value, + value: r + }; + } + static async mergeObjectAsync(e, t) { + const s = []; + for (const e of t){ + const t = await e.key; + const r = await e.value; + s.push({ + key: t, + value: r + }); + } + return ParseStatus.mergeObjectSync(e, s); + } + static mergeObjectSync(e, s) { + const r = {}; + for (const a of s){ + const { key: s, value: n } = a; + if (s.status === "aborted") return t.INVALID; + if (n.status === "aborted") return t.INVALID; + if (s.status === "dirty") e.dirty(); + if (n.status === "dirty") e.dirty(); + if (s.value !== "__proto__" && (typeof n.value !== "undefined" || a.alwaysSet)) { + r[s.value] = n.value; + } + } + return { + status: e.value, + value: r + }; + } + } + t.ParseStatus = ParseStatus; + t.INVALID = Object.freeze({ + status: "aborted" + }); + const DIRTY = (e)=>({ + status: "dirty", + value: e + }); + t.DIRTY = DIRTY; + const OK = (e)=>({ + status: "valid", + value: e + }); + t.OK = OK; + const isAborted = (e)=>e.status === "aborted"; + t.isAborted = isAborted; + const isDirty = (e)=>e.status === "dirty"; + t.isDirty = isDirty; + const isValid = (e)=>e.status === "valid"; + t.isValid = isValid; + const isAsync = (e)=>typeof Promise !== "undefined" && e instanceof Promise; + t.isAsync = isAsync; + }, + 515: (e, t)=>{ + Object.defineProperty(t, "__esModule", { + value: true + }); + }, + 709: (e, t)=>{ + Object.defineProperty(t, "__esModule", { + value: true + }); + t.getParsedType = t.ZodParsedType = t.objectUtil = t.util = void 0; + var s; + (function(e) { + e.assertEqual = (e)=>{}; + function assertIs(e) {} + e.assertIs = assertIs; + function assertNever(e) { + throw new Error; + } + e.assertNever = assertNever; + e.arrayToEnum = (e)=>{ + const t = {}; + for (const s of e){ + t[s] = s; + } + return t; + }; + e.getValidEnumValues = (t)=>{ + const s = e.objectKeys(t).filter((e)=>typeof t[t[e]] !== "number"); + const r = {}; + for (const e of s){ + r[e] = t[e]; + } + return e.objectValues(r); + }; + e.objectValues = (t)=>e.objectKeys(t).map(function(e) { + return t[e]; + }); + e.objectKeys = typeof Object.keys === "function" ? (e)=>Object.keys(e) : (e)=>{ + const t = []; + for(const s in e){ + if (Object.prototype.hasOwnProperty.call(e, s)) { + t.push(s); + } + } + return t; + }; + e.find = (e, t)=>{ + for (const s of e){ + if (t(s)) return s; + } + return undefined; + }; + e.isInteger = typeof Number.isInteger === "function" ? (e)=>Number.isInteger(e) : (e)=>typeof e === "number" && Number.isFinite(e) && Math.floor(e) === e; + function joinValues(e, t = " | ") { + return e.map((e)=>typeof e === "string" ? `'${e}'` : e).join(t); + } + e.joinValues = joinValues; + e.jsonStringifyReplacer = (e, t)=>{ + if (typeof t === "bigint") { + return t.toString(); + } + return t; + }; + })(s || (t.util = s = {})); + var r; + (function(e) { + e.mergeShapes = (e, t)=>({ + ...e, + ...t + }); + })(r || (t.objectUtil = r = {})); + t.ZodParsedType = s.arrayToEnum([ + "string", + "nan", + "number", + "integer", + "float", + "boolean", + "date", + "bigint", + "symbol", + "function", + "undefined", + "null", + "array", + "object", + "unknown", + "promise", + "void", + "never", + "map", + "set" + ]); + const getParsedType = (e)=>{ + const s = typeof e; + switch(s){ + case "undefined": + return t.ZodParsedType.undefined; + case "string": + return t.ZodParsedType.string; + case "number": + return Number.isNaN(e) ? t.ZodParsedType.nan : t.ZodParsedType.number; + case "boolean": + return t.ZodParsedType.boolean; + case "function": + return t.ZodParsedType.function; + case "bigint": + return t.ZodParsedType.bigint; + case "symbol": + return t.ZodParsedType.symbol; + case "object": + if (Array.isArray(e)) { + return t.ZodParsedType.array; + } + if (e === null) { + return t.ZodParsedType.null; + } + if (e.then && typeof e.then === "function" && e.catch && typeof e.catch === "function") { + return t.ZodParsedType.promise; + } + if (typeof Map !== "undefined" && e instanceof Map) { + return t.ZodParsedType.map; + } + if (typeof Set !== "undefined" && e instanceof Set) { + return t.ZodParsedType.set; + } + if (typeof Date !== "undefined" && e instanceof Date) { + return t.ZodParsedType.date; + } + return t.ZodParsedType.object; + default: + return t.ZodParsedType.unknown; + } + }; + t.getParsedType = getParsedType; + }, + 871: (e, t, s)=>{ + Object.defineProperty(t, "__esModule", { + value: true + }); + const r = s(348); + const a = s(709); + const errorMap = (e, t)=>{ + let s; + switch(e.code){ + case r.ZodIssueCode.invalid_type: + if (e.received === a.ZodParsedType.undefined) { + s = "Required"; + } else { + s = `Expected ${e.expected}, received ${e.received}`; + } + break; + case r.ZodIssueCode.invalid_literal: + s = `Invalid literal value, expected ${JSON.stringify(e.expected, a.util.jsonStringifyReplacer)}`; + break; + case r.ZodIssueCode.unrecognized_keys: + s = `Unrecognized key(s) in object: ${a.util.joinValues(e.keys, ", ")}`; + break; + case r.ZodIssueCode.invalid_union: + s = `Invalid input`; + break; + case r.ZodIssueCode.invalid_union_discriminator: + s = `Invalid discriminator value. Expected ${a.util.joinValues(e.options)}`; + break; + case r.ZodIssueCode.invalid_enum_value: + s = `Invalid enum value. Expected ${a.util.joinValues(e.options)}, received '${e.received}'`; + break; + case r.ZodIssueCode.invalid_arguments: + s = `Invalid function arguments`; + break; + case r.ZodIssueCode.invalid_return_type: + s = `Invalid function return type`; + break; + case r.ZodIssueCode.invalid_date: + s = `Invalid date`; + break; + case r.ZodIssueCode.invalid_string: + if (typeof e.validation === "object") { + if ("includes" in e.validation) { + s = `Invalid input: must include "${e.validation.includes}"`; + if (typeof e.validation.position === "number") { + s = `${s} at one or more positions greater than or equal to ${e.validation.position}`; + } + } else if ("startsWith" in e.validation) { + s = `Invalid input: must start with "${e.validation.startsWith}"`; + } else if ("endsWith" in e.validation) { + s = `Invalid input: must end with "${e.validation.endsWith}"`; + } else { + a.util.assertNever(e.validation); + } + } else if (e.validation !== "regex") { + s = `Invalid ${e.validation}`; + } else { + s = "Invalid"; + } + break; + case r.ZodIssueCode.too_small: + if (e.type === "array") s = `Array must contain ${e.exact ? "exactly" : e.inclusive ? `at least` : `more than`} ${e.minimum} element(s)`; + else if (e.type === "string") s = `String must contain ${e.exact ? "exactly" : e.inclusive ? `at least` : `over`} ${e.minimum} character(s)`; + else if (e.type === "number") s = `Number must be ${e.exact ? `exactly equal to ` : e.inclusive ? `greater than or equal to ` : `greater than `}${e.minimum}`; + else if (e.type === "bigint") s = `Number must be ${e.exact ? `exactly equal to ` : e.inclusive ? `greater than or equal to ` : `greater than `}${e.minimum}`; + else if (e.type === "date") s = `Date must be ${e.exact ? `exactly equal to ` : e.inclusive ? `greater than or equal to ` : `greater than `}${new Date(Number(e.minimum))}`; + else s = "Invalid input"; + break; + case r.ZodIssueCode.too_big: + if (e.type === "array") s = `Array must contain ${e.exact ? `exactly` : e.inclusive ? `at most` : `less than`} ${e.maximum} element(s)`; + else if (e.type === "string") s = `String must contain ${e.exact ? `exactly` : e.inclusive ? `at most` : `under`} ${e.maximum} character(s)`; + else if (e.type === "number") s = `Number must be ${e.exact ? `exactly` : e.inclusive ? `less than or equal to` : `less than`} ${e.maximum}`; + else if (e.type === "bigint") s = `BigInt must be ${e.exact ? `exactly` : e.inclusive ? `less than or equal to` : `less than`} ${e.maximum}`; + else if (e.type === "date") s = `Date must be ${e.exact ? `exactly` : e.inclusive ? `smaller than or equal to` : `smaller than`} ${new Date(Number(e.maximum))}`; + else s = "Invalid input"; + break; + case r.ZodIssueCode.custom: + s = `Invalid input`; + break; + case r.ZodIssueCode.invalid_intersection_types: + s = `Intersection results could not be merged`; + break; + case r.ZodIssueCode.not_multiple_of: + s = `Number must be a multiple of ${e.multipleOf}`; + break; + case r.ZodIssueCode.not_finite: + s = "Number must be finite"; + break; + default: + s = t.defaultError; + a.util.assertNever(e); + } + return { + message: s + }; + }; + t["default"] = errorMap; + }, + 155: (e, t, s)=>{ + Object.defineProperty(t, "__esModule", { + value: true + }); + t.discriminatedUnion = t.date = t.boolean = t.bigint = t.array = t.any = t.coerce = t.ZodFirstPartyTypeKind = t.late = t.ZodSchema = t.Schema = t.ZodReadonly = t.ZodPipeline = t.ZodBranded = t.BRAND = t.ZodNaN = t.ZodCatch = t.ZodDefault = t.ZodNullable = t.ZodOptional = t.ZodTransformer = t.ZodEffects = t.ZodPromise = t.ZodNativeEnum = t.ZodEnum = t.ZodLiteral = t.ZodLazy = t.ZodFunction = t.ZodSet = t.ZodMap = t.ZodRecord = t.ZodTuple = t.ZodIntersection = t.ZodDiscriminatedUnion = t.ZodUnion = t.ZodObject = t.ZodArray = t.ZodVoid = t.ZodNever = t.ZodUnknown = t.ZodAny = t.ZodNull = t.ZodUndefined = t.ZodSymbol = t.ZodDate = t.ZodBoolean = t.ZodBigInt = t.ZodNumber = t.ZodString = t.ZodType = void 0; + t.NEVER = t["void"] = t.unknown = t.union = t.undefined = t.tuple = t.transformer = t.symbol = t.string = t.strictObject = t.set = t.record = t.promise = t.preprocess = t.pipeline = t.ostring = t.optional = t.onumber = t.oboolean = t.object = t.number = t.nullable = t["null"] = t.never = t.nativeEnum = t.nan = t.map = t.literal = t.lazy = t.intersection = t["instanceof"] = t["function"] = t["enum"] = t.effect = void 0; + t.datetimeRegex = datetimeRegex; + t.custom = custom; + const r = s(348); + const a = s(61); + const n = s(538); + const i = s(818); + const o = s(709); + class ParseInputLazyPath { + constructor(e, t, s, r){ + this._cachedPath = []; + this.parent = e; + this.data = t; + this._path = s; + this._key = r; + } + get path() { + if (!this._cachedPath.length) { + if (Array.isArray(this._key)) { + this._cachedPath.push(...this._path, ...this._key); + } else { + this._cachedPath.push(...this._path, this._key); + } + } + return this._cachedPath; + } + } + const handleResult = (e, t)=>{ + if ((0, i.isValid)(t)) { + return { + success: true, + data: t.value + }; + } else { + if (!e.common.issues.length) { + throw new Error("Validation failed but no issues detected."); + } + return { + success: false, + get error () { + if (this._error) return this._error; + const t = new r.ZodError(e.common.issues); + this._error = t; + return this._error; + } + }; + } + }; + function processCreateParams(e) { + if (!e) return {}; + const { errorMap: t, invalid_type_error: s, required_error: r, description: a } = e; + if (t && (s || r)) { + throw new Error(`Can't use "invalid_type_error" or "required_error" in conjunction with custom error map.`); + } + if (t) return { + errorMap: t, + description: a + }; + const customMap = (t, a)=>{ + const { message: n } = e; + if (t.code === "invalid_enum_value") { + return { + message: n ?? a.defaultError + }; + } + if (typeof a.data === "undefined") { + return { + message: n ?? r ?? a.defaultError + }; + } + if (t.code !== "invalid_type") return { + message: a.defaultError + }; + return { + message: n ?? s ?? a.defaultError + }; + }; + return { + errorMap: customMap, + description: a + }; + } + class ZodType { + get description() { + return this._def.description; + } + _getType(e) { + return (0, o.getParsedType)(e.data); + } + _getOrReturnCtx(e, t) { + return t || { + common: e.parent.common, + data: e.data, + parsedType: (0, o.getParsedType)(e.data), + schemaErrorMap: this._def.errorMap, + path: e.path, + parent: e.parent + }; + } + _processInputParams(e) { + return { + status: new i.ParseStatus, + ctx: { + common: e.parent.common, + data: e.data, + parsedType: (0, o.getParsedType)(e.data), + schemaErrorMap: this._def.errorMap, + path: e.path, + parent: e.parent + } + }; + } + _parseSync(e) { + const t = this._parse(e); + if ((0, i.isAsync)(t)) { + throw new Error("Synchronous parse encountered promise."); + } + return t; + } + _parseAsync(e) { + const t = this._parse(e); + return Promise.resolve(t); + } + parse(e, t) { + const s = this.safeParse(e, t); + if (s.success) return s.data; + throw s.error; + } + safeParse(e, t) { + const s = { + common: { + issues: [], + async: t?.async ?? false, + contextualErrorMap: t?.errorMap + }, + path: t?.path || [], + schemaErrorMap: this._def.errorMap, + parent: null, + data: e, + parsedType: (0, o.getParsedType)(e) + }; + const r = this._parseSync({ + data: e, + path: s.path, + parent: s + }); + return handleResult(s, r); + } + "~validate"(e) { + const t = { + common: { + issues: [], + async: !!this["~standard"].async + }, + path: [], + schemaErrorMap: this._def.errorMap, + parent: null, + data: e, + parsedType: (0, o.getParsedType)(e) + }; + if (!this["~standard"].async) { + try { + const s = this._parseSync({ + data: e, + path: [], + parent: t + }); + return (0, i.isValid)(s) ? { + value: s.value + } : { + issues: t.common.issues + }; + } catch (e) { + if (e?.message?.toLowerCase()?.includes("encountered")) { + this["~standard"].async = true; + } + t.common = { + issues: [], + async: true + }; + } + } + return this._parseAsync({ + data: e, + path: [], + parent: t + }).then((e)=>(0, i.isValid)(e) ? { + value: e.value + } : { + issues: t.common.issues + }); + } + async parseAsync(e, t) { + const s = await this.safeParseAsync(e, t); + if (s.success) return s.data; + throw s.error; + } + async safeParseAsync(e, t) { + const s = { + common: { + issues: [], + contextualErrorMap: t?.errorMap, + async: true + }, + path: t?.path || [], + schemaErrorMap: this._def.errorMap, + parent: null, + data: e, + parsedType: (0, o.getParsedType)(e) + }; + const r = this._parse({ + data: e, + path: s.path, + parent: s + }); + const a = await ((0, i.isAsync)(r) ? r : Promise.resolve(r)); + return handleResult(s, a); + } + refine(e, t) { + const getIssueProperties = (e)=>{ + if (typeof t === "string" || typeof t === "undefined") { + return { + message: t + }; + } else if (typeof t === "function") { + return t(e); + } else { + return t; + } + }; + return this._refinement((t, s)=>{ + const a = e(t); + const setError = ()=>s.addIssue({ + code: r.ZodIssueCode.custom, + ...getIssueProperties(t) + }); + if (typeof Promise !== "undefined" && a instanceof Promise) { + return a.then((e)=>{ + if (!e) { + setError(); + return false; + } else { + return true; + } + }); + } + if (!a) { + setError(); + return false; + } else { + return true; + } + }); + } + refinement(e, t) { + return this._refinement((s, r)=>{ + if (!e(s)) { + r.addIssue(typeof t === "function" ? t(s, r) : t); + return false; + } else { + return true; + } + }); + } + _refinement(e) { + return new ZodEffects({ + schema: this, + typeName: k.ZodEffects, + effect: { + type: "refinement", + refinement: e + } + }); + } + superRefine(e) { + return this._refinement(e); + } + constructor(e){ + this.spa = this.safeParseAsync; + this._def = e; + this.parse = this.parse.bind(this); + this.safeParse = this.safeParse.bind(this); + this.parseAsync = this.parseAsync.bind(this); + this.safeParseAsync = this.safeParseAsync.bind(this); + this.spa = this.spa.bind(this); + this.refine = this.refine.bind(this); + this.refinement = this.refinement.bind(this); + this.superRefine = this.superRefine.bind(this); + this.optional = this.optional.bind(this); + this.nullable = this.nullable.bind(this); + this.nullish = this.nullish.bind(this); + this.array = this.array.bind(this); + this.promise = this.promise.bind(this); + this.or = this.or.bind(this); + this.and = this.and.bind(this); + this.transform = this.transform.bind(this); + this.brand = this.brand.bind(this); + this.default = this.default.bind(this); + this.catch = this.catch.bind(this); + this.describe = this.describe.bind(this); + this.pipe = this.pipe.bind(this); + this.readonly = this.readonly.bind(this); + this.isNullable = this.isNullable.bind(this); + this.isOptional = this.isOptional.bind(this); + this["~standard"] = { + version: 1, + vendor: "zod", + validate: (e)=>this["~validate"](e) + }; + } + optional() { + return ZodOptional.create(this, this._def); + } + nullable() { + return ZodNullable.create(this, this._def); + } + nullish() { + return this.nullable().optional(); + } + array() { + return ZodArray.create(this); + } + promise() { + return ZodPromise.create(this, this._def); + } + or(e) { + return ZodUnion.create([ + this, + e + ], this._def); + } + and(e) { + return ZodIntersection.create(this, e, this._def); + } + transform(e) { + return new ZodEffects({ + ...processCreateParams(this._def), + schema: this, + typeName: k.ZodEffects, + effect: { + type: "transform", + transform: e + } + }); + } + default(e) { + const t = typeof e === "function" ? e : ()=>e; + return new ZodDefault({ + ...processCreateParams(this._def), + innerType: this, + defaultValue: t, + typeName: k.ZodDefault + }); + } + brand() { + return new ZodBranded({ + typeName: k.ZodBranded, + type: this, + ...processCreateParams(this._def) + }); + } + catch(e) { + const t = typeof e === "function" ? e : ()=>e; + return new ZodCatch({ + ...processCreateParams(this._def), + innerType: this, + catchValue: t, + typeName: k.ZodCatch + }); + } + describe(e) { + const t = this.constructor; + return new t({ + ...this._def, + description: e + }); + } + pipe(e) { + return ZodPipeline.create(this, e); + } + readonly() { + return ZodReadonly.create(this); + } + isOptional() { + return this.safeParse(undefined).success; + } + isNullable() { + return this.safeParse(null).success; + } + } + t.ZodType = ZodType; + t.Schema = ZodType; + t.ZodSchema = ZodType; + const d = /^c[^\s-]{8,}$/i; + const u = /^[0-9a-z]+$/; + const c = /^[0-9A-HJKMNP-TV-Z]{26}$/i; + const l = /^[0-9a-fA-F]{8}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{12}$/i; + const p = /^[a-z0-9_-]{21}$/i; + const f = /^[A-Za-z0-9-_]+\.[A-Za-z0-9-_]+\.[A-Za-z0-9-_]*$/; + const h = /^[-+]?P(?!$)(?:(?:[-+]?\d+Y)|(?:[-+]?\d+[.,]\d+Y$))?(?:(?:[-+]?\d+M)|(?:[-+]?\d+[.,]\d+M$))?(?:(?:[-+]?\d+W)|(?:[-+]?\d+[.,]\d+W$))?(?:(?:[-+]?\d+D)|(?:[-+]?\d+[.,]\d+D$))?(?:T(?=[\d+-])(?:(?:[-+]?\d+H)|(?:[-+]?\d+[.,]\d+H$))?(?:(?:[-+]?\d+M)|(?:[-+]?\d+[.,]\d+M$))?(?:[-+]?\d+(?:[.,]\d+)?S)?)??$/; + const m = /^(?!\.)(?!.*\.\.)([A-Z0-9_'+\-\.]*)[A-Z0-9_+-]@([A-Z0-9][A-Z0-9\-]*\.)+[A-Z]{2,}$/i; + const y = `^(\\p{Extended_Pictographic}|\\p{Emoji_Component})+$`; + let Z; + const _ = /^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])$/; + const g = /^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\/(3[0-2]|[12]?[0-9])$/; + const v = /^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))$/; + const I = /^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))\/(12[0-8]|1[01][0-9]|[1-9]?[0-9])$/; + const T = /^([0-9a-zA-Z+/]{4})*(([0-9a-zA-Z+/]{2}==)|([0-9a-zA-Z+/]{3}=))?$/; + const b = /^([0-9a-zA-Z-_]{4})*(([0-9a-zA-Z-_]{2}(==)?)|([0-9a-zA-Z-_]{3}(=)?))?$/; + const x = `((\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-((0[13578]|1[02])-(0[1-9]|[12]\\d|3[01])|(0[469]|11)-(0[1-9]|[12]\\d|30)|(02)-(0[1-9]|1\\d|2[0-8])))`; + const C = new RegExp(`^${x}$`); + function timeRegexSource(e) { + let t = `[0-5]\\d`; + if (e.precision) { + t = `${t}\\.\\d{${e.precision}}`; + } else if (e.precision == null) { + t = `${t}(\\.\\d+)?`; + } + const s = e.precision ? "+" : "?"; + return `([01]\\d|2[0-3]):[0-5]\\d(:${t})${s}`; + } + function timeRegex(e) { + return new RegExp(`^${timeRegexSource(e)}$`); + } + function datetimeRegex(e) { + let t = `${x}T${timeRegexSource(e)}`; + const s = []; + s.push(e.local ? `Z?` : `Z`); + if (e.offset) s.push(`([+-]\\d{2}:?\\d{2})`); + t = `${t}(${s.join("|")})`; + return new RegExp(`^${t}$`); + } + function isValidIP(e, t) { + if ((t === "v4" || !t) && _.test(e)) { + return true; + } + if ((t === "v6" || !t) && v.test(e)) { + return true; + } + return false; + } + function isValidJWT(e, t) { + if (!f.test(e)) return false; + try { + const [s] = e.split("."); + if (!s) return false; + const r = s.replace(/-/g, "+").replace(/_/g, "/").padEnd(s.length + (4 - s.length % 4) % 4, "="); + const a = JSON.parse(atob(r)); + if (typeof a !== "object" || a === null) return false; + if ("typ" in a && a?.typ !== "JWT") return false; + if (!a.alg) return false; + if (t && a.alg !== t) return false; + return true; + } catch { + return false; + } + } + function isValidCidr(e, t) { + if ((t === "v4" || !t) && g.test(e)) { + return true; + } + if ((t === "v6" || !t) && I.test(e)) { + return true; + } + return false; + } + class ZodString extends ZodType { + _parse(e) { + if (this._def.coerce) { + e.data = String(e.data); + } + const t = this._getType(e); + if (t !== o.ZodParsedType.string) { + const t = this._getOrReturnCtx(e); + (0, i.addIssueToContext)(t, { + code: r.ZodIssueCode.invalid_type, + expected: o.ZodParsedType.string, + received: t.parsedType + }); + return i.INVALID; + } + const s = new i.ParseStatus; + let a = undefined; + for (const t of this._def.checks){ + if (t.kind === "min") { + if (e.data.length < t.value) { + a = this._getOrReturnCtx(e, a); + (0, i.addIssueToContext)(a, { + code: r.ZodIssueCode.too_small, + minimum: t.value, + type: "string", + inclusive: true, + exact: false, + message: t.message + }); + s.dirty(); + } + } else if (t.kind === "max") { + if (e.data.length > t.value) { + a = this._getOrReturnCtx(e, a); + (0, i.addIssueToContext)(a, { + code: r.ZodIssueCode.too_big, + maximum: t.value, + type: "string", + inclusive: true, + exact: false, + message: t.message + }); + s.dirty(); + } + } else if (t.kind === "length") { + const n = e.data.length > t.value; + const o = e.data.length < t.value; + if (n || o) { + a = this._getOrReturnCtx(e, a); + if (n) { + (0, i.addIssueToContext)(a, { + code: r.ZodIssueCode.too_big, + maximum: t.value, + type: "string", + inclusive: true, + exact: true, + message: t.message + }); + } else if (o) { + (0, i.addIssueToContext)(a, { + code: r.ZodIssueCode.too_small, + minimum: t.value, + type: "string", + inclusive: true, + exact: true, + message: t.message + }); + } + s.dirty(); + } + } else if (t.kind === "email") { + if (!m.test(e.data)) { + a = this._getOrReturnCtx(e, a); + (0, i.addIssueToContext)(a, { + validation: "email", + code: r.ZodIssueCode.invalid_string, + message: t.message + }); + s.dirty(); + } + } else if (t.kind === "emoji") { + if (!Z) { + Z = new RegExp(y, "u"); + } + if (!Z.test(e.data)) { + a = this._getOrReturnCtx(e, a); + (0, i.addIssueToContext)(a, { + validation: "emoji", + code: r.ZodIssueCode.invalid_string, + message: t.message + }); + s.dirty(); + } + } else if (t.kind === "uuid") { + if (!l.test(e.data)) { + a = this._getOrReturnCtx(e, a); + (0, i.addIssueToContext)(a, { + validation: "uuid", + code: r.ZodIssueCode.invalid_string, + message: t.message + }); + s.dirty(); + } + } else if (t.kind === "nanoid") { + if (!p.test(e.data)) { + a = this._getOrReturnCtx(e, a); + (0, i.addIssueToContext)(a, { + validation: "nanoid", + code: r.ZodIssueCode.invalid_string, + message: t.message + }); + s.dirty(); + } + } else if (t.kind === "cuid") { + if (!d.test(e.data)) { + a = this._getOrReturnCtx(e, a); + (0, i.addIssueToContext)(a, { + validation: "cuid", + code: r.ZodIssueCode.invalid_string, + message: t.message + }); + s.dirty(); + } + } else if (t.kind === "cuid2") { + if (!u.test(e.data)) { + a = this._getOrReturnCtx(e, a); + (0, i.addIssueToContext)(a, { + validation: "cuid2", + code: r.ZodIssueCode.invalid_string, + message: t.message + }); + s.dirty(); + } + } else if (t.kind === "ulid") { + if (!c.test(e.data)) { + a = this._getOrReturnCtx(e, a); + (0, i.addIssueToContext)(a, { + validation: "ulid", + code: r.ZodIssueCode.invalid_string, + message: t.message + }); + s.dirty(); + } + } else if (t.kind === "url") { + try { + new URL(e.data); + } catch { + a = this._getOrReturnCtx(e, a); + (0, i.addIssueToContext)(a, { + validation: "url", + code: r.ZodIssueCode.invalid_string, + message: t.message + }); + s.dirty(); + } + } else if (t.kind === "regex") { + t.regex.lastIndex = 0; + const n = t.regex.test(e.data); + if (!n) { + a = this._getOrReturnCtx(e, a); + (0, i.addIssueToContext)(a, { + validation: "regex", + code: r.ZodIssueCode.invalid_string, + message: t.message + }); + s.dirty(); + } + } else if (t.kind === "trim") { + e.data = e.data.trim(); + } else if (t.kind === "includes") { + if (!e.data.includes(t.value, t.position)) { + a = this._getOrReturnCtx(e, a); + (0, i.addIssueToContext)(a, { + code: r.ZodIssueCode.invalid_string, + validation: { + includes: t.value, + position: t.position + }, + message: t.message + }); + s.dirty(); + } + } else if (t.kind === "toLowerCase") { + e.data = e.data.toLowerCase(); + } else if (t.kind === "toUpperCase") { + e.data = e.data.toUpperCase(); + } else if (t.kind === "startsWith") { + if (!e.data.startsWith(t.value)) { + a = this._getOrReturnCtx(e, a); + (0, i.addIssueToContext)(a, { + code: r.ZodIssueCode.invalid_string, + validation: { + startsWith: t.value + }, + message: t.message + }); + s.dirty(); + } + } else if (t.kind === "endsWith") { + if (!e.data.endsWith(t.value)) { + a = this._getOrReturnCtx(e, a); + (0, i.addIssueToContext)(a, { + code: r.ZodIssueCode.invalid_string, + validation: { + endsWith: t.value + }, + message: t.message + }); + s.dirty(); + } + } else if (t.kind === "datetime") { + const n = datetimeRegex(t); + if (!n.test(e.data)) { + a = this._getOrReturnCtx(e, a); + (0, i.addIssueToContext)(a, { + code: r.ZodIssueCode.invalid_string, + validation: "datetime", + message: t.message + }); + s.dirty(); + } + } else if (t.kind === "date") { + const n = C; + if (!n.test(e.data)) { + a = this._getOrReturnCtx(e, a); + (0, i.addIssueToContext)(a, { + code: r.ZodIssueCode.invalid_string, + validation: "date", + message: t.message + }); + s.dirty(); + } + } else if (t.kind === "time") { + const n = timeRegex(t); + if (!n.test(e.data)) { + a = this._getOrReturnCtx(e, a); + (0, i.addIssueToContext)(a, { + code: r.ZodIssueCode.invalid_string, + validation: "time", + message: t.message + }); + s.dirty(); + } + } else if (t.kind === "duration") { + if (!h.test(e.data)) { + a = this._getOrReturnCtx(e, a); + (0, i.addIssueToContext)(a, { + validation: "duration", + code: r.ZodIssueCode.invalid_string, + message: t.message + }); + s.dirty(); + } + } else if (t.kind === "ip") { + if (!isValidIP(e.data, t.version)) { + a = this._getOrReturnCtx(e, a); + (0, i.addIssueToContext)(a, { + validation: "ip", + code: r.ZodIssueCode.invalid_string, + message: t.message + }); + s.dirty(); + } + } else if (t.kind === "jwt") { + if (!isValidJWT(e.data, t.alg)) { + a = this._getOrReturnCtx(e, a); + (0, i.addIssueToContext)(a, { + validation: "jwt", + code: r.ZodIssueCode.invalid_string, + message: t.message + }); + s.dirty(); + } + } else if (t.kind === "cidr") { + if (!isValidCidr(e.data, t.version)) { + a = this._getOrReturnCtx(e, a); + (0, i.addIssueToContext)(a, { + validation: "cidr", + code: r.ZodIssueCode.invalid_string, + message: t.message + }); + s.dirty(); + } + } else if (t.kind === "base64") { + if (!T.test(e.data)) { + a = this._getOrReturnCtx(e, a); + (0, i.addIssueToContext)(a, { + validation: "base64", + code: r.ZodIssueCode.invalid_string, + message: t.message + }); + s.dirty(); + } + } else if (t.kind === "base64url") { + if (!b.test(e.data)) { + a = this._getOrReturnCtx(e, a); + (0, i.addIssueToContext)(a, { + validation: "base64url", + code: r.ZodIssueCode.invalid_string, + message: t.message + }); + s.dirty(); + } + } else { + o.util.assertNever(t); + } + } + return { + status: s.value, + value: e.data + }; + } + _regex(e, t, s) { + return this.refinement((t)=>e.test(t), { + validation: t, + code: r.ZodIssueCode.invalid_string, + ...n.errorUtil.errToObj(s) + }); + } + _addCheck(e) { + return new ZodString({ + ...this._def, + checks: [ + ...this._def.checks, + e + ] + }); + } + email(e) { + return this._addCheck({ + kind: "email", + ...n.errorUtil.errToObj(e) + }); + } + url(e) { + return this._addCheck({ + kind: "url", + ...n.errorUtil.errToObj(e) + }); + } + emoji(e) { + return this._addCheck({ + kind: "emoji", + ...n.errorUtil.errToObj(e) + }); + } + uuid(e) { + return this._addCheck({ + kind: "uuid", + ...n.errorUtil.errToObj(e) + }); + } + nanoid(e) { + return this._addCheck({ + kind: "nanoid", + ...n.errorUtil.errToObj(e) + }); + } + cuid(e) { + return this._addCheck({ + kind: "cuid", + ...n.errorUtil.errToObj(e) + }); + } + cuid2(e) { + return this._addCheck({ + kind: "cuid2", + ...n.errorUtil.errToObj(e) + }); + } + ulid(e) { + return this._addCheck({ + kind: "ulid", + ...n.errorUtil.errToObj(e) + }); + } + base64(e) { + return this._addCheck({ + kind: "base64", + ...n.errorUtil.errToObj(e) + }); + } + base64url(e) { + return this._addCheck({ + kind: "base64url", + ...n.errorUtil.errToObj(e) + }); + } + jwt(e) { + return this._addCheck({ + kind: "jwt", + ...n.errorUtil.errToObj(e) + }); + } + ip(e) { + return this._addCheck({ + kind: "ip", + ...n.errorUtil.errToObj(e) + }); + } + cidr(e) { + return this._addCheck({ + kind: "cidr", + ...n.errorUtil.errToObj(e) + }); + } + datetime(e) { + if (typeof e === "string") { + return this._addCheck({ + kind: "datetime", + precision: null, + offset: false, + local: false, + message: e + }); + } + return this._addCheck({ + kind: "datetime", + precision: typeof e?.precision === "undefined" ? null : e?.precision, + offset: e?.offset ?? false, + local: e?.local ?? false, + ...n.errorUtil.errToObj(e?.message) + }); + } + date(e) { + return this._addCheck({ + kind: "date", + message: e + }); + } + time(e) { + if (typeof e === "string") { + return this._addCheck({ + kind: "time", + precision: null, + message: e + }); + } + return this._addCheck({ + kind: "time", + precision: typeof e?.precision === "undefined" ? null : e?.precision, + ...n.errorUtil.errToObj(e?.message) + }); + } + duration(e) { + return this._addCheck({ + kind: "duration", + ...n.errorUtil.errToObj(e) + }); + } + regex(e, t) { + return this._addCheck({ + kind: "regex", + regex: e, + ...n.errorUtil.errToObj(t) + }); + } + includes(e, t) { + return this._addCheck({ + kind: "includes", + value: e, + position: t?.position, + ...n.errorUtil.errToObj(t?.message) + }); + } + startsWith(e, t) { + return this._addCheck({ + kind: "startsWith", + value: e, + ...n.errorUtil.errToObj(t) + }); + } + endsWith(e, t) { + return this._addCheck({ + kind: "endsWith", + value: e, + ...n.errorUtil.errToObj(t) + }); + } + min(e, t) { + return this._addCheck({ + kind: "min", + value: e, + ...n.errorUtil.errToObj(t) + }); + } + max(e, t) { + return this._addCheck({ + kind: "max", + value: e, + ...n.errorUtil.errToObj(t) + }); + } + length(e, t) { + return this._addCheck({ + kind: "length", + value: e, + ...n.errorUtil.errToObj(t) + }); + } + nonempty(e) { + return this.min(1, n.errorUtil.errToObj(e)); + } + trim() { + return new ZodString({ + ...this._def, + checks: [ + ...this._def.checks, + { + kind: "trim" + } + ] + }); + } + toLowerCase() { + return new ZodString({ + ...this._def, + checks: [ + ...this._def.checks, + { + kind: "toLowerCase" + } + ] + }); + } + toUpperCase() { + return new ZodString({ + ...this._def, + checks: [ + ...this._def.checks, + { + kind: "toUpperCase" + } + ] + }); + } + get isDatetime() { + return !!this._def.checks.find((e)=>e.kind === "datetime"); + } + get isDate() { + return !!this._def.checks.find((e)=>e.kind === "date"); + } + get isTime() { + return !!this._def.checks.find((e)=>e.kind === "time"); + } + get isDuration() { + return !!this._def.checks.find((e)=>e.kind === "duration"); + } + get isEmail() { + return !!this._def.checks.find((e)=>e.kind === "email"); + } + get isURL() { + return !!this._def.checks.find((e)=>e.kind === "url"); + } + get isEmoji() { + return !!this._def.checks.find((e)=>e.kind === "emoji"); + } + get isUUID() { + return !!this._def.checks.find((e)=>e.kind === "uuid"); + } + get isNANOID() { + return !!this._def.checks.find((e)=>e.kind === "nanoid"); + } + get isCUID() { + return !!this._def.checks.find((e)=>e.kind === "cuid"); + } + get isCUID2() { + return !!this._def.checks.find((e)=>e.kind === "cuid2"); + } + get isULID() { + return !!this._def.checks.find((e)=>e.kind === "ulid"); + } + get isIP() { + return !!this._def.checks.find((e)=>e.kind === "ip"); + } + get isCIDR() { + return !!this._def.checks.find((e)=>e.kind === "cidr"); + } + get isBase64() { + return !!this._def.checks.find((e)=>e.kind === "base64"); + } + get isBase64url() { + return !!this._def.checks.find((e)=>e.kind === "base64url"); + } + get minLength() { + let e = null; + for (const t of this._def.checks){ + if (t.kind === "min") { + if (e === null || t.value > e) e = t.value; + } + } + return e; + } + get maxLength() { + let e = null; + for (const t of this._def.checks){ + if (t.kind === "max") { + if (e === null || t.value < e) e = t.value; + } + } + return e; + } + } + t.ZodString = ZodString; + ZodString.create = (e)=>new ZodString({ + checks: [], + typeName: k.ZodString, + coerce: e?.coerce ?? false, + ...processCreateParams(e) + }); + function floatSafeRemainder(e, t) { + const s = (e.toString().split(".")[1] || "").length; + const r = (t.toString().split(".")[1] || "").length; + const a = s > r ? s : r; + const n = Number.parseInt(e.toFixed(a).replace(".", "")); + const i = Number.parseInt(t.toFixed(a).replace(".", "")); + return n % i / 10 ** a; + } + class ZodNumber extends ZodType { + constructor(){ + super(...arguments); + this.min = this.gte; + this.max = this.lte; + this.step = this.multipleOf; + } + _parse(e) { + if (this._def.coerce) { + e.data = Number(e.data); + } + const t = this._getType(e); + if (t !== o.ZodParsedType.number) { + const t = this._getOrReturnCtx(e); + (0, i.addIssueToContext)(t, { + code: r.ZodIssueCode.invalid_type, + expected: o.ZodParsedType.number, + received: t.parsedType + }); + return i.INVALID; + } + let s = undefined; + const a = new i.ParseStatus; + for (const t of this._def.checks){ + if (t.kind === "int") { + if (!o.util.isInteger(e.data)) { + s = this._getOrReturnCtx(e, s); + (0, i.addIssueToContext)(s, { + code: r.ZodIssueCode.invalid_type, + expected: "integer", + received: "float", + message: t.message + }); + a.dirty(); + } + } else if (t.kind === "min") { + const n = t.inclusive ? e.data < t.value : e.data <= t.value; + if (n) { + s = this._getOrReturnCtx(e, s); + (0, i.addIssueToContext)(s, { + code: r.ZodIssueCode.too_small, + minimum: t.value, + type: "number", + inclusive: t.inclusive, + exact: false, + message: t.message + }); + a.dirty(); + } + } else if (t.kind === "max") { + const n = t.inclusive ? e.data > t.value : e.data >= t.value; + if (n) { + s = this._getOrReturnCtx(e, s); + (0, i.addIssueToContext)(s, { + code: r.ZodIssueCode.too_big, + maximum: t.value, + type: "number", + inclusive: t.inclusive, + exact: false, + message: t.message + }); + a.dirty(); + } + } else if (t.kind === "multipleOf") { + if (floatSafeRemainder(e.data, t.value) !== 0) { + s = this._getOrReturnCtx(e, s); + (0, i.addIssueToContext)(s, { + code: r.ZodIssueCode.not_multiple_of, + multipleOf: t.value, + message: t.message + }); + a.dirty(); + } + } else if (t.kind === "finite") { + if (!Number.isFinite(e.data)) { + s = this._getOrReturnCtx(e, s); + (0, i.addIssueToContext)(s, { + code: r.ZodIssueCode.not_finite, + message: t.message + }); + a.dirty(); + } + } else { + o.util.assertNever(t); + } + } + return { + status: a.value, + value: e.data + }; + } + gte(e, t) { + return this.setLimit("min", e, true, n.errorUtil.toString(t)); + } + gt(e, t) { + return this.setLimit("min", e, false, n.errorUtil.toString(t)); + } + lte(e, t) { + return this.setLimit("max", e, true, n.errorUtil.toString(t)); + } + lt(e, t) { + return this.setLimit("max", e, false, n.errorUtil.toString(t)); + } + setLimit(e, t, s, r) { + return new ZodNumber({ + ...this._def, + checks: [ + ...this._def.checks, + { + kind: e, + value: t, + inclusive: s, + message: n.errorUtil.toString(r) + } + ] + }); + } + _addCheck(e) { + return new ZodNumber({ + ...this._def, + checks: [ + ...this._def.checks, + e + ] + }); + } + int(e) { + return this._addCheck({ + kind: "int", + message: n.errorUtil.toString(e) + }); + } + positive(e) { + return this._addCheck({ + kind: "min", + value: 0, + inclusive: false, + message: n.errorUtil.toString(e) + }); + } + negative(e) { + return this._addCheck({ + kind: "max", + value: 0, + inclusive: false, + message: n.errorUtil.toString(e) + }); + } + nonpositive(e) { + return this._addCheck({ + kind: "max", + value: 0, + inclusive: true, + message: n.errorUtil.toString(e) + }); + } + nonnegative(e) { + return this._addCheck({ + kind: "min", + value: 0, + inclusive: true, + message: n.errorUtil.toString(e) + }); + } + multipleOf(e, t) { + return this._addCheck({ + kind: "multipleOf", + value: e, + message: n.errorUtil.toString(t) + }); + } + finite(e) { + return this._addCheck({ + kind: "finite", + message: n.errorUtil.toString(e) + }); + } + safe(e) { + return this._addCheck({ + kind: "min", + inclusive: true, + value: Number.MIN_SAFE_INTEGER, + message: n.errorUtil.toString(e) + })._addCheck({ + kind: "max", + inclusive: true, + value: Number.MAX_SAFE_INTEGER, + message: n.errorUtil.toString(e) + }); + } + get minValue() { + let e = null; + for (const t of this._def.checks){ + if (t.kind === "min") { + if (e === null || t.value > e) e = t.value; + } + } + return e; + } + get maxValue() { + let e = null; + for (const t of this._def.checks){ + if (t.kind === "max") { + if (e === null || t.value < e) e = t.value; + } + } + return e; + } + get isInt() { + return !!this._def.checks.find((e)=>e.kind === "int" || e.kind === "multipleOf" && o.util.isInteger(e.value)); + } + get isFinite() { + let e = null; + let t = null; + for (const s of this._def.checks){ + if (s.kind === "finite" || s.kind === "int" || s.kind === "multipleOf") { + return true; + } else if (s.kind === "min") { + if (t === null || s.value > t) t = s.value; + } else if (s.kind === "max") { + if (e === null || s.value < e) e = s.value; + } + } + return Number.isFinite(t) && Number.isFinite(e); + } + } + t.ZodNumber = ZodNumber; + ZodNumber.create = (e)=>new ZodNumber({ + checks: [], + typeName: k.ZodNumber, + coerce: e?.coerce || false, + ...processCreateParams(e) + }); + class ZodBigInt extends ZodType { + constructor(){ + super(...arguments); + this.min = this.gte; + this.max = this.lte; + } + _parse(e) { + if (this._def.coerce) { + try { + e.data = BigInt(e.data); + } catch { + return this._getInvalidInput(e); + } + } + const t = this._getType(e); + if (t !== o.ZodParsedType.bigint) { + return this._getInvalidInput(e); + } + let s = undefined; + const a = new i.ParseStatus; + for (const t of this._def.checks){ + if (t.kind === "min") { + const n = t.inclusive ? e.data < t.value : e.data <= t.value; + if (n) { + s = this._getOrReturnCtx(e, s); + (0, i.addIssueToContext)(s, { + code: r.ZodIssueCode.too_small, + type: "bigint", + minimum: t.value, + inclusive: t.inclusive, + message: t.message + }); + a.dirty(); + } + } else if (t.kind === "max") { + const n = t.inclusive ? e.data > t.value : e.data >= t.value; + if (n) { + s = this._getOrReturnCtx(e, s); + (0, i.addIssueToContext)(s, { + code: r.ZodIssueCode.too_big, + type: "bigint", + maximum: t.value, + inclusive: t.inclusive, + message: t.message + }); + a.dirty(); + } + } else if (t.kind === "multipleOf") { + if (e.data % t.value !== BigInt(0)) { + s = this._getOrReturnCtx(e, s); + (0, i.addIssueToContext)(s, { + code: r.ZodIssueCode.not_multiple_of, + multipleOf: t.value, + message: t.message + }); + a.dirty(); + } + } else { + o.util.assertNever(t); + } + } + return { + status: a.value, + value: e.data + }; + } + _getInvalidInput(e) { + const t = this._getOrReturnCtx(e); + (0, i.addIssueToContext)(t, { + code: r.ZodIssueCode.invalid_type, + expected: o.ZodParsedType.bigint, + received: t.parsedType + }); + return i.INVALID; + } + gte(e, t) { + return this.setLimit("min", e, true, n.errorUtil.toString(t)); + } + gt(e, t) { + return this.setLimit("min", e, false, n.errorUtil.toString(t)); + } + lte(e, t) { + return this.setLimit("max", e, true, n.errorUtil.toString(t)); + } + lt(e, t) { + return this.setLimit("max", e, false, n.errorUtil.toString(t)); + } + setLimit(e, t, s, r) { + return new ZodBigInt({ + ...this._def, + checks: [ + ...this._def.checks, + { + kind: e, + value: t, + inclusive: s, + message: n.errorUtil.toString(r) + } + ] + }); + } + _addCheck(e) { + return new ZodBigInt({ + ...this._def, + checks: [ + ...this._def.checks, + e + ] + }); + } + positive(e) { + return this._addCheck({ + kind: "min", + value: BigInt(0), + inclusive: false, + message: n.errorUtil.toString(e) + }); + } + negative(e) { + return this._addCheck({ + kind: "max", + value: BigInt(0), + inclusive: false, + message: n.errorUtil.toString(e) + }); + } + nonpositive(e) { + return this._addCheck({ + kind: "max", + value: BigInt(0), + inclusive: true, + message: n.errorUtil.toString(e) + }); + } + nonnegative(e) { + return this._addCheck({ + kind: "min", + value: BigInt(0), + inclusive: true, + message: n.errorUtil.toString(e) + }); + } + multipleOf(e, t) { + return this._addCheck({ + kind: "multipleOf", + value: e, + message: n.errorUtil.toString(t) + }); + } + get minValue() { + let e = null; + for (const t of this._def.checks){ + if (t.kind === "min") { + if (e === null || t.value > e) e = t.value; + } + } + return e; + } + get maxValue() { + let e = null; + for (const t of this._def.checks){ + if (t.kind === "max") { + if (e === null || t.value < e) e = t.value; + } + } + return e; + } + } + t.ZodBigInt = ZodBigInt; + ZodBigInt.create = (e)=>new ZodBigInt({ + checks: [], + typeName: k.ZodBigInt, + coerce: e?.coerce ?? false, + ...processCreateParams(e) + }); + class ZodBoolean extends ZodType { + _parse(e) { + if (this._def.coerce) { + e.data = Boolean(e.data); + } + const t = this._getType(e); + if (t !== o.ZodParsedType.boolean) { + const t = this._getOrReturnCtx(e); + (0, i.addIssueToContext)(t, { + code: r.ZodIssueCode.invalid_type, + expected: o.ZodParsedType.boolean, + received: t.parsedType + }); + return i.INVALID; + } + return (0, i.OK)(e.data); + } + } + t.ZodBoolean = ZodBoolean; + ZodBoolean.create = (e)=>new ZodBoolean({ + typeName: k.ZodBoolean, + coerce: e?.coerce || false, + ...processCreateParams(e) + }); + class ZodDate extends ZodType { + _parse(e) { + if (this._def.coerce) { + e.data = new Date(e.data); + } + const t = this._getType(e); + if (t !== o.ZodParsedType.date) { + const t = this._getOrReturnCtx(e); + (0, i.addIssueToContext)(t, { + code: r.ZodIssueCode.invalid_type, + expected: o.ZodParsedType.date, + received: t.parsedType + }); + return i.INVALID; + } + if (Number.isNaN(e.data.getTime())) { + const t = this._getOrReturnCtx(e); + (0, i.addIssueToContext)(t, { + code: r.ZodIssueCode.invalid_date + }); + return i.INVALID; + } + const s = new i.ParseStatus; + let a = undefined; + for (const t of this._def.checks){ + if (t.kind === "min") { + if (e.data.getTime() < t.value) { + a = this._getOrReturnCtx(e, a); + (0, i.addIssueToContext)(a, { + code: r.ZodIssueCode.too_small, + message: t.message, + inclusive: true, + exact: false, + minimum: t.value, + type: "date" + }); + s.dirty(); + } + } else if (t.kind === "max") { + if (e.data.getTime() > t.value) { + a = this._getOrReturnCtx(e, a); + (0, i.addIssueToContext)(a, { + code: r.ZodIssueCode.too_big, + message: t.message, + inclusive: true, + exact: false, + maximum: t.value, + type: "date" + }); + s.dirty(); + } + } else { + o.util.assertNever(t); + } + } + return { + status: s.value, + value: new Date(e.data.getTime()) + }; + } + _addCheck(e) { + return new ZodDate({ + ...this._def, + checks: [ + ...this._def.checks, + e + ] + }); + } + min(e, t) { + return this._addCheck({ + kind: "min", + value: e.getTime(), + message: n.errorUtil.toString(t) + }); + } + max(e, t) { + return this._addCheck({ + kind: "max", + value: e.getTime(), + message: n.errorUtil.toString(t) + }); + } + get minDate() { + let e = null; + for (const t of this._def.checks){ + if (t.kind === "min") { + if (e === null || t.value > e) e = t.value; + } + } + return e != null ? new Date(e) : null; + } + get maxDate() { + let e = null; + for (const t of this._def.checks){ + if (t.kind === "max") { + if (e === null || t.value < e) e = t.value; + } + } + return e != null ? new Date(e) : null; + } + } + t.ZodDate = ZodDate; + ZodDate.create = (e)=>new ZodDate({ + checks: [], + coerce: e?.coerce || false, + typeName: k.ZodDate, + ...processCreateParams(e) + }); + class ZodSymbol extends ZodType { + _parse(e) { + const t = this._getType(e); + if (t !== o.ZodParsedType.symbol) { + const t = this._getOrReturnCtx(e); + (0, i.addIssueToContext)(t, { + code: r.ZodIssueCode.invalid_type, + expected: o.ZodParsedType.symbol, + received: t.parsedType + }); + return i.INVALID; + } + return (0, i.OK)(e.data); + } + } + t.ZodSymbol = ZodSymbol; + ZodSymbol.create = (e)=>new ZodSymbol({ + typeName: k.ZodSymbol, + ...processCreateParams(e) + }); + class ZodUndefined extends ZodType { + _parse(e) { + const t = this._getType(e); + if (t !== o.ZodParsedType.undefined) { + const t = this._getOrReturnCtx(e); + (0, i.addIssueToContext)(t, { + code: r.ZodIssueCode.invalid_type, + expected: o.ZodParsedType.undefined, + received: t.parsedType + }); + return i.INVALID; + } + return (0, i.OK)(e.data); + } + } + t.ZodUndefined = ZodUndefined; + ZodUndefined.create = (e)=>new ZodUndefined({ + typeName: k.ZodUndefined, + ...processCreateParams(e) + }); + class ZodNull extends ZodType { + _parse(e) { + const t = this._getType(e); + if (t !== o.ZodParsedType.null) { + const t = this._getOrReturnCtx(e); + (0, i.addIssueToContext)(t, { + code: r.ZodIssueCode.invalid_type, + expected: o.ZodParsedType.null, + received: t.parsedType + }); + return i.INVALID; + } + return (0, i.OK)(e.data); + } + } + t.ZodNull = ZodNull; + ZodNull.create = (e)=>new ZodNull({ + typeName: k.ZodNull, + ...processCreateParams(e) + }); + class ZodAny extends ZodType { + constructor(){ + super(...arguments); + this._any = true; + } + _parse(e) { + return (0, i.OK)(e.data); + } + } + t.ZodAny = ZodAny; + ZodAny.create = (e)=>new ZodAny({ + typeName: k.ZodAny, + ...processCreateParams(e) + }); + class ZodUnknown extends ZodType { + constructor(){ + super(...arguments); + this._unknown = true; + } + _parse(e) { + return (0, i.OK)(e.data); + } + } + t.ZodUnknown = ZodUnknown; + ZodUnknown.create = (e)=>new ZodUnknown({ + typeName: k.ZodUnknown, + ...processCreateParams(e) + }); + class ZodNever extends ZodType { + _parse(e) { + const t = this._getOrReturnCtx(e); + (0, i.addIssueToContext)(t, { + code: r.ZodIssueCode.invalid_type, + expected: o.ZodParsedType.never, + received: t.parsedType + }); + return i.INVALID; + } + } + t.ZodNever = ZodNever; + ZodNever.create = (e)=>new ZodNever({ + typeName: k.ZodNever, + ...processCreateParams(e) + }); + class ZodVoid extends ZodType { + _parse(e) { + const t = this._getType(e); + if (t !== o.ZodParsedType.undefined) { + const t = this._getOrReturnCtx(e); + (0, i.addIssueToContext)(t, { + code: r.ZodIssueCode.invalid_type, + expected: o.ZodParsedType.void, + received: t.parsedType + }); + return i.INVALID; + } + return (0, i.OK)(e.data); + } + } + t.ZodVoid = ZodVoid; + ZodVoid.create = (e)=>new ZodVoid({ + typeName: k.ZodVoid, + ...processCreateParams(e) + }); + class ZodArray extends ZodType { + _parse(e) { + const { ctx: t, status: s } = this._processInputParams(e); + const a = this._def; + if (t.parsedType !== o.ZodParsedType.array) { + (0, i.addIssueToContext)(t, { + code: r.ZodIssueCode.invalid_type, + expected: o.ZodParsedType.array, + received: t.parsedType + }); + return i.INVALID; + } + if (a.exactLength !== null) { + const e = t.data.length > a.exactLength.value; + const n = t.data.length < a.exactLength.value; + if (e || n) { + (0, i.addIssueToContext)(t, { + code: e ? r.ZodIssueCode.too_big : r.ZodIssueCode.too_small, + minimum: n ? a.exactLength.value : undefined, + maximum: e ? a.exactLength.value : undefined, + type: "array", + inclusive: true, + exact: true, + message: a.exactLength.message + }); + s.dirty(); + } + } + if (a.minLength !== null) { + if (t.data.length < a.minLength.value) { + (0, i.addIssueToContext)(t, { + code: r.ZodIssueCode.too_small, + minimum: a.minLength.value, + type: "array", + inclusive: true, + exact: false, + message: a.minLength.message + }); + s.dirty(); + } + } + if (a.maxLength !== null) { + if (t.data.length > a.maxLength.value) { + (0, i.addIssueToContext)(t, { + code: r.ZodIssueCode.too_big, + maximum: a.maxLength.value, + type: "array", + inclusive: true, + exact: false, + message: a.maxLength.message + }); + s.dirty(); + } + } + if (t.common.async) { + return Promise.all([ + ...t.data + ].map((e, s)=>a.type._parseAsync(new ParseInputLazyPath(t, e, t.path, s)))).then((e)=>i.ParseStatus.mergeArray(s, e)); + } + const n = [ + ...t.data + ].map((e, s)=>a.type._parseSync(new ParseInputLazyPath(t, e, t.path, s))); + return i.ParseStatus.mergeArray(s, n); + } + get element() { + return this._def.type; + } + min(e, t) { + return new ZodArray({ + ...this._def, + minLength: { + value: e, + message: n.errorUtil.toString(t) + } + }); + } + max(e, t) { + return new ZodArray({ + ...this._def, + maxLength: { + value: e, + message: n.errorUtil.toString(t) + } + }); + } + length(e, t) { + return new ZodArray({ + ...this._def, + exactLength: { + value: e, + message: n.errorUtil.toString(t) + } + }); + } + nonempty(e) { + return this.min(1, e); + } + } + t.ZodArray = ZodArray; + ZodArray.create = (e, t)=>new ZodArray({ + type: e, + minLength: null, + maxLength: null, + exactLength: null, + typeName: k.ZodArray, + ...processCreateParams(t) + }); + function deepPartialify(e) { + if (e instanceof ZodObject) { + const t = {}; + for(const s in e.shape){ + const r = e.shape[s]; + t[s] = ZodOptional.create(deepPartialify(r)); + } + return new ZodObject({ + ...e._def, + shape: ()=>t + }); + } else if (e instanceof ZodArray) { + return new ZodArray({ + ...e._def, + type: deepPartialify(e.element) + }); + } else if (e instanceof ZodOptional) { + return ZodOptional.create(deepPartialify(e.unwrap())); + } else if (e instanceof ZodNullable) { + return ZodNullable.create(deepPartialify(e.unwrap())); + } else if (e instanceof ZodTuple) { + return ZodTuple.create(e.items.map((e)=>deepPartialify(e))); + } else { + return e; + } + } + class ZodObject extends ZodType { + constructor(){ + super(...arguments); + this._cached = null; + this.nonstrict = this.passthrough; + this.augment = this.extend; + } + _getCached() { + if (this._cached !== null) return this._cached; + const e = this._def.shape(); + const t = o.util.objectKeys(e); + this._cached = { + shape: e, + keys: t + }; + return this._cached; + } + _parse(e) { + const t = this._getType(e); + if (t !== o.ZodParsedType.object) { + const t = this._getOrReturnCtx(e); + (0, i.addIssueToContext)(t, { + code: r.ZodIssueCode.invalid_type, + expected: o.ZodParsedType.object, + received: t.parsedType + }); + return i.INVALID; + } + const { status: s, ctx: a } = this._processInputParams(e); + const { shape: n, keys: d } = this._getCached(); + const u = []; + if (!(this._def.catchall instanceof ZodNever && this._def.unknownKeys === "strip")) { + for(const e in a.data){ + if (!d.includes(e)) { + u.push(e); + } + } + } + const c = []; + for (const e of d){ + const t = n[e]; + const s = a.data[e]; + c.push({ + key: { + status: "valid", + value: e + }, + value: t._parse(new ParseInputLazyPath(a, s, a.path, e)), + alwaysSet: e in a.data + }); + } + if (this._def.catchall instanceof ZodNever) { + const e = this._def.unknownKeys; + if (e === "passthrough") { + for (const e of u){ + c.push({ + key: { + status: "valid", + value: e + }, + value: { + status: "valid", + value: a.data[e] + } + }); + } + } else if (e === "strict") { + if (u.length > 0) { + (0, i.addIssueToContext)(a, { + code: r.ZodIssueCode.unrecognized_keys, + keys: u + }); + s.dirty(); + } + } else if (e === "strip") {} else { + throw new Error(`Internal ZodObject error: invalid unknownKeys value.`); + } + } else { + const e = this._def.catchall; + for (const t of u){ + const s = a.data[t]; + c.push({ + key: { + status: "valid", + value: t + }, + value: e._parse(new ParseInputLazyPath(a, s, a.path, t)), + alwaysSet: t in a.data + }); + } + } + if (a.common.async) { + return Promise.resolve().then(async ()=>{ + const e = []; + for (const t of c){ + const s = await t.key; + const r = await t.value; + e.push({ + key: s, + value: r, + alwaysSet: t.alwaysSet + }); + } + return e; + }).then((e)=>i.ParseStatus.mergeObjectSync(s, e)); + } else { + return i.ParseStatus.mergeObjectSync(s, c); + } + } + get shape() { + return this._def.shape(); + } + strict(e) { + n.errorUtil.errToObj; + return new ZodObject({ + ...this._def, + unknownKeys: "strict", + ...e !== undefined ? { + errorMap: (t, s)=>{ + const r = this._def.errorMap?.(t, s).message ?? s.defaultError; + if (t.code === "unrecognized_keys") return { + message: n.errorUtil.errToObj(e).message ?? r + }; + return { + message: r + }; + } + } : {} + }); + } + strip() { + return new ZodObject({ + ...this._def, + unknownKeys: "strip" + }); + } + passthrough() { + return new ZodObject({ + ...this._def, + unknownKeys: "passthrough" + }); + } + extend(e) { + return new ZodObject({ + ...this._def, + shape: ()=>({ + ...this._def.shape(), + ...e + }) + }); + } + merge(e) { + const t = new ZodObject({ + unknownKeys: e._def.unknownKeys, + catchall: e._def.catchall, + shape: ()=>({ + ...this._def.shape(), + ...e._def.shape() + }), + typeName: k.ZodObject + }); + return t; + } + setKey(e, t) { + return this.augment({ + [e]: t + }); + } + catchall(e) { + return new ZodObject({ + ...this._def, + catchall: e + }); + } + pick(e) { + const t = {}; + for (const s of o.util.objectKeys(e)){ + if (e[s] && this.shape[s]) { + t[s] = this.shape[s]; + } + } + return new ZodObject({ + ...this._def, + shape: ()=>t + }); + } + omit(e) { + const t = {}; + for (const s of o.util.objectKeys(this.shape)){ + if (!e[s]) { + t[s] = this.shape[s]; + } + } + return new ZodObject({ + ...this._def, + shape: ()=>t + }); + } + deepPartial() { + return deepPartialify(this); + } + partial(e) { + const t = {}; + for (const s of o.util.objectKeys(this.shape)){ + const r = this.shape[s]; + if (e && !e[s]) { + t[s] = r; + } else { + t[s] = r.optional(); + } + } + return new ZodObject({ + ...this._def, + shape: ()=>t + }); + } + required(e) { + const t = {}; + for (const s of o.util.objectKeys(this.shape)){ + if (e && !e[s]) { + t[s] = this.shape[s]; + } else { + const e = this.shape[s]; + let r = e; + while(r instanceof ZodOptional){ + r = r._def.innerType; + } + t[s] = r; + } + } + return new ZodObject({ + ...this._def, + shape: ()=>t + }); + } + keyof() { + return createZodEnum(o.util.objectKeys(this.shape)); + } + } + t.ZodObject = ZodObject; + ZodObject.create = (e, t)=>new ZodObject({ + shape: ()=>e, + unknownKeys: "strip", + catchall: ZodNever.create(), + typeName: k.ZodObject, + ...processCreateParams(t) + }); + ZodObject.strictCreate = (e, t)=>new ZodObject({ + shape: ()=>e, + unknownKeys: "strict", + catchall: ZodNever.create(), + typeName: k.ZodObject, + ...processCreateParams(t) + }); + ZodObject.lazycreate = (e, t)=>new ZodObject({ + shape: e, + unknownKeys: "strip", + catchall: ZodNever.create(), + typeName: k.ZodObject, + ...processCreateParams(t) + }); + class ZodUnion extends ZodType { + _parse(e) { + const { ctx: t } = this._processInputParams(e); + const s = this._def.options; + function handleResults(e) { + for (const t of e){ + if (t.result.status === "valid") { + return t.result; + } + } + for (const s of e){ + if (s.result.status === "dirty") { + t.common.issues.push(...s.ctx.common.issues); + return s.result; + } + } + const s = e.map((e)=>new r.ZodError(e.ctx.common.issues)); + (0, i.addIssueToContext)(t, { + code: r.ZodIssueCode.invalid_union, + unionErrors: s + }); + return i.INVALID; + } + if (t.common.async) { + return Promise.all(s.map(async (e)=>{ + const s = { + ...t, + common: { + ...t.common, + issues: [] + }, + parent: null + }; + return { + result: await e._parseAsync({ + data: t.data, + path: t.path, + parent: s + }), + ctx: s + }; + })).then(handleResults); + } else { + let e = undefined; + const a = []; + for (const r of s){ + const s = { + ...t, + common: { + ...t.common, + issues: [] + }, + parent: null + }; + const n = r._parseSync({ + data: t.data, + path: t.path, + parent: s + }); + if (n.status === "valid") { + return n; + } else if (n.status === "dirty" && !e) { + e = { + result: n, + ctx: s + }; + } + if (s.common.issues.length) { + a.push(s.common.issues); + } + } + if (e) { + t.common.issues.push(...e.ctx.common.issues); + return e.result; + } + const n = a.map((e)=>new r.ZodError(e)); + (0, i.addIssueToContext)(t, { + code: r.ZodIssueCode.invalid_union, + unionErrors: n + }); + return i.INVALID; + } + } + get options() { + return this._def.options; + } + } + t.ZodUnion = ZodUnion; + ZodUnion.create = (e, t)=>new ZodUnion({ + options: e, + typeName: k.ZodUnion, + ...processCreateParams(t) + }); + const getDiscriminator = (e)=>{ + if (e instanceof ZodLazy) { + return getDiscriminator(e.schema); + } else if (e instanceof ZodEffects) { + return getDiscriminator(e.innerType()); + } else if (e instanceof ZodLiteral) { + return [ + e.value + ]; + } else if (e instanceof ZodEnum) { + return e.options; + } else if (e instanceof ZodNativeEnum) { + return o.util.objectValues(e.enum); + } else if (e instanceof ZodDefault) { + return getDiscriminator(e._def.innerType); + } else if (e instanceof ZodUndefined) { + return [ + undefined + ]; + } else if (e instanceof ZodNull) { + return [ + null + ]; + } else if (e instanceof ZodOptional) { + return [ + undefined, + ...getDiscriminator(e.unwrap()) + ]; + } else if (e instanceof ZodNullable) { + return [ + null, + ...getDiscriminator(e.unwrap()) + ]; + } else if (e instanceof ZodBranded) { + return getDiscriminator(e.unwrap()); + } else if (e instanceof ZodReadonly) { + return getDiscriminator(e.unwrap()); + } else if (e instanceof ZodCatch) { + return getDiscriminator(e._def.innerType); + } else { + return []; + } + }; + class ZodDiscriminatedUnion extends ZodType { + _parse(e) { + const { ctx: t } = this._processInputParams(e); + if (t.parsedType !== o.ZodParsedType.object) { + (0, i.addIssueToContext)(t, { + code: r.ZodIssueCode.invalid_type, + expected: o.ZodParsedType.object, + received: t.parsedType + }); + return i.INVALID; + } + const s = this.discriminator; + const a = t.data[s]; + const n = this.optionsMap.get(a); + if (!n) { + (0, i.addIssueToContext)(t, { + code: r.ZodIssueCode.invalid_union_discriminator, + options: Array.from(this.optionsMap.keys()), + path: [ + s + ] + }); + return i.INVALID; + } + if (t.common.async) { + return n._parseAsync({ + data: t.data, + path: t.path, + parent: t + }); + } else { + return n._parseSync({ + data: t.data, + path: t.path, + parent: t + }); + } + } + get discriminator() { + return this._def.discriminator; + } + get options() { + return this._def.options; + } + get optionsMap() { + return this._def.optionsMap; + } + static create(e, t, s) { + const r = new Map; + for (const s of t){ + const t = getDiscriminator(s.shape[e]); + if (!t.length) { + throw new Error(`A discriminator value for key \`${e}\` could not be extracted from all schema options`); + } + for (const a of t){ + if (r.has(a)) { + throw new Error(`Discriminator property ${String(e)} has duplicate value ${String(a)}`); + } + r.set(a, s); + } + } + return new ZodDiscriminatedUnion({ + typeName: k.ZodDiscriminatedUnion, + discriminator: e, + options: t, + optionsMap: r, + ...processCreateParams(s) + }); + } + } + t.ZodDiscriminatedUnion = ZodDiscriminatedUnion; + function mergeValues(e, t) { + const s = (0, o.getParsedType)(e); + const r = (0, o.getParsedType)(t); + if (e === t) { + return { + valid: true, + data: e + }; + } else if (s === o.ZodParsedType.object && r === o.ZodParsedType.object) { + const s = o.util.objectKeys(t); + const r = o.util.objectKeys(e).filter((e)=>s.indexOf(e) !== -1); + const a = { + ...e, + ...t + }; + for (const s of r){ + const r = mergeValues(e[s], t[s]); + if (!r.valid) { + return { + valid: false + }; + } + a[s] = r.data; + } + return { + valid: true, + data: a + }; + } else if (s === o.ZodParsedType.array && r === o.ZodParsedType.array) { + if (e.length !== t.length) { + return { + valid: false + }; + } + const s = []; + for(let r = 0; r < e.length; r++){ + const a = e[r]; + const n = t[r]; + const i = mergeValues(a, n); + if (!i.valid) { + return { + valid: false + }; + } + s.push(i.data); + } + return { + valid: true, + data: s + }; + } else if (s === o.ZodParsedType.date && r === o.ZodParsedType.date && +e === +t) { + return { + valid: true, + data: e + }; + } else { + return { + valid: false + }; + } + } + class ZodIntersection extends ZodType { + _parse(e) { + const { status: t, ctx: s } = this._processInputParams(e); + const handleParsed = (e, a)=>{ + if ((0, i.isAborted)(e) || (0, i.isAborted)(a)) { + return i.INVALID; + } + const n = mergeValues(e.value, a.value); + if (!n.valid) { + (0, i.addIssueToContext)(s, { + code: r.ZodIssueCode.invalid_intersection_types + }); + return i.INVALID; + } + if ((0, i.isDirty)(e) || (0, i.isDirty)(a)) { + t.dirty(); + } + return { + status: t.value, + value: n.data + }; + }; + if (s.common.async) { + return Promise.all([ + this._def.left._parseAsync({ + data: s.data, + path: s.path, + parent: s + }), + this._def.right._parseAsync({ + data: s.data, + path: s.path, + parent: s + }) + ]).then(([e, t])=>handleParsed(e, t)); + } else { + return handleParsed(this._def.left._parseSync({ + data: s.data, + path: s.path, + parent: s + }), this._def.right._parseSync({ + data: s.data, + path: s.path, + parent: s + })); + } + } + } + t.ZodIntersection = ZodIntersection; + ZodIntersection.create = (e, t, s)=>new ZodIntersection({ + left: e, + right: t, + typeName: k.ZodIntersection, + ...processCreateParams(s) + }); + class ZodTuple extends ZodType { + _parse(e) { + const { status: t, ctx: s } = this._processInputParams(e); + if (s.parsedType !== o.ZodParsedType.array) { + (0, i.addIssueToContext)(s, { + code: r.ZodIssueCode.invalid_type, + expected: o.ZodParsedType.array, + received: s.parsedType + }); + return i.INVALID; + } + if (s.data.length < this._def.items.length) { + (0, i.addIssueToContext)(s, { + code: r.ZodIssueCode.too_small, + minimum: this._def.items.length, + inclusive: true, + exact: false, + type: "array" + }); + return i.INVALID; + } + const a = this._def.rest; + if (!a && s.data.length > this._def.items.length) { + (0, i.addIssueToContext)(s, { + code: r.ZodIssueCode.too_big, + maximum: this._def.items.length, + inclusive: true, + exact: false, + type: "array" + }); + t.dirty(); + } + const n = [ + ...s.data + ].map((e, t)=>{ + const r = this._def.items[t] || this._def.rest; + if (!r) return null; + return r._parse(new ParseInputLazyPath(s, e, s.path, t)); + }).filter((e)=>!!e); + if (s.common.async) { + return Promise.all(n).then((e)=>i.ParseStatus.mergeArray(t, e)); + } else { + return i.ParseStatus.mergeArray(t, n); + } + } + get items() { + return this._def.items; + } + rest(e) { + return new ZodTuple({ + ...this._def, + rest: e + }); + } + } + t.ZodTuple = ZodTuple; + ZodTuple.create = (e, t)=>{ + if (!Array.isArray(e)) { + throw new Error("You must pass an array of schemas to z.tuple([ ... ])"); + } + return new ZodTuple({ + items: e, + typeName: k.ZodTuple, + rest: null, + ...processCreateParams(t) + }); + }; + class ZodRecord extends ZodType { + get keySchema() { + return this._def.keyType; + } + get valueSchema() { + return this._def.valueType; + } + _parse(e) { + const { status: t, ctx: s } = this._processInputParams(e); + if (s.parsedType !== o.ZodParsedType.object) { + (0, i.addIssueToContext)(s, { + code: r.ZodIssueCode.invalid_type, + expected: o.ZodParsedType.object, + received: s.parsedType + }); + return i.INVALID; + } + const a = []; + const n = this._def.keyType; + const d = this._def.valueType; + for(const e in s.data){ + a.push({ + key: n._parse(new ParseInputLazyPath(s, e, s.path, e)), + value: d._parse(new ParseInputLazyPath(s, s.data[e], s.path, e)), + alwaysSet: e in s.data + }); + } + if (s.common.async) { + return i.ParseStatus.mergeObjectAsync(t, a); + } else { + return i.ParseStatus.mergeObjectSync(t, a); + } + } + get element() { + return this._def.valueType; + } + static create(e, t, s) { + if (t instanceof ZodType) { + return new ZodRecord({ + keyType: e, + valueType: t, + typeName: k.ZodRecord, + ...processCreateParams(s) + }); + } + return new ZodRecord({ + keyType: ZodString.create(), + valueType: e, + typeName: k.ZodRecord, + ...processCreateParams(t) + }); + } + } + t.ZodRecord = ZodRecord; + class ZodMap extends ZodType { + get keySchema() { + return this._def.keyType; + } + get valueSchema() { + return this._def.valueType; + } + _parse(e) { + const { status: t, ctx: s } = this._processInputParams(e); + if (s.parsedType !== o.ZodParsedType.map) { + (0, i.addIssueToContext)(s, { + code: r.ZodIssueCode.invalid_type, + expected: o.ZodParsedType.map, + received: s.parsedType + }); + return i.INVALID; + } + const a = this._def.keyType; + const n = this._def.valueType; + const d = [ + ...s.data.entries() + ].map(([e, t], r)=>({ + key: a._parse(new ParseInputLazyPath(s, e, s.path, [ + r, + "key" + ])), + value: n._parse(new ParseInputLazyPath(s, t, s.path, [ + r, + "value" + ])) + })); + if (s.common.async) { + const e = new Map; + return Promise.resolve().then(async ()=>{ + for (const s of d){ + const r = await s.key; + const a = await s.value; + if (r.status === "aborted" || a.status === "aborted") { + return i.INVALID; + } + if (r.status === "dirty" || a.status === "dirty") { + t.dirty(); + } + e.set(r.value, a.value); + } + return { + status: t.value, + value: e + }; + }); + } else { + const e = new Map; + for (const s of d){ + const r = s.key; + const a = s.value; + if (r.status === "aborted" || a.status === "aborted") { + return i.INVALID; + } + if (r.status === "dirty" || a.status === "dirty") { + t.dirty(); + } + e.set(r.value, a.value); + } + return { + status: t.value, + value: e + }; + } + } + } + t.ZodMap = ZodMap; + ZodMap.create = (e, t, s)=>new ZodMap({ + valueType: t, + keyType: e, + typeName: k.ZodMap, + ...processCreateParams(s) + }); + class ZodSet extends ZodType { + _parse(e) { + const { status: t, ctx: s } = this._processInputParams(e); + if (s.parsedType !== o.ZodParsedType.set) { + (0, i.addIssueToContext)(s, { + code: r.ZodIssueCode.invalid_type, + expected: o.ZodParsedType.set, + received: s.parsedType + }); + return i.INVALID; + } + const a = this._def; + if (a.minSize !== null) { + if (s.data.size < a.minSize.value) { + (0, i.addIssueToContext)(s, { + code: r.ZodIssueCode.too_small, + minimum: a.minSize.value, + type: "set", + inclusive: true, + exact: false, + message: a.minSize.message + }); + t.dirty(); + } + } + if (a.maxSize !== null) { + if (s.data.size > a.maxSize.value) { + (0, i.addIssueToContext)(s, { + code: r.ZodIssueCode.too_big, + maximum: a.maxSize.value, + type: "set", + inclusive: true, + exact: false, + message: a.maxSize.message + }); + t.dirty(); + } + } + const n = this._def.valueType; + function finalizeSet(e) { + const s = new Set; + for (const r of e){ + if (r.status === "aborted") return i.INVALID; + if (r.status === "dirty") t.dirty(); + s.add(r.value); + } + return { + status: t.value, + value: s + }; + } + const d = [ + ...s.data.values() + ].map((e, t)=>n._parse(new ParseInputLazyPath(s, e, s.path, t))); + if (s.common.async) { + return Promise.all(d).then((e)=>finalizeSet(e)); + } else { + return finalizeSet(d); + } + } + min(e, t) { + return new ZodSet({ + ...this._def, + minSize: { + value: e, + message: n.errorUtil.toString(t) + } + }); + } + max(e, t) { + return new ZodSet({ + ...this._def, + maxSize: { + value: e, + message: n.errorUtil.toString(t) + } + }); + } + size(e, t) { + return this.min(e, t).max(e, t); + } + nonempty(e) { + return this.min(1, e); + } + } + t.ZodSet = ZodSet; + ZodSet.create = (e, t)=>new ZodSet({ + valueType: e, + minSize: null, + maxSize: null, + typeName: k.ZodSet, + ...processCreateParams(t) + }); + class ZodFunction extends ZodType { + constructor(){ + super(...arguments); + this.validate = this.implement; + } + _parse(e) { + const { ctx: t } = this._processInputParams(e); + if (t.parsedType !== o.ZodParsedType.function) { + (0, i.addIssueToContext)(t, { + code: r.ZodIssueCode.invalid_type, + expected: o.ZodParsedType.function, + received: t.parsedType + }); + return i.INVALID; + } + function makeArgsIssue(e, s) { + return (0, i.makeIssue)({ + data: e, + path: t.path, + errorMaps: [ + t.common.contextualErrorMap, + t.schemaErrorMap, + (0, a.getErrorMap)(), + a.defaultErrorMap + ].filter((e)=>!!e), + issueData: { + code: r.ZodIssueCode.invalid_arguments, + argumentsError: s + } + }); + } + function makeReturnsIssue(e, s) { + return (0, i.makeIssue)({ + data: e, + path: t.path, + errorMaps: [ + t.common.contextualErrorMap, + t.schemaErrorMap, + (0, a.getErrorMap)(), + a.defaultErrorMap + ].filter((e)=>!!e), + issueData: { + code: r.ZodIssueCode.invalid_return_type, + returnTypeError: s + } + }); + } + const s = { + errorMap: t.common.contextualErrorMap + }; + const n = t.data; + if (this._def.returns instanceof ZodPromise) { + const e = this; + return (0, i.OK)(async function(...t) { + const a = new r.ZodError([]); + const i = await e._def.args.parseAsync(t, s).catch((e)=>{ + a.addIssue(makeArgsIssue(t, e)); + throw a; + }); + const o = await Reflect.apply(n, this, i); + const d = await e._def.returns._def.type.parseAsync(o, s).catch((e)=>{ + a.addIssue(makeReturnsIssue(o, e)); + throw a; + }); + return d; + }); + } else { + const e = this; + return (0, i.OK)(function(...t) { + const a = e._def.args.safeParse(t, s); + if (!a.success) { + throw new r.ZodError([ + makeArgsIssue(t, a.error) + ]); + } + const i = Reflect.apply(n, this, a.data); + const o = e._def.returns.safeParse(i, s); + if (!o.success) { + throw new r.ZodError([ + makeReturnsIssue(i, o.error) + ]); + } + return o.data; + }); + } + } + parameters() { + return this._def.args; + } + returnType() { + return this._def.returns; + } + args(...e) { + return new ZodFunction({ + ...this._def, + args: ZodTuple.create(e).rest(ZodUnknown.create()) + }); + } + returns(e) { + return new ZodFunction({ + ...this._def, + returns: e + }); + } + implement(e) { + const t = this.parse(e); + return t; + } + strictImplement(e) { + const t = this.parse(e); + return t; + } + static create(e, t, s) { + return new ZodFunction({ + args: e ? e : ZodTuple.create([]).rest(ZodUnknown.create()), + returns: t || ZodUnknown.create(), + typeName: k.ZodFunction, + ...processCreateParams(s) + }); + } + } + t.ZodFunction = ZodFunction; + class ZodLazy extends ZodType { + get schema() { + return this._def.getter(); + } + _parse(e) { + const { ctx: t } = this._processInputParams(e); + const s = this._def.getter(); + return s._parse({ + data: t.data, + path: t.path, + parent: t + }); + } + } + t.ZodLazy = ZodLazy; + ZodLazy.create = (e, t)=>new ZodLazy({ + getter: e, + typeName: k.ZodLazy, + ...processCreateParams(t) + }); + class ZodLiteral extends ZodType { + _parse(e) { + if (e.data !== this._def.value) { + const t = this._getOrReturnCtx(e); + (0, i.addIssueToContext)(t, { + received: t.data, + code: r.ZodIssueCode.invalid_literal, + expected: this._def.value + }); + return i.INVALID; + } + return { + status: "valid", + value: e.data + }; + } + get value() { + return this._def.value; + } + } + t.ZodLiteral = ZodLiteral; + ZodLiteral.create = (e, t)=>new ZodLiteral({ + value: e, + typeName: k.ZodLiteral, + ...processCreateParams(t) + }); + function createZodEnum(e, t) { + return new ZodEnum({ + values: e, + typeName: k.ZodEnum, + ...processCreateParams(t) + }); + } + class ZodEnum extends ZodType { + _parse(e) { + if (typeof e.data !== "string") { + const t = this._getOrReturnCtx(e); + const s = this._def.values; + (0, i.addIssueToContext)(t, { + expected: o.util.joinValues(s), + received: t.parsedType, + code: r.ZodIssueCode.invalid_type + }); + return i.INVALID; + } + if (!this._cache) { + this._cache = new Set(this._def.values); + } + if (!this._cache.has(e.data)) { + const t = this._getOrReturnCtx(e); + const s = this._def.values; + (0, i.addIssueToContext)(t, { + received: t.data, + code: r.ZodIssueCode.invalid_enum_value, + options: s + }); + return i.INVALID; + } + return (0, i.OK)(e.data); + } + get options() { + return this._def.values; + } + get enum() { + const e = {}; + for (const t of this._def.values){ + e[t] = t; + } + return e; + } + get Values() { + const e = {}; + for (const t of this._def.values){ + e[t] = t; + } + return e; + } + get Enum() { + const e = {}; + for (const t of this._def.values){ + e[t] = t; + } + return e; + } + extract(e, t = this._def) { + return ZodEnum.create(e, { + ...this._def, + ...t + }); + } + exclude(e, t = this._def) { + return ZodEnum.create(this.options.filter((t)=>!e.includes(t)), { + ...this._def, + ...t + }); + } + } + t.ZodEnum = ZodEnum; + ZodEnum.create = createZodEnum; + class ZodNativeEnum extends ZodType { + _parse(e) { + const t = o.util.getValidEnumValues(this._def.values); + const s = this._getOrReturnCtx(e); + if (s.parsedType !== o.ZodParsedType.string && s.parsedType !== o.ZodParsedType.number) { + const e = o.util.objectValues(t); + (0, i.addIssueToContext)(s, { + expected: o.util.joinValues(e), + received: s.parsedType, + code: r.ZodIssueCode.invalid_type + }); + return i.INVALID; + } + if (!this._cache) { + this._cache = new Set(o.util.getValidEnumValues(this._def.values)); + } + if (!this._cache.has(e.data)) { + const e = o.util.objectValues(t); + (0, i.addIssueToContext)(s, { + received: s.data, + code: r.ZodIssueCode.invalid_enum_value, + options: e + }); + return i.INVALID; + } + return (0, i.OK)(e.data); + } + get enum() { + return this._def.values; + } + } + t.ZodNativeEnum = ZodNativeEnum; + ZodNativeEnum.create = (e, t)=>new ZodNativeEnum({ + values: e, + typeName: k.ZodNativeEnum, + ...processCreateParams(t) + }); + class ZodPromise extends ZodType { + unwrap() { + return this._def.type; + } + _parse(e) { + const { ctx: t } = this._processInputParams(e); + if (t.parsedType !== o.ZodParsedType.promise && t.common.async === false) { + (0, i.addIssueToContext)(t, { + code: r.ZodIssueCode.invalid_type, + expected: o.ZodParsedType.promise, + received: t.parsedType + }); + return i.INVALID; + } + const s = t.parsedType === o.ZodParsedType.promise ? t.data : Promise.resolve(t.data); + return (0, i.OK)(s.then((e)=>this._def.type.parseAsync(e, { + path: t.path, + errorMap: t.common.contextualErrorMap + }))); + } + } + t.ZodPromise = ZodPromise; + ZodPromise.create = (e, t)=>new ZodPromise({ + type: e, + typeName: k.ZodPromise, + ...processCreateParams(t) + }); + class ZodEffects extends ZodType { + innerType() { + return this._def.schema; + } + sourceType() { + return this._def.schema._def.typeName === k.ZodEffects ? this._def.schema.sourceType() : this._def.schema; + } + _parse(e) { + const { status: t, ctx: s } = this._processInputParams(e); + const r = this._def.effect || null; + const a = { + addIssue: (e)=>{ + (0, i.addIssueToContext)(s, e); + if (e.fatal) { + t.abort(); + } else { + t.dirty(); + } + }, + get path () { + return s.path; + } + }; + a.addIssue = a.addIssue.bind(a); + if (r.type === "preprocess") { + const e = r.transform(s.data, a); + if (s.common.async) { + return Promise.resolve(e).then(async (e)=>{ + if (t.value === "aborted") return i.INVALID; + const r = await this._def.schema._parseAsync({ + data: e, + path: s.path, + parent: s + }); + if (r.status === "aborted") return i.INVALID; + if (r.status === "dirty") return (0, i.DIRTY)(r.value); + if (t.value === "dirty") return (0, i.DIRTY)(r.value); + return r; + }); + } else { + if (t.value === "aborted") return i.INVALID; + const r = this._def.schema._parseSync({ + data: e, + path: s.path, + parent: s + }); + if (r.status === "aborted") return i.INVALID; + if (r.status === "dirty") return (0, i.DIRTY)(r.value); + if (t.value === "dirty") return (0, i.DIRTY)(r.value); + return r; + } + } + if (r.type === "refinement") { + const executeRefinement = (e)=>{ + const t = r.refinement(e, a); + if (s.common.async) { + return Promise.resolve(t); + } + if (t instanceof Promise) { + throw new Error("Async refinement encountered during synchronous parse operation. Use .parseAsync instead."); + } + return e; + }; + if (s.common.async === false) { + const e = this._def.schema._parseSync({ + data: s.data, + path: s.path, + parent: s + }); + if (e.status === "aborted") return i.INVALID; + if (e.status === "dirty") t.dirty(); + executeRefinement(e.value); + return { + status: t.value, + value: e.value + }; + } else { + return this._def.schema._parseAsync({ + data: s.data, + path: s.path, + parent: s + }).then((e)=>{ + if (e.status === "aborted") return i.INVALID; + if (e.status === "dirty") t.dirty(); + return executeRefinement(e.value).then(()=>({ + status: t.value, + value: e.value + })); + }); + } + } + if (r.type === "transform") { + if (s.common.async === false) { + const e = this._def.schema._parseSync({ + data: s.data, + path: s.path, + parent: s + }); + if (!(0, i.isValid)(e)) return i.INVALID; + const n = r.transform(e.value, a); + if (n instanceof Promise) { + throw new Error(`Asynchronous transform encountered during synchronous parse operation. Use .parseAsync instead.`); + } + return { + status: t.value, + value: n + }; + } else { + return this._def.schema._parseAsync({ + data: s.data, + path: s.path, + parent: s + }).then((e)=>{ + if (!(0, i.isValid)(e)) return i.INVALID; + return Promise.resolve(r.transform(e.value, a)).then((e)=>({ + status: t.value, + value: e + })); + }); + } + } + o.util.assertNever(r); + } + } + t.ZodEffects = ZodEffects; + t.ZodTransformer = ZodEffects; + ZodEffects.create = (e, t, s)=>new ZodEffects({ + schema: e, + typeName: k.ZodEffects, + effect: t, + ...processCreateParams(s) + }); + ZodEffects.createWithPreprocess = (e, t, s)=>new ZodEffects({ + schema: t, + effect: { + type: "preprocess", + transform: e + }, + typeName: k.ZodEffects, + ...processCreateParams(s) + }); + class ZodOptional extends ZodType { + _parse(e) { + const t = this._getType(e); + if (t === o.ZodParsedType.undefined) { + return (0, i.OK)(undefined); + } + return this._def.innerType._parse(e); + } + unwrap() { + return this._def.innerType; + } + } + t.ZodOptional = ZodOptional; + ZodOptional.create = (e, t)=>new ZodOptional({ + innerType: e, + typeName: k.ZodOptional, + ...processCreateParams(t) + }); + class ZodNullable extends ZodType { + _parse(e) { + const t = this._getType(e); + if (t === o.ZodParsedType.null) { + return (0, i.OK)(null); + } + return this._def.innerType._parse(e); + } + unwrap() { + return this._def.innerType; + } + } + t.ZodNullable = ZodNullable; + ZodNullable.create = (e, t)=>new ZodNullable({ + innerType: e, + typeName: k.ZodNullable, + ...processCreateParams(t) + }); + class ZodDefault extends ZodType { + _parse(e) { + const { ctx: t } = this._processInputParams(e); + let s = t.data; + if (t.parsedType === o.ZodParsedType.undefined) { + s = this._def.defaultValue(); + } + return this._def.innerType._parse({ + data: s, + path: t.path, + parent: t + }); + } + removeDefault() { + return this._def.innerType; + } + } + t.ZodDefault = ZodDefault; + ZodDefault.create = (e, t)=>new ZodDefault({ + innerType: e, + typeName: k.ZodDefault, + defaultValue: typeof t.default === "function" ? t.default : ()=>t.default, + ...processCreateParams(t) + }); + class ZodCatch extends ZodType { + _parse(e) { + const { ctx: t } = this._processInputParams(e); + const s = { + ...t, + common: { + ...t.common, + issues: [] + } + }; + const a = this._def.innerType._parse({ + data: s.data, + path: s.path, + parent: { + ...s + } + }); + if ((0, i.isAsync)(a)) { + return a.then((e)=>({ + status: "valid", + value: e.status === "valid" ? e.value : this._def.catchValue({ + get error () { + return new r.ZodError(s.common.issues); + }, + input: s.data + }) + })); + } else { + return { + status: "valid", + value: a.status === "valid" ? a.value : this._def.catchValue({ + get error () { + return new r.ZodError(s.common.issues); + }, + input: s.data + }) + }; + } + } + removeCatch() { + return this._def.innerType; + } + } + t.ZodCatch = ZodCatch; + ZodCatch.create = (e, t)=>new ZodCatch({ + innerType: e, + typeName: k.ZodCatch, + catchValue: typeof t.catch === "function" ? t.catch : ()=>t.catch, + ...processCreateParams(t) + }); + class ZodNaN extends ZodType { + _parse(e) { + const t = this._getType(e); + if (t !== o.ZodParsedType.nan) { + const t = this._getOrReturnCtx(e); + (0, i.addIssueToContext)(t, { + code: r.ZodIssueCode.invalid_type, + expected: o.ZodParsedType.nan, + received: t.parsedType + }); + return i.INVALID; + } + return { + status: "valid", + value: e.data + }; + } + } + t.ZodNaN = ZodNaN; + ZodNaN.create = (e)=>new ZodNaN({ + typeName: k.ZodNaN, + ...processCreateParams(e) + }); + t.BRAND = Symbol("zod_brand"); + class ZodBranded extends ZodType { + _parse(e) { + const { ctx: t } = this._processInputParams(e); + const s = t.data; + return this._def.type._parse({ + data: s, + path: t.path, + parent: t + }); + } + unwrap() { + return this._def.type; + } + } + t.ZodBranded = ZodBranded; + class ZodPipeline extends ZodType { + _parse(e) { + const { status: t, ctx: s } = this._processInputParams(e); + if (s.common.async) { + const handleAsync = async ()=>{ + const e = await this._def.in._parseAsync({ + data: s.data, + path: s.path, + parent: s + }); + if (e.status === "aborted") return i.INVALID; + if (e.status === "dirty") { + t.dirty(); + return (0, i.DIRTY)(e.value); + } else { + return this._def.out._parseAsync({ + data: e.value, + path: s.path, + parent: s + }); + } + }; + return handleAsync(); + } else { + const e = this._def.in._parseSync({ + data: s.data, + path: s.path, + parent: s + }); + if (e.status === "aborted") return i.INVALID; + if (e.status === "dirty") { + t.dirty(); + return { + status: "dirty", + value: e.value + }; + } else { + return this._def.out._parseSync({ + data: e.value, + path: s.path, + parent: s + }); + } + } + } + static create(e, t) { + return new ZodPipeline({ + in: e, + out: t, + typeName: k.ZodPipeline + }); + } + } + t.ZodPipeline = ZodPipeline; + class ZodReadonly extends ZodType { + _parse(e) { + const t = this._def.innerType._parse(e); + const freeze = (e)=>{ + if ((0, i.isValid)(e)) { + e.value = Object.freeze(e.value); + } + return e; + }; + return (0, i.isAsync)(t) ? t.then((e)=>freeze(e)) : freeze(t); + } + unwrap() { + return this._def.innerType; + } + } + t.ZodReadonly = ZodReadonly; + ZodReadonly.create = (e, t)=>new ZodReadonly({ + innerType: e, + typeName: k.ZodReadonly, + ...processCreateParams(t) + }); + function cleanParams(e, t) { + const s = typeof e === "function" ? e(t) : typeof e === "string" ? { + message: e + } : e; + const r = typeof s === "string" ? { + message: s + } : s; + return r; + } + function custom(e, t = {}, s) { + if (e) return ZodAny.create().superRefine((r, a)=>{ + const n = e(r); + if (n instanceof Promise) { + return n.then((e)=>{ + if (!e) { + const e = cleanParams(t, r); + const n = e.fatal ?? s ?? true; + a.addIssue({ + code: "custom", + ...e, + fatal: n + }); + } + }); + } + if (!n) { + const e = cleanParams(t, r); + const n = e.fatal ?? s ?? true; + a.addIssue({ + code: "custom", + ...e, + fatal: n + }); + } + return; + }); + return ZodAny.create(); + } + t.late = { + object: ZodObject.lazycreate + }; + var k; + (function(e) { + e["ZodString"] = "ZodString"; + e["ZodNumber"] = "ZodNumber"; + e["ZodNaN"] = "ZodNaN"; + e["ZodBigInt"] = "ZodBigInt"; + e["ZodBoolean"] = "ZodBoolean"; + e["ZodDate"] = "ZodDate"; + e["ZodSymbol"] = "ZodSymbol"; + e["ZodUndefined"] = "ZodUndefined"; + e["ZodNull"] = "ZodNull"; + e["ZodAny"] = "ZodAny"; + e["ZodUnknown"] = "ZodUnknown"; + e["ZodNever"] = "ZodNever"; + e["ZodVoid"] = "ZodVoid"; + e["ZodArray"] = "ZodArray"; + e["ZodObject"] = "ZodObject"; + e["ZodUnion"] = "ZodUnion"; + e["ZodDiscriminatedUnion"] = "ZodDiscriminatedUnion"; + e["ZodIntersection"] = "ZodIntersection"; + e["ZodTuple"] = "ZodTuple"; + e["ZodRecord"] = "ZodRecord"; + e["ZodMap"] = "ZodMap"; + e["ZodSet"] = "ZodSet"; + e["ZodFunction"] = "ZodFunction"; + e["ZodLazy"] = "ZodLazy"; + e["ZodLiteral"] = "ZodLiteral"; + e["ZodEnum"] = "ZodEnum"; + e["ZodEffects"] = "ZodEffects"; + e["ZodNativeEnum"] = "ZodNativeEnum"; + e["ZodOptional"] = "ZodOptional"; + e["ZodNullable"] = "ZodNullable"; + e["ZodDefault"] = "ZodDefault"; + e["ZodCatch"] = "ZodCatch"; + e["ZodPromise"] = "ZodPromise"; + e["ZodBranded"] = "ZodBranded"; + e["ZodPipeline"] = "ZodPipeline"; + e["ZodReadonly"] = "ZodReadonly"; + })(k || (t.ZodFirstPartyTypeKind = k = {})); + class Class { + constructor(...e){} + } + const instanceOfType = (e, t = { + message: `Input not instance of ${e.name}` + })=>custom((t)=>t instanceof e, t); + t["instanceof"] = instanceOfType; + const P = ZodString.create; + t.string = P; + const w = ZodNumber.create; + t.number = w; + const N = ZodNaN.create; + t.nan = N; + const O = ZodBigInt.create; + t.bigint = O; + const A = ZodBoolean.create; + t.boolean = A; + const S = ZodDate.create; + t.date = S; + const j = ZodSymbol.create; + t.symbol = j; + const E = ZodUndefined.create; + t.undefined = E; + const D = ZodNull.create; + t["null"] = D; + const L = ZodAny.create; + t.any = L; + const U = ZodUnknown.create; + t.unknown = U; + const R = ZodNever.create; + t.never = R; + const V = ZodVoid.create; + t["void"] = V; + const M = ZodArray.create; + t.array = M; + const $ = ZodObject.create; + t.object = $; + const z = ZodObject.strictCreate; + t.strictObject = z; + const F = ZodUnion.create; + t.union = F; + const B = ZodDiscriminatedUnion.create; + t.discriminatedUnion = B; + const K = ZodIntersection.create; + t.intersection = K; + const q = ZodTuple.create; + t.tuple = q; + const W = ZodRecord.create; + t.record = W; + const Y = ZodMap.create; + t.map = Y; + const J = ZodSet.create; + t.set = J; + const H = ZodFunction.create; + t["function"] = H; + const G = ZodLazy.create; + t.lazy = G; + const X = ZodLiteral.create; + t.literal = X; + const Q = ZodEnum.create; + t["enum"] = Q; + const ee = ZodNativeEnum.create; + t.nativeEnum = ee; + const te = ZodPromise.create; + t.promise = te; + const se = ZodEffects.create; + t.effect = se; + t.transformer = se; + const re = ZodOptional.create; + t.optional = re; + const ae = ZodNullable.create; + t.nullable = ae; + const ne = ZodEffects.createWithPreprocess; + t.preprocess = ne; + const ie = ZodPipeline.create; + t.pipeline = ie; + const ostring = ()=>P().optional(); + t.ostring = ostring; + const onumber = ()=>w().optional(); + t.onumber = onumber; + const oboolean = ()=>A().optional(); + t.oboolean = oboolean; + t.coerce = { + string: (e)=>ZodString.create({ + ...e, + coerce: true + }), + number: (e)=>ZodNumber.create({ + ...e, + coerce: true + }), + boolean: (e)=>ZodBoolean.create({ + ...e, + coerce: true + }), + bigint: (e)=>ZodBigInt.create({ + ...e, + coerce: true + }), + date: (e)=>ZodDate.create({ + ...e, + coerce: true + }) + }; + t.NEVER = i.INVALID; + } + }; + var t = {}; + function __nccwpck_require__(s) { + var r = t[s]; + if (r !== undefined) { + return r.exports; + } + var a = t[s] = { + exports: {} + }; + var n = true; + try { + e[s].call(a.exports, a, a.exports, __nccwpck_require__); + n = false; + } finally{ + if (n) delete t[s]; + } + return a.exports; + } + if (typeof __nccwpck_require__ !== "undefined") __nccwpck_require__.ab = ("TURBOPACK compile-time value", "/ROOT/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/compiled/zod") + "/"; + var s = __nccwpck_require__(629); + module.exports = s; +})(); +}), +"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/compiled/zod-validation-error/index.js [app-rsc] (ecmascript)", ((__turbopack_context__, module, exports) => { + +(()=>{ + "use strict"; + var r = { + 452: (r, e, o)=>{ + var t = Object.create; + var s = Object.defineProperty; + var n = Object.getOwnPropertyDescriptor; + var i = Object.getOwnPropertyNames; + var a = Object.getPrototypeOf; + var u = Object.prototype.hasOwnProperty; + var __export = (r, e)=>{ + for(var o in e)s(r, o, { + get: e[o], + enumerable: true + }); + }; + var __copyProps = (r, e, o, t)=>{ + if (e && typeof e === "object" || typeof e === "function") { + for (let a of i(e))if (!u.call(r, a) && a !== o) s(r, a, { + get: ()=>e[a], + enumerable: !(t = n(e, a)) || t.enumerable + }); + } + return r; + }; + var __toESM = (r, e, o)=>(o = r != null ? t(a(r)) : {}, __copyProps(e || !r || !r.__esModule ? s(o, "default", { + value: r, + enumerable: true + }) : o, r)); + var __toCommonJS = (r)=>__copyProps(s({}, "__esModule", { + value: true + }), r); + var d = {}; + __export(d, { + ValidationError: ()=>c, + createMessageBuilder: ()=>createMessageBuilder, + errorMap: ()=>errorMap, + fromError: ()=>fromError, + fromZodError: ()=>fromZodError, + fromZodIssue: ()=>fromZodIssue, + isValidationError: ()=>isValidationError, + isValidationErrorLike: ()=>isValidationErrorLike, + isZodErrorLike: ()=>isZodErrorLike, + toValidationError: ()=>toValidationError + }); + r.exports = __toCommonJS(d); + function isZodErrorLike(r) { + return r instanceof Error && r.name === "ZodError" && "issues" in r && Array.isArray(r.issues); + } + var c = class extends Error { + name; + details; + constructor(r, e){ + super(r, e); + this.name = "ZodValidationError"; + this.details = getIssuesFromErrorOptions(e); + } + toString() { + return this.message; + } + }; + function getIssuesFromErrorOptions(r) { + if (r) { + const e = r.cause; + if (isZodErrorLike(e)) { + return e.issues; + } + } + return []; + } + function isValidationError(r) { + return r instanceof c; + } + function isValidationErrorLike(r) { + return r instanceof Error && r.name === "ZodValidationError"; + } + var f = __toESM(o(788)); + var p = __toESM(o(788)); + function isNonEmptyArray(r) { + return r.length !== 0; + } + var l = /[$_\p{ID_Start}][$\u200c\u200d\p{ID_Continue}]*/u; + function joinPath(r) { + if (r.length === 1) { + return r[0].toString(); + } + return r.reduce((r, e)=>{ + if (typeof e === "number") { + return r + "[" + e.toString() + "]"; + } + if (e.includes('"')) { + return r + '["' + escapeQuotes(e) + '"]'; + } + if (!l.test(e)) { + return r + '["' + e + '"]'; + } + const o = r.length === 0 ? "" : "."; + return r + o + e; + }, ""); + } + function escapeQuotes(r) { + return r.replace(/"/g, '\\"'); + } + var m = "; "; + var g = 99; + var E = "Validation error"; + var _ = ": "; + var v = ", or "; + function createMessageBuilder(r = {}) { + const { issueSeparator: e = m, unionSeparator: o = v, prefixSeparator: t = _, prefix: s = E, includePath: n = true, maxIssuesInMessage: i = g } = r; + return (r)=>{ + const a = r.slice(0, i).map((r)=>getMessageFromZodIssue({ + issue: r, + issueSeparator: e, + unionSeparator: o, + includePath: n + })).join(e); + return prefixMessage(a, s, t); + }; + } + function getMessageFromZodIssue(r) { + const { issue: e, issueSeparator: o, unionSeparator: t, includePath: s } = r; + if (e.code === p.ZodIssueCode.invalid_union) { + return e.unionErrors.reduce((r, e)=>{ + const n = e.issues.map((r)=>getMessageFromZodIssue({ + issue: r, + issueSeparator: o, + unionSeparator: t, + includePath: s + })).join(o); + if (!r.includes(n)) { + r.push(n); + } + return r; + }, []).join(t); + } + if (e.code === p.ZodIssueCode.invalid_arguments) { + return [ + e.message, + ...e.argumentsError.issues.map((r)=>getMessageFromZodIssue({ + issue: r, + issueSeparator: o, + unionSeparator: t, + includePath: s + })) + ].join(o); + } + if (e.code === p.ZodIssueCode.invalid_return_type) { + return [ + e.message, + ...e.returnTypeError.issues.map((r)=>getMessageFromZodIssue({ + issue: r, + issueSeparator: o, + unionSeparator: t, + includePath: s + })) + ].join(o); + } + if (s && isNonEmptyArray(e.path)) { + if (e.path.length === 1) { + const r = e.path[0]; + if (typeof r === "number") { + return `${e.message} at index ${r}`; + } + } + return `${e.message} at "${joinPath(e.path)}"`; + } + return e.message; + } + function prefixMessage(r, e, o) { + if (e !== null) { + if (r.length > 0) { + return [ + e, + r + ].join(o); + } + return e; + } + if (r.length > 0) { + return r; + } + return E; + } + function fromZodIssue(r, e = {}) { + const o = createMessageBuilderFromOptions(e); + const t = o([ + r + ]); + return new c(t, { + cause: new f.ZodError([ + r + ]) + }); + } + function createMessageBuilderFromOptions(r) { + if ("messageBuilder" in r) { + return r.messageBuilder; + } + return createMessageBuilder(r); + } + var errorMap = (r, e)=>{ + const o = fromZodIssue({ + ...r, + message: r.message ?? e.defaultError + }); + return { + message: o.message + }; + }; + function fromZodError(r, e = {}) { + if (!isZodErrorLike(r)) { + throw new TypeError(`Invalid zodError param; expected instance of ZodError. Did you mean to use the "${fromError.name}" method instead?`); + } + return fromZodErrorWithoutRuntimeCheck(r, e); + } + function fromZodErrorWithoutRuntimeCheck(r, e = {}) { + const o = r.errors; + let t; + if (isNonEmptyArray(o)) { + const r = createMessageBuilderFromOptions2(e); + t = r(o); + } else { + t = r.message; + } + return new c(t, { + cause: r + }); + } + function createMessageBuilderFromOptions2(r) { + if ("messageBuilder" in r) { + return r.messageBuilder; + } + return createMessageBuilder(r); + } + var toValidationError = (r = {})=>(e)=>{ + if (isZodErrorLike(e)) { + return fromZodErrorWithoutRuntimeCheck(e, r); + } + if (e instanceof Error) { + return new c(e.message, { + cause: e + }); + } + return new c("Unknown error"); + }; + function fromError(r, e = {}) { + return toValidationError(e)(r); + } + 0 && 0; + }, + 788: (r)=>{ + r.exports = __turbopack_context__.r("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/compiled/zod/index.cjs [app-rsc] (ecmascript)"); + } + }; + var e = {}; + function __nccwpck_require__(o) { + var t = e[o]; + if (t !== undefined) { + return t.exports; + } + var s = e[o] = { + exports: {} + }; + var n = true; + try { + r[o](s, s.exports, __nccwpck_require__); + n = false; + } finally{ + if (n) delete e[o]; + } + return s.exports; + } + if (typeof __nccwpck_require__ !== "undefined") __nccwpck_require__.ab = ("TURBOPACK compile-time value", "/ROOT/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/compiled/zod-validation-error") + "/"; + var o = __nccwpck_require__(452); + module.exports = o; +})(); +}), +"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/shared/lib/zod.js [app-rsc] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "formatZodError", + ()=>formatZodError, + "normalizeZodErrors", + ()=>normalizeZodErrors, + "reportZodError", + ()=>reportZodError +]); +var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$compiled$2f$zod$2f$index$2e$cjs__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/compiled/zod/index.cjs [app-rsc] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$compiled$2f$zod$2d$validation$2d$error$2f$index$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/compiled/zod-validation-error/index.js [app-rsc] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$build$2f$output$2f$log$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/build/output/log.js [app-rsc] (ecmascript)"); +; +; +; +function processZodErrorMessage(issue) { + let message = issue.message; + let path; + if (issue.path.length > 0) { + if (issue.path.length === 1) { + const identifier = issue.path[0]; + if (typeof identifier === 'number') { + // The first identifier inside path is a number + path = `index ${identifier}`; + } else { + path = `"${identifier}"`; + } + } else { + // joined path to be shown in the error message + path = `"${issue.path.reduce((acc, cur)=>{ + if (typeof cur === 'number') { + // array index + return `${acc}[${cur}]`; + } + if (cur.includes('"')) { + // escape quotes + return `${acc}["${cur.replaceAll('"', '\\"')}"]`; + } + // dot notation + const separator = acc.length === 0 ? '' : '.'; + return acc + separator + cur; + }, '')}"`; + } + } else { + path = ''; + } + if (issue.code === 'invalid_type' && issue.received === __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$compiled$2f$zod$2f$index$2e$cjs__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["ZodParsedType"].undefined) { + // Missing key in object. + return `${path} is missing, expected ${issue.expected}`; + } + if (issue.code === 'invalid_enum_value') { + // Remove "Invalid enum value" prefix from zod default error message + return `Expected ${__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$compiled$2f$zod$2f$index$2e$cjs__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["util"].joinValues(issue.options)}, received '${issue.received}' at ${path}`; + } + return message + (path ? ` at ${path}` : ''); +} +function normalizeZodErrors(error) { + return error.issues.flatMap((issue)=>{ + const issues = [ + { + issue, + message: processZodErrorMessage(issue) + } + ]; + if ('unionErrors' in issue) { + for (const unionError of issue.unionErrors){ + issues.push(...normalizeZodErrors(unionError)); + } + } + return issues; + }); +} +function formatZodError(prefix, error) { + return Object.defineProperty(new Error((0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$compiled$2f$zod$2d$validation$2d$error$2f$index$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["fromZodError"])(error, { + prefix: prefix + }).toString()), "__NEXT_ERROR_CODE", { + value: "E394", + enumerable: false, + configurable: true + }); +} +function reportZodError(prefix, error) { + __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$build$2f$output$2f$log$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["error"](formatZodError(prefix, error).message); +} //# sourceMappingURL=zod.js.map +}), +"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/build/segment-config/app/app-segment-config.js [app-rsc] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "AppSegmentConfigSchemaKeys", + ()=>AppSegmentConfigSchemaKeys, + "parseAppSegmentConfig", + ()=>parseAppSegmentConfig +]); +var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$compiled$2f$zod$2f$index$2e$cjs__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/compiled/zod/index.cjs [app-rsc] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$zod$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/shared/lib/zod.js [app-rsc] (ecmascript)"); +; +; +const CookieSchema = __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$compiled$2f$zod$2f$index$2e$cjs__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["z"].object({ + name: __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$compiled$2f$zod$2f$index$2e$cjs__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["z"].string(), + value: __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$compiled$2f$zod$2f$index$2e$cjs__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["z"].string(), + httpOnly: __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$compiled$2f$zod$2f$index$2e$cjs__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["z"].boolean().optional(), + path: __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$compiled$2f$zod$2f$index$2e$cjs__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["z"].string().optional() +}).strict(); +const RuntimeSampleSchema = __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$compiled$2f$zod$2f$index$2e$cjs__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["z"].object({ + cookies: __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$compiled$2f$zod$2f$index$2e$cjs__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["z"].array(CookieSchema).optional(), + headers: __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$compiled$2f$zod$2f$index$2e$cjs__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["z"].array(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$compiled$2f$zod$2f$index$2e$cjs__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["z"].tuple([ + __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$compiled$2f$zod$2f$index$2e$cjs__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["z"].string(), + __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$compiled$2f$zod$2f$index$2e$cjs__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["z"].string() + ])).optional(), + params: __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$compiled$2f$zod$2f$index$2e$cjs__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["z"].record(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$compiled$2f$zod$2f$index$2e$cjs__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["z"].union([ + __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$compiled$2f$zod$2f$index$2e$cjs__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["z"].string(), + __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$compiled$2f$zod$2f$index$2e$cjs__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["z"].array(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$compiled$2f$zod$2f$index$2e$cjs__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["z"].string()) + ])).optional(), + searchParams: __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$compiled$2f$zod$2f$index$2e$cjs__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["z"].record(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$compiled$2f$zod$2f$index$2e$cjs__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["z"].union([ + __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$compiled$2f$zod$2f$index$2e$cjs__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["z"].string(), + __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$compiled$2f$zod$2f$index$2e$cjs__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["z"].array(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$compiled$2f$zod$2f$index$2e$cjs__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["z"].string()), + __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$compiled$2f$zod$2f$index$2e$cjs__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["z"].undefined() + ])).optional() +}).strict(); +const StaticPrefetchSchema = __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$compiled$2f$zod$2f$index$2e$cjs__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["z"].object({ + mode: __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$compiled$2f$zod$2f$index$2e$cjs__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["z"].literal('static'), + from: __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$compiled$2f$zod$2f$index$2e$cjs__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["z"].array(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$compiled$2f$zod$2f$index$2e$cjs__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["z"].string()).optional(), + expectUnableToVerify: __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$compiled$2f$zod$2f$index$2e$cjs__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["z"].boolean().optional() +}).strict(); +const RuntimePrefetchSchema = __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$compiled$2f$zod$2f$index$2e$cjs__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["z"].object({ + mode: __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$compiled$2f$zod$2f$index$2e$cjs__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["z"].literal('runtime'), + samples: __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$compiled$2f$zod$2f$index$2e$cjs__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["z"].array(RuntimeSampleSchema).min(1), + from: __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$compiled$2f$zod$2f$index$2e$cjs__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["z"].array(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$compiled$2f$zod$2f$index$2e$cjs__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["z"].string()).optional(), + expectUnableToVerify: __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$compiled$2f$zod$2f$index$2e$cjs__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["z"].boolean().optional() +}).strict(); +const PrefetchSchema = __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$compiled$2f$zod$2f$index$2e$cjs__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["z"].discriminatedUnion('mode', [ + StaticPrefetchSchema, + RuntimePrefetchSchema +]); +/** + * The schema for configuration for a page. + */ const AppSegmentConfigSchema = __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$compiled$2f$zod$2f$index$2e$cjs__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["z"].object({ + /** + * The number of seconds to revalidate the page or false to disable revalidation. + */ revalidate: __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$compiled$2f$zod$2f$index$2e$cjs__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["z"].union([ + __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$compiled$2f$zod$2f$index$2e$cjs__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["z"].number().int().nonnegative(), + __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$compiled$2f$zod$2f$index$2e$cjs__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["z"].literal(false) + ]).optional(), + /** + * Whether the page supports dynamic parameters. + */ dynamicParams: __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$compiled$2f$zod$2f$index$2e$cjs__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["z"].boolean().optional(), + /** + * The dynamic behavior of the page. + */ dynamic: __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$compiled$2f$zod$2f$index$2e$cjs__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["z"].enum([ + 'auto', + 'error', + 'force-static', + 'force-dynamic' + ]).optional(), + /** + * The caching behavior of the page. + */ fetchCache: __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$compiled$2f$zod$2f$index$2e$cjs__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["z"].enum([ + 'auto', + 'default-cache', + 'only-cache', + 'force-cache', + 'force-no-store', + 'default-no-store', + 'only-no-store' + ]).optional(), + /** + * How this segment should be prefetched. + */ unstable_prefetch: PrefetchSchema.optional(), + /** + * The preferred region for the page. + */ preferredRegion: __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$compiled$2f$zod$2f$index$2e$cjs__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["z"].union([ + __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$compiled$2f$zod$2f$index$2e$cjs__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["z"].string(), + __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$compiled$2f$zod$2f$index$2e$cjs__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["z"].array(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$compiled$2f$zod$2f$index$2e$cjs__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["z"].string()) + ]).optional(), + /** + * The runtime to use for the page. + */ runtime: __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$compiled$2f$zod$2f$index$2e$cjs__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["z"].enum([ + 'edge', + 'nodejs' + ]).optional(), + /** + * The maximum duration for the page in seconds. + */ maxDuration: __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$compiled$2f$zod$2f$index$2e$cjs__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["z"].number().int().nonnegative().optional() +}); +function parseAppSegmentConfig(data, route) { + const parsed = AppSegmentConfigSchema.safeParse(data, { + errorMap: (issue, ctx)=>{ + if (issue.path.length === 1) { + switch(issue.path[0]){ + case 'revalidate': + { + return { + message: `Invalid revalidate value ${JSON.stringify(ctx.data)} on "${route}", must be a non-negative number or false` + }; + } + case 'unstable_prefetch': + { + return { + // @TODO replace this link with a link to the docs when they are written + message: `Invalid unstable_prefetch value ${JSON.stringify(ctx.data)} on "${route}", must be an object with a mode of "static" or "runtime". Read more at https://nextjs.org/docs/messages/invalid-prefetch-configuration` + }; + } + default: + } + } + return { + message: ctx.defaultError + }; + } + }); + if (!parsed.success) { + throw (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$zod$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["formatZodError"])(`Invalid segment configuration options detected for "${route}". Read more at https://nextjs.org/docs/app/api-reference/file-conventions/route-segment-config`, parsed.error); + } + return parsed.data; +} +const AppSegmentConfigSchemaKeys = AppSegmentConfigSchema.keyof().options; //# sourceMappingURL=app-segment-config.js.map +}), +"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/server/route-modules/checks.js [app-rsc] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "isAppPageRouteModule", + ()=>isAppPageRouteModule, + "isAppRouteRouteModule", + ()=>isAppRouteRouteModule, + "isPagesAPIRouteModule", + ()=>isPagesAPIRouteModule, + "isPagesRouteModule", + ()=>isPagesRouteModule +]); +var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$route$2d$kind$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/server/route-kind.js [app-rsc] (ecmascript)"); +; +function isAppRouteRouteModule(routeModule) { + return routeModule.definition.kind === __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$route$2d$kind$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["RouteKind"].APP_ROUTE; +} +function isAppPageRouteModule(routeModule) { + return routeModule.definition.kind === __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$route$2d$kind$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["RouteKind"].APP_PAGE; +} +function isPagesRouteModule(routeModule) { + return routeModule.definition.kind === __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$route$2d$kind$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["RouteKind"].PAGES; +} +function isPagesAPIRouteModule(routeModule) { + return routeModule.definition.kind === __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$route$2d$kind$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["RouteKind"].PAGES_API; +} //# sourceMappingURL=checks.js.map +}), +"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/shared/lib/page-path/ensure-leading-slash.js [app-rsc] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +/** + * For a given page path, this function ensures that there is a leading slash. + * If there is not a leading slash, one is added, otherwise it is noop. + */ __turbopack_context__.s([ + "ensureLeadingSlash", + ()=>ensureLeadingSlash +]); +function ensureLeadingSlash(path) { + return path.startsWith('/') ? path : `/${path}`; +} //# sourceMappingURL=ensure-leading-slash.js.map +}), +"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/shared/lib/router/utils/app-paths.js [app-rsc] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "normalizeAppPath", + ()=>normalizeAppPath, + "normalizeRscURL", + ()=>normalizeRscURL +]); +var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$page$2d$path$2f$ensure$2d$leading$2d$slash$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/shared/lib/page-path/ensure-leading-slash.js [app-rsc] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$segment$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/shared/lib/segment.js [app-rsc] (ecmascript)"); +; +; +function normalizeAppPath(route) { + return (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$page$2d$path$2f$ensure$2d$leading$2d$slash$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["ensureLeadingSlash"])(route.split('/').reduce((pathname, segment, index, segments)=>{ + // Empty segments are ignored. + if (!segment) { + return pathname; + } + // Groups are ignored. + if ((0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$segment$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["isGroupSegment"])(segment)) { + return pathname; + } + // Parallel segments are ignored. + if (segment[0] === '@') { + return pathname; + } + // The last segment (if it's a leaf) should be ignored. + if ((segment === 'page' || segment === 'route') && index === segments.length - 1) { + return pathname; + } + return `${pathname}/${segment}`; + }, '')); +} +function normalizeRscURL(url) { + return url.replace(/\.rsc($|\?)/, '$1'); +} //# sourceMappingURL=app-paths.js.map +}), +"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/shared/lib/router/utils/interception-routes.js [app-rsc] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "INTERCEPTION_ROUTE_MARKERS", + ()=>INTERCEPTION_ROUTE_MARKERS, + "extractInterceptionRouteInformation", + ()=>extractInterceptionRouteInformation, + "isInterceptionRouteAppPath", + ()=>isInterceptionRouteAppPath +]); +var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$app$2d$paths$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/shared/lib/router/utils/app-paths.js [app-rsc] (ecmascript)"); +; +const INTERCEPTION_ROUTE_MARKERS = [ + '(..)(..)', + '(.)', + '(..)', + '(...)' +]; +function isInterceptionRouteAppPath(path) { + // TODO-APP: add more serious validation + return path.split('/').find((segment)=>INTERCEPTION_ROUTE_MARKERS.find((m)=>segment.startsWith(m))) !== undefined; +} +function extractInterceptionRouteInformation(path) { + let interceptingRoute; + let marker; + let interceptedRoute; + for (const segment of path.split('/')){ + marker = INTERCEPTION_ROUTE_MARKERS.find((m)=>segment.startsWith(m)); + if (marker) { + ; + [interceptingRoute, interceptedRoute] = path.split(marker, 2); + break; + } + } + if (!interceptingRoute || !marker || !interceptedRoute) { + throw Object.defineProperty(new Error(`Invalid interception route: ${path}. Must be in the format //(..|...|..)(..)/`), "__NEXT_ERROR_CODE", { + value: "E269", + enumerable: false, + configurable: true + }); + } + interceptingRoute = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$app$2d$paths$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["normalizeAppPath"])(interceptingRoute) // normalize the path, e.g. /(blog)/feed -> /feed + ; + switch(marker){ + case '(.)': + // (.) indicates that we should match with sibling routes, so we just need to append the intercepted route to the intercepting route + if (interceptingRoute === '/') { + interceptedRoute = `/${interceptedRoute}`; + } else { + interceptedRoute = interceptingRoute + '/' + interceptedRoute; + } + break; + case '(..)': + // (..) indicates that we should match at one level up, so we need to remove the last segment of the intercepting route + if (interceptingRoute === '/') { + throw Object.defineProperty(new Error(`Invalid interception route: ${path}. Cannot use (..) marker at the root level, use (.) instead.`), "__NEXT_ERROR_CODE", { + value: "E207", + enumerable: false, + configurable: true + }); + } + interceptedRoute = interceptingRoute.split('/').slice(0, -1).concat(interceptedRoute).join('/'); + break; + case '(...)': + // (...) will match the route segment in the root directory, so we need to use the root directory to prepend the intercepted route + interceptedRoute = '/' + interceptedRoute; + break; + case '(..)(..)': + // (..)(..) indicates that we should match at two levels up, so we need to remove the last two segments of the intercepting route + const splitInterceptingRoute = interceptingRoute.split('/'); + if (splitInterceptingRoute.length <= 2) { + throw Object.defineProperty(new Error(`Invalid interception route: ${path}. Cannot use (..)(..) marker at the root level or one level up.`), "__NEXT_ERROR_CODE", { + value: "E486", + enumerable: false, + configurable: true + }); + } + interceptedRoute = splitInterceptingRoute.slice(0, -2).concat(interceptedRoute).join('/'); + break; + default: + throw Object.defineProperty(new Error('Invariant: unexpected marker'), "__NEXT_ERROR_CODE", { + value: "E112", + enumerable: false, + configurable: true + }); + } + return { + interceptingRoute, + interceptedRoute + }; +} //# sourceMappingURL=interception-routes.js.map +}), +"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/shared/lib/router/utils/get-segment-param.js [app-rsc] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "getParamProperties", + ()=>getParamProperties, + "getSegmentParam", + ()=>getSegmentParam, + "isCatchAll", + ()=>isCatchAll +]); +var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$interception$2d$routes$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/shared/lib/router/utils/interception-routes.js [app-rsc] (ecmascript)"); +; +function getSegmentParam(segment) { + const interceptionMarker = __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$interception$2d$routes$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["INTERCEPTION_ROUTE_MARKERS"].find((marker)=>segment.startsWith(marker)); + // if an interception marker is part of the path segment, we need to jump ahead + // to the relevant portion for param parsing + if (interceptionMarker) { + segment = segment.slice(interceptionMarker.length); + } + if (segment.startsWith('[[...') && segment.endsWith(']]')) { + return { + // TODO-APP: Optional catchall does not currently work with parallel routes, + // so for now aren't handling a potential interception marker. + type: 'optional-catchall', + param: segment.slice(5, -2) + }; + } + if (segment.startsWith('[...') && segment.endsWith(']')) { + return { + type: interceptionMarker ? `catchall-intercepted-${interceptionMarker}` : 'catchall', + param: segment.slice(4, -1) + }; + } + if (segment.startsWith('[') && segment.endsWith(']')) { + return { + type: interceptionMarker ? `dynamic-intercepted-${interceptionMarker}` : 'dynamic', + param: segment.slice(1, -1) + }; + } + return null; +} +function isCatchAll(type) { + return type === 'catchall' || type === 'catchall-intercepted-(..)(..)' || type === 'catchall-intercepted-(.)' || type === 'catchall-intercepted-(..)' || type === 'catchall-intercepted-(...)' || type === 'optional-catchall'; +} +function getParamProperties(paramType) { + let repeat = false; + let optional = false; + switch(paramType){ + case 'catchall': + case 'catchall-intercepted-(..)(..)': + case 'catchall-intercepted-(.)': + case 'catchall-intercepted-(..)': + case 'catchall-intercepted-(...)': + repeat = true; + break; + case 'optional-catchall': + repeat = true; + optional = true; + break; + case 'dynamic': + case 'dynamic-intercepted-(..)(..)': + case 'dynamic-intercepted-(.)': + case 'dynamic-intercepted-(..)': + case 'dynamic-intercepted-(...)': + break; + default: + paramType; + } + return { + repeat, + optional + }; +} //# sourceMappingURL=get-segment-param.js.map +}), +"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/build/static-paths/utils.js [app-rsc] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +/** + * Encodes a parameter value using the provided encoder. + * + * @param value - The value to encode. + * @param encoder - The encoder to use. + * @returns The encoded value. + */ __turbopack_context__.s([ + "createFallbackRouteParam", + ()=>createFallbackRouteParam, + "encodeParam", + ()=>encodeParam, + "normalizePathname", + ()=>normalizePathname +]); +function encodeParam(value, encoder) { + let replaceValue; + if (Array.isArray(value)) { + replaceValue = value.map(encoder).join('/'); + } else { + replaceValue = encoder(value); + } + return replaceValue; +} +function normalizePathname(pathname) { + return pathname.replace(/\\/g, '/').replace(/(?!^)\/$/, ''); +} +function createFallbackRouteParam(paramName, paramType, isParallelRouteParam) { + return { + paramName, + paramType, + isParallelRouteParam + }; +} //# sourceMappingURL=utils.js.map +}), +"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/build/segment-config/app/app-segments.js [app-rsc] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "collectFallbackRouteParams", + ()=>collectFallbackRouteParams, + "collectSegments", + ()=>collectSegments +]); +var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$build$2f$segment$2d$config$2f$app$2f$app$2d$segment$2d$config$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/build/segment-config/app/app-segment-config.js [app-rsc] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$invariant$2d$error$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/shared/lib/invariant-error.js [app-rsc] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$route$2d$modules$2f$checks$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/server/route-modules/checks.js [app-rsc] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$client$2d$and$2d$server$2d$references$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/lib/client-and-server-references.js [app-rsc] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$get$2d$segment$2d$param$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/shared/lib/router/utils/get-segment-param.js [app-rsc] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$app$2d$dir$2d$module$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/server/lib/app-dir-module.js [app-rsc] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$segment$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/shared/lib/segment.js [app-rsc] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$build$2f$static$2d$paths$2f$utils$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/build/static-paths/utils.js [app-rsc] (ecmascript)"); +; +; +; +; +; +; +; +; +/** + * Parses the app config and attaches it to the segment. + */ function attach(segment, userland, route) { + // If the userland is not an object, then we can't do anything with it. + if (typeof userland !== 'object' || userland === null) { + return; + } + // Try to parse the application configuration. + const config = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$build$2f$segment$2d$config$2f$app$2f$app$2d$segment$2d$config$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["parseAppSegmentConfig"])(userland, route); + // If there was any keys on the config, then attach it to the segment. + if (Object.keys(config).length > 0) { + segment.config = config; + } + if ('generateStaticParams' in userland && typeof userland.generateStaticParams === 'function') { + var _segment_config; + segment.generateStaticParams = userland.generateStaticParams; + // Validate that `generateStaticParams` makes sense in this context. + if (((_segment_config = segment.config) == null ? void 0 : _segment_config.runtime) === 'edge') { + throw Object.defineProperty(new Error('Edge runtime is not supported with `generateStaticParams`.'), "__NEXT_ERROR_CODE", { + value: "E502", + enumerable: false, + configurable: true + }); + } + } +} +/** + * Walks the loader tree and collects the generate parameters for each segment. + * + * @param routeModule the app page route module + * @returns the segments for the app page route module + */ async function collectAppPageSegments(routeModule) { + // We keep track of unique segments, since with parallel routes, it's possible + // to see the same segment multiple times. + const uniqueSegments = new Map(); + const queue = [ + [ + routeModule.userland.loaderTree, + [], + false + ] + ]; + while(queue.length > 0){ + const [loaderTree, currentSegments, isParallelRouteSegment] = queue.shift(); + const [name, parallelRoutes] = loaderTree; + // Process current node + const { mod: userland, filePath } = await (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$app$2d$dir$2d$module$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["getLayoutOrPageModule"])(loaderTree); + const isClientComponent = userland && (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$client$2d$and$2d$server$2d$references$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["isClientReference"])(userland); + const { param: paramName, type: paramType } = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$get$2d$segment$2d$param$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["getSegmentParam"])(name) ?? {}; + const segment = { + name, + paramName, + paramType, + filePath, + config: undefined, + isDynamicSegment: !!paramName, + generateStaticParams: undefined, + isParallelRouteSegment + }; + // Only server components can have app segment configurations + if (!isClientComponent) { + attach(segment, userland, routeModule.definition.pathname); + } + // Create a unique key for the segment + const segmentKey = getSegmentKey(segment); + if (!uniqueSegments.has(segmentKey)) { + uniqueSegments.set(segmentKey, segment); + } + const updatedSegments = [ + ...currentSegments, + segment + ]; + // If this is a page segment, we've reached a leaf node + if (name === __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$segment$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["PAGE_SEGMENT_KEY"]) { + // Add all segments in the current path, preferring non-parallel segments + updatedSegments.forEach((seg)=>{ + const key = getSegmentKey(seg); + if (!uniqueSegments.has(key)) { + uniqueSegments.set(key, seg); + } + }); + } + // Add all parallel routes to the queue + for(const parallelRouteKey in parallelRoutes){ + const parallelRoute = parallelRoutes[parallelRouteKey]; + queue.push([ + parallelRoute, + updatedSegments, + // A parallel route segment is one that descends from a segment that is + // not children or descends from a parallel route segment. + isParallelRouteSegment || parallelRouteKey !== 'children' + ]); + } + } + return Array.from(uniqueSegments.values()); +} +function getSegmentKey(segment) { + return `${segment.name}-${segment.filePath ?? ''}-${segment.paramName ?? ''}-${segment.isParallelRouteSegment ? 'pr' : 'np'}`; +} +/** + * Collects the segments for a given app route module. + * + * @param routeModule the app route module + * @returns the segments for the app route module + */ function collectAppRouteSegments(routeModule) { + // Get the pathname parts, slice off the first element (which is empty). + const parts = routeModule.definition.pathname.split('/').slice(1); + if (parts.length === 0) { + throw Object.defineProperty(new __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$invariant$2d$error$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["InvariantError"]('Expected at least one segment'), "__NEXT_ERROR_CODE", { + value: "E580", + enumerable: false, + configurable: true + }); + } + // Generate all the segments. + const segments = parts.map((name)=>{ + const { param: paramName, type: paramType } = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$get$2d$segment$2d$param$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["getSegmentParam"])(name) ?? {}; + return { + name, + paramName, + paramType, + filePath: undefined, + isDynamicSegment: !!paramName, + config: undefined, + generateStaticParams: undefined, + isParallelRouteSegment: undefined + }; + }); + // We know we have at least one, we verified this above. We should get the + // last segment which represents the root route module. + const segment = segments[segments.length - 1]; + segment.filePath = routeModule.definition.filename; + // Extract the segment config from the userland module. + attach(segment, routeModule.userland, routeModule.definition.pathname); + return segments; +} +function collectSegments(routeModule) { + if ((0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$route$2d$modules$2f$checks$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["isAppRouteRouteModule"])(routeModule)) { + return collectAppRouteSegments(routeModule); + } + if ((0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$route$2d$modules$2f$checks$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["isAppPageRouteModule"])(routeModule)) { + return collectAppPageSegments(routeModule); + } + throw Object.defineProperty(new __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$invariant$2d$error$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["InvariantError"]('Expected a route module to be one of app route or page'), "__NEXT_ERROR_CODE", { + value: "E568", + enumerable: false, + configurable: true + }); +} +function collectFallbackRouteParams(routeModule) { + const uniqueSegments = new Map(); + const queue = [ + [ + routeModule.userland.loaderTree, + false + ] + ]; + while(queue.length > 0){ + const [loaderTree, isParallelRouteSegment] = queue.shift(); + const [name, parallelRoutes] = loaderTree; + // Handle this segment (if it's a dynamic segment param). + const segmentParam = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$get$2d$segment$2d$param$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["getSegmentParam"])(name); + if (segmentParam) { + const key = `${name}-${segmentParam.param}-${isParallelRouteSegment ? 'pr' : 'np'}`; + if (!uniqueSegments.has(key)) { + uniqueSegments.set(key, (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$build$2f$static$2d$paths$2f$utils$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["createFallbackRouteParam"])(segmentParam.param, segmentParam.type, isParallelRouteSegment)); + } + } + // Add all of this segment's parallel routes to the queue. + for(const parallelRouteKey in parallelRoutes){ + const parallelRoute = parallelRoutes[parallelRouteKey]; + queue.push([ + parallelRoute, + // A parallel route segment is one that descends from a segment that is + // not children or descends from a parallel route segment. + isParallelRouteSegment || parallelRouteKey !== 'children' + ]); + } + } + return Array.from(uniqueSegments.values()); +} //# sourceMappingURL=app-segments.js.map +}), +"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/shared/lib/utils.js [app-rsc] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +/** + * Web vitals provided to _app.reportWebVitals by Core Web Vitals plugin developed by Google Chrome team. + * https://nextjs.org/blog/next-9-4#integrated-web-vitals-reporting + */ __turbopack_context__.s([ + "DecodeError", + ()=>DecodeError, + "MiddlewareNotFoundError", + ()=>MiddlewareNotFoundError, + "MissingStaticPage", + ()=>MissingStaticPage, + "NormalizeError", + ()=>NormalizeError, + "PageNotFoundError", + ()=>PageNotFoundError, + "SP", + ()=>SP, + "ST", + ()=>ST, + "WEB_VITALS", + ()=>WEB_VITALS, + "execOnce", + ()=>execOnce, + "getDisplayName", + ()=>getDisplayName, + "getLocationOrigin", + ()=>getLocationOrigin, + "getURL", + ()=>getURL, + "isAbsoluteUrl", + ()=>isAbsoluteUrl, + "isResSent", + ()=>isResSent, + "loadGetInitialProps", + ()=>loadGetInitialProps, + "normalizeRepeatedSlashes", + ()=>normalizeRepeatedSlashes, + "stringifyError", + ()=>stringifyError +]); +const WEB_VITALS = [ + 'CLS', + 'FCP', + 'FID', + 'INP', + 'LCP', + 'TTFB' +]; +function execOnce(fn) { + let used = false; + let result; + return (...args)=>{ + if (!used) { + used = true; + result = fn(...args); + } + return result; + }; +} +// Scheme: https://tools.ietf.org/html/rfc3986#section-3.1 +// Absolute URL: https://tools.ietf.org/html/rfc3986#section-4.3 +const ABSOLUTE_URL_REGEX = /^[a-zA-Z][a-zA-Z\d+\-.]*?:/; +const isAbsoluteUrl = (url)=>ABSOLUTE_URL_REGEX.test(url); +function getLocationOrigin() { + const { protocol, hostname, port } = window.location; + return `${protocol}//${hostname}${port ? ':' + port : ''}`; +} +function getURL() { + const { href } = window.location; + const origin = getLocationOrigin(); + return href.substring(origin.length); +} +function getDisplayName(Component) { + return typeof Component === 'string' ? Component : Component.displayName || Component.name || 'Unknown'; +} +function isResSent(res) { + return res.finished || res.headersSent; +} +function normalizeRepeatedSlashes(url) { + const urlParts = url.split('?'); + const urlNoQuery = urlParts[0]; + return urlNoQuery // first we replace any non-encoded backslashes with forward + // then normalize repeated forward slashes + .replace(/\\/g, '/').replace(/\/\/+/g, '/') + (urlParts[1] ? `?${urlParts.slice(1).join('?')}` : ''); +} +async function loadGetInitialProps(App, ctx) { + if ("TURBOPACK compile-time truthy", 1) { + if (App.prototype?.getInitialProps) { + const message = `"${getDisplayName(App)}.getInitialProps()" is defined as an instance method - visit https://nextjs.org/docs/messages/get-initial-props-as-an-instance-method for more information.`; + throw Object.defineProperty(new Error(message), "__NEXT_ERROR_CODE", { + value: "E394", + enumerable: false, + configurable: true + }); + } + } + // when called from _app `ctx` is nested in `ctx` + const res = ctx.res || ctx.ctx && ctx.ctx.res; + if (!App.getInitialProps) { + if (ctx.ctx && ctx.Component) { + // @ts-ignore pageProps default + return { + pageProps: await loadGetInitialProps(ctx.Component, ctx.ctx) + }; + } + return {}; + } + const props = await App.getInitialProps(ctx); + if (res && isResSent(res)) { + return props; + } + if (!props) { + const message = `"${getDisplayName(App)}.getInitialProps()" should resolve to an object. But found "${props}" instead.`; + throw Object.defineProperty(new Error(message), "__NEXT_ERROR_CODE", { + value: "E394", + enumerable: false, + configurable: true + }); + } + if ("TURBOPACK compile-time truthy", 1) { + if (Object.keys(props).length === 0 && !ctx.ctx) { + console.warn(`${getDisplayName(App)} returned an empty object from \`getInitialProps\`. This de-optimizes and prevents automatic static optimization. https://nextjs.org/docs/messages/empty-object-getInitialProps`); + } + } + return props; +} +const SP = typeof performance !== 'undefined'; +const ST = SP && [ + 'mark', + 'measure', + 'getEntriesByName' +].every((method)=>typeof performance[method] === 'function'); +class DecodeError extends Error { +} +class NormalizeError extends Error { +} +class PageNotFoundError extends Error { + constructor(page){ + super(); + this.code = 'ENOENT'; + this.name = 'PageNotFoundError'; + this.message = `Cannot find module for page: ${page}`; + } +} +class MissingStaticPage extends Error { + constructor(page, message){ + super(); + this.message = `Failed to load static file for page: ${page} ${message}`; + } +} +class MiddlewareNotFoundError extends Error { + constructor(){ + super(); + this.code = 'ENOENT'; + this.message = `Cannot find the middleware module`; + } +} +function stringifyError(error) { + return JSON.stringify({ + message: error.message, + stack: error.stack + }); +} //# sourceMappingURL=utils.js.map +}), +"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/compiled/path-to-regexp/index.js [app-rsc] (ecmascript)", ((__turbopack_context__, module, exports) => { + +(()=>{ + "use strict"; + if (typeof __nccwpck_require__ !== "undefined") __nccwpck_require__.ab = ("TURBOPACK compile-time value", "/ROOT/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/compiled/path-to-regexp") + "/"; + var e = {}; + (()=>{ + var n = e; + Object.defineProperty(n, "__esModule", { + value: true + }); + n.pathToRegexp = n.tokensToRegexp = n.regexpToFunction = n.match = n.tokensToFunction = n.compile = n.parse = void 0; + function lexer(e) { + var n = []; + var r = 0; + while(r < e.length){ + var t = e[r]; + if (t === "*" || t === "+" || t === "?") { + n.push({ + type: "MODIFIER", + index: r, + value: e[r++] + }); + continue; + } + if (t === "\\") { + n.push({ + type: "ESCAPED_CHAR", + index: r++, + value: e[r++] + }); + continue; + } + if (t === "{") { + n.push({ + type: "OPEN", + index: r, + value: e[r++] + }); + continue; + } + if (t === "}") { + n.push({ + type: "CLOSE", + index: r, + value: e[r++] + }); + continue; + } + if (t === ":") { + var a = ""; + var i = r + 1; + while(i < e.length){ + var o = e.charCodeAt(i); + if (o >= 48 && o <= 57 || o >= 65 && o <= 90 || o >= 97 && o <= 122 || o === 95) { + a += e[i++]; + continue; + } + break; + } + if (!a) throw new TypeError("Missing parameter name at ".concat(r)); + n.push({ + type: "NAME", + index: r, + value: a + }); + r = i; + continue; + } + if (t === "(") { + var c = 1; + var f = ""; + var i = r + 1; + if (e[i] === "?") { + throw new TypeError('Pattern cannot start with "?" at '.concat(i)); + } + while(i < e.length){ + if (e[i] === "\\") { + f += e[i++] + e[i++]; + continue; + } + if (e[i] === ")") { + c--; + if (c === 0) { + i++; + break; + } + } else if (e[i] === "(") { + c++; + if (e[i + 1] !== "?") { + throw new TypeError("Capturing groups are not allowed at ".concat(i)); + } + } + f += e[i++]; + } + if (c) throw new TypeError("Unbalanced pattern at ".concat(r)); + if (!f) throw new TypeError("Missing pattern at ".concat(r)); + n.push({ + type: "PATTERN", + index: r, + value: f + }); + r = i; + continue; + } + n.push({ + type: "CHAR", + index: r, + value: e[r++] + }); + } + n.push({ + type: "END", + index: r, + value: "" + }); + return n; + } + function parse(e, n) { + if (n === void 0) { + n = {}; + } + var r = lexer(e); + var t = n.prefixes, a = t === void 0 ? "./" : t, i = n.delimiter, o = i === void 0 ? "/#?" : i; + var c = []; + var f = 0; + var u = 0; + var p = ""; + var tryConsume = function(e) { + if (u < r.length && r[u].type === e) return r[u++].value; + }; + var mustConsume = function(e) { + var n = tryConsume(e); + if (n !== undefined) return n; + var t = r[u], a = t.type, i = t.index; + throw new TypeError("Unexpected ".concat(a, " at ").concat(i, ", expected ").concat(e)); + }; + var consumeText = function() { + var e = ""; + var n; + while(n = tryConsume("CHAR") || tryConsume("ESCAPED_CHAR")){ + e += n; + } + return e; + }; + var isSafe = function(e) { + for(var n = 0, r = o; n < r.length; n++){ + var t = r[n]; + if (e.indexOf(t) > -1) return true; + } + return false; + }; + var safePattern = function(e) { + var n = c[c.length - 1]; + var r = e || (n && typeof n === "string" ? n : ""); + if (n && !r) { + throw new TypeError('Must have text between two parameters, missing text after "'.concat(n.name, '"')); + } + if (!r || isSafe(r)) return "[^".concat(escapeString(o), "]+?"); + return "(?:(?!".concat(escapeString(r), ")[^").concat(escapeString(o), "])+?"); + }; + while(u < r.length){ + var v = tryConsume("CHAR"); + var s = tryConsume("NAME"); + var d = tryConsume("PATTERN"); + if (s || d) { + var g = v || ""; + if (a.indexOf(g) === -1) { + p += g; + g = ""; + } + if (p) { + c.push(p); + p = ""; + } + c.push({ + name: s || f++, + prefix: g, + suffix: "", + pattern: d || safePattern(g), + modifier: tryConsume("MODIFIER") || "" + }); + continue; + } + var x = v || tryConsume("ESCAPED_CHAR"); + if (x) { + p += x; + continue; + } + if (p) { + c.push(p); + p = ""; + } + var h = tryConsume("OPEN"); + if (h) { + var g = consumeText(); + var l = tryConsume("NAME") || ""; + var m = tryConsume("PATTERN") || ""; + var T = consumeText(); + mustConsume("CLOSE"); + c.push({ + name: l || (m ? f++ : ""), + pattern: l && !m ? safePattern(g) : m, + prefix: g, + suffix: T, + modifier: tryConsume("MODIFIER") || "" + }); + continue; + } + mustConsume("END"); + } + return c; + } + n.parse = parse; + function compile(e, n) { + return tokensToFunction(parse(e, n), n); + } + n.compile = compile; + function tokensToFunction(e, n) { + if (n === void 0) { + n = {}; + } + var r = flags(n); + var t = n.encode, a = t === void 0 ? function(e) { + return e; + } : t, i = n.validate, o = i === void 0 ? true : i; + var c = e.map(function(e) { + if (typeof e === "object") { + return new RegExp("^(?:".concat(e.pattern, ")$"), r); + } + }); + return function(n) { + var r = ""; + for(var t = 0; t < e.length; t++){ + var i = e[t]; + if (typeof i === "string") { + r += i; + continue; + } + var f = n ? n[i.name] : undefined; + var u = i.modifier === "?" || i.modifier === "*"; + var p = i.modifier === "*" || i.modifier === "+"; + if (Array.isArray(f)) { + if (!p) { + throw new TypeError('Expected "'.concat(i.name, '" to not repeat, but got an array')); + } + if (f.length === 0) { + if (u) continue; + throw new TypeError('Expected "'.concat(i.name, '" to not be empty')); + } + for(var v = 0; v < f.length; v++){ + var s = a(f[v], i); + if (o && !c[t].test(s)) { + throw new TypeError('Expected all "'.concat(i.name, '" to match "').concat(i.pattern, '", but got "').concat(s, '"')); + } + r += i.prefix + s + i.suffix; + } + continue; + } + if (typeof f === "string" || typeof f === "number") { + var s = a(String(f), i); + if (o && !c[t].test(s)) { + throw new TypeError('Expected "'.concat(i.name, '" to match "').concat(i.pattern, '", but got "').concat(s, '"')); + } + r += i.prefix + s + i.suffix; + continue; + } + if (u) continue; + var d = p ? "an array" : "a string"; + throw new TypeError('Expected "'.concat(i.name, '" to be ').concat(d)); + } + return r; + }; + } + n.tokensToFunction = tokensToFunction; + function match(e, n) { + var r = []; + var t = pathToRegexp(e, r, n); + return regexpToFunction(t, r, n); + } + n.match = match; + function regexpToFunction(e, n, r) { + if (r === void 0) { + r = {}; + } + var t = r.decode, a = t === void 0 ? function(e) { + return e; + } : t; + return function(r) { + var t = e.exec(r); + if (!t) return false; + var i = t[0], o = t.index; + var c = Object.create(null); + var _loop_1 = function(e) { + if (t[e] === undefined) return "continue"; + var r = n[e - 1]; + if (r.modifier === "*" || r.modifier === "+") { + c[r.name] = t[e].split(r.prefix + r.suffix).map(function(e) { + return a(e, r); + }); + } else { + c[r.name] = a(t[e], r); + } + }; + for(var f = 1; f < t.length; f++){ + _loop_1(f); + } + return { + path: i, + index: o, + params: c + }; + }; + } + n.regexpToFunction = regexpToFunction; + function escapeString(e) { + return e.replace(/([.+*?=^!:${}()[\]|/\\])/g, "\\$1"); + } + function flags(e) { + return e && e.sensitive ? "" : "i"; + } + function regexpToRegexp(e, n) { + if (!n) return e; + var r = /\((?:\?<(.*?)>)?(?!\?)/g; + var t = 0; + var a = r.exec(e.source); + while(a){ + n.push({ + name: a[1] || t++, + prefix: "", + suffix: "", + modifier: "", + pattern: "" + }); + a = r.exec(e.source); + } + return e; + } + function arrayToRegexp(e, n, r) { + var t = e.map(function(e) { + return pathToRegexp(e, n, r).source; + }); + return new RegExp("(?:".concat(t.join("|"), ")"), flags(r)); + } + function stringToRegexp(e, n, r) { + return tokensToRegexp(parse(e, r), n, r); + } + function tokensToRegexp(e, n, r) { + if (r === void 0) { + r = {}; + } + var t = r.strict, a = t === void 0 ? false : t, i = r.start, o = i === void 0 ? true : i, c = r.end, f = c === void 0 ? true : c, u = r.encode, p = u === void 0 ? function(e) { + return e; + } : u, v = r.delimiter, s = v === void 0 ? "/#?" : v, d = r.endsWith, g = d === void 0 ? "" : d; + var x = "[".concat(escapeString(g), "]|$"); + var h = "[".concat(escapeString(s), "]"); + var l = o ? "^" : ""; + for(var m = 0, T = e; m < T.length; m++){ + var E = T[m]; + if (typeof E === "string") { + l += escapeString(p(E)); + } else { + var w = escapeString(p(E.prefix)); + var y = escapeString(p(E.suffix)); + if (E.pattern) { + if (n) n.push(E); + if (w || y) { + if (E.modifier === "+" || E.modifier === "*") { + var R = E.modifier === "*" ? "?" : ""; + l += "(?:".concat(w, "((?:").concat(E.pattern, ")(?:").concat(y).concat(w, "(?:").concat(E.pattern, "))*)").concat(y, ")").concat(R); + } else { + l += "(?:".concat(w, "(").concat(E.pattern, ")").concat(y, ")").concat(E.modifier); + } + } else { + if (E.modifier === "+" || E.modifier === "*") { + throw new TypeError('Can not repeat "'.concat(E.name, '" without a prefix and suffix')); + } + l += "(".concat(E.pattern, ")").concat(E.modifier); + } + } else { + l += "(?:".concat(w).concat(y, ")").concat(E.modifier); + } + } + } + if (f) { + if (!a) l += "".concat(h, "?"); + l += !r.endsWith ? "$" : "(?=".concat(x, ")"); + } else { + var A = e[e.length - 1]; + var _ = typeof A === "string" ? h.indexOf(A[A.length - 1]) > -1 : A === undefined; + if (!a) { + l += "(?:".concat(h, "(?=").concat(x, "))?"); + } + if (!_) { + l += "(?=".concat(h, "|").concat(x, ")"); + } + } + return new RegExp(l, flags(r)); + } + n.tokensToRegexp = tokensToRegexp; + function pathToRegexp(e, n, r) { + if (e instanceof RegExp) return regexpToRegexp(e, n); + if (Array.isArray(e)) return arrayToRegexp(e, n, r); + return stringToRegexp(e, n, r); + } + n.pathToRegexp = pathToRegexp; + })(); + module.exports = e; +})(); +}), +"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/lib/route-pattern-normalizer.js [app-rsc] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +/** + * Route pattern normalization utilities for path-to-regexp compatibility. + * + * path-to-regexp 6.3.0+ introduced stricter validation that rejects certain + * patterns commonly used in Next.js interception routes. This module provides + * normalization functions to make Next.js route patterns compatible with the + * updated library while preserving all functionality. + */ /** + * Internal separator used to normalize adjacent parameter patterns. + * This unique marker is inserted between adjacent parameters and stripped out + * during parameter extraction to avoid conflicts with real URL content. + */ __turbopack_context__.s([ + "PARAM_SEPARATOR", + ()=>PARAM_SEPARATOR, + "hasAdjacentParameterIssues", + ()=>hasAdjacentParameterIssues, + "normalizeAdjacentParameters", + ()=>normalizeAdjacentParameters, + "normalizeTokensForRegexp", + ()=>normalizeTokensForRegexp, + "stripNormalizedSeparators", + ()=>stripNormalizedSeparators, + "stripParameterSeparators", + ()=>stripParameterSeparators +]); +const PARAM_SEPARATOR = '_NEXTSEP_'; +function hasAdjacentParameterIssues(route) { + if (typeof route !== 'string') return false; + // Check for interception route markers followed immediately by parameters + // Pattern: /(.):param, /(..):param, /(...):param, /(.)(.):param etc. + // These patterns cause "Must have text between two parameters" errors + if (/\/\(\.{1,3}\):[^/\s]+/.test(route)) { + return true; + } + // Check for basic adjacent parameters without separators + // Pattern: :param1:param2 (but not :param* or other URL patterns) + if (/:[a-zA-Z_][a-zA-Z0-9_]*:[a-zA-Z_][a-zA-Z0-9_]*/.test(route)) { + return true; + } + return false; +} +function normalizeAdjacentParameters(route) { + let normalized = route; + // Handle interception route patterns: (.):param -> (.)_NEXTSEP_:param + normalized = normalized.replace(/(\([^)]*\)):([^/\s]+)/g, `$1${PARAM_SEPARATOR}:$2`); + // Handle other adjacent parameter patterns: :param1:param2 -> :param1_NEXTSEP_:param2 + normalized = normalized.replace(/:([^:/\s)]+)(?=:)/g, `:$1${PARAM_SEPARATOR}`); + return normalized; +} +function normalizeTokensForRegexp(tokens) { + return tokens.map((token)=>{ + // Token union type: Token = string | TokenObject + // Literal path segments are strings, parameters/wildcards are objects + if (typeof token === 'object' && token !== null && // Not all token objects have 'modifier' property (e.g., simple text tokens) + 'modifier' in token && // Only repeating modifiers (* or +) cause the validation error + // Other modifiers like '?' (optional) are fine + (token.modifier === '*' || token.modifier === '+') && // Token objects can have different shapes depending on route pattern + 'prefix' in token && 'suffix' in token && // Both prefix and suffix must be empty strings + // This is what causes the validation error in path-to-regexp + token.prefix === '' && token.suffix === '') { + // Add minimal prefix to satisfy path-to-regexp validation + // We use '/' as it's the most common path delimiter and won't break route matching + // The prefix gets used in regex generation but doesn't affect parameter extraction + return { + ...token, + prefix: '/' + }; + } + return token; + }); +} +function stripNormalizedSeparators(pathname) { + // Remove separator after interception route markers + // Pattern: (.)_NEXTSEP_ -> (.), (..)_NEXTSEP_ -> (..), etc. + // The separator appears after the closing paren of interception markers + return pathname.replace(new RegExp(`\\)${PARAM_SEPARATOR}`, 'g'), ')'); +} +function stripParameterSeparators(params) { + const cleaned = {}; + for (const [key, value] of Object.entries(params)){ + if (typeof value === 'string') { + // Remove the separator if it appears at the start of parameter values + cleaned[key] = value.replace(new RegExp(`^${PARAM_SEPARATOR}`), ''); + } else if (Array.isArray(value)) { + // Handle array parameters (from repeated route segments) + cleaned[key] = value.map((item)=>typeof item === 'string' ? item.replace(new RegExp(`^${PARAM_SEPARATOR}`), '') : item); + } else { + cleaned[key] = value; + } + } + return cleaned; +} //# sourceMappingURL=route-pattern-normalizer.js.map +}), +"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/shared/lib/router/utils/route-match-utils.js [app-rsc] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +/** + * Client-safe utilities for route matching that don't import server-side + * utilities to avoid bundling issues with Turbopack + */ __turbopack_context__.s([ + "safeCompile", + ()=>safeCompile, + "safePathToRegexp", + ()=>safePathToRegexp, + "safeRegexpToFunction", + ()=>safeRegexpToFunction, + "safeRouteMatcher", + ()=>safeRouteMatcher +]); +var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$compiled$2f$path$2d$to$2d$regexp$2f$index$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/compiled/path-to-regexp/index.js [app-rsc] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$route$2d$pattern$2d$normalizer$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/lib/route-pattern-normalizer.js [app-rsc] (ecmascript)"); +; +; +function safePathToRegexp(route, keys, options) { + if (typeof route !== 'string') { + return (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$compiled$2f$path$2d$to$2d$regexp$2f$index$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["pathToRegexp"])(route, keys, options); + } + // Check if normalization is needed and cache the result + const needsNormalization = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$route$2d$pattern$2d$normalizer$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["hasAdjacentParameterIssues"])(route); + const routeToUse = needsNormalization ? (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$route$2d$pattern$2d$normalizer$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["normalizeAdjacentParameters"])(route) : route; + try { + return (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$compiled$2f$path$2d$to$2d$regexp$2f$index$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["pathToRegexp"])(routeToUse, keys, options); + } catch (error) { + // Only try normalization if we haven't already normalized + if (!needsNormalization) { + try { + const normalizedRoute = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$route$2d$pattern$2d$normalizer$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["normalizeAdjacentParameters"])(route); + return (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$compiled$2f$path$2d$to$2d$regexp$2f$index$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["pathToRegexp"])(normalizedRoute, keys, options); + } catch (retryError) { + // If that doesn't work, fall back to original error + throw error; + } + } + throw error; + } +} +function safeCompile(route, options) { + // Check if normalization is needed and cache the result + const needsNormalization = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$route$2d$pattern$2d$normalizer$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["hasAdjacentParameterIssues"])(route); + const routeToUse = needsNormalization ? (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$route$2d$pattern$2d$normalizer$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["normalizeAdjacentParameters"])(route) : route; + try { + const compiler = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$compiled$2f$path$2d$to$2d$regexp$2f$index$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["compile"])(routeToUse, options); + // If we normalized the route, wrap the compiler to strip separators from output + // The normalization inserts _NEXTSEP_ as a literal string in the pattern to satisfy + // path-to-regexp validation, but we don't want it in the final compiled URL + if (needsNormalization) { + return (params)=>{ + return (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$route$2d$pattern$2d$normalizer$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["stripNormalizedSeparators"])(compiler(params)); + }; + } + return compiler; + } catch (error) { + // Only try normalization if we haven't already normalized + if (!needsNormalization) { + try { + const normalizedRoute = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$route$2d$pattern$2d$normalizer$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["normalizeAdjacentParameters"])(route); + const compiler = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$compiled$2f$path$2d$to$2d$regexp$2f$index$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["compile"])(normalizedRoute, options); + // Wrap the compiler to strip separators from output + return (params)=>{ + return (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$route$2d$pattern$2d$normalizer$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["stripNormalizedSeparators"])(compiler(params)); + }; + } catch (retryError) { + // If that doesn't work, fall back to original error + throw error; + } + } + throw error; + } +} +function safeRegexpToFunction(regexp, keys) { + const originalMatcher = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$compiled$2f$path$2d$to$2d$regexp$2f$index$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["regexpToFunction"])(regexp, keys || []); + return (pathname)=>{ + const result = originalMatcher(pathname); + if (!result) return false; + // Clean parameters before returning + return { + ...result, + params: (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$route$2d$pattern$2d$normalizer$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["stripParameterSeparators"])(result.params) + }; + }; +} +function safeRouteMatcher(matcherFn) { + return (pathname)=>{ + const result = matcherFn(pathname); + if (!result) return false; + // Clean parameters before returning + return (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$route$2d$pattern$2d$normalizer$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["stripParameterSeparators"])(result); + }; +} //# sourceMappingURL=route-match-utils.js.map +}), +"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/shared/lib/router/utils/route-matcher.js [app-rsc] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "getRouteMatcher", + ()=>getRouteMatcher +]); +var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$utils$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/shared/lib/utils.js [app-rsc] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$route$2d$match$2d$utils$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/shared/lib/router/utils/route-match-utils.js [app-rsc] (ecmascript)"); +; +; +function getRouteMatcher({ re, groups }) { + const rawMatcher = (pathname)=>{ + const routeMatch = re.exec(pathname); + if (!routeMatch) return false; + const decode = (param)=>{ + try { + return decodeURIComponent(param); + } catch { + throw Object.defineProperty(new __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$utils$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["DecodeError"]('failed to decode param'), "__NEXT_ERROR_CODE", { + value: "E528", + enumerable: false, + configurable: true + }); + } + }; + const params = {}; + for (const [key, group] of Object.entries(groups)){ + const match = routeMatch[group.pos]; + if (match !== undefined) { + if (group.repeat) { + params[key] = match.split('/').map((entry)=>decode(entry)); + } else { + params[key] = decode(match); + } + } + } + return params; + }; + // Wrap with safe matcher to handle parameter cleaning + return (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$route$2d$match$2d$utils$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["safeRouteMatcher"])(rawMatcher); +} //# sourceMappingURL=route-matcher.js.map +}), +"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/shared/lib/escape-regexp.js [app-rsc] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +// regexp is based on https://github.com/sindresorhus/escape-string-regexp +__turbopack_context__.s([ + "escapeStringRegexp", + ()=>escapeStringRegexp +]); +const reHasRegExp = /[|\\{}()[\]^$+*?.-]/; +const reReplaceRegExp = /[|\\{}()[\]^$+*?.-]/g; +function escapeStringRegexp(str) { + // see also: https://github.com/lodash/lodash/blob/2da024c3b4f9947a48517639de7560457cd4ec6c/escapeRegExp.js#L23 + if (reHasRegExp.test(str)) { + return str.replace(reReplaceRegExp, '\\$&'); + } + return str; +} //# sourceMappingURL=escape-regexp.js.map +}), +"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/shared/lib/router/utils/parse-loader-tree.js [app-rsc] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "parseLoaderTree", + ()=>parseLoaderTree +]); +var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$segment$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/shared/lib/segment.js [app-rsc] (ecmascript)"); +; +function parseLoaderTree(tree) { + const [segment, parallelRoutes, modules] = tree; + const { layout, template } = modules; + let { page } = modules; + // a __DEFAULT__ segment means that this route didn't match any of the + // segments in the route, so we should use the default page + page = segment === __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$segment$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["DEFAULT_SEGMENT_KEY"] ? modules.defaultPage : page; + const conventionPath = layout?.[1] || template?.[1] || page?.[1]; + return { + page, + segment, + modules, + /* it can be either layout / template / page */ conventionPath, + parallelRoutes + }; +} //# sourceMappingURL=parse-loader-tree.js.map +}), +"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/shared/lib/router/utils/get-dynamic-param.js [app-rsc] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "PARAMETER_PATTERN", + ()=>PARAMETER_PATTERN, + "getDynamicParam", + ()=>getDynamicParam, + "interpolateParallelRouteParams", + ()=>interpolateParallelRouteParams, + "parseMatchedParameter", + ()=>parseMatchedParameter, + "parseParameter", + ()=>parseParameter +]); +var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$invariant$2d$error$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/shared/lib/invariant-error.js [app-rsc] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$parse$2d$loader$2d$tree$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/shared/lib/router/utils/parse-loader-tree.js [app-rsc] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$get$2d$segment$2d$param$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/shared/lib/router/utils/get-segment-param.js [app-rsc] (ecmascript)"); +; +; +; +/** + * Gets the value of a param from the params object. This correctly handles the + * case where the param is a fallback route param and encodes the resulting + * value. + * + * @param interpolatedParams - The params object. + * @param segmentKey - The key of the segment. + * @param fallbackRouteParams - The fallback route params. + * @returns The value of the param. + */ function getParamValue(interpolatedParams, segmentKey, fallbackRouteParams) { + let value = interpolatedParams[segmentKey]; + if (fallbackRouteParams?.has(segmentKey)) { + // We know that the fallback route params has the segment key because we + // checked that above. + const [searchValue] = fallbackRouteParams.get(segmentKey); + value = searchValue; + } else if (Array.isArray(value)) { + value = value.map((i)=>encodeURIComponent(i)); + } else if (typeof value === 'string') { + value = encodeURIComponent(value); + } + return value; +} +function interpolateParallelRouteParams(loaderTree, params, pagePath, fallbackRouteParams) { + const interpolated = structuredClone(params); + // Stack-based traversal with depth tracking + const stack = [ + { + tree: loaderTree, + depth: 0 + } + ]; + // Derive value from pagePath based on depth and parameter type + const pathSegments = pagePath.split('/').slice(1) // Remove first empty string + ; + while(stack.length > 0){ + const { tree, depth } = stack.pop(); + const { segment, parallelRoutes } = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$parse$2d$loader$2d$tree$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["parseLoaderTree"])(tree); + // Check if current segment contains a parameter + const segmentParam = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$get$2d$segment$2d$param$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["getSegmentParam"])(segment); + if (segmentParam && !interpolated.hasOwnProperty(segmentParam.param) && // If the param is in the fallback route params, we don't need to + // interpolate it because it's already marked as being unknown. + !fallbackRouteParams?.has(segmentParam.param)) { + switch(segmentParam.type){ + case 'catchall': + case 'optional-catchall': + case 'catchall-intercepted-(..)(..)': + case 'catchall-intercepted-(.)': + case 'catchall-intercepted-(..)': + case 'catchall-intercepted-(...)': + // For catchall parameters, take all remaining segments from this depth + const remainingSegments = pathSegments.slice(depth); + // Process each segment to handle any dynamic params + const processedSegments = remainingSegments.flatMap((pathSegment)=>{ + const param = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$get$2d$segment$2d$param$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["getSegmentParam"])(pathSegment); + // If the segment matches a param, return the param value otherwise, + // it's a static segment, so just return that. We don't use the + // `getParamValue` function here because we don't want the values to + // be encoded, that's handled on get by the `getDynamicParam` + // function. + return param ? interpolated[param.param] : pathSegment; + }).filter((s)=>s !== undefined); + if (processedSegments.length > 0) { + interpolated[segmentParam.param] = processedSegments; + } + break; + case 'dynamic': + case 'dynamic-intercepted-(..)(..)': + case 'dynamic-intercepted-(.)': + case 'dynamic-intercepted-(..)': + case 'dynamic-intercepted-(...)': + // For regular dynamic parameters, take the segment at this depth + if (depth < pathSegments.length) { + const pathSegment = pathSegments[depth]; + const param = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$get$2d$segment$2d$param$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["getSegmentParam"])(pathSegment); + interpolated[segmentParam.param] = param ? interpolated[param.param] : pathSegment; + } + break; + default: + segmentParam.type; + } + } + // Calculate next depth - increment if this is not a route group and not empty + let nextDepth = depth; + const isRouteGroup = segment.startsWith('(') && segment.endsWith(')'); + if (!isRouteGroup && segment !== '') { + nextDepth++; + } + // Add all parallel routes to the stack for processing + for (const route of Object.values(parallelRoutes)){ + stack.push({ + tree: route, + depth: nextDepth + }); + } + } + return interpolated; +} +function getDynamicParam(interpolatedParams, segmentKey, dynamicParamType, fallbackRouteParams) { + let value = getParamValue(interpolatedParams, segmentKey, fallbackRouteParams); + // handle the case where an optional catchall does not have a value, + // e.g. `/dashboard/[[...slug]]` when requesting `/dashboard` + if (!value || value.length === 0) { + if (dynamicParamType === 'oc') { + return { + param: segmentKey, + value: null, + type: dynamicParamType, + treeSegment: [ + segmentKey, + '', + dynamicParamType + ] + }; + } + throw Object.defineProperty(new __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$invariant$2d$error$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["InvariantError"](`Missing value for segment key: "${segmentKey}" with dynamic param type: ${dynamicParamType}`), "__NEXT_ERROR_CODE", { + value: "E864", + enumerable: false, + configurable: true + }); + } + return { + param: segmentKey, + // The value that is passed to user code. + value, + // The value that is rendered in the router tree. + treeSegment: [ + segmentKey, + Array.isArray(value) ? value.join('/') : value, + dynamicParamType + ], + type: dynamicParamType + }; +} +const PARAMETER_PATTERN = /^([^[]*)\[((?:\[[^\]]*\])|[^\]]+)\](.*)$/; +function parseParameter(param) { + const match = param.match(PARAMETER_PATTERN); + if (!match) { + return parseMatchedParameter(param); + } + return parseMatchedParameter(match[2]); +} +function parseMatchedParameter(param) { + const optional = param.startsWith('[') && param.endsWith(']'); + if (optional) { + param = param.slice(1, -1); + } + const repeat = param.startsWith('...'); + if (repeat) { + param = param.slice(3); + } + return { + key: param, + repeat, + optional + }; +} //# sourceMappingURL=get-dynamic-param.js.map +}), +"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/shared/lib/router/utils/route-regex.js [app-rsc] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "getNamedMiddlewareRegex", + ()=>getNamedMiddlewareRegex, + "getNamedRouteRegex", + ()=>getNamedRouteRegex, + "getRouteRegex", + ()=>getRouteRegex +]); +var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$constants$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/lib/constants.js [app-rsc] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$interception$2d$routes$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/shared/lib/router/utils/interception-routes.js [app-rsc] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$escape$2d$regexp$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/shared/lib/escape-regexp.js [app-rsc] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$remove$2d$trailing$2d$slash$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/shared/lib/router/utils/remove-trailing-slash.js [app-rsc] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$get$2d$dynamic$2d$param$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/shared/lib/router/utils/get-dynamic-param.js [app-rsc] (ecmascript)"); +; +; +; +; +; +function getParametrizedRoute(route, includeSuffix, includePrefix) { + const groups = {}; + let groupIndex = 1; + const segments = []; + for (const segment of (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$remove$2d$trailing$2d$slash$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["removeTrailingSlash"])(route).slice(1).split('/')){ + const markerMatch = __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$interception$2d$routes$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["INTERCEPTION_ROUTE_MARKERS"].find((m)=>segment.startsWith(m)); + const paramMatches = segment.match(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$get$2d$dynamic$2d$param$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["PARAMETER_PATTERN"]) // Check for parameters + ; + if (markerMatch && paramMatches && paramMatches[2]) { + const { key, optional, repeat } = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$get$2d$dynamic$2d$param$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["parseMatchedParameter"])(paramMatches[2]); + groups[key] = { + pos: groupIndex++, + repeat, + optional + }; + segments.push(`/${(0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$escape$2d$regexp$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["escapeStringRegexp"])(markerMatch)}([^/]+?)`); + } else if (paramMatches && paramMatches[2]) { + const { key, repeat, optional } = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$get$2d$dynamic$2d$param$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["parseMatchedParameter"])(paramMatches[2]); + groups[key] = { + pos: groupIndex++, + repeat, + optional + }; + if (includePrefix && paramMatches[1]) { + segments.push(`/${(0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$escape$2d$regexp$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["escapeStringRegexp"])(paramMatches[1])}`); + } + let s = repeat ? optional ? '(?:/(.+?))?' : '/(.+?)' : '/([^/]+?)'; + // Remove the leading slash if includePrefix already added it. + if (includePrefix && paramMatches[1]) { + s = s.substring(1); + } + segments.push(s); + } else { + segments.push(`/${(0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$escape$2d$regexp$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["escapeStringRegexp"])(segment)}`); + } + // If there's a suffix, add it to the segments if it's enabled. + if (includeSuffix && paramMatches && paramMatches[3]) { + segments.push((0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$escape$2d$regexp$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["escapeStringRegexp"])(paramMatches[3])); + } + } + return { + parameterizedRoute: segments.join(''), + groups + }; +} +function getRouteRegex(normalizedRoute, { includeSuffix = false, includePrefix = false, excludeOptionalTrailingSlash = false } = {}) { + const { parameterizedRoute, groups } = getParametrizedRoute(normalizedRoute, includeSuffix, includePrefix); + let re = parameterizedRoute; + if (!excludeOptionalTrailingSlash) { + re += '(?:/)?'; + } + return { + re: new RegExp(`^${re}$`), + groups: groups + }; +} +/** + * Builds a function to generate a minimal routeKey using only a-z and minimal + * number of characters. + */ function buildGetSafeRouteKey() { + let i = 0; + return ()=>{ + let routeKey = ''; + let j = ++i; + while(j > 0){ + routeKey += String.fromCharCode(97 + (j - 1) % 26); + j = Math.floor((j - 1) / 26); + } + return routeKey; + }; +} +function getSafeKeyFromSegment({ interceptionMarker, getSafeRouteKey, segment, routeKeys, keyPrefix, backreferenceDuplicateKeys }) { + const { key, optional, repeat } = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$get$2d$dynamic$2d$param$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["parseMatchedParameter"])(segment); + // replace any non-word characters since they can break + // the named regex + let cleanedKey = key.replace(/\W/g, ''); + if (keyPrefix) { + cleanedKey = `${keyPrefix}${cleanedKey}`; + } + let invalidKey = false; + // check if the key is still invalid and fallback to using a known + // safe key + if (cleanedKey.length === 0 || cleanedKey.length > 30) { + invalidKey = true; + } + if (!isNaN(parseInt(cleanedKey.slice(0, 1)))) { + invalidKey = true; + } + if (invalidKey) { + cleanedKey = getSafeRouteKey(); + } + const duplicateKey = cleanedKey in routeKeys; + if (keyPrefix) { + routeKeys[cleanedKey] = `${keyPrefix}${key}`; + } else { + routeKeys[cleanedKey] = key; + } + // if the segment has an interception marker, make sure that's part of the regex pattern + // this is to ensure that the route with the interception marker doesn't incorrectly match + // the non-intercepted route (ie /app/(.)[username] should not match /app/[username]) + const interceptionPrefix = interceptionMarker ? (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$escape$2d$regexp$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["escapeStringRegexp"])(interceptionMarker) : ''; + let pattern; + if (duplicateKey && backreferenceDuplicateKeys) { + // Use a backreference to the key to ensure that the key is the same value + // in each of the placeholders. + pattern = `\\k<${cleanedKey}>`; + } else if (repeat) { + pattern = `(?<${cleanedKey}>.+?)`; + } else { + pattern = `(?<${cleanedKey}>[^/]+?)`; + } + return { + key, + pattern: optional ? `(?:/${interceptionPrefix}${pattern})?` : `/${interceptionPrefix}${pattern}`, + cleanedKey: cleanedKey, + optional, + repeat + }; +} +function getNamedParametrizedRoute(route, prefixRouteKeys, includeSuffix, includePrefix, backreferenceDuplicateKeys, reference = { + names: {}, + intercepted: {} +}) { + const getSafeRouteKey = buildGetSafeRouteKey(); + const routeKeys = {}; + const segments = []; + const inverseParts = []; + // Ensure we don't mutate the original reference object. + reference = structuredClone(reference); + for (const segment of (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$remove$2d$trailing$2d$slash$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["removeTrailingSlash"])(route).slice(1).split('/')){ + const hasInterceptionMarker = __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$interception$2d$routes$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["INTERCEPTION_ROUTE_MARKERS"].some((m)=>segment.startsWith(m)); + const paramMatches = segment.match(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$get$2d$dynamic$2d$param$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["PARAMETER_PATTERN"]) // Check for parameters + ; + const interceptionMarker = hasInterceptionMarker ? paramMatches?.[1] : undefined; + let keyPrefix; + if (interceptionMarker && paramMatches?.[2]) { + keyPrefix = prefixRouteKeys ? __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$constants$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["NEXT_INTERCEPTION_MARKER_PREFIX"] : undefined; + reference.intercepted[paramMatches[2]] = interceptionMarker; + } else if (paramMatches?.[2] && reference.intercepted[paramMatches[2]]) { + keyPrefix = prefixRouteKeys ? __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$constants$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["NEXT_INTERCEPTION_MARKER_PREFIX"] : undefined; + } else { + keyPrefix = prefixRouteKeys ? __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$constants$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["NEXT_QUERY_PARAM_PREFIX"] : undefined; + } + if (interceptionMarker && paramMatches && paramMatches[2]) { + // If there's an interception marker, add it to the segments. + const { key, pattern, cleanedKey, repeat, optional } = getSafeKeyFromSegment({ + getSafeRouteKey, + interceptionMarker, + segment: paramMatches[2], + routeKeys, + keyPrefix, + backreferenceDuplicateKeys + }); + segments.push(pattern); + inverseParts.push(`/${paramMatches[1]}:${reference.names[key] ?? cleanedKey}${repeat ? optional ? '*' : '+' : ''}`); + reference.names[key] ??= cleanedKey; + } else if (paramMatches && paramMatches[2]) { + // If there's a prefix, add it to the segments if it's enabled. + if (includePrefix && paramMatches[1]) { + segments.push(`/${(0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$escape$2d$regexp$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["escapeStringRegexp"])(paramMatches[1])}`); + inverseParts.push(`/${paramMatches[1]}`); + } + const { key, pattern, cleanedKey, repeat, optional } = getSafeKeyFromSegment({ + getSafeRouteKey, + segment: paramMatches[2], + routeKeys, + keyPrefix, + backreferenceDuplicateKeys + }); + // Remove the leading slash if includePrefix already added it. + let s = pattern; + if (includePrefix && paramMatches[1]) { + s = s.substring(1); + } + segments.push(s); + inverseParts.push(`/:${reference.names[key] ?? cleanedKey}${repeat ? optional ? '*' : '+' : ''}`); + reference.names[key] ??= cleanedKey; + } else { + segments.push(`/${(0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$escape$2d$regexp$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["escapeStringRegexp"])(segment)}`); + inverseParts.push(`/${segment}`); + } + // If there's a suffix, add it to the segments if it's enabled. + if (includeSuffix && paramMatches && paramMatches[3]) { + segments.push((0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$escape$2d$regexp$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["escapeStringRegexp"])(paramMatches[3])); + inverseParts.push(paramMatches[3]); + } + } + return { + namedParameterizedRoute: segments.join(''), + routeKeys, + pathToRegexpPattern: inverseParts.join(''), + reference + }; +} +function getNamedRouteRegex(normalizedRoute, options) { + const result = getNamedParametrizedRoute(normalizedRoute, options.prefixRouteKeys, options.includeSuffix ?? false, options.includePrefix ?? false, options.backreferenceDuplicateKeys ?? false, options.reference); + let namedRegex = result.namedParameterizedRoute; + if (!options.excludeOptionalTrailingSlash) { + namedRegex += '(?:/)?'; + } + return { + ...getRouteRegex(normalizedRoute, options), + namedRegex: `^${namedRegex}$`, + routeKeys: result.routeKeys, + pathToRegexpPattern: result.pathToRegexpPattern, + reference: result.reference + }; +} +function getNamedMiddlewareRegex(normalizedRoute, options) { + const { parameterizedRoute } = getParametrizedRoute(normalizedRoute, false, false); + const { catchAll = true } = options; + if (parameterizedRoute === '/') { + let catchAllRegex = catchAll ? '.*' : ''; + return { + namedRegex: `^/${catchAllRegex}$` + }; + } + const { namedParameterizedRoute } = getNamedParametrizedRoute(normalizedRoute, false, false, false, false, undefined); + let catchAllGroupedRegex = catchAll ? '(?:(/.*)?)' : ''; + return { + namedRegex: `^${namedParameterizedRoute}${catchAllGroupedRegex}$` + }; +} //# sourceMappingURL=route-regex.js.map +}), +"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/server/app-render/get-short-dynamic-param-type.js [app-rsc] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "dynamicParamTypes", + ()=>dynamicParamTypes +]); +const dynamicParamTypes = { + catchall: 'c', + 'catchall-intercepted-(..)(..)': 'ci(..)(..)', + 'catchall-intercepted-(.)': 'ci(.)', + 'catchall-intercepted-(..)': 'ci(..)', + 'catchall-intercepted-(...)': 'ci(...)', + 'optional-catchall': 'oc', + dynamic: 'd', + 'dynamic-intercepted-(..)(..)': 'di(..)(..)', + 'dynamic-intercepted-(.)': 'di(.)', + 'dynamic-intercepted-(..)': 'di(..)', + 'dynamic-intercepted-(...)': 'di(...)' +}; //# sourceMappingURL=get-short-dynamic-param-type.js.map +}), +"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/server/request/fallback-params.js [app-rsc] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "createOpaqueFallbackRouteParams", + ()=>createOpaqueFallbackRouteParams, + "getFallbackRouteParams", + ()=>getFallbackRouteParams +]); +var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$build$2f$segment$2d$config$2f$app$2f$app$2d$segments$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/build/segment-config/app/app-segments.js [app-rsc] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$invariant$2d$error$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/shared/lib/invariant-error.js [app-rsc] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$route$2d$matcher$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/shared/lib/router/utils/route-matcher.js [app-rsc] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$route$2d$regex$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/shared/lib/router/utils/route-regex.js [app-rsc] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$get$2d$short$2d$dynamic$2d$param$2d$type$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/server/app-render/get-short-dynamic-param-type.js [app-rsc] (ecmascript)"); +; +; +; +; +; +function getParamKeys(page) { + const pattern = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$route$2d$regex$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["getRouteRegex"])(page); + const matcher = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$route$2d$matcher$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["getRouteMatcher"])(pattern); + // Get the default list of allowed params. + return Object.keys(matcher(page)); +} +function createOpaqueFallbackRouteParams(fallbackRouteParams) { + // If there are no fallback route params, we can return early. + if (fallbackRouteParams.length === 0) return null; + // As we're creating unique keys for each of the dynamic route params, we only + // need to generate a unique ID once per request because each of the keys will + // be also be unique. + const uniqueID = Math.random().toString(16).slice(2); + const keys = new Map(); + // Generate a unique key for the fallback route param, if this key is found + // in the static output, it represents a bug in cache components. + for (const { paramName, paramType } of fallbackRouteParams){ + keys.set(paramName, [ + `%%drp:${paramName}:${uniqueID}%%`, + __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$get$2d$short$2d$dynamic$2d$param$2d$type$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["dynamicParamTypes"][paramType] + ]); + } + return keys; +} +function getFallbackRouteParams(page, routeModule) { + // First, get the fallback route params based on the provided page. + const unknownParamKeys = new Set(getParamKeys(page)); + // Needed when processing fallback route params for catchall routes in + // parallel segments, derive from pathname. This is similar to + // getDynamicParam's pagePath parsing logic. + const pathSegments = page.split('/').filter(Boolean); + const collected = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$build$2f$segment$2d$config$2f$app$2f$app$2d$segments$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["collectFallbackRouteParams"])(routeModule); + // Then, we have to get the fallback route params from the segments that are + // associated with parallel route segments. + const fallbackRouteParams = []; + for (const fallbackRouteParam of collected){ + if (fallbackRouteParam.isParallelRouteParam) { + // Try to see if we can resolve this parameter from the page that was + // passed in. + if (unknownParamKeys.has(fallbackRouteParam.paramName)) { + continue; + } + if (fallbackRouteParam.paramType === 'optional-catchall' || fallbackRouteParam.paramType === 'catchall') { + // If there are any fallback route segments then we can't use the + // pathname to derive the value because it's not complete. We can + // make this assumption because the routes are always resolved left + // to right and the catchall is always the last segment, so any + // route parameters that are unknown will always contribute to the + // pathname and therefore the catchall param too. + if (collected.some((param)=>!param.isParallelRouteParam && unknownParamKeys.has(param.paramName))) { + fallbackRouteParams.push(fallbackRouteParam); + continue; + } + if (pathSegments.length === 0 && fallbackRouteParam.paramType !== 'optional-catchall') { + // We shouldn't be able to match a catchall segment without any path + // segments if it's not an optional catchall. + throw Object.defineProperty(new __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$invariant$2d$error$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["InvariantError"](`Unexpected empty path segments match for a pathname "${page}" with param "${fallbackRouteParam.paramName}" of type "${fallbackRouteParam.paramType}"`), "__NEXT_ERROR_CODE", { + value: "E792", + enumerable: false, + configurable: true + }); + } + // The path segments are not empty, and the segments didn't contain any + // unknown params, so we know that this particular fallback route param + // route param is not actually unknown, and is known. We can skip adding + // it to the fallback route params. + } else { + // This is some other type of route param that shouldn't get resolved + // statically. + throw Object.defineProperty(new __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$invariant$2d$error$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["InvariantError"](`Unexpected match for a pathname "${page}" with a param "${fallbackRouteParam.paramName}" of type "${fallbackRouteParam.paramType}"`), "__NEXT_ERROR_CODE", { + value: "E791", + enumerable: false, + configurable: true + }); + } + } else if (unknownParamKeys.has(fallbackRouteParam.paramName)) { + // As this is a non-parallel route segment, and it exists in the unknown + // param keys, we know it's a fallback route param. + fallbackRouteParams.push(fallbackRouteParam); + } + } + return createOpaqueFallbackRouteParams(fallbackRouteParams); +} //# sourceMappingURL=fallback-params.js.map +}), +"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/server/app-render/encryption-utils.js [app-rsc] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "arrayBufferToString", + ()=>arrayBufferToString, + "decrypt", + ()=>decrypt, + "encrypt", + ()=>encrypt, + "getActionEncryptionKey", + ()=>getActionEncryptionKey, + "getClientReferenceManifestForRsc", + ()=>getClientReferenceManifestForRsc, + "getServerModuleMap", + ()=>getServerModuleMap, + "setReferenceManifestsSingleton", + ()=>setReferenceManifestsSingleton, + "stringToUint8Array", + ()=>stringToUint8Array +]); +var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$invariant$2d$error$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/shared/lib/invariant-error.js [app-rsc] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$app$2d$paths$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/shared/lib/router/utils/app-paths.js [app-rsc] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$externals$5d2f$next$2f$dist$2f$server$2f$app$2d$render$2f$work$2d$async$2d$storage$2e$external$2e$js__$5b$external$5d$__$28$next$2f$dist$2f$server$2f$app$2d$render$2f$work$2d$async$2d$storage$2e$external$2e$js$2c$__cjs$29$__ = __turbopack_context__.i("[externals]/next/dist/server/app-render/work-async-storage.external.js [external] (next/dist/server/app-render/work-async-storage.external.js, cjs)"); +; +; +; +let __next_loaded_action_key; +function arrayBufferToString(buffer) { + const bytes = new Uint8Array(buffer); + const len = bytes.byteLength; + // @anonrig: V8 has a limit of 65535 arguments in a function. + // For len < 65535, this is faster. + // https://github.com/vercel/next.js/pull/56377#pullrequestreview-1656181623 + if (len < 65535) { + return String.fromCharCode.apply(null, bytes); + } + let binary = ''; + for(let i = 0; i < len; i++){ + binary += String.fromCharCode(bytes[i]); + } + return binary; +} +function stringToUint8Array(binary) { + const len = binary.length; + const arr = new Uint8Array(len); + for(let i = 0; i < len; i++){ + arr[i] = binary.charCodeAt(i); + } + return arr; +} +function encrypt(key, iv, data) { + return crypto.subtle.encrypt({ + name: 'AES-GCM', + iv + }, key, data); +} +function decrypt(key, iv, data) { + return crypto.subtle.decrypt({ + name: 'AES-GCM', + iv + }, key, data); +} +// This is a global singleton that is used to encode/decode the action bound args from +// the closure. This can't be using a AsyncLocalStorage as it might happen on the module +// level. Since the client reference manifest won't be mutated, let's use a global singleton +// to keep it. +const SERVER_ACTION_MANIFESTS_SINGLETON = Symbol.for('next.server.action-manifests'); +function setReferenceManifestsSingleton({ page, clientReferenceManifest, serverActionsManifest, serverModuleMap }) { + var _globalThis_SERVER_ACTION_MANIFESTS_SINGLETON; + // @ts-expect-error + const clientReferenceManifestsPerPage = (_globalThis_SERVER_ACTION_MANIFESTS_SINGLETON = globalThis[SERVER_ACTION_MANIFESTS_SINGLETON]) == null ? void 0 : _globalThis_SERVER_ACTION_MANIFESTS_SINGLETON.clientReferenceManifestsPerPage; + // @ts-expect-error + globalThis[SERVER_ACTION_MANIFESTS_SINGLETON] = { + clientReferenceManifestsPerPage: { + ...clientReferenceManifestsPerPage, + [(0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$app$2d$paths$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["normalizeAppPath"])(page)]: clientReferenceManifest + }, + serverActionsManifest, + serverModuleMap + }; +} +function getServerModuleMap() { + const serverActionsManifestSingleton = globalThis[SERVER_ACTION_MANIFESTS_SINGLETON]; + if (!serverActionsManifestSingleton) { + throw Object.defineProperty(new __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$invariant$2d$error$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["InvariantError"]('Missing manifest for Server Actions.'), "__NEXT_ERROR_CODE", { + value: "E606", + enumerable: false, + configurable: true + }); + } + return serverActionsManifestSingleton.serverModuleMap; +} +function getClientReferenceManifestForRsc() { + const serverActionsManifestSingleton = globalThis[SERVER_ACTION_MANIFESTS_SINGLETON]; + if (!serverActionsManifestSingleton) { + throw Object.defineProperty(new __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$invariant$2d$error$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["InvariantError"]('Missing manifest for Server Actions.'), "__NEXT_ERROR_CODE", { + value: "E606", + enumerable: false, + configurable: true + }); + } + const { clientReferenceManifestsPerPage } = serverActionsManifestSingleton; + const workStore = __TURBOPACK__imported__module__$5b$externals$5d2f$next$2f$dist$2f$server$2f$app$2d$render$2f$work$2d$async$2d$storage$2e$external$2e$js__$5b$external$5d$__$28$next$2f$dist$2f$server$2f$app$2d$render$2f$work$2d$async$2d$storage$2e$external$2e$js$2c$__cjs$29$__["workAsyncStorage"].getStore(); + if (!workStore) { + // If there's no work store defined, we can assume that a client reference + // manifest is needed during module evaluation, e.g. to create a server + // action using a higher-order function. This might also use client + // components which need to be serialized by Flight, and therefore client + // references need to be resolvable. To make this work, we're returning a + // merged manifest across all pages. This is fine as long as the module IDs + // are not page specific, which they are not for Webpack. TODO: Fix this in + // Turbopack. + return mergeClientReferenceManifests(clientReferenceManifestsPerPage); + } + const clientReferenceManifest = clientReferenceManifestsPerPage[workStore.route]; + if (!clientReferenceManifest) { + throw Object.defineProperty(new __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$invariant$2d$error$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["InvariantError"](`Missing Client Reference Manifest for ${workStore.route}.`), "__NEXT_ERROR_CODE", { + value: "E570", + enumerable: false, + configurable: true + }); + } + return clientReferenceManifest; +} +async function getActionEncryptionKey() { + if (__next_loaded_action_key) { + return __next_loaded_action_key; + } + const serverActionsManifestSingleton = globalThis[SERVER_ACTION_MANIFESTS_SINGLETON]; + if (!serverActionsManifestSingleton) { + throw Object.defineProperty(new __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$invariant$2d$error$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["InvariantError"]('Missing manifest for Server Actions.'), "__NEXT_ERROR_CODE", { + value: "E606", + enumerable: false, + configurable: true + }); + } + const rawKey = process.env.NEXT_SERVER_ACTIONS_ENCRYPTION_KEY || serverActionsManifestSingleton.serverActionsManifest.encryptionKey; + if (rawKey === undefined) { + throw Object.defineProperty(new __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$invariant$2d$error$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["InvariantError"]('Missing encryption key for Server Actions'), "__NEXT_ERROR_CODE", { + value: "E571", + enumerable: false, + configurable: true + }); + } + __next_loaded_action_key = await crypto.subtle.importKey('raw', stringToUint8Array(atob(rawKey)), 'AES-GCM', true, [ + 'encrypt', + 'decrypt' + ]); + return __next_loaded_action_key; +} +function mergeClientReferenceManifests(clientReferenceManifestsPerPage) { + const clientReferenceManifests = Object.values(clientReferenceManifestsPerPage); + const mergedClientReferenceManifest = { + clientModules: {}, + edgeRscModuleMapping: {}, + rscModuleMapping: {} + }; + for (const clientReferenceManifest of clientReferenceManifests){ + mergedClientReferenceManifest.clientModules = { + ...mergedClientReferenceManifest.clientModules, + ...clientReferenceManifest.clientModules + }; + mergedClientReferenceManifest.edgeRscModuleMapping = { + ...mergedClientReferenceManifest.edgeRscModuleMapping, + ...clientReferenceManifest.edgeRscModuleMapping + }; + mergedClientReferenceManifest.rscModuleMapping = { + ...mergedClientReferenceManifest.rscModuleMapping, + ...clientReferenceManifest.rscModuleMapping + }; + } + return mergedClientReferenceManifest; +} //# sourceMappingURL=encryption-utils.js.map +}), +"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/shared/lib/router/utils/html-bots.js [app-rsc] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +// This regex contains the bots that we need to do a blocking render for and can't safely stream the response +// due to how they parse the DOM. For example, they might explicitly check for metadata in the `head` tag, so we can't stream metadata tags after the `head` was sent. +// Note: The pattern [\w-]+-Google captures all Google crawlers with "-Google" suffix (e.g., Mediapartners-Google, AdsBot-Google, Storebot-Google) +// as well as crawlers starting with "Google-" (e.g., Google-PageRenderer, Google-InspectionTool) +__turbopack_context__.s([ + "HTML_LIMITED_BOT_UA_RE", + ()=>HTML_LIMITED_BOT_UA_RE +]); +const HTML_LIMITED_BOT_UA_RE = /[\w-]+-Google|Google-[\w-]+|Chrome-Lighthouse|Slurp|DuckDuckBot|baiduspider|yandex|sogou|bitlybot|tumblr|vkShare|quora link preview|redditbot|ia_archiver|Bingbot|BingPreview|applebot|facebookexternalhit|facebookcatalog|Twitterbot|LinkedInBot|Slackbot|Discordbot|WhatsApp|SkypeUriPreview|Yeti|googleweblight/i; //# sourceMappingURL=html-bots.js.map +}), +"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/shared/lib/router/utils/is-bot.js [app-rsc] (ecmascript) ", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "HTML_LIMITED_BOT_UA_RE_STRING", + ()=>HTML_LIMITED_BOT_UA_RE_STRING, + "getBotType", + ()=>getBotType, + "isBot", + ()=>isBot +]); +var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$html$2d$bots$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/shared/lib/router/utils/html-bots.js [app-rsc] (ecmascript)"); +; +// Bot crawler that will spin up a headless browser and execute JS. +// Only the main Googlebot search crawler executes JavaScript, not other Google crawlers. +// x-ref: https://developers.google.com/search/docs/crawling-indexing/google-common-crawlers +// This regex specifically matches "Googlebot" but NOT "Mediapartners-Google", "AdsBot-Google", etc. +const HEADLESS_BROWSER_BOT_UA_RE = /Googlebot(?!-)|Googlebot$/i; +const HTML_LIMITED_BOT_UA_RE_STRING = __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$html$2d$bots$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["HTML_LIMITED_BOT_UA_RE"].source; +; +function isDomBotUA(userAgent) { + return HEADLESS_BROWSER_BOT_UA_RE.test(userAgent); +} +function isHtmlLimitedBotUA(userAgent) { + return __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$html$2d$bots$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["HTML_LIMITED_BOT_UA_RE"].test(userAgent); +} +function isBot(userAgent) { + return isDomBotUA(userAgent) || isHtmlLimitedBotUA(userAgent); +} +function getBotType(userAgent) { + if (isDomBotUA(userAgent)) { + return 'dom'; + } + if (isHtmlLimitedBotUA(userAgent)) { + return 'html'; + } + return undefined; +} //# sourceMappingURL=is-bot.js.map +}), +"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/server/lib/streaming-metadata.js [app-rsc] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "isHtmlBotRequest", + ()=>isHtmlBotRequest, + "shouldServeStreamingMetadata", + ()=>shouldServeStreamingMetadata +]); +var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$is$2d$bot$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__$3c$locals$3e$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/shared/lib/router/utils/is-bot.js [app-rsc] (ecmascript) "); +; +function shouldServeStreamingMetadata(userAgent, htmlLimitedBots) { + const blockingMetadataUARegex = new RegExp(htmlLimitedBots || __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$is$2d$bot$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__$3c$locals$3e$__["HTML_LIMITED_BOT_UA_RE_STRING"], 'i'); + // Only block metadata for HTML-limited bots + if (userAgent && blockingMetadataUARegex.test(userAgent)) { + return false; + } + return true; +} +function isHtmlBotRequest(req) { + const ua = req.headers['user-agent'] || ''; + const botType = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$is$2d$bot$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__$3c$locals$3e$__["getBotType"])(ua); + return botType === 'html'; +} //# sourceMappingURL=streaming-metadata.js.map +}), +"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/server/app-render/action-utils.js [app-rsc] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "createServerModuleMap", + ()=>createServerModuleMap, + "selectWorkerForForwarding", + ()=>selectWorkerForForwarding +]); +var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$app$2d$paths$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/shared/lib/router/utils/app-paths.js [app-rsc] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$path$2d$has$2d$prefix$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/shared/lib/router/utils/path-has-prefix.js [app-rsc] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$remove$2d$path$2d$prefix$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/shared/lib/router/utils/remove-path-prefix.js [app-rsc] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$externals$5d2f$next$2f$dist$2f$server$2f$app$2d$render$2f$work$2d$async$2d$storage$2e$external$2e$js__$5b$external$5d$__$28$next$2f$dist$2f$server$2f$app$2d$render$2f$work$2d$async$2d$storage$2e$external$2e$js$2c$__cjs$29$__ = __turbopack_context__.i("[externals]/next/dist/server/app-render/work-async-storage.external.js [external] (next/dist/server/app-render/work-async-storage.external.js, cjs)"); +; +; +; +; +function createServerModuleMap({ serverActionsManifest }) { + return new Proxy({}, { + get: (_, id)=>{ + var _serverActionsManifest__id, _serverActionsManifest_; + const workers = (_serverActionsManifest_ = serverActionsManifest[("TURBOPACK compile-time falsy", 0) ? "TURBOPACK unreachable" : 'node']) == null ? void 0 : (_serverActionsManifest__id = _serverActionsManifest_[id]) == null ? void 0 : _serverActionsManifest__id.workers; + if (!workers) { + return undefined; + } + const workStore = __TURBOPACK__imported__module__$5b$externals$5d2f$next$2f$dist$2f$server$2f$app$2d$render$2f$work$2d$async$2d$storage$2e$external$2e$js__$5b$external$5d$__$28$next$2f$dist$2f$server$2f$app$2d$render$2f$work$2d$async$2d$storage$2e$external$2e$js$2c$__cjs$29$__["workAsyncStorage"].getStore(); + let workerEntry; + if (workStore) { + workerEntry = workers[normalizeWorkerPageName(workStore.page)]; + } else { + // If there's no work store defined, we can assume that a server + // module map is needed during module evaluation, e.g. to create a + // server action using a higher-order function. Therefore it should be + // safe to return any entry from the manifest that matches the action + // ID. They all refer to the same module ID, which must also exist in + // the current page bundle. TODO: This is currently not guaranteed in + // Turbopack, and needs to be fixed. + workerEntry = Object.values(workers).at(0); + } + if (!workerEntry) { + return undefined; + } + const { moduleId, async } = workerEntry; + return { + id: moduleId, + name: id, + chunks: [], + async + }; + } + }); +} +function selectWorkerForForwarding(actionId, pageName, serverActionsManifest) { + var _serverActionsManifest__actionId; + const workers = (_serverActionsManifest__actionId = serverActionsManifest[("TURBOPACK compile-time falsy", 0) ? "TURBOPACK unreachable" : 'node'][actionId]) == null ? void 0 : _serverActionsManifest__actionId.workers; + const workerName = normalizeWorkerPageName(pageName); + // no workers, nothing to forward to + if (!workers) return; + // if there is a worker for this page, no need to forward it. + if (workers[workerName]) { + return; + } + // otherwise, grab the first worker that has a handler for this action id + return denormalizeWorkerPageName(Object.keys(workers)[0]); +} +/** + * The flight entry loader keys actions by bundlePath. + * bundlePath corresponds with the relative path (including 'app') to the page entrypoint. + */ function normalizeWorkerPageName(pageName) { + if ((0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$path$2d$has$2d$prefix$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["pathHasPrefix"])(pageName, 'app')) { + return pageName; + } + return 'app' + pageName; +} +/** + * Converts a bundlePath (relative path to the entrypoint) to a routable page name + */ function denormalizeWorkerPageName(bundlePath) { + return (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$app$2d$paths$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["normalizeAppPath"])((0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$remove$2d$path$2d$prefix$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["removePathPrefix"])(bundlePath, 'app')); +} //# sourceMappingURL=action-utils.js.map +}), +"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/server/lib/server-action-request-meta.js [app-rsc] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "getIsPossibleServerAction", + ()=>getIsPossibleServerAction, + "getServerActionRequestMetadata", + ()=>getServerActionRequestMetadata +]); +var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$client$2f$components$2f$app$2d$router$2d$headers$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/client/components/app-router-headers.js [app-rsc] (ecmascript)"); +; +function getServerActionRequestMetadata(req) { + let actionId; + let contentType; + if (req.headers instanceof Headers) { + actionId = req.headers.get(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$client$2f$components$2f$app$2d$router$2d$headers$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["ACTION_HEADER"]) ?? null; + contentType = req.headers.get('content-type'); + } else { + actionId = req.headers[__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$client$2f$components$2f$app$2d$router$2d$headers$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["ACTION_HEADER"]] ?? null; + contentType = req.headers['content-type'] ?? null; + } + const isURLEncodedAction = Boolean(req.method === 'POST' && contentType === 'application/x-www-form-urlencoded'); + const isMultipartAction = Boolean(req.method === 'POST' && (contentType == null ? void 0 : contentType.startsWith('multipart/form-data'))); + const isFetchAction = Boolean(actionId !== undefined && typeof actionId === 'string' && req.method === 'POST'); + const isPossibleServerAction = Boolean(isFetchAction || isURLEncodedAction || isMultipartAction); + return { + actionId, + isURLEncodedAction, + isMultipartAction, + isFetchAction, + isPossibleServerAction + }; +} +function getIsPossibleServerAction(req) { + return getServerActionRequestMetadata(req).isPossibleServerAction; +} //# sourceMappingURL=server-action-request-meta.js.map +}), +"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/lib/fallback.js [app-rsc] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +/** + * Describes the different fallback modes that a given page can have. + */ __turbopack_context__.s([ + "FallbackMode", + ()=>FallbackMode, + "fallbackModeToFallbackField", + ()=>fallbackModeToFallbackField, + "parseFallbackField", + ()=>parseFallbackField, + "parseStaticPathsResult", + ()=>parseStaticPathsResult +]); +var FallbackMode = /*#__PURE__*/ function(FallbackMode) { + /** + * A BLOCKING_STATIC_RENDER fallback will block the request until the page is + * generated. No fallback page will be rendered, and users will have to wait + * to render the page. + */ FallbackMode["BLOCKING_STATIC_RENDER"] = "BLOCKING_STATIC_RENDER"; + /** + * When set to PRERENDER, a fallback page will be sent to users in place of + * forcing them to wait for the page to be generated. This allows the user to + * see a rendered page earlier. + */ FallbackMode["PRERENDER"] = "PRERENDER"; + /** + * When set to NOT_FOUND, pages that are not already prerendered will result + * in a not found response. + */ FallbackMode["NOT_FOUND"] = "NOT_FOUND"; + return FallbackMode; +}({}); +function parseFallbackField(fallbackField) { + if (typeof fallbackField === 'string') { + return "PRERENDER"; + } else if (fallbackField === null) { + return "BLOCKING_STATIC_RENDER"; + } else if (fallbackField === false) { + return "NOT_FOUND"; + } else if (fallbackField === undefined) { + return undefined; + } else { + throw Object.defineProperty(new Error(`Invalid fallback option: ${fallbackField}. Fallback option must be a string, null, undefined, or false.`), "__NEXT_ERROR_CODE", { + value: "E285", + enumerable: false, + configurable: true + }); + } +} +function fallbackModeToFallbackField(fallback, page) { + switch(fallback){ + case "BLOCKING_STATIC_RENDER": + return null; + case "NOT_FOUND": + return false; + case "PRERENDER": + if (!page) { + throw Object.defineProperty(new Error(`Invariant: expected a page to be provided when fallback mode is "${fallback}"`), "__NEXT_ERROR_CODE", { + value: "E422", + enumerable: false, + configurable: true + }); + } + return page; + default: + throw Object.defineProperty(new Error(`Invalid fallback mode: ${fallback}`), "__NEXT_ERROR_CODE", { + value: "E254", + enumerable: false, + configurable: true + }); + } +} +function parseStaticPathsResult(result) { + if (result === true) { + return "PRERENDER"; + } else if (result === 'blocking') { + return "BLOCKING_STATIC_RENDER"; + } else { + return "NOT_FOUND"; + } +} //# sourceMappingURL=fallback.js.map +}), +"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/server/lib/etag.js [app-rsc] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +/** + * FNV-1a Hash implementation + * @author Travis Webb (tjwebb) + * + * Ported from https://github.com/tjwebb/fnv-plus/blob/master/index.js + * + * Simplified, optimized and add modified for 52 bit, which provides a larger hash space + * and still making use of Javascript's 53-bit integer space. + */ __turbopack_context__.s([ + "fnv1a52", + ()=>fnv1a52, + "generateETag", + ()=>generateETag +]); +const fnv1a52 = (str)=>{ + const len = str.length; + let i = 0, t0 = 0, v0 = 0x2325, t1 = 0, v1 = 0x8422, t2 = 0, v2 = 0x9ce4, t3 = 0, v3 = 0xcbf2; + while(i < len){ + v0 ^= str.charCodeAt(i++); + t0 = v0 * 435; + t1 = v1 * 435; + t2 = v2 * 435; + t3 = v3 * 435; + t2 += v0 << 8; + t3 += v1 << 8; + t1 += t0 >>> 16; + v0 = t0 & 65535; + t2 += t1 >>> 16; + v1 = t1 & 65535; + v3 = t3 + (t2 >>> 16) & 65535; + v2 = t2 & 65535; + } + return (v3 & 15) * 281474976710656 + v2 * 4294967296 + v1 * 65536 + (v0 ^ v3 >> 4); +}; +const generateETag = (payload, weak = false)=>{ + const prefix = weak ? 'W/"' : '"'; + return prefix + fnv1a52(payload).toString(36) + payload.length.toString(36) + '"'; +}; //# sourceMappingURL=etag.js.map +}), +"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/compiled/fresh/index.js [app-rsc] (ecmascript)", ((__turbopack_context__, module, exports) => { + +(()=>{ + "use strict"; + var e = { + 695: (e)=>{ + /*! + * fresh + * Copyright(c) 2012 TJ Holowaychuk + * Copyright(c) 2016-2017 Douglas Christopher Wilson + * MIT Licensed + */ var r = /(?:^|,)\s*?no-cache\s*?(?:,|$)/; + e.exports = fresh; + function fresh(e, a) { + var t = e["if-modified-since"]; + var s = e["if-none-match"]; + if (!t && !s) { + return false; + } + var i = e["cache-control"]; + if (i && r.test(i)) { + return false; + } + if (s && s !== "*") { + var f = a["etag"]; + if (!f) { + return false; + } + var n = true; + var u = parseTokenList(s); + for(var _ = 0; _ < u.length; _++){ + var o = u[_]; + if (o === f || o === "W/" + f || "W/" + o === f) { + n = false; + break; + } + } + if (n) { + return false; + } + } + if (t) { + var p = a["last-modified"]; + var v = !p || !(parseHttpDate(p) <= parseHttpDate(t)); + if (v) { + return false; + } + } + return true; + } + function parseHttpDate(e) { + var r = e && Date.parse(e); + return typeof r === "number" ? r : NaN; + } + function parseTokenList(e) { + var r = 0; + var a = []; + var t = 0; + for(var s = 0, i = e.length; s < i; s++){ + switch(e.charCodeAt(s)){ + case 32: + if (t === r) { + t = r = s + 1; + } + break; + case 44: + a.push(e.substring(t, r)); + t = r = s + 1; + break; + default: + r = s + 1; + break; + } + } + a.push(e.substring(t, r)); + return a; + } + } + }; + var r = {}; + function __nccwpck_require__(a) { + var t = r[a]; + if (t !== undefined) { + return t.exports; + } + var s = r[a] = { + exports: {} + }; + var i = true; + try { + e[a](s, s.exports, __nccwpck_require__); + i = false; + } finally{ + if (i) delete r[a]; + } + return s.exports; + } + if (typeof __nccwpck_require__ !== "undefined") __nccwpck_require__.ab = ("TURBOPACK compile-time value", "/ROOT/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/compiled/fresh") + "/"; + var a = __nccwpck_require__(695); + module.exports = a; +})(); +}), +"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/server/lib/cache-control.js [app-rsc] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "getCacheControlHeader", + ()=>getCacheControlHeader +]); +var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$constants$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/lib/constants.js [app-rsc] (ecmascript)"); +; +function getCacheControlHeader({ revalidate, expire }) { + const swrHeader = typeof revalidate === 'number' && expire !== undefined && revalidate < expire ? `, stale-while-revalidate=${expire - revalidate}` : ''; + if (revalidate === 0) { + return 'private, no-cache, no-store, max-age=0, must-revalidate'; + } else if (typeof revalidate === 'number') { + return `s-maxage=${revalidate}${swrHeader}`; + } + return `s-maxage=${__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$constants$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["CACHE_ONE_YEAR"]}${swrHeader}`; +} //# sourceMappingURL=cache-control.js.map +}), +"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/server/send-payload.js [app-rsc] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "sendEtagResponse", + ()=>sendEtagResponse, + "sendRenderResult", + ()=>sendRenderResult +]); +var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$utils$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/shared/lib/utils.js [app-rsc] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$etag$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/server/lib/etag.js [app-rsc] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$compiled$2f$fresh$2f$index$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/compiled/fresh/index.js [app-rsc] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$cache$2d$control$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/server/lib/cache-control.js [app-rsc] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$constants$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/lib/constants.js [app-rsc] (ecmascript)"); +; +; +; +; +; +function sendEtagResponse(req, res, etag) { + if (etag) { + /** + * The server generating a 304 response MUST generate any of the + * following header fields that would have been sent in a 200 (OK) + * response to the same request: Cache-Control, Content-Location, Date, + * ETag, Expires, and Vary. https://tools.ietf.org/html/rfc7232#section-4.1 + */ res.setHeader('ETag', etag); + } + if ((0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$compiled$2f$fresh$2f$index$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["default"])(req.headers, { + etag + })) { + res.statusCode = 304; + res.end(); + return true; + } + return false; +} +async function sendRenderResult({ req, res, result, generateEtags, poweredByHeader, cacheControl }) { + if ((0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$utils$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["isResSent"])(res)) { + return; + } + if (poweredByHeader && result.contentType === __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$constants$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["HTML_CONTENT_TYPE_HEADER"]) { + res.setHeader('X-Powered-By', 'Next.js'); + } + // If cache control is already set on the response we don't + // override it to allow users to customize it via next.config + if (cacheControl && !res.getHeader('Cache-Control')) { + res.setHeader('Cache-Control', (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$cache$2d$control$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["getCacheControlHeader"])(cacheControl)); + } + const payload = result.isDynamic ? null : result.toUnchunkedString(); + if (generateEtags && payload !== null) { + const etag = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$etag$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["generateETag"])(payload); + if (sendEtagResponse(req, res, etag)) { + return; + } + } + if (!res.getHeader('Content-Type') && result.contentType) { + res.setHeader('Content-Type', result.contentType); + } + if (payload) { + res.setHeader('Content-Length', Buffer.byteLength(payload)); + } + if (req.method === 'HEAD') { + res.end(null); + return; + } + if (payload !== null) { + res.end(payload); + return; + } + // Pipe the render result to the response after we get a writer for it. + await result.pipeToNodeResponse(res); +} //# sourceMappingURL=send-payload.js.map +}), +"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/components/builtin/global-error.js [app-rsc] (ecmascript, Next.js Server Component)", ((__turbopack_context__) => { + +__turbopack_context__.n(__turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/components/builtin/global-error.js [app-rsc] (ecmascript)")); +}), +"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/server/app-render/entry-base.js [app-rsc] (ecmascript, Next.js server utility) ", ((__turbopack_context__) => { + +__turbopack_context__.n(__turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/server/app-render/entry-base.js [app-rsc] (ecmascript) "));}), +"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/server/app-render/entry-base.js [app-rsc] (ecmascript, Next.js server utility)", ((__turbopack_context__) => { + +__turbopack_context__.n(__turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/server/app-render/entry-base.js [app-rsc] (ecmascript)"));}), +"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/components/builtin/not-found.js [app-rsc] (ecmascript, Next.js Server Component)", ((__turbopack_context__) => { + +__turbopack_context__.n(__turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/components/builtin/not-found.js [app-rsc] (ecmascript)")); +}), +"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/components/builtin/forbidden.js [app-rsc] (ecmascript, Next.js Server Component)", ((__turbopack_context__) => { + +__turbopack_context__.n(__turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/components/builtin/forbidden.js [app-rsc] (ecmascript)")); +}), +"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/components/builtin/unauthorized.js [app-rsc] (ecmascript, Next.js Server Component)", ((__turbopack_context__) => { + +__turbopack_context__.n(__turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/components/builtin/unauthorized.js [app-rsc] (ecmascript)")); +}), +"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/build/templates/app-page.js?page=/members/new/page { GLOBAL_ERROR_MODULE => \"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/components/builtin/global-error.js [app-rsc] (ecmascript, Next.js Server Component)\", MODULE_0 => \"[project]/Documents/go-new/chinese-family-tree/app/layout.tsx [app-rsc] (ecmascript, Next.js Server Component)\", MODULE_1 => \"[project]/Documents/go-new/chinese-family-tree/app/loading.tsx [app-rsc] (ecmascript, Next.js Server Component)\", MODULE_2 => \"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/components/builtin/not-found.js [app-rsc] (ecmascript, Next.js Server Component)\", MODULE_3 => \"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/components/builtin/forbidden.js [app-rsc] (ecmascript, Next.js Server Component)\", MODULE_4 => \"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/components/builtin/unauthorized.js [app-rsc] (ecmascript, Next.js Server Component)\", MODULE_5 => \"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/components/builtin/global-error.js [app-rsc] (ecmascript, Next.js Server Component)\", MODULE_6 => \"[project]/Documents/go-new/chinese-family-tree/app/members/loading.tsx [app-rsc] (ecmascript, Next.js Server Component)\", MODULE_7 => \"[project]/Documents/go-new/chinese-family-tree/app/members/new/page.tsx [app-rsc] (ecmascript, Next.js Server Component)\" } [app-rsc] (ecmascript) ", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "__next_app__", + ()=>__next_app__, + "handler", + ()=>handler, + "routeModule", + ()=>routeModule +]); +var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$module$2e$compiled$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/server/route-modules/app-page/module.compiled.js [app-ssr] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$route$2d$kind$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$2c$__Next$2e$js__server__utility$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/server/route-kind.js [app-rsc] (ecmascript, Next.js server utility)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$instrumentation$2f$utils$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/server/instrumentation/utils.js [app-rsc] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$trace$2f$tracer$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/server/lib/trace/tracer.js [app-rsc] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$request$2d$meta$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/server/request-meta.js [app-rsc] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$trace$2f$constants$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/server/lib/trace/constants.js [app-rsc] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$interop$2d$default$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/server/app-render/interop-default.js [app-rsc] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$strip$2d$flight$2d$headers$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/server/app-render/strip-flight-headers.js [app-rsc] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$base$2d$http$2f$node$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/server/base-http/node.js [app-rsc] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$experimental$2f$ppr$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/server/lib/experimental/ppr.js [app-rsc] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$request$2f$fallback$2d$params$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/server/request/fallback-params.js [app-rsc] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$encryption$2d$utils$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/server/app-render/encryption-utils.js [app-rsc] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$streaming$2d$metadata$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/server/lib/streaming-metadata.js [app-rsc] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$action$2d$utils$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/server/app-render/action-utils.js [app-rsc] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$app$2d$paths$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/shared/lib/router/utils/app-paths.js [app-rsc] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$server$2d$action$2d$request$2d$meta$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/server/lib/server-action-request-meta.js [app-rsc] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$client$2f$components$2f$app$2d$router$2d$headers$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/client/components/app-router-headers.js [app-rsc] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$is$2d$bot$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__$3c$locals$3e$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/shared/lib/router/utils/is-bot.js [app-rsc] (ecmascript) "); +var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$response$2d$cache$2f$index$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__$3c$locals$3e$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/server/response-cache/index.js [app-rsc] (ecmascript) "); +var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$response$2d$cache$2f$types$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/server/response-cache/types.js [app-rsc] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$fallback$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/lib/fallback.js [app-rsc] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$render$2d$result$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/server/render-result.js [app-rsc] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$constants$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/lib/constants.js [app-rsc] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$stream$2d$utils$2f$encoded$2d$tags$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/server/stream-utils/encoded-tags.js [app-rsc] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$send$2d$payload$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/server/send-payload.js [app-rsc] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$externals$5d2f$next$2f$dist$2f$shared$2f$lib$2f$no$2d$fallback$2d$error$2e$external$2e$js__$5b$external$5d$__$28$next$2f$dist$2f$shared$2f$lib$2f$no$2d$fallback$2d$error$2e$external$2e$js$2c$__cjs$29$__ = __turbopack_context__.i("[externals]/next/dist/shared/lib/no-fallback-error.external.js [external] (next/dist/shared/lib/no-fallback-error.external.js, cjs)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$client$2f$components$2f$builtin$2f$global$2d$error$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$2c$__Next$2e$js__Server__Component$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/components/builtin/global-error.js [app-rsc] (ecmascript, Next.js Server Component)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$entry$2d$base$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$2c$__Next$2e$js__server__utility$29$__$3c$locals$3e$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/server/app-render/entry-base.js [app-rsc] (ecmascript, Next.js server utility) "); +var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$entry$2d$base$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$2c$__Next$2e$js__server__utility$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/server/app-render/entry-base.js [app-rsc] (ecmascript, Next.js server utility)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$client$2f$components$2f$redirect$2d$status$2d$code$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/client/components/redirect-status-code.js [app-rsc] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$invariant$2d$error$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/shared/lib/invariant-error.js [app-rsc] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$scheduler$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/lib/scheduler.js [app-rsc] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$interception$2d$routes$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/shared/lib/router/utils/interception-routes.js [app-rsc] (ecmascript)"); +const __TURBOPACK__layout__$23$0__ = ()=>__turbopack_context__.r("[project]/Documents/go-new/chinese-family-tree/app/layout.tsx [app-rsc] (ecmascript, Next.js Server Component)"); +const __TURBOPACK__loading__$23$1__ = ()=>__turbopack_context__.r("[project]/Documents/go-new/chinese-family-tree/app/loading.tsx [app-rsc] (ecmascript, Next.js Server Component)"); +const __TURBOPACK__not$2d$found__$23$2__ = ()=>__turbopack_context__.r("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/components/builtin/not-found.js [app-rsc] (ecmascript, Next.js Server Component)"); +const __TURBOPACK__forbidden__$23$3__ = ()=>__turbopack_context__.r("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/components/builtin/forbidden.js [app-rsc] (ecmascript, Next.js Server Component)"); +const __TURBOPACK__unauthorized__$23$4__ = ()=>__turbopack_context__.r("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/components/builtin/unauthorized.js [app-rsc] (ecmascript, Next.js Server Component)"); +const __TURBOPACK__global$2d$error__$23$5__ = ()=>__turbopack_context__.r("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/components/builtin/global-error.js [app-rsc] (ecmascript, Next.js Server Component)"); +const __TURBOPACK__loading__$23$6__ = ()=>__turbopack_context__.r("[project]/Documents/go-new/chinese-family-tree/app/members/loading.tsx [app-rsc] (ecmascript, Next.js Server Component)"); +const __TURBOPACK__page__$23$7__ = ()=>__turbopack_context__.r("[project]/Documents/go-new/chinese-family-tree/app/members/new/page.tsx [app-rsc] (ecmascript, Next.js Server Component)"); +; +; +; +; +; +; +; +; +; +; +; +; +; +; +; +; +; +; +; +; +; +; +; +; +; +// We inject the tree and pages here so that we can use them in the route +// module. +const tree = [ + "", + { + "children": [ + "members", + { + "children": [ + "new", + { + "children": [ + "__PAGE__", + {}, + { + metadata: {}, + "page": [ + __TURBOPACK__page__$23$7__, + "[project]/Documents/go-new/chinese-family-tree/app/members/new/page.tsx" + ] + } + ] + }, + { + metadata: {} + } + ] + }, + { + metadata: {}, + "loading": [ + __TURBOPACK__loading__$23$6__, + "[project]/Documents/go-new/chinese-family-tree/app/members/loading.tsx" + ] + } + ] + }, + { + "layout": [ + __TURBOPACK__layout__$23$0__, + "[project]/Documents/go-new/chinese-family-tree/app/layout.tsx" + ], + "loading": [ + __TURBOPACK__loading__$23$1__, + "[project]/Documents/go-new/chinese-family-tree/app/loading.tsx" + ], + "not-found": [ + __TURBOPACK__not$2d$found__$23$2__, + "[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/components/builtin/not-found.js" + ], + "forbidden": [ + __TURBOPACK__forbidden__$23$3__, + "[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/components/builtin/forbidden.js" + ], + "unauthorized": [ + __TURBOPACK__unauthorized__$23$4__, + "[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/components/builtin/unauthorized.js" + ], + "global-error": [ + __TURBOPACK__global$2d$error__$23$5__, + "[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/components/builtin/global-error.js" + ] + } +]; +; +; +const __next_app_require__ = __turbopack_context__.r.bind(__turbopack_context__); +const __next_app_load_chunk__ = __turbopack_context__.l.bind(__turbopack_context__); +const __next_app__ = { + require: __next_app_require__, + loadChunk: __next_app_load_chunk__ +}; +; +; +; +; +; +; +const routeModule = new __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$module$2e$compiled$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["AppPageRouteModule"]({ + definition: { + kind: __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$route$2d$kind$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$2c$__Next$2e$js__server__utility$29$__["RouteKind"].APP_PAGE, + page: "/members/new/page", + pathname: "/members/new", + // The following aren't used in production. + bundlePath: '', + filename: '', + appPaths: [] + }, + userland: { + loaderTree: tree + }, + distDir: ("TURBOPACK compile-time value", ".next/dev") || '', + relativeProjectDir: ("TURBOPACK compile-time value", "") || '' +}); +async function handler(req, res, ctx) { + var _this; + if (routeModule.isDev) { + (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$request$2d$meta$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["addRequestMeta"])(req, 'devRequestTimingInternalsEnd', process.hrtime.bigint()); + } + let srcPage = "/members/new/page"; + // turbopack doesn't normalize `/index` in the page name + // so we need to to process dynamic routes properly + // TODO: fix turbopack providing differing value from webpack + if ("TURBOPACK compile-time truthy", 1) { + srcPage = srcPage.replace(/\/index$/, '') || '/'; + } else if (srcPage === '/index') { + // we always normalize /index specifically + srcPage = '/'; + } + const multiZoneDraftMode = ("TURBOPACK compile-time value", false); + const isMinimalMode = Boolean(("TURBOPACK compile-time value", false) || (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$request$2d$meta$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["getRequestMeta"])(req, 'minimalMode')); + const prepareResult = await routeModule.prepare(req, res, { + srcPage, + multiZoneDraftMode + }); + if (!prepareResult) { + res.statusCode = 400; + res.end('Bad Request'); + ctx.waitUntil == null ? void 0 : ctx.waitUntil.call(ctx, Promise.resolve()); + return null; + } + const { buildId, query, params, pageIsDynamic, buildManifest, nextFontManifest, reactLoadableManifest, serverActionsManifest, clientReferenceManifest, subresourceIntegrityManifest, prerenderManifest, isDraftMode, resolvedPathname, revalidateOnlyGenerated, routerServerContext, nextConfig, parsedUrl, interceptionRoutePatterns } = prepareResult; + const normalizedSrcPage = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$app$2d$paths$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["normalizeAppPath"])(srcPage); + let { isOnDemandRevalidate } = prepareResult; + // We use the resolvedPathname instead of the parsedUrl.pathname because it + // is not rewritten as resolvedPathname is. This will ensure that the correct + // prerender info is used instead of using the original pathname as the + // source. If however PPR is enabled and cacheComponents is disabled, we + // treat the pathname as dynamic. Currently, there's a bug in the PPR + // implementation that incorrectly leaves %%drp placeholders in the output of + // parallel routes. This is addressed with cacheComponents. + const prerenderInfo = nextConfig.experimental.ppr && !nextConfig.cacheComponents && (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$interception$2d$routes$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["isInterceptionRouteAppPath"])(resolvedPathname) ? null : routeModule.match(resolvedPathname, prerenderManifest); + const isPrerendered = !!prerenderManifest.routes[resolvedPathname]; + const userAgent = req.headers['user-agent'] || ''; + const botType = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$is$2d$bot$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__$3c$locals$3e$__["getBotType"])(userAgent); + const isHtmlBot = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$streaming$2d$metadata$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["isHtmlBotRequest"])(req); + /** + * If true, this indicates that the request being made is for an app + * prefetch request. + */ const isPrefetchRSCRequest = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$request$2d$meta$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["getRequestMeta"])(req, 'isPrefetchRSCRequest') ?? req.headers[__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$client$2f$components$2f$app$2d$router$2d$headers$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["NEXT_ROUTER_PREFETCH_HEADER"]] === '1' // exclude runtime prefetches, which use '2' + ; + // NOTE: Don't delete headers[RSC] yet, it still needs to be used in renderToHTML later + const isRSCRequest = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$request$2d$meta$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["getRequestMeta"])(req, 'isRSCRequest') ?? Boolean(req.headers[__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$client$2f$components$2f$app$2d$router$2d$headers$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["RSC_HEADER"]]); + const isPossibleServerAction = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$server$2d$action$2d$request$2d$meta$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["getIsPossibleServerAction"])(req); + /** + * If the route being rendered is an app page, and the ppr feature has been + * enabled, then the given route _could_ support PPR. + */ const couldSupportPPR = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$experimental$2f$ppr$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["checkIsAppPPREnabled"])(nextConfig.experimental.ppr); + // When enabled, this will allow the use of the `?__nextppronly` query to + // enable debugging of the static shell. + const hasDebugStaticShellQuery = ("TURBOPACK compile-time value", false) === '1' && typeof query.__nextppronly !== 'undefined' && couldSupportPPR; + // When enabled, this will allow the use of the `?__nextppronly` query + // to enable debugging of the fallback shell. + const hasDebugFallbackShellQuery = hasDebugStaticShellQuery && query.__nextppronly === 'fallback'; + // This page supports PPR if it is marked as being `PARTIALLY_STATIC` in the + // prerender manifest and this is an app page. + const isRoutePPREnabled = couldSupportPPR && (((_this = prerenderManifest.routes[normalizedSrcPage] ?? prerenderManifest.dynamicRoutes[normalizedSrcPage]) == null ? void 0 : _this.renderingMode) === 'PARTIALLY_STATIC' || // Ideally we'd want to check the appConfig to see if this page has PPR + // enabled or not, but that would require plumbing the appConfig through + // to the server during development. We assume that the page supports it + // but only during development. + hasDebugStaticShellQuery && (routeModule.isDev === true || (routerServerContext == null ? void 0 : routerServerContext.experimentalTestProxy) === true)); + const isDebugStaticShell = hasDebugStaticShellQuery && isRoutePPREnabled; + // We should enable debugging dynamic accesses when the static shell + // debugging has been enabled and we're also in development mode. + const isDebugDynamicAccesses = isDebugStaticShell && routeModule.isDev === true; + const isDebugFallbackShell = hasDebugFallbackShellQuery && isRoutePPREnabled; + // If we're in minimal mode, then try to get the postponed information from + // the request metadata. If available, use it for resuming the postponed + // render. + const minimalPostponed = isRoutePPREnabled ? (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$request$2d$meta$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["getRequestMeta"])(req, 'postponed') : undefined; + // If PPR is enabled, and this is a RSC request (but not a prefetch), then + // we can use this fact to only generate the flight data for the request + // because we can't cache the HTML (as it's also dynamic). + let isDynamicRSCRequest = isRoutePPREnabled && isRSCRequest && !isPrefetchRSCRequest; + // During a PPR revalidation, the RSC request is not dynamic if we do not have the postponed data. + // We only attach the postponed data during a resume. If there's no postponed data, then it must be a revalidation. + // This is to ensure that we don't bypass the cache during a revalidation. + if (isMinimalMode) { + isDynamicRSCRequest = isDynamicRSCRequest && !!minimalPostponed; + } + // Need to read this before it's stripped by stripFlightHeaders. We don't + // need to transfer it to the request meta because it's only read + // within this function; the static segment data should have already been + // generated, so we will always either return a static response or a 404. + const segmentPrefetchHeader = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$request$2d$meta$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["getRequestMeta"])(req, 'segmentPrefetchRSCRequest'); + // TODO: investigate existing bug with shouldServeStreamingMetadata always + // being true for a revalidate due to modifying the base-server this.renderOpts + // when fixing this to correct logic it causes hydration issue since we set + // serveStreamingMetadata to true during export + const serveStreamingMetadata = isHtmlBot && isRoutePPREnabled ? false : !userAgent ? true : (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$streaming$2d$metadata$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["shouldServeStreamingMetadata"])(userAgent, nextConfig.htmlLimitedBots); + const isSSG = Boolean((prerenderInfo || isPrerendered || prerenderManifest.routes[normalizedSrcPage]) && // If this is a html bot request and PPR is enabled, then we don't want + // to serve a static response. + !(isHtmlBot && isRoutePPREnabled)); + // When a page supports cacheComponents, we can support RDC for Navigations + const supportsRDCForNavigations = isRoutePPREnabled && nextConfig.cacheComponents === true; + // In development, we always want to generate dynamic HTML. + const supportsDynamicResponse = // a data request, in which case we only produce static HTML. + routeModule.isDev === true || // If this is not SSG or does not have static paths, then it supports + // dynamic HTML. + !isSSG || // If this request has provided postponed data, it supports dynamic + // HTML. + typeof minimalPostponed === 'string' || // If this handler supports onCacheEntryV2, then we can only support + // dynamic responses if it's a dynamic RSC request and not in minimal mode. If it + // doesn't support it we must fallback to the default behavior. + (supportsRDCForNavigations && (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$request$2d$meta$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["getRequestMeta"])(req, 'onCacheEntryV2') ? // RSC request, we'll pass the minimal postponed data to the render + // which will trigger the `supportsDynamicResponse` to be true. + isDynamicRSCRequest && !isMinimalMode : isDynamicRSCRequest); + // When html bots request PPR page, perform the full dynamic rendering. + const shouldWaitOnAllReady = isHtmlBot && isRoutePPREnabled; + let ssgCacheKey = null; + if (!isDraftMode && isSSG && !supportsDynamicResponse && !isPossibleServerAction && !minimalPostponed && !isDynamicRSCRequest) { + ssgCacheKey = resolvedPathname; + } + // the staticPathKey differs from ssgCacheKey since + // ssgCacheKey is null in dev since we're always in "dynamic" + // mode in dev to bypass the cache, but we still need to honor + // dynamicParams = false in dev mode + let staticPathKey = ssgCacheKey; + if (!staticPathKey && routeModule.isDev) { + staticPathKey = resolvedPathname; + } + // If this is a request for an app path that should be statically generated + // and we aren't in the edge runtime, strip the flight headers so it will + // generate the static response. + if (!routeModule.isDev && !isDraftMode && isSSG && isRSCRequest && !isDynamicRSCRequest) { + (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$strip$2d$flight$2d$headers$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["stripFlightHeaders"])(req.headers); + } + const ComponentMod = { + ...__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$entry$2d$base$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$2c$__Next$2e$js__server__utility$29$__, + tree, + GlobalError: __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$client$2f$components$2f$builtin$2f$global$2d$error$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$2c$__Next$2e$js__Server__Component$29$__["default"], + handler, + routeModule, + __next_app__ + }; + // Before rendering (which initializes component tree modules), we have to + // set the reference manifests to our global store so Server Action's + // encryption util can access to them at the top level of the page module. + if (serverActionsManifest && clientReferenceManifest) { + (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$encryption$2d$utils$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["setReferenceManifestsSingleton"])({ + page: srcPage, + clientReferenceManifest, + serverActionsManifest, + serverModuleMap: (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$action$2d$utils$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["createServerModuleMap"])({ + serverActionsManifest + }) + }); + } + const method = req.method || 'GET'; + const tracer = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$trace$2f$tracer$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["getTracer"])(); + const activeSpan = tracer.getActiveScopeSpan(); + const render404 = async ()=>{ + // TODO: should route-module itself handle rendering the 404 + if (routerServerContext == null ? void 0 : routerServerContext.render404) { + await routerServerContext.render404(req, res, parsedUrl, false); + } else { + res.end('This page could not be found'); + } + return null; + }; + try { + const varyHeader = routeModule.getVaryHeader(resolvedPathname, interceptionRoutePatterns); + res.setHeader('Vary', varyHeader); + const invokeRouteModule = async (span, context)=>{ + const nextReq = new __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$base$2d$http$2f$node$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["NodeNextRequest"](req); + const nextRes = new __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$base$2d$http$2f$node$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["NodeNextResponse"](res); + return routeModule.render(nextReq, nextRes, context).finally(()=>{ + if (!span) return; + span.setAttributes({ + 'http.status_code': res.statusCode, + 'next.rsc': false + }); + const rootSpanAttributes = tracer.getRootSpanAttributes(); + // We were unable to get attributes, probably OTEL is not enabled + if (!rootSpanAttributes) { + return; + } + if (rootSpanAttributes.get('next.span_type') !== __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$trace$2f$constants$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["BaseServerSpan"].handleRequest) { + console.warn(`Unexpected root span type '${rootSpanAttributes.get('next.span_type')}'. Please report this Next.js issue https://github.com/vercel/next.js`); + return; + } + const route = rootSpanAttributes.get('next.route'); + if (route) { + const name = `${method} ${route}`; + span.setAttributes({ + 'next.route': route, + 'http.route': route, + 'next.span_name': name + }); + span.updateName(name); + } else { + span.updateName(`${method} ${srcPage}`); + } + }); + }; + const incrementalCache = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$request$2d$meta$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["getRequestMeta"])(req, 'incrementalCache'); + const doRender = async ({ span, postponed, fallbackRouteParams, forceStaticRender })=>{ + const context = { + query, + params, + page: normalizedSrcPage, + sharedContext: { + buildId + }, + serverComponentsHmrCache: (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$request$2d$meta$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["getRequestMeta"])(req, 'serverComponentsHmrCache'), + fallbackRouteParams, + renderOpts: { + App: ()=>null, + Document: ()=>null, + pageConfig: {}, + ComponentMod, + Component: (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$interop$2d$default$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["interopDefault"])(ComponentMod), + params, + routeModule, + page: srcPage, + postponed, + shouldWaitOnAllReady, + serveStreamingMetadata, + supportsDynamicResponse: typeof postponed === 'string' || supportsDynamicResponse, + buildManifest, + nextFontManifest, + reactLoadableManifest, + subresourceIntegrityManifest, + serverActionsManifest, + clientReferenceManifest, + setCacheStatus: routerServerContext == null ? void 0 : routerServerContext.setCacheStatus, + setIsrStatus: routerServerContext == null ? void 0 : routerServerContext.setIsrStatus, + setReactDebugChannel: routerServerContext == null ? void 0 : routerServerContext.setReactDebugChannel, + dir: ("TURBOPACK compile-time truthy", 1) ? require('path').join(/* turbopackIgnore: true */ process.cwd(), routeModule.relativeProjectDir) : "TURBOPACK unreachable", + isDraftMode, + botType, + isOnDemandRevalidate, + isPossibleServerAction, + assetPrefix: nextConfig.assetPrefix, + nextConfigOutput: nextConfig.output, + crossOrigin: nextConfig.crossOrigin, + trailingSlash: nextConfig.trailingSlash, + images: nextConfig.images, + previewProps: prerenderManifest.preview, + deploymentId: nextConfig.deploymentId, + enableTainting: nextConfig.experimental.taint, + htmlLimitedBots: nextConfig.htmlLimitedBots, + reactMaxHeadersLength: nextConfig.reactMaxHeadersLength, + multiZoneDraftMode, + incrementalCache, + cacheLifeProfiles: nextConfig.cacheLife, + basePath: nextConfig.basePath, + serverActions: nextConfig.experimental.serverActions, + ...isDebugStaticShell || isDebugDynamicAccesses || isDebugFallbackShell ? { + nextExport: true, + supportsDynamicResponse: false, + isStaticGeneration: true, + isDebugDynamicAccesses: isDebugDynamicAccesses + } : {}, + cacheComponents: Boolean(nextConfig.cacheComponents), + experimental: { + isRoutePPREnabled, + expireTime: nextConfig.expireTime, + staleTimes: nextConfig.experimental.staleTimes, + dynamicOnHover: Boolean(nextConfig.experimental.dynamicOnHover), + inlineCss: Boolean(nextConfig.experimental.inlineCss), + authInterrupts: Boolean(nextConfig.experimental.authInterrupts), + clientTraceMetadata: nextConfig.experimental.clientTraceMetadata || [], + clientParamParsingOrigins: nextConfig.experimental.clientParamParsingOrigins + }, + waitUntil: ctx.waitUntil, + onClose: (cb)=>{ + res.on('close', cb); + }, + onAfterTaskError: ()=>{}, + onInstrumentationRequestError: (error, _request, errorContext)=>routeModule.onRequestError(req, error, errorContext, routerServerContext), + err: (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$request$2d$meta$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["getRequestMeta"])(req, 'invokeError'), + dev: routeModule.isDev + } + }; + if (isDebugStaticShell || isDebugDynamicAccesses) { + context.renderOpts.nextExport = true; + context.renderOpts.supportsDynamicResponse = false; + context.renderOpts.isDebugDynamicAccesses = isDebugDynamicAccesses; + } + // When we're revalidating in the background, we should not allow dynamic + // responses. + if (forceStaticRender) { + context.renderOpts.supportsDynamicResponse = false; + } + const result = await invokeRouteModule(span, context); + const { metadata } = result; + const { cacheControl, headers = {}, fetchTags: cacheTags, fetchMetrics } = metadata; + if (cacheTags) { + headers[__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$constants$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["NEXT_CACHE_TAGS_HEADER"]] = cacheTags; + } + // Pull any fetch metrics from the render onto the request. + ; + req.fetchMetrics = fetchMetrics; + // we don't throw static to dynamic errors in dev as isSSG + // is a best guess in dev since we don't have the prerender pass + // to know whether the path is actually static or not + if (isSSG && (cacheControl == null ? void 0 : cacheControl.revalidate) === 0 && !routeModule.isDev && !isRoutePPREnabled) { + const staticBailoutInfo = metadata.staticBailoutInfo; + const err = Object.defineProperty(new Error(`Page changed from static to dynamic at runtime ${resolvedPathname}${(staticBailoutInfo == null ? void 0 : staticBailoutInfo.description) ? `, reason: ${staticBailoutInfo.description}` : ``}` + `\nsee more here https://nextjs.org/docs/messages/app-static-to-dynamic-error`), "__NEXT_ERROR_CODE", { + value: "E132", + enumerable: false, + configurable: true + }); + if (staticBailoutInfo == null ? void 0 : staticBailoutInfo.stack) { + const stack = staticBailoutInfo.stack; + err.stack = err.message + stack.substring(stack.indexOf('\n')); + } + throw err; + } + return { + value: { + kind: __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$response$2d$cache$2f$types$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["CachedRouteKind"].APP_PAGE, + html: result, + headers, + rscData: metadata.flightData, + postponed: metadata.postponed, + status: metadata.statusCode, + segmentData: metadata.segmentData + }, + cacheControl + }; + }; + const responseGenerator = async ({ hasResolved, previousCacheEntry: previousIncrementalCacheEntry, isRevalidating, span, forceStaticRender = false })=>{ + const isProduction = routeModule.isDev === false; + const didRespond = hasResolved || res.writableEnded; + // skip on-demand revalidate if cache is not present and + // revalidate-if-generated is set + if (isOnDemandRevalidate && revalidateOnlyGenerated && !previousIncrementalCacheEntry && !isMinimalMode) { + if (routerServerContext == null ? void 0 : routerServerContext.render404) { + await routerServerContext.render404(req, res); + } else { + res.statusCode = 404; + res.end('This page could not be found'); + } + return null; + } + let fallbackMode; + if (prerenderInfo) { + fallbackMode = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$fallback$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["parseFallbackField"])(prerenderInfo.fallback); + } + // When serving a HTML bot request, we want to serve a blocking render and + // not the prerendered page. This ensures that the correct content is served + // to the bot in the head. + if (fallbackMode === __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$fallback$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["FallbackMode"].PRERENDER && (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$is$2d$bot$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__$3c$locals$3e$__["isBot"])(userAgent)) { + if (!isRoutePPREnabled || isHtmlBot) { + fallbackMode = __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$fallback$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["FallbackMode"].BLOCKING_STATIC_RENDER; + } + } + if ((previousIncrementalCacheEntry == null ? void 0 : previousIncrementalCacheEntry.isStale) === -1) { + isOnDemandRevalidate = true; + } + // TODO: adapt for PPR + // only allow on-demand revalidate for fallback: true/blocking + // or for prerendered fallback: false paths + if (isOnDemandRevalidate && (fallbackMode !== __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$fallback$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["FallbackMode"].NOT_FOUND || previousIncrementalCacheEntry)) { + fallbackMode = __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$fallback$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["FallbackMode"].BLOCKING_STATIC_RENDER; + } + if (!isMinimalMode && fallbackMode !== __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$fallback$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["FallbackMode"].BLOCKING_STATIC_RENDER && staticPathKey && !didRespond && !isDraftMode && pageIsDynamic && (isProduction || !isPrerendered)) { + // if the page has dynamicParams: false and this pathname wasn't + // prerendered trigger the no fallback handling + if (// getStaticPaths. + (isProduction || prerenderInfo) && // When fallback isn't present, abort this render so we 404 + fallbackMode === __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$fallback$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["FallbackMode"].NOT_FOUND) { + if (nextConfig.experimental.adapterPath) { + return await render404(); + } + throw new __TURBOPACK__imported__module__$5b$externals$5d2f$next$2f$dist$2f$shared$2f$lib$2f$no$2d$fallback$2d$error$2e$external$2e$js__$5b$external$5d$__$28$next$2f$dist$2f$shared$2f$lib$2f$no$2d$fallback$2d$error$2e$external$2e$js$2c$__cjs$29$__["NoFallbackError"](); + } + // When cacheComponents is enabled, we can use the fallback + // response if the request is not a dynamic RSC request because the + // RSC data when this feature flag is enabled does not contain any + // param references. Without this feature flag enabled, the RSC data + // contains param references, and therefore we can't use the fallback. + if (isRoutePPREnabled && (nextConfig.cacheComponents ? !isDynamicRSCRequest : !isRSCRequest)) { + const cacheKey = isProduction && typeof (prerenderInfo == null ? void 0 : prerenderInfo.fallback) === 'string' ? prerenderInfo.fallback : normalizedSrcPage; + const fallbackRouteParams = // can use the manifest fallback route params. + isProduction && (prerenderInfo == null ? void 0 : prerenderInfo.fallbackRouteParams) ? (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$request$2f$fallback$2d$params$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["createOpaqueFallbackRouteParams"])(prerenderInfo.fallbackRouteParams) : isDebugFallbackShell ? (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$request$2f$fallback$2d$params$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["getFallbackRouteParams"])(normalizedSrcPage, routeModule) : null; + // We use the response cache here to handle the revalidation and + // management of the fallback shell. + const fallbackResponse = await routeModule.handleResponse({ + cacheKey, + req, + nextConfig, + routeKind: __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$route$2d$kind$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$2c$__Next$2e$js__server__utility$29$__["RouteKind"].APP_PAGE, + isFallback: true, + prerenderManifest, + isRoutePPREnabled, + responseGenerator: async ()=>doRender({ + span, + // We pass `undefined` as rendering a fallback isn't resumed + // here. + postponed: undefined, + fallbackRouteParams, + forceStaticRender: false + }), + waitUntil: ctx.waitUntil, + isMinimalMode + }); + // If the fallback response was set to null, then we should return null. + if (fallbackResponse === null) return null; + // Otherwise, if we did get a fallback response, we should return it. + if (fallbackResponse) { + // Remove the cache control from the response to prevent it from being + // used in the surrounding cache. + delete fallbackResponse.cacheControl; + return fallbackResponse; + } + } + } + // Only requests that aren't revalidating can be resumed. If we have the + // minimal postponed data, then we should resume the render with it. + let postponed = !isOnDemandRevalidate && !isRevalidating && minimalPostponed ? minimalPostponed : undefined; + // If this is a dynamic RSC request, we should use the postponed data from + // the static render (if available). This ensures that we can utilize the + // resume data cache (RDC) from the static render to ensure that the data + // is consistent between the static and dynamic renders. + if (supportsRDCForNavigations && ("TURBOPACK compile-time value", "nodejs") !== 'edge' && !isMinimalMode && incrementalCache && isDynamicRSCRequest && // We don't typically trigger an on-demand revalidation for dynamic RSC + // requests, as we're typically revalidating the page in the background + // instead. However, if the cache entry is stale, we should trigger a + // background revalidation on dynamic RSC requests. This prevents us + // from entering an infinite loop of revalidations. + !forceStaticRender) { + const incrementalCacheEntry = await incrementalCache.get(resolvedPathname, { + kind: __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$response$2d$cache$2f$types$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["IncrementalCacheKind"].APP_PAGE, + isRoutePPREnabled: true, + isFallback: false + }); + // If the cache entry is found, we should use the postponed data from + // the cache. + if (incrementalCacheEntry && incrementalCacheEntry.value && incrementalCacheEntry.value.kind === __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$response$2d$cache$2f$types$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["CachedRouteKind"].APP_PAGE) { + // CRITICAL: we're assigning the postponed data from the cache entry + // here as we're using the RDC to resume the render. + postponed = incrementalCacheEntry.value.postponed; + // If the cache entry is stale, we should trigger a background + // revalidation so that subsequent requests will get a fresh response. + if (incrementalCacheEntry && // We want to trigger this flow if the cache entry is stale and if + // the requested revalidation flow is either foreground or + // background. + (incrementalCacheEntry.isStale === -1 || incrementalCacheEntry.isStale === true)) { + // We want to schedule this on the next tick to ensure that the + // render is not blocked on it. + (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$scheduler$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["scheduleOnNextTick"])(async ()=>{ + const responseCache = routeModule.getResponseCache(req); + try { + await responseCache.revalidate(resolvedPathname, incrementalCache, isRoutePPREnabled, false, (c)=>responseGenerator({ + ...c, + // CRITICAL: we need to set this to true as we're + // revalidating in the background and typically this dynamic + // RSC request is not treated as static. + forceStaticRender: true + }), // previous cache entry here (which is stale) will switch on + // isOnDemandRevalidate and break the prerendering. + null, hasResolved, ctx.waitUntil); + } catch (err) { + console.error('Error revalidating the page in the background', err); + } + }); + } + } + } + // When we're in minimal mode, if we're trying to debug the static shell, + // we should just return nothing instead of resuming the dynamic render. + if ((isDebugStaticShell || isDebugDynamicAccesses) && typeof postponed !== 'undefined') { + return { + cacheControl: { + revalidate: 1, + expire: undefined + }, + value: { + kind: __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$response$2d$cache$2f$types$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["CachedRouteKind"].PAGES, + html: __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$render$2d$result$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["default"].EMPTY, + pageData: {}, + headers: undefined, + status: undefined + } + }; + } + const fallbackRouteParams = // can use the manifest fallback route params if we need to render the + // fallback shell. + isProduction && (prerenderInfo == null ? void 0 : prerenderInfo.fallbackRouteParams) && (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$request$2d$meta$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["getRequestMeta"])(req, 'renderFallbackShell') ? (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$request$2f$fallback$2d$params$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["createOpaqueFallbackRouteParams"])(prerenderInfo.fallbackRouteParams) : isDebugFallbackShell ? (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$request$2f$fallback$2d$params$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["getFallbackRouteParams"])(normalizedSrcPage, routeModule) : null; + // Perform the render. + return doRender({ + span, + postponed, + fallbackRouteParams, + forceStaticRender + }); + }; + const handleResponse = async (span)=>{ + var _cacheEntry_value, _cachedData_headers; + const cacheEntry = await routeModule.handleResponse({ + cacheKey: ssgCacheKey, + responseGenerator: (c)=>responseGenerator({ + span, + ...c + }), + routeKind: __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$route$2d$kind$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$2c$__Next$2e$js__server__utility$29$__["RouteKind"].APP_PAGE, + isOnDemandRevalidate, + isRoutePPREnabled, + req, + nextConfig, + prerenderManifest, + waitUntil: ctx.waitUntil, + isMinimalMode + }); + if (isDraftMode) { + res.setHeader('Cache-Control', 'private, no-cache, no-store, max-age=0, must-revalidate'); + } + // In dev, we should not cache pages for any reason. + if (routeModule.isDev) { + res.setHeader('Cache-Control', 'no-store, must-revalidate'); + } + if (!cacheEntry) { + if (ssgCacheKey) { + // A cache entry might not be generated if a response is written + // in `getInitialProps` or `getServerSideProps`, but those shouldn't + // have a cache key. If we do have a cache key but we don't end up + // with a cache entry, then either Next.js or the application has a + // bug that needs fixing. + throw Object.defineProperty(new Error('invariant: cache entry required but not generated'), "__NEXT_ERROR_CODE", { + value: "E62", + enumerable: false, + configurable: true + }); + } + return null; + } + if (((_cacheEntry_value = cacheEntry.value) == null ? void 0 : _cacheEntry_value.kind) !== __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$response$2d$cache$2f$types$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["CachedRouteKind"].APP_PAGE) { + var _cacheEntry_value1; + throw Object.defineProperty(new Error(`Invariant app-page handler received invalid cache entry ${(_cacheEntry_value1 = cacheEntry.value) == null ? void 0 : _cacheEntry_value1.kind}`), "__NEXT_ERROR_CODE", { + value: "E707", + enumerable: false, + configurable: true + }); + } + const didPostpone = typeof cacheEntry.value.postponed === 'string'; + if (isSSG && // We don't want to send a cache header for requests that contain dynamic + // data. If this is a Dynamic RSC request or wasn't a Prefetch RSC + // request, then we should set the cache header. + !isDynamicRSCRequest && (!didPostpone || isPrefetchRSCRequest)) { + if (!isMinimalMode) { + // set x-nextjs-cache header to match the header + // we set for the image-optimizer + res.setHeader('x-nextjs-cache', isOnDemandRevalidate ? 'REVALIDATED' : cacheEntry.isMiss ? 'MISS' : cacheEntry.isStale ? 'STALE' : 'HIT'); + } + // Set a header used by the client router to signal the response is static + // and should respect the `static` cache staleTime value. + res.setHeader(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$client$2f$components$2f$app$2d$router$2d$headers$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["NEXT_IS_PRERENDER_HEADER"], '1'); + } + const { value: cachedData } = cacheEntry; + // Coerce the cache control parameter from the render. + let cacheControl; + // If this is a resume request in minimal mode it is streamed with dynamic + // content and should not be cached. + if (minimalPostponed) { + cacheControl = { + revalidate: 0, + expire: undefined + }; + } else if (isDynamicRSCRequest) { + cacheControl = { + revalidate: 0, + expire: undefined + }; + } else if (!routeModule.isDev) { + // If this is a preview mode request, we shouldn't cache it + if (isDraftMode) { + cacheControl = { + revalidate: 0, + expire: undefined + }; + } else if (!isSSG) { + if (!res.getHeader('Cache-Control')) { + cacheControl = { + revalidate: 0, + expire: undefined + }; + } + } else if (cacheEntry.cacheControl) { + // If the cache entry has a cache control with a revalidate value that's + // a number, use it. + if (typeof cacheEntry.cacheControl.revalidate === 'number') { + var _cacheEntry_cacheControl; + if (cacheEntry.cacheControl.revalidate < 1) { + throw Object.defineProperty(new Error(`Invalid revalidate configuration provided: ${cacheEntry.cacheControl.revalidate} < 1`), "__NEXT_ERROR_CODE", { + value: "E22", + enumerable: false, + configurable: true + }); + } + cacheControl = { + revalidate: cacheEntry.cacheControl.revalidate, + expire: ((_cacheEntry_cacheControl = cacheEntry.cacheControl) == null ? void 0 : _cacheEntry_cacheControl.expire) ?? nextConfig.expireTime + }; + } else { + cacheControl = { + revalidate: __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$constants$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["CACHE_ONE_YEAR"], + expire: undefined + }; + } + } + } + cacheEntry.cacheControl = cacheControl; + if (typeof segmentPrefetchHeader === 'string' && (cachedData == null ? void 0 : cachedData.kind) === __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$response$2d$cache$2f$types$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["CachedRouteKind"].APP_PAGE && cachedData.segmentData) { + var _cachedData_headers1; + // This is a prefetch request issued by the client Segment Cache. These + // should never reach the application layer (lambda). We should either + // respond from the cache (HIT) or respond with 204 No Content (MISS). + // Set a header to indicate that PPR is enabled for this route. This + // lets the client distinguish between a regular cache miss and a cache + // miss due to PPR being disabled. In other contexts this header is used + // to indicate that the response contains dynamic data, but here we're + // only using it to indicate that the feature is enabled — the segment + // response itself contains whether the data is dynamic. + res.setHeader(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$client$2f$components$2f$app$2d$router$2d$headers$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["NEXT_DID_POSTPONE_HEADER"], '2'); + // Add the cache tags header to the response if it exists and we're in + // minimal mode while rendering a static page. + const tags = (_cachedData_headers1 = cachedData.headers) == null ? void 0 : _cachedData_headers1[__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$constants$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["NEXT_CACHE_TAGS_HEADER"]]; + if (isMinimalMode && isSSG && tags && typeof tags === 'string') { + res.setHeader(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$constants$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["NEXT_CACHE_TAGS_HEADER"], tags); + } + const matchedSegment = cachedData.segmentData.get(segmentPrefetchHeader); + if (matchedSegment !== undefined) { + // Cache hit + return (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$send$2d$payload$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["sendRenderResult"])({ + req, + res, + generateEtags: nextConfig.generateEtags, + poweredByHeader: nextConfig.poweredByHeader, + result: __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$render$2d$result$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["default"].fromStatic(matchedSegment, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$client$2f$components$2f$app$2d$router$2d$headers$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["RSC_CONTENT_TYPE_HEADER"]), + cacheControl: cacheEntry.cacheControl + }); + } + // Cache miss. Either a cache entry for this route has not been generated + // (which technically should not be possible when PPR is enabled, because + // at a minimum there should always be a fallback entry) or there's no + // match for the requested segment. Respond with a 204 No Content. We + // don't bother to respond with 404, because these requests are only + // issued as part of a prefetch. + res.statusCode = 204; + return (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$send$2d$payload$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["sendRenderResult"])({ + req, + res, + generateEtags: nextConfig.generateEtags, + poweredByHeader: nextConfig.poweredByHeader, + result: __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$render$2d$result$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["default"].EMPTY, + cacheControl: cacheEntry.cacheControl + }); + } + // If there's a callback for `onCacheEntry`, call it with the cache entry + // and the revalidate options. If we support RDC for Navigations, we + // prefer the `onCacheEntryV2` callback. Once RDC for Navigations is the + // default, we can remove the fallback to `onCacheEntry` as + // `onCacheEntryV2` is now fully supported. + const onCacheEntry = supportsRDCForNavigations ? (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$request$2d$meta$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["getRequestMeta"])(req, 'onCacheEntryV2') ?? (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$request$2d$meta$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["getRequestMeta"])(req, 'onCacheEntry') : (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$request$2d$meta$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["getRequestMeta"])(req, 'onCacheEntry'); + if (onCacheEntry) { + const finished = await onCacheEntry(cacheEntry, { + url: (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$request$2d$meta$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["getRequestMeta"])(req, 'initURL') ?? req.url + }); + if (finished) return null; + } + if (cachedData.headers) { + const headers = { + ...cachedData.headers + }; + if (!isMinimalMode || !isSSG) { + delete headers[__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$constants$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["NEXT_CACHE_TAGS_HEADER"]]; + } + for (let [key, value] of Object.entries(headers)){ + if (typeof value === 'undefined') continue; + if (Array.isArray(value)) { + for (const v of value){ + res.appendHeader(key, v); + } + } else if (typeof value === 'number') { + value = value.toString(); + res.appendHeader(key, value); + } else { + res.appendHeader(key, value); + } + } + } + // Add the cache tags header to the response if it exists and we're in + // minimal mode while rendering a static page. + const tags = (_cachedData_headers = cachedData.headers) == null ? void 0 : _cachedData_headers[__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$constants$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["NEXT_CACHE_TAGS_HEADER"]]; + if (isMinimalMode && isSSG && tags && typeof tags === 'string') { + res.setHeader(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$constants$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["NEXT_CACHE_TAGS_HEADER"], tags); + } + // If the request is a data request, then we shouldn't set the status code + // from the response because it should always be 200. This should be gated + // behind the experimental PPR flag. + if (cachedData.status && (!isRSCRequest || !isRoutePPREnabled)) { + res.statusCode = cachedData.status; + } + // Redirect information is encoded in RSC payload, so we don't need to use redirect status codes + if (!isMinimalMode && cachedData.status && __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$client$2f$components$2f$redirect$2d$status$2d$code$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["RedirectStatusCode"][cachedData.status] && isRSCRequest) { + res.statusCode = 200; + } + // Mark that the request did postpone. + if (didPostpone && !isDynamicRSCRequest) { + res.setHeader(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$client$2f$components$2f$app$2d$router$2d$headers$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["NEXT_DID_POSTPONE_HEADER"], '1'); + } + // we don't go through this block when preview mode is true + // as preview mode is a dynamic request (bypasses cache) and doesn't + // generate both HTML and payloads in the same request so continue to just + // return the generated payload + if (isRSCRequest && !isDraftMode) { + // If this is a dynamic RSC request, then stream the response. + if (typeof cachedData.rscData === 'undefined') { + // If the response is not an RSC response, then we can't serve it. + if (cachedData.html.contentType !== __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$client$2f$components$2f$app$2d$router$2d$headers$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["RSC_CONTENT_TYPE_HEADER"]) { + if (nextConfig.cacheComponents) { + res.statusCode = 404; + return (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$send$2d$payload$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["sendRenderResult"])({ + req, + res, + generateEtags: nextConfig.generateEtags, + poweredByHeader: nextConfig.poweredByHeader, + result: __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$render$2d$result$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["default"].EMPTY, + cacheControl: cacheEntry.cacheControl + }); + } else { + // Otherwise this case is not expected. + throw Object.defineProperty(new __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$invariant$2d$error$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["InvariantError"](`Expected RSC response, got ${cachedData.html.contentType}`), "__NEXT_ERROR_CODE", { + value: "E789", + enumerable: false, + configurable: true + }); + } + } + return (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$send$2d$payload$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["sendRenderResult"])({ + req, + res, + generateEtags: nextConfig.generateEtags, + poweredByHeader: nextConfig.poweredByHeader, + result: cachedData.html, + cacheControl: cacheEntry.cacheControl + }); + } + // As this isn't a prefetch request, we should serve the static flight + // data. + return (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$send$2d$payload$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["sendRenderResult"])({ + req, + res, + generateEtags: nextConfig.generateEtags, + poweredByHeader: nextConfig.poweredByHeader, + result: __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$render$2d$result$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["default"].fromStatic(cachedData.rscData, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$client$2f$components$2f$app$2d$router$2d$headers$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["RSC_CONTENT_TYPE_HEADER"]), + cacheControl: cacheEntry.cacheControl + }); + } + // This is a request for HTML data. + const body = cachedData.html; + // If there's no postponed state, we should just serve the HTML. This + // should also be the case for a resume request because it's completed + // as a server render (rather than a static render). + if (!didPostpone || isMinimalMode || isRSCRequest) { + // If we're in test mode, we should add a sentinel chunk to the response + // that's between the static and dynamic parts so we can compare the + // chunks and add assertions. + if ("TURBOPACK compile-time falsy", 0) //TURBOPACK unreachable + ; + return (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$send$2d$payload$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["sendRenderResult"])({ + req, + res, + generateEtags: nextConfig.generateEtags, + poweredByHeader: nextConfig.poweredByHeader, + result: body, + cacheControl: cacheEntry.cacheControl + }); + } + // If we're debugging the static shell or the dynamic API accesses, we + // should just serve the HTML without resuming the render. The returned + // HTML will be the static shell so all the Dynamic API's will be used + // during static generation. + if (isDebugStaticShell || isDebugDynamicAccesses) { + // Since we're not resuming the render, we need to at least add the + // closing body and html tags to create valid HTML. + body.push(new ReadableStream({ + start (controller) { + controller.enqueue(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$stream$2d$utils$2f$encoded$2d$tags$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["ENCODED_TAGS"].CLOSED.BODY_AND_HTML); + controller.close(); + } + })); + return (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$send$2d$payload$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["sendRenderResult"])({ + req, + res, + generateEtags: nextConfig.generateEtags, + poweredByHeader: nextConfig.poweredByHeader, + result: body, + cacheControl: { + revalidate: 0, + expire: undefined + } + }); + } + // If we're in test mode, we should add a sentinel chunk to the response + // that's between the static and dynamic parts so we can compare the + // chunks and add assertions. + if ("TURBOPACK compile-time falsy", 0) //TURBOPACK unreachable + ; + // This request has postponed, so let's create a new transformer that the + // dynamic data can pipe to that will attach the dynamic data to the end + // of the response. + const transformer = new TransformStream(); + body.push(transformer.readable); + // Perform the render again, but this time, provide the postponed state. + // We don't await because we want the result to start streaming now, and + // we've already chained the transformer's readable to the render result. + doRender({ + span, + postponed: cachedData.postponed, + // This is a resume render, not a fallback render, so we don't need to + // set this. + fallbackRouteParams: null, + forceStaticRender: false + }).then(async (result)=>{ + var _result_value; + if (!result) { + throw Object.defineProperty(new Error('Invariant: expected a result to be returned'), "__NEXT_ERROR_CODE", { + value: "E463", + enumerable: false, + configurable: true + }); + } + if (((_result_value = result.value) == null ? void 0 : _result_value.kind) !== __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$response$2d$cache$2f$types$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["CachedRouteKind"].APP_PAGE) { + var _result_value1; + throw Object.defineProperty(new Error(`Invariant: expected a page response, got ${(_result_value1 = result.value) == null ? void 0 : _result_value1.kind}`), "__NEXT_ERROR_CODE", { + value: "E305", + enumerable: false, + configurable: true + }); + } + // Pipe the resume result to the transformer. + await result.value.html.pipeTo(transformer.writable); + }).catch((err)=>{ + // An error occurred during piping or preparing the render, abort + // the transformers writer so we can terminate the stream. + transformer.writable.abort(err).catch((e)=>{ + console.error("couldn't abort transformer", e); + }); + }); + return (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$send$2d$payload$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["sendRenderResult"])({ + req, + res, + generateEtags: nextConfig.generateEtags, + poweredByHeader: nextConfig.poweredByHeader, + result: body, + // We don't want to cache the response if it has postponed data because + // the response being sent to the client it's dynamic parts are streamed + // to the client on the same request. + cacheControl: { + revalidate: 0, + expire: undefined + } + }); + }; + // TODO: activeSpan code path is for when wrapped by + // next-server can be removed when this is no longer used + if (activeSpan) { + await handleResponse(activeSpan); + } else { + return await tracer.withPropagatedContext(req.headers, ()=>tracer.trace(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$trace$2f$constants$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["BaseServerSpan"].handleRequest, { + spanName: `${method} ${srcPage}`, + kind: __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$trace$2f$tracer$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["SpanKind"].SERVER, + attributes: { + 'http.method': method, + 'http.target': req.url + } + }, handleResponse)); + } + } catch (err) { + if (!(err instanceof __TURBOPACK__imported__module__$5b$externals$5d2f$next$2f$dist$2f$shared$2f$lib$2f$no$2d$fallback$2d$error$2e$external$2e$js__$5b$external$5d$__$28$next$2f$dist$2f$shared$2f$lib$2f$no$2d$fallback$2d$error$2e$external$2e$js$2c$__cjs$29$__["NoFallbackError"])) { + await routeModule.onRequestError(req, err, { + routerKind: 'App Router', + routePath: srcPage, + routeType: 'render', + revalidateReason: (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$instrumentation$2f$utils$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["getRevalidateReason"])({ + isStaticGeneration: isSSG, + isOnDemandRevalidate + }) + }, routerServerContext); + } + // rethrow so that we can handle serving error page + throw err; + } +} +// TODO: omit this from production builds, only test builds should include it +/** + * Creates a readable stream that emits a PPR boundary sentinel. + * + * @returns A readable stream that emits a PPR boundary sentinel. + */ function createPPRBoundarySentinel() { + return new ReadableStream({ + start (controller) { + controller.enqueue(new TextEncoder().encode('')); + controller.close(); + } + }); +} //# sourceMappingURL=app-page.js.map +}), +"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/build/templates/app-page.js?page=/members/new/page { GLOBAL_ERROR_MODULE => \"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/components/builtin/global-error.js [app-rsc] (ecmascript, Next.js Server Component)\", MODULE_0 => \"[project]/Documents/go-new/chinese-family-tree/app/layout.tsx [app-rsc] (ecmascript, Next.js Server Component)\", MODULE_1 => \"[project]/Documents/go-new/chinese-family-tree/app/loading.tsx [app-rsc] (ecmascript, Next.js Server Component)\", MODULE_2 => \"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/components/builtin/not-found.js [app-rsc] (ecmascript, Next.js Server Component)\", MODULE_3 => \"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/components/builtin/forbidden.js [app-rsc] (ecmascript, Next.js Server Component)\", MODULE_4 => \"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/components/builtin/unauthorized.js [app-rsc] (ecmascript, Next.js Server Component)\", MODULE_5 => \"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/components/builtin/global-error.js [app-rsc] (ecmascript, Next.js Server Component)\", MODULE_6 => \"[project]/Documents/go-new/chinese-family-tree/app/members/loading.tsx [app-rsc] (ecmascript, Next.js Server Component)\", MODULE_7 => \"[project]/Documents/go-new/chinese-family-tree/app/members/new/page.tsx [app-rsc] (ecmascript, Next.js Server Component)\" } [app-rsc] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "ClientPageRoot", + ()=>__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$entry$2d$base$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$2c$__Next$2e$js__server__utility$29$__["ClientPageRoot"], + "ClientSegmentRoot", + ()=>__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$entry$2d$base$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$2c$__Next$2e$js__server__utility$29$__["ClientSegmentRoot"], + "Fragment", + ()=>__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$entry$2d$base$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$2c$__Next$2e$js__server__utility$29$__["Fragment"], + "GlobalError", + ()=>__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$client$2f$components$2f$builtin$2f$global$2d$error$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$2c$__Next$2e$js__Server__Component$29$__["default"], + "HTTPAccessFallbackBoundary", + ()=>__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$entry$2d$base$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$2c$__Next$2e$js__server__utility$29$__["HTTPAccessFallbackBoundary"], + "LayoutRouter", + ()=>__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$entry$2d$base$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$2c$__Next$2e$js__server__utility$29$__["LayoutRouter"], + "Postpone", + ()=>__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$entry$2d$base$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$2c$__Next$2e$js__server__utility$29$__["Postpone"], + "RenderFromTemplateContext", + ()=>__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$entry$2d$base$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$2c$__Next$2e$js__server__utility$29$__["RenderFromTemplateContext"], + "RootLayoutBoundary", + ()=>__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$entry$2d$base$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$2c$__Next$2e$js__server__utility$29$__["RootLayoutBoundary"], + "SegmentViewNode", + ()=>__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$entry$2d$base$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$2c$__Next$2e$js__server__utility$29$__["SegmentViewNode"], + "SegmentViewStateNode", + ()=>__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$entry$2d$base$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$2c$__Next$2e$js__server__utility$29$__["SegmentViewStateNode"], + "__next_app__", + ()=>__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$build$2f$templates$2f$app$2d$page$2e$js$3f$page$3d2f$members$2f$new$2f$page__$7b$__GLOBAL_ERROR_MODULE__$3d3e$__$225b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$client$2f$components$2f$builtin$2f$global$2d$error$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$2c$__Next$2e$js__Server__Component$29222c$__MODULE_0__$3d3e$__$225b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$app$2f$layout$2e$tsx__$5b$app$2d$rsc$5d$__$28$ecmascript$2c$__Next$2e$js__Server__Component$29222c$__MODULE_1__$3d3e$__$225b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$app$2f$loading$2e$tsx__$5b$app$2d$rsc$5d$__$28$ecmascript$2c$__Next$2e$js__Server__Component$29222c$__MODULE_2__$3d3e$__$225b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$client$2f$components$2f$builtin$2f$not$2d$found$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$2c$__Next$2e$js__Server__Component$29222c$__MODULE_3__$3d3e$__$225b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$client$2f$components$2f$builtin$2f$forbidden$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$2c$__Next$2e$js__Server__Component$29222c$__MODULE_4__$3d3e$__$225b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$client$2f$components$2f$builtin$2f$unauthorized$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$2c$__Next$2e$js__Server__Component$29222c$__MODULE_5__$3d3e$__$225b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$client$2f$components$2f$builtin$2f$global$2d$error$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$2c$__Next$2e$js__Server__Component$29222c$__MODULE_6__$3d3e$__$225b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$app$2f$members$2f$loading$2e$tsx__$5b$app$2d$rsc$5d$__$28$ecmascript$2c$__Next$2e$js__Server__Component$29222c$__MODULE_7__$3d3e$__$225b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$app$2f$members$2f$new$2f$page$2e$tsx__$5b$app$2d$rsc$5d$__$28$ecmascript$2c$__Next$2e$js__Server__Component$2922$__$7d$__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__$3c$locals$3e$__["__next_app__"], + "actionAsyncStorage", + ()=>__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$entry$2d$base$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$2c$__Next$2e$js__server__utility$29$__["actionAsyncStorage"], + "captureOwnerStack", + ()=>__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$entry$2d$base$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$2c$__Next$2e$js__server__utility$29$__["captureOwnerStack"], + "collectSegmentData", + ()=>__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$entry$2d$base$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$2c$__Next$2e$js__server__utility$29$__["collectSegmentData"], + "createElement", + ()=>__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$entry$2d$base$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$2c$__Next$2e$js__server__utility$29$__["createElement"], + "createMetadataComponents", + ()=>__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$entry$2d$base$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$2c$__Next$2e$js__server__utility$29$__["createMetadataComponents"], + "createPrerenderParamsForClientSegment", + ()=>__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$entry$2d$base$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$2c$__Next$2e$js__server__utility$29$__["createPrerenderParamsForClientSegment"], + "createPrerenderSearchParamsForClientPage", + ()=>__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$entry$2d$base$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$2c$__Next$2e$js__server__utility$29$__["createPrerenderSearchParamsForClientPage"], + "createServerParamsForServerSegment", + ()=>__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$entry$2d$base$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$2c$__Next$2e$js__server__utility$29$__["createServerParamsForServerSegment"], + "createServerSearchParamsForServerPage", + ()=>__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$entry$2d$base$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$2c$__Next$2e$js__server__utility$29$__["createServerSearchParamsForServerPage"], + "createTemporaryReferenceSet", + ()=>__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$entry$2d$base$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$2c$__Next$2e$js__server__utility$29$__["createTemporaryReferenceSet"], + "decodeAction", + ()=>__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$entry$2d$base$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$2c$__Next$2e$js__server__utility$29$__["decodeAction"], + "decodeFormState", + ()=>__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$entry$2d$base$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$2c$__Next$2e$js__server__utility$29$__["decodeFormState"], + "decodeReply", + ()=>__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$entry$2d$base$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$2c$__Next$2e$js__server__utility$29$__["decodeReply"], + "handler", + ()=>__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$build$2f$templates$2f$app$2d$page$2e$js$3f$page$3d2f$members$2f$new$2f$page__$7b$__GLOBAL_ERROR_MODULE__$3d3e$__$225b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$client$2f$components$2f$builtin$2f$global$2d$error$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$2c$__Next$2e$js__Server__Component$29222c$__MODULE_0__$3d3e$__$225b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$app$2f$layout$2e$tsx__$5b$app$2d$rsc$5d$__$28$ecmascript$2c$__Next$2e$js__Server__Component$29222c$__MODULE_1__$3d3e$__$225b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$app$2f$loading$2e$tsx__$5b$app$2d$rsc$5d$__$28$ecmascript$2c$__Next$2e$js__Server__Component$29222c$__MODULE_2__$3d3e$__$225b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$client$2f$components$2f$builtin$2f$not$2d$found$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$2c$__Next$2e$js__Server__Component$29222c$__MODULE_3__$3d3e$__$225b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$client$2f$components$2f$builtin$2f$forbidden$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$2c$__Next$2e$js__Server__Component$29222c$__MODULE_4__$3d3e$__$225b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$client$2f$components$2f$builtin$2f$unauthorized$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$2c$__Next$2e$js__Server__Component$29222c$__MODULE_5__$3d3e$__$225b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$client$2f$components$2f$builtin$2f$global$2d$error$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$2c$__Next$2e$js__Server__Component$29222c$__MODULE_6__$3d3e$__$225b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$app$2f$members$2f$loading$2e$tsx__$5b$app$2d$rsc$5d$__$28$ecmascript$2c$__Next$2e$js__Server__Component$29222c$__MODULE_7__$3d3e$__$225b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$app$2f$members$2f$new$2f$page$2e$tsx__$5b$app$2d$rsc$5d$__$28$ecmascript$2c$__Next$2e$js__Server__Component$2922$__$7d$__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__$3c$locals$3e$__["handler"], + "patchFetch", + ()=>__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$entry$2d$base$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$2c$__Next$2e$js__server__utility$29$__["patchFetch"], + "preconnect", + ()=>__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$entry$2d$base$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$2c$__Next$2e$js__server__utility$29$__["preconnect"], + "preloadFont", + ()=>__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$entry$2d$base$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$2c$__Next$2e$js__server__utility$29$__["preloadFont"], + "preloadStyle", + ()=>__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$entry$2d$base$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$2c$__Next$2e$js__server__utility$29$__["preloadStyle"], + "prerender", + ()=>__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$entry$2d$base$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$2c$__Next$2e$js__server__utility$29$__["prerender"], + "renderToReadableStream", + ()=>__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$entry$2d$base$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$2c$__Next$2e$js__server__utility$29$__["renderToReadableStream"], + "routeModule", + ()=>__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$build$2f$templates$2f$app$2d$page$2e$js$3f$page$3d2f$members$2f$new$2f$page__$7b$__GLOBAL_ERROR_MODULE__$3d3e$__$225b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$client$2f$components$2f$builtin$2f$global$2d$error$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$2c$__Next$2e$js__Server__Component$29222c$__MODULE_0__$3d3e$__$225b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$app$2f$layout$2e$tsx__$5b$app$2d$rsc$5d$__$28$ecmascript$2c$__Next$2e$js__Server__Component$29222c$__MODULE_1__$3d3e$__$225b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$app$2f$loading$2e$tsx__$5b$app$2d$rsc$5d$__$28$ecmascript$2c$__Next$2e$js__Server__Component$29222c$__MODULE_2__$3d3e$__$225b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$client$2f$components$2f$builtin$2f$not$2d$found$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$2c$__Next$2e$js__Server__Component$29222c$__MODULE_3__$3d3e$__$225b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$client$2f$components$2f$builtin$2f$forbidden$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$2c$__Next$2e$js__Server__Component$29222c$__MODULE_4__$3d3e$__$225b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$client$2f$components$2f$builtin$2f$unauthorized$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$2c$__Next$2e$js__Server__Component$29222c$__MODULE_5__$3d3e$__$225b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$client$2f$components$2f$builtin$2f$global$2d$error$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$2c$__Next$2e$js__Server__Component$29222c$__MODULE_6__$3d3e$__$225b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$app$2f$members$2f$loading$2e$tsx__$5b$app$2d$rsc$5d$__$28$ecmascript$2c$__Next$2e$js__Server__Component$29222c$__MODULE_7__$3d3e$__$225b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$app$2f$members$2f$new$2f$page$2e$tsx__$5b$app$2d$rsc$5d$__$28$ecmascript$2c$__Next$2e$js__Server__Component$2922$__$7d$__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__$3c$locals$3e$__["routeModule"], + "serverHooks", + ()=>__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$entry$2d$base$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$2c$__Next$2e$js__server__utility$29$__["serverHooks"], + "taintObjectReference", + ()=>__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$entry$2d$base$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$2c$__Next$2e$js__server__utility$29$__["taintObjectReference"], + "workAsyncStorage", + ()=>__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$entry$2d$base$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$2c$__Next$2e$js__server__utility$29$__["workAsyncStorage"], + "workUnitAsyncStorage", + ()=>__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$entry$2d$base$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$2c$__Next$2e$js__server__utility$29$__["workUnitAsyncStorage"] +]); +var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$build$2f$templates$2f$app$2d$page$2e$js$3f$page$3d2f$members$2f$new$2f$page__$7b$__GLOBAL_ERROR_MODULE__$3d3e$__$225b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$client$2f$components$2f$builtin$2f$global$2d$error$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$2c$__Next$2e$js__Server__Component$29222c$__MODULE_0__$3d3e$__$225b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$app$2f$layout$2e$tsx__$5b$app$2d$rsc$5d$__$28$ecmascript$2c$__Next$2e$js__Server__Component$29222c$__MODULE_1__$3d3e$__$225b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$app$2f$loading$2e$tsx__$5b$app$2d$rsc$5d$__$28$ecmascript$2c$__Next$2e$js__Server__Component$29222c$__MODULE_2__$3d3e$__$225b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$client$2f$components$2f$builtin$2f$not$2d$found$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$2c$__Next$2e$js__Server__Component$29222c$__MODULE_3__$3d3e$__$225b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$client$2f$components$2f$builtin$2f$forbidden$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$2c$__Next$2e$js__Server__Component$29222c$__MODULE_4__$3d3e$__$225b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$client$2f$components$2f$builtin$2f$unauthorized$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$2c$__Next$2e$js__Server__Component$29222c$__MODULE_5__$3d3e$__$225b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$client$2f$components$2f$builtin$2f$global$2d$error$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$2c$__Next$2e$js__Server__Component$29222c$__MODULE_6__$3d3e$__$225b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$app$2f$members$2f$loading$2e$tsx__$5b$app$2d$rsc$5d$__$28$ecmascript$2c$__Next$2e$js__Server__Component$29222c$__MODULE_7__$3d3e$__$225b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$app$2f$members$2f$new$2f$page$2e$tsx__$5b$app$2d$rsc$5d$__$28$ecmascript$2c$__Next$2e$js__Server__Component$2922$__$7d$__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__$3c$locals$3e$__ = __turbopack_context__.i('[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/build/templates/app-page.js?page=/members/new/page { GLOBAL_ERROR_MODULE => "[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/components/builtin/global-error.js [app-rsc] (ecmascript, Next.js Server Component)", MODULE_0 => "[project]/Documents/go-new/chinese-family-tree/app/layout.tsx [app-rsc] (ecmascript, Next.js Server Component)", MODULE_1 => "[project]/Documents/go-new/chinese-family-tree/app/loading.tsx [app-rsc] (ecmascript, Next.js Server Component)", MODULE_2 => "[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/components/builtin/not-found.js [app-rsc] (ecmascript, Next.js Server Component)", MODULE_3 => "[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/components/builtin/forbidden.js [app-rsc] (ecmascript, Next.js Server Component)", MODULE_4 => "[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/components/builtin/unauthorized.js [app-rsc] (ecmascript, Next.js Server Component)", MODULE_5 => "[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/components/builtin/global-error.js [app-rsc] (ecmascript, Next.js Server Component)", MODULE_6 => "[project]/Documents/go-new/chinese-family-tree/app/members/loading.tsx [app-rsc] (ecmascript, Next.js Server Component)", MODULE_7 => "[project]/Documents/go-new/chinese-family-tree/app/members/new/page.tsx [app-rsc] (ecmascript, Next.js Server Component)" } [app-rsc] (ecmascript) '); +var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$client$2f$components$2f$builtin$2f$global$2d$error$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$2c$__Next$2e$js__Server__Component$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/components/builtin/global-error.js [app-rsc] (ecmascript, Next.js Server Component)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$entry$2d$base$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$2c$__Next$2e$js__server__utility$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/server/app-render/entry-base.js [app-rsc] (ecmascript, Next.js server utility)"); +}), +]; + +//# sourceMappingURL=4e98a_next_dist_03c86f03._.js.map \ No newline at end of file diff --git a/.next/dev/server/chunks/ssr/4e98a_next_dist_03c86f03._.js.map b/.next/dev/server/chunks/ssr/4e98a_next_dist_03c86f03._.js.map new file mode 100644 index 00000000..d3e76087 --- /dev/null +++ b/.next/dev/server/chunks/ssr/4e98a_next_dist_03c86f03._.js.map @@ -0,0 +1,50 @@ +{ + "version": 3, + "sources": [], + "sections": [ + {"offset": {"line": 3, "column": 0}, "map": {"version":3,"sources":["file:///Users/freedak/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next%4016.0.3_react-dom%4019.2.0_react%4019.2.0__react%4019.2.0/node_modules/next/src/server/route-modules/app-page/module.compiled.js"],"sourcesContent":["if (process.env.NEXT_RUNTIME === 'edge') {\n module.exports = require('next/dist/server/route-modules/app-page/module.js')\n} else {\n if (process.env.__NEXT_EXPERIMENTAL_REACT) {\n if (process.env.NODE_ENV === 'development') {\n if (process.env.TURBOPACK) {\n module.exports = require('next/dist/compiled/next-server/app-page-turbo-experimental.runtime.dev.js')\n } else {\n module.exports = require('next/dist/compiled/next-server/app-page-experimental.runtime.dev.js')\n }\n } else {\n if (process.env.TURBOPACK) {\n module.exports = require('next/dist/compiled/next-server/app-page-turbo-experimental.runtime.prod.js')\n } else {\n module.exports = require('next/dist/compiled/next-server/app-page-experimental.runtime.prod.js')\n }\n }\n } else {\n if (process.env.NODE_ENV === 'development') {\n if (process.env.TURBOPACK) {\n module.exports = require('next/dist/compiled/next-server/app-page-turbo.runtime.dev.js')\n } else {\n module.exports = require('next/dist/compiled/next-server/app-page.runtime.dev.js')\n }\n } else {\n if (process.env.TURBOPACK) {\n module.exports = require('next/dist/compiled/next-server/app-page-turbo.runtime.prod.js')\n } else {\n module.exports = require('next/dist/compiled/next-server/app-page.runtime.prod.js')\n }\n }\n }\n}\n"],"names":["process","env","NEXT_RUNTIME","module","exports","require","__NEXT_EXPERIMENTAL_REACT","NODE_ENV","TURBOPACK"],"mappings":"AAAA,IAAIA,QAAQC,GAAG,CAACC,YAAY,KAAK,QAAQ;;KAElC;IACL,IAAIF,QAAQC,GAAG,CAACK,yBAAyB,EAAE;;SAcpC;QACL,IAAIN,QAAQC,GAAG,CAACM,QAAQ,KAAK,WAAe;YAC1C,IAAIP,QAAQC,GAAG,CAACO,SAAS,eAAE;gBACzBL,OAAOC,OAAO,GAAGC,QAAQ;YAC3B,OAAO;;QAGT,OAAO;;IAOT;AACF","ignoreList":[0]}}, + {"offset": {"line": 25, "column": 0}, "map": {"version":3,"sources":["file:///Users/freedak/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next%4016.0.3_react-dom%4019.2.0_react%4019.2.0__react%4019.2.0/node_modules/next/src/server/instrumentation/utils.ts"],"sourcesContent":["export function getRevalidateReason(params: {\n isOnDemandRevalidate?: boolean\n isStaticGeneration?: boolean\n}): 'on-demand' | 'stale' | undefined {\n if (params.isOnDemandRevalidate) {\n return 'on-demand'\n }\n if (params.isStaticGeneration) {\n return 'stale'\n }\n return undefined\n}\n"],"names":["getRevalidateReason","params","isOnDemandRevalidate","isStaticGeneration","undefined"],"mappings":";;;;AAAO,SAASA,oBAAoBC,MAGnC;IACC,IAAIA,OAAOC,oBAAoB,EAAE;QAC/B,OAAO;IACT;IACA,IAAID,OAAOE,kBAAkB,EAAE;QAC7B,OAAO;IACT;IACA,OAAOC;AACT","ignoreList":[0]}}, + {"offset": {"line": 42, "column": 0}, "map": {"version":3,"sources":["file:///Users/freedak/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next%4016.0.3_react-dom%4019.2.0_react%4019.2.0__react%4019.2.0/node_modules/next/src/server/app-render/interop-default.ts"],"sourcesContent":["/**\n * Interop between \"export default\" and \"module.exports\".\n */\nexport function interopDefault(mod: any) {\n return mod.default || mod\n}\n"],"names":["interopDefault","mod","default"],"mappings":"AAAA;;CAEC,GACD;;;;AAAO,SAASA,eAAeC,GAAQ;IACrC,OAAOA,IAAIC,OAAO,IAAID;AACxB","ignoreList":[0]}}, + {"offset": {"line": 55, "column": 0}, "map": {"version":3,"sources":["file:///Users/freedak/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next%4016.0.3_react-dom%4019.2.0_react%4019.2.0__react%4019.2.0/node_modules/next/src/server/app-render/strip-flight-headers.ts"],"sourcesContent":["import type { IncomingHttpHeaders } from 'node:http'\n\nimport { FLIGHT_HEADERS } from '../../client/components/app-router-headers'\n\n/**\n * Removes the flight headers from the request.\n *\n * @param req the request to strip the headers from\n */\nexport function stripFlightHeaders(headers: IncomingHttpHeaders) {\n for (const header of FLIGHT_HEADERS) {\n delete headers[header]\n }\n}\n"],"names":["FLIGHT_HEADERS","stripFlightHeaders","headers","header"],"mappings":";;;;AAEA,SAASA,cAAc,QAAQ,6CAA4C;;AAOpE,SAASC,mBAAmBC,OAA4B;IAC7D,KAAK,MAAMC,UAAUH,+XAAAA,CAAgB;QACnC,OAAOE,OAAO,CAACC,OAAO;IACxB;AACF","ignoreList":[0]}}, + {"offset": {"line": 70, "column": 0}, "map": {"version":3,"sources":["file:///Users/freedak/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next%4016.0.3_react-dom%4019.2.0_react%4019.2.0__react%4019.2.0/node_modules/next/src/server/web/spec-extension/adapters/headers.ts"],"sourcesContent":["import type { IncomingHttpHeaders } from 'http'\n\nimport { ReflectAdapter } from './reflect'\n\n/**\n * @internal\n */\nexport class ReadonlyHeadersError extends Error {\n constructor() {\n super(\n 'Headers cannot be modified. Read more: https://nextjs.org/docs/app/api-reference/functions/headers'\n )\n }\n\n public static callable() {\n throw new ReadonlyHeadersError()\n }\n}\n\nexport type ReadonlyHeaders = Headers & {\n /** @deprecated Method unavailable on `ReadonlyHeaders`. Read more: https://nextjs.org/docs/app/api-reference/functions/headers */\n append(...args: any[]): void\n /** @deprecated Method unavailable on `ReadonlyHeaders`. Read more: https://nextjs.org/docs/app/api-reference/functions/headers */\n set(...args: any[]): void\n /** @deprecated Method unavailable on `ReadonlyHeaders`. Read more: https://nextjs.org/docs/app/api-reference/functions/headers */\n delete(...args: any[]): void\n}\nexport class HeadersAdapter extends Headers {\n private readonly headers: IncomingHttpHeaders\n\n constructor(headers: IncomingHttpHeaders) {\n // We've already overridden the methods that would be called, so we're just\n // calling the super constructor to ensure that the instanceof check works.\n super()\n\n this.headers = new Proxy(headers, {\n get(target, prop, receiver) {\n // Because this is just an object, we expect that all \"get\" operations\n // are for properties. If it's a \"get\" for a symbol, we'll just return\n // the symbol.\n if (typeof prop === 'symbol') {\n return ReflectAdapter.get(target, prop, receiver)\n }\n\n const lowercased = prop.toLowerCase()\n\n // Let's find the original casing of the key. This assumes that there is\n // no mixed case keys (e.g. \"Content-Type\" and \"content-type\") in the\n // headers object.\n const original = Object.keys(headers).find(\n (o) => o.toLowerCase() === lowercased\n )\n\n // If the original casing doesn't exist, return undefined.\n if (typeof original === 'undefined') return\n\n // If the original casing exists, return the value.\n return ReflectAdapter.get(target, original, receiver)\n },\n set(target, prop, value, receiver) {\n if (typeof prop === 'symbol') {\n return ReflectAdapter.set(target, prop, value, receiver)\n }\n\n const lowercased = prop.toLowerCase()\n\n // Let's find the original casing of the key. This assumes that there is\n // no mixed case keys (e.g. \"Content-Type\" and \"content-type\") in the\n // headers object.\n const original = Object.keys(headers).find(\n (o) => o.toLowerCase() === lowercased\n )\n\n // If the original casing doesn't exist, use the prop as the key.\n return ReflectAdapter.set(target, original ?? prop, value, receiver)\n },\n has(target, prop) {\n if (typeof prop === 'symbol') return ReflectAdapter.has(target, prop)\n\n const lowercased = prop.toLowerCase()\n\n // Let's find the original casing of the key. This assumes that there is\n // no mixed case keys (e.g. \"Content-Type\" and \"content-type\") in the\n // headers object.\n const original = Object.keys(headers).find(\n (o) => o.toLowerCase() === lowercased\n )\n\n // If the original casing doesn't exist, return false.\n if (typeof original === 'undefined') return false\n\n // If the original casing exists, return true.\n return ReflectAdapter.has(target, original)\n },\n deleteProperty(target, prop) {\n if (typeof prop === 'symbol')\n return ReflectAdapter.deleteProperty(target, prop)\n\n const lowercased = prop.toLowerCase()\n\n // Let's find the original casing of the key. This assumes that there is\n // no mixed case keys (e.g. \"Content-Type\" and \"content-type\") in the\n // headers object.\n const original = Object.keys(headers).find(\n (o) => o.toLowerCase() === lowercased\n )\n\n // If the original casing doesn't exist, return true.\n if (typeof original === 'undefined') return true\n\n // If the original casing exists, delete the property.\n return ReflectAdapter.deleteProperty(target, original)\n },\n })\n }\n\n /**\n * Seals a Headers instance to prevent modification by throwing an error when\n * any mutating method is called.\n */\n public static seal(headers: Headers): ReadonlyHeaders {\n return new Proxy(headers, {\n get(target, prop, receiver) {\n switch (prop) {\n case 'append':\n case 'delete':\n case 'set':\n return ReadonlyHeadersError.callable\n default:\n return ReflectAdapter.get(target, prop, receiver)\n }\n },\n })\n }\n\n /**\n * Merges a header value into a string. This stores multiple values as an\n * array, so we need to merge them into a string.\n *\n * @param value a header value\n * @returns a merged header value (a string)\n */\n private merge(value: string | string[]): string {\n if (Array.isArray(value)) return value.join(', ')\n\n return value\n }\n\n /**\n * Creates a Headers instance from a plain object or a Headers instance.\n *\n * @param headers a plain object or a Headers instance\n * @returns a headers instance\n */\n public static from(headers: IncomingHttpHeaders | Headers): Headers {\n if (headers instanceof Headers) return headers\n\n return new HeadersAdapter(headers)\n }\n\n public append(name: string, value: string): void {\n const existing = this.headers[name]\n if (typeof existing === 'string') {\n this.headers[name] = [existing, value]\n } else if (Array.isArray(existing)) {\n existing.push(value)\n } else {\n this.headers[name] = value\n }\n }\n\n public delete(name: string): void {\n delete this.headers[name]\n }\n\n public get(name: string): string | null {\n const value = this.headers[name]\n if (typeof value !== 'undefined') return this.merge(value)\n\n return null\n }\n\n public has(name: string): boolean {\n return typeof this.headers[name] !== 'undefined'\n }\n\n public set(name: string, value: string): void {\n this.headers[name] = value\n }\n\n public forEach(\n callbackfn: (value: string, name: string, parent: Headers) => void,\n thisArg?: any\n ): void {\n for (const [name, value] of this.entries()) {\n callbackfn.call(thisArg, value, name, this)\n }\n }\n\n public *entries(): HeadersIterator<[string, string]> {\n for (const key of Object.keys(this.headers)) {\n const name = key.toLowerCase()\n // We assert here that this is a string because we got it from the\n // Object.keys() call above.\n const value = this.get(name) as string\n\n yield [name, value] as [string, string]\n }\n }\n\n public *keys(): HeadersIterator {\n for (const key of Object.keys(this.headers)) {\n const name = key.toLowerCase()\n yield name\n }\n }\n\n public *values(): HeadersIterator {\n for (const key of Object.keys(this.headers)) {\n // We assert here that this is a string because we got it from the\n // Object.keys() call above.\n const value = this.get(key) as string\n\n yield value\n }\n }\n\n public [Symbol.iterator](): HeadersIterator<[string, string]> {\n return this.entries()\n }\n}\n"],"names":["ReflectAdapter","ReadonlyHeadersError","Error","constructor","callable","HeadersAdapter","Headers","headers","Proxy","get","target","prop","receiver","lowercased","toLowerCase","original","Object","keys","find","o","set","value","has","deleteProperty","seal","merge","Array","isArray","join","from","append","name","existing","push","delete","forEach","callbackfn","thisArg","entries","call","key","values","Symbol","iterator"],"mappings":"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","ignoreList":[0]}}, + {"offset": {"line": 248, "column": 0}, "map": {"version":3,"sources":["file:///Users/freedak/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next%4016.0.3_react-dom%4019.2.0_react%4019.2.0__react%4019.2.0/node_modules/next/dist/compiled/cookie/index.js"],"sourcesContent":["(()=>{\"use strict\";if(typeof __nccwpck_require__!==\"undefined\")__nccwpck_require__.ab=__dirname+\"/\";var e={};(()=>{var r=e;\n/*!\n * cookie\n * Copyright(c) 2012-2014 Roman Shtylman\n * Copyright(c) 2015 Douglas Christopher Wilson\n * MIT Licensed\n */r.parse=parse;r.serialize=serialize;var i=decodeURIComponent;var t=encodeURIComponent;var a=/; */;var n=/^[\\u0009\\u0020-\\u007e\\u0080-\\u00ff]+$/;function parse(e,r){if(typeof e!==\"string\"){throw new TypeError(\"argument str must be a string\")}var t={};var n=r||{};var o=e.split(a);var s=n.decode||i;for(var p=0;p\nexport type NextApiRequestQuery = Partial<{ [key: string]: string | string[] }>\n\nexport type __ApiPreviewProps = {\n previewModeId: string\n previewModeEncryptionKey: string\n previewModeSigningKey: string\n}\n\nexport function wrapApiHandler any>(\n page: string,\n handler: T\n): T {\n return ((...args) => {\n getTracer().setRootSpanAttribute('next.route', page)\n // Call API route method\n return getTracer().trace(\n NodeSpan.runHandler,\n {\n spanName: `executing api route (pages) ${page}`,\n },\n () => handler(...args)\n )\n }) as T\n}\n\n/**\n *\n * @param res response object\n * @param statusCode `HTTP` status code of response\n */\nexport function sendStatusCode(\n res: NextApiResponse,\n statusCode: number\n): NextApiResponse {\n res.statusCode = statusCode\n return res\n}\n\n/**\n *\n * @param res response object\n * @param [statusOrUrl] `HTTP` status code of redirect\n * @param url URL of redirect\n */\nexport function redirect(\n res: NextApiResponse,\n statusOrUrl: string | number,\n url?: string\n): NextApiResponse {\n if (typeof statusOrUrl === 'string') {\n url = statusOrUrl\n statusOrUrl = 307\n }\n if (typeof statusOrUrl !== 'number' || typeof url !== 'string') {\n throw new Error(\n `Invalid redirect arguments. Please use a single argument URL, e.g. res.redirect('/destination') or use a status code and URL, e.g. res.redirect(307, '/destination').`\n )\n }\n res.writeHead(statusOrUrl, { Location: url })\n res.write(url)\n res.end()\n return res\n}\n\nexport function checkIsOnDemandRevalidate(\n req: Request | IncomingMessage | BaseNextRequest,\n previewProps: __ApiPreviewProps\n): {\n isOnDemandRevalidate: boolean\n revalidateOnlyGenerated: boolean\n} {\n const headers = HeadersAdapter.from(req.headers)\n\n const previewModeId = headers.get(PRERENDER_REVALIDATE_HEADER)\n const isOnDemandRevalidate = previewModeId === previewProps.previewModeId\n\n const revalidateOnlyGenerated = headers.has(\n PRERENDER_REVALIDATE_ONLY_GENERATED_HEADER\n )\n\n return { isOnDemandRevalidate, revalidateOnlyGenerated }\n}\n\nexport const COOKIE_NAME_PRERENDER_BYPASS = `__prerender_bypass`\nexport const COOKIE_NAME_PRERENDER_DATA = `__next_preview_data`\n\nexport const RESPONSE_LIMIT_DEFAULT = 4 * 1024 * 1024\n\nexport const SYMBOL_PREVIEW_DATA = Symbol(COOKIE_NAME_PRERENDER_DATA)\nexport const SYMBOL_CLEARED_COOKIES = Symbol(COOKIE_NAME_PRERENDER_BYPASS)\n\nexport function clearPreviewData(\n res: NextApiResponse,\n options: {\n path?: string\n } = {}\n): NextApiResponse {\n if (SYMBOL_CLEARED_COOKIES in res) {\n return res\n }\n\n const { serialize } =\n require('next/dist/compiled/cookie') as typeof import('next/dist/compiled/cookie')\n const previous = res.getHeader('Set-Cookie')\n res.setHeader(`Set-Cookie`, [\n ...(typeof previous === 'string'\n ? [previous]\n : Array.isArray(previous)\n ? previous\n : []),\n serialize(COOKIE_NAME_PRERENDER_BYPASS, '', {\n // To delete a cookie, set `expires` to a date in the past:\n // https://tools.ietf.org/html/rfc6265#section-4.1.1\n // `Max-Age: 0` is not valid, thus ignored, and the cookie is persisted.\n expires: new Date(0),\n httpOnly: true,\n sameSite: process.env.NODE_ENV !== 'development' ? 'none' : 'lax',\n secure: process.env.NODE_ENV !== 'development',\n path: '/',\n ...(options.path !== undefined\n ? ({ path: options.path } as CookieSerializeOptions)\n : undefined),\n }),\n serialize(COOKIE_NAME_PRERENDER_DATA, '', {\n // To delete a cookie, set `expires` to a date in the past:\n // https://tools.ietf.org/html/rfc6265#section-4.1.1\n // `Max-Age: 0` is not valid, thus ignored, and the cookie is persisted.\n expires: new Date(0),\n httpOnly: true,\n sameSite: process.env.NODE_ENV !== 'development' ? 'none' : 'lax',\n secure: process.env.NODE_ENV !== 'development',\n path: '/',\n ...(options.path !== undefined\n ? ({ path: options.path } as CookieSerializeOptions)\n : undefined),\n }),\n ])\n\n Object.defineProperty(res, SYMBOL_CLEARED_COOKIES, {\n value: true,\n enumerable: false,\n })\n return res\n}\n\n/**\n * Custom error class\n */\nexport class ApiError extends Error {\n readonly statusCode: number\n\n constructor(statusCode: number, message: string) {\n super(message)\n this.statusCode = statusCode\n }\n}\n\n/**\n * Sends error in `response`\n * @param res response object\n * @param statusCode of response\n * @param message of response\n */\nexport function sendError(\n res: NextApiResponse,\n statusCode: number,\n message: string\n): void {\n res.statusCode = statusCode\n res.statusMessage = message\n res.end(message)\n}\n\ninterface LazyProps {\n req: IncomingMessage\n}\n\n/**\n * Execute getter function only if its needed\n * @param LazyProps `req` and `params` for lazyProp\n * @param prop name of property\n * @param getter function to get data\n */\nexport function setLazyProp(\n { req }: LazyProps,\n prop: string,\n getter: () => T\n): void {\n const opts = { configurable: true, enumerable: true }\n const optsReset = { ...opts, writable: true }\n\n Object.defineProperty(req, prop, {\n ...opts,\n get: () => {\n const value = getter()\n // we set the property on the object to avoid recalculating it\n Object.defineProperty(req, prop, { ...optsReset, value })\n return value\n },\n set: (value) => {\n Object.defineProperty(req, prop, { ...optsReset, value })\n },\n })\n}\n"],"names":["HeadersAdapter","PRERENDER_REVALIDATE_HEADER","PRERENDER_REVALIDATE_ONLY_GENERATED_HEADER","getTracer","NodeSpan","wrapApiHandler","page","handler","args","setRootSpanAttribute","trace","runHandler","spanName","sendStatusCode","res","statusCode","redirect","statusOrUrl","url","Error","writeHead","Location","write","end","checkIsOnDemandRevalidate","req","previewProps","headers","from","previewModeId","get","isOnDemandRevalidate","revalidateOnlyGenerated","has","COOKIE_NAME_PRERENDER_BYPASS","COOKIE_NAME_PRERENDER_DATA","RESPONSE_LIMIT_DEFAULT","SYMBOL_PREVIEW_DATA","Symbol","SYMBOL_CLEARED_COOKIES","clearPreviewData","options","serialize","require","previous","getHeader","setHeader","Array","isArray","expires","Date","httpOnly","sameSite","process","env","NODE_ENV","secure","path","undefined","Object","defineProperty","value","enumerable","ApiError","constructor","message","sendError","statusMessage","setLazyProp","prop","getter","opts","configurable","optsReset","writable","set"],"mappings":"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","ignoreList":[0]}}, + {"offset": {"line": 539, "column": 0}, "map": {"version":3,"sources":["file:///Users/freedak/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next%4016.0.3_react-dom%4019.2.0_react%4019.2.0__react%4019.2.0/node_modules/next/src/server/api-utils/get-cookie-parser.ts"],"sourcesContent":["import type { NextApiRequestCookies } from '.'\n\n/**\n * Parse cookies from the `headers` of request\n * @param req request object\n */\n\nexport function getCookieParser(headers: {\n [key: string]: string | string[] | null | undefined\n}): () => NextApiRequestCookies {\n return function parseCookie(): NextApiRequestCookies {\n const { cookie } = headers\n\n if (!cookie) {\n return {}\n }\n\n const { parse: parseCookieFn } =\n require('next/dist/compiled/cookie') as typeof import('next/dist/compiled/cookie')\n return parseCookieFn(Array.isArray(cookie) ? cookie.join('; ') : cookie)\n }\n}\n"],"names":["getCookieParser","headers","parseCookie","cookie","parse","parseCookieFn","require","Array","isArray","join"],"mappings":"AAEA;;;CAGC,GAED;;;;AAAO,SAASA,gBAAgBC,OAE/B;IACC,OAAO,SAASC;QACd,MAAM,EAAEC,MAAM,EAAE,GAAGF;QAEnB,IAAI,CAACE,QAAQ;YACX,OAAO,CAAC;QACV;QAEA,MAAM,EAAEC,OAAOC,aAAa,EAAE,GAC5BC,QAAQ;QACV,OAAOD,cAAcE,MAAMC,OAAO,CAACL,UAAUA,OAAOM,IAAI,CAAC,QAAQN;IACnE;AACF","ignoreList":[0]}}, + {"offset": {"line": 560, "column": 0}, "map": {"version":3,"sources":["file:///Users/freedak/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next%4016.0.3_react-dom%4019.2.0_react%4019.2.0__react%4019.2.0/node_modules/next/src/server/base-http/index.ts"],"sourcesContent":["import type { IncomingHttpHeaders, OutgoingHttpHeaders } from 'http'\nimport type { I18NConfig } from '../config-shared'\n\nimport { RedirectStatusCode } from '../../client/components/redirect-status-code'\nimport type { NextApiRequestCookies } from '../api-utils'\nimport { getCookieParser } from '../api-utils/get-cookie-parser'\n\nexport interface BaseNextRequestConfig {\n basePath: string | undefined\n i18n?: I18NConfig\n trailingSlash?: boolean | undefined\n}\n\nexport type FetchMetric = {\n url: string\n idx: number\n end: number\n start: number\n method: string\n status: number\n cacheReason: string\n cacheStatus: 'hit' | 'miss' | 'skip' | 'hmr'\n cacheWarning?: string\n}\n\nexport type FetchMetrics = Array\n\nexport abstract class BaseNextRequest {\n protected _cookies: NextApiRequestCookies | undefined\n public abstract headers: IncomingHttpHeaders\n public abstract fetchMetrics: FetchMetric[] | undefined\n\n constructor(\n public method: string,\n public url: string,\n public body: Body\n ) {}\n\n // Utils implemented using the abstract methods above\n\n public get cookies() {\n if (this._cookies) return this._cookies\n return (this._cookies = getCookieParser(this.headers)())\n }\n}\n\nexport abstract class BaseNextResponse {\n abstract statusCode: number | undefined\n abstract statusMessage: string | undefined\n abstract get sent(): boolean\n\n constructor(public destination: Destination) {}\n\n /**\n * Sets a value for the header overwriting existing values\n */\n abstract setHeader(name: string, value: string | string[]): this\n\n /**\n * Removes a header\n */\n abstract removeHeader(name: string): this\n\n /**\n * Appends value for the given header name\n */\n abstract appendHeader(name: string, value: string): this\n\n /**\n * Get all values for a header as an array or undefined if no value is present\n */\n abstract getHeaderValues(name: string): string[] | undefined\n\n abstract hasHeader(name: string): boolean\n\n /**\n * Get values for a header concatenated using `,` or undefined if no value is present\n */\n abstract getHeader(name: string): string | undefined\n\n abstract getHeaders(): OutgoingHttpHeaders\n\n abstract body(value: string): this\n\n abstract send(): void\n\n abstract onClose(callback: () => void): void\n\n // Utils implemented using the abstract methods above\n\n public redirect(destination: string, statusCode: number) {\n this.setHeader('Location', destination)\n this.statusCode = statusCode\n\n // Since IE11 doesn't support the 308 header add backwards\n // compatibility using refresh header\n if (statusCode === RedirectStatusCode.PermanentRedirect) {\n this.setHeader('Refresh', `0;url=${destination}`)\n }\n\n return this\n }\n}\n"],"names":["RedirectStatusCode","getCookieParser","BaseNextRequest","constructor","method","url","body","cookies","_cookies","headers","BaseNextResponse","destination","redirect","statusCode","setHeader","PermanentRedirect"],"mappings":";;;;;;AAGA,SAASA,kBAAkB,QAAQ,+CAA8C;AAEjF,SAASC,eAAe,QAAQ,iCAAgC;;;AAsBzD,MAAeC;IAKpBC,YACSC,MAAc,EACdC,GAAW,EACXC,IAAU,CACjB;aAHOF,MAAAA,GAAAA;aACAC,GAAAA,GAAAA;aACAC,IAAAA,GAAAA;IACN;IAEH,qDAAqD;IAErD,IAAWC,UAAU;QACnB,IAAI,IAAI,CAACC,QAAQ,EAAE,OAAO,IAAI,CAACA,QAAQ;QACvC,OAAQ,IAAI,CAACA,QAAQ,OAAGP,iYAAAA,EAAgB,IAAI,CAACQ,OAAO;IACtD;AACF;AAEO,MAAeC;IAKpBP,YAAmBQ,WAAwB,CAAE;aAA1BA,WAAAA,GAAAA;IAA2B;IAqC9C,qDAAqD;IAE9CC,SAASD,WAAmB,EAAEE,UAAkB,EAAE;QACvD,IAAI,CAACC,SAAS,CAAC,YAAYH;QAC3B,IAAI,CAACE,UAAU,GAAGA;QAElB,0DAA0D;QAC1D,qCAAqC;QACrC,IAAIA,eAAeb,qYAAAA,CAAmBe,iBAAiB,EAAE;YACvD,IAAI,CAACD,SAAS,CAAC,WAAW,CAAC,MAAM,EAAEH,aAAa;QAClD;QAEA,OAAO,IAAI;IACb;AACF","ignoreList":[0]}}, + {"offset": {"line": 602, "column": 0}, "map": {"version":3,"sources":["file:///Users/freedak/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next%4016.0.3_react-dom%4019.2.0_react%4019.2.0__react%4019.2.0/node_modules/next/src/server/base-http/node.ts"],"sourcesContent":["import type { ServerResponse, IncomingMessage } from 'http'\nimport type { Writable, Readable } from 'stream'\n\nimport { SYMBOL_CLEARED_COOKIES } from '../api-utils'\nimport type { NextApiRequestCookies } from '../api-utils'\n\nimport { NEXT_REQUEST_META } from '../request-meta'\nimport type { RequestMeta } from '../request-meta'\n\nimport { BaseNextRequest, BaseNextResponse, type FetchMetric } from './index'\nimport type { OutgoingHttpHeaders } from 'node:http'\n\ntype Req = IncomingMessage & {\n [NEXT_REQUEST_META]?: RequestMeta\n cookies?: NextApiRequestCookies\n fetchMetrics?: FetchMetric[]\n}\n\nexport class NodeNextRequest extends BaseNextRequest {\n public headers = this._req.headers\n public fetchMetrics: FetchMetric[] | undefined = this._req?.fetchMetrics;\n\n [NEXT_REQUEST_META]: RequestMeta = this._req[NEXT_REQUEST_META] || {}\n\n constructor(private _req: Req) {\n super(_req.method!.toUpperCase(), _req.url!, _req)\n }\n\n get originalRequest() {\n // Need to mimic these changes to the original req object for places where we use it:\n // render.tsx, api/ssg requests\n this._req[NEXT_REQUEST_META] = this[NEXT_REQUEST_META]\n this._req.url = this.url\n this._req.cookies = this.cookies\n return this._req\n }\n\n set originalRequest(value: Req) {\n this._req = value\n }\n\n private streaming = false\n\n /**\n * Returns the request body as a Web Readable Stream. The body here can only\n * be read once as the body will start flowing as soon as the data handler\n * is attached.\n *\n * @internal\n */\n public stream() {\n if (this.streaming) {\n throw new Error(\n 'Invariant: NodeNextRequest.stream() can only be called once'\n )\n }\n this.streaming = true\n\n return new ReadableStream({\n start: (controller) => {\n this._req.on('data', (chunk) => {\n controller.enqueue(new Uint8Array(chunk))\n })\n this._req.on('end', () => {\n controller.close()\n })\n this._req.on('error', (err) => {\n controller.error(err)\n })\n },\n })\n }\n}\n\nexport class NodeNextResponse extends BaseNextResponse {\n private textBody: string | undefined = undefined\n\n public [SYMBOL_CLEARED_COOKIES]?: boolean\n\n get originalResponse() {\n if (SYMBOL_CLEARED_COOKIES in this) {\n this._res[SYMBOL_CLEARED_COOKIES] = this[SYMBOL_CLEARED_COOKIES]\n }\n\n return this._res\n }\n\n constructor(\n private _res: ServerResponse & { [SYMBOL_CLEARED_COOKIES]?: boolean }\n ) {\n super(_res)\n }\n\n get sent() {\n return this._res.finished || this._res.headersSent\n }\n\n get statusCode() {\n return this._res.statusCode\n }\n\n set statusCode(value: number) {\n this._res.statusCode = value\n }\n\n get statusMessage() {\n return this._res.statusMessage\n }\n\n set statusMessage(value: string) {\n this._res.statusMessage = value\n }\n\n setHeader(name: string, value: string | string[]): this {\n this._res.setHeader(name, value)\n return this\n }\n\n removeHeader(name: string): this {\n this._res.removeHeader(name)\n return this\n }\n\n getHeaderValues(name: string): string[] | undefined {\n const values = this._res.getHeader(name)\n\n if (values === undefined) return undefined\n\n return (Array.isArray(values) ? values : [values]).map((value) =>\n value.toString()\n )\n }\n\n hasHeader(name: string): boolean {\n return this._res.hasHeader(name)\n }\n\n getHeader(name: string): string | undefined {\n const values = this.getHeaderValues(name)\n return Array.isArray(values) ? values.join(',') : undefined\n }\n\n getHeaders(): OutgoingHttpHeaders {\n return this._res.getHeaders()\n }\n\n appendHeader(name: string, value: string): this {\n const currentValues = this.getHeaderValues(name) ?? []\n\n if (!currentValues.includes(value)) {\n this._res.setHeader(name, [...currentValues, value])\n }\n\n return this\n }\n\n body(value: string) {\n this.textBody = value\n return this\n }\n\n send() {\n this._res.end(this.textBody)\n }\n\n public onClose(callback: () => void) {\n this.originalResponse.on('close', callback)\n }\n}\n"],"names":["SYMBOL_CLEARED_COOKIES","NEXT_REQUEST_META","BaseNextRequest","BaseNextResponse","NodeNextRequest","constructor","_req","method","toUpperCase","url","headers","fetchMetrics","streaming","originalRequest","cookies","value","stream","Error","ReadableStream","start","controller","on","chunk","enqueue","Uint8Array","close","err","error","NodeNextResponse","originalResponse","_res","textBody","undefined","sent","finished","headersSent","statusCode","statusMessage","setHeader","name","removeHeader","getHeaderValues","values","getHeader","Array","isArray","map","toString","hasHeader","join","getHeaders","appendHeader","currentValues","includes","body","send","end","onClose","callback"],"mappings":"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","ignoreList":[0]}}, + {"offset": {"line": 738, "column": 0}, "map": {"version":3,"sources":["file:///Users/freedak/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next%4016.0.3_react-dom%4019.2.0_react%4019.2.0__react%4019.2.0/node_modules/next/src/server/lib/experimental/ppr.ts"],"sourcesContent":["/**\n * If set to `incremental`, only those leaf pages that export\n * `experimental_ppr = true` will have partial prerendering enabled. If any\n * page exports this value as `false` or does not export it at all will not\n * have partial prerendering enabled. If set to a boolean, the options for\n * `experimental_ppr` will be ignored.\n */\n\nexport type ExperimentalPPRConfig = boolean | 'incremental'\n\n/**\n * Returns true if partial prerendering is enabled for the application. It does\n * not tell you if a given route has PPR enabled, as that requires analysis of\n * the route's configuration.\n *\n * @see {@link checkIsRoutePPREnabled} - for checking if a specific route has PPR enabled.\n */\nexport function checkIsAppPPREnabled(\n config: ExperimentalPPRConfig | undefined\n): boolean {\n // If the config is undefined, partial prerendering is disabled.\n if (typeof config === 'undefined') return false\n\n // If the config is a boolean, use it directly.\n if (typeof config === 'boolean') return config\n\n // If the config is a string, it must be 'incremental' to enable partial\n // prerendering.\n if (config === 'incremental') return true\n\n return false\n}\n\n/**\n * Returns true if partial prerendering is supported for the current page with\n * the provided app configuration. If the application doesn't have partial\n * prerendering enabled, this function will always return false. If you want to\n * check if the application has partial prerendering enabled\n *\n * @see {@link checkIsAppPPREnabled} for checking if the application has PPR enabled.\n */\nexport function checkIsRoutePPREnabled(\n config: ExperimentalPPRConfig | undefined\n): boolean {\n // If the config is undefined, partial prerendering is disabled.\n if (typeof config === 'undefined') return false\n\n // If the config is a boolean, use it directly.\n if (typeof config === 'boolean') return config\n\n return false\n}\n"],"names":["checkIsAppPPREnabled","config","checkIsRoutePPREnabled"],"mappings":"AAAA;;;;;;CAMC,GAID;;;;;;CAMC,GACD;;;;;;AAAO,SAASA,qBACdC,MAAyC;IAEzC,gEAAgE;IAChE,IAAI,OAAOA,WAAW,aAAa,OAAO;IAE1C,+CAA+C;IAC/C,IAAI,OAAOA,WAAW,WAAW,OAAOA;IAExC,wEAAwE;IACxE,gBAAgB;IAChB,IAAIA,WAAW,eAAe,OAAO;IAErC,OAAO;AACT;AAUO,SAASC,uBACdD,MAAyC;IAEzC,gEAAgE;IAChE,IAAI,OAAOA,WAAW,aAAa,OAAO;IAE1C,+CAA+C;IAC/C,IAAI,OAAOA,WAAW,WAAW,OAAOA;IAExC,OAAO;AACT","ignoreList":[0]}}, + {"offset": {"line": 776, "column": 0}, "map": {"version":3,"sources":["file:///Users/freedak/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next%4016.0.3_react-dom%4019.2.0_react%4019.2.0__react%4019.2.0/node_modules/next/dist/compiled/zod/index.cjs"],"sourcesContent":["(()=>{\"use strict\";var e={629:function(e,t,s){var r=this&&this.__createBinding||(Object.create?function(e,t,s,r){if(r===undefined)r=s;var a=Object.getOwnPropertyDescriptor(t,s);if(!a||(\"get\"in a?!t.__esModule:a.writable||a.configurable)){a={enumerable:true,get:function(){return t[s]}}}Object.defineProperty(e,r,a)}:function(e,t,s,r){if(r===undefined)r=s;e[r]=t[s]});var a=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,\"default\",{enumerable:true,value:t})}:function(e,t){e[\"default\"]=t});var n=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(e!=null)for(var s in e)if(s!==\"default\"&&Object.prototype.hasOwnProperty.call(e,s))r(t,e,s);a(t,e);return t};var i=this&&this.__exportStar||function(e,t){for(var s in e)if(s!==\"default\"&&!Object.prototype.hasOwnProperty.call(t,s))r(t,e,s)};Object.defineProperty(t,\"__esModule\",{value:true});t.z=void 0;const o=n(s(923));t.z=o;i(s(923),t);t[\"default\"]=o},348:(e,t,s)=>{Object.defineProperty(t,\"__esModule\",{value:true});t.ZodError=t.quotelessJson=t.ZodIssueCode=void 0;const r=s(709);t.ZodIssueCode=r.util.arrayToEnum([\"invalid_type\",\"invalid_literal\",\"custom\",\"invalid_union\",\"invalid_union_discriminator\",\"invalid_enum_value\",\"unrecognized_keys\",\"invalid_arguments\",\"invalid_return_type\",\"invalid_date\",\"invalid_string\",\"too_small\",\"too_big\",\"invalid_intersection_types\",\"not_multiple_of\",\"not_finite\"]);const quotelessJson=e=>{const t=JSON.stringify(e,null,2);return t.replace(/\"([^\"]+)\":/g,\"$1:\")};t.quotelessJson=quotelessJson;class ZodError extends Error{get errors(){return this.issues}constructor(e){super();this.issues=[];this.addIssue=e=>{this.issues=[...this.issues,e]};this.addIssues=(e=[])=>{this.issues=[...this.issues,...e]};const t=new.target.prototype;if(Object.setPrototypeOf){Object.setPrototypeOf(this,t)}else{this.__proto__=t}this.name=\"ZodError\";this.issues=e}format(e){const t=e||function(e){return e.message};const s={_errors:[]};const processError=e=>{for(const r of e.issues){if(r.code===\"invalid_union\"){r.unionErrors.map(processError)}else if(r.code===\"invalid_return_type\"){processError(r.returnTypeError)}else if(r.code===\"invalid_arguments\"){processError(r.argumentsError)}else if(r.path.length===0){s._errors.push(t(r))}else{let e=s;let a=0;while(ae.message)){const t={};const s=[];for(const r of this.issues){if(r.path.length>0){const s=r.path[0];t[s]=t[s]||[];t[s].push(e(r))}else{s.push(e(r))}}return{formErrors:s,fieldErrors:t}}get formErrors(){return this.flatten()}}t.ZodError=ZodError;ZodError.create=e=>{const t=new ZodError(e);return t}},61:function(e,t,s){var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,\"__esModule\",{value:true});t.defaultErrorMap=void 0;t.setErrorMap=setErrorMap;t.getErrorMap=getErrorMap;const a=r(s(871));t.defaultErrorMap=a.default;let n=a.default;function setErrorMap(e){n=e}function getErrorMap(){return n}},923:function(e,t,s){var r=this&&this.__createBinding||(Object.create?function(e,t,s,r){if(r===undefined)r=s;var a=Object.getOwnPropertyDescriptor(t,s);if(!a||(\"get\"in a?!t.__esModule:a.writable||a.configurable)){a={enumerable:true,get:function(){return t[s]}}}Object.defineProperty(e,r,a)}:function(e,t,s,r){if(r===undefined)r=s;e[r]=t[s]});var a=this&&this.__exportStar||function(e,t){for(var s in e)if(s!==\"default\"&&!Object.prototype.hasOwnProperty.call(t,s))r(t,e,s)};Object.defineProperty(t,\"__esModule\",{value:true});a(s(61),t);a(s(818),t);a(s(515),t);a(s(709),t);a(s(155),t);a(s(348),t)},538:(e,t)=>{Object.defineProperty(t,\"__esModule\",{value:true});t.errorUtil=void 0;var s;(function(e){e.errToObj=e=>typeof e===\"string\"?{message:e}:e||{};e.toString=e=>typeof e===\"string\"?e:e?.message})(s||(t.errorUtil=s={}))},818:function(e,t,s){var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,\"__esModule\",{value:true});t.isAsync=t.isValid=t.isDirty=t.isAborted=t.OK=t.DIRTY=t.INVALID=t.ParseStatus=t.EMPTY_PATH=t.makeIssue=void 0;t.addIssueToContext=addIssueToContext;const a=s(61);const n=r(s(871));const makeIssue=e=>{const{data:t,path:s,errorMaps:r,issueData:a}=e;const n=[...s,...a.path||[]];const i={...a,path:n};if(a.message!==undefined){return{...a,path:n,message:a.message}}let o=\"\";const d=r.filter((e=>!!e)).slice().reverse();for(const e of d){o=e(i,{data:t,defaultError:o}).message}return{...a,path:n,message:o}};t.makeIssue=makeIssue;t.EMPTY_PATH=[];function addIssueToContext(e,s){const r=(0,a.getErrorMap)();const i=(0,t.makeIssue)({issueData:s,data:e.data,path:e.path,errorMaps:[e.common.contextualErrorMap,e.schemaErrorMap,r,r===n.default?undefined:n.default].filter((e=>!!e))});e.common.issues.push(i)}class ParseStatus{constructor(){this.value=\"valid\"}dirty(){if(this.value===\"valid\")this.value=\"dirty\"}abort(){if(this.value!==\"aborted\")this.value=\"aborted\"}static mergeArray(e,s){const r=[];for(const a of s){if(a.status===\"aborted\")return t.INVALID;if(a.status===\"dirty\")e.dirty();r.push(a.value)}return{status:e.value,value:r}}static async mergeObjectAsync(e,t){const s=[];for(const e of t){const t=await e.key;const r=await e.value;s.push({key:t,value:r})}return ParseStatus.mergeObjectSync(e,s)}static mergeObjectSync(e,s){const r={};for(const a of s){const{key:s,value:n}=a;if(s.status===\"aborted\")return t.INVALID;if(n.status===\"aborted\")return t.INVALID;if(s.status===\"dirty\")e.dirty();if(n.status===\"dirty\")e.dirty();if(s.value!==\"__proto__\"&&(typeof n.value!==\"undefined\"||a.alwaysSet)){r[s.value]=n.value}}return{status:e.value,value:r}}}t.ParseStatus=ParseStatus;t.INVALID=Object.freeze({status:\"aborted\"});const DIRTY=e=>({status:\"dirty\",value:e});t.DIRTY=DIRTY;const OK=e=>({status:\"valid\",value:e});t.OK=OK;const isAborted=e=>e.status===\"aborted\";t.isAborted=isAborted;const isDirty=e=>e.status===\"dirty\";t.isDirty=isDirty;const isValid=e=>e.status===\"valid\";t.isValid=isValid;const isAsync=e=>typeof Promise!==\"undefined\"&&e instanceof Promise;t.isAsync=isAsync},515:(e,t)=>{Object.defineProperty(t,\"__esModule\",{value:true})},709:(e,t)=>{Object.defineProperty(t,\"__esModule\",{value:true});t.getParsedType=t.ZodParsedType=t.objectUtil=t.util=void 0;var s;(function(e){e.assertEqual=e=>{};function assertIs(e){}e.assertIs=assertIs;function assertNever(e){throw new Error}e.assertNever=assertNever;e.arrayToEnum=e=>{const t={};for(const s of e){t[s]=s}return t};e.getValidEnumValues=t=>{const s=e.objectKeys(t).filter((e=>typeof t[t[e]]!==\"number\"));const r={};for(const e of s){r[e]=t[e]}return e.objectValues(r)};e.objectValues=t=>e.objectKeys(t).map((function(e){return t[e]}));e.objectKeys=typeof Object.keys===\"function\"?e=>Object.keys(e):e=>{const t=[];for(const s in e){if(Object.prototype.hasOwnProperty.call(e,s)){t.push(s)}}return t};e.find=(e,t)=>{for(const s of e){if(t(s))return s}return undefined};e.isInteger=typeof Number.isInteger===\"function\"?e=>Number.isInteger(e):e=>typeof e===\"number\"&&Number.isFinite(e)&&Math.floor(e)===e;function joinValues(e,t=\" | \"){return e.map((e=>typeof e===\"string\"?`'${e}'`:e)).join(t)}e.joinValues=joinValues;e.jsonStringifyReplacer=(e,t)=>{if(typeof t===\"bigint\"){return t.toString()}return t}})(s||(t.util=s={}));var r;(function(e){e.mergeShapes=(e,t)=>({...e,...t})})(r||(t.objectUtil=r={}));t.ZodParsedType=s.arrayToEnum([\"string\",\"nan\",\"number\",\"integer\",\"float\",\"boolean\",\"date\",\"bigint\",\"symbol\",\"function\",\"undefined\",\"null\",\"array\",\"object\",\"unknown\",\"promise\",\"void\",\"never\",\"map\",\"set\"]);const getParsedType=e=>{const s=typeof e;switch(s){case\"undefined\":return t.ZodParsedType.undefined;case\"string\":return t.ZodParsedType.string;case\"number\":return Number.isNaN(e)?t.ZodParsedType.nan:t.ZodParsedType.number;case\"boolean\":return t.ZodParsedType.boolean;case\"function\":return t.ZodParsedType.function;case\"bigint\":return t.ZodParsedType.bigint;case\"symbol\":return t.ZodParsedType.symbol;case\"object\":if(Array.isArray(e)){return t.ZodParsedType.array}if(e===null){return t.ZodParsedType.null}if(e.then&&typeof e.then===\"function\"&&e.catch&&typeof e.catch===\"function\"){return t.ZodParsedType.promise}if(typeof Map!==\"undefined\"&&e instanceof Map){return t.ZodParsedType.map}if(typeof Set!==\"undefined\"&&e instanceof Set){return t.ZodParsedType.set}if(typeof Date!==\"undefined\"&&e instanceof Date){return t.ZodParsedType.date}return t.ZodParsedType.object;default:return t.ZodParsedType.unknown}};t.getParsedType=getParsedType},871:(e,t,s)=>{Object.defineProperty(t,\"__esModule\",{value:true});const r=s(348);const a=s(709);const errorMap=(e,t)=>{let s;switch(e.code){case r.ZodIssueCode.invalid_type:if(e.received===a.ZodParsedType.undefined){s=\"Required\"}else{s=`Expected ${e.expected}, received ${e.received}`}break;case r.ZodIssueCode.invalid_literal:s=`Invalid literal value, expected ${JSON.stringify(e.expected,a.util.jsonStringifyReplacer)}`;break;case r.ZodIssueCode.unrecognized_keys:s=`Unrecognized key(s) in object: ${a.util.joinValues(e.keys,\", \")}`;break;case r.ZodIssueCode.invalid_union:s=`Invalid input`;break;case r.ZodIssueCode.invalid_union_discriminator:s=`Invalid discriminator value. Expected ${a.util.joinValues(e.options)}`;break;case r.ZodIssueCode.invalid_enum_value:s=`Invalid enum value. Expected ${a.util.joinValues(e.options)}, received '${e.received}'`;break;case r.ZodIssueCode.invalid_arguments:s=`Invalid function arguments`;break;case r.ZodIssueCode.invalid_return_type:s=`Invalid function return type`;break;case r.ZodIssueCode.invalid_date:s=`Invalid date`;break;case r.ZodIssueCode.invalid_string:if(typeof e.validation===\"object\"){if(\"includes\"in e.validation){s=`Invalid input: must include \"${e.validation.includes}\"`;if(typeof e.validation.position===\"number\"){s=`${s} at one or more positions greater than or equal to ${e.validation.position}`}}else if(\"startsWith\"in e.validation){s=`Invalid input: must start with \"${e.validation.startsWith}\"`}else if(\"endsWith\"in e.validation){s=`Invalid input: must end with \"${e.validation.endsWith}\"`}else{a.util.assertNever(e.validation)}}else if(e.validation!==\"regex\"){s=`Invalid ${e.validation}`}else{s=\"Invalid\"}break;case r.ZodIssueCode.too_small:if(e.type===\"array\")s=`Array must contain ${e.exact?\"exactly\":e.inclusive?`at least`:`more than`} ${e.minimum} element(s)`;else if(e.type===\"string\")s=`String must contain ${e.exact?\"exactly\":e.inclusive?`at least`:`over`} ${e.minimum} character(s)`;else if(e.type===\"number\")s=`Number must be ${e.exact?`exactly equal to `:e.inclusive?`greater than or equal to `:`greater than `}${e.minimum}`;else if(e.type===\"bigint\")s=`Number must be ${e.exact?`exactly equal to `:e.inclusive?`greater than or equal to `:`greater than `}${e.minimum}`;else if(e.type===\"date\")s=`Date must be ${e.exact?`exactly equal to `:e.inclusive?`greater than or equal to `:`greater than `}${new Date(Number(e.minimum))}`;else s=\"Invalid input\";break;case r.ZodIssueCode.too_big:if(e.type===\"array\")s=`Array must contain ${e.exact?`exactly`:e.inclusive?`at most`:`less than`} ${e.maximum} element(s)`;else if(e.type===\"string\")s=`String must contain ${e.exact?`exactly`:e.inclusive?`at most`:`under`} ${e.maximum} character(s)`;else if(e.type===\"number\")s=`Number must be ${e.exact?`exactly`:e.inclusive?`less than or equal to`:`less than`} ${e.maximum}`;else if(e.type===\"bigint\")s=`BigInt must be ${e.exact?`exactly`:e.inclusive?`less than or equal to`:`less than`} ${e.maximum}`;else if(e.type===\"date\")s=`Date must be ${e.exact?`exactly`:e.inclusive?`smaller than or equal to`:`smaller than`} ${new Date(Number(e.maximum))}`;else s=\"Invalid input\";break;case r.ZodIssueCode.custom:s=`Invalid input`;break;case r.ZodIssueCode.invalid_intersection_types:s=`Intersection results could not be merged`;break;case r.ZodIssueCode.not_multiple_of:s=`Number must be a multiple of ${e.multipleOf}`;break;case r.ZodIssueCode.not_finite:s=\"Number must be finite\";break;default:s=t.defaultError;a.util.assertNever(e)}return{message:s}};t[\"default\"]=errorMap},155:(e,t,s)=>{Object.defineProperty(t,\"__esModule\",{value:true});t.discriminatedUnion=t.date=t.boolean=t.bigint=t.array=t.any=t.coerce=t.ZodFirstPartyTypeKind=t.late=t.ZodSchema=t.Schema=t.ZodReadonly=t.ZodPipeline=t.ZodBranded=t.BRAND=t.ZodNaN=t.ZodCatch=t.ZodDefault=t.ZodNullable=t.ZodOptional=t.ZodTransformer=t.ZodEffects=t.ZodPromise=t.ZodNativeEnum=t.ZodEnum=t.ZodLiteral=t.ZodLazy=t.ZodFunction=t.ZodSet=t.ZodMap=t.ZodRecord=t.ZodTuple=t.ZodIntersection=t.ZodDiscriminatedUnion=t.ZodUnion=t.ZodObject=t.ZodArray=t.ZodVoid=t.ZodNever=t.ZodUnknown=t.ZodAny=t.ZodNull=t.ZodUndefined=t.ZodSymbol=t.ZodDate=t.ZodBoolean=t.ZodBigInt=t.ZodNumber=t.ZodString=t.ZodType=void 0;t.NEVER=t[\"void\"]=t.unknown=t.union=t.undefined=t.tuple=t.transformer=t.symbol=t.string=t.strictObject=t.set=t.record=t.promise=t.preprocess=t.pipeline=t.ostring=t.optional=t.onumber=t.oboolean=t.object=t.number=t.nullable=t[\"null\"]=t.never=t.nativeEnum=t.nan=t.map=t.literal=t.lazy=t.intersection=t[\"instanceof\"]=t[\"function\"]=t[\"enum\"]=t.effect=void 0;t.datetimeRegex=datetimeRegex;t.custom=custom;const r=s(348);const a=s(61);const n=s(538);const i=s(818);const o=s(709);class ParseInputLazyPath{constructor(e,t,s,r){this._cachedPath=[];this.parent=e;this.data=t;this._path=s;this._key=r}get path(){if(!this._cachedPath.length){if(Array.isArray(this._key)){this._cachedPath.push(...this._path,...this._key)}else{this._cachedPath.push(...this._path,this._key)}}return this._cachedPath}}const handleResult=(e,t)=>{if((0,i.isValid)(t)){return{success:true,data:t.value}}else{if(!e.common.issues.length){throw new Error(\"Validation failed but no issues detected.\")}return{success:false,get error(){if(this._error)return this._error;const t=new r.ZodError(e.common.issues);this._error=t;return this._error}}}};function processCreateParams(e){if(!e)return{};const{errorMap:t,invalid_type_error:s,required_error:r,description:a}=e;if(t&&(s||r)){throw new Error(`Can't use \"invalid_type_error\" or \"required_error\" in conjunction with custom error map.`)}if(t)return{errorMap:t,description:a};const customMap=(t,a)=>{const{message:n}=e;if(t.code===\"invalid_enum_value\"){return{message:n??a.defaultError}}if(typeof a.data===\"undefined\"){return{message:n??r??a.defaultError}}if(t.code!==\"invalid_type\")return{message:a.defaultError};return{message:n??s??a.defaultError}};return{errorMap:customMap,description:a}}class ZodType{get description(){return this._def.description}_getType(e){return(0,o.getParsedType)(e.data)}_getOrReturnCtx(e,t){return t||{common:e.parent.common,data:e.data,parsedType:(0,o.getParsedType)(e.data),schemaErrorMap:this._def.errorMap,path:e.path,parent:e.parent}}_processInputParams(e){return{status:new i.ParseStatus,ctx:{common:e.parent.common,data:e.data,parsedType:(0,o.getParsedType)(e.data),schemaErrorMap:this._def.errorMap,path:e.path,parent:e.parent}}}_parseSync(e){const t=this._parse(e);if((0,i.isAsync)(t)){throw new Error(\"Synchronous parse encountered promise.\")}return t}_parseAsync(e){const t=this._parse(e);return Promise.resolve(t)}parse(e,t){const s=this.safeParse(e,t);if(s.success)return s.data;throw s.error}safeParse(e,t){const s={common:{issues:[],async:t?.async??false,contextualErrorMap:t?.errorMap},path:t?.path||[],schemaErrorMap:this._def.errorMap,parent:null,data:e,parsedType:(0,o.getParsedType)(e)};const r=this._parseSync({data:e,path:s.path,parent:s});return handleResult(s,r)}\"~validate\"(e){const t={common:{issues:[],async:!!this[\"~standard\"].async},path:[],schemaErrorMap:this._def.errorMap,parent:null,data:e,parsedType:(0,o.getParsedType)(e)};if(!this[\"~standard\"].async){try{const s=this._parseSync({data:e,path:[],parent:t});return(0,i.isValid)(s)?{value:s.value}:{issues:t.common.issues}}catch(e){if(e?.message?.toLowerCase()?.includes(\"encountered\")){this[\"~standard\"].async=true}t.common={issues:[],async:true}}}return this._parseAsync({data:e,path:[],parent:t}).then((e=>(0,i.isValid)(e)?{value:e.value}:{issues:t.common.issues}))}async parseAsync(e,t){const s=await this.safeParseAsync(e,t);if(s.success)return s.data;throw s.error}async safeParseAsync(e,t){const s={common:{issues:[],contextualErrorMap:t?.errorMap,async:true},path:t?.path||[],schemaErrorMap:this._def.errorMap,parent:null,data:e,parsedType:(0,o.getParsedType)(e)};const r=this._parse({data:e,path:s.path,parent:s});const a=await((0,i.isAsync)(r)?r:Promise.resolve(r));return handleResult(s,a)}refine(e,t){const getIssueProperties=e=>{if(typeof t===\"string\"||typeof t===\"undefined\"){return{message:t}}else if(typeof t===\"function\"){return t(e)}else{return t}};return this._refinement(((t,s)=>{const a=e(t);const setError=()=>s.addIssue({code:r.ZodIssueCode.custom,...getIssueProperties(t)});if(typeof Promise!==\"undefined\"&&a instanceof Promise){return a.then((e=>{if(!e){setError();return false}else{return true}}))}if(!a){setError();return false}else{return true}}))}refinement(e,t){return this._refinement(((s,r)=>{if(!e(s)){r.addIssue(typeof t===\"function\"?t(s,r):t);return false}else{return true}}))}_refinement(e){return new ZodEffects({schema:this,typeName:k.ZodEffects,effect:{type:\"refinement\",refinement:e}})}superRefine(e){return this._refinement(e)}constructor(e){this.spa=this.safeParseAsync;this._def=e;this.parse=this.parse.bind(this);this.safeParse=this.safeParse.bind(this);this.parseAsync=this.parseAsync.bind(this);this.safeParseAsync=this.safeParseAsync.bind(this);this.spa=this.spa.bind(this);this.refine=this.refine.bind(this);this.refinement=this.refinement.bind(this);this.superRefine=this.superRefine.bind(this);this.optional=this.optional.bind(this);this.nullable=this.nullable.bind(this);this.nullish=this.nullish.bind(this);this.array=this.array.bind(this);this.promise=this.promise.bind(this);this.or=this.or.bind(this);this.and=this.and.bind(this);this.transform=this.transform.bind(this);this.brand=this.brand.bind(this);this.default=this.default.bind(this);this.catch=this.catch.bind(this);this.describe=this.describe.bind(this);this.pipe=this.pipe.bind(this);this.readonly=this.readonly.bind(this);this.isNullable=this.isNullable.bind(this);this.isOptional=this.isOptional.bind(this);this[\"~standard\"]={version:1,vendor:\"zod\",validate:e=>this[\"~validate\"](e)}}optional(){return ZodOptional.create(this,this._def)}nullable(){return ZodNullable.create(this,this._def)}nullish(){return this.nullable().optional()}array(){return ZodArray.create(this)}promise(){return ZodPromise.create(this,this._def)}or(e){return ZodUnion.create([this,e],this._def)}and(e){return ZodIntersection.create(this,e,this._def)}transform(e){return new ZodEffects({...processCreateParams(this._def),schema:this,typeName:k.ZodEffects,effect:{type:\"transform\",transform:e}})}default(e){const t=typeof e===\"function\"?e:()=>e;return new ZodDefault({...processCreateParams(this._def),innerType:this,defaultValue:t,typeName:k.ZodDefault})}brand(){return new ZodBranded({typeName:k.ZodBranded,type:this,...processCreateParams(this._def)})}catch(e){const t=typeof e===\"function\"?e:()=>e;return new ZodCatch({...processCreateParams(this._def),innerType:this,catchValue:t,typeName:k.ZodCatch})}describe(e){const t=this.constructor;return new t({...this._def,description:e})}pipe(e){return ZodPipeline.create(this,e)}readonly(){return ZodReadonly.create(this)}isOptional(){return this.safeParse(undefined).success}isNullable(){return this.safeParse(null).success}}t.ZodType=ZodType;t.Schema=ZodType;t.ZodSchema=ZodType;const d=/^c[^\\s-]{8,}$/i;const u=/^[0-9a-z]+$/;const c=/^[0-9A-HJKMNP-TV-Z]{26}$/i;const l=/^[0-9a-fA-F]{8}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{12}$/i;const p=/^[a-z0-9_-]{21}$/i;const f=/^[A-Za-z0-9-_]+\\.[A-Za-z0-9-_]+\\.[A-Za-z0-9-_]*$/;const h=/^[-+]?P(?!$)(?:(?:[-+]?\\d+Y)|(?:[-+]?\\d+[.,]\\d+Y$))?(?:(?:[-+]?\\d+M)|(?:[-+]?\\d+[.,]\\d+M$))?(?:(?:[-+]?\\d+W)|(?:[-+]?\\d+[.,]\\d+W$))?(?:(?:[-+]?\\d+D)|(?:[-+]?\\d+[.,]\\d+D$))?(?:T(?=[\\d+-])(?:(?:[-+]?\\d+H)|(?:[-+]?\\d+[.,]\\d+H$))?(?:(?:[-+]?\\d+M)|(?:[-+]?\\d+[.,]\\d+M$))?(?:[-+]?\\d+(?:[.,]\\d+)?S)?)??$/;const m=/^(?!\\.)(?!.*\\.\\.)([A-Z0-9_'+\\-\\.]*)[A-Z0-9_+-]@([A-Z0-9][A-Z0-9\\-]*\\.)+[A-Z]{2,}$/i;const y=`^(\\\\p{Extended_Pictographic}|\\\\p{Emoji_Component})+$`;let Z;const _=/^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])$/;const g=/^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\/(3[0-2]|[12]?[0-9])$/;const v=/^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))$/;const I=/^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))\\/(12[0-8]|1[01][0-9]|[1-9]?[0-9])$/;const T=/^([0-9a-zA-Z+/]{4})*(([0-9a-zA-Z+/]{2}==)|([0-9a-zA-Z+/]{3}=))?$/;const b=/^([0-9a-zA-Z-_]{4})*(([0-9a-zA-Z-_]{2}(==)?)|([0-9a-zA-Z-_]{3}(=)?))?$/;const x=`((\\\\d\\\\d[2468][048]|\\\\d\\\\d[13579][26]|\\\\d\\\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\\\d{4}-((0[13578]|1[02])-(0[1-9]|[12]\\\\d|3[01])|(0[469]|11)-(0[1-9]|[12]\\\\d|30)|(02)-(0[1-9]|1\\\\d|2[0-8])))`;const C=new RegExp(`^${x}$`);function timeRegexSource(e){let t=`[0-5]\\\\d`;if(e.precision){t=`${t}\\\\.\\\\d{${e.precision}}`}else if(e.precision==null){t=`${t}(\\\\.\\\\d+)?`}const s=e.precision?\"+\":\"?\";return`([01]\\\\d|2[0-3]):[0-5]\\\\d(:${t})${s}`}function timeRegex(e){return new RegExp(`^${timeRegexSource(e)}$`)}function datetimeRegex(e){let t=`${x}T${timeRegexSource(e)}`;const s=[];s.push(e.local?`Z?`:`Z`);if(e.offset)s.push(`([+-]\\\\d{2}:?\\\\d{2})`);t=`${t}(${s.join(\"|\")})`;return new RegExp(`^${t}$`)}function isValidIP(e,t){if((t===\"v4\"||!t)&&_.test(e)){return true}if((t===\"v6\"||!t)&&v.test(e)){return true}return false}function isValidJWT(e,t){if(!f.test(e))return false;try{const[s]=e.split(\".\");if(!s)return false;const r=s.replace(/-/g,\"+\").replace(/_/g,\"/\").padEnd(s.length+(4-s.length%4)%4,\"=\");const a=JSON.parse(atob(r));if(typeof a!==\"object\"||a===null)return false;if(\"typ\"in a&&a?.typ!==\"JWT\")return false;if(!a.alg)return false;if(t&&a.alg!==t)return false;return true}catch{return false}}function isValidCidr(e,t){if((t===\"v4\"||!t)&&g.test(e)){return true}if((t===\"v6\"||!t)&&I.test(e)){return true}return false}class ZodString extends ZodType{_parse(e){if(this._def.coerce){e.data=String(e.data)}const t=this._getType(e);if(t!==o.ZodParsedType.string){const t=this._getOrReturnCtx(e);(0,i.addIssueToContext)(t,{code:r.ZodIssueCode.invalid_type,expected:o.ZodParsedType.string,received:t.parsedType});return i.INVALID}const s=new i.ParseStatus;let a=undefined;for(const t of this._def.checks){if(t.kind===\"min\"){if(e.data.lengtht.value){a=this._getOrReturnCtx(e,a);(0,i.addIssueToContext)(a,{code:r.ZodIssueCode.too_big,maximum:t.value,type:\"string\",inclusive:true,exact:false,message:t.message});s.dirty()}}else if(t.kind===\"length\"){const n=e.data.length>t.value;const o=e.data.lengthe.test(t)),{validation:t,code:r.ZodIssueCode.invalid_string,...n.errorUtil.errToObj(s)})}_addCheck(e){return new ZodString({...this._def,checks:[...this._def.checks,e]})}email(e){return this._addCheck({kind:\"email\",...n.errorUtil.errToObj(e)})}url(e){return this._addCheck({kind:\"url\",...n.errorUtil.errToObj(e)})}emoji(e){return this._addCheck({kind:\"emoji\",...n.errorUtil.errToObj(e)})}uuid(e){return this._addCheck({kind:\"uuid\",...n.errorUtil.errToObj(e)})}nanoid(e){return this._addCheck({kind:\"nanoid\",...n.errorUtil.errToObj(e)})}cuid(e){return this._addCheck({kind:\"cuid\",...n.errorUtil.errToObj(e)})}cuid2(e){return this._addCheck({kind:\"cuid2\",...n.errorUtil.errToObj(e)})}ulid(e){return this._addCheck({kind:\"ulid\",...n.errorUtil.errToObj(e)})}base64(e){return this._addCheck({kind:\"base64\",...n.errorUtil.errToObj(e)})}base64url(e){return this._addCheck({kind:\"base64url\",...n.errorUtil.errToObj(e)})}jwt(e){return this._addCheck({kind:\"jwt\",...n.errorUtil.errToObj(e)})}ip(e){return this._addCheck({kind:\"ip\",...n.errorUtil.errToObj(e)})}cidr(e){return this._addCheck({kind:\"cidr\",...n.errorUtil.errToObj(e)})}datetime(e){if(typeof e===\"string\"){return this._addCheck({kind:\"datetime\",precision:null,offset:false,local:false,message:e})}return this._addCheck({kind:\"datetime\",precision:typeof e?.precision===\"undefined\"?null:e?.precision,offset:e?.offset??false,local:e?.local??false,...n.errorUtil.errToObj(e?.message)})}date(e){return this._addCheck({kind:\"date\",message:e})}time(e){if(typeof e===\"string\"){return this._addCheck({kind:\"time\",precision:null,message:e})}return this._addCheck({kind:\"time\",precision:typeof e?.precision===\"undefined\"?null:e?.precision,...n.errorUtil.errToObj(e?.message)})}duration(e){return this._addCheck({kind:\"duration\",...n.errorUtil.errToObj(e)})}regex(e,t){return this._addCheck({kind:\"regex\",regex:e,...n.errorUtil.errToObj(t)})}includes(e,t){return this._addCheck({kind:\"includes\",value:e,position:t?.position,...n.errorUtil.errToObj(t?.message)})}startsWith(e,t){return this._addCheck({kind:\"startsWith\",value:e,...n.errorUtil.errToObj(t)})}endsWith(e,t){return this._addCheck({kind:\"endsWith\",value:e,...n.errorUtil.errToObj(t)})}min(e,t){return this._addCheck({kind:\"min\",value:e,...n.errorUtil.errToObj(t)})}max(e,t){return this._addCheck({kind:\"max\",value:e,...n.errorUtil.errToObj(t)})}length(e,t){return this._addCheck({kind:\"length\",value:e,...n.errorUtil.errToObj(t)})}nonempty(e){return this.min(1,n.errorUtil.errToObj(e))}trim(){return new ZodString({...this._def,checks:[...this._def.checks,{kind:\"trim\"}]})}toLowerCase(){return new ZodString({...this._def,checks:[...this._def.checks,{kind:\"toLowerCase\"}]})}toUpperCase(){return new ZodString({...this._def,checks:[...this._def.checks,{kind:\"toUpperCase\"}]})}get isDatetime(){return!!this._def.checks.find((e=>e.kind===\"datetime\"))}get isDate(){return!!this._def.checks.find((e=>e.kind===\"date\"))}get isTime(){return!!this._def.checks.find((e=>e.kind===\"time\"))}get isDuration(){return!!this._def.checks.find((e=>e.kind===\"duration\"))}get isEmail(){return!!this._def.checks.find((e=>e.kind===\"email\"))}get isURL(){return!!this._def.checks.find((e=>e.kind===\"url\"))}get isEmoji(){return!!this._def.checks.find((e=>e.kind===\"emoji\"))}get isUUID(){return!!this._def.checks.find((e=>e.kind===\"uuid\"))}get isNANOID(){return!!this._def.checks.find((e=>e.kind===\"nanoid\"))}get isCUID(){return!!this._def.checks.find((e=>e.kind===\"cuid\"))}get isCUID2(){return!!this._def.checks.find((e=>e.kind===\"cuid2\"))}get isULID(){return!!this._def.checks.find((e=>e.kind===\"ulid\"))}get isIP(){return!!this._def.checks.find((e=>e.kind===\"ip\"))}get isCIDR(){return!!this._def.checks.find((e=>e.kind===\"cidr\"))}get isBase64(){return!!this._def.checks.find((e=>e.kind===\"base64\"))}get isBase64url(){return!!this._def.checks.find((e=>e.kind===\"base64url\"))}get minLength(){let e=null;for(const t of this._def.checks){if(t.kind===\"min\"){if(e===null||t.value>e)e=t.value}}return e}get maxLength(){let e=null;for(const t of this._def.checks){if(t.kind===\"max\"){if(e===null||t.valuenew ZodString({checks:[],typeName:k.ZodString,coerce:e?.coerce??false,...processCreateParams(e)});function floatSafeRemainder(e,t){const s=(e.toString().split(\".\")[1]||\"\").length;const r=(t.toString().split(\".\")[1]||\"\").length;const a=s>r?s:r;const n=Number.parseInt(e.toFixed(a).replace(\".\",\"\"));const i=Number.parseInt(t.toFixed(a).replace(\".\",\"\"));return n%i/10**a}class ZodNumber extends ZodType{constructor(){super(...arguments);this.min=this.gte;this.max=this.lte;this.step=this.multipleOf}_parse(e){if(this._def.coerce){e.data=Number(e.data)}const t=this._getType(e);if(t!==o.ZodParsedType.number){const t=this._getOrReturnCtx(e);(0,i.addIssueToContext)(t,{code:r.ZodIssueCode.invalid_type,expected:o.ZodParsedType.number,received:t.parsedType});return i.INVALID}let s=undefined;const a=new i.ParseStatus;for(const t of this._def.checks){if(t.kind===\"int\"){if(!o.util.isInteger(e.data)){s=this._getOrReturnCtx(e,s);(0,i.addIssueToContext)(s,{code:r.ZodIssueCode.invalid_type,expected:\"integer\",received:\"float\",message:t.message});a.dirty()}}else if(t.kind===\"min\"){const n=t.inclusive?e.datat.value:e.data>=t.value;if(n){s=this._getOrReturnCtx(e,s);(0,i.addIssueToContext)(s,{code:r.ZodIssueCode.too_big,maximum:t.value,type:\"number\",inclusive:t.inclusive,exact:false,message:t.message});a.dirty()}}else if(t.kind===\"multipleOf\"){if(floatSafeRemainder(e.data,t.value)!==0){s=this._getOrReturnCtx(e,s);(0,i.addIssueToContext)(s,{code:r.ZodIssueCode.not_multiple_of,multipleOf:t.value,message:t.message});a.dirty()}}else if(t.kind===\"finite\"){if(!Number.isFinite(e.data)){s=this._getOrReturnCtx(e,s);(0,i.addIssueToContext)(s,{code:r.ZodIssueCode.not_finite,message:t.message});a.dirty()}}else{o.util.assertNever(t)}}return{status:a.value,value:e.data}}gte(e,t){return this.setLimit(\"min\",e,true,n.errorUtil.toString(t))}gt(e,t){return this.setLimit(\"min\",e,false,n.errorUtil.toString(t))}lte(e,t){return this.setLimit(\"max\",e,true,n.errorUtil.toString(t))}lt(e,t){return this.setLimit(\"max\",e,false,n.errorUtil.toString(t))}setLimit(e,t,s,r){return new ZodNumber({...this._def,checks:[...this._def.checks,{kind:e,value:t,inclusive:s,message:n.errorUtil.toString(r)}]})}_addCheck(e){return new ZodNumber({...this._def,checks:[...this._def.checks,e]})}int(e){return this._addCheck({kind:\"int\",message:n.errorUtil.toString(e)})}positive(e){return this._addCheck({kind:\"min\",value:0,inclusive:false,message:n.errorUtil.toString(e)})}negative(e){return this._addCheck({kind:\"max\",value:0,inclusive:false,message:n.errorUtil.toString(e)})}nonpositive(e){return this._addCheck({kind:\"max\",value:0,inclusive:true,message:n.errorUtil.toString(e)})}nonnegative(e){return this._addCheck({kind:\"min\",value:0,inclusive:true,message:n.errorUtil.toString(e)})}multipleOf(e,t){return this._addCheck({kind:\"multipleOf\",value:e,message:n.errorUtil.toString(t)})}finite(e){return this._addCheck({kind:\"finite\",message:n.errorUtil.toString(e)})}safe(e){return this._addCheck({kind:\"min\",inclusive:true,value:Number.MIN_SAFE_INTEGER,message:n.errorUtil.toString(e)})._addCheck({kind:\"max\",inclusive:true,value:Number.MAX_SAFE_INTEGER,message:n.errorUtil.toString(e)})}get minValue(){let e=null;for(const t of this._def.checks){if(t.kind===\"min\"){if(e===null||t.value>e)e=t.value}}return e}get maxValue(){let e=null;for(const t of this._def.checks){if(t.kind===\"max\"){if(e===null||t.valuee.kind===\"int\"||e.kind===\"multipleOf\"&&o.util.isInteger(e.value)))}get isFinite(){let e=null;let t=null;for(const s of this._def.checks){if(s.kind===\"finite\"||s.kind===\"int\"||s.kind===\"multipleOf\"){return true}else if(s.kind===\"min\"){if(t===null||s.value>t)t=s.value}else if(s.kind===\"max\"){if(e===null||s.valuenew ZodNumber({checks:[],typeName:k.ZodNumber,coerce:e?.coerce||false,...processCreateParams(e)});class ZodBigInt extends ZodType{constructor(){super(...arguments);this.min=this.gte;this.max=this.lte}_parse(e){if(this._def.coerce){try{e.data=BigInt(e.data)}catch{return this._getInvalidInput(e)}}const t=this._getType(e);if(t!==o.ZodParsedType.bigint){return this._getInvalidInput(e)}let s=undefined;const a=new i.ParseStatus;for(const t of this._def.checks){if(t.kind===\"min\"){const n=t.inclusive?e.datat.value:e.data>=t.value;if(n){s=this._getOrReturnCtx(e,s);(0,i.addIssueToContext)(s,{code:r.ZodIssueCode.too_big,type:\"bigint\",maximum:t.value,inclusive:t.inclusive,message:t.message});a.dirty()}}else if(t.kind===\"multipleOf\"){if(e.data%t.value!==BigInt(0)){s=this._getOrReturnCtx(e,s);(0,i.addIssueToContext)(s,{code:r.ZodIssueCode.not_multiple_of,multipleOf:t.value,message:t.message});a.dirty()}}else{o.util.assertNever(t)}}return{status:a.value,value:e.data}}_getInvalidInput(e){const t=this._getOrReturnCtx(e);(0,i.addIssueToContext)(t,{code:r.ZodIssueCode.invalid_type,expected:o.ZodParsedType.bigint,received:t.parsedType});return i.INVALID}gte(e,t){return this.setLimit(\"min\",e,true,n.errorUtil.toString(t))}gt(e,t){return this.setLimit(\"min\",e,false,n.errorUtil.toString(t))}lte(e,t){return this.setLimit(\"max\",e,true,n.errorUtil.toString(t))}lt(e,t){return this.setLimit(\"max\",e,false,n.errorUtil.toString(t))}setLimit(e,t,s,r){return new ZodBigInt({...this._def,checks:[...this._def.checks,{kind:e,value:t,inclusive:s,message:n.errorUtil.toString(r)}]})}_addCheck(e){return new ZodBigInt({...this._def,checks:[...this._def.checks,e]})}positive(e){return this._addCheck({kind:\"min\",value:BigInt(0),inclusive:false,message:n.errorUtil.toString(e)})}negative(e){return this._addCheck({kind:\"max\",value:BigInt(0),inclusive:false,message:n.errorUtil.toString(e)})}nonpositive(e){return this._addCheck({kind:\"max\",value:BigInt(0),inclusive:true,message:n.errorUtil.toString(e)})}nonnegative(e){return this._addCheck({kind:\"min\",value:BigInt(0),inclusive:true,message:n.errorUtil.toString(e)})}multipleOf(e,t){return this._addCheck({kind:\"multipleOf\",value:e,message:n.errorUtil.toString(t)})}get minValue(){let e=null;for(const t of this._def.checks){if(t.kind===\"min\"){if(e===null||t.value>e)e=t.value}}return e}get maxValue(){let e=null;for(const t of this._def.checks){if(t.kind===\"max\"){if(e===null||t.valuenew ZodBigInt({checks:[],typeName:k.ZodBigInt,coerce:e?.coerce??false,...processCreateParams(e)});class ZodBoolean extends ZodType{_parse(e){if(this._def.coerce){e.data=Boolean(e.data)}const t=this._getType(e);if(t!==o.ZodParsedType.boolean){const t=this._getOrReturnCtx(e);(0,i.addIssueToContext)(t,{code:r.ZodIssueCode.invalid_type,expected:o.ZodParsedType.boolean,received:t.parsedType});return i.INVALID}return(0,i.OK)(e.data)}}t.ZodBoolean=ZodBoolean;ZodBoolean.create=e=>new ZodBoolean({typeName:k.ZodBoolean,coerce:e?.coerce||false,...processCreateParams(e)});class ZodDate extends ZodType{_parse(e){if(this._def.coerce){e.data=new Date(e.data)}const t=this._getType(e);if(t!==o.ZodParsedType.date){const t=this._getOrReturnCtx(e);(0,i.addIssueToContext)(t,{code:r.ZodIssueCode.invalid_type,expected:o.ZodParsedType.date,received:t.parsedType});return i.INVALID}if(Number.isNaN(e.data.getTime())){const t=this._getOrReturnCtx(e);(0,i.addIssueToContext)(t,{code:r.ZodIssueCode.invalid_date});return i.INVALID}const s=new i.ParseStatus;let a=undefined;for(const t of this._def.checks){if(t.kind===\"min\"){if(e.data.getTime()t.value){a=this._getOrReturnCtx(e,a);(0,i.addIssueToContext)(a,{code:r.ZodIssueCode.too_big,message:t.message,inclusive:true,exact:false,maximum:t.value,type:\"date\"});s.dirty()}}else{o.util.assertNever(t)}}return{status:s.value,value:new Date(e.data.getTime())}}_addCheck(e){return new ZodDate({...this._def,checks:[...this._def.checks,e]})}min(e,t){return this._addCheck({kind:\"min\",value:e.getTime(),message:n.errorUtil.toString(t)})}max(e,t){return this._addCheck({kind:\"max\",value:e.getTime(),message:n.errorUtil.toString(t)})}get minDate(){let e=null;for(const t of this._def.checks){if(t.kind===\"min\"){if(e===null||t.value>e)e=t.value}}return e!=null?new Date(e):null}get maxDate(){let e=null;for(const t of this._def.checks){if(t.kind===\"max\"){if(e===null||t.valuenew ZodDate({checks:[],coerce:e?.coerce||false,typeName:k.ZodDate,...processCreateParams(e)});class ZodSymbol extends ZodType{_parse(e){const t=this._getType(e);if(t!==o.ZodParsedType.symbol){const t=this._getOrReturnCtx(e);(0,i.addIssueToContext)(t,{code:r.ZodIssueCode.invalid_type,expected:o.ZodParsedType.symbol,received:t.parsedType});return i.INVALID}return(0,i.OK)(e.data)}}t.ZodSymbol=ZodSymbol;ZodSymbol.create=e=>new ZodSymbol({typeName:k.ZodSymbol,...processCreateParams(e)});class ZodUndefined extends ZodType{_parse(e){const t=this._getType(e);if(t!==o.ZodParsedType.undefined){const t=this._getOrReturnCtx(e);(0,i.addIssueToContext)(t,{code:r.ZodIssueCode.invalid_type,expected:o.ZodParsedType.undefined,received:t.parsedType});return i.INVALID}return(0,i.OK)(e.data)}}t.ZodUndefined=ZodUndefined;ZodUndefined.create=e=>new ZodUndefined({typeName:k.ZodUndefined,...processCreateParams(e)});class ZodNull extends ZodType{_parse(e){const t=this._getType(e);if(t!==o.ZodParsedType.null){const t=this._getOrReturnCtx(e);(0,i.addIssueToContext)(t,{code:r.ZodIssueCode.invalid_type,expected:o.ZodParsedType.null,received:t.parsedType});return i.INVALID}return(0,i.OK)(e.data)}}t.ZodNull=ZodNull;ZodNull.create=e=>new ZodNull({typeName:k.ZodNull,...processCreateParams(e)});class ZodAny extends ZodType{constructor(){super(...arguments);this._any=true}_parse(e){return(0,i.OK)(e.data)}}t.ZodAny=ZodAny;ZodAny.create=e=>new ZodAny({typeName:k.ZodAny,...processCreateParams(e)});class ZodUnknown extends ZodType{constructor(){super(...arguments);this._unknown=true}_parse(e){return(0,i.OK)(e.data)}}t.ZodUnknown=ZodUnknown;ZodUnknown.create=e=>new ZodUnknown({typeName:k.ZodUnknown,...processCreateParams(e)});class ZodNever extends ZodType{_parse(e){const t=this._getOrReturnCtx(e);(0,i.addIssueToContext)(t,{code:r.ZodIssueCode.invalid_type,expected:o.ZodParsedType.never,received:t.parsedType});return i.INVALID}}t.ZodNever=ZodNever;ZodNever.create=e=>new ZodNever({typeName:k.ZodNever,...processCreateParams(e)});class ZodVoid extends ZodType{_parse(e){const t=this._getType(e);if(t!==o.ZodParsedType.undefined){const t=this._getOrReturnCtx(e);(0,i.addIssueToContext)(t,{code:r.ZodIssueCode.invalid_type,expected:o.ZodParsedType.void,received:t.parsedType});return i.INVALID}return(0,i.OK)(e.data)}}t.ZodVoid=ZodVoid;ZodVoid.create=e=>new ZodVoid({typeName:k.ZodVoid,...processCreateParams(e)});class ZodArray extends ZodType{_parse(e){const{ctx:t,status:s}=this._processInputParams(e);const a=this._def;if(t.parsedType!==o.ZodParsedType.array){(0,i.addIssueToContext)(t,{code:r.ZodIssueCode.invalid_type,expected:o.ZodParsedType.array,received:t.parsedType});return i.INVALID}if(a.exactLength!==null){const e=t.data.length>a.exactLength.value;const n=t.data.lengtha.maxLength.value){(0,i.addIssueToContext)(t,{code:r.ZodIssueCode.too_big,maximum:a.maxLength.value,type:\"array\",inclusive:true,exact:false,message:a.maxLength.message});s.dirty()}}if(t.common.async){return Promise.all([...t.data].map(((e,s)=>a.type._parseAsync(new ParseInputLazyPath(t,e,t.path,s))))).then((e=>i.ParseStatus.mergeArray(s,e)))}const n=[...t.data].map(((e,s)=>a.type._parseSync(new ParseInputLazyPath(t,e,t.path,s))));return i.ParseStatus.mergeArray(s,n)}get element(){return this._def.type}min(e,t){return new ZodArray({...this._def,minLength:{value:e,message:n.errorUtil.toString(t)}})}max(e,t){return new ZodArray({...this._def,maxLength:{value:e,message:n.errorUtil.toString(t)}})}length(e,t){return new ZodArray({...this._def,exactLength:{value:e,message:n.errorUtil.toString(t)}})}nonempty(e){return this.min(1,e)}}t.ZodArray=ZodArray;ZodArray.create=(e,t)=>new ZodArray({type:e,minLength:null,maxLength:null,exactLength:null,typeName:k.ZodArray,...processCreateParams(t)});function deepPartialify(e){if(e instanceof ZodObject){const t={};for(const s in e.shape){const r=e.shape[s];t[s]=ZodOptional.create(deepPartialify(r))}return new ZodObject({...e._def,shape:()=>t})}else if(e instanceof ZodArray){return new ZodArray({...e._def,type:deepPartialify(e.element)})}else if(e instanceof ZodOptional){return ZodOptional.create(deepPartialify(e.unwrap()))}else if(e instanceof ZodNullable){return ZodNullable.create(deepPartialify(e.unwrap()))}else if(e instanceof ZodTuple){return ZodTuple.create(e.items.map((e=>deepPartialify(e))))}else{return e}}class ZodObject extends ZodType{constructor(){super(...arguments);this._cached=null;this.nonstrict=this.passthrough;this.augment=this.extend}_getCached(){if(this._cached!==null)return this._cached;const e=this._def.shape();const t=o.util.objectKeys(e);this._cached={shape:e,keys:t};return this._cached}_parse(e){const t=this._getType(e);if(t!==o.ZodParsedType.object){const t=this._getOrReturnCtx(e);(0,i.addIssueToContext)(t,{code:r.ZodIssueCode.invalid_type,expected:o.ZodParsedType.object,received:t.parsedType});return i.INVALID}const{status:s,ctx:a}=this._processInputParams(e);const{shape:n,keys:d}=this._getCached();const u=[];if(!(this._def.catchall instanceof ZodNever&&this._def.unknownKeys===\"strip\")){for(const e in a.data){if(!d.includes(e)){u.push(e)}}}const c=[];for(const e of d){const t=n[e];const s=a.data[e];c.push({key:{status:\"valid\",value:e},value:t._parse(new ParseInputLazyPath(a,s,a.path,e)),alwaysSet:e in a.data})}if(this._def.catchall instanceof ZodNever){const e=this._def.unknownKeys;if(e===\"passthrough\"){for(const e of u){c.push({key:{status:\"valid\",value:e},value:{status:\"valid\",value:a.data[e]}})}}else if(e===\"strict\"){if(u.length>0){(0,i.addIssueToContext)(a,{code:r.ZodIssueCode.unrecognized_keys,keys:u});s.dirty()}}else if(e===\"strip\"){}else{throw new Error(`Internal ZodObject error: invalid unknownKeys value.`)}}else{const e=this._def.catchall;for(const t of u){const s=a.data[t];c.push({key:{status:\"valid\",value:t},value:e._parse(new ParseInputLazyPath(a,s,a.path,t)),alwaysSet:t in a.data})}}if(a.common.async){return Promise.resolve().then((async()=>{const e=[];for(const t of c){const s=await t.key;const r=await t.value;e.push({key:s,value:r,alwaysSet:t.alwaysSet})}return e})).then((e=>i.ParseStatus.mergeObjectSync(s,e)))}else{return i.ParseStatus.mergeObjectSync(s,c)}}get shape(){return this._def.shape()}strict(e){n.errorUtil.errToObj;return new ZodObject({...this._def,unknownKeys:\"strict\",...e!==undefined?{errorMap:(t,s)=>{const r=this._def.errorMap?.(t,s).message??s.defaultError;if(t.code===\"unrecognized_keys\")return{message:n.errorUtil.errToObj(e).message??r};return{message:r}}}:{}})}strip(){return new ZodObject({...this._def,unknownKeys:\"strip\"})}passthrough(){return new ZodObject({...this._def,unknownKeys:\"passthrough\"})}extend(e){return new ZodObject({...this._def,shape:()=>({...this._def.shape(),...e})})}merge(e){const t=new ZodObject({unknownKeys:e._def.unknownKeys,catchall:e._def.catchall,shape:()=>({...this._def.shape(),...e._def.shape()}),typeName:k.ZodObject});return t}setKey(e,t){return this.augment({[e]:t})}catchall(e){return new ZodObject({...this._def,catchall:e})}pick(e){const t={};for(const s of o.util.objectKeys(e)){if(e[s]&&this.shape[s]){t[s]=this.shape[s]}}return new ZodObject({...this._def,shape:()=>t})}omit(e){const t={};for(const s of o.util.objectKeys(this.shape)){if(!e[s]){t[s]=this.shape[s]}}return new ZodObject({...this._def,shape:()=>t})}deepPartial(){return deepPartialify(this)}partial(e){const t={};for(const s of o.util.objectKeys(this.shape)){const r=this.shape[s];if(e&&!e[s]){t[s]=r}else{t[s]=r.optional()}}return new ZodObject({...this._def,shape:()=>t})}required(e){const t={};for(const s of o.util.objectKeys(this.shape)){if(e&&!e[s]){t[s]=this.shape[s]}else{const e=this.shape[s];let r=e;while(r instanceof ZodOptional){r=r._def.innerType}t[s]=r}}return new ZodObject({...this._def,shape:()=>t})}keyof(){return createZodEnum(o.util.objectKeys(this.shape))}}t.ZodObject=ZodObject;ZodObject.create=(e,t)=>new ZodObject({shape:()=>e,unknownKeys:\"strip\",catchall:ZodNever.create(),typeName:k.ZodObject,...processCreateParams(t)});ZodObject.strictCreate=(e,t)=>new ZodObject({shape:()=>e,unknownKeys:\"strict\",catchall:ZodNever.create(),typeName:k.ZodObject,...processCreateParams(t)});ZodObject.lazycreate=(e,t)=>new ZodObject({shape:e,unknownKeys:\"strip\",catchall:ZodNever.create(),typeName:k.ZodObject,...processCreateParams(t)});class ZodUnion extends ZodType{_parse(e){const{ctx:t}=this._processInputParams(e);const s=this._def.options;function handleResults(e){for(const t of e){if(t.result.status===\"valid\"){return t.result}}for(const s of e){if(s.result.status===\"dirty\"){t.common.issues.push(...s.ctx.common.issues);return s.result}}const s=e.map((e=>new r.ZodError(e.ctx.common.issues)));(0,i.addIssueToContext)(t,{code:r.ZodIssueCode.invalid_union,unionErrors:s});return i.INVALID}if(t.common.async){return Promise.all(s.map((async e=>{const s={...t,common:{...t.common,issues:[]},parent:null};return{result:await e._parseAsync({data:t.data,path:t.path,parent:s}),ctx:s}}))).then(handleResults)}else{let e=undefined;const a=[];for(const r of s){const s={...t,common:{...t.common,issues:[]},parent:null};const n=r._parseSync({data:t.data,path:t.path,parent:s});if(n.status===\"valid\"){return n}else if(n.status===\"dirty\"&&!e){e={result:n,ctx:s}}if(s.common.issues.length){a.push(s.common.issues)}}if(e){t.common.issues.push(...e.ctx.common.issues);return e.result}const n=a.map((e=>new r.ZodError(e)));(0,i.addIssueToContext)(t,{code:r.ZodIssueCode.invalid_union,unionErrors:n});return i.INVALID}}get options(){return this._def.options}}t.ZodUnion=ZodUnion;ZodUnion.create=(e,t)=>new ZodUnion({options:e,typeName:k.ZodUnion,...processCreateParams(t)});const getDiscriminator=e=>{if(e instanceof ZodLazy){return getDiscriminator(e.schema)}else if(e instanceof ZodEffects){return getDiscriminator(e.innerType())}else if(e instanceof ZodLiteral){return[e.value]}else if(e instanceof ZodEnum){return e.options}else if(e instanceof ZodNativeEnum){return o.util.objectValues(e.enum)}else if(e instanceof ZodDefault){return getDiscriminator(e._def.innerType)}else if(e instanceof ZodUndefined){return[undefined]}else if(e instanceof ZodNull){return[null]}else if(e instanceof ZodOptional){return[undefined,...getDiscriminator(e.unwrap())]}else if(e instanceof ZodNullable){return[null,...getDiscriminator(e.unwrap())]}else if(e instanceof ZodBranded){return getDiscriminator(e.unwrap())}else if(e instanceof ZodReadonly){return getDiscriminator(e.unwrap())}else if(e instanceof ZodCatch){return getDiscriminator(e._def.innerType)}else{return[]}};class ZodDiscriminatedUnion extends ZodType{_parse(e){const{ctx:t}=this._processInputParams(e);if(t.parsedType!==o.ZodParsedType.object){(0,i.addIssueToContext)(t,{code:r.ZodIssueCode.invalid_type,expected:o.ZodParsedType.object,received:t.parsedType});return i.INVALID}const s=this.discriminator;const a=t.data[s];const n=this.optionsMap.get(a);if(!n){(0,i.addIssueToContext)(t,{code:r.ZodIssueCode.invalid_union_discriminator,options:Array.from(this.optionsMap.keys()),path:[s]});return i.INVALID}if(t.common.async){return n._parseAsync({data:t.data,path:t.path,parent:t})}else{return n._parseSync({data:t.data,path:t.path,parent:t})}}get discriminator(){return this._def.discriminator}get options(){return this._def.options}get optionsMap(){return this._def.optionsMap}static create(e,t,s){const r=new Map;for(const s of t){const t=getDiscriminator(s.shape[e]);if(!t.length){throw new Error(`A discriminator value for key \\`${e}\\` could not be extracted from all schema options`)}for(const a of t){if(r.has(a)){throw new Error(`Discriminator property ${String(e)} has duplicate value ${String(a)}`)}r.set(a,s)}}return new ZodDiscriminatedUnion({typeName:k.ZodDiscriminatedUnion,discriminator:e,options:t,optionsMap:r,...processCreateParams(s)})}}t.ZodDiscriminatedUnion=ZodDiscriminatedUnion;function mergeValues(e,t){const s=(0,o.getParsedType)(e);const r=(0,o.getParsedType)(t);if(e===t){return{valid:true,data:e}}else if(s===o.ZodParsedType.object&&r===o.ZodParsedType.object){const s=o.util.objectKeys(t);const r=o.util.objectKeys(e).filter((e=>s.indexOf(e)!==-1));const a={...e,...t};for(const s of r){const r=mergeValues(e[s],t[s]);if(!r.valid){return{valid:false}}a[s]=r.data}return{valid:true,data:a}}else if(s===o.ZodParsedType.array&&r===o.ZodParsedType.array){if(e.length!==t.length){return{valid:false}}const s=[];for(let r=0;r{if((0,i.isAborted)(e)||(0,i.isAborted)(a)){return i.INVALID}const n=mergeValues(e.value,a.value);if(!n.valid){(0,i.addIssueToContext)(s,{code:r.ZodIssueCode.invalid_intersection_types});return i.INVALID}if((0,i.isDirty)(e)||(0,i.isDirty)(a)){t.dirty()}return{status:t.value,value:n.data}};if(s.common.async){return Promise.all([this._def.left._parseAsync({data:s.data,path:s.path,parent:s}),this._def.right._parseAsync({data:s.data,path:s.path,parent:s})]).then((([e,t])=>handleParsed(e,t)))}else{return handleParsed(this._def.left._parseSync({data:s.data,path:s.path,parent:s}),this._def.right._parseSync({data:s.data,path:s.path,parent:s}))}}}t.ZodIntersection=ZodIntersection;ZodIntersection.create=(e,t,s)=>new ZodIntersection({left:e,right:t,typeName:k.ZodIntersection,...processCreateParams(s)});class ZodTuple extends ZodType{_parse(e){const{status:t,ctx:s}=this._processInputParams(e);if(s.parsedType!==o.ZodParsedType.array){(0,i.addIssueToContext)(s,{code:r.ZodIssueCode.invalid_type,expected:o.ZodParsedType.array,received:s.parsedType});return i.INVALID}if(s.data.lengththis._def.items.length){(0,i.addIssueToContext)(s,{code:r.ZodIssueCode.too_big,maximum:this._def.items.length,inclusive:true,exact:false,type:\"array\"});t.dirty()}const n=[...s.data].map(((e,t)=>{const r=this._def.items[t]||this._def.rest;if(!r)return null;return r._parse(new ParseInputLazyPath(s,e,s.path,t))})).filter((e=>!!e));if(s.common.async){return Promise.all(n).then((e=>i.ParseStatus.mergeArray(t,e)))}else{return i.ParseStatus.mergeArray(t,n)}}get items(){return this._def.items}rest(e){return new ZodTuple({...this._def,rest:e})}}t.ZodTuple=ZodTuple;ZodTuple.create=(e,t)=>{if(!Array.isArray(e)){throw new Error(\"You must pass an array of schemas to z.tuple([ ... ])\")}return new ZodTuple({items:e,typeName:k.ZodTuple,rest:null,...processCreateParams(t)})};class ZodRecord extends ZodType{get keySchema(){return this._def.keyType}get valueSchema(){return this._def.valueType}_parse(e){const{status:t,ctx:s}=this._processInputParams(e);if(s.parsedType!==o.ZodParsedType.object){(0,i.addIssueToContext)(s,{code:r.ZodIssueCode.invalid_type,expected:o.ZodParsedType.object,received:s.parsedType});return i.INVALID}const a=[];const n=this._def.keyType;const d=this._def.valueType;for(const e in s.data){a.push({key:n._parse(new ParseInputLazyPath(s,e,s.path,e)),value:d._parse(new ParseInputLazyPath(s,s.data[e],s.path,e)),alwaysSet:e in s.data})}if(s.common.async){return i.ParseStatus.mergeObjectAsync(t,a)}else{return i.ParseStatus.mergeObjectSync(t,a)}}get element(){return this._def.valueType}static create(e,t,s){if(t instanceof ZodType){return new ZodRecord({keyType:e,valueType:t,typeName:k.ZodRecord,...processCreateParams(s)})}return new ZodRecord({keyType:ZodString.create(),valueType:e,typeName:k.ZodRecord,...processCreateParams(t)})}}t.ZodRecord=ZodRecord;class ZodMap extends ZodType{get keySchema(){return this._def.keyType}get valueSchema(){return this._def.valueType}_parse(e){const{status:t,ctx:s}=this._processInputParams(e);if(s.parsedType!==o.ZodParsedType.map){(0,i.addIssueToContext)(s,{code:r.ZodIssueCode.invalid_type,expected:o.ZodParsedType.map,received:s.parsedType});return i.INVALID}const a=this._def.keyType;const n=this._def.valueType;const d=[...s.data.entries()].map((([e,t],r)=>({key:a._parse(new ParseInputLazyPath(s,e,s.path,[r,\"key\"])),value:n._parse(new ParseInputLazyPath(s,t,s.path,[r,\"value\"]))})));if(s.common.async){const e=new Map;return Promise.resolve().then((async()=>{for(const s of d){const r=await s.key;const a=await s.value;if(r.status===\"aborted\"||a.status===\"aborted\"){return i.INVALID}if(r.status===\"dirty\"||a.status===\"dirty\"){t.dirty()}e.set(r.value,a.value)}return{status:t.value,value:e}}))}else{const e=new Map;for(const s of d){const r=s.key;const a=s.value;if(r.status===\"aborted\"||a.status===\"aborted\"){return i.INVALID}if(r.status===\"dirty\"||a.status===\"dirty\"){t.dirty()}e.set(r.value,a.value)}return{status:t.value,value:e}}}}t.ZodMap=ZodMap;ZodMap.create=(e,t,s)=>new ZodMap({valueType:t,keyType:e,typeName:k.ZodMap,...processCreateParams(s)});class ZodSet extends ZodType{_parse(e){const{status:t,ctx:s}=this._processInputParams(e);if(s.parsedType!==o.ZodParsedType.set){(0,i.addIssueToContext)(s,{code:r.ZodIssueCode.invalid_type,expected:o.ZodParsedType.set,received:s.parsedType});return i.INVALID}const a=this._def;if(a.minSize!==null){if(s.data.sizea.maxSize.value){(0,i.addIssueToContext)(s,{code:r.ZodIssueCode.too_big,maximum:a.maxSize.value,type:\"set\",inclusive:true,exact:false,message:a.maxSize.message});t.dirty()}}const n=this._def.valueType;function finalizeSet(e){const s=new Set;for(const r of e){if(r.status===\"aborted\")return i.INVALID;if(r.status===\"dirty\")t.dirty();s.add(r.value)}return{status:t.value,value:s}}const d=[...s.data.values()].map(((e,t)=>n._parse(new ParseInputLazyPath(s,e,s.path,t))));if(s.common.async){return Promise.all(d).then((e=>finalizeSet(e)))}else{return finalizeSet(d)}}min(e,t){return new ZodSet({...this._def,minSize:{value:e,message:n.errorUtil.toString(t)}})}max(e,t){return new ZodSet({...this._def,maxSize:{value:e,message:n.errorUtil.toString(t)}})}size(e,t){return this.min(e,t).max(e,t)}nonempty(e){return this.min(1,e)}}t.ZodSet=ZodSet;ZodSet.create=(e,t)=>new ZodSet({valueType:e,minSize:null,maxSize:null,typeName:k.ZodSet,...processCreateParams(t)});class ZodFunction extends ZodType{constructor(){super(...arguments);this.validate=this.implement}_parse(e){const{ctx:t}=this._processInputParams(e);if(t.parsedType!==o.ZodParsedType.function){(0,i.addIssueToContext)(t,{code:r.ZodIssueCode.invalid_type,expected:o.ZodParsedType.function,received:t.parsedType});return i.INVALID}function makeArgsIssue(e,s){return(0,i.makeIssue)({data:e,path:t.path,errorMaps:[t.common.contextualErrorMap,t.schemaErrorMap,(0,a.getErrorMap)(),a.defaultErrorMap].filter((e=>!!e)),issueData:{code:r.ZodIssueCode.invalid_arguments,argumentsError:s}})}function makeReturnsIssue(e,s){return(0,i.makeIssue)({data:e,path:t.path,errorMaps:[t.common.contextualErrorMap,t.schemaErrorMap,(0,a.getErrorMap)(),a.defaultErrorMap].filter((e=>!!e)),issueData:{code:r.ZodIssueCode.invalid_return_type,returnTypeError:s}})}const s={errorMap:t.common.contextualErrorMap};const n=t.data;if(this._def.returns instanceof ZodPromise){const e=this;return(0,i.OK)((async function(...t){const a=new r.ZodError([]);const i=await e._def.args.parseAsync(t,s).catch((e=>{a.addIssue(makeArgsIssue(t,e));throw a}));const o=await Reflect.apply(n,this,i);const d=await e._def.returns._def.type.parseAsync(o,s).catch((e=>{a.addIssue(makeReturnsIssue(o,e));throw a}));return d}))}else{const e=this;return(0,i.OK)((function(...t){const a=e._def.args.safeParse(t,s);if(!a.success){throw new r.ZodError([makeArgsIssue(t,a.error)])}const i=Reflect.apply(n,this,a.data);const o=e._def.returns.safeParse(i,s);if(!o.success){throw new r.ZodError([makeReturnsIssue(i,o.error)])}return o.data}))}}parameters(){return this._def.args}returnType(){return this._def.returns}args(...e){return new ZodFunction({...this._def,args:ZodTuple.create(e).rest(ZodUnknown.create())})}returns(e){return new ZodFunction({...this._def,returns:e})}implement(e){const t=this.parse(e);return t}strictImplement(e){const t=this.parse(e);return t}static create(e,t,s){return new ZodFunction({args:e?e:ZodTuple.create([]).rest(ZodUnknown.create()),returns:t||ZodUnknown.create(),typeName:k.ZodFunction,...processCreateParams(s)})}}t.ZodFunction=ZodFunction;class ZodLazy extends ZodType{get schema(){return this._def.getter()}_parse(e){const{ctx:t}=this._processInputParams(e);const s=this._def.getter();return s._parse({data:t.data,path:t.path,parent:t})}}t.ZodLazy=ZodLazy;ZodLazy.create=(e,t)=>new ZodLazy({getter:e,typeName:k.ZodLazy,...processCreateParams(t)});class ZodLiteral extends ZodType{_parse(e){if(e.data!==this._def.value){const t=this._getOrReturnCtx(e);(0,i.addIssueToContext)(t,{received:t.data,code:r.ZodIssueCode.invalid_literal,expected:this._def.value});return i.INVALID}return{status:\"valid\",value:e.data}}get value(){return this._def.value}}t.ZodLiteral=ZodLiteral;ZodLiteral.create=(e,t)=>new ZodLiteral({value:e,typeName:k.ZodLiteral,...processCreateParams(t)});function createZodEnum(e,t){return new ZodEnum({values:e,typeName:k.ZodEnum,...processCreateParams(t)})}class ZodEnum extends ZodType{_parse(e){if(typeof e.data!==\"string\"){const t=this._getOrReturnCtx(e);const s=this._def.values;(0,i.addIssueToContext)(t,{expected:o.util.joinValues(s),received:t.parsedType,code:r.ZodIssueCode.invalid_type});return i.INVALID}if(!this._cache){this._cache=new Set(this._def.values)}if(!this._cache.has(e.data)){const t=this._getOrReturnCtx(e);const s=this._def.values;(0,i.addIssueToContext)(t,{received:t.data,code:r.ZodIssueCode.invalid_enum_value,options:s});return i.INVALID}return(0,i.OK)(e.data)}get options(){return this._def.values}get enum(){const e={};for(const t of this._def.values){e[t]=t}return e}get Values(){const e={};for(const t of this._def.values){e[t]=t}return e}get Enum(){const e={};for(const t of this._def.values){e[t]=t}return e}extract(e,t=this._def){return ZodEnum.create(e,{...this._def,...t})}exclude(e,t=this._def){return ZodEnum.create(this.options.filter((t=>!e.includes(t))),{...this._def,...t})}}t.ZodEnum=ZodEnum;ZodEnum.create=createZodEnum;class ZodNativeEnum extends ZodType{_parse(e){const t=o.util.getValidEnumValues(this._def.values);const s=this._getOrReturnCtx(e);if(s.parsedType!==o.ZodParsedType.string&&s.parsedType!==o.ZodParsedType.number){const e=o.util.objectValues(t);(0,i.addIssueToContext)(s,{expected:o.util.joinValues(e),received:s.parsedType,code:r.ZodIssueCode.invalid_type});return i.INVALID}if(!this._cache){this._cache=new Set(o.util.getValidEnumValues(this._def.values))}if(!this._cache.has(e.data)){const e=o.util.objectValues(t);(0,i.addIssueToContext)(s,{received:s.data,code:r.ZodIssueCode.invalid_enum_value,options:e});return i.INVALID}return(0,i.OK)(e.data)}get enum(){return this._def.values}}t.ZodNativeEnum=ZodNativeEnum;ZodNativeEnum.create=(e,t)=>new ZodNativeEnum({values:e,typeName:k.ZodNativeEnum,...processCreateParams(t)});class ZodPromise extends ZodType{unwrap(){return this._def.type}_parse(e){const{ctx:t}=this._processInputParams(e);if(t.parsedType!==o.ZodParsedType.promise&&t.common.async===false){(0,i.addIssueToContext)(t,{code:r.ZodIssueCode.invalid_type,expected:o.ZodParsedType.promise,received:t.parsedType});return i.INVALID}const s=t.parsedType===o.ZodParsedType.promise?t.data:Promise.resolve(t.data);return(0,i.OK)(s.then((e=>this._def.type.parseAsync(e,{path:t.path,errorMap:t.common.contextualErrorMap}))))}}t.ZodPromise=ZodPromise;ZodPromise.create=(e,t)=>new ZodPromise({type:e,typeName:k.ZodPromise,...processCreateParams(t)});class ZodEffects extends ZodType{innerType(){return this._def.schema}sourceType(){return this._def.schema._def.typeName===k.ZodEffects?this._def.schema.sourceType():this._def.schema}_parse(e){const{status:t,ctx:s}=this._processInputParams(e);const r=this._def.effect||null;const a={addIssue:e=>{(0,i.addIssueToContext)(s,e);if(e.fatal){t.abort()}else{t.dirty()}},get path(){return s.path}};a.addIssue=a.addIssue.bind(a);if(r.type===\"preprocess\"){const e=r.transform(s.data,a);if(s.common.async){return Promise.resolve(e).then((async e=>{if(t.value===\"aborted\")return i.INVALID;const r=await this._def.schema._parseAsync({data:e,path:s.path,parent:s});if(r.status===\"aborted\")return i.INVALID;if(r.status===\"dirty\")return(0,i.DIRTY)(r.value);if(t.value===\"dirty\")return(0,i.DIRTY)(r.value);return r}))}else{if(t.value===\"aborted\")return i.INVALID;const r=this._def.schema._parseSync({data:e,path:s.path,parent:s});if(r.status===\"aborted\")return i.INVALID;if(r.status===\"dirty\")return(0,i.DIRTY)(r.value);if(t.value===\"dirty\")return(0,i.DIRTY)(r.value);return r}}if(r.type===\"refinement\"){const executeRefinement=e=>{const t=r.refinement(e,a);if(s.common.async){return Promise.resolve(t)}if(t instanceof Promise){throw new Error(\"Async refinement encountered during synchronous parse operation. Use .parseAsync instead.\")}return e};if(s.common.async===false){const e=this._def.schema._parseSync({data:s.data,path:s.path,parent:s});if(e.status===\"aborted\")return i.INVALID;if(e.status===\"dirty\")t.dirty();executeRefinement(e.value);return{status:t.value,value:e.value}}else{return this._def.schema._parseAsync({data:s.data,path:s.path,parent:s}).then((e=>{if(e.status===\"aborted\")return i.INVALID;if(e.status===\"dirty\")t.dirty();return executeRefinement(e.value).then((()=>({status:t.value,value:e.value})))}))}}if(r.type===\"transform\"){if(s.common.async===false){const e=this._def.schema._parseSync({data:s.data,path:s.path,parent:s});if(!(0,i.isValid)(e))return i.INVALID;const n=r.transform(e.value,a);if(n instanceof Promise){throw new Error(`Asynchronous transform encountered during synchronous parse operation. Use .parseAsync instead.`)}return{status:t.value,value:n}}else{return this._def.schema._parseAsync({data:s.data,path:s.path,parent:s}).then((e=>{if(!(0,i.isValid)(e))return i.INVALID;return Promise.resolve(r.transform(e.value,a)).then((e=>({status:t.value,value:e})))}))}}o.util.assertNever(r)}}t.ZodEffects=ZodEffects;t.ZodTransformer=ZodEffects;ZodEffects.create=(e,t,s)=>new ZodEffects({schema:e,typeName:k.ZodEffects,effect:t,...processCreateParams(s)});ZodEffects.createWithPreprocess=(e,t,s)=>new ZodEffects({schema:t,effect:{type:\"preprocess\",transform:e},typeName:k.ZodEffects,...processCreateParams(s)});class ZodOptional extends ZodType{_parse(e){const t=this._getType(e);if(t===o.ZodParsedType.undefined){return(0,i.OK)(undefined)}return this._def.innerType._parse(e)}unwrap(){return this._def.innerType}}t.ZodOptional=ZodOptional;ZodOptional.create=(e,t)=>new ZodOptional({innerType:e,typeName:k.ZodOptional,...processCreateParams(t)});class ZodNullable extends ZodType{_parse(e){const t=this._getType(e);if(t===o.ZodParsedType.null){return(0,i.OK)(null)}return this._def.innerType._parse(e)}unwrap(){return this._def.innerType}}t.ZodNullable=ZodNullable;ZodNullable.create=(e,t)=>new ZodNullable({innerType:e,typeName:k.ZodNullable,...processCreateParams(t)});class ZodDefault extends ZodType{_parse(e){const{ctx:t}=this._processInputParams(e);let s=t.data;if(t.parsedType===o.ZodParsedType.undefined){s=this._def.defaultValue()}return this._def.innerType._parse({data:s,path:t.path,parent:t})}removeDefault(){return this._def.innerType}}t.ZodDefault=ZodDefault;ZodDefault.create=(e,t)=>new ZodDefault({innerType:e,typeName:k.ZodDefault,defaultValue:typeof t.default===\"function\"?t.default:()=>t.default,...processCreateParams(t)});class ZodCatch extends ZodType{_parse(e){const{ctx:t}=this._processInputParams(e);const s={...t,common:{...t.common,issues:[]}};const a=this._def.innerType._parse({data:s.data,path:s.path,parent:{...s}});if((0,i.isAsync)(a)){return a.then((e=>({status:\"valid\",value:e.status===\"valid\"?e.value:this._def.catchValue({get error(){return new r.ZodError(s.common.issues)},input:s.data})})))}else{return{status:\"valid\",value:a.status===\"valid\"?a.value:this._def.catchValue({get error(){return new r.ZodError(s.common.issues)},input:s.data})}}}removeCatch(){return this._def.innerType}}t.ZodCatch=ZodCatch;ZodCatch.create=(e,t)=>new ZodCatch({innerType:e,typeName:k.ZodCatch,catchValue:typeof t.catch===\"function\"?t.catch:()=>t.catch,...processCreateParams(t)});class ZodNaN extends ZodType{_parse(e){const t=this._getType(e);if(t!==o.ZodParsedType.nan){const t=this._getOrReturnCtx(e);(0,i.addIssueToContext)(t,{code:r.ZodIssueCode.invalid_type,expected:o.ZodParsedType.nan,received:t.parsedType});return i.INVALID}return{status:\"valid\",value:e.data}}}t.ZodNaN=ZodNaN;ZodNaN.create=e=>new ZodNaN({typeName:k.ZodNaN,...processCreateParams(e)});t.BRAND=Symbol(\"zod_brand\");class ZodBranded extends ZodType{_parse(e){const{ctx:t}=this._processInputParams(e);const s=t.data;return this._def.type._parse({data:s,path:t.path,parent:t})}unwrap(){return this._def.type}}t.ZodBranded=ZodBranded;class ZodPipeline extends ZodType{_parse(e){const{status:t,ctx:s}=this._processInputParams(e);if(s.common.async){const handleAsync=async()=>{const e=await this._def.in._parseAsync({data:s.data,path:s.path,parent:s});if(e.status===\"aborted\")return i.INVALID;if(e.status===\"dirty\"){t.dirty();return(0,i.DIRTY)(e.value)}else{return this._def.out._parseAsync({data:e.value,path:s.path,parent:s})}};return handleAsync()}else{const e=this._def.in._parseSync({data:s.data,path:s.path,parent:s});if(e.status===\"aborted\")return i.INVALID;if(e.status===\"dirty\"){t.dirty();return{status:\"dirty\",value:e.value}}else{return this._def.out._parseSync({data:e.value,path:s.path,parent:s})}}}static create(e,t){return new ZodPipeline({in:e,out:t,typeName:k.ZodPipeline})}}t.ZodPipeline=ZodPipeline;class ZodReadonly extends ZodType{_parse(e){const t=this._def.innerType._parse(e);const freeze=e=>{if((0,i.isValid)(e)){e.value=Object.freeze(e.value)}return e};return(0,i.isAsync)(t)?t.then((e=>freeze(e))):freeze(t)}unwrap(){return this._def.innerType}}t.ZodReadonly=ZodReadonly;ZodReadonly.create=(e,t)=>new ZodReadonly({innerType:e,typeName:k.ZodReadonly,...processCreateParams(t)});function cleanParams(e,t){const s=typeof e===\"function\"?e(t):typeof e===\"string\"?{message:e}:e;const r=typeof s===\"string\"?{message:s}:s;return r}function custom(e,t={},s){if(e)return ZodAny.create().superRefine(((r,a)=>{const n=e(r);if(n instanceof Promise){return n.then((e=>{if(!e){const e=cleanParams(t,r);const n=e.fatal??s??true;a.addIssue({code:\"custom\",...e,fatal:n})}}))}if(!n){const e=cleanParams(t,r);const n=e.fatal??s??true;a.addIssue({code:\"custom\",...e,fatal:n})}return}));return ZodAny.create()}t.late={object:ZodObject.lazycreate};var k;(function(e){e[\"ZodString\"]=\"ZodString\";e[\"ZodNumber\"]=\"ZodNumber\";e[\"ZodNaN\"]=\"ZodNaN\";e[\"ZodBigInt\"]=\"ZodBigInt\";e[\"ZodBoolean\"]=\"ZodBoolean\";e[\"ZodDate\"]=\"ZodDate\";e[\"ZodSymbol\"]=\"ZodSymbol\";e[\"ZodUndefined\"]=\"ZodUndefined\";e[\"ZodNull\"]=\"ZodNull\";e[\"ZodAny\"]=\"ZodAny\";e[\"ZodUnknown\"]=\"ZodUnknown\";e[\"ZodNever\"]=\"ZodNever\";e[\"ZodVoid\"]=\"ZodVoid\";e[\"ZodArray\"]=\"ZodArray\";e[\"ZodObject\"]=\"ZodObject\";e[\"ZodUnion\"]=\"ZodUnion\";e[\"ZodDiscriminatedUnion\"]=\"ZodDiscriminatedUnion\";e[\"ZodIntersection\"]=\"ZodIntersection\";e[\"ZodTuple\"]=\"ZodTuple\";e[\"ZodRecord\"]=\"ZodRecord\";e[\"ZodMap\"]=\"ZodMap\";e[\"ZodSet\"]=\"ZodSet\";e[\"ZodFunction\"]=\"ZodFunction\";e[\"ZodLazy\"]=\"ZodLazy\";e[\"ZodLiteral\"]=\"ZodLiteral\";e[\"ZodEnum\"]=\"ZodEnum\";e[\"ZodEffects\"]=\"ZodEffects\";e[\"ZodNativeEnum\"]=\"ZodNativeEnum\";e[\"ZodOptional\"]=\"ZodOptional\";e[\"ZodNullable\"]=\"ZodNullable\";e[\"ZodDefault\"]=\"ZodDefault\";e[\"ZodCatch\"]=\"ZodCatch\";e[\"ZodPromise\"]=\"ZodPromise\";e[\"ZodBranded\"]=\"ZodBranded\";e[\"ZodPipeline\"]=\"ZodPipeline\";e[\"ZodReadonly\"]=\"ZodReadonly\"})(k||(t.ZodFirstPartyTypeKind=k={}));class Class{constructor(...e){}}const instanceOfType=(e,t={message:`Input not instance of ${e.name}`})=>custom((t=>t instanceof e),t);t[\"instanceof\"]=instanceOfType;const P=ZodString.create;t.string=P;const w=ZodNumber.create;t.number=w;const N=ZodNaN.create;t.nan=N;const O=ZodBigInt.create;t.bigint=O;const A=ZodBoolean.create;t.boolean=A;const S=ZodDate.create;t.date=S;const j=ZodSymbol.create;t.symbol=j;const E=ZodUndefined.create;t.undefined=E;const D=ZodNull.create;t[\"null\"]=D;const L=ZodAny.create;t.any=L;const U=ZodUnknown.create;t.unknown=U;const R=ZodNever.create;t.never=R;const V=ZodVoid.create;t[\"void\"]=V;const M=ZodArray.create;t.array=M;const $=ZodObject.create;t.object=$;const z=ZodObject.strictCreate;t.strictObject=z;const F=ZodUnion.create;t.union=F;const B=ZodDiscriminatedUnion.create;t.discriminatedUnion=B;const K=ZodIntersection.create;t.intersection=K;const q=ZodTuple.create;t.tuple=q;const W=ZodRecord.create;t.record=W;const Y=ZodMap.create;t.map=Y;const J=ZodSet.create;t.set=J;const H=ZodFunction.create;t[\"function\"]=H;const G=ZodLazy.create;t.lazy=G;const X=ZodLiteral.create;t.literal=X;const Q=ZodEnum.create;t[\"enum\"]=Q;const ee=ZodNativeEnum.create;t.nativeEnum=ee;const te=ZodPromise.create;t.promise=te;const se=ZodEffects.create;t.effect=se;t.transformer=se;const re=ZodOptional.create;t.optional=re;const ae=ZodNullable.create;t.nullable=ae;const ne=ZodEffects.createWithPreprocess;t.preprocess=ne;const ie=ZodPipeline.create;t.pipeline=ie;const ostring=()=>P().optional();t.ostring=ostring;const onumber=()=>w().optional();t.onumber=onumber;const oboolean=()=>A().optional();t.oboolean=oboolean;t.coerce={string:e=>ZodString.create({...e,coerce:true}),number:e=>ZodNumber.create({...e,coerce:true}),boolean:e=>ZodBoolean.create({...e,coerce:true}),bigint:e=>ZodBigInt.create({...e,coerce:true}),date:e=>ZodDate.create({...e,coerce:true})};t.NEVER=i.INVALID}};var t={};function __nccwpck_require__(s){var r=t[s];if(r!==undefined){return r.exports}var a=t[s]={exports:{}};var n=true;try{e[s].call(a.exports,a,a.exports,__nccwpck_require__);n=false}finally{if(n)delete t[s]}return a.exports}if(typeof __nccwpck_require__!==\"undefined\")__nccwpck_require__.ab=__dirname+\"/\";var s=__nccwpck_require__(629);module.exports=s})();"],"names":[],"mappings":"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","ignoreList":[0]}}, + {"offset": {"line": 5044, "column": 0}, "map": {"version":3,"sources":["file:///Users/freedak/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next%4016.0.3_react-dom%4019.2.0_react%4019.2.0__react%4019.2.0/node_modules/next/dist/compiled/zod-validation-error/index.js"],"sourcesContent":["(()=>{\"use strict\";var r={452:(r,e,o)=>{var t=Object.create;var s=Object.defineProperty;var n=Object.getOwnPropertyDescriptor;var i=Object.getOwnPropertyNames;var a=Object.getPrototypeOf;var u=Object.prototype.hasOwnProperty;var __export=(r,e)=>{for(var o in e)s(r,o,{get:e[o],enumerable:true})};var __copyProps=(r,e,o,t)=>{if(e&&typeof e===\"object\"||typeof e===\"function\"){for(let a of i(e))if(!u.call(r,a)&&a!==o)s(r,a,{get:()=>e[a],enumerable:!(t=n(e,a))||t.enumerable})}return r};var __toESM=(r,e,o)=>(o=r!=null?t(a(r)):{},__copyProps(e||!r||!r.__esModule?s(o,\"default\",{value:r,enumerable:true}):o,r));var __toCommonJS=r=>__copyProps(s({},\"__esModule\",{value:true}),r);var d={};__export(d,{ValidationError:()=>c,createMessageBuilder:()=>createMessageBuilder,errorMap:()=>errorMap,fromError:()=>fromError,fromZodError:()=>fromZodError,fromZodIssue:()=>fromZodIssue,isValidationError:()=>isValidationError,isValidationErrorLike:()=>isValidationErrorLike,isZodErrorLike:()=>isZodErrorLike,toValidationError:()=>toValidationError});r.exports=__toCommonJS(d);function isZodErrorLike(r){return r instanceof Error&&r.name===\"ZodError\"&&\"issues\"in r&&Array.isArray(r.issues)}var c=class extends Error{name;details;constructor(r,e){super(r,e);this.name=\"ZodValidationError\";this.details=getIssuesFromErrorOptions(e)}toString(){return this.message}};function getIssuesFromErrorOptions(r){if(r){const e=r.cause;if(isZodErrorLike(e)){return e.issues}}return[]}function isValidationError(r){return r instanceof c}function isValidationErrorLike(r){return r instanceof Error&&r.name===\"ZodValidationError\"}var f=__toESM(o(788));var p=__toESM(o(788));function isNonEmptyArray(r){return r.length!==0}var l=/[$_\\p{ID_Start}][$\\u200c\\u200d\\p{ID_Continue}]*/u;function joinPath(r){if(r.length===1){return r[0].toString()}return r.reduce(((r,e)=>{if(typeof e===\"number\"){return r+\"[\"+e.toString()+\"]\"}if(e.includes('\"')){return r+'[\"'+escapeQuotes(e)+'\"]'}if(!l.test(e)){return r+'[\"'+e+'\"]'}const o=r.length===0?\"\":\".\";return r+o+e}),\"\")}function escapeQuotes(r){return r.replace(/\"/g,'\\\\\"')}var m=\"; \";var g=99;var E=\"Validation error\";var _=\": \";var v=\", or \";function createMessageBuilder(r={}){const{issueSeparator:e=m,unionSeparator:o=v,prefixSeparator:t=_,prefix:s=E,includePath:n=true,maxIssuesInMessage:i=g}=r;return r=>{const a=r.slice(0,i).map((r=>getMessageFromZodIssue({issue:r,issueSeparator:e,unionSeparator:o,includePath:n}))).join(e);return prefixMessage(a,s,t)}}function getMessageFromZodIssue(r){const{issue:e,issueSeparator:o,unionSeparator:t,includePath:s}=r;if(e.code===p.ZodIssueCode.invalid_union){return e.unionErrors.reduce(((r,e)=>{const n=e.issues.map((r=>getMessageFromZodIssue({issue:r,issueSeparator:o,unionSeparator:t,includePath:s}))).join(o);if(!r.includes(n)){r.push(n)}return r}),[]).join(t)}if(e.code===p.ZodIssueCode.invalid_arguments){return[e.message,...e.argumentsError.issues.map((r=>getMessageFromZodIssue({issue:r,issueSeparator:o,unionSeparator:t,includePath:s})))].join(o)}if(e.code===p.ZodIssueCode.invalid_return_type){return[e.message,...e.returnTypeError.issues.map((r=>getMessageFromZodIssue({issue:r,issueSeparator:o,unionSeparator:t,includePath:s})))].join(o)}if(s&&isNonEmptyArray(e.path)){if(e.path.length===1){const r=e.path[0];if(typeof r===\"number\"){return`${e.message} at index ${r}`}}return`${e.message} at \"${joinPath(e.path)}\"`}return e.message}function prefixMessage(r,e,o){if(e!==null){if(r.length>0){return[e,r].join(o)}return e}if(r.length>0){return r}return E}function fromZodIssue(r,e={}){const o=createMessageBuilderFromOptions(e);const t=o([r]);return new c(t,{cause:new f.ZodError([r])})}function createMessageBuilderFromOptions(r){if(\"messageBuilder\"in r){return r.messageBuilder}return createMessageBuilder(r)}var errorMap=(r,e)=>{const o=fromZodIssue({...r,message:r.message??e.defaultError});return{message:o.message}};function fromZodError(r,e={}){if(!isZodErrorLike(r)){throw new TypeError(`Invalid zodError param; expected instance of ZodError. Did you mean to use the \"${fromError.name}\" method instead?`)}return fromZodErrorWithoutRuntimeCheck(r,e)}function fromZodErrorWithoutRuntimeCheck(r,e={}){const o=r.errors;let t;if(isNonEmptyArray(o)){const r=createMessageBuilderFromOptions2(e);t=r(o)}else{t=r.message}return new c(t,{cause:r})}function createMessageBuilderFromOptions2(r){if(\"messageBuilder\"in r){return r.messageBuilder}return createMessageBuilder(r)}var toValidationError=(r={})=>e=>{if(isZodErrorLike(e)){return fromZodErrorWithoutRuntimeCheck(e,r)}if(e instanceof Error){return new c(e.message,{cause:e})}return new c(\"Unknown error\")};function fromError(r,e={}){return toValidationError(e)(r)}0&&0},788:r=>{r.exports=require(\"next/dist/compiled/zod\")}};var e={};function __nccwpck_require__(o){var t=e[o];if(t!==undefined){return t.exports}var s=e[o]={exports:{}};var n=true;try{r[o](s,s.exports,__nccwpck_require__);n=false}finally{if(n)delete e[o]}return s.exports}if(typeof __nccwpck_require__!==\"undefined\")__nccwpck_require__.ab=__dirname+\"/\";var o=__nccwpck_require__(452);module.exports=o})();"],"names":[],"mappings":"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","ignoreList":[0]}}, + {"offset": {"line": 5325, "column": 0}, "map": {"version":3,"sources":["file:///Users/freedak/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next%4016.0.3_react-dom%4019.2.0_react%4019.2.0__react%4019.2.0/node_modules/next/src/shared/lib/zod.ts"],"sourcesContent":["import type { ZodError } from 'next/dist/compiled/zod'\nimport { ZodParsedType, util, type ZodIssue } from 'next/dist/compiled/zod'\nimport { fromZodError } from 'next/dist/compiled/zod-validation-error'\nimport * as Log from '../../build/output/log'\n\nfunction processZodErrorMessage(issue: ZodIssue) {\n let message = issue.message\n\n let path: string\n\n if (issue.path.length > 0) {\n if (issue.path.length === 1) {\n const identifier = issue.path[0]\n if (typeof identifier === 'number') {\n // The first identifier inside path is a number\n path = `index ${identifier}`\n } else {\n path = `\"${identifier}\"`\n }\n } else {\n // joined path to be shown in the error message\n path = `\"${issue.path.reduce((acc, cur) => {\n if (typeof cur === 'number') {\n // array index\n return `${acc}[${cur}]`\n }\n if (cur.includes('\"')) {\n // escape quotes\n return `${acc}[\"${cur.replaceAll('\"', '\\\\\"')}\"]`\n }\n // dot notation\n const separator = acc.length === 0 ? '' : '.'\n return acc + separator + cur\n }, '')}\"`\n }\n } else {\n path = ''\n }\n\n if (\n issue.code === 'invalid_type' &&\n issue.received === ZodParsedType.undefined\n ) {\n // Missing key in object.\n return `${path} is missing, expected ${issue.expected}`\n }\n\n if (issue.code === 'invalid_enum_value') {\n // Remove \"Invalid enum value\" prefix from zod default error message\n return `Expected ${util.joinValues(issue.options)}, received '${\n issue.received\n }' at ${path}`\n }\n\n return message + (path ? ` at ${path}` : '')\n}\n\nexport function normalizeZodErrors(error: ZodError) {\n return error.issues.flatMap((issue) => {\n const issues = [{ issue, message: processZodErrorMessage(issue) }]\n if ('unionErrors' in issue) {\n for (const unionError of issue.unionErrors) {\n issues.push(...normalizeZodErrors(unionError))\n }\n }\n\n return issues\n })\n}\n\nexport function formatZodError(prefix: string, error: ZodError) {\n return new Error(fromZodError(error, { prefix: prefix }).toString())\n}\n\nexport function reportZodError(prefix: string, error: ZodError) {\n Log.error(formatZodError(prefix, error).message)\n}\n"],"names":["ZodParsedType","util","fromZodError","Log","processZodErrorMessage","issue","message","path","length","identifier","reduce","acc","cur","includes","replaceAll","separator","code","received","undefined","expected","joinValues","options","normalizeZodErrors","error","issues","flatMap","unionError","unionErrors","push","formatZodError","prefix","Error","toString","reportZodError"],"mappings":";;;;;;;;AACA,SAASA,aAAa,EAAEC,IAAI,QAAuB,yBAAwB;AAC3E,SAASC,YAAY,QAAQ,0CAAyC;AACtE,YAAYC,SAAS,yBAAwB;;;;AAE7C,SAASC,uBAAuBC,KAAe;IAC7C,IAAIC,UAAUD,MAAMC,OAAO;IAE3B,IAAIC;IAEJ,IAAIF,MAAME,IAAI,CAACC,MAAM,GAAG,GAAG;QACzB,IAAIH,MAAME,IAAI,CAACC,MAAM,KAAK,GAAG;YAC3B,MAAMC,aAAaJ,MAAME,IAAI,CAAC,EAAE;YAChC,IAAI,OAAOE,eAAe,UAAU;gBAClC,+CAA+C;gBAC/CF,OAAO,CAAC,MAAM,EAAEE,YAAY;YAC9B,OAAO;gBACLF,OAAO,CAAC,CAAC,EAAEE,WAAW,CAAC,CAAC;YAC1B;QACF,OAAO;YACL,+CAA+C;YAC/CF,OAAO,CAAC,CAAC,EAAEF,MAAME,IAAI,CAACG,MAAM,CAAS,CAACC,KAAKC;gBACzC,IAAI,OAAOA,QAAQ,UAAU;oBAC3B,cAAc;oBACd,OAAO,GAAGD,IAAI,CAAC,EAAEC,IAAI,CAAC,CAAC;gBACzB;gBACA,IAAIA,IAAIC,QAAQ,CAAC,MAAM;oBACrB,gBAAgB;oBAChB,OAAO,GAAGF,IAAI,EAAE,EAAEC,IAAIE,UAAU,CAAC,KAAK,OAAO,EAAE,CAAC;gBAClD;gBACA,eAAe;gBACf,MAAMC,YAAYJ,IAAIH,MAAM,KAAK,IAAI,KAAK;gBAC1C,OAAOG,MAAMI,YAAYH;YAC3B,GAAG,IAAI,CAAC,CAAC;QACX;IACF,OAAO;QACLL,OAAO;IACT;IAEA,IACEF,MAAMW,IAAI,KAAK,kBACfX,MAAMY,QAAQ,KAAKjB,gWAAAA,CAAckB,SAAS,EAC1C;QACA,yBAAyB;QACzB,OAAO,GAAGX,KAAK,sBAAsB,EAAEF,MAAMc,QAAQ,EAAE;IACzD;IAEA,IAAId,MAAMW,IAAI,KAAK,sBAAsB;QACvC,oEAAoE;QACpE,OAAO,CAAC,SAAS,EAAEf,uVAAAA,CAAKmB,UAAU,CAACf,MAAMgB,OAAO,EAAE,YAAY,EAC5DhB,MAAMY,QAAQ,CACf,KAAK,EAAEV,MAAM;IAChB;IAEA,OAAOD,UAAWC,CAAAA,OAAO,CAAC,IAAI,EAAEA,MAAM,GAAG,EAAC;AAC5C;AAEO,SAASe,mBAAmBC,KAAe;IAChD,OAAOA,MAAMC,MAAM,CAACC,OAAO,CAAC,CAACpB;QAC3B,MAAMmB,SAAS;YAAC;gBAAEnB;gBAAOC,SAASF,uBAAuBC;YAAO;SAAE;QAClE,IAAI,iBAAiBA,OAAO;YAC1B,KAAK,MAAMqB,cAAcrB,MAAMsB,WAAW,CAAE;gBAC1CH,OAAOI,IAAI,IAAIN,mBAAmBI;YACpC;QACF;QAEA,OAAOF;IACT;AACF;AAEO,SAASK,eAAeC,MAAc,EAAEP,KAAe;IAC5D,OAAO,OAAA,cAA6D,CAA7D,IAAIQ,UAAM7B,qXAAAA,EAAaqB,OAAO;QAAEO,QAAQA;IAAO,GAAGE,QAAQ,KAA1D,qBAAA;eAAA;oBAAA;sBAAA;IAA4D;AACrE;AAEO,SAASC,eAAeH,MAAc,EAAEP,KAAe;IAC5DpB,IAAIoB,wVAAK,CAACM,eAAeC,QAAQP,OAAOjB,OAAO;AACjD","ignoreList":[0]}}, + {"offset": {"line": 5412, "column": 0}, "map": {"version":3,"sources":["file:///Users/freedak/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next%4016.0.3_react-dom%4019.2.0_react%4019.2.0__react%4019.2.0/node_modules/next/src/build/segment-config/app/app-segment-config.ts"],"sourcesContent":["import { z } from 'next/dist/compiled/zod'\nimport { formatZodError } from '../../../shared/lib/zod'\n\nconst CookieSchema = z\n .object({\n name: z.string(),\n value: z.string(),\n httpOnly: z.boolean().optional(),\n path: z.string().optional(),\n })\n .strict()\n\nconst RuntimeSampleSchema = z\n .object({\n cookies: z.array(CookieSchema).optional(),\n headers: z.array(z.tuple([z.string(), z.string()])).optional(),\n params: z.record(z.union([z.string(), z.array(z.string())])).optional(),\n searchParams: z\n .record(z.union([z.string(), z.array(z.string()), z.undefined()]))\n .optional(),\n })\n .strict()\n\nconst StaticPrefetchSchema = z\n .object({\n mode: z.literal('static'),\n from: z.array(z.string()).optional(),\n expectUnableToVerify: z.boolean().optional(),\n })\n .strict()\n\nconst RuntimePrefetchSchema = z\n .object({\n mode: z.literal('runtime'),\n samples: z.array(RuntimeSampleSchema).min(1),\n from: z.array(z.string()).optional(),\n expectUnableToVerify: z.boolean().optional(),\n })\n .strict()\n\nconst PrefetchSchema = z.discriminatedUnion('mode', [\n StaticPrefetchSchema,\n RuntimePrefetchSchema,\n])\n\nexport type Prefetch = StaticPrefetch | RuntimePrefetch\nexport type PrefetchForTypeCheckInternal = __GenericPrefetch | Prefetch\n// the __GenericPrefetch type is used to avoid type widening issues with\n// our choice to make exports the medium for programming a Next.js application\n// With exports the type is controlled by the module and all we can do is assert on it\n// from a consumer. However with string literals in objects these are by default typed widely\n// and thus cannot match the discriminated union type. If we figure out a better way we should\n// delete the __GenericPrefetch member.\ninterface __GenericPrefetch {\n mode: string\n samples?: Array\n from?: string[]\n expectUnableToVerify?: boolean\n}\ninterface StaticPrefetch {\n mode: 'static'\n from?: string[]\n expectUnableToVerify?: boolean\n}\ninterface RuntimePrefetch {\n mode: 'runtime'\n samples: Array\n from?: string[]\n expectUnableToVerify?: boolean\n}\ntype WideRuntimeSample = {\n cookies?: RuntimeSample['cookies']\n headers?: Array\n params?: RuntimeSample['params']\n searchParams?: RuntimeSample['searchParams']\n}\ntype RuntimeSample = {\n cookies?: Array<{\n name: string\n value: string\n httpOnly?: boolean\n path?: string\n }>\n headers?: Array<[string, string]>\n params?: { [key: string]: string | string[] }\n searchParams?: { [key: string]: string | string[] | undefined }\n}\n\n/**\n * The schema for configuration for a page.\n */\nconst AppSegmentConfigSchema = z.object({\n /**\n * The number of seconds to revalidate the page or false to disable revalidation.\n */\n revalidate: z\n .union([z.number().int().nonnegative(), z.literal(false)])\n .optional(),\n\n /**\n * Whether the page supports dynamic parameters.\n */\n dynamicParams: z.boolean().optional(),\n\n /**\n * The dynamic behavior of the page.\n */\n dynamic: z\n .enum(['auto', 'error', 'force-static', 'force-dynamic'])\n .optional(),\n\n /**\n * The caching behavior of the page.\n */\n fetchCache: z\n .enum([\n 'auto',\n 'default-cache',\n 'only-cache',\n 'force-cache',\n 'force-no-store',\n 'default-no-store',\n 'only-no-store',\n ])\n .optional(),\n\n /**\n * How this segment should be prefetched.\n */\n unstable_prefetch: PrefetchSchema.optional(),\n\n /**\n * The preferred region for the page.\n */\n preferredRegion: z.union([z.string(), z.array(z.string())]).optional(),\n\n /**\n * The runtime to use for the page.\n */\n runtime: z.enum(['edge', 'nodejs']).optional(),\n\n /**\n * The maximum duration for the page in seconds.\n */\n maxDuration: z.number().int().nonnegative().optional(),\n})\n\n/**\n * Parse the app segment config.\n * @param data - The data to parse.\n * @param route - The route of the app.\n * @returns The parsed app segment config.\n */\nexport function parseAppSegmentConfig(\n data: unknown,\n route: string\n): AppSegmentConfig {\n const parsed = AppSegmentConfigSchema.safeParse(data, {\n errorMap: (issue, ctx) => {\n if (issue.path.length === 1) {\n switch (issue.path[0]) {\n case 'revalidate': {\n return {\n message: `Invalid revalidate value ${JSON.stringify(\n ctx.data\n )} on \"${route}\", must be a non-negative number or false`,\n }\n }\n case 'unstable_prefetch': {\n return {\n // @TODO replace this link with a link to the docs when they are written\n message: `Invalid unstable_prefetch value ${JSON.stringify(ctx.data)} on \"${route}\", must be an object with a mode of \"static\" or \"runtime\". Read more at https://nextjs.org/docs/messages/invalid-prefetch-configuration`,\n }\n }\n default:\n }\n }\n\n return { message: ctx.defaultError }\n },\n })\n\n if (!parsed.success) {\n throw formatZodError(\n `Invalid segment configuration options detected for \"${route}\". Read more at https://nextjs.org/docs/app/api-reference/file-conventions/route-segment-config`,\n parsed.error\n )\n }\n\n return parsed.data\n}\n\n/**\n * The configuration for a page.\n */\nexport type AppSegmentConfig = {\n /**\n * The revalidation period for the page in seconds, or false to disable ISR.\n */\n revalidate?: number | false\n\n /**\n * Whether the page supports dynamic parameters.\n */\n dynamicParams?: boolean\n\n /**\n * The dynamic behavior of the page.\n */\n dynamic?: 'auto' | 'error' | 'force-static' | 'force-dynamic'\n\n /**\n * The caching behavior of the page.\n */\n fetchCache?:\n | 'auto'\n | 'default-cache'\n | 'default-no-store'\n | 'force-cache'\n | 'force-no-store'\n | 'only-cache'\n | 'only-no-store'\n\n /**\n * How this segment should be prefetched.\n */\n unstable_prefetch?: Prefetch\n\n /**\n * The preferred region for the page.\n */\n preferredRegion?: string | string[]\n\n /**\n * The runtime to use for the page.\n */\n runtime?: 'edge' | 'nodejs'\n\n /**\n * The maximum duration for the page in seconds.\n */\n maxDuration?: number\n}\n\n/**\n * The keys of the configuration for a page.\n *\n * @internal - required to exclude zod types from the build\n */\nexport const AppSegmentConfigSchemaKeys = AppSegmentConfigSchema.keyof().options\n"],"names":["z","formatZodError","CookieSchema","object","name","string","value","httpOnly","boolean","optional","path","strict","RuntimeSampleSchema","cookies","array","headers","tuple","params","record","union","searchParams","undefined","StaticPrefetchSchema","mode","literal","from","expectUnableToVerify","RuntimePrefetchSchema","samples","min","PrefetchSchema","discriminatedUnion","AppSegmentConfigSchema","revalidate","number","int","nonnegative","dynamicParams","dynamic","enum","fetchCache","unstable_prefetch","preferredRegion","runtime","maxDuration","parseAppSegmentConfig","data","route","parsed","safeParse","errorMap","issue","ctx","length","message","JSON","stringify","defaultError","success","error","AppSegmentConfigSchemaKeys","keyof","options"],"mappings":"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","ignoreList":[0]}}, + {"offset": {"line": 5545, "column": 0}, "map": {"version":3,"sources":["file:///Users/freedak/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next%4016.0.3_react-dom%4019.2.0_react%4019.2.0__react%4019.2.0/node_modules/next/src/server/route-modules/checks.ts"],"sourcesContent":["import type { AppRouteRouteModule } from './app-route/module'\nimport type { AppPageRouteModule } from './app-page/module'\nimport type { PagesRouteModule } from './pages/module'\nimport type { PagesAPIRouteModule } from './pages-api/module'\n\nimport type { RouteModule } from './route-module'\n\nimport { RouteKind } from '../route-kind'\n\nexport function isAppRouteRouteModule(\n routeModule: RouteModule\n): routeModule is AppRouteRouteModule {\n return routeModule.definition.kind === RouteKind.APP_ROUTE\n}\n\nexport function isAppPageRouteModule(\n routeModule: RouteModule\n): routeModule is AppPageRouteModule {\n return routeModule.definition.kind === RouteKind.APP_PAGE\n}\n\nexport function isPagesRouteModule(\n routeModule: RouteModule\n): routeModule is PagesRouteModule {\n return routeModule.definition.kind === RouteKind.PAGES\n}\n\nexport function isPagesAPIRouteModule(\n routeModule: RouteModule\n): routeModule is PagesAPIRouteModule {\n return routeModule.definition.kind === RouteKind.PAGES_API\n}\n"],"names":["RouteKind","isAppRouteRouteModule","routeModule","definition","kind","APP_ROUTE","isAppPageRouteModule","APP_PAGE","isPagesRouteModule","PAGES","isPagesAPIRouteModule","PAGES_API"],"mappings":";;;;;;;;;;AAOA,SAASA,SAAS,QAAQ,gBAAe;;AAElC,SAASC,sBACdC,WAAwB;IAExB,OAAOA,YAAYC,UAAU,CAACC,IAAI,KAAKJ,iWAAAA,CAAUK,SAAS;AAC5D;AAEO,SAASC,qBACdJ,WAAwB;IAExB,OAAOA,YAAYC,UAAU,CAACC,IAAI,KAAKJ,iWAAAA,CAAUO,QAAQ;AAC3D;AAEO,SAASC,mBACdN,WAAwB;IAExB,OAAOA,YAAYC,UAAU,CAACC,IAAI,KAAKJ,iWAAAA,CAAUS,KAAK;AACxD;AAEO,SAASC,sBACdR,WAAwB;IAExB,OAAOA,YAAYC,UAAU,CAACC,IAAI,KAAKJ,iWAAAA,CAAUW,SAAS;AAC5D","ignoreList":[0]}}, + {"offset": {"line": 5573, "column": 0}, "map": {"version":3,"sources":["file:///Users/freedak/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next%4016.0.3_react-dom%4019.2.0_react%4019.2.0__react%4019.2.0/node_modules/next/src/shared/lib/page-path/ensure-leading-slash.ts"],"sourcesContent":["/**\n * For a given page path, this function ensures that there is a leading slash.\n * If there is not a leading slash, one is added, otherwise it is noop.\n */\nexport function ensureLeadingSlash(path: string) {\n return path.startsWith('/') ? path : `/${path}`\n}\n"],"names":["ensureLeadingSlash","path","startsWith"],"mappings":"AAAA;;;CAGC,GACD;;;;AAAO,SAASA,mBAAmBC,IAAY;IAC7C,OAAOA,KAAKC,UAAU,CAAC,OAAOD,OAAO,CAAC,CAAC,EAAEA,MAAM;AACjD","ignoreList":[0]}}, + {"offset": {"line": 5587, "column": 0}, "map": {"version":3,"sources":["file:///Users/freedak/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next%4016.0.3_react-dom%4019.2.0_react%4019.2.0__react%4019.2.0/node_modules/next/src/shared/lib/router/utils/app-paths.ts"],"sourcesContent":["import { ensureLeadingSlash } from '../../page-path/ensure-leading-slash'\nimport { isGroupSegment } from '../../segment'\n\n/**\n * Normalizes an app route so it represents the actual request path. Essentially\n * performing the following transformations:\n *\n * - `/(dashboard)/user/[id]/page` to `/user/[id]`\n * - `/(dashboard)/account/page` to `/account`\n * - `/user/[id]/page` to `/user/[id]`\n * - `/account/page` to `/account`\n * - `/page` to `/`\n * - `/(dashboard)/user/[id]/route` to `/user/[id]`\n * - `/(dashboard)/account/route` to `/account`\n * - `/user/[id]/route` to `/user/[id]`\n * - `/account/route` to `/account`\n * - `/route` to `/`\n * - `/` to `/`\n *\n * @param route the app route to normalize\n * @returns the normalized pathname\n */\nexport function normalizeAppPath(route: string) {\n return ensureLeadingSlash(\n route.split('/').reduce((pathname, segment, index, segments) => {\n // Empty segments are ignored.\n if (!segment) {\n return pathname\n }\n\n // Groups are ignored.\n if (isGroupSegment(segment)) {\n return pathname\n }\n\n // Parallel segments are ignored.\n if (segment[0] === '@') {\n return pathname\n }\n\n // The last segment (if it's a leaf) should be ignored.\n if (\n (segment === 'page' || segment === 'route') &&\n index === segments.length - 1\n ) {\n return pathname\n }\n\n return `${pathname}/${segment}`\n }, '')\n )\n}\n\n/**\n * Strips the `.rsc` extension if it's in the pathname.\n * Since this function is used on full urls it checks `?` for searchParams handling.\n */\nexport function normalizeRscURL(url: string) {\n return url.replace(\n /\\.rsc($|\\?)/,\n // $1 ensures `?` is preserved\n '$1'\n )\n}\n"],"names":["ensureLeadingSlash","isGroupSegment","normalizeAppPath","route","split","reduce","pathname","segment","index","segments","length","normalizeRscURL","url","replace"],"mappings":";;;;;;AAAA,SAASA,kBAAkB,QAAQ,uCAAsC;AACzE,SAASC,cAAc,QAAQ,gBAAe;;;AAqBvC,SAASC,iBAAiBC,KAAa;IAC5C,WAAOH,8YAAAA,EACLG,MAAMC,KAAK,CAAC,KAAKC,MAAM,CAAC,CAACC,UAAUC,SAASC,OAAOC;QACjD,8BAA8B;QAC9B,IAAI,CAACF,SAAS;YACZ,OAAOD;QACT;QAEA,sBAAsB;QACtB,QAAIL,uWAAAA,EAAeM,UAAU;YAC3B,OAAOD;QACT;QAEA,iCAAiC;QACjC,IAAIC,OAAO,CAAC,EAAE,KAAK,KAAK;YACtB,OAAOD;QACT;QAEA,uDAAuD;QACvD,IACGC,CAAAA,YAAY,UAAUA,YAAY,OAAM,KACzCC,UAAUC,SAASC,MAAM,GAAG,GAC5B;YACA,OAAOJ;QACT;QAEA,OAAO,GAAGA,SAAS,CAAC,EAAEC,SAAS;IACjC,GAAG;AAEP;AAMO,SAASI,gBAAgBC,GAAW;IACzC,OAAOA,IAAIC,OAAO,CAChB,eACA,AACA,8BAD8B;AAGlC","ignoreList":[0]}}, + {"offset": {"line": 5625, "column": 0}, "map": {"version":3,"sources":["file:///Users/freedak/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next%4016.0.3_react-dom%4019.2.0_react%4019.2.0__react%4019.2.0/node_modules/next/src/shared/lib/router/utils/interception-routes.ts"],"sourcesContent":["import { normalizeAppPath } from './app-paths'\n\n// order matters here, the first match will be used\nexport const INTERCEPTION_ROUTE_MARKERS = [\n '(..)(..)',\n '(.)',\n '(..)',\n '(...)',\n] as const\n\nexport function isInterceptionRouteAppPath(path: string): boolean {\n // TODO-APP: add more serious validation\n return (\n path\n .split('/')\n .find((segment) =>\n INTERCEPTION_ROUTE_MARKERS.find((m) => segment.startsWith(m))\n ) !== undefined\n )\n}\n\ntype InterceptionRouteInformation = {\n /**\n * The intercepting route. This is the route that is being intercepted or the\n * route that the user was coming from. This is matched by the Next-Url\n * header.\n */\n interceptingRoute: string\n\n /**\n * The intercepted route. This is the route that is being intercepted or the\n * route that the user is going to. This is matched by the request pathname.\n */\n interceptedRoute: string\n}\n\nexport function extractInterceptionRouteInformation(\n path: string\n): InterceptionRouteInformation {\n let interceptingRoute: string | undefined\n let marker: (typeof INTERCEPTION_ROUTE_MARKERS)[number] | undefined\n let interceptedRoute: string | undefined\n\n for (const segment of path.split('/')) {\n marker = INTERCEPTION_ROUTE_MARKERS.find((m) => segment.startsWith(m))\n if (marker) {\n ;[interceptingRoute, interceptedRoute] = path.split(marker, 2)\n break\n }\n }\n\n if (!interceptingRoute || !marker || !interceptedRoute) {\n throw new Error(\n `Invalid interception route: ${path}. Must be in the format //(..|...|..)(..)/`\n )\n }\n\n interceptingRoute = normalizeAppPath(interceptingRoute) // normalize the path, e.g. /(blog)/feed -> /feed\n\n switch (marker) {\n case '(.)':\n // (.) indicates that we should match with sibling routes, so we just need to append the intercepted route to the intercepting route\n if (interceptingRoute === '/') {\n interceptedRoute = `/${interceptedRoute}`\n } else {\n interceptedRoute = interceptingRoute + '/' + interceptedRoute\n }\n break\n case '(..)':\n // (..) indicates that we should match at one level up, so we need to remove the last segment of the intercepting route\n if (interceptingRoute === '/') {\n throw new Error(\n `Invalid interception route: ${path}. Cannot use (..) marker at the root level, use (.) instead.`\n )\n }\n interceptedRoute = interceptingRoute\n .split('/')\n .slice(0, -1)\n .concat(interceptedRoute)\n .join('/')\n break\n case '(...)':\n // (...) will match the route segment in the root directory, so we need to use the root directory to prepend the intercepted route\n interceptedRoute = '/' + interceptedRoute\n break\n case '(..)(..)':\n // (..)(..) indicates that we should match at two levels up, so we need to remove the last two segments of the intercepting route\n\n const splitInterceptingRoute = interceptingRoute.split('/')\n if (splitInterceptingRoute.length <= 2) {\n throw new Error(\n `Invalid interception route: ${path}. Cannot use (..)(..) marker at the root level or one level up.`\n )\n }\n\n interceptedRoute = splitInterceptingRoute\n .slice(0, -2)\n .concat(interceptedRoute)\n .join('/')\n break\n default:\n throw new Error('Invariant: unexpected marker')\n }\n\n return { interceptingRoute, interceptedRoute }\n}\n"],"names":["normalizeAppPath","INTERCEPTION_ROUTE_MARKERS","isInterceptionRouteAppPath","path","split","find","segment","m","startsWith","undefined","extractInterceptionRouteInformation","interceptingRoute","marker","interceptedRoute","Error","slice","concat","join","splitInterceptingRoute","length"],"mappings":";;;;;;;;AAAA,SAASA,gBAAgB,QAAQ,cAAa;;AAGvC,MAAMC,6BAA6B;IACxC;IACA;IACA;IACA;CACD,CAAS;AAEH,SAASC,2BAA2BC,IAAY;IACrD,wCAAwC;IACxC,OACEA,KACGC,KAAK,CAAC,KACNC,IAAI,CAAC,CAACC,UACLL,2BAA2BI,IAAI,CAAC,CAACE,IAAMD,QAAQE,UAAU,CAACD,SACtDE;AAEZ;AAiBO,SAASC,oCACdP,IAAY;IAEZ,IAAIQ;IACJ,IAAIC;IACJ,IAAIC;IAEJ,KAAK,MAAMP,WAAWH,KAAKC,KAAK,CAAC,KAAM;QACrCQ,SAASX,2BAA2BI,IAAI,CAAC,CAACE,IAAMD,QAAQE,UAAU,CAACD;QACnE,IAAIK,QAAQ;;YACT,CAACD,mBAAmBE,iBAAiB,GAAGV,KAAKC,KAAK,CAACQ,QAAQ;YAC5D;QACF;IACF;IAEA,IAAI,CAACD,qBAAqB,CAACC,UAAU,CAACC,kBAAkB;QACtD,MAAM,OAAA,cAEL,CAFK,IAAIC,MACR,CAAC,4BAA4B,EAAEX,KAAK,iFAAiF,CAAC,GADlH,qBAAA;mBAAA;wBAAA;0BAAA;QAEN;IACF;IAEAQ,wBAAoBX,iYAAAA,EAAiBW,mBAAmB,iDAAiD;;IAEzG,OAAQC;QACN,KAAK;YACH,oIAAoI;YACpI,IAAID,sBAAsB,KAAK;gBAC7BE,mBAAmB,CAAC,CAAC,EAAEA,kBAAkB;YAC3C,OAAO;gBACLA,mBAAmBF,oBAAoB,MAAME;YAC/C;YACA;QACF,KAAK;YACH,uHAAuH;YACvH,IAAIF,sBAAsB,KAAK;gBAC7B,MAAM,OAAA,cAEL,CAFK,IAAIG,MACR,CAAC,4BAA4B,EAAEX,KAAK,4DAA4D,CAAC,GAD7F,qBAAA;2BAAA;gCAAA;kCAAA;gBAEN;YACF;YACAU,mBAAmBF,kBAChBP,KAAK,CAAC,KACNW,KAAK,CAAC,GAAG,CAAC,GACVC,MAAM,CAACH,kBACPI,IAAI,CAAC;YACR;QACF,KAAK;YACH,kIAAkI;YAClIJ,mBAAmB,MAAMA;YACzB;QACF,KAAK;YACH,iIAAiI;YAEjI,MAAMK,yBAAyBP,kBAAkBP,KAAK,CAAC;YACvD,IAAIc,uBAAuBC,MAAM,IAAI,GAAG;gBACtC,MAAM,OAAA,cAEL,CAFK,IAAIL,MACR,CAAC,4BAA4B,EAAEX,KAAK,+DAA+D,CAAC,GADhG,qBAAA;2BAAA;gCAAA;kCAAA;gBAEN;YACF;YAEAU,mBAAmBK,uBAChBH,KAAK,CAAC,GAAG,CAAC,GACVC,MAAM,CAACH,kBACPI,IAAI,CAAC;YACR;QACF;YACE,MAAM,OAAA,cAAyC,CAAzC,IAAIH,MAAM,iCAAV,qBAAA;uBAAA;4BAAA;8BAAA;YAAwC;IAClD;IAEA,OAAO;QAAEH;QAAmBE;IAAiB;AAC/C","ignoreList":[0]}}, + {"offset": {"line": 5718, "column": 0}, "map": {"version":3,"sources":["file:///Users/freedak/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next%4016.0.3_react-dom%4019.2.0_react%4019.2.0__react%4019.2.0/node_modules/next/src/shared/lib/router/utils/get-segment-param.tsx"],"sourcesContent":["import { INTERCEPTION_ROUTE_MARKERS } from './interception-routes'\nimport type { DynamicParamTypes } from '../../app-router-types'\n\n/**\n * Parse dynamic route segment to type of parameter\n */\nexport function getSegmentParam(segment: string): {\n param: string\n type: DynamicParamTypes\n} | null {\n const interceptionMarker = INTERCEPTION_ROUTE_MARKERS.find((marker) =>\n segment.startsWith(marker)\n )\n\n // if an interception marker is part of the path segment, we need to jump ahead\n // to the relevant portion for param parsing\n if (interceptionMarker) {\n segment = segment.slice(interceptionMarker.length)\n }\n\n if (segment.startsWith('[[...') && segment.endsWith(']]')) {\n return {\n // TODO-APP: Optional catchall does not currently work with parallel routes,\n // so for now aren't handling a potential interception marker.\n type: 'optional-catchall',\n param: segment.slice(5, -2),\n }\n }\n\n if (segment.startsWith('[...') && segment.endsWith(']')) {\n return {\n type: interceptionMarker\n ? `catchall-intercepted-${interceptionMarker}`\n : 'catchall',\n param: segment.slice(4, -1),\n }\n }\n\n if (segment.startsWith('[') && segment.endsWith(']')) {\n return {\n type: interceptionMarker\n ? `dynamic-intercepted-${interceptionMarker}`\n : 'dynamic',\n param: segment.slice(1, -1),\n }\n }\n\n return null\n}\n\nexport function isCatchAll(\n type: DynamicParamTypes\n): type is\n | 'catchall'\n | 'catchall-intercepted-(..)(..)'\n | 'catchall-intercepted-(.)'\n | 'catchall-intercepted-(..)'\n | 'catchall-intercepted-(...)'\n | 'optional-catchall' {\n return (\n type === 'catchall' ||\n type === 'catchall-intercepted-(..)(..)' ||\n type === 'catchall-intercepted-(.)' ||\n type === 'catchall-intercepted-(..)' ||\n type === 'catchall-intercepted-(...)' ||\n type === 'optional-catchall'\n )\n}\n\nexport function getParamProperties(paramType: DynamicParamTypes): {\n repeat: boolean\n optional: boolean\n} {\n let repeat = false\n let optional = false\n\n switch (paramType) {\n case 'catchall':\n case 'catchall-intercepted-(..)(..)':\n case 'catchall-intercepted-(.)':\n case 'catchall-intercepted-(..)':\n case 'catchall-intercepted-(...)':\n repeat = true\n break\n case 'optional-catchall':\n repeat = true\n optional = true\n break\n case 'dynamic':\n case 'dynamic-intercepted-(..)(..)':\n case 'dynamic-intercepted-(.)':\n case 'dynamic-intercepted-(..)':\n case 'dynamic-intercepted-(...)':\n break\n default:\n paramType satisfies never\n }\n\n return { repeat, optional }\n}\n"],"names":["INTERCEPTION_ROUTE_MARKERS","getSegmentParam","segment","interceptionMarker","find","marker","startsWith","slice","length","endsWith","type","param","isCatchAll","getParamProperties","paramType","repeat","optional"],"mappings":";;;;;;;;AAAA,SAASA,0BAA0B,QAAQ,wBAAuB;;AAM3D,SAASC,gBAAgBC,OAAe;IAI7C,MAAMC,qBAAqBH,qZAAAA,CAA2BI,IAAI,CAAC,CAACC,SAC1DH,QAAQI,UAAU,CAACD;IAGrB,+EAA+E;IAC/E,4CAA4C;IAC5C,IAAIF,oBAAoB;QACtBD,UAAUA,QAAQK,KAAK,CAACJ,mBAAmBK,MAAM;IACnD;IAEA,IAAIN,QAAQI,UAAU,CAAC,YAAYJ,QAAQO,QAAQ,CAAC,OAAO;QACzD,OAAO;YACL,4EAA4E;YAC5E,8DAA8D;YAC9DC,MAAM;YACNC,OAAOT,QAAQK,KAAK,CAAC,GAAG,CAAC;QAC3B;IACF;IAEA,IAAIL,QAAQI,UAAU,CAAC,WAAWJ,QAAQO,QAAQ,CAAC,MAAM;QACvD,OAAO;YACLC,MAAMP,qBACF,CAAC,qBAAqB,EAAEA,oBAAoB,GAC5C;YACJQ,OAAOT,QAAQK,KAAK,CAAC,GAAG,CAAC;QAC3B;IACF;IAEA,IAAIL,QAAQI,UAAU,CAAC,QAAQJ,QAAQO,QAAQ,CAAC,MAAM;QACpD,OAAO;YACLC,MAAMP,qBACF,CAAC,oBAAoB,EAAEA,oBAAoB,GAC3C;YACJQ,OAAOT,QAAQK,KAAK,CAAC,GAAG,CAAC;QAC3B;IACF;IAEA,OAAO;AACT;AAEO,SAASK,WACdF,IAAuB;IAQvB,OACEA,SAAS,cACTA,SAAS,mCACTA,SAAS,8BACTA,SAAS,+BACTA,SAAS,gCACTA,SAAS;AAEb;AAEO,SAASG,mBAAmBC,SAA4B;IAI7D,IAAIC,SAAS;IACb,IAAIC,WAAW;IAEf,OAAQF;QACN,KAAK;QACL,KAAK;QACL,KAAK;QACL,KAAK;QACL,KAAK;YACHC,SAAS;YACT;QACF,KAAK;YACHA,SAAS;YACTC,WAAW;YACX;QACF,KAAK;QACL,KAAK;QACL,KAAK;QACL,KAAK;QACL,KAAK;YACH;QACF;YACEF;IACJ;IAEA,OAAO;QAAEC;QAAQC;IAAS;AAC5B","ignoreList":[0]}}, + {"offset": {"line": 5793, "column": 0}, "map": {"version":3,"sources":["file:///Users/freedak/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next%4016.0.3_react-dom%4019.2.0_react%4019.2.0__react%4019.2.0/node_modules/next/src/build/static-paths/utils.ts"],"sourcesContent":["import type { DynamicParamTypes } from '../../shared/lib/app-router-types'\nimport type { FallbackRouteParam } from './types'\n\n/**\n * Encodes a parameter value using the provided encoder.\n *\n * @param value - The value to encode.\n * @param encoder - The encoder to use.\n * @returns The encoded value.\n */\nexport function encodeParam(\n value: string | string[],\n encoder: (value: string) => string\n) {\n let replaceValue: string\n if (Array.isArray(value)) {\n replaceValue = value.map(encoder).join('/')\n } else {\n replaceValue = encoder(value)\n }\n\n return replaceValue\n}\n\n/**\n * Normalizes a pathname to a consistent format.\n *\n * @param pathname - The pathname to normalize.\n * @returns The normalized pathname.\n */\nexport function normalizePathname(pathname: string) {\n return pathname.replace(/\\\\/g, '/').replace(/(?!^)\\/$/, '')\n}\n\n/**\n * Creates a fallback route param.\n *\n * @param paramName - The name of the param.\n * @param isParallelRouteParam - Whether this is a parallel route param or\n * descends from a parallel route param.\n * @returns The fallback route param.\n */\nexport function createFallbackRouteParam(\n paramName: string,\n paramType: DynamicParamTypes,\n isParallelRouteParam: boolean\n): FallbackRouteParam {\n return { paramName, paramType, isParallelRouteParam }\n}\n"],"names":["encodeParam","value","encoder","replaceValue","Array","isArray","map","join","normalizePathname","pathname","replace","createFallbackRouteParam","paramName","paramType","isParallelRouteParam"],"mappings":"AAGA;;;;;;CAMC,GACD;;;;;;;;AAAO,SAASA,YACdC,KAAwB,EACxBC,OAAkC;IAElC,IAAIC;IACJ,IAAIC,MAAMC,OAAO,CAACJ,QAAQ;QACxBE,eAAeF,MAAMK,GAAG,CAACJ,SAASK,IAAI,CAAC;IACzC,OAAO;QACLJ,eAAeD,QAAQD;IACzB;IAEA,OAAOE;AACT;AAQO,SAASK,kBAAkBC,QAAgB;IAChD,OAAOA,SAASC,OAAO,CAAC,OAAO,KAAKA,OAAO,CAAC,YAAY;AAC1D;AAUO,SAASC,yBACdC,SAAiB,EACjBC,SAA4B,EAC5BC,oBAA6B;IAE7B,OAAO;QAAEF;QAAWC;QAAWC;IAAqB;AACtD","ignoreList":[0]}}, + {"offset": {"line": 5830, "column": 0}, "map": {"version":3,"sources":["file:///Users/freedak/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next%4016.0.3_react-dom%4019.2.0_react%4019.2.0__react%4019.2.0/node_modules/next/src/build/segment-config/app/app-segments.ts"],"sourcesContent":["import type { Params } from '../../../server/request/params'\nimport type { AppPageRouteModule } from '../../../server/route-modules/app-page/module.compiled'\nimport type { AppRouteRouteModule } from '../../../server/route-modules/app-route/module.compiled'\nimport {\n type AppSegmentConfig,\n parseAppSegmentConfig,\n} from './app-segment-config'\n\nimport { InvariantError } from '../../../shared/lib/invariant-error'\nimport {\n isAppRouteRouteModule,\n isAppPageRouteModule,\n} from '../../../server/route-modules/checks'\nimport { isClientReference } from '../../../lib/client-and-server-references'\nimport { getSegmentParam } from '../../../shared/lib/router/utils/get-segment-param'\nimport {\n getLayoutOrPageModule,\n type LoaderTree,\n} from '../../../server/lib/app-dir-module'\nimport { PAGE_SEGMENT_KEY } from '../../../shared/lib/segment'\nimport type { FallbackRouteParam } from '../../static-paths/types'\nimport { createFallbackRouteParam } from '../../static-paths/utils'\nimport type { DynamicParamTypes } from '../../../shared/lib/app-router-types'\n\ntype GenerateStaticParams = (options: { params?: Params }) => Promise\n\n/**\n * Parses the app config and attaches it to the segment.\n */\nfunction attach(segment: AppSegment, userland: unknown, route: string) {\n // If the userland is not an object, then we can't do anything with it.\n if (typeof userland !== 'object' || userland === null) {\n return\n }\n\n // Try to parse the application configuration.\n const config = parseAppSegmentConfig(userland, route)\n\n // If there was any keys on the config, then attach it to the segment.\n if (Object.keys(config).length > 0) {\n segment.config = config\n }\n\n if (\n 'generateStaticParams' in userland &&\n typeof userland.generateStaticParams === 'function'\n ) {\n segment.generateStaticParams =\n userland.generateStaticParams as GenerateStaticParams\n\n // Validate that `generateStaticParams` makes sense in this context.\n if (segment.config?.runtime === 'edge') {\n throw new Error(\n 'Edge runtime is not supported with `generateStaticParams`.'\n )\n }\n }\n}\n\nexport type AppSegment = {\n name: string\n paramName: string | undefined\n paramType: DynamicParamTypes | undefined\n filePath: string | undefined\n config: AppSegmentConfig | undefined\n isDynamicSegment: boolean\n generateStaticParams: GenerateStaticParams | undefined\n\n /**\n * Whether this segment is a parallel route segment or descends from a\n * parallel route segment.\n */\n isParallelRouteSegment: boolean | undefined\n}\n\n/**\n * Walks the loader tree and collects the generate parameters for each segment.\n *\n * @param routeModule the app page route module\n * @returns the segments for the app page route module\n */\nasync function collectAppPageSegments(routeModule: AppPageRouteModule) {\n // We keep track of unique segments, since with parallel routes, it's possible\n // to see the same segment multiple times.\n const uniqueSegments = new Map()\n\n // Queue will store tuples of [loaderTree, currentSegments, isParallelRouteSegment]\n type QueueItem = [\n loaderTree: LoaderTree,\n currentSegments: AppSegment[],\n isParallelRouteSegment: boolean,\n ]\n const queue: QueueItem[] = [[routeModule.userland.loaderTree, [], false]]\n\n while (queue.length > 0) {\n const [loaderTree, currentSegments, isParallelRouteSegment] = queue.shift()!\n const [name, parallelRoutes] = loaderTree\n\n // Process current node\n const { mod: userland, filePath } = await getLayoutOrPageModule(loaderTree)\n const isClientComponent = userland && isClientReference(userland)\n\n const { param: paramName, type: paramType } = getSegmentParam(name) ?? {}\n\n const segment: AppSegment = {\n name,\n paramName,\n paramType,\n filePath,\n config: undefined,\n isDynamicSegment: !!paramName,\n generateStaticParams: undefined,\n isParallelRouteSegment,\n }\n\n // Only server components can have app segment configurations\n if (!isClientComponent) {\n attach(segment, userland, routeModule.definition.pathname)\n }\n\n // Create a unique key for the segment\n const segmentKey = getSegmentKey(segment)\n if (!uniqueSegments.has(segmentKey)) {\n uniqueSegments.set(segmentKey, segment)\n }\n\n const updatedSegments = [...currentSegments, segment]\n\n // If this is a page segment, we've reached a leaf node\n if (name === PAGE_SEGMENT_KEY) {\n // Add all segments in the current path, preferring non-parallel segments\n updatedSegments.forEach((seg) => {\n const key = getSegmentKey(seg)\n if (!uniqueSegments.has(key)) {\n uniqueSegments.set(key, seg)\n }\n })\n }\n\n // Add all parallel routes to the queue\n for (const parallelRouteKey in parallelRoutes) {\n const parallelRoute = parallelRoutes[parallelRouteKey]\n queue.push([\n parallelRoute,\n updatedSegments,\n // A parallel route segment is one that descends from a segment that is\n // not children or descends from a parallel route segment.\n isParallelRouteSegment || parallelRouteKey !== 'children',\n ])\n }\n }\n\n return Array.from(uniqueSegments.values())\n}\n\nfunction getSegmentKey(segment: AppSegment) {\n return `${segment.name}-${segment.filePath ?? ''}-${segment.paramName ?? ''}-${segment.isParallelRouteSegment ? 'pr' : 'np'}`\n}\n\n/**\n * Collects the segments for a given app route module.\n *\n * @param routeModule the app route module\n * @returns the segments for the app route module\n */\nfunction collectAppRouteSegments(\n routeModule: AppRouteRouteModule\n): AppSegment[] {\n // Get the pathname parts, slice off the first element (which is empty).\n const parts = routeModule.definition.pathname.split('/').slice(1)\n if (parts.length === 0) {\n throw new InvariantError('Expected at least one segment')\n }\n\n // Generate all the segments.\n const segments: AppSegment[] = parts.map((name) => {\n const { param: paramName, type: paramType } = getSegmentParam(name) ?? {}\n\n return {\n name,\n paramName,\n paramType,\n filePath: undefined,\n isDynamicSegment: !!paramName,\n config: undefined,\n generateStaticParams: undefined,\n isParallelRouteSegment: undefined,\n } satisfies AppSegment\n })\n\n // We know we have at least one, we verified this above. We should get the\n // last segment which represents the root route module.\n const segment = segments[segments.length - 1]\n\n segment.filePath = routeModule.definition.filename\n\n // Extract the segment config from the userland module.\n attach(segment, routeModule.userland, routeModule.definition.pathname)\n\n return segments\n}\n\n/**\n * Collects the segments for a given route module.\n *\n * @param components the loaded components\n * @returns the segments for the route module\n */\nexport function collectSegments(\n routeModule: AppRouteRouteModule | AppPageRouteModule\n): Promise | AppSegment[] {\n if (isAppRouteRouteModule(routeModule)) {\n return collectAppRouteSegments(routeModule)\n }\n\n if (isAppPageRouteModule(routeModule)) {\n return collectAppPageSegments(routeModule)\n }\n\n throw new InvariantError(\n 'Expected a route module to be one of app route or page'\n )\n}\n\n/**\n * Collects the fallback route params for a given app page route module. This is\n * a variant of the `collectSegments` function that only collects the fallback\n * route params without importing anything.\n *\n * @param routeModule the app page route module\n * @returns the fallback route params for the app page route module\n */\nexport function collectFallbackRouteParams(\n routeModule: AppPageRouteModule\n): readonly FallbackRouteParam[] {\n const uniqueSegments = new Map()\n\n // Queue will store tuples of [loaderTree, isParallelRouteSegment]\n type QueueItem = [loaderTree: LoaderTree, isParallelRouteSegment: boolean]\n const queue: QueueItem[] = [[routeModule.userland.loaderTree, false]]\n\n while (queue.length > 0) {\n const [loaderTree, isParallelRouteSegment] = queue.shift()!\n const [name, parallelRoutes] = loaderTree\n\n // Handle this segment (if it's a dynamic segment param).\n const segmentParam = getSegmentParam(name)\n if (segmentParam) {\n const key = `${name}-${segmentParam.param}-${isParallelRouteSegment ? 'pr' : 'np'}`\n if (!uniqueSegments.has(key)) {\n uniqueSegments.set(\n key,\n createFallbackRouteParam(\n segmentParam.param,\n segmentParam.type,\n isParallelRouteSegment\n )\n )\n }\n }\n\n // Add all of this segment's parallel routes to the queue.\n for (const parallelRouteKey in parallelRoutes) {\n const parallelRoute = parallelRoutes[parallelRouteKey]\n queue.push([\n parallelRoute,\n // A parallel route segment is one that descends from a segment that is\n // not children or descends from a parallel route segment.\n isParallelRouteSegment || parallelRouteKey !== 'children',\n ])\n }\n }\n\n return Array.from(uniqueSegments.values())\n}\n"],"names":["parseAppSegmentConfig","InvariantError","isAppRouteRouteModule","isAppPageRouteModule","isClientReference","getSegmentParam","getLayoutOrPageModule","PAGE_SEGMENT_KEY","createFallbackRouteParam","attach","segment","userland","route","config","Object","keys","length","generateStaticParams","runtime","Error","collectAppPageSegments","routeModule","uniqueSegments","Map","queue","loaderTree","currentSegments","isParallelRouteSegment","shift","name","parallelRoutes","mod","filePath","isClientComponent","param","paramName","type","paramType","undefined","isDynamicSegment","definition","pathname","segmentKey","getSegmentKey","has","set","updatedSegments","forEach","seg","key","parallelRouteKey","parallelRoute","push","Array","from","values","collectAppRouteSegments","parts","split","slice","segments","map","filename","collectSegments","collectFallbackRouteParams","segmentParam"],"mappings":";;;;;;AAGA,SAEEA,qBAAqB,QAChB,uBAAsB;AAE7B,SAASC,cAAc,QAAQ,sCAAqC;AACpE,SACEC,qBAAqB,EACrBC,oBAAoB,QACf,uCAAsC;AAC7C,SAASC,iBAAiB,QAAQ,4CAA2C;AAC7E,SAASC,eAAe,QAAQ,qDAAoD;AACpF,SACEC,qBAAqB,QAEhB,qCAAoC;AAC3C,SAASC,gBAAgB,QAAQ,8BAA6B;AAE9D,SAASC,wBAAwB,QAAQ,2BAA0B;;;;;;;;;AAKnE;;CAEC,GACD,SAASC,OAAOC,OAAmB,EAAEC,QAAiB,EAAEC,KAAa;IACnE,uEAAuE;IACvE,IAAI,OAAOD,aAAa,YAAYA,aAAa,MAAM;QACrD;IACF;IAEA,8CAA8C;IAC9C,MAAME,aAASb,mZAAAA,EAAsBW,UAAUC;IAE/C,sEAAsE;IACtE,IAAIE,OAAOC,IAAI,CAACF,QAAQG,MAAM,GAAG,GAAG;QAClCN,QAAQG,MAAM,GAAGA;IACnB;IAEA,IACE,0BAA0BF,YAC1B,OAAOA,SAASM,oBAAoB,KAAK,YACzC;YAKIP;QAJJA,QAAQO,oBAAoB,GAC1BN,SAASM,oBAAoB;QAE/B,oEAAoE;QACpE,IAAIP,CAAAA,CAAAA,kBAAAA,QAAQG,MAAM,KAAA,OAAA,KAAA,IAAdH,gBAAgBQ,OAAO,MAAK,QAAQ;YACtC,MAAM,OAAA,cAEL,CAFK,IAAIC,MACR,+DADI,qBAAA;uBAAA;4BAAA;8BAAA;YAEN;QACF;IACF;AACF;AAkBA;;;;;CAKC,GACD,eAAeC,uBAAuBC,WAA+B;IACnE,8EAA8E;IAC9E,0CAA0C;IAC1C,MAAMC,iBAAiB,IAAIC;IAQ3B,MAAMC,QAAqB;QAAC;YAACH,YAAYV,QAAQ,CAACc,UAAU;YAAE,EAAE;YAAE;SAAM;KAAC;IAEzE,MAAOD,MAAMR,MAAM,GAAG,EAAG;QACvB,MAAM,CAACS,YAAYC,iBAAiBC,uBAAuB,GAAGH,MAAMI,KAAK;QACzE,MAAM,CAACC,MAAMC,eAAe,GAAGL;QAE/B,uBAAuB;QACvB,MAAM,EAAEM,KAAKpB,QAAQ,EAAEqB,QAAQ,EAAE,GAAG,UAAM1B,2XAAAA,EAAsBmB;QAChE,MAAMQ,oBAAoBtB,gBAAYP,8XAAAA,EAAkBO;QAExD,MAAM,EAAEuB,OAAOC,SAAS,EAAEC,MAAMC,SAAS,EAAE,OAAGhC,2YAAAA,EAAgBwB,SAAS,CAAC;QAExE,MAAMnB,UAAsB;YAC1BmB;YACAM;YACAE;YACAL;YACAnB,QAAQyB;YACRC,kBAAkB,CAAC,CAACJ;YACpBlB,sBAAsBqB;YACtBX;QACF;QAEA,6DAA6D;QAC7D,IAAI,CAACM,mBAAmB;YACtBxB,OAAOC,SAASC,UAAUU,YAAYmB,UAAU,CAACC,QAAQ;QAC3D;QAEA,sCAAsC;QACtC,MAAMC,aAAaC,cAAcjC;QACjC,IAAI,CAACY,eAAesB,GAAG,CAACF,aAAa;YACnCpB,eAAeuB,GAAG,CAACH,YAAYhC;QACjC;QAEA,MAAMoC,kBAAkB;eAAIpB;YAAiBhB;SAAQ;QAErD,uDAAuD;QACvD,IAAImB,SAAStB,yWAAAA,EAAkB;YAC7B,yEAAyE;YACzEuC,gBAAgBC,OAAO,CAAC,CAACC;gBACvB,MAAMC,MAAMN,cAAcK;gBAC1B,IAAI,CAAC1B,eAAesB,GAAG,CAACK,MAAM;oBAC5B3B,eAAeuB,GAAG,CAACI,KAAKD;gBAC1B;YACF;QACF;QAEA,uCAAuC;QACvC,IAAK,MAAME,oBAAoBpB,eAAgB;YAC7C,MAAMqB,gBAAgBrB,cAAc,CAACoB,iBAAiB;YACtD1B,MAAM4B,IAAI,CAAC;gBACTD;gBACAL;gBACA,uEAAuE;gBACvE,0DAA0D;gBAC1DnB,0BAA0BuB,qBAAqB;aAChD;QACH;IACF;IAEA,OAAOG,MAAMC,IAAI,CAAChC,eAAeiC,MAAM;AACzC;AAEA,SAASZ,cAAcjC,OAAmB;IACxC,OAAO,GAAGA,QAAQmB,IAAI,CAAC,CAAC,EAAEnB,QAAQsB,QAAQ,IAAI,GAAG,CAAC,EAAEtB,QAAQyB,SAAS,IAAI,GAAG,CAAC,EAAEzB,QAAQiB,sBAAsB,GAAG,OAAO,MAAM;AAC/H;AAEA;;;;;CAKC,GACD,SAAS6B,wBACPnC,WAAgC;IAEhC,wEAAwE;IACxE,MAAMoC,QAAQpC,YAAYmB,UAAU,CAACC,QAAQ,CAACiB,KAAK,CAAC,KAAKC,KAAK,CAAC;IAC/D,IAAIF,MAAMzC,MAAM,KAAK,GAAG;QACtB,MAAM,OAAA,cAAmD,CAAnD,IAAIf,kXAAAA,CAAe,kCAAnB,qBAAA;mBAAA;wBAAA;0BAAA;QAAkD;IAC1D;IAEA,6BAA6B;IAC7B,MAAM2D,WAAyBH,MAAMI,GAAG,CAAC,CAAChC;QACxC,MAAM,EAAEK,OAAOC,SAAS,EAAEC,MAAMC,SAAS,EAAE,OAAGhC,2YAAAA,EAAgBwB,SAAS,CAAC;QAExE,OAAO;YACLA;YACAM;YACAE;YACAL,UAAUM;YACVC,kBAAkB,CAAC,CAACJ;YACpBtB,QAAQyB;YACRrB,sBAAsBqB;YACtBX,wBAAwBW;QAC1B;IACF;IAEA,0EAA0E;IAC1E,uDAAuD;IACvD,MAAM5B,UAAUkD,QAAQ,CAACA,SAAS5C,MAAM,GAAG,EAAE;IAE7CN,QAAQsB,QAAQ,GAAGX,YAAYmB,UAAU,CAACsB,QAAQ;IAElD,uDAAuD;IACvDrD,OAAOC,SAASW,YAAYV,QAAQ,EAAEU,YAAYmB,UAAU,CAACC,QAAQ;IAErE,OAAOmB;AACT;AAQO,SAASG,gBACd1C,WAAqD;IAErD,QAAInB,0XAAAA,EAAsBmB,cAAc;QACtC,OAAOmC,wBAAwBnC;IACjC;IAEA,QAAIlB,yXAAAA,EAAqBkB,cAAc;QACrC,OAAOD,uBAAuBC;IAChC;IAEA,MAAM,OAAA,cAEL,CAFK,IAAIpB,kXAAAA,CACR,2DADI,qBAAA;eAAA;oBAAA;sBAAA;IAEN;AACF;AAUO,SAAS+D,2BACd3C,WAA+B;IAE/B,MAAMC,iBAAiB,IAAIC;IAI3B,MAAMC,QAAqB;QAAC;YAACH,YAAYV,QAAQ,CAACc,UAAU;YAAE;SAAM;KAAC;IAErE,MAAOD,MAAMR,MAAM,GAAG,EAAG;QACvB,MAAM,CAACS,YAAYE,uBAAuB,GAAGH,MAAMI,KAAK;QACxD,MAAM,CAACC,MAAMC,eAAe,GAAGL;QAE/B,yDAAyD;QACzD,MAAMwC,mBAAe5D,2YAAAA,EAAgBwB;QACrC,IAAIoC,cAAc;YAChB,MAAMhB,MAAM,GAAGpB,KAAK,CAAC,EAAEoC,aAAa/B,KAAK,CAAC,CAAC,EAAEP,yBAAyB,OAAO,MAAM;YACnF,IAAI,CAACL,eAAesB,GAAG,CAACK,MAAM;gBAC5B3B,eAAeuB,GAAG,CAChBI,SACAzC,0XAAAA,EACEyD,aAAa/B,KAAK,EAClB+B,aAAa7B,IAAI,EACjBT;YAGN;QACF;QAEA,0DAA0D;QAC1D,IAAK,MAAMuB,oBAAoBpB,eAAgB;YAC7C,MAAMqB,gBAAgBrB,cAAc,CAACoB,iBAAiB;YACtD1B,MAAM4B,IAAI,CAAC;gBACTD;gBACA,uEAAuE;gBACvE,0DAA0D;gBAC1DxB,0BAA0BuB,qBAAqB;aAChD;QACH;IACF;IAEA,OAAOG,MAAMC,IAAI,CAAChC,eAAeiC,MAAM;AACzC","ignoreList":[0]}}, + {"offset": {"line": 6037, "column": 0}, "map": {"version":3,"sources":["file:///Users/freedak/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next%4016.0.3_react-dom%4019.2.0_react%4019.2.0__react%4019.2.0/node_modules/next/src/shared/lib/utils.ts"],"sourcesContent":["import type { HtmlProps } from './html-context.shared-runtime'\nimport type { ComponentType, JSX } from 'react'\nimport type { DomainLocale } from '../../server/config'\nimport type { Env } from '@next/env'\nimport type { IncomingMessage, ServerResponse } from 'http'\nimport type { NextRouter } from './router/router'\nimport type { ParsedUrlQuery } from 'querystring'\nimport type { PreviewData } from '../../types'\nimport type { COMPILER_NAMES } from './constants'\nimport type fs from 'fs'\n\nexport type NextComponentType<\n Context extends BaseContext = NextPageContext,\n InitialProps = {},\n Props = {},\n> = ComponentType & {\n /**\n * Used for initial page load data population. Data returned from `getInitialProps` is serialized when server rendered.\n * Make sure to return plain `Object` without using `Date`, `Map`, `Set`.\n * @param context Context of `page`\n */\n getInitialProps?(context: Context): InitialProps | Promise\n}\n\nexport type DocumentType = NextComponentType<\n DocumentContext,\n DocumentInitialProps,\n DocumentProps\n>\n\nexport type AppType

= NextComponentType<\n AppContextType,\n P,\n AppPropsType\n>\n\nexport type AppTreeType = ComponentType<\n AppInitialProps & { [name: string]: any }\n>\n\n/**\n * Web vitals provided to _app.reportWebVitals by Core Web Vitals plugin developed by Google Chrome team.\n * https://nextjs.org/blog/next-9-4#integrated-web-vitals-reporting\n */\nexport const WEB_VITALS = ['CLS', 'FCP', 'FID', 'INP', 'LCP', 'TTFB'] as const\nexport type NextWebVitalsMetric = {\n id: string\n startTime: number\n value: number\n attribution?: { [key: string]: unknown }\n} & (\n | {\n label: 'web-vital'\n name: (typeof WEB_VITALS)[number]\n }\n | {\n label: 'custom'\n name:\n | 'Next.js-hydration'\n | 'Next.js-route-change-to-render'\n | 'Next.js-render'\n }\n)\n\nexport type Enhancer = (Component: C) => C\n\nexport type ComponentsEnhancer =\n | {\n enhanceApp?: Enhancer\n enhanceComponent?: Enhancer\n }\n | Enhancer\n\nexport type RenderPageResult = {\n html: string\n head?: Array\n}\n\nexport type RenderPage = (\n options?: ComponentsEnhancer\n) => DocumentInitialProps | Promise\n\nexport type BaseContext = {\n res?: ServerResponse\n [k: string]: any\n}\n\nexport type NEXT_DATA = {\n props: Record\n page: string\n query: ParsedUrlQuery\n buildId: string\n assetPrefix?: string\n nextExport?: boolean\n autoExport?: boolean\n isFallback?: boolean\n isExperimentalCompile?: boolean\n dynamicIds?: (string | number)[]\n err?: Error & {\n statusCode?: number\n source?: typeof COMPILER_NAMES.server | typeof COMPILER_NAMES.edgeServer\n }\n gsp?: boolean\n gssp?: boolean\n customServer?: boolean\n gip?: boolean\n appGip?: boolean\n locale?: string\n locales?: readonly string[]\n defaultLocale?: string\n domainLocales?: readonly DomainLocale[]\n scriptLoader?: any[]\n isPreview?: boolean\n notFoundSrcPage?: string\n}\n\n/**\n * `Next` context\n */\nexport interface NextPageContext {\n /**\n * Error object if encountered during rendering\n */\n err?: (Error & { statusCode?: number }) | null\n /**\n * `HTTP` request object.\n */\n req?: IncomingMessage\n /**\n * `HTTP` response object.\n */\n res?: ServerResponse\n /**\n * Path section of `URL`.\n */\n pathname: string\n /**\n * Query string section of `URL` parsed as an object.\n */\n query: ParsedUrlQuery\n /**\n * `String` of the actual path including query.\n */\n asPath?: string\n /**\n * The currently active locale\n */\n locale?: string\n /**\n * All configured locales\n */\n locales?: readonly string[]\n /**\n * The configured default locale\n */\n defaultLocale?: string\n /**\n * `Component` the tree of the App to use if needing to render separately\n */\n AppTree: AppTreeType\n}\n\nexport type AppContextType = {\n Component: NextComponentType\n AppTree: AppTreeType\n ctx: NextPageContext\n router: Router\n}\n\nexport type AppInitialProps = {\n pageProps: PageProps\n}\n\nexport type AppPropsType<\n Router extends NextRouter = NextRouter,\n PageProps = {},\n> = AppInitialProps & {\n Component: NextComponentType\n router: Router\n __N_SSG?: boolean\n __N_SSP?: boolean\n}\n\nexport type DocumentContext = NextPageContext & {\n renderPage: RenderPage\n defaultGetInitialProps(\n ctx: DocumentContext,\n options?: { nonce?: string }\n ): Promise\n}\n\nexport type DocumentInitialProps = RenderPageResult & {\n styles?: React.ReactElement[] | Iterable | JSX.Element\n}\n\nexport type DocumentProps = DocumentInitialProps & HtmlProps\n\n/**\n * Next `API` route request\n */\nexport interface NextApiRequest extends IncomingMessage {\n /**\n * Object of `query` values from url\n */\n query: Partial<{\n [key: string]: string | string[]\n }>\n /**\n * Object of `cookies` from header\n */\n cookies: Partial<{\n [key: string]: string\n }>\n\n body: any\n\n env: Env\n\n draftMode?: boolean\n\n preview?: boolean\n /**\n * Preview data set on the request, if any\n * */\n previewData?: PreviewData\n}\n\n/**\n * Send body of response\n */\ntype Send = (body: T) => void\n\n/**\n * Next `API` route response\n */\nexport type NextApiResponse = ServerResponse & {\n /**\n * Send data `any` data in response\n */\n send: Send\n /**\n * Send data `json` data in response\n */\n json: Send\n status: (statusCode: number) => NextApiResponse\n redirect(url: string): NextApiResponse\n redirect(status: number, url: string): NextApiResponse\n\n /**\n * Set draft mode\n */\n setDraftMode: (options: { enable: boolean }) => NextApiResponse\n\n /**\n * Set preview data for Next.js' prerender mode\n */\n setPreviewData: (\n data: object | string,\n options?: {\n /**\n * Specifies the number (in seconds) for the preview session to last for.\n * The given number will be converted to an integer by rounding down.\n * By default, no maximum age is set and the preview session finishes\n * when the client shuts down (browser is closed).\n */\n maxAge?: number\n /**\n * Specifies the path for the preview session to work under. By default,\n * the path is considered the \"default path\", i.e., any pages under \"/\".\n */\n path?: string\n }\n ) => NextApiResponse\n\n /**\n * Clear preview data for Next.js' prerender mode\n */\n clearPreviewData: (options?: { path?: string }) => NextApiResponse\n\n /**\n * Revalidate a specific page and regenerate it using On-Demand Incremental\n * Static Regeneration.\n * The path should be an actual path, not a rewritten path. E.g. for\n * \"/blog/[slug]\" this should be \"/blog/post-1\".\n * @link https://nextjs.org/docs/app/building-your-application/data-fetching/incremental-static-regeneration#on-demand-revalidation-with-revalidatepath\n */\n revalidate: (\n urlPath: string,\n opts?: {\n unstable_onlyGenerated?: boolean\n }\n ) => Promise\n}\n\n/**\n * Next `API` route handler\n */\nexport type NextApiHandler = (\n req: NextApiRequest,\n res: NextApiResponse\n) => unknown | Promise\n\n/**\n * Utils\n */\nexport function execOnce ReturnType>(\n fn: T\n): T {\n let used = false\n let result: ReturnType\n\n return ((...args: any[]) => {\n if (!used) {\n used = true\n result = fn(...args)\n }\n return result\n }) as T\n}\n\n// Scheme: https://tools.ietf.org/html/rfc3986#section-3.1\n// Absolute URL: https://tools.ietf.org/html/rfc3986#section-4.3\nconst ABSOLUTE_URL_REGEX = /^[a-zA-Z][a-zA-Z\\d+\\-.]*?:/\nexport const isAbsoluteUrl = (url: string) => ABSOLUTE_URL_REGEX.test(url)\n\nexport function getLocationOrigin() {\n const { protocol, hostname, port } = window.location\n return `${protocol}//${hostname}${port ? ':' + port : ''}`\n}\n\nexport function getURL() {\n const { href } = window.location\n const origin = getLocationOrigin()\n return href.substring(origin.length)\n}\n\nexport function getDisplayName

(Component: ComponentType

) {\n return typeof Component === 'string'\n ? Component\n : Component.displayName || Component.name || 'Unknown'\n}\n\nexport function isResSent(res: ServerResponse) {\n return res.finished || res.headersSent\n}\n\nexport function normalizeRepeatedSlashes(url: string) {\n const urlParts = url.split('?')\n const urlNoQuery = urlParts[0]\n\n return (\n urlNoQuery\n // first we replace any non-encoded backslashes with forward\n // then normalize repeated forward slashes\n .replace(/\\\\/g, '/')\n .replace(/\\/\\/+/g, '/') +\n (urlParts[1] ? `?${urlParts.slice(1).join('?')}` : '')\n )\n}\n\nexport async function loadGetInitialProps<\n C extends BaseContext,\n IP = {},\n P = {},\n>(App: NextComponentType, ctx: C): Promise {\n if (process.env.NODE_ENV !== 'production') {\n if (App.prototype?.getInitialProps) {\n const message = `\"${getDisplayName(\n App\n )}.getInitialProps()\" is defined as an instance method - visit https://nextjs.org/docs/messages/get-initial-props-as-an-instance-method for more information.`\n throw new Error(message)\n }\n }\n // when called from _app `ctx` is nested in `ctx`\n const res = ctx.res || (ctx.ctx && ctx.ctx.res)\n\n if (!App.getInitialProps) {\n if (ctx.ctx && ctx.Component) {\n // @ts-ignore pageProps default\n return {\n pageProps: await loadGetInitialProps(ctx.Component, ctx.ctx),\n }\n }\n return {} as IP\n }\n\n const props = await App.getInitialProps(ctx)\n\n if (res && isResSent(res)) {\n return props\n }\n\n if (!props) {\n const message = `\"${getDisplayName(\n App\n )}.getInitialProps()\" should resolve to an object. But found \"${props}\" instead.`\n throw new Error(message)\n }\n\n if (process.env.NODE_ENV !== 'production') {\n if (Object.keys(props).length === 0 && !ctx.ctx) {\n console.warn(\n `${getDisplayName(\n App\n )} returned an empty object from \\`getInitialProps\\`. This de-optimizes and prevents automatic static optimization. https://nextjs.org/docs/messages/empty-object-getInitialProps`\n )\n }\n }\n\n return props\n}\n\nexport const SP = typeof performance !== 'undefined'\nexport const ST =\n SP &&\n (['mark', 'measure', 'getEntriesByName'] as const).every(\n (method) => typeof performance[method] === 'function'\n )\n\nexport class DecodeError extends Error {}\nexport class NormalizeError extends Error {}\nexport class PageNotFoundError extends Error {\n code: string\n\n constructor(page: string) {\n super()\n this.code = 'ENOENT'\n this.name = 'PageNotFoundError'\n this.message = `Cannot find module for page: ${page}`\n }\n}\n\nexport class MissingStaticPage extends Error {\n constructor(page: string, message: string) {\n super()\n this.message = `Failed to load static file for page: ${page} ${message}`\n }\n}\n\nexport class MiddlewareNotFoundError extends Error {\n code: string\n constructor() {\n super()\n this.code = 'ENOENT'\n this.message = `Cannot find the middleware module`\n }\n}\n\nexport interface CacheFs {\n existsSync: typeof fs.existsSync\n readFile: typeof fs.promises.readFile\n readFileSync: typeof fs.readFileSync\n writeFile(f: string, d: any): Promise\n mkdir(dir: string): Promise\n stat(f: string): Promise<{ mtime: Date }>\n}\n\nexport function stringifyError(error: Error) {\n return JSON.stringify({ message: error.message, stack: error.stack })\n}\n"],"names":["WEB_VITALS","execOnce","fn","used","result","args","ABSOLUTE_URL_REGEX","isAbsoluteUrl","url","test","getLocationOrigin","protocol","hostname","port","window","location","getURL","href","origin","substring","length","getDisplayName","Component","displayName","name","isResSent","res","finished","headersSent","normalizeRepeatedSlashes","urlParts","split","urlNoQuery","replace","slice","join","loadGetInitialProps","App","ctx","process","env","NODE_ENV","prototype","getInitialProps","message","Error","pageProps","props","Object","keys","console","warn","SP","performance","ST","every","method","DecodeError","NormalizeError","PageNotFoundError","constructor","page","code","MissingStaticPage","MiddlewareNotFoundError","stringifyError","error","JSON","stringify","stack"],"mappings":"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","ignoreList":[0]}}, + {"offset": {"line": 6202, "column": 0}, "map": {"version":3,"sources":["file:///Users/freedak/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next%4016.0.3_react-dom%4019.2.0_react%4019.2.0__react%4019.2.0/node_modules/next/dist/compiled/path-to-regexp/index.js"],"sourcesContent":["(()=>{\"use strict\";if(typeof __nccwpck_require__!==\"undefined\")__nccwpck_require__.ab=__dirname+\"/\";var e={};(()=>{var n=e;Object.defineProperty(n,\"__esModule\",{value:true});n.pathToRegexp=n.tokensToRegexp=n.regexpToFunction=n.match=n.tokensToFunction=n.compile=n.parse=void 0;function lexer(e){var n=[];var r=0;while(r=48&&o<=57||o>=65&&o<=90||o>=97&&o<=122||o===95){a+=e[i++];continue}break}if(!a)throw new TypeError(\"Missing parameter name at \".concat(r));n.push({type:\"NAME\",index:r,value:a});r=i;continue}if(t===\"(\"){var c=1;var f=\"\";var i=r+1;if(e[i]===\"?\"){throw new TypeError('Pattern cannot start with \"?\" at '.concat(i))}while(i-1)return true}return false};var safePattern=function(e){var n=c[c.length-1];var r=e||(n&&typeof n===\"string\"?n:\"\");if(n&&!r){throw new TypeError('Must have text between two parameters, missing text after \"'.concat(n.name,'\"'))}if(!r||isSafe(r))return\"[^\".concat(escapeString(o),\"]+?\");return\"(?:(?!\".concat(escapeString(r),\")[^\").concat(escapeString(o),\"])+?\")};while(u)?(?!\\?)/g;var t=0;var a=r.exec(e.source);while(a){n.push({name:a[1]||t++,prefix:\"\",suffix:\"\",modifier:\"\",pattern:\"\"});a=r.exec(e.source)}return e}function arrayToRegexp(e,n,r){var t=e.map((function(e){return pathToRegexp(e,n,r).source}));return new RegExp(\"(?:\".concat(t.join(\"|\"),\")\"),flags(r))}function stringToRegexp(e,n,r){return tokensToRegexp(parse(e,r),n,r)}function tokensToRegexp(e,n,r){if(r===void 0){r={}}var t=r.strict,a=t===void 0?false:t,i=r.start,o=i===void 0?true:i,c=r.end,f=c===void 0?true:c,u=r.encode,p=u===void 0?function(e){return e}:u,v=r.delimiter,s=v===void 0?\"/#?\":v,d=r.endsWith,g=d===void 0?\"\":d;var x=\"[\".concat(escapeString(g),\"]|$\");var h=\"[\".concat(escapeString(s),\"]\");var l=o?\"^\":\"\";for(var m=0,T=e;m-1:A===undefined;if(!a){l+=\"(?:\".concat(h,\"(?=\").concat(x,\"))?\")}if(!_){l+=\"(?=\".concat(h,\"|\").concat(x,\")\")}}return new RegExp(l,flags(r))}n.tokensToRegexp=tokensToRegexp;function pathToRegexp(e,n,r){if(e instanceof RegExp)return regexpToRegexp(e,n);if(Array.isArray(e))return arrayToRegexp(e,n,r);return stringToRegexp(e,n,r)}n.pathToRegexp=pathToRegexp})();module.exports=e})();"],"names":[],"mappings":"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","ignoreList":[0]}}, + {"offset": {"line": 6613, "column": 0}, "map": {"version":3,"sources":["file:///Users/freedak/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next%4016.0.3_react-dom%4019.2.0_react%4019.2.0__react%4019.2.0/node_modules/next/src/lib/route-pattern-normalizer.ts"],"sourcesContent":["import type { Token } from 'next/dist/compiled/path-to-regexp'\n\n/**\n * Route pattern normalization utilities for path-to-regexp compatibility.\n *\n * path-to-regexp 6.3.0+ introduced stricter validation that rejects certain\n * patterns commonly used in Next.js interception routes. This module provides\n * normalization functions to make Next.js route patterns compatible with the\n * updated library while preserving all functionality.\n */\n\n/**\n * Internal separator used to normalize adjacent parameter patterns.\n * This unique marker is inserted between adjacent parameters and stripped out\n * during parameter extraction to avoid conflicts with real URL content.\n */\nexport const PARAM_SEPARATOR = '_NEXTSEP_'\n\n/**\n * Detects if a route pattern needs normalization for path-to-regexp compatibility.\n */\nexport function hasAdjacentParameterIssues(route: string): boolean {\n if (typeof route !== 'string') return false\n\n // Check for interception route markers followed immediately by parameters\n // Pattern: /(.):param, /(..):param, /(...):param, /(.)(.):param etc.\n // These patterns cause \"Must have text between two parameters\" errors\n if (/\\/\\(\\.{1,3}\\):[^/\\s]+/.test(route)) {\n return true\n }\n\n // Check for basic adjacent parameters without separators\n // Pattern: :param1:param2 (but not :param* or other URL patterns)\n if (/:[a-zA-Z_][a-zA-Z0-9_]*:[a-zA-Z_][a-zA-Z0-9_]*/.test(route)) {\n return true\n }\n\n return false\n}\n\n/**\n * Normalizes route patterns that have adjacent parameters without text between them.\n * Inserts a unique separator that can be safely stripped out later.\n */\nexport function normalizeAdjacentParameters(route: string): string {\n let normalized = route\n\n // Handle interception route patterns: (.):param -> (.)_NEXTSEP_:param\n normalized = normalized.replace(\n /(\\([^)]*\\)):([^/\\s]+)/g,\n `$1${PARAM_SEPARATOR}:$2`\n )\n\n // Handle other adjacent parameter patterns: :param1:param2 -> :param1_NEXTSEP_:param2\n normalized = normalized.replace(/:([^:/\\s)]+)(?=:)/g, `:$1${PARAM_SEPARATOR}`)\n\n return normalized\n}\n\n/**\n * Normalizes tokens that have repeating modifiers (* or +) but empty prefix and suffix.\n *\n * path-to-regexp 6.3.0+ introduced validation that throws:\n * \"Can not repeat without prefix/suffix\"\n *\n * This occurs when a token has modifier: '*' or '+' with both prefix: '' and suffix: ''\n */\nexport function normalizeTokensForRegexp(tokens: Token[]): Token[] {\n return tokens.map((token) => {\n // Token union type: Token = string | TokenObject\n // Literal path segments are strings, parameters/wildcards are objects\n if (\n typeof token === 'object' &&\n token !== null &&\n // Not all token objects have 'modifier' property (e.g., simple text tokens)\n 'modifier' in token &&\n // Only repeating modifiers (* or +) cause the validation error\n // Other modifiers like '?' (optional) are fine\n (token.modifier === '*' || token.modifier === '+') &&\n // Token objects can have different shapes depending on route pattern\n 'prefix' in token &&\n 'suffix' in token &&\n // Both prefix and suffix must be empty strings\n // This is what causes the validation error in path-to-regexp\n token.prefix === '' &&\n token.suffix === ''\n ) {\n // Add minimal prefix to satisfy path-to-regexp validation\n // We use '/' as it's the most common path delimiter and won't break route matching\n // The prefix gets used in regex generation but doesn't affect parameter extraction\n return {\n ...token,\n prefix: '/',\n }\n }\n return token\n })\n}\n\n/**\n * Strips normalization separators from compiled pathname.\n * This removes separators that were inserted by normalizeAdjacentParameters\n * to satisfy path-to-regexp validation.\n *\n * Only removes separators in the specific contexts where they were inserted:\n * - After interception route markers: (.)_NEXTSEP_ -> (.)\n *\n * This targeted approach ensures we don't accidentally remove the separator\n * from legitimate user content.\n */\nexport function stripNormalizedSeparators(pathname: string): string {\n // Remove separator after interception route markers\n // Pattern: (.)_NEXTSEP_ -> (.), (..)_NEXTSEP_ -> (..), etc.\n // The separator appears after the closing paren of interception markers\n return pathname.replace(new RegExp(`\\\\)${PARAM_SEPARATOR}`, 'g'), ')')\n}\n\n/**\n * Strips normalization separators from extracted route parameters.\n * Used by both server and client code to clean up parameters after route matching.\n */\nexport function stripParameterSeparators(\n params: Record\n): Record {\n const cleaned: Record = {}\n\n for (const [key, value] of Object.entries(params)) {\n if (typeof value === 'string') {\n // Remove the separator if it appears at the start of parameter values\n cleaned[key] = value.replace(new RegExp(`^${PARAM_SEPARATOR}`), '')\n } else if (Array.isArray(value)) {\n // Handle array parameters (from repeated route segments)\n cleaned[key] = value.map((item) =>\n typeof item === 'string'\n ? item.replace(new RegExp(`^${PARAM_SEPARATOR}`), '')\n : item\n )\n } else {\n cleaned[key] = value\n }\n }\n\n return cleaned\n}\n"],"names":["PARAM_SEPARATOR","hasAdjacentParameterIssues","route","test","normalizeAdjacentParameters","normalized","replace","normalizeTokensForRegexp","tokens","map","token","modifier","prefix","suffix","stripNormalizedSeparators","pathname","RegExp","stripParameterSeparators","params","cleaned","key","value","Object","entries","Array","isArray","item"],"mappings":"AAEA;;;;;;;CAOC,GAED;;;;CAIC,GACD;;;;;;;;;;;;;;AAAO,MAAMA,kBAAkB,YAAW;AAKnC,SAASC,2BAA2BC,KAAa;IACtD,IAAI,OAAOA,UAAU,UAAU,OAAO;IAEtC,0EAA0E;IAC1E,qEAAqE;IACrE,sEAAsE;IACtE,IAAI,wBAAwBC,IAAI,CAACD,QAAQ;QACvC,OAAO;IACT;IAEA,yDAAyD;IACzD,kEAAkE;IAClE,IAAI,iDAAiDC,IAAI,CAACD,QAAQ;QAChE,OAAO;IACT;IAEA,OAAO;AACT;AAMO,SAASE,4BAA4BF,KAAa;IACvD,IAAIG,aAAaH;IAEjB,sEAAsE;IACtEG,aAAaA,WAAWC,OAAO,CAC7B,0BACA,CAAC,EAAE,EAAEN,gBAAgB,GAAG,CAAC;IAG3B,sFAAsF;IACtFK,aAAaA,WAAWC,OAAO,CAAC,sBAAsB,CAAC,GAAG,EAAEN,iBAAiB;IAE7E,OAAOK;AACT;AAUO,SAASE,yBAAyBC,MAAe;IACtD,OAAOA,OAAOC,GAAG,CAAC,CAACC;QACjB,iDAAiD;QACjD,sEAAsE;QACtE,IACE,OAAOA,UAAU,YACjBA,UAAU,QACV,4EAA4E;QAC5E,cAAcA,SACd,+DAA+D;QAC/D,+CAA+C;QAC9CA,CAAAA,MAAMC,QAAQ,KAAK,OAAOD,MAAMC,QAAQ,KAAK,GAAE,KAChD,qEAAqE;QACrE,YAAYD,SACZ,YAAYA,SACZ,+CAA+C;QAC/C,6DAA6D;QAC7DA,MAAME,MAAM,KAAK,MACjBF,MAAMG,MAAM,KAAK,IACjB;YACA,0DAA0D;YAC1D,mFAAmF;YACnF,mFAAmF;YACnF,OAAO;gBACL,GAAGH,KAAK;gBACRE,QAAQ;YACV;QACF;QACA,OAAOF;IACT;AACF;AAaO,SAASI,0BAA0BC,QAAgB;IACxD,oDAAoD;IACpD,4DAA4D;IAC5D,wEAAwE;IACxE,OAAOA,SAAST,OAAO,CAAC,IAAIU,OAAO,CAAC,GAAG,EAAEhB,iBAAiB,EAAE,MAAM;AACpE;AAMO,SAASiB,yBACdC,MAA2B;IAE3B,MAAMC,UAA+B,CAAC;IAEtC,KAAK,MAAM,CAACC,KAAKC,MAAM,IAAIC,OAAOC,OAAO,CAACL,QAAS;QACjD,IAAI,OAAOG,UAAU,UAAU;YAC7B,sEAAsE;YACtEF,OAAO,CAACC,IAAI,GAAGC,MAAMf,OAAO,CAAC,IAAIU,OAAO,CAAC,CAAC,EAAEhB,iBAAiB,GAAG;QAClE,OAAO,IAAIwB,MAAMC,OAAO,CAACJ,QAAQ;YAC/B,yDAAyD;YACzDF,OAAO,CAACC,IAAI,GAAGC,MAAMZ,GAAG,CAAC,CAACiB,OACxB,OAAOA,SAAS,WACZA,KAAKpB,OAAO,CAAC,IAAIU,OAAO,CAAC,CAAC,EAAEhB,iBAAiB,GAAG,MAChD0B;QAER,OAAO;YACLP,OAAO,CAACC,IAAI,GAAGC;QACjB;IACF;IAEA,OAAOF;AACT","ignoreList":[0]}}, + {"offset": {"line": 6709, "column": 0}, "map": {"version":3,"sources":["file:///Users/freedak/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next%4016.0.3_react-dom%4019.2.0_react%4019.2.0__react%4019.2.0/node_modules/next/src/shared/lib/router/utils/route-match-utils.ts"],"sourcesContent":["/**\n * Client-safe utilities for route matching that don't import server-side\n * utilities to avoid bundling issues with Turbopack\n */\n\nimport type {\n Key,\n TokensToRegexpOptions,\n ParseOptions,\n TokensToFunctionOptions,\n} from 'next/dist/compiled/path-to-regexp'\nimport {\n pathToRegexp,\n compile,\n regexpToFunction,\n} from 'next/dist/compiled/path-to-regexp'\nimport {\n hasAdjacentParameterIssues,\n normalizeAdjacentParameters,\n stripParameterSeparators,\n stripNormalizedSeparators,\n} from '../../../../lib/route-pattern-normalizer'\n\n/**\n * Client-safe wrapper around pathToRegexp that handles path-to-regexp 6.3.0+ validation errors.\n * This includes both \"Can not repeat without prefix/suffix\" and \"Must have text between parameters\" errors.\n */\nexport function safePathToRegexp(\n route: string | RegExp | Array,\n keys?: Key[],\n options?: TokensToRegexpOptions & ParseOptions\n): RegExp {\n if (typeof route !== 'string') {\n return pathToRegexp(route, keys, options)\n }\n\n // Check if normalization is needed and cache the result\n const needsNormalization = hasAdjacentParameterIssues(route)\n const routeToUse = needsNormalization\n ? normalizeAdjacentParameters(route)\n : route\n\n try {\n return pathToRegexp(routeToUse, keys, options)\n } catch (error) {\n // Only try normalization if we haven't already normalized\n if (!needsNormalization) {\n try {\n const normalizedRoute = normalizeAdjacentParameters(route)\n return pathToRegexp(normalizedRoute, keys, options)\n } catch (retryError) {\n // If that doesn't work, fall back to original error\n throw error\n }\n }\n throw error\n }\n}\n\n/**\n * Client-safe wrapper around compile that handles path-to-regexp 6.3.0+ validation errors.\n * No server-side error reporting to avoid bundling issues.\n * When normalization is applied, the returned compiler function automatically strips\n * the internal separator from the output URL.\n */\nexport function safeCompile(\n route: string,\n options?: TokensToFunctionOptions & ParseOptions\n) {\n // Check if normalization is needed and cache the result\n const needsNormalization = hasAdjacentParameterIssues(route)\n const routeToUse = needsNormalization\n ? normalizeAdjacentParameters(route)\n : route\n\n try {\n const compiler = compile(routeToUse, options)\n\n // If we normalized the route, wrap the compiler to strip separators from output\n // The normalization inserts _NEXTSEP_ as a literal string in the pattern to satisfy\n // path-to-regexp validation, but we don't want it in the final compiled URL\n if (needsNormalization) {\n return (params: any) => {\n return stripNormalizedSeparators(compiler(params))\n }\n }\n\n return compiler\n } catch (error) {\n // Only try normalization if we haven't already normalized\n if (!needsNormalization) {\n try {\n const normalizedRoute = normalizeAdjacentParameters(route)\n const compiler = compile(normalizedRoute, options)\n\n // Wrap the compiler to strip separators from output\n return (params: any) => {\n return stripNormalizedSeparators(compiler(params))\n }\n } catch (retryError) {\n // If that doesn't work, fall back to original error\n throw error\n }\n }\n throw error\n }\n}\n\n/**\n * Client-safe wrapper around regexpToFunction that automatically cleans parameters.\n */\nexport function safeRegexpToFunction<\n T extends Record = Record,\n>(regexp: RegExp, keys?: Key[]): (pathname: string) => { params: T } | false {\n const originalMatcher = regexpToFunction(regexp, keys || [])\n\n return (pathname: string) => {\n const result = originalMatcher(pathname)\n if (!result) return false\n\n // Clean parameters before returning\n return {\n ...result,\n params: stripParameterSeparators(result.params as any) as T,\n }\n }\n}\n\n/**\n * Safe wrapper for route matcher functions that automatically cleans parameters.\n * This is client-safe and doesn't import path-to-regexp.\n */\nexport function safeRouteMatcher>(\n matcherFn: (pathname: string) => false | T\n): (pathname: string) => false | T {\n return (pathname: string) => {\n const result = matcherFn(pathname)\n if (!result) return false\n\n // Clean parameters before returning\n return stripParameterSeparators(result) as T\n }\n}\n"],"names":["pathToRegexp","compile","regexpToFunction","hasAdjacentParameterIssues","normalizeAdjacentParameters","stripParameterSeparators","stripNormalizedSeparators","safePathToRegexp","route","keys","options","needsNormalization","routeToUse","error","normalizedRoute","retryError","safeCompile","compiler","params","safeRegexpToFunction","regexp","originalMatcher","pathname","result","safeRouteMatcher","matcherFn"],"mappings":"AAAA;;;CAGC;;;;;;;;;;AAQD,SACEA,YAAY,EACZC,OAAO,EACPC,gBAAgB,QACX,oCAAmC;AAC1C,SACEC,0BAA0B,EAC1BC,2BAA2B,EAC3BC,wBAAwB,EACxBC,yBAAyB,QACpB,2CAA0C;;;AAM1C,SAASC,iBACdC,KAA+C,EAC/CC,IAAY,EACZC,OAA8C;IAE9C,IAAI,OAAOF,UAAU,UAAU;QAC7B,WAAOR,+WAAAA,EAAaQ,OAAOC,MAAMC;IACnC;IAEA,wDAAwD;IACxD,MAAMC,yBAAqBR,gYAAAA,EAA2BK;IACtD,MAAMI,aAAaD,yBACfP,iYAAAA,EAA4BI,SAC5BA;IAEJ,IAAI;QACF,WAAOR,+WAAAA,EAAaY,YAAYH,MAAMC;IACxC,EAAE,OAAOG,OAAO;QACd,0DAA0D;QAC1D,IAAI,CAACF,oBAAoB;YACvB,IAAI;gBACF,MAAMG,sBAAkBV,iYAAAA,EAA4BI;gBACpD,WAAOR,+WAAAA,EAAac,iBAAiBL,MAAMC;YAC7C,EAAE,OAAOK,YAAY;gBACnB,oDAAoD;gBACpD,MAAMF;YACR;QACF;QACA,MAAMA;IACR;AACF;AAQO,SAASG,YACdR,KAAa,EACbE,OAAgD;IAEhD,wDAAwD;IACxD,MAAMC,yBAAqBR,gYAAAA,EAA2BK;IACtD,MAAMI,aAAaD,yBACfP,iYAAAA,EAA4BI,SAC5BA;IAEJ,IAAI;QACF,MAAMS,eAAWhB,0WAAAA,EAAQW,YAAYF;QAErC,gFAAgF;QAChF,oFAAoF;QACpF,4EAA4E;QAC5E,IAAIC,oBAAoB;YACtB,OAAO,CAACO;gBACN,WAAOZ,+XAAAA,EAA0BW,SAASC;YAC5C;QACF;QAEA,OAAOD;IACT,EAAE,OAAOJ,OAAO;QACd,0DAA0D;QAC1D,IAAI,CAACF,oBAAoB;YACvB,IAAI;gBACF,MAAMG,sBAAkBV,iYAAAA,EAA4BI;gBACpD,MAAMS,eAAWhB,0WAAAA,EAAQa,iBAAiBJ;gBAE1C,oDAAoD;gBACpD,OAAO,CAACQ;oBACN,WAAOZ,+XAAAA,EAA0BW,SAASC;gBAC5C;YACF,EAAE,OAAOH,YAAY;gBACnB,oDAAoD;gBACpD,MAAMF;YACR;QACF;QACA,MAAMA;IACR;AACF;AAKO,SAASM,qBAEdC,MAAc,EAAEX,IAAY;IAC5B,MAAMY,sBAAkBnB,mXAAAA,EAAoBkB,QAAQX,QAAQ,EAAE;IAE9D,OAAO,CAACa;QACN,MAAMC,SAASF,gBAAgBC;QAC/B,IAAI,CAACC,QAAQ,OAAO;QAEpB,oCAAoC;QACpC,OAAO;YACL,GAAGA,MAAM;YACTL,YAAQb,8XAAAA,EAAyBkB,OAAOL,MAAM;QAChD;IACF;AACF;AAMO,SAASM,iBACdC,SAA0C;IAE1C,OAAO,CAACH;QACN,MAAMC,SAASE,UAAUH;QACzB,IAAI,CAACC,QAAQ,OAAO;QAEpB,oCAAoC;QACpC,WAAOlB,8XAAAA,EAAyBkB;IAClC;AACF","ignoreList":[0]}}, + {"offset": {"line": 6806, "column": 0}, "map": {"version":3,"sources":["file:///Users/freedak/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next%4016.0.3_react-dom%4019.2.0_react%4019.2.0__react%4019.2.0/node_modules/next/src/shared/lib/router/utils/route-matcher.ts"],"sourcesContent":["import type { Group } from './route-regex'\nimport { DecodeError } from '../../utils'\nimport type { Params } from '../../../../server/request/params'\nimport { safeRouteMatcher } from './route-match-utils'\n\nexport interface RouteMatchFn {\n (pathname: string): false | Params\n}\n\ntype RouteMatcherOptions = {\n // We only use the exec method of the RegExp object. This helps us avoid using\n // type assertions that the passed in properties are of the correct type.\n re: Pick\n groups: Record\n}\n\nexport function getRouteMatcher({\n re,\n groups,\n}: RouteMatcherOptions): RouteMatchFn {\n const rawMatcher = (pathname: string) => {\n const routeMatch = re.exec(pathname)\n if (!routeMatch) return false\n\n const decode = (param: string) => {\n try {\n return decodeURIComponent(param)\n } catch {\n throw new DecodeError('failed to decode param')\n }\n }\n\n const params: Params = {}\n for (const [key, group] of Object.entries(groups)) {\n const match = routeMatch[group.pos]\n if (match !== undefined) {\n if (group.repeat) {\n params[key] = match.split('/').map((entry) => decode(entry))\n } else {\n params[key] = decode(match)\n }\n }\n }\n\n return params\n }\n\n // Wrap with safe matcher to handle parameter cleaning\n return safeRouteMatcher(rawMatcher)\n}\n"],"names":["DecodeError","safeRouteMatcher","getRouteMatcher","re","groups","rawMatcher","pathname","routeMatch","exec","decode","param","decodeURIComponent","params","key","group","Object","entries","match","pos","undefined","repeat","split","map","entry"],"mappings":";;;;AACA,SAASA,WAAW,QAAQ,cAAa;AAEzC,SAASC,gBAAgB,QAAQ,sBAAqB;;;AAa/C,SAASC,gBAAgB,EAC9BC,EAAE,EACFC,MAAM,EACc;IACpB,MAAMC,aAAa,CAACC;QAClB,MAAMC,aAAaJ,GAAGK,IAAI,CAACF;QAC3B,IAAI,CAACC,YAAY,OAAO;QAExB,MAAME,SAAS,CAACC;YACd,IAAI;gBACF,OAAOC,mBAAmBD;YAC5B,EAAE,OAAM;gBACN,MAAM,OAAA,cAAyC,CAAzC,IAAIV,kWAAAA,CAAY,2BAAhB,qBAAA;2BAAA;gCAAA;kCAAA;gBAAwC;YAChD;QACF;QAEA,MAAMY,SAAiB,CAAC;QACxB,KAAK,MAAM,CAACC,KAAKC,MAAM,IAAIC,OAAOC,OAAO,CAACZ,QAAS;YACjD,MAAMa,QAAQV,UAAU,CAACO,MAAMI,GAAG,CAAC;YACnC,IAAID,UAAUE,WAAW;gBACvB,IAAIL,MAAMM,MAAM,EAAE;oBAChBR,MAAM,CAACC,IAAI,GAAGI,MAAMI,KAAK,CAAC,KAAKC,GAAG,CAAC,CAACC,QAAUd,OAAOc;gBACvD,OAAO;oBACLX,MAAM,CAACC,IAAI,GAAGJ,OAAOQ;gBACvB;YACF;QACF;QAEA,OAAOL;IACT;IAEA,sDAAsD;IACtD,WAAOX,4YAAAA,EAAiBI;AAC1B","ignoreList":[0]}}, + {"offset": {"line": 6849, "column": 0}, "map": {"version":3,"sources":["file:///Users/freedak/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next%4016.0.3_react-dom%4019.2.0_react%4019.2.0__react%4019.2.0/node_modules/next/src/shared/lib/escape-regexp.ts"],"sourcesContent":["// regexp is based on https://github.com/sindresorhus/escape-string-regexp\nconst reHasRegExp = /[|\\\\{}()[\\]^$+*?.-]/\nconst reReplaceRegExp = /[|\\\\{}()[\\]^$+*?.-]/g\n\nexport function escapeStringRegexp(str: string) {\n // see also: https://github.com/lodash/lodash/blob/2da024c3b4f9947a48517639de7560457cd4ec6c/escapeRegExp.js#L23\n if (reHasRegExp.test(str)) {\n return str.replace(reReplaceRegExp, '\\\\$&')\n }\n return str\n}\n"],"names":["reHasRegExp","reReplaceRegExp","escapeStringRegexp","str","test","replace"],"mappings":"AAAA,0EAA0E;;;;;AAC1E,MAAMA,cAAc;AACpB,MAAMC,kBAAkB;AAEjB,SAASC,mBAAmBC,GAAW;IAC5C,+GAA+G;IAC/G,IAAIH,YAAYI,IAAI,CAACD,MAAM;QACzB,OAAOA,IAAIE,OAAO,CAACJ,iBAAiB;IACtC;IACA,OAAOE;AACT","ignoreList":[0]}}, + {"offset": {"line": 6867, "column": 0}, "map": {"version":3,"sources":["file:///Users/freedak/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next%4016.0.3_react-dom%4019.2.0_react%4019.2.0__react%4019.2.0/node_modules/next/src/shared/lib/router/utils/parse-loader-tree.ts"],"sourcesContent":["import { DEFAULT_SEGMENT_KEY } from '../../segment'\nimport type { LoaderTree } from '../../../../server/lib/app-dir-module'\n\nexport function parseLoaderTree(tree: LoaderTree) {\n const [segment, parallelRoutes, modules] = tree\n const { layout, template } = modules\n let { page } = modules\n // a __DEFAULT__ segment means that this route didn't match any of the\n // segments in the route, so we should use the default page\n page = segment === DEFAULT_SEGMENT_KEY ? modules.defaultPage : page\n\n const conventionPath = layout?.[1] || template?.[1] || page?.[1]\n\n return {\n page,\n segment,\n modules,\n /* it can be either layout / template / page */\n conventionPath,\n parallelRoutes,\n }\n}\n"],"names":["DEFAULT_SEGMENT_KEY","parseLoaderTree","tree","segment","parallelRoutes","modules","layout","template","page","defaultPage","conventionPath"],"mappings":";;;;AAAA,SAASA,mBAAmB,QAAQ,gBAAe;;AAG5C,SAASC,gBAAgBC,IAAgB;IAC9C,MAAM,CAACC,SAASC,gBAAgBC,QAAQ,GAAGH;IAC3C,MAAM,EAAEI,MAAM,EAAEC,QAAQ,EAAE,GAAGF;IAC7B,IAAI,EAAEG,IAAI,EAAE,GAAGH;IACf,sEAAsE;IACtE,2DAA2D;IAC3DG,OAAOL,YAAYH,4WAAAA,GAAsBK,QAAQI,WAAW,GAAGD;IAE/D,MAAME,iBAAiBJ,QAAQ,CAAC,EAAE,IAAIC,UAAU,CAAC,EAAE,IAAIC,MAAM,CAAC,EAAE;IAEhE,OAAO;QACLA;QACAL;QACAE;QACA,6CAA6C,GAC7CK;QACAN;IACF;AACF","ignoreList":[0]}}, + {"offset": {"line": 6893, "column": 0}, "map": {"version":3,"sources":["file:///Users/freedak/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next%4016.0.3_react-dom%4019.2.0_react%4019.2.0__react%4019.2.0/node_modules/next/src/shared/lib/router/utils/get-dynamic-param.ts"],"sourcesContent":["import type { DynamicParam } from '../../../../server/app-render/app-render'\nimport type { LoaderTree } from '../../../../server/lib/app-dir-module'\nimport type { OpaqueFallbackRouteParams } from '../../../../server/request/fallback-params'\nimport type { Params } from '../../../../server/request/params'\nimport type { DynamicParamTypesShort } from '../../app-router-types'\nimport { InvariantError } from '../../invariant-error'\nimport { parseLoaderTree } from './parse-loader-tree'\nimport { getSegmentParam } from './get-segment-param'\n\n/**\n * Gets the value of a param from the params object. This correctly handles the\n * case where the param is a fallback route param and encodes the resulting\n * value.\n *\n * @param interpolatedParams - The params object.\n * @param segmentKey - The key of the segment.\n * @param fallbackRouteParams - The fallback route params.\n * @returns The value of the param.\n */\nfunction getParamValue(\n interpolatedParams: Params,\n segmentKey: string,\n fallbackRouteParams: OpaqueFallbackRouteParams | null\n) {\n let value = interpolatedParams[segmentKey]\n\n if (fallbackRouteParams?.has(segmentKey)) {\n // We know that the fallback route params has the segment key because we\n // checked that above.\n const [searchValue] = fallbackRouteParams.get(segmentKey)!\n value = searchValue\n } else if (Array.isArray(value)) {\n value = value.map((i) => encodeURIComponent(i))\n } else if (typeof value === 'string') {\n value = encodeURIComponent(value)\n }\n\n return value\n}\n\nexport function interpolateParallelRouteParams(\n loaderTree: LoaderTree,\n params: Params,\n pagePath: string,\n fallbackRouteParams: OpaqueFallbackRouteParams | null\n) {\n const interpolated = structuredClone(params)\n\n // Stack-based traversal with depth tracking\n const stack: Array<{ tree: LoaderTree; depth: number }> = [\n { tree: loaderTree, depth: 0 },\n ]\n\n // Derive value from pagePath based on depth and parameter type\n const pathSegments = pagePath.split('/').slice(1) // Remove first empty string\n\n while (stack.length > 0) {\n const { tree, depth } = stack.pop()!\n const { segment, parallelRoutes } = parseLoaderTree(tree)\n\n // Check if current segment contains a parameter\n const segmentParam = getSegmentParam(segment)\n if (\n segmentParam &&\n !interpolated.hasOwnProperty(segmentParam.param) &&\n // If the param is in the fallback route params, we don't need to\n // interpolate it because it's already marked as being unknown.\n !fallbackRouteParams?.has(segmentParam.param)\n ) {\n switch (segmentParam.type) {\n case 'catchall':\n case 'optional-catchall':\n case 'catchall-intercepted-(..)(..)':\n case 'catchall-intercepted-(.)':\n case 'catchall-intercepted-(..)':\n case 'catchall-intercepted-(...)':\n // For catchall parameters, take all remaining segments from this depth\n const remainingSegments = pathSegments.slice(depth)\n\n // Process each segment to handle any dynamic params\n const processedSegments = remainingSegments\n .flatMap((pathSegment) => {\n const param = getSegmentParam(pathSegment)\n // If the segment matches a param, return the param value otherwise,\n // it's a static segment, so just return that. We don't use the\n // `getParamValue` function here because we don't want the values to\n // be encoded, that's handled on get by the `getDynamicParam`\n // function.\n return param ? interpolated[param.param] : pathSegment\n })\n .filter((s) => s !== undefined)\n\n if (processedSegments.length > 0) {\n interpolated[segmentParam.param] = processedSegments\n }\n break\n case 'dynamic':\n case 'dynamic-intercepted-(..)(..)':\n case 'dynamic-intercepted-(.)':\n case 'dynamic-intercepted-(..)':\n case 'dynamic-intercepted-(...)':\n // For regular dynamic parameters, take the segment at this depth\n if (depth < pathSegments.length) {\n const pathSegment = pathSegments[depth]\n const param = getSegmentParam(pathSegment)\n\n interpolated[segmentParam.param] = param\n ? interpolated[param.param]\n : pathSegment\n }\n break\n default:\n segmentParam.type satisfies never\n }\n }\n\n // Calculate next depth - increment if this is not a route group and not empty\n let nextDepth = depth\n const isRouteGroup = segment.startsWith('(') && segment.endsWith(')')\n if (!isRouteGroup && segment !== '') {\n nextDepth++\n }\n\n // Add all parallel routes to the stack for processing\n for (const route of Object.values(parallelRoutes)) {\n stack.push({ tree: route, depth: nextDepth })\n }\n }\n\n return interpolated\n}\n\n/**\n *\n * Shared logic on client and server for creating a dynamic param value.\n *\n * This code needs to be shared with the client so it can extract dynamic route\n * params from the URL without a server request.\n *\n * Because everything in this module is sent to the client, we should aim to\n * keep this code as simple as possible. The special case handling for catchall\n * and optional is, alas, unfortunate.\n */\nexport function getDynamicParam(\n interpolatedParams: Params,\n segmentKey: string,\n dynamicParamType: DynamicParamTypesShort,\n fallbackRouteParams: OpaqueFallbackRouteParams | null\n): DynamicParam {\n let value: string | string[] | undefined = getParamValue(\n interpolatedParams,\n segmentKey,\n fallbackRouteParams\n )\n\n // handle the case where an optional catchall does not have a value,\n // e.g. `/dashboard/[[...slug]]` when requesting `/dashboard`\n if (!value || value.length === 0) {\n if (dynamicParamType === 'oc') {\n return {\n param: segmentKey,\n value: null,\n type: dynamicParamType,\n treeSegment: [segmentKey, '', dynamicParamType],\n }\n }\n\n throw new InvariantError(\n `Missing value for segment key: \"${segmentKey}\" with dynamic param type: ${dynamicParamType}`\n )\n }\n\n return {\n param: segmentKey,\n // The value that is passed to user code.\n value,\n // The value that is rendered in the router tree.\n treeSegment: [\n segmentKey,\n Array.isArray(value) ? value.join('/') : value,\n dynamicParamType,\n ],\n type: dynamicParamType,\n }\n}\n\n/**\n * Regular expression pattern used to match route parameters.\n * Matches both single parameters and parameter groups.\n * Examples:\n * - `[[...slug]]` matches parameter group with key 'slug', repeat: true, optional: true\n * - `[...slug]` matches parameter group with key 'slug', repeat: true, optional: false\n * - `[[foo]]` matches parameter with key 'foo', repeat: false, optional: true\n * - `[bar]` matches parameter with key 'bar', repeat: false, optional: false\n */\nexport const PARAMETER_PATTERN = /^([^[]*)\\[((?:\\[[^\\]]*\\])|[^\\]]+)\\](.*)$/\n\n/**\n * Parses a given parameter from a route to a data structure that can be used\n * to generate the parametrized route.\n * Examples:\n * - `[[...slug]]` -> `{ key: 'slug', repeat: true, optional: true }`\n * - `[...slug]` -> `{ key: 'slug', repeat: true, optional: false }`\n * - `[[foo]]` -> `{ key: 'foo', repeat: false, optional: true }`\n * - `[bar]` -> `{ key: 'bar', repeat: false, optional: false }`\n * - `fizz` -> `{ key: 'fizz', repeat: false, optional: false }`\n * @param param - The parameter to parse.\n * @returns The parsed parameter as a data structure.\n */\nexport function parseParameter(param: string) {\n const match = param.match(PARAMETER_PATTERN)\n\n if (!match) {\n return parseMatchedParameter(param)\n }\n\n return parseMatchedParameter(match[2])\n}\n\n/**\n * Parses a matched parameter from the PARAMETER_PATTERN regex to a data structure that can be used\n * to generate the parametrized route.\n * Examples:\n * - `[...slug]` -> `{ key: 'slug', repeat: true, optional: true }`\n * - `...slug` -> `{ key: 'slug', repeat: true, optional: false }`\n * - `[foo]` -> `{ key: 'foo', repeat: false, optional: true }`\n * - `bar` -> `{ key: 'bar', repeat: false, optional: false }`\n * @param param - The matched parameter to parse.\n * @returns The parsed parameter as a data structure.\n */\nexport function parseMatchedParameter(param: string) {\n const optional = param.startsWith('[') && param.endsWith(']')\n if (optional) {\n param = param.slice(1, -1)\n }\n const repeat = param.startsWith('...')\n if (repeat) {\n param = param.slice(3)\n }\n return { key: param, repeat, optional }\n}\n"],"names":["InvariantError","parseLoaderTree","getSegmentParam","getParamValue","interpolatedParams","segmentKey","fallbackRouteParams","value","has","searchValue","get","Array","isArray","map","i","encodeURIComponent","interpolateParallelRouteParams","loaderTree","params","pagePath","interpolated","structuredClone","stack","tree","depth","pathSegments","split","slice","length","pop","segment","parallelRoutes","segmentParam","hasOwnProperty","param","type","remainingSegments","processedSegments","flatMap","pathSegment","filter","s","undefined","nextDepth","isRouteGroup","startsWith","endsWith","route","Object","values","push","getDynamicParam","dynamicParamType","treeSegment","join","PARAMETER_PATTERN","parseParameter","match","parseMatchedParameter","optional","repeat","key"],"mappings":"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","ignoreList":[0]}}, + {"offset": {"line": 7072, "column": 0}, "map": {"version":3,"sources":["file:///Users/freedak/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next%4016.0.3_react-dom%4019.2.0_react%4019.2.0__react%4019.2.0/node_modules/next/src/shared/lib/router/utils/route-regex.ts"],"sourcesContent":["import {\n NEXT_INTERCEPTION_MARKER_PREFIX,\n NEXT_QUERY_PARAM_PREFIX,\n} from '../../../../lib/constants'\nimport { INTERCEPTION_ROUTE_MARKERS } from './interception-routes'\nimport { escapeStringRegexp } from '../../escape-regexp'\nimport { removeTrailingSlash } from './remove-trailing-slash'\nimport { PARAMETER_PATTERN, parseMatchedParameter } from './get-dynamic-param'\n\nexport interface Group {\n pos: number\n repeat: boolean\n optional: boolean\n}\n\nexport interface RouteRegex {\n groups: { [groupName: string]: Group }\n re: RegExp\n}\n\nexport type RegexReference = {\n names: Record\n intercepted: Record\n}\n\ntype GetNamedRouteRegexOptions = {\n /**\n * Whether to prefix the route keys with the NEXT_INTERCEPTION_MARKER_PREFIX\n * or NEXT_QUERY_PARAM_PREFIX. This is only relevant when creating the\n * routes-manifest during the build.\n */\n prefixRouteKeys: boolean\n\n /**\n * Whether to include the suffix in the route regex. This means that when you\n * have something like `/[...slug].json` the `.json` part will be included\n * in the regex, yielding `/(.*).json` as the regex.\n */\n includeSuffix?: boolean\n\n /**\n * Whether to include the prefix in the route regex. This means that when you\n * have something like `/[...slug].json` the `/` part will be included\n * in the regex, yielding `^/(.*).json$` as the regex.\n *\n * Note that interception markers will already be included without the need\n */\n includePrefix?: boolean\n\n /**\n * Whether to exclude the optional trailing slash from the route regex.\n */\n excludeOptionalTrailingSlash?: boolean\n\n /**\n * Whether to backtrack duplicate keys. This is only relevant when creating\n * the routes-manifest during the build.\n */\n backreferenceDuplicateKeys?: boolean\n\n /**\n * If provided, this will be used as the reference for the dynamic parameter\n * keys instead of generating them in context. This is currently only used for\n * interception routes.\n */\n reference?: RegexReference\n}\n\ntype GetRouteRegexOptions = {\n /**\n * Whether to include extra parts in the route regex. This means that when you\n * have something like `/[...slug].json` the `.json` part will be included\n * in the regex, yielding `/(.*).json` as the regex.\n */\n includeSuffix?: boolean\n\n /**\n * Whether to include the prefix in the route regex. This means that when you\n * have something like `/[...slug].json` the `/` part will be included\n * in the regex, yielding `^/(.*).json$` as the regex.\n *\n * Note that interception markers will already be included without the need\n * of adding this option.\n */\n includePrefix?: boolean\n\n /**\n * Whether to exclude the optional trailing slash from the route regex.\n */\n excludeOptionalTrailingSlash?: boolean\n}\n\nfunction getParametrizedRoute(\n route: string,\n includeSuffix: boolean,\n includePrefix: boolean\n) {\n const groups: { [groupName: string]: Group } = {}\n let groupIndex = 1\n\n const segments: string[] = []\n for (const segment of removeTrailingSlash(route).slice(1).split('/')) {\n const markerMatch = INTERCEPTION_ROUTE_MARKERS.find((m) =>\n segment.startsWith(m)\n )\n const paramMatches = segment.match(PARAMETER_PATTERN) // Check for parameters\n\n if (markerMatch && paramMatches && paramMatches[2]) {\n const { key, optional, repeat } = parseMatchedParameter(paramMatches[2])\n groups[key] = { pos: groupIndex++, repeat, optional }\n segments.push(`/${escapeStringRegexp(markerMatch)}([^/]+?)`)\n } else if (paramMatches && paramMatches[2]) {\n const { key, repeat, optional } = parseMatchedParameter(paramMatches[2])\n groups[key] = { pos: groupIndex++, repeat, optional }\n\n if (includePrefix && paramMatches[1]) {\n segments.push(`/${escapeStringRegexp(paramMatches[1])}`)\n }\n\n let s = repeat ? (optional ? '(?:/(.+?))?' : '/(.+?)') : '/([^/]+?)'\n\n // Remove the leading slash if includePrefix already added it.\n if (includePrefix && paramMatches[1]) {\n s = s.substring(1)\n }\n\n segments.push(s)\n } else {\n segments.push(`/${escapeStringRegexp(segment)}`)\n }\n\n // If there's a suffix, add it to the segments if it's enabled.\n if (includeSuffix && paramMatches && paramMatches[3]) {\n segments.push(escapeStringRegexp(paramMatches[3]))\n }\n }\n\n return {\n parameterizedRoute: segments.join(''),\n groups,\n }\n}\n\n/**\n * From a normalized route this function generates a regular expression and\n * a corresponding groups object intended to be used to store matching groups\n * from the regular expression.\n */\nexport function getRouteRegex(\n normalizedRoute: string,\n {\n includeSuffix = false,\n includePrefix = false,\n excludeOptionalTrailingSlash = false,\n }: GetRouteRegexOptions = {}\n): RouteRegex {\n const { parameterizedRoute, groups } = getParametrizedRoute(\n normalizedRoute,\n includeSuffix,\n includePrefix\n )\n\n let re = parameterizedRoute\n if (!excludeOptionalTrailingSlash) {\n re += '(?:/)?'\n }\n\n return {\n re: new RegExp(`^${re}$`),\n groups: groups,\n }\n}\n\n/**\n * Builds a function to generate a minimal routeKey using only a-z and minimal\n * number of characters.\n */\nfunction buildGetSafeRouteKey() {\n let i = 0\n\n return () => {\n let routeKey = ''\n let j = ++i\n while (j > 0) {\n routeKey += String.fromCharCode(97 + ((j - 1) % 26))\n j = Math.floor((j - 1) / 26)\n }\n return routeKey\n }\n}\n\nfunction getSafeKeyFromSegment({\n interceptionMarker,\n getSafeRouteKey,\n segment,\n routeKeys,\n keyPrefix,\n backreferenceDuplicateKeys,\n}: {\n interceptionMarker?: string\n getSafeRouteKey: () => string\n segment: string\n routeKeys: Record\n keyPrefix?: string\n backreferenceDuplicateKeys: boolean\n}) {\n const { key, optional, repeat } = parseMatchedParameter(segment)\n\n // replace any non-word characters since they can break\n // the named regex\n let cleanedKey = key.replace(/\\W/g, '')\n\n if (keyPrefix) {\n cleanedKey = `${keyPrefix}${cleanedKey}`\n }\n let invalidKey = false\n\n // check if the key is still invalid and fallback to using a known\n // safe key\n if (cleanedKey.length === 0 || cleanedKey.length > 30) {\n invalidKey = true\n }\n if (!isNaN(parseInt(cleanedKey.slice(0, 1)))) {\n invalidKey = true\n }\n\n if (invalidKey) {\n cleanedKey = getSafeRouteKey()\n }\n\n const duplicateKey = cleanedKey in routeKeys\n\n if (keyPrefix) {\n routeKeys[cleanedKey] = `${keyPrefix}${key}`\n } else {\n routeKeys[cleanedKey] = key\n }\n\n // if the segment has an interception marker, make sure that's part of the regex pattern\n // this is to ensure that the route with the interception marker doesn't incorrectly match\n // the non-intercepted route (ie /app/(.)[username] should not match /app/[username])\n const interceptionPrefix = interceptionMarker\n ? escapeStringRegexp(interceptionMarker)\n : ''\n\n let pattern: string\n if (duplicateKey && backreferenceDuplicateKeys) {\n // Use a backreference to the key to ensure that the key is the same value\n // in each of the placeholders.\n pattern = `\\\\k<${cleanedKey}>`\n } else if (repeat) {\n pattern = `(?<${cleanedKey}>.+?)`\n } else {\n pattern = `(?<${cleanedKey}>[^/]+?)`\n }\n\n return {\n key,\n pattern: optional\n ? `(?:/${interceptionPrefix}${pattern})?`\n : `/${interceptionPrefix}${pattern}`,\n cleanedKey: cleanedKey,\n optional,\n repeat,\n }\n}\n\nfunction getNamedParametrizedRoute(\n route: string,\n prefixRouteKeys: boolean,\n includeSuffix: boolean,\n includePrefix: boolean,\n backreferenceDuplicateKeys: boolean,\n reference: RegexReference = { names: {}, intercepted: {} }\n) {\n const getSafeRouteKey = buildGetSafeRouteKey()\n const routeKeys: { [named: string]: string } = {}\n\n const segments: string[] = []\n const inverseParts: string[] = []\n\n // Ensure we don't mutate the original reference object.\n reference = structuredClone(reference)\n\n for (const segment of removeTrailingSlash(route).slice(1).split('/')) {\n const hasInterceptionMarker = INTERCEPTION_ROUTE_MARKERS.some((m) =>\n segment.startsWith(m)\n )\n\n const paramMatches = segment.match(PARAMETER_PATTERN) // Check for parameters\n\n const interceptionMarker = hasInterceptionMarker\n ? paramMatches?.[1]\n : undefined\n\n let keyPrefix: string | undefined\n if (interceptionMarker && paramMatches?.[2]) {\n keyPrefix = prefixRouteKeys ? NEXT_INTERCEPTION_MARKER_PREFIX : undefined\n reference.intercepted[paramMatches[2]] = interceptionMarker\n } else if (paramMatches?.[2] && reference.intercepted[paramMatches[2]]) {\n keyPrefix = prefixRouteKeys ? NEXT_INTERCEPTION_MARKER_PREFIX : undefined\n } else {\n keyPrefix = prefixRouteKeys ? NEXT_QUERY_PARAM_PREFIX : undefined\n }\n\n if (interceptionMarker && paramMatches && paramMatches[2]) {\n // If there's an interception marker, add it to the segments.\n const { key, pattern, cleanedKey, repeat, optional } =\n getSafeKeyFromSegment({\n getSafeRouteKey,\n interceptionMarker,\n segment: paramMatches[2],\n routeKeys,\n keyPrefix,\n backreferenceDuplicateKeys,\n })\n\n segments.push(pattern)\n inverseParts.push(\n `/${paramMatches[1]}:${reference.names[key] ?? cleanedKey}${repeat ? (optional ? '*' : '+') : ''}`\n )\n reference.names[key] ??= cleanedKey\n } else if (paramMatches && paramMatches[2]) {\n // If there's a prefix, add it to the segments if it's enabled.\n if (includePrefix && paramMatches[1]) {\n segments.push(`/${escapeStringRegexp(paramMatches[1])}`)\n inverseParts.push(`/${paramMatches[1]}`)\n }\n\n const { key, pattern, cleanedKey, repeat, optional } =\n getSafeKeyFromSegment({\n getSafeRouteKey,\n segment: paramMatches[2],\n routeKeys,\n keyPrefix,\n backreferenceDuplicateKeys,\n })\n\n // Remove the leading slash if includePrefix already added it.\n let s = pattern\n if (includePrefix && paramMatches[1]) {\n s = s.substring(1)\n }\n\n segments.push(s)\n inverseParts.push(\n `/:${reference.names[key] ?? cleanedKey}${repeat ? (optional ? '*' : '+') : ''}`\n )\n reference.names[key] ??= cleanedKey\n } else {\n segments.push(`/${escapeStringRegexp(segment)}`)\n inverseParts.push(`/${segment}`)\n }\n\n // If there's a suffix, add it to the segments if it's enabled.\n if (includeSuffix && paramMatches && paramMatches[3]) {\n segments.push(escapeStringRegexp(paramMatches[3]))\n inverseParts.push(paramMatches[3])\n }\n }\n\n return {\n namedParameterizedRoute: segments.join(''),\n routeKeys,\n pathToRegexpPattern: inverseParts.join(''),\n reference,\n }\n}\n\n/**\n * This function extends `getRouteRegex` generating also a named regexp where\n * each group is named along with a routeKeys object that indexes the assigned\n * named group with its corresponding key. When the routeKeys need to be\n * prefixed to uniquely identify internally the \"prefixRouteKey\" arg should\n * be \"true\" currently this is only the case when creating the routes-manifest\n * during the build\n */\nexport function getNamedRouteRegex(\n normalizedRoute: string,\n options: GetNamedRouteRegexOptions\n) {\n const result = getNamedParametrizedRoute(\n normalizedRoute,\n options.prefixRouteKeys,\n options.includeSuffix ?? false,\n options.includePrefix ?? false,\n options.backreferenceDuplicateKeys ?? false,\n options.reference\n )\n\n let namedRegex = result.namedParameterizedRoute\n if (!options.excludeOptionalTrailingSlash) {\n namedRegex += '(?:/)?'\n }\n\n return {\n ...getRouteRegex(normalizedRoute, options),\n namedRegex: `^${namedRegex}$`,\n routeKeys: result.routeKeys,\n pathToRegexpPattern: result.pathToRegexpPattern,\n reference: result.reference,\n }\n}\n\n/**\n * Generates a named regexp.\n * This is intended to be using for build time only.\n */\nexport function getNamedMiddlewareRegex(\n normalizedRoute: string,\n options: {\n catchAll?: boolean\n }\n) {\n const { parameterizedRoute } = getParametrizedRoute(\n normalizedRoute,\n false,\n false\n )\n const { catchAll = true } = options\n if (parameterizedRoute === '/') {\n let catchAllRegex = catchAll ? '.*' : ''\n return {\n namedRegex: `^/${catchAllRegex}$`,\n }\n }\n\n const { namedParameterizedRoute } = getNamedParametrizedRoute(\n normalizedRoute,\n false,\n false,\n false,\n false,\n undefined\n )\n let catchAllGroupedRegex = catchAll ? '(?:(/.*)?)' : ''\n return {\n namedRegex: `^${namedParameterizedRoute}${catchAllGroupedRegex}$`,\n }\n}\n"],"names":["NEXT_INTERCEPTION_MARKER_PREFIX","NEXT_QUERY_PARAM_PREFIX","INTERCEPTION_ROUTE_MARKERS","escapeStringRegexp","removeTrailingSlash","PARAMETER_PATTERN","parseMatchedParameter","getParametrizedRoute","route","includeSuffix","includePrefix","groups","groupIndex","segments","segment","slice","split","markerMatch","find","m","startsWith","paramMatches","match","key","optional","repeat","pos","push","s","substring","parameterizedRoute","join","getRouteRegex","normalizedRoute","excludeOptionalTrailingSlash","re","RegExp","buildGetSafeRouteKey","i","routeKey","j","String","fromCharCode","Math","floor","getSafeKeyFromSegment","interceptionMarker","getSafeRouteKey","routeKeys","keyPrefix","backreferenceDuplicateKeys","cleanedKey","replace","invalidKey","length","isNaN","parseInt","duplicateKey","interceptionPrefix","pattern","getNamedParametrizedRoute","prefixRouteKeys","reference","names","intercepted","inverseParts","structuredClone","hasInterceptionMarker","some","undefined","namedParameterizedRoute","pathToRegexpPattern","getNamedRouteRegex","options","result","namedRegex","getNamedMiddlewareRegex","catchAll","catchAllRegex","catchAllGroupedRegex"],"mappings":"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","ignoreList":[0]}}, + {"offset": {"line": 7317, "column": 0}, "map": {"version":3,"sources":["file:///Users/freedak/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next%4016.0.3_react-dom%4019.2.0_react%4019.2.0__react%4019.2.0/node_modules/next/src/server/app-render/get-short-dynamic-param-type.tsx"],"sourcesContent":["import type {\n DynamicParamTypes,\n DynamicParamTypesShort,\n} from '../../shared/lib/app-router-types'\n\nexport const dynamicParamTypes: Record<\n DynamicParamTypes,\n DynamicParamTypesShort\n> = {\n catchall: 'c',\n 'catchall-intercepted-(..)(..)': 'ci(..)(..)',\n 'catchall-intercepted-(.)': 'ci(.)',\n 'catchall-intercepted-(..)': 'ci(..)',\n 'catchall-intercepted-(...)': 'ci(...)',\n 'optional-catchall': 'oc',\n dynamic: 'd',\n 'dynamic-intercepted-(..)(..)': 'di(..)(..)',\n 'dynamic-intercepted-(.)': 'di(.)',\n 'dynamic-intercepted-(..)': 'di(..)',\n 'dynamic-intercepted-(...)': 'di(...)',\n}\n"],"names":["dynamicParamTypes","catchall","dynamic"],"mappings":";;;;AAKO,MAAMA,oBAGT;IACFC,UAAU;IACV,iCAAiC;IACjC,4BAA4B;IAC5B,6BAA6B;IAC7B,8BAA8B;IAC9B,qBAAqB;IACrBC,SAAS;IACT,gCAAgC;IAChC,2BAA2B;IAC3B,4BAA4B;IAC5B,6BAA6B;AAC/B,EAAC","ignoreList":[0]}}, + {"offset": {"line": 7338, "column": 0}, "map": {"version":3,"sources":["file:///Users/freedak/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next%4016.0.3_react-dom%4019.2.0_react%4019.2.0__react%4019.2.0/node_modules/next/src/server/request/fallback-params.ts"],"sourcesContent":["import { collectFallbackRouteParams } from '../../build/segment-config/app/app-segments'\nimport type { FallbackRouteParam } from '../../build/static-paths/types'\nimport type { DynamicParamTypesShort } from '../../shared/lib/app-router-types'\nimport { InvariantError } from '../../shared/lib/invariant-error'\nimport { getRouteMatcher } from '../../shared/lib/router/utils/route-matcher'\nimport { getRouteRegex } from '../../shared/lib/router/utils/route-regex'\nimport { dynamicParamTypes } from '../app-render/get-short-dynamic-param-type'\nimport type AppPageRouteModule from '../route-modules/app-page/module'\n\nfunction getParamKeys(page: string) {\n const pattern = getRouteRegex(page)\n const matcher = getRouteMatcher(pattern)\n\n // Get the default list of allowed params.\n return Object.keys(matcher(page))\n}\n\nexport type OpaqueFallbackRouteParamValue = [\n /**\n * The search value of the fallback route param. This is the opaque key\n * that will be used to replace the dynamic param in the postponed state.\n */\n searchValue: string,\n\n /**\n * The dynamic param type of the fallback route param. This is the type of\n * the dynamic param that will be used to replace the dynamic param in the\n * postponed state.\n */\n dynamicParamType: DynamicParamTypesShort,\n]\n\n/**\n * An opaque fallback route params object. This is used to store the fallback\n * route params in a way that is not easily accessible to the client.\n */\nexport type OpaqueFallbackRouteParams = ReadonlyMap<\n string,\n OpaqueFallbackRouteParamValue\n>\n\n/**\n * The entries of the opaque fallback route params object.\n *\n * @param key the key of the fallback route param\n * @param value the value of the fallback route param\n */\nexport type OpaqueFallbackRouteParamEntries =\n ReturnType extends MapIterator<\n [infer K, infer V]\n >\n ? ReadonlyArray<[K, V]>\n : never\n\n/**\n * Creates an opaque fallback route params object from the fallback route params.\n *\n * @param fallbackRouteParams the fallback route params\n * @returns the opaque fallback route params\n */\nexport function createOpaqueFallbackRouteParams(\n fallbackRouteParams: readonly FallbackRouteParam[]\n): OpaqueFallbackRouteParams | null {\n // If there are no fallback route params, we can return early.\n if (fallbackRouteParams.length === 0) return null\n\n // As we're creating unique keys for each of the dynamic route params, we only\n // need to generate a unique ID once per request because each of the keys will\n // be also be unique.\n const uniqueID = Math.random().toString(16).slice(2)\n\n const keys = new Map()\n\n // Generate a unique key for the fallback route param, if this key is found\n // in the static output, it represents a bug in cache components.\n for (const { paramName, paramType } of fallbackRouteParams) {\n keys.set(paramName, [\n `%%drp:${paramName}:${uniqueID}%%`,\n dynamicParamTypes[paramType],\n ])\n }\n\n return keys\n}\n\n/**\n * Gets the fallback route params for a given page. This is an expensive\n * operation because it requires parsing the loader tree to extract the fallback\n * route params.\n *\n * @param page the page\n * @param routeModule the route module\n * @returns the opaque fallback route params\n */\nexport function getFallbackRouteParams(\n page: string,\n routeModule: AppPageRouteModule\n) {\n // First, get the fallback route params based on the provided page.\n const unknownParamKeys = new Set(getParamKeys(page))\n\n // Needed when processing fallback route params for catchall routes in\n // parallel segments, derive from pathname. This is similar to\n // getDynamicParam's pagePath parsing logic.\n const pathSegments = page.split('/').filter(Boolean)\n\n const collected = collectFallbackRouteParams(routeModule)\n\n // Then, we have to get the fallback route params from the segments that are\n // associated with parallel route segments.\n const fallbackRouteParams: FallbackRouteParam[] = []\n for (const fallbackRouteParam of collected) {\n if (fallbackRouteParam.isParallelRouteParam) {\n // Try to see if we can resolve this parameter from the page that was\n // passed in.\n if (unknownParamKeys.has(fallbackRouteParam.paramName)) {\n // The parameter is known, we can skip adding it to the fallback route\n // params.\n continue\n }\n\n if (\n fallbackRouteParam.paramType === 'optional-catchall' ||\n fallbackRouteParam.paramType === 'catchall'\n ) {\n // If there are any fallback route segments then we can't use the\n // pathname to derive the value because it's not complete. We can\n // make this assumption because the routes are always resolved left\n // to right and the catchall is always the last segment, so any\n // route parameters that are unknown will always contribute to the\n // pathname and therefore the catchall param too.\n if (\n collected.some(\n (param) =>\n !param.isParallelRouteParam &&\n unknownParamKeys.has(param.paramName)\n )\n ) {\n fallbackRouteParams.push(fallbackRouteParam)\n continue\n }\n\n if (\n pathSegments.length === 0 &&\n fallbackRouteParam.paramType !== 'optional-catchall'\n ) {\n // We shouldn't be able to match a catchall segment without any path\n // segments if it's not an optional catchall.\n throw new InvariantError(\n `Unexpected empty path segments match for a pathname \"${page}\" with param \"${fallbackRouteParam.paramName}\" of type \"${fallbackRouteParam.paramType}\"`\n )\n }\n\n // The path segments are not empty, and the segments didn't contain any\n // unknown params, so we know that this particular fallback route param\n // route param is not actually unknown, and is known. We can skip adding\n // it to the fallback route params.\n } else {\n // This is some other type of route param that shouldn't get resolved\n // statically.\n throw new InvariantError(\n `Unexpected match for a pathname \"${page}\" with a param \"${fallbackRouteParam.paramName}\" of type \"${fallbackRouteParam.paramType}\"`\n )\n }\n } else if (unknownParamKeys.has(fallbackRouteParam.paramName)) {\n // As this is a non-parallel route segment, and it exists in the unknown\n // param keys, we know it's a fallback route param.\n fallbackRouteParams.push(fallbackRouteParam)\n }\n }\n\n return createOpaqueFallbackRouteParams(fallbackRouteParams)\n}\n"],"names":["collectFallbackRouteParams","InvariantError","getRouteMatcher","getRouteRegex","dynamicParamTypes","getParamKeys","page","pattern","matcher","Object","keys","createOpaqueFallbackRouteParams","fallbackRouteParams","length","uniqueID","Math","random","toString","slice","Map","paramName","paramType","set","getFallbackRouteParams","routeModule","unknownParamKeys","Set","pathSegments","split","filter","Boolean","collected","fallbackRouteParam","isParallelRouteParam","has","some","param","push"],"mappings":"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","ignoreList":[0]}}, + {"offset": {"line": 7441, "column": 0}, "map": {"version":3,"sources":["file:///Users/freedak/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next%4016.0.3_react-dom%4019.2.0_react%4019.2.0__react%4019.2.0/node_modules/next/src/server/app-render/encryption-utils.ts"],"sourcesContent":["import type { ActionManifest } from '../../build/webpack/plugins/flight-client-entry-plugin'\nimport type {\n ClientReferenceManifest,\n ClientReferenceManifestForRsc,\n} from '../../build/webpack/plugins/flight-manifest-plugin'\nimport type { DeepReadonly } from '../../shared/lib/deep-readonly'\nimport { InvariantError } from '../../shared/lib/invariant-error'\nimport { normalizeAppPath } from '../../shared/lib/router/utils/app-paths'\nimport { workAsyncStorage } from './work-async-storage.external'\n\nlet __next_loaded_action_key: CryptoKey\n\nexport function arrayBufferToString(\n buffer: ArrayBuffer | Uint8Array\n) {\n const bytes = new Uint8Array(buffer)\n const len = bytes.byteLength\n\n // @anonrig: V8 has a limit of 65535 arguments in a function.\n // For len < 65535, this is faster.\n // https://github.com/vercel/next.js/pull/56377#pullrequestreview-1656181623\n if (len < 65535) {\n return String.fromCharCode.apply(null, bytes as unknown as number[])\n }\n\n let binary = ''\n for (let i = 0; i < len; i++) {\n binary += String.fromCharCode(bytes[i])\n }\n return binary\n}\n\nexport function stringToUint8Array(binary: string) {\n const len = binary.length\n const arr = new Uint8Array(len)\n\n for (let i = 0; i < len; i++) {\n arr[i] = binary.charCodeAt(i)\n }\n\n return arr\n}\n\nexport function encrypt(\n key: CryptoKey,\n iv: Uint8Array,\n data: Uint8Array\n) {\n return crypto.subtle.encrypt(\n {\n name: 'AES-GCM',\n iv,\n },\n key,\n data\n )\n}\n\nexport function decrypt(\n key: CryptoKey,\n iv: Uint8Array,\n data: Uint8Array\n) {\n return crypto.subtle.decrypt(\n {\n name: 'AES-GCM',\n iv,\n },\n key,\n data\n )\n}\n\n// This is a global singleton that is used to encode/decode the action bound args from\n// the closure. This can't be using a AsyncLocalStorage as it might happen on the module\n// level. Since the client reference manifest won't be mutated, let's use a global singleton\n// to keep it.\nconst SERVER_ACTION_MANIFESTS_SINGLETON = Symbol.for(\n 'next.server.action-manifests'\n)\n\nexport function setReferenceManifestsSingleton({\n page,\n clientReferenceManifest,\n serverActionsManifest,\n serverModuleMap,\n}: {\n page: string\n clientReferenceManifest: DeepReadonly\n serverActionsManifest: DeepReadonly\n serverModuleMap: {\n [id: string]: {\n id: string\n chunks: string[]\n name: string\n }\n }\n}) {\n // @ts-expect-error\n const clientReferenceManifestsPerPage = globalThis[\n SERVER_ACTION_MANIFESTS_SINGLETON\n ]?.clientReferenceManifestsPerPage as\n | undefined\n | DeepReadonly>\n\n // @ts-expect-error\n globalThis[SERVER_ACTION_MANIFESTS_SINGLETON] = {\n clientReferenceManifestsPerPage: {\n ...clientReferenceManifestsPerPage,\n [normalizeAppPath(page)]: clientReferenceManifest,\n },\n serverActionsManifest,\n serverModuleMap,\n }\n}\n\nexport function getServerModuleMap() {\n const serverActionsManifestSingleton = (globalThis as any)[\n SERVER_ACTION_MANIFESTS_SINGLETON\n ] as {\n serverModuleMap: {\n [id: string]: {\n id: string\n chunks: string[]\n name: string\n }\n }\n }\n\n if (!serverActionsManifestSingleton) {\n throw new InvariantError('Missing manifest for Server Actions.')\n }\n\n return serverActionsManifestSingleton.serverModuleMap\n}\n\nexport function getClientReferenceManifestForRsc(): DeepReadonly {\n const serverActionsManifestSingleton = (globalThis as any)[\n SERVER_ACTION_MANIFESTS_SINGLETON\n ] as {\n clientReferenceManifestsPerPage: DeepReadonly<\n Record\n >\n }\n\n if (!serverActionsManifestSingleton) {\n throw new InvariantError('Missing manifest for Server Actions.')\n }\n\n const { clientReferenceManifestsPerPage } = serverActionsManifestSingleton\n const workStore = workAsyncStorage.getStore()\n\n if (!workStore) {\n // If there's no work store defined, we can assume that a client reference\n // manifest is needed during module evaluation, e.g. to create a server\n // action using a higher-order function. This might also use client\n // components which need to be serialized by Flight, and therefore client\n // references need to be resolvable. To make this work, we're returning a\n // merged manifest across all pages. This is fine as long as the module IDs\n // are not page specific, which they are not for Webpack. TODO: Fix this in\n // Turbopack.\n return mergeClientReferenceManifests(clientReferenceManifestsPerPage)\n }\n\n const clientReferenceManifest =\n clientReferenceManifestsPerPage[workStore.route]\n\n if (!clientReferenceManifest) {\n throw new InvariantError(\n `Missing Client Reference Manifest for ${workStore.route}.`\n )\n }\n\n return clientReferenceManifest\n}\n\nexport async function getActionEncryptionKey() {\n if (__next_loaded_action_key) {\n return __next_loaded_action_key\n }\n\n const serverActionsManifestSingleton = (globalThis as any)[\n SERVER_ACTION_MANIFESTS_SINGLETON\n ] as {\n serverActionsManifest: DeepReadonly\n }\n\n if (!serverActionsManifestSingleton) {\n throw new InvariantError('Missing manifest for Server Actions.')\n }\n\n const rawKey =\n process.env.NEXT_SERVER_ACTIONS_ENCRYPTION_KEY ||\n serverActionsManifestSingleton.serverActionsManifest.encryptionKey\n\n if (rawKey === undefined) {\n throw new InvariantError('Missing encryption key for Server Actions')\n }\n\n __next_loaded_action_key = await crypto.subtle.importKey(\n 'raw',\n stringToUint8Array(atob(rawKey)),\n 'AES-GCM',\n true,\n ['encrypt', 'decrypt']\n )\n\n return __next_loaded_action_key\n}\n\nfunction mergeClientReferenceManifests(\n clientReferenceManifestsPerPage: DeepReadonly<\n Record\n >\n): ClientReferenceManifestForRsc {\n const clientReferenceManifests = Object.values(\n clientReferenceManifestsPerPage as Record\n )\n\n const mergedClientReferenceManifest: ClientReferenceManifestForRsc = {\n clientModules: {},\n edgeRscModuleMapping: {},\n rscModuleMapping: {},\n }\n\n for (const clientReferenceManifest of clientReferenceManifests) {\n mergedClientReferenceManifest.clientModules = {\n ...mergedClientReferenceManifest.clientModules,\n ...clientReferenceManifest.clientModules,\n }\n mergedClientReferenceManifest.edgeRscModuleMapping = {\n ...mergedClientReferenceManifest.edgeRscModuleMapping,\n ...clientReferenceManifest.edgeRscModuleMapping,\n }\n mergedClientReferenceManifest.rscModuleMapping = {\n ...mergedClientReferenceManifest.rscModuleMapping,\n ...clientReferenceManifest.rscModuleMapping,\n }\n }\n\n return mergedClientReferenceManifest\n}\n"],"names":["InvariantError","normalizeAppPath","workAsyncStorage","__next_loaded_action_key","arrayBufferToString","buffer","bytes","Uint8Array","len","byteLength","String","fromCharCode","apply","binary","i","stringToUint8Array","length","arr","charCodeAt","encrypt","key","iv","data","crypto","subtle","name","decrypt","SERVER_ACTION_MANIFESTS_SINGLETON","Symbol","for","setReferenceManifestsSingleton","page","clientReferenceManifest","serverActionsManifest","serverModuleMap","globalThis","clientReferenceManifestsPerPage","getServerModuleMap","serverActionsManifestSingleton","getClientReferenceManifestForRsc","workStore","getStore","mergeClientReferenceManifests","route","getActionEncryptionKey","rawKey","process","env","NEXT_SERVER_ACTIONS_ENCRYPTION_KEY","encryptionKey","undefined","importKey","atob","clientReferenceManifests","Object","values","mergedClientReferenceManifest","clientModules","edgeRscModuleMapping","rscModuleMapping"],"mappings":"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","ignoreList":[0]}}, + {"offset": {"line": 7616, "column": 0}, "map": {"version":3,"sources":["file:///Users/freedak/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next%4016.0.3_react-dom%4019.2.0_react%4019.2.0__react%4019.2.0/node_modules/next/src/shared/lib/router/utils/html-bots.ts"],"sourcesContent":["// This regex contains the bots that we need to do a blocking render for and can't safely stream the response\n// due to how they parse the DOM. For example, they might explicitly check for metadata in the `head` tag, so we can't stream metadata tags after the `head` was sent.\n// Note: The pattern [\\w-]+-Google captures all Google crawlers with \"-Google\" suffix (e.g., Mediapartners-Google, AdsBot-Google, Storebot-Google)\n// as well as crawlers starting with \"Google-\" (e.g., Google-PageRenderer, Google-InspectionTool)\nexport const HTML_LIMITED_BOT_UA_RE =\n /[\\w-]+-Google|Google-[\\w-]+|Chrome-Lighthouse|Slurp|DuckDuckBot|baiduspider|yandex|sogou|bitlybot|tumblr|vkShare|quora link preview|redditbot|ia_archiver|Bingbot|BingPreview|applebot|facebookexternalhit|facebookcatalog|Twitterbot|LinkedInBot|Slackbot|Discordbot|WhatsApp|SkypeUriPreview|Yeti|googleweblight/i\n"],"names":["HTML_LIMITED_BOT_UA_RE"],"mappings":"AAAA,6GAA6G;AAC7G,sKAAsK;AACtK,kJAAkJ;AAClJ,iGAAiG;;;;;AAC1F,MAAMA,yBACX,sTAAqT","ignoreList":[0]}}, + {"offset": {"line": 7629, "column": 0}, "map": {"version":3,"sources":["file:///Users/freedak/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next%4016.0.3_react-dom%4019.2.0_react%4019.2.0__react%4019.2.0/node_modules/next/src/shared/lib/router/utils/is-bot.ts"],"sourcesContent":["import { HTML_LIMITED_BOT_UA_RE } from './html-bots'\n\n// Bot crawler that will spin up a headless browser and execute JS.\n// Only the main Googlebot search crawler executes JavaScript, not other Google crawlers.\n// x-ref: https://developers.google.com/search/docs/crawling-indexing/google-common-crawlers\n// This regex specifically matches \"Googlebot\" but NOT \"Mediapartners-Google\", \"AdsBot-Google\", etc.\nconst HEADLESS_BROWSER_BOT_UA_RE = /Googlebot(?!-)|Googlebot$/i\n\nexport const HTML_LIMITED_BOT_UA_RE_STRING = HTML_LIMITED_BOT_UA_RE.source\n\nexport { HTML_LIMITED_BOT_UA_RE }\n\nfunction isDomBotUA(userAgent: string) {\n return HEADLESS_BROWSER_BOT_UA_RE.test(userAgent)\n}\n\nfunction isHtmlLimitedBotUA(userAgent: string) {\n return HTML_LIMITED_BOT_UA_RE.test(userAgent)\n}\n\nexport function isBot(userAgent: string): boolean {\n return isDomBotUA(userAgent) || isHtmlLimitedBotUA(userAgent)\n}\n\nexport function getBotType(userAgent: string): 'dom' | 'html' | undefined {\n if (isDomBotUA(userAgent)) {\n return 'dom'\n }\n if (isHtmlLimitedBotUA(userAgent)) {\n return 'html'\n }\n return undefined\n}\n"],"names":["HTML_LIMITED_BOT_UA_RE","HEADLESS_BROWSER_BOT_UA_RE","HTML_LIMITED_BOT_UA_RE_STRING","source","isDomBotUA","userAgent","test","isHtmlLimitedBotUA","isBot","getBotType","undefined"],"mappings":";;;;;;;;AAAA,SAASA,sBAAsB,QAAQ,cAAa;;AAEpD,mEAAmE;AACnE,yFAAyF;AACzF,4FAA4F;AAC5F,oGAAoG;AACpG,MAAMC,6BAA6B;AAE5B,MAAMC,gCAAgCF,uYAAAA,CAAuBG,MAAM,CAAA;;AAI1E,SAASC,WAAWC,SAAiB;IACnC,OAAOJ,2BAA2BK,IAAI,CAACD;AACzC;AAEA,SAASE,mBAAmBF,SAAiB;IAC3C,OAAOL,uYAAAA,CAAuBM,IAAI,CAACD;AACrC;AAEO,SAASG,MAAMH,SAAiB;IACrC,OAAOD,WAAWC,cAAcE,mBAAmBF;AACrD;AAEO,SAASI,WAAWJ,SAAiB;IAC1C,IAAID,WAAWC,YAAY;QACzB,OAAO;IACT;IACA,IAAIE,mBAAmBF,YAAY;QACjC,OAAO;IACT;IACA,OAAOK;AACT","ignoreList":[0]}}, + {"offset": {"line": 7668, "column": 0}, "map": {"version":3,"sources":["file:///Users/freedak/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next%4016.0.3_react-dom%4019.2.0_react%4019.2.0__react%4019.2.0/node_modules/next/src/server/lib/streaming-metadata.ts"],"sourcesContent":["import {\n getBotType,\n HTML_LIMITED_BOT_UA_RE_STRING,\n} from '../../shared/lib/router/utils/is-bot'\nimport type { BaseNextRequest } from '../base-http'\n\nexport function shouldServeStreamingMetadata(\n userAgent: string,\n htmlLimitedBots: string | undefined\n): boolean {\n const blockingMetadataUARegex = new RegExp(\n htmlLimitedBots || HTML_LIMITED_BOT_UA_RE_STRING,\n 'i'\n )\n // Only block metadata for HTML-limited bots\n if (userAgent && blockingMetadataUARegex.test(userAgent)) {\n return false\n }\n return true\n}\n\n// When the request UA is a html-limited bot, we should do a dynamic render.\n// In this case, postpone state is not sent.\nexport function isHtmlBotRequest(req: {\n headers: BaseNextRequest['headers']\n}): boolean {\n const ua = req.headers['user-agent'] || ''\n const botType = getBotType(ua)\n\n return botType === 'html'\n}\n"],"names":["getBotType","HTML_LIMITED_BOT_UA_RE_STRING","shouldServeStreamingMetadata","userAgent","htmlLimitedBots","blockingMetadataUARegex","RegExp","test","isHtmlBotRequest","req","ua","headers","botType"],"mappings":";;;;;;AAAA,SACEA,UAAU,EACVC,6BAA6B,QACxB,uCAAsC;;AAGtC,SAASC,6BACdC,SAAiB,EACjBC,eAAmC;IAEnC,MAAMC,0BAA0B,IAAIC,OAClCF,mBAAmBH,2ZAAAA,EACnB;IAEF,4CAA4C;IAC5C,IAAIE,aAAaE,wBAAwBE,IAAI,CAACJ,YAAY;QACxD,OAAO;IACT;IACA,OAAO;AACT;AAIO,SAASK,iBAAiBC,GAEhC;IACC,MAAMC,KAAKD,IAAIE,OAAO,CAAC,aAAa,IAAI;IACxC,MAAMC,cAAUZ,wYAAAA,EAAWU;IAE3B,OAAOE,YAAY;AACrB","ignoreList":[0]}}, + {"offset": {"line": 7693, "column": 0}, "map": {"version":3,"sources":["file:///Users/freedak/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next%4016.0.3_react-dom%4019.2.0_react%4019.2.0__react%4019.2.0/node_modules/next/src/server/app-render/action-utils.ts"],"sourcesContent":["import type { ActionManifest } from '../../build/webpack/plugins/flight-client-entry-plugin'\nimport { normalizeAppPath } from '../../shared/lib/router/utils/app-paths'\nimport { pathHasPrefix } from '../../shared/lib/router/utils/path-has-prefix'\nimport { removePathPrefix } from '../../shared/lib/router/utils/remove-path-prefix'\nimport { workAsyncStorage } from './work-async-storage.external'\n\n// This function creates a Flight-acceptable server module map proxy from our\n// Server Reference Manifest similar to our client module map.\n// This is because our manifest contains a lot of internal Next.js data that\n// are relevant to the runtime, workers, etc. that React doesn't need to know.\nexport function createServerModuleMap({\n serverActionsManifest,\n}: {\n serverActionsManifest: ActionManifest\n}) {\n return new Proxy(\n {},\n {\n get: (_, id: string) => {\n const workers =\n serverActionsManifest[\n process.env.NEXT_RUNTIME === 'edge' ? 'edge' : 'node'\n ]?.[id]?.workers\n\n if (!workers) {\n return undefined\n }\n\n const workStore = workAsyncStorage.getStore()\n\n let workerEntry:\n | { moduleId: string | number; async: boolean }\n | undefined\n\n if (workStore) {\n workerEntry = workers[normalizeWorkerPageName(workStore.page)]\n } else {\n // If there's no work store defined, we can assume that a server\n // module map is needed during module evaluation, e.g. to create a\n // server action using a higher-order function. Therefore it should be\n // safe to return any entry from the manifest that matches the action\n // ID. They all refer to the same module ID, which must also exist in\n // the current page bundle. TODO: This is currently not guaranteed in\n // Turbopack, and needs to be fixed.\n workerEntry = Object.values(workers).at(0)\n }\n\n if (!workerEntry) {\n return undefined\n }\n\n const { moduleId, async } = workerEntry\n\n return { id: moduleId, name: id, chunks: [], async }\n },\n }\n )\n}\n\n/**\n * Checks if the requested action has a worker for the current page.\n * If not, it returns the first worker that has a handler for the action.\n */\nexport function selectWorkerForForwarding(\n actionId: string,\n pageName: string,\n serverActionsManifest: ActionManifest\n) {\n const workers =\n serverActionsManifest[\n process.env.NEXT_RUNTIME === 'edge' ? 'edge' : 'node'\n ][actionId]?.workers\n const workerName = normalizeWorkerPageName(pageName)\n\n // no workers, nothing to forward to\n if (!workers) return\n\n // if there is a worker for this page, no need to forward it.\n if (workers[workerName]) {\n return\n }\n\n // otherwise, grab the first worker that has a handler for this action id\n return denormalizeWorkerPageName(Object.keys(workers)[0])\n}\n\n/**\n * The flight entry loader keys actions by bundlePath.\n * bundlePath corresponds with the relative path (including 'app') to the page entrypoint.\n */\nfunction normalizeWorkerPageName(pageName: string) {\n if (pathHasPrefix(pageName, 'app')) {\n return pageName\n }\n\n return 'app' + pageName\n}\n\n/**\n * Converts a bundlePath (relative path to the entrypoint) to a routable page name\n */\nfunction denormalizeWorkerPageName(bundlePath: string) {\n return normalizeAppPath(removePathPrefix(bundlePath, 'app'))\n}\n"],"names":["normalizeAppPath","pathHasPrefix","removePathPrefix","workAsyncStorage","createServerModuleMap","serverActionsManifest","Proxy","get","_","id","workers","process","env","NEXT_RUNTIME","undefined","workStore","getStore","workerEntry","normalizeWorkerPageName","page","Object","values","at","moduleId","async","name","chunks","selectWorkerForForwarding","actionId","pageName","workerName","denormalizeWorkerPageName","keys","bundlePath"],"mappings":";;;;;;AACA,SAASA,gBAAgB,QAAQ,0CAAyC;AAC1E,SAASC,aAAa,QAAQ,gDAA+C;AAC7E,SAASC,gBAAgB,QAAQ,mDAAkD;AACnF,SAASC,gBAAgB,QAAQ,gCAA+B;;;;;AAMzD,SAASC,sBAAsB,EACpCC,qBAAqB,EAGtB;IACC,OAAO,IAAIC,MACT,CAAC,GACD;QACEC,KAAK,CAACC,GAAGC;gBAELJ,4BAAAA;YADF,MAAMK,UAAAA,CACJL,0BAAAA,qBAAqB,CACnBM,QAAQC,GAAG,CAACC,YAAY,KAAK,SAAS,0BAAS,OAChD,KAAA,OAAA,KAAA,IAAA,CAFDR,6BAAAA,uBAEG,CAACI,GAAG,KAAA,OAAA,KAAA,IAFPJ,2BAESK,OAAO;YAElB,IAAI,CAACA,SAAS;gBACZ,OAAOI;YACT;YAEA,MAAMC,YAAYZ,uRAAAA,CAAiBa,QAAQ;YAE3C,IAAIC;YAIJ,IAAIF,WAAW;gBACbE,cAAcP,OAAO,CAACQ,wBAAwBH,UAAUI,IAAI,EAAE;YAChE,OAAO;gBACL,gEAAgE;gBAChE,kEAAkE;gBAClE,sEAAsE;gBACtE,qEAAqE;gBACrE,qEAAqE;gBACrE,qEAAqE;gBACrE,oCAAoC;gBACpCF,cAAcG,OAAOC,MAAM,CAACX,SAASY,EAAE,CAAC;YAC1C;YAEA,IAAI,CAACL,aAAa;gBAChB,OAAOH;YACT;YAEA,MAAM,EAAES,QAAQ,EAAEC,KAAK,EAAE,GAAGP;YAE5B,OAAO;gBAAER,IAAIc;gBAAUE,MAAMhB;gBAAIiB,QAAQ,EAAE;gBAAEF;YAAM;QACrD;IACF;AAEJ;AAMO,SAASG,0BACdC,QAAgB,EAChBC,QAAgB,EAChBxB,qBAAqC;QAGnCA;IADF,MAAMK,UAAAA,CACJL,mCAAAA,qBAAqB,CACnBM,QAAQC,GAAG,CAACC,YAAY,KAAK,SAAS,0BAAS,OAChD,CAACe,SAAS,KAAA,OAAA,KAAA,IAFXvB,iCAEaK,OAAO;IACtB,MAAMoB,aAAaZ,wBAAwBW;IAE3C,oCAAoC;IACpC,IAAI,CAACnB,SAAS;IAEd,6DAA6D;IAC7D,IAAIA,OAAO,CAACoB,WAAW,EAAE;QACvB;IACF;IAEA,yEAAyE;IACzE,OAAOC,0BAA0BX,OAAOY,IAAI,CAACtB,QAAQ,CAAC,EAAE;AAC1D;AAEA;;;CAGC,GACD,SAASQ,wBAAwBW,QAAgB;IAC/C,QAAI5B,uYAAAA,EAAc4B,UAAU,QAAQ;QAClC,OAAOA;IACT;IAEA,OAAO,QAAQA;AACjB;AAEA;;CAEC,GACD,SAASE,0BAA0BE,UAAkB;IACnD,WAAOjC,iYAAAA,MAAiBE,6YAAAA,EAAiB+B,YAAY;AACvD","ignoreList":[0]}}, + {"offset": {"line": 7773, "column": 0}, "map": {"version":3,"sources":["file:///Users/freedak/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next%4016.0.3_react-dom%4019.2.0_react%4019.2.0__react%4019.2.0/node_modules/next/src/server/lib/server-action-request-meta.ts"],"sourcesContent":["import type { IncomingMessage } from 'http'\nimport type { BaseNextRequest } from '../base-http'\nimport type { NextRequest } from '../web/exports'\nimport { ACTION_HEADER } from '../../client/components/app-router-headers'\n\nexport function getServerActionRequestMetadata(\n req: IncomingMessage | BaseNextRequest | NextRequest\n): {\n actionId: string | null\n isURLEncodedAction: boolean\n isMultipartAction: boolean\n isFetchAction: boolean\n isPossibleServerAction: boolean\n} {\n let actionId: string | null\n let contentType: string | null\n\n if (req.headers instanceof Headers) {\n actionId = req.headers.get(ACTION_HEADER) ?? null\n contentType = req.headers.get('content-type')\n } else {\n actionId = (req.headers[ACTION_HEADER] as string) ?? null\n contentType = req.headers['content-type'] ?? null\n }\n\n const isURLEncodedAction = Boolean(\n req.method === 'POST' && contentType === 'application/x-www-form-urlencoded'\n )\n const isMultipartAction = Boolean(\n req.method === 'POST' && contentType?.startsWith('multipart/form-data')\n )\n const isFetchAction = Boolean(\n actionId !== undefined &&\n typeof actionId === 'string' &&\n req.method === 'POST'\n )\n\n const isPossibleServerAction = Boolean(\n isFetchAction || isURLEncodedAction || isMultipartAction\n )\n\n return {\n actionId,\n isURLEncodedAction,\n isMultipartAction,\n isFetchAction,\n isPossibleServerAction,\n }\n}\n\nexport function getIsPossibleServerAction(\n req: IncomingMessage | BaseNextRequest | NextRequest\n): boolean {\n return getServerActionRequestMetadata(req).isPossibleServerAction\n}\n"],"names":["ACTION_HEADER","getServerActionRequestMetadata","req","actionId","contentType","headers","Headers","get","isURLEncodedAction","Boolean","method","isMultipartAction","startsWith","isFetchAction","undefined","isPossibleServerAction","getIsPossibleServerAction"],"mappings":";;;;;;AAGA,SAASA,aAAa,QAAQ,6CAA4C;;AAEnE,SAASC,+BACdC,GAAoD;IAQpD,IAAIC;IACJ,IAAIC;IAEJ,IAAIF,IAAIG,OAAO,YAAYC,SAAS;QAClCH,WAAWD,IAAIG,OAAO,CAACE,GAAG,CAACP,8XAAAA,KAAkB;QAC7CI,cAAcF,IAAIG,OAAO,CAACE,GAAG,CAAC;IAChC,OAAO;QACLJ,WAAYD,IAAIG,OAAO,CAACL,8XAAAA,CAAc,IAAe;QACrDI,cAAcF,IAAIG,OAAO,CAAC,eAAe,IAAI;IAC/C;IAEA,MAAMG,qBAAqBC,QACzBP,IAAIQ,MAAM,KAAK,UAAUN,gBAAgB;IAE3C,MAAMO,oBAAoBF,QACxBP,IAAIQ,MAAM,KAAK,UAAA,CAAUN,eAAAA,OAAAA,KAAAA,IAAAA,YAAaQ,UAAU,CAAC,sBAAA;IAEnD,MAAMC,gBAAgBJ,QACpBN,aAAaW,aACX,OAAOX,aAAa,YACpBD,IAAIQ,MAAM,KAAK;IAGnB,MAAMK,yBAAyBN,QAC7BI,iBAAiBL,sBAAsBG;IAGzC,OAAO;QACLR;QACAK;QACAG;QACAE;QACAE;IACF;AACF;AAEO,SAASC,0BACdd,GAAoD;IAEpD,OAAOD,+BAA+BC,KAAKa,sBAAsB;AACnE","ignoreList":[0]}}, + {"offset": {"line": 7810, "column": 0}, "map": {"version":3,"sources":["file:///Users/freedak/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next%4016.0.3_react-dom%4019.2.0_react%4019.2.0__react%4019.2.0/node_modules/next/src/lib/fallback.ts"],"sourcesContent":["/**\n * Describes the different fallback modes that a given page can have.\n */\nexport const enum FallbackMode {\n /**\n * A BLOCKING_STATIC_RENDER fallback will block the request until the page is\n * generated. No fallback page will be rendered, and users will have to wait\n * to render the page.\n */\n BLOCKING_STATIC_RENDER = 'BLOCKING_STATIC_RENDER',\n\n /**\n * When set to PRERENDER, a fallback page will be sent to users in place of\n * forcing them to wait for the page to be generated. This allows the user to\n * see a rendered page earlier.\n */\n PRERENDER = 'PRERENDER',\n\n /**\n * When set to NOT_FOUND, pages that are not already prerendered will result\n * in a not found response.\n */\n NOT_FOUND = 'NOT_FOUND',\n}\n\n/**\n * The fallback value returned from the `getStaticPaths` function.\n */\nexport type GetStaticPathsFallback = boolean | 'blocking'\n\n/**\n * Parses the fallback field from the prerender manifest.\n *\n * @param fallbackField The fallback field from the prerender manifest.\n * @returns The fallback mode.\n */\nexport function parseFallbackField(\n fallbackField: string | boolean | null | undefined\n): FallbackMode | undefined {\n if (typeof fallbackField === 'string') {\n return FallbackMode.PRERENDER\n } else if (fallbackField === null) {\n return FallbackMode.BLOCKING_STATIC_RENDER\n } else if (fallbackField === false) {\n return FallbackMode.NOT_FOUND\n } else if (fallbackField === undefined) {\n return undefined\n } else {\n throw new Error(\n `Invalid fallback option: ${fallbackField}. Fallback option must be a string, null, undefined, or false.`\n )\n }\n}\n\nexport function fallbackModeToFallbackField(\n fallback: FallbackMode,\n page: string | undefined\n): string | false | null {\n switch (fallback) {\n case FallbackMode.BLOCKING_STATIC_RENDER:\n return null\n case FallbackMode.NOT_FOUND:\n return false\n case FallbackMode.PRERENDER:\n if (!page) {\n throw new Error(\n `Invariant: expected a page to be provided when fallback mode is \"${fallback}\"`\n )\n }\n\n return page\n default:\n throw new Error(`Invalid fallback mode: ${fallback}`)\n }\n}\n\n/**\n * Parses the fallback from the static paths result.\n *\n * @param result The result from the static paths function.\n * @returns The fallback mode.\n */\nexport function parseStaticPathsResult(\n result: GetStaticPathsFallback\n): FallbackMode {\n if (result === true) {\n return FallbackMode.PRERENDER\n } else if (result === 'blocking') {\n return FallbackMode.BLOCKING_STATIC_RENDER\n } else {\n return FallbackMode.NOT_FOUND\n }\n}\n"],"names":["FallbackMode","parseFallbackField","fallbackField","undefined","Error","fallbackModeToFallbackField","fallback","page","parseStaticPathsResult","result"],"mappings":"AAAA;;CAEC,GACD;;;;;;;;;;AAAO,IAAWA,eAAAA,WAAAA,GAAAA,SAAAA,YAAAA;IAChB;;;;GAIC,GAAA,YAAA,CAAA,yBAAA,GAAA;IAGD;;;;GAIC,GAAA,YAAA,CAAA,YAAA,GAAA;IAGD;;;GAGC,GAAA,YAAA,CAAA,YAAA,GAAA;WAlBeA;MAoBjB;AAaM,SAASC,mBACdC,aAAkD;IAElD,IAAI,OAAOA,kBAAkB,UAAU;QACrC,OAAA;IACF,OAAO,IAAIA,kBAAkB,MAAM;QACjC,OAAA;IACF,OAAO,IAAIA,kBAAkB,OAAO;QAClC,OAAA;IACF,OAAO,IAAIA,kBAAkBC,WAAW;QACtC,OAAOA;IACT,OAAO;QACL,MAAM,OAAA,cAEL,CAFK,IAAIC,MACR,CAAC,yBAAyB,EAAEF,cAAc,8DAA8D,CAAC,GADrG,qBAAA;mBAAA;wBAAA;0BAAA;QAEN;IACF;AACF;AAEO,SAASG,4BACdC,QAAsB,EACtBC,IAAwB;IAExB,OAAQD;QACN,KAAA;YACE,OAAO;QACT,KAAA;YACE,OAAO;QACT,KAAA;YACE,IAAI,CAACC,MAAM;gBACT,MAAM,OAAA,cAEL,CAFK,IAAIH,MACR,CAAC,iEAAiE,EAAEE,SAAS,CAAC,CAAC,GAD3E,qBAAA;2BAAA;gCAAA;kCAAA;gBAEN;YACF;YAEA,OAAOC;QACT;YACE,MAAM,OAAA,cAA+C,CAA/C,IAAIH,MAAM,CAAC,uBAAuB,EAAEE,UAAU,GAA9C,qBAAA;uBAAA;4BAAA;8BAAA;YAA8C;IACxD;AACF;AAQO,SAASE,uBACdC,MAA8B;IAE9B,IAAIA,WAAW,MAAM;QACnB,OAAA;IACF,OAAO,IAAIA,WAAW,YAAY;QAChC,OAAA;IACF,OAAO;QACL,OAAA;IACF;AACF","ignoreList":[0]}}, + {"offset": {"line": 7892, "column": 0}, "map": {"version":3,"sources":["file:///Users/freedak/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next%4016.0.3_react-dom%4019.2.0_react%4019.2.0__react%4019.2.0/node_modules/next/src/server/lib/etag.ts"],"sourcesContent":["/**\n * FNV-1a Hash implementation\n * @author Travis Webb (tjwebb) \n *\n * Ported from https://github.com/tjwebb/fnv-plus/blob/master/index.js\n *\n * Simplified, optimized and add modified for 52 bit, which provides a larger hash space\n * and still making use of Javascript's 53-bit integer space.\n */\nexport const fnv1a52 = (str: string) => {\n const len = str.length\n let i = 0,\n t0 = 0,\n v0 = 0x2325,\n t1 = 0,\n v1 = 0x8422,\n t2 = 0,\n v2 = 0x9ce4,\n t3 = 0,\n v3 = 0xcbf2\n\n while (i < len) {\n v0 ^= str.charCodeAt(i++)\n t0 = v0 * 435\n t1 = v1 * 435\n t2 = v2 * 435\n t3 = v3 * 435\n t2 += v0 << 8\n t3 += v1 << 8\n t1 += t0 >>> 16\n v0 = t0 & 65535\n t2 += t1 >>> 16\n v1 = t1 & 65535\n v3 = (t3 + (t2 >>> 16)) & 65535\n v2 = t2 & 65535\n }\n\n return (\n (v3 & 15) * 281474976710656 +\n v2 * 4294967296 +\n v1 * 65536 +\n (v0 ^ (v3 >> 4))\n )\n}\n\nexport const generateETag = (payload: string, weak = false) => {\n const prefix = weak ? 'W/\"' : '\"'\n return (\n prefix + fnv1a52(payload).toString(36) + payload.length.toString(36) + '\"'\n )\n}\n"],"names":["fnv1a52","str","len","length","i","t0","v0","t1","v1","t2","v2","t3","v3","charCodeAt","generateETag","payload","weak","prefix","toString"],"mappings":"AAAA;;;;;;;;CAQC,GACD;;;;;;AAAO,MAAMA,UAAU,CAACC;IACtB,MAAMC,MAAMD,IAAIE,MAAM;IACtB,IAAIC,IAAI,GACNC,KAAK,GACLC,KAAK,QACLC,KAAK,GACLC,KAAK,QACLC,KAAK,GACLC,KAAK,QACLC,KAAK,GACLC,KAAK;IAEP,MAAOR,IAAIF,IAAK;QACdI,MAAML,IAAIY,UAAU,CAACT;QACrBC,KAAKC,KAAK;QACVC,KAAKC,KAAK;QACVC,KAAKC,KAAK;QACVC,KAAKC,KAAK;QACVH,MAAMH,MAAM;QACZK,MAAMH,MAAM;QACZD,MAAMF,OAAO;QACbC,KAAKD,KAAK;QACVI,MAAMF,OAAO;QACbC,KAAKD,KAAK;QACVK,KAAMD,KAAMF,CAAAA,OAAO,EAAC,IAAM;QAC1BC,KAAKD,KAAK;IACZ;IAEA,OACGG,CAAAA,KAAK,EAAC,IAAK,kBACZF,KAAK,aACLF,KAAK,QACJF,CAAAA,KAAMM,MAAM,CAAC;AAElB,EAAC;AAEM,MAAME,eAAe,CAACC,SAAiBC,OAAO,KAAK;IACxD,MAAMC,SAASD,OAAO,QAAQ;IAC9B,OACEC,SAASjB,QAAQe,SAASG,QAAQ,CAAC,MAAMH,QAAQZ,MAAM,CAACe,QAAQ,CAAC,MAAM;AAE3E,EAAC","ignoreList":[0]}}, + {"offset": {"line": 7933, "column": 0}, "map": {"version":3,"sources":["file:///Users/freedak/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next%4016.0.3_react-dom%4019.2.0_react%4019.2.0__react%4019.2.0/node_modules/next/dist/compiled/fresh/index.js"],"sourcesContent":["(()=>{\"use strict\";var e={695:e=>{\n/*!\n * fresh\n * Copyright(c) 2012 TJ Holowaychuk\n * Copyright(c) 2016-2017 Douglas Christopher Wilson\n * MIT Licensed\n */\nvar r=/(?:^|,)\\s*?no-cache\\s*?(?:,|$)/;e.exports=fresh;function fresh(e,a){var t=e[\"if-modified-since\"];var s=e[\"if-none-match\"];if(!t&&!s){return false}var i=e[\"cache-control\"];if(i&&r.test(i)){return false}if(s&&s!==\"*\"){var f=a[\"etag\"];if(!f){return false}var n=true;var u=parseTokenList(s);for(var _=0;_ {\n if (isResSent(res)) {\n return\n }\n\n if (poweredByHeader && result.contentType === HTML_CONTENT_TYPE_HEADER) {\n res.setHeader('X-Powered-By', 'Next.js')\n }\n\n // If cache control is already set on the response we don't\n // override it to allow users to customize it via next.config\n if (cacheControl && !res.getHeader('Cache-Control')) {\n res.setHeader('Cache-Control', getCacheControlHeader(cacheControl))\n }\n\n const payload = result.isDynamic ? null : result.toUnchunkedString()\n\n if (generateEtags && payload !== null) {\n const etag = generateETag(payload)\n if (sendEtagResponse(req, res, etag)) {\n return\n }\n }\n\n if (!res.getHeader('Content-Type') && result.contentType) {\n res.setHeader('Content-Type', result.contentType)\n }\n\n if (payload) {\n res.setHeader('Content-Length', Buffer.byteLength(payload))\n }\n\n if (req.method === 'HEAD') {\n res.end(null)\n return\n }\n\n if (payload !== null) {\n res.end(payload)\n return\n }\n\n // Pipe the render result to the response after we get a writer for it.\n await result.pipeToNodeResponse(res)\n}\n"],"names":["isResSent","generateETag","fresh","getCacheControlHeader","HTML_CONTENT_TYPE_HEADER","sendEtagResponse","req","res","etag","setHeader","headers","statusCode","end","sendRenderResult","result","generateEtags","poweredByHeader","cacheControl","contentType","getHeader","payload","isDynamic","toUnchunkedString","Buffer","byteLength","method","pipeToNodeResponse"],"mappings":";;;;;;AAIA,SAASA,SAAS,QAAQ,sBAAqB;AAC/C,SAASC,YAAY,QAAQ,aAAY;AACzC,OAAOC,WAAW,2BAA0B;AAC5C,SAASC,qBAAqB,QAAQ,sBAAqB;AAC3D,SAASC,wBAAwB,QAAQ,mBAAkB;;;;;;AAEpD,SAASC,iBACdC,GAAoB,EACpBC,GAAmB,EACnBC,IAAwB;IAExB,IAAIA,MAAM;QACR;;;;;KAKC,GACDD,IAAIE,SAAS,CAAC,QAAQD;IACxB;IAEA,QAAIN,2VAAAA,EAAMI,IAAII,OAAO,EAAE;QAAEF;IAAK,IAAI;QAChCD,IAAII,UAAU,GAAG;QACjBJ,IAAIK,GAAG;QACP,OAAO;IACT;IAEA,OAAO;AACT;AAEO,eAAeC,iBAAiB,EACrCP,GAAG,EACHC,GAAG,EACHO,MAAM,EACNC,aAAa,EACbC,eAAe,EACfC,YAAY,EAQb;IACC,QAAIjB,gWAAAA,EAAUO,MAAM;QAClB;IACF;IAEA,IAAIS,mBAAmBF,OAAOI,WAAW,KAAKd,yWAAAA,EAA0B;QACtEG,IAAIE,SAAS,CAAC,gBAAgB;IAChC;IAEA,2DAA2D;IAC3D,6DAA6D;IAC7D,IAAIQ,gBAAgB,CAACV,IAAIY,SAAS,CAAC,kBAAkB;QACnDZ,IAAIE,SAAS,CAAC,qBAAiBN,uXAAAA,EAAsBc;IACvD;IAEA,MAAMG,UAAUN,OAAOO,SAAS,GAAG,OAAOP,OAAOQ,iBAAiB;IAElE,IAAIP,iBAAiBK,YAAY,MAAM;QACrC,MAAMZ,WAAOP,kWAAAA,EAAamB;QAC1B,IAAIf,iBAAiBC,KAAKC,KAAKC,OAAO;YACpC;QACF;IACF;IAEA,IAAI,CAACD,IAAIY,SAAS,CAAC,mBAAmBL,OAAOI,WAAW,EAAE;QACxDX,IAAIE,SAAS,CAAC,gBAAgBK,OAAOI,WAAW;IAClD;IAEA,IAAIE,SAAS;QACXb,IAAIE,SAAS,CAAC,kBAAkBc,OAAOC,UAAU,CAACJ;IACpD;IAEA,IAAId,IAAImB,MAAM,KAAK,QAAQ;QACzBlB,IAAIK,GAAG,CAAC;QACR;IACF;IAEA,IAAIQ,YAAY,MAAM;QACpBb,IAAIK,GAAG,CAACQ;QACR;IACF;IAEA,uEAAuE;IACvE,MAAMN,OAAOY,kBAAkB,CAACnB;AAClC","ignoreList":[0]}}, + {"offset": {"line": 8151, "column": 0}, "map": {"version":3,"sources":["file:///Users/freedak/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next%4016.0.3_react-dom%4019.2.0_react%4019.2.0__react%4019.2.0/node_modules/next/src/build/templates/app-page.ts"],"sourcesContent":["import type { LoaderTree } from '../../server/lib/app-dir-module'\nimport type { IncomingMessage, ServerResponse } from 'node:http'\n\nimport {\n AppPageRouteModule,\n type AppPageRouteHandlerContext,\n} from '../../server/route-modules/app-page/module.compiled' with { 'turbopack-transition': 'next-ssr' }\n\nimport { RouteKind } from '../../server/route-kind' with { 'turbopack-transition': 'next-server-utility' }\n\nimport { getRevalidateReason } from '../../server/instrumentation/utils'\nimport { getTracer, SpanKind, type Span } from '../../server/lib/trace/tracer'\nimport { addRequestMeta, getRequestMeta } from '../../server/request-meta'\nimport { BaseServerSpan } from '../../server/lib/trace/constants'\nimport { interopDefault } from '../../server/app-render/interop-default'\nimport { stripFlightHeaders } from '../../server/app-render/strip-flight-headers'\nimport { NodeNextRequest, NodeNextResponse } from '../../server/base-http/node'\nimport { checkIsAppPPREnabled } from '../../server/lib/experimental/ppr'\nimport {\n getFallbackRouteParams,\n createOpaqueFallbackRouteParams,\n type OpaqueFallbackRouteParams,\n} from '../../server/request/fallback-params'\nimport { setReferenceManifestsSingleton } from '../../server/app-render/encryption-utils'\nimport {\n isHtmlBotRequest,\n shouldServeStreamingMetadata,\n} from '../../server/lib/streaming-metadata'\nimport { createServerModuleMap } from '../../server/app-render/action-utils'\nimport { normalizeAppPath } from '../../shared/lib/router/utils/app-paths'\nimport { getIsPossibleServerAction } from '../../server/lib/server-action-request-meta'\nimport {\n RSC_HEADER,\n NEXT_ROUTER_PREFETCH_HEADER,\n NEXT_IS_PRERENDER_HEADER,\n NEXT_DID_POSTPONE_HEADER,\n RSC_CONTENT_TYPE_HEADER,\n} from '../../client/components/app-router-headers'\nimport { getBotType, isBot } from '../../shared/lib/router/utils/is-bot'\nimport {\n CachedRouteKind,\n IncrementalCacheKind,\n type CachedAppPageValue,\n type CachedPageValue,\n type ResponseCacheEntry,\n type ResponseGenerator,\n} from '../../server/response-cache'\nimport { FallbackMode, parseFallbackField } from '../../lib/fallback'\nimport RenderResult from '../../server/render-result'\nimport {\n CACHE_ONE_YEAR,\n HTML_CONTENT_TYPE_HEADER,\n NEXT_CACHE_TAGS_HEADER,\n} from '../../lib/constants'\nimport type { CacheControl } from '../../server/lib/cache-control'\nimport { ENCODED_TAGS } from '../../server/stream-utils/encoded-tags'\nimport { sendRenderResult } from '../../server/send-payload'\nimport { NoFallbackError } from '../../shared/lib/no-fallback-error.external'\n\n// These are injected by the loader afterwards.\n\n/**\n * The tree created in next-app-loader that holds component segments and modules\n * and I've updated it.\n */\ndeclare const tree: LoaderTree\n\n// We inject the tree and pages here so that we can use them in the route\n// module.\n// INJECT:tree\n\nimport GlobalError from 'VAR_MODULE_GLOBAL_ERROR' with { 'turbopack-transition': 'next-server-utility' }\n\nexport { GlobalError }\n\n// These are injected by the loader afterwards.\ndeclare const __next_app_require__: (id: string | number) => unknown\ndeclare const __next_app_load_chunk__: (id: string | number) => Promise\n\n// INJECT:__next_app_require__\n// INJECT:__next_app_load_chunk__\n\nexport const __next_app__ = {\n require: __next_app_require__,\n loadChunk: __next_app_load_chunk__,\n}\n\nimport * as entryBase from '../../server/app-render/entry-base' with { 'turbopack-transition': 'next-server-utility' }\nimport { RedirectStatusCode } from '../../client/components/redirect-status-code'\nimport { InvariantError } from '../../shared/lib/invariant-error'\nimport { scheduleOnNextTick } from '../../lib/scheduler'\nimport { isInterceptionRouteAppPath } from '../../shared/lib/router/utils/interception-routes'\n\nexport * from '../../server/app-render/entry-base' with { 'turbopack-transition': 'next-server-utility' }\n\n// Create and export the route module that will be consumed.\nexport const routeModule = new AppPageRouteModule({\n definition: {\n kind: RouteKind.APP_PAGE,\n page: 'VAR_DEFINITION_PAGE',\n pathname: 'VAR_DEFINITION_PATHNAME',\n // The following aren't used in production.\n bundlePath: '',\n filename: '',\n appPaths: [],\n },\n userland: {\n loaderTree: tree,\n },\n distDir: process.env.__NEXT_RELATIVE_DIST_DIR || '',\n relativeProjectDir: process.env.__NEXT_RELATIVE_PROJECT_DIR || '',\n})\n\nexport async function handler(\n req: IncomingMessage,\n res: ServerResponse,\n ctx: {\n waitUntil: (prom: Promise) => void\n }\n) {\n if (routeModule.isDev) {\n addRequestMeta(req, 'devRequestTimingInternalsEnd', process.hrtime.bigint())\n }\n let srcPage = 'VAR_DEFINITION_PAGE'\n\n // turbopack doesn't normalize `/index` in the page name\n // so we need to to process dynamic routes properly\n // TODO: fix turbopack providing differing value from webpack\n if (process.env.TURBOPACK) {\n srcPage = srcPage.replace(/\\/index$/, '') || '/'\n } else if (srcPage === '/index') {\n // we always normalize /index specifically\n srcPage = '/'\n }\n const multiZoneDraftMode = process.env\n .__NEXT_MULTI_ZONE_DRAFT_MODE as any as boolean\n\n const isMinimalMode = Boolean(\n process.env.MINIMAL_MODE || getRequestMeta(req, 'minimalMode')\n )\n\n const prepareResult = await routeModule.prepare(req, res, {\n srcPage,\n multiZoneDraftMode,\n })\n\n if (!prepareResult) {\n res.statusCode = 400\n res.end('Bad Request')\n ctx.waitUntil?.(Promise.resolve())\n return null\n }\n\n const {\n buildId,\n query,\n params,\n pageIsDynamic,\n buildManifest,\n nextFontManifest,\n reactLoadableManifest,\n serverActionsManifest,\n clientReferenceManifest,\n subresourceIntegrityManifest,\n prerenderManifest,\n isDraftMode,\n resolvedPathname,\n revalidateOnlyGenerated,\n routerServerContext,\n nextConfig,\n parsedUrl,\n interceptionRoutePatterns,\n } = prepareResult\n\n const normalizedSrcPage = normalizeAppPath(srcPage)\n\n let { isOnDemandRevalidate } = prepareResult\n\n // We use the resolvedPathname instead of the parsedUrl.pathname because it\n // is not rewritten as resolvedPathname is. This will ensure that the correct\n // prerender info is used instead of using the original pathname as the\n // source. If however PPR is enabled and cacheComponents is disabled, we\n // treat the pathname as dynamic. Currently, there's a bug in the PPR\n // implementation that incorrectly leaves %%drp placeholders in the output of\n // parallel routes. This is addressed with cacheComponents.\n const prerenderInfo =\n nextConfig.experimental.ppr &&\n !nextConfig.cacheComponents &&\n isInterceptionRouteAppPath(resolvedPathname)\n ? null\n : routeModule.match(resolvedPathname, prerenderManifest)\n\n const isPrerendered = !!prerenderManifest.routes[resolvedPathname]\n\n const userAgent = req.headers['user-agent'] || ''\n const botType = getBotType(userAgent)\n const isHtmlBot = isHtmlBotRequest(req)\n\n /**\n * If true, this indicates that the request being made is for an app\n * prefetch request.\n */\n const isPrefetchRSCRequest =\n getRequestMeta(req, 'isPrefetchRSCRequest') ??\n req.headers[NEXT_ROUTER_PREFETCH_HEADER] === '1' // exclude runtime prefetches, which use '2'\n\n // NOTE: Don't delete headers[RSC] yet, it still needs to be used in renderToHTML later\n\n const isRSCRequest =\n getRequestMeta(req, 'isRSCRequest') ?? Boolean(req.headers[RSC_HEADER])\n\n const isPossibleServerAction = getIsPossibleServerAction(req)\n\n /**\n * If the route being rendered is an app page, and the ppr feature has been\n * enabled, then the given route _could_ support PPR.\n */\n const couldSupportPPR: boolean = checkIsAppPPREnabled(\n nextConfig.experimental.ppr\n )\n\n // When enabled, this will allow the use of the `?__nextppronly` query to\n // enable debugging of the static shell.\n const hasDebugStaticShellQuery =\n process.env.__NEXT_EXPERIMENTAL_STATIC_SHELL_DEBUGGING === '1' &&\n typeof query.__nextppronly !== 'undefined' &&\n couldSupportPPR\n\n // When enabled, this will allow the use of the `?__nextppronly` query\n // to enable debugging of the fallback shell.\n const hasDebugFallbackShellQuery =\n hasDebugStaticShellQuery && query.__nextppronly === 'fallback'\n\n // This page supports PPR if it is marked as being `PARTIALLY_STATIC` in the\n // prerender manifest and this is an app page.\n const isRoutePPREnabled: boolean =\n couldSupportPPR &&\n ((\n prerenderManifest.routes[normalizedSrcPage] ??\n prerenderManifest.dynamicRoutes[normalizedSrcPage]\n )?.renderingMode === 'PARTIALLY_STATIC' ||\n // Ideally we'd want to check the appConfig to see if this page has PPR\n // enabled or not, but that would require plumbing the appConfig through\n // to the server during development. We assume that the page supports it\n // but only during development.\n (hasDebugStaticShellQuery &&\n (routeModule.isDev === true ||\n routerServerContext?.experimentalTestProxy === true)))\n\n const isDebugStaticShell: boolean =\n hasDebugStaticShellQuery && isRoutePPREnabled\n\n // We should enable debugging dynamic accesses when the static shell\n // debugging has been enabled and we're also in development mode.\n const isDebugDynamicAccesses =\n isDebugStaticShell && routeModule.isDev === true\n\n const isDebugFallbackShell = hasDebugFallbackShellQuery && isRoutePPREnabled\n\n // If we're in minimal mode, then try to get the postponed information from\n // the request metadata. If available, use it for resuming the postponed\n // render.\n const minimalPostponed = isRoutePPREnabled\n ? getRequestMeta(req, 'postponed')\n : undefined\n\n // If PPR is enabled, and this is a RSC request (but not a prefetch), then\n // we can use this fact to only generate the flight data for the request\n // because we can't cache the HTML (as it's also dynamic).\n let isDynamicRSCRequest =\n isRoutePPREnabled && isRSCRequest && !isPrefetchRSCRequest\n\n // During a PPR revalidation, the RSC request is not dynamic if we do not have the postponed data.\n // We only attach the postponed data during a resume. If there's no postponed data, then it must be a revalidation.\n // This is to ensure that we don't bypass the cache during a revalidation.\n if (isMinimalMode) {\n isDynamicRSCRequest = isDynamicRSCRequest && !!minimalPostponed\n }\n\n // Need to read this before it's stripped by stripFlightHeaders. We don't\n // need to transfer it to the request meta because it's only read\n // within this function; the static segment data should have already been\n // generated, so we will always either return a static response or a 404.\n const segmentPrefetchHeader = getRequestMeta(req, 'segmentPrefetchRSCRequest')\n\n // TODO: investigate existing bug with shouldServeStreamingMetadata always\n // being true for a revalidate due to modifying the base-server this.renderOpts\n // when fixing this to correct logic it causes hydration issue since we set\n // serveStreamingMetadata to true during export\n const serveStreamingMetadata =\n isHtmlBot && isRoutePPREnabled\n ? false\n : !userAgent\n ? true\n : shouldServeStreamingMetadata(userAgent, nextConfig.htmlLimitedBots)\n\n const isSSG = Boolean(\n (prerenderInfo ||\n isPrerendered ||\n prerenderManifest.routes[normalizedSrcPage]) &&\n // If this is a html bot request and PPR is enabled, then we don't want\n // to serve a static response.\n !(isHtmlBot && isRoutePPREnabled)\n )\n\n // When a page supports cacheComponents, we can support RDC for Navigations\n const supportsRDCForNavigations =\n isRoutePPREnabled && nextConfig.cacheComponents === true\n\n // In development, we always want to generate dynamic HTML.\n const supportsDynamicResponse: boolean =\n // If we're in development, we always support dynamic HTML, unless it's\n // a data request, in which case we only produce static HTML.\n routeModule.isDev === true ||\n // If this is not SSG or does not have static paths, then it supports\n // dynamic HTML.\n !isSSG ||\n // If this request has provided postponed data, it supports dynamic\n // HTML.\n typeof minimalPostponed === 'string' ||\n // If this handler supports onCacheEntryV2, then we can only support\n // dynamic responses if it's a dynamic RSC request and not in minimal mode. If it\n // doesn't support it we must fallback to the default behavior.\n (supportsRDCForNavigations && getRequestMeta(req, 'onCacheEntryV2')\n ? // In minimal mode, we'll always want to generate a static response\n // which will generate the RDC for the route. When resuming a Dynamic\n // RSC request, we'll pass the minimal postponed data to the render\n // which will trigger the `supportsDynamicResponse` to be true.\n isDynamicRSCRequest && !isMinimalMode\n : // Otherwise, we can support dynamic responses if it's a dynamic RSC request.\n isDynamicRSCRequest)\n\n // When html bots request PPR page, perform the full dynamic rendering.\n const shouldWaitOnAllReady = isHtmlBot && isRoutePPREnabled\n\n let ssgCacheKey: string | null = null\n if (\n !isDraftMode &&\n isSSG &&\n !supportsDynamicResponse &&\n !isPossibleServerAction &&\n !minimalPostponed &&\n !isDynamicRSCRequest\n ) {\n ssgCacheKey = resolvedPathname\n }\n\n // the staticPathKey differs from ssgCacheKey since\n // ssgCacheKey is null in dev since we're always in \"dynamic\"\n // mode in dev to bypass the cache, but we still need to honor\n // dynamicParams = false in dev mode\n let staticPathKey = ssgCacheKey\n if (!staticPathKey && routeModule.isDev) {\n staticPathKey = resolvedPathname\n }\n\n // If this is a request for an app path that should be statically generated\n // and we aren't in the edge runtime, strip the flight headers so it will\n // generate the static response.\n if (\n !routeModule.isDev &&\n !isDraftMode &&\n isSSG &&\n isRSCRequest &&\n !isDynamicRSCRequest\n ) {\n stripFlightHeaders(req.headers)\n }\n\n const ComponentMod = {\n ...entryBase,\n tree,\n GlobalError,\n handler,\n routeModule,\n __next_app__,\n }\n\n // Before rendering (which initializes component tree modules), we have to\n // set the reference manifests to our global store so Server Action's\n // encryption util can access to them at the top level of the page module.\n if (serverActionsManifest && clientReferenceManifest) {\n setReferenceManifestsSingleton({\n page: srcPage,\n clientReferenceManifest,\n serverActionsManifest,\n serverModuleMap: createServerModuleMap({\n serverActionsManifest,\n }),\n })\n }\n\n const method = req.method || 'GET'\n const tracer = getTracer()\n const activeSpan = tracer.getActiveScopeSpan()\n\n const render404 = async () => {\n // TODO: should route-module itself handle rendering the 404\n if (routerServerContext?.render404) {\n await routerServerContext.render404(req, res, parsedUrl, false)\n } else {\n res.end('This page could not be found')\n }\n return null\n }\n\n try {\n const varyHeader = routeModule.getVaryHeader(\n resolvedPathname,\n interceptionRoutePatterns\n )\n res.setHeader('Vary', varyHeader)\n const invokeRouteModule = async (\n span: Span | undefined,\n context: AppPageRouteHandlerContext\n ) => {\n const nextReq = new NodeNextRequest(req)\n const nextRes = new NodeNextResponse(res)\n\n return routeModule.render(nextReq, nextRes, context).finally(() => {\n if (!span) return\n\n span.setAttributes({\n 'http.status_code': res.statusCode,\n 'next.rsc': false,\n })\n\n const rootSpanAttributes = tracer.getRootSpanAttributes()\n // We were unable to get attributes, probably OTEL is not enabled\n if (!rootSpanAttributes) {\n return\n }\n\n if (\n rootSpanAttributes.get('next.span_type') !==\n BaseServerSpan.handleRequest\n ) {\n console.warn(\n `Unexpected root span type '${rootSpanAttributes.get(\n 'next.span_type'\n )}'. Please report this Next.js issue https://github.com/vercel/next.js`\n )\n return\n }\n\n const route = rootSpanAttributes.get('next.route')\n if (route) {\n const name = `${method} ${route}`\n\n span.setAttributes({\n 'next.route': route,\n 'http.route': route,\n 'next.span_name': name,\n })\n span.updateName(name)\n } else {\n span.updateName(`${method} ${srcPage}`)\n }\n })\n }\n\n const incrementalCache = getRequestMeta(req, 'incrementalCache')\n\n const doRender = async ({\n span,\n postponed,\n fallbackRouteParams,\n forceStaticRender,\n }: {\n span?: Span\n\n /**\n * The postponed data for this render. This is only provided when resuming\n * a render that has been postponed.\n */\n postponed: string | undefined\n\n /**\n * The unknown route params for this render.\n */\n fallbackRouteParams: OpaqueFallbackRouteParams | null\n\n /**\n * When true, this indicates that the response generator is being called\n * in a context where the response must be generated statically.\n *\n * CRITICAL: This should only currently be used when revalidating due to a\n * dynamic RSC request.\n */\n forceStaticRender: boolean\n }): Promise => {\n const context: AppPageRouteHandlerContext = {\n query,\n params,\n page: normalizedSrcPage,\n sharedContext: {\n buildId,\n },\n serverComponentsHmrCache: getRequestMeta(\n req,\n 'serverComponentsHmrCache'\n ),\n fallbackRouteParams,\n renderOpts: {\n App: () => null,\n Document: () => null,\n pageConfig: {},\n ComponentMod,\n Component: interopDefault(ComponentMod),\n\n params,\n routeModule,\n page: srcPage,\n postponed,\n shouldWaitOnAllReady,\n serveStreamingMetadata,\n supportsDynamicResponse:\n typeof postponed === 'string' || supportsDynamicResponse,\n buildManifest,\n nextFontManifest,\n reactLoadableManifest,\n subresourceIntegrityManifest,\n serverActionsManifest,\n clientReferenceManifest,\n setCacheStatus: routerServerContext?.setCacheStatus,\n setIsrStatus: routerServerContext?.setIsrStatus,\n setReactDebugChannel: routerServerContext?.setReactDebugChannel,\n\n dir:\n process.env.NEXT_RUNTIME === 'nodejs'\n ? (require('path') as typeof import('path')).join(\n /* turbopackIgnore: true */\n process.cwd(),\n routeModule.relativeProjectDir\n )\n : `${process.cwd()}/${routeModule.relativeProjectDir}`,\n isDraftMode,\n botType,\n isOnDemandRevalidate,\n isPossibleServerAction,\n assetPrefix: nextConfig.assetPrefix,\n nextConfigOutput: nextConfig.output,\n crossOrigin: nextConfig.crossOrigin,\n trailingSlash: nextConfig.trailingSlash,\n images: nextConfig.images,\n previewProps: prerenderManifest.preview,\n deploymentId: nextConfig.deploymentId,\n enableTainting: nextConfig.experimental.taint,\n htmlLimitedBots: nextConfig.htmlLimitedBots,\n reactMaxHeadersLength: nextConfig.reactMaxHeadersLength,\n\n multiZoneDraftMode,\n incrementalCache,\n cacheLifeProfiles: nextConfig.cacheLife,\n basePath: nextConfig.basePath,\n serverActions: nextConfig.experimental.serverActions,\n\n ...(isDebugStaticShell ||\n isDebugDynamicAccesses ||\n isDebugFallbackShell\n ? {\n nextExport: true,\n supportsDynamicResponse: false,\n isStaticGeneration: true,\n isDebugDynamicAccesses: isDebugDynamicAccesses,\n }\n : {}),\n cacheComponents: Boolean(nextConfig.cacheComponents),\n experimental: {\n isRoutePPREnabled,\n expireTime: nextConfig.expireTime,\n staleTimes: nextConfig.experimental.staleTimes,\n dynamicOnHover: Boolean(nextConfig.experimental.dynamicOnHover),\n inlineCss: Boolean(nextConfig.experimental.inlineCss),\n authInterrupts: Boolean(nextConfig.experimental.authInterrupts),\n clientTraceMetadata:\n nextConfig.experimental.clientTraceMetadata || ([] as any),\n clientParamParsingOrigins:\n nextConfig.experimental.clientParamParsingOrigins,\n },\n\n waitUntil: ctx.waitUntil,\n onClose: (cb) => {\n res.on('close', cb)\n },\n onAfterTaskError: () => {},\n\n onInstrumentationRequestError: (error, _request, errorContext) =>\n routeModule.onRequestError(\n req,\n error,\n errorContext,\n routerServerContext\n ),\n err: getRequestMeta(req, 'invokeError'),\n dev: routeModule.isDev,\n },\n }\n\n if (isDebugStaticShell || isDebugDynamicAccesses) {\n context.renderOpts.nextExport = true\n context.renderOpts.supportsDynamicResponse = false\n context.renderOpts.isDebugDynamicAccesses = isDebugDynamicAccesses\n }\n\n // When we're revalidating in the background, we should not allow dynamic\n // responses.\n if (forceStaticRender) {\n context.renderOpts.supportsDynamicResponse = false\n }\n\n const result = await invokeRouteModule(span, context)\n\n const { metadata } = result\n\n const {\n cacheControl,\n headers = {},\n // Add any fetch tags that were on the page to the response headers.\n fetchTags: cacheTags,\n fetchMetrics,\n } = metadata\n\n if (cacheTags) {\n headers[NEXT_CACHE_TAGS_HEADER] = cacheTags\n }\n\n // Pull any fetch metrics from the render onto the request.\n ;(req as any).fetchMetrics = fetchMetrics\n\n // we don't throw static to dynamic errors in dev as isSSG\n // is a best guess in dev since we don't have the prerender pass\n // to know whether the path is actually static or not\n if (\n isSSG &&\n cacheControl?.revalidate === 0 &&\n !routeModule.isDev &&\n !isRoutePPREnabled\n ) {\n const staticBailoutInfo = metadata.staticBailoutInfo\n\n const err = new Error(\n `Page changed from static to dynamic at runtime ${resolvedPathname}${\n staticBailoutInfo?.description\n ? `, reason: ${staticBailoutInfo.description}`\n : ``\n }` +\n `\\nsee more here https://nextjs.org/docs/messages/app-static-to-dynamic-error`\n )\n\n if (staticBailoutInfo?.stack) {\n const stack = staticBailoutInfo.stack\n err.stack = err.message + stack.substring(stack.indexOf('\\n'))\n }\n\n throw err\n }\n\n return {\n value: {\n kind: CachedRouteKind.APP_PAGE,\n html: result,\n headers,\n rscData: metadata.flightData,\n postponed: metadata.postponed,\n status: metadata.statusCode,\n segmentData: metadata.segmentData,\n } satisfies CachedAppPageValue,\n cacheControl,\n } satisfies ResponseCacheEntry\n }\n\n const responseGenerator: ResponseGenerator = async ({\n hasResolved,\n previousCacheEntry: previousIncrementalCacheEntry,\n isRevalidating,\n span,\n forceStaticRender = false,\n }) => {\n const isProduction = routeModule.isDev === false\n const didRespond = hasResolved || res.writableEnded\n\n // skip on-demand revalidate if cache is not present and\n // revalidate-if-generated is set\n if (\n isOnDemandRevalidate &&\n revalidateOnlyGenerated &&\n !previousIncrementalCacheEntry &&\n !isMinimalMode\n ) {\n if (routerServerContext?.render404) {\n await routerServerContext.render404(req, res)\n } else {\n res.statusCode = 404\n res.end('This page could not be found')\n }\n return null\n }\n\n let fallbackMode: FallbackMode | undefined\n\n if (prerenderInfo) {\n fallbackMode = parseFallbackField(prerenderInfo.fallback)\n }\n\n // When serving a HTML bot request, we want to serve a blocking render and\n // not the prerendered page. This ensures that the correct content is served\n // to the bot in the head.\n if (fallbackMode === FallbackMode.PRERENDER && isBot(userAgent)) {\n if (!isRoutePPREnabled || isHtmlBot) {\n fallbackMode = FallbackMode.BLOCKING_STATIC_RENDER\n }\n }\n\n if (previousIncrementalCacheEntry?.isStale === -1) {\n isOnDemandRevalidate = true\n }\n\n // TODO: adapt for PPR\n // only allow on-demand revalidate for fallback: true/blocking\n // or for prerendered fallback: false paths\n if (\n isOnDemandRevalidate &&\n (fallbackMode !== FallbackMode.NOT_FOUND ||\n previousIncrementalCacheEntry)\n ) {\n fallbackMode = FallbackMode.BLOCKING_STATIC_RENDER\n }\n\n if (\n !isMinimalMode &&\n fallbackMode !== FallbackMode.BLOCKING_STATIC_RENDER &&\n staticPathKey &&\n !didRespond &&\n !isDraftMode &&\n pageIsDynamic &&\n (isProduction || !isPrerendered)\n ) {\n // if the page has dynamicParams: false and this pathname wasn't\n // prerendered trigger the no fallback handling\n if (\n // In development, fall through to render to handle missing\n // getStaticPaths.\n (isProduction || prerenderInfo) &&\n // When fallback isn't present, abort this render so we 404\n fallbackMode === FallbackMode.NOT_FOUND\n ) {\n if (nextConfig.experimental.adapterPath) {\n return await render404()\n }\n throw new NoFallbackError()\n }\n\n // When cacheComponents is enabled, we can use the fallback\n // response if the request is not a dynamic RSC request because the\n // RSC data when this feature flag is enabled does not contain any\n // param references. Without this feature flag enabled, the RSC data\n // contains param references, and therefore we can't use the fallback.\n if (\n isRoutePPREnabled &&\n (nextConfig.cacheComponents ? !isDynamicRSCRequest : !isRSCRequest)\n ) {\n const cacheKey =\n isProduction && typeof prerenderInfo?.fallback === 'string'\n ? prerenderInfo.fallback\n : normalizedSrcPage\n\n const fallbackRouteParams =\n // If we're in production and we have fallback route params, then we\n // can use the manifest fallback route params.\n isProduction && prerenderInfo?.fallbackRouteParams\n ? createOpaqueFallbackRouteParams(\n prerenderInfo.fallbackRouteParams\n )\n : // Otherwise, if we're debugging the fallback shell, then we\n // have to manually generate the fallback route params.\n isDebugFallbackShell\n ? getFallbackRouteParams(normalizedSrcPage, routeModule)\n : null\n\n // We use the response cache here to handle the revalidation and\n // management of the fallback shell.\n const fallbackResponse = await routeModule.handleResponse({\n cacheKey,\n req,\n nextConfig,\n routeKind: RouteKind.APP_PAGE,\n isFallback: true,\n prerenderManifest,\n isRoutePPREnabled,\n responseGenerator: async () =>\n doRender({\n span,\n // We pass `undefined` as rendering a fallback isn't resumed\n // here.\n postponed: undefined,\n fallbackRouteParams,\n forceStaticRender: false,\n }),\n waitUntil: ctx.waitUntil,\n isMinimalMode,\n })\n\n // If the fallback response was set to null, then we should return null.\n if (fallbackResponse === null) return null\n\n // Otherwise, if we did get a fallback response, we should return it.\n if (fallbackResponse) {\n // Remove the cache control from the response to prevent it from being\n // used in the surrounding cache.\n delete fallbackResponse.cacheControl\n\n return fallbackResponse\n }\n }\n }\n\n // Only requests that aren't revalidating can be resumed. If we have the\n // minimal postponed data, then we should resume the render with it.\n let postponed =\n !isOnDemandRevalidate && !isRevalidating && minimalPostponed\n ? minimalPostponed\n : undefined\n\n // If this is a dynamic RSC request, we should use the postponed data from\n // the static render (if available). This ensures that we can utilize the\n // resume data cache (RDC) from the static render to ensure that the data\n // is consistent between the static and dynamic renders.\n if (\n // Only enable RDC for Navigations if the feature is enabled.\n supportsRDCForNavigations &&\n process.env.NEXT_RUNTIME !== 'edge' &&\n !isMinimalMode &&\n incrementalCache &&\n isDynamicRSCRequest &&\n // We don't typically trigger an on-demand revalidation for dynamic RSC\n // requests, as we're typically revalidating the page in the background\n // instead. However, if the cache entry is stale, we should trigger a\n // background revalidation on dynamic RSC requests. This prevents us\n // from entering an infinite loop of revalidations.\n !forceStaticRender\n ) {\n const incrementalCacheEntry = await incrementalCache.get(\n resolvedPathname,\n {\n kind: IncrementalCacheKind.APP_PAGE,\n isRoutePPREnabled: true,\n isFallback: false,\n }\n )\n\n // If the cache entry is found, we should use the postponed data from\n // the cache.\n if (\n incrementalCacheEntry &&\n incrementalCacheEntry.value &&\n incrementalCacheEntry.value.kind === CachedRouteKind.APP_PAGE\n ) {\n // CRITICAL: we're assigning the postponed data from the cache entry\n // here as we're using the RDC to resume the render.\n postponed = incrementalCacheEntry.value.postponed\n\n // If the cache entry is stale, we should trigger a background\n // revalidation so that subsequent requests will get a fresh response.\n if (\n incrementalCacheEntry &&\n // We want to trigger this flow if the cache entry is stale and if\n // the requested revalidation flow is either foreground or\n // background.\n (incrementalCacheEntry.isStale === -1 ||\n incrementalCacheEntry.isStale === true)\n ) {\n // We want to schedule this on the next tick to ensure that the\n // render is not blocked on it.\n scheduleOnNextTick(async () => {\n const responseCache = routeModule.getResponseCache(req)\n\n try {\n await responseCache.revalidate(\n resolvedPathname,\n incrementalCache,\n isRoutePPREnabled,\n false,\n (c) =>\n responseGenerator({\n ...c,\n // CRITICAL: we need to set this to true as we're\n // revalidating in the background and typically this dynamic\n // RSC request is not treated as static.\n forceStaticRender: true,\n }),\n // CRITICAL: we need to pass null here because passing the\n // previous cache entry here (which is stale) will switch on\n // isOnDemandRevalidate and break the prerendering.\n null,\n hasResolved,\n ctx.waitUntil\n )\n } catch (err) {\n console.error(\n 'Error revalidating the page in the background',\n err\n )\n }\n })\n }\n }\n }\n\n // When we're in minimal mode, if we're trying to debug the static shell,\n // we should just return nothing instead of resuming the dynamic render.\n if (\n (isDebugStaticShell || isDebugDynamicAccesses) &&\n typeof postponed !== 'undefined'\n ) {\n return {\n cacheControl: { revalidate: 1, expire: undefined },\n value: {\n kind: CachedRouteKind.PAGES,\n html: RenderResult.EMPTY,\n pageData: {},\n headers: undefined,\n status: undefined,\n } satisfies CachedPageValue,\n }\n }\n\n const fallbackRouteParams =\n // If we're in production and we have fallback route params, then we\n // can use the manifest fallback route params if we need to render the\n // fallback shell.\n isProduction &&\n prerenderInfo?.fallbackRouteParams &&\n getRequestMeta(req, 'renderFallbackShell')\n ? createOpaqueFallbackRouteParams(prerenderInfo.fallbackRouteParams)\n : // Otherwise, if we're debugging the fallback shell, then we have to\n // manually generate the fallback route params.\n isDebugFallbackShell\n ? getFallbackRouteParams(normalizedSrcPage, routeModule)\n : null\n\n // Perform the render.\n return doRender({\n span,\n postponed,\n fallbackRouteParams,\n forceStaticRender,\n })\n }\n\n const handleResponse = async (span?: Span): Promise => {\n const cacheEntry = await routeModule.handleResponse({\n cacheKey: ssgCacheKey,\n responseGenerator: (c) =>\n responseGenerator({\n span,\n ...c,\n }),\n routeKind: RouteKind.APP_PAGE,\n isOnDemandRevalidate,\n isRoutePPREnabled,\n req,\n nextConfig,\n prerenderManifest,\n waitUntil: ctx.waitUntil,\n isMinimalMode,\n })\n\n if (isDraftMode) {\n res.setHeader(\n 'Cache-Control',\n 'private, no-cache, no-store, max-age=0, must-revalidate'\n )\n }\n\n // In dev, we should not cache pages for any reason.\n if (routeModule.isDev) {\n res.setHeader('Cache-Control', 'no-store, must-revalidate')\n }\n\n if (!cacheEntry) {\n if (ssgCacheKey) {\n // A cache entry might not be generated if a response is written\n // in `getInitialProps` or `getServerSideProps`, but those shouldn't\n // have a cache key. If we do have a cache key but we don't end up\n // with a cache entry, then either Next.js or the application has a\n // bug that needs fixing.\n throw new Error('invariant: cache entry required but not generated')\n }\n return null\n }\n\n if (cacheEntry.value?.kind !== CachedRouteKind.APP_PAGE) {\n throw new Error(\n `Invariant app-page handler received invalid cache entry ${cacheEntry.value?.kind}`\n )\n }\n\n const didPostpone = typeof cacheEntry.value.postponed === 'string'\n\n if (\n isSSG &&\n // We don't want to send a cache header for requests that contain dynamic\n // data. If this is a Dynamic RSC request or wasn't a Prefetch RSC\n // request, then we should set the cache header.\n !isDynamicRSCRequest &&\n (!didPostpone || isPrefetchRSCRequest)\n ) {\n if (!isMinimalMode) {\n // set x-nextjs-cache header to match the header\n // we set for the image-optimizer\n res.setHeader(\n 'x-nextjs-cache',\n isOnDemandRevalidate\n ? 'REVALIDATED'\n : cacheEntry.isMiss\n ? 'MISS'\n : cacheEntry.isStale\n ? 'STALE'\n : 'HIT'\n )\n }\n // Set a header used by the client router to signal the response is static\n // and should respect the `static` cache staleTime value.\n res.setHeader(NEXT_IS_PRERENDER_HEADER, '1')\n }\n const { value: cachedData } = cacheEntry\n\n // Coerce the cache control parameter from the render.\n let cacheControl: CacheControl | undefined\n\n // If this is a resume request in minimal mode it is streamed with dynamic\n // content and should not be cached.\n if (minimalPostponed) {\n cacheControl = { revalidate: 0, expire: undefined }\n }\n\n // If this is in minimal mode and this is a flight request that isn't a\n // prefetch request while PPR is enabled, it cannot be cached as it contains\n // dynamic content.\n else if (isDynamicRSCRequest) {\n cacheControl = { revalidate: 0, expire: undefined }\n } else if (!routeModule.isDev) {\n // If this is a preview mode request, we shouldn't cache it\n if (isDraftMode) {\n cacheControl = { revalidate: 0, expire: undefined }\n }\n\n // If this isn't SSG, then we should set change the header only if it is\n // not set already.\n else if (!isSSG) {\n if (!res.getHeader('Cache-Control')) {\n cacheControl = { revalidate: 0, expire: undefined }\n }\n } else if (cacheEntry.cacheControl) {\n // If the cache entry has a cache control with a revalidate value that's\n // a number, use it.\n if (typeof cacheEntry.cacheControl.revalidate === 'number') {\n if (cacheEntry.cacheControl.revalidate < 1) {\n throw new Error(\n `Invalid revalidate configuration provided: ${cacheEntry.cacheControl.revalidate} < 1`\n )\n }\n\n cacheControl = {\n revalidate: cacheEntry.cacheControl.revalidate,\n expire: cacheEntry.cacheControl?.expire ?? nextConfig.expireTime,\n }\n }\n // Otherwise if the revalidate value is false, then we should use the\n // cache time of one year.\n else {\n cacheControl = { revalidate: CACHE_ONE_YEAR, expire: undefined }\n }\n }\n }\n\n cacheEntry.cacheControl = cacheControl\n\n if (\n typeof segmentPrefetchHeader === 'string' &&\n cachedData?.kind === CachedRouteKind.APP_PAGE &&\n cachedData.segmentData\n ) {\n // This is a prefetch request issued by the client Segment Cache. These\n // should never reach the application layer (lambda). We should either\n // respond from the cache (HIT) or respond with 204 No Content (MISS).\n\n // Set a header to indicate that PPR is enabled for this route. This\n // lets the client distinguish between a regular cache miss and a cache\n // miss due to PPR being disabled. In other contexts this header is used\n // to indicate that the response contains dynamic data, but here we're\n // only using it to indicate that the feature is enabled — the segment\n // response itself contains whether the data is dynamic.\n res.setHeader(NEXT_DID_POSTPONE_HEADER, '2')\n\n // Add the cache tags header to the response if it exists and we're in\n // minimal mode while rendering a static page.\n const tags = cachedData.headers?.[NEXT_CACHE_TAGS_HEADER]\n if (isMinimalMode && isSSG && tags && typeof tags === 'string') {\n res.setHeader(NEXT_CACHE_TAGS_HEADER, tags)\n }\n\n const matchedSegment = cachedData.segmentData.get(segmentPrefetchHeader)\n if (matchedSegment !== undefined) {\n // Cache hit\n return sendRenderResult({\n req,\n res,\n generateEtags: nextConfig.generateEtags,\n poweredByHeader: nextConfig.poweredByHeader,\n result: RenderResult.fromStatic(\n matchedSegment,\n RSC_CONTENT_TYPE_HEADER\n ),\n cacheControl: cacheEntry.cacheControl,\n })\n }\n\n // Cache miss. Either a cache entry for this route has not been generated\n // (which technically should not be possible when PPR is enabled, because\n // at a minimum there should always be a fallback entry) or there's no\n // match for the requested segment. Respond with a 204 No Content. We\n // don't bother to respond with 404, because these requests are only\n // issued as part of a prefetch.\n res.statusCode = 204\n return sendRenderResult({\n req,\n res,\n generateEtags: nextConfig.generateEtags,\n poweredByHeader: nextConfig.poweredByHeader,\n result: RenderResult.EMPTY,\n cacheControl: cacheEntry.cacheControl,\n })\n }\n\n // If there's a callback for `onCacheEntry`, call it with the cache entry\n // and the revalidate options. If we support RDC for Navigations, we\n // prefer the `onCacheEntryV2` callback. Once RDC for Navigations is the\n // default, we can remove the fallback to `onCacheEntry` as\n // `onCacheEntryV2` is now fully supported.\n const onCacheEntry = supportsRDCForNavigations\n ? (getRequestMeta(req, 'onCacheEntryV2') ??\n getRequestMeta(req, 'onCacheEntry'))\n : getRequestMeta(req, 'onCacheEntry')\n if (onCacheEntry) {\n const finished = await onCacheEntry(cacheEntry, {\n url: getRequestMeta(req, 'initURL') ?? req.url,\n })\n if (finished) return null\n }\n\n if (cachedData.headers) {\n const headers = { ...cachedData.headers }\n\n if (!isMinimalMode || !isSSG) {\n delete headers[NEXT_CACHE_TAGS_HEADER]\n }\n\n for (let [key, value] of Object.entries(headers)) {\n if (typeof value === 'undefined') continue\n\n if (Array.isArray(value)) {\n for (const v of value) {\n res.appendHeader(key, v)\n }\n } else if (typeof value === 'number') {\n value = value.toString()\n res.appendHeader(key, value)\n } else {\n res.appendHeader(key, value)\n }\n }\n }\n\n // Add the cache tags header to the response if it exists and we're in\n // minimal mode while rendering a static page.\n const tags = cachedData.headers?.[NEXT_CACHE_TAGS_HEADER]\n if (isMinimalMode && isSSG && tags && typeof tags === 'string') {\n res.setHeader(NEXT_CACHE_TAGS_HEADER, tags)\n }\n\n // If the request is a data request, then we shouldn't set the status code\n // from the response because it should always be 200. This should be gated\n // behind the experimental PPR flag.\n if (cachedData.status && (!isRSCRequest || !isRoutePPREnabled)) {\n res.statusCode = cachedData.status\n }\n\n // Redirect information is encoded in RSC payload, so we don't need to use redirect status codes\n if (\n !isMinimalMode &&\n cachedData.status &&\n RedirectStatusCode[cachedData.status] &&\n isRSCRequest\n ) {\n res.statusCode = 200\n }\n\n // Mark that the request did postpone.\n if (didPostpone && !isDynamicRSCRequest) {\n res.setHeader(NEXT_DID_POSTPONE_HEADER, '1')\n }\n\n // we don't go through this block when preview mode is true\n // as preview mode is a dynamic request (bypasses cache) and doesn't\n // generate both HTML and payloads in the same request so continue to just\n // return the generated payload\n if (isRSCRequest && !isDraftMode) {\n // If this is a dynamic RSC request, then stream the response.\n if (typeof cachedData.rscData === 'undefined') {\n // If the response is not an RSC response, then we can't serve it.\n if (cachedData.html.contentType !== RSC_CONTENT_TYPE_HEADER) {\n if (nextConfig.cacheComponents) {\n res.statusCode = 404\n return sendRenderResult({\n req,\n res,\n generateEtags: nextConfig.generateEtags,\n poweredByHeader: nextConfig.poweredByHeader,\n result: RenderResult.EMPTY,\n cacheControl: cacheEntry.cacheControl,\n })\n } else {\n // Otherwise this case is not expected.\n throw new InvariantError(\n `Expected RSC response, got ${cachedData.html.contentType}`\n )\n }\n }\n\n return sendRenderResult({\n req,\n res,\n generateEtags: nextConfig.generateEtags,\n poweredByHeader: nextConfig.poweredByHeader,\n result: cachedData.html,\n cacheControl: cacheEntry.cacheControl,\n })\n }\n\n // As this isn't a prefetch request, we should serve the static flight\n // data.\n return sendRenderResult({\n req,\n res,\n generateEtags: nextConfig.generateEtags,\n poweredByHeader: nextConfig.poweredByHeader,\n result: RenderResult.fromStatic(\n cachedData.rscData,\n RSC_CONTENT_TYPE_HEADER\n ),\n cacheControl: cacheEntry.cacheControl,\n })\n }\n\n // This is a request for HTML data.\n const body = cachedData.html\n\n // If there's no postponed state, we should just serve the HTML. This\n // should also be the case for a resume request because it's completed\n // as a server render (rather than a static render).\n if (!didPostpone || isMinimalMode || isRSCRequest) {\n // If we're in test mode, we should add a sentinel chunk to the response\n // that's between the static and dynamic parts so we can compare the\n // chunks and add assertions.\n if (\n process.env.__NEXT_TEST_MODE &&\n isMinimalMode &&\n isRoutePPREnabled &&\n body.contentType === HTML_CONTENT_TYPE_HEADER\n ) {\n // As we're in minimal mode, the static part would have already been\n // streamed first. The only part that this streams is the dynamic part\n // so we should FIRST stream the sentinel and THEN the dynamic part.\n body.unshift(createPPRBoundarySentinel())\n }\n\n return sendRenderResult({\n req,\n res,\n generateEtags: nextConfig.generateEtags,\n poweredByHeader: nextConfig.poweredByHeader,\n result: body,\n cacheControl: cacheEntry.cacheControl,\n })\n }\n\n // If we're debugging the static shell or the dynamic API accesses, we\n // should just serve the HTML without resuming the render. The returned\n // HTML will be the static shell so all the Dynamic API's will be used\n // during static generation.\n if (isDebugStaticShell || isDebugDynamicAccesses) {\n // Since we're not resuming the render, we need to at least add the\n // closing body and html tags to create valid HTML.\n body.push(\n new ReadableStream({\n start(controller) {\n controller.enqueue(ENCODED_TAGS.CLOSED.BODY_AND_HTML)\n controller.close()\n },\n })\n )\n\n return sendRenderResult({\n req,\n res,\n generateEtags: nextConfig.generateEtags,\n poweredByHeader: nextConfig.poweredByHeader,\n result: body,\n cacheControl: { revalidate: 0, expire: undefined },\n })\n }\n\n // If we're in test mode, we should add a sentinel chunk to the response\n // that's between the static and dynamic parts so we can compare the\n // chunks and add assertions.\n if (process.env.__NEXT_TEST_MODE) {\n body.push(createPPRBoundarySentinel())\n }\n\n // This request has postponed, so let's create a new transformer that the\n // dynamic data can pipe to that will attach the dynamic data to the end\n // of the response.\n const transformer = new TransformStream()\n body.push(transformer.readable)\n\n // Perform the render again, but this time, provide the postponed state.\n // We don't await because we want the result to start streaming now, and\n // we've already chained the transformer's readable to the render result.\n doRender({\n span,\n postponed: cachedData.postponed,\n // This is a resume render, not a fallback render, so we don't need to\n // set this.\n fallbackRouteParams: null,\n forceStaticRender: false,\n })\n .then(async (result) => {\n if (!result) {\n throw new Error('Invariant: expected a result to be returned')\n }\n\n if (result.value?.kind !== CachedRouteKind.APP_PAGE) {\n throw new Error(\n `Invariant: expected a page response, got ${result.value?.kind}`\n )\n }\n\n // Pipe the resume result to the transformer.\n await result.value.html.pipeTo(transformer.writable)\n })\n .catch((err) => {\n // An error occurred during piping or preparing the render, abort\n // the transformers writer so we can terminate the stream.\n transformer.writable.abort(err).catch((e) => {\n console.error(\"couldn't abort transformer\", e)\n })\n })\n\n return sendRenderResult({\n req,\n res,\n generateEtags: nextConfig.generateEtags,\n poweredByHeader: nextConfig.poweredByHeader,\n result: body,\n // We don't want to cache the response if it has postponed data because\n // the response being sent to the client it's dynamic parts are streamed\n // to the client on the same request.\n cacheControl: { revalidate: 0, expire: undefined },\n })\n }\n\n // TODO: activeSpan code path is for when wrapped by\n // next-server can be removed when this is no longer used\n if (activeSpan) {\n await handleResponse(activeSpan)\n } else {\n return await tracer.withPropagatedContext(req.headers, () =>\n tracer.trace(\n BaseServerSpan.handleRequest,\n {\n spanName: `${method} ${srcPage}`,\n kind: SpanKind.SERVER,\n attributes: {\n 'http.method': method,\n 'http.target': req.url,\n },\n },\n handleResponse\n )\n )\n }\n } catch (err) {\n if (!(err instanceof NoFallbackError)) {\n await routeModule.onRequestError(\n req,\n err,\n {\n routerKind: 'App Router',\n routePath: srcPage,\n routeType: 'render',\n revalidateReason: getRevalidateReason({\n isStaticGeneration: isSSG,\n isOnDemandRevalidate,\n }),\n },\n routerServerContext\n )\n }\n\n // rethrow so that we can handle serving error page\n throw err\n }\n}\n\n// TODO: omit this from production builds, only test builds should include it\n/**\n * Creates a readable stream that emits a PPR boundary sentinel.\n *\n * @returns A readable stream that emits a PPR boundary sentinel.\n */\nfunction createPPRBoundarySentinel() {\n return new ReadableStream({\n start(controller) {\n controller.enqueue(\n new TextEncoder().encode('')\n )\n controller.close()\n },\n })\n}\n"],"names":["AppPageRouteModule","RouteKind","getRevalidateReason","getTracer","SpanKind","addRequestMeta","getRequestMeta","BaseServerSpan","interopDefault","stripFlightHeaders","NodeNextRequest","NodeNextResponse","checkIsAppPPREnabled","getFallbackRouteParams","createOpaqueFallbackRouteParams","setReferenceManifestsSingleton","isHtmlBotRequest","shouldServeStreamingMetadata","createServerModuleMap","normalizeAppPath","getIsPossibleServerAction","RSC_HEADER","NEXT_ROUTER_PREFETCH_HEADER","NEXT_IS_PRERENDER_HEADER","NEXT_DID_POSTPONE_HEADER","RSC_CONTENT_TYPE_HEADER","getBotType","isBot","CachedRouteKind","IncrementalCacheKind","FallbackMode","parseFallbackField","RenderResult","CACHE_ONE_YEAR","HTML_CONTENT_TYPE_HEADER","NEXT_CACHE_TAGS_HEADER","ENCODED_TAGS","sendRenderResult","NoFallbackError","GlobalError","__next_app__","require","__next_app_require__","loadChunk","__next_app_load_chunk__","entryBase","RedirectStatusCode","InvariantError","scheduleOnNextTick","isInterceptionRouteAppPath","routeModule","definition","kind","APP_PAGE","page","pathname","bundlePath","filename","appPaths","userland","loaderTree","tree","distDir","process","env","__NEXT_RELATIVE_DIST_DIR","relativeProjectDir","__NEXT_RELATIVE_PROJECT_DIR","handler","req","res","ctx","prerenderManifest","isDev","hrtime","bigint","srcPage","TURBOPACK","replace","multiZoneDraftMode","__NEXT_MULTI_ZONE_DRAFT_MODE","isMinimalMode","Boolean","MINIMAL_MODE","prepareResult","prepare","statusCode","end","waitUntil","Promise","resolve","buildId","query","params","pageIsDynamic","buildManifest","nextFontManifest","reactLoadableManifest","serverActionsManifest","clientReferenceManifest","subresourceIntegrityManifest","isDraftMode","resolvedPathname","revalidateOnlyGenerated","routerServerContext","nextConfig","parsedUrl","interceptionRoutePatterns","normalizedSrcPage","isOnDemandRevalidate","prerenderInfo","experimental","ppr","cacheComponents","match","isPrerendered","routes","userAgent","headers","botType","isHtmlBot","isPrefetchRSCRequest","isRSCRequest","isPossibleServerAction","couldSupportPPR","hasDebugStaticShellQuery","__NEXT_EXPERIMENTAL_STATIC_SHELL_DEBUGGING","__nextppronly","hasDebugFallbackShellQuery","isRoutePPREnabled","dynamicRoutes","renderingMode","experimentalTestProxy","isDebugStaticShell","isDebugDynamicAccesses","isDebugFallbackShell","minimalPostponed","undefined","isDynamicRSCRequest","segmentPrefetchHeader","serveStreamingMetadata","htmlLimitedBots","isSSG","supportsRDCForNavigations","supportsDynamicResponse","shouldWaitOnAllReady","ssgCacheKey","staticPathKey","ComponentMod","serverModuleMap","method","tracer","activeSpan","getActiveScopeSpan","render404","varyHeader","getVaryHeader","setHeader","invokeRouteModule","span","context","nextReq","nextRes","render","finally","setAttributes","rootSpanAttributes","getRootSpanAttributes","get","handleRequest","console","warn","route","name","updateName","incrementalCache","doRender","postponed","fallbackRouteParams","forceStaticRender","sharedContext","serverComponentsHmrCache","renderOpts","App","Document","pageConfig","Component","setCacheStatus","setIsrStatus","setReactDebugChannel","dir","NEXT_RUNTIME","join","cwd","assetPrefix","nextConfigOutput","output","crossOrigin","trailingSlash","images","previewProps","preview","deploymentId","enableTainting","taint","reactMaxHeadersLength","cacheLifeProfiles","cacheLife","basePath","serverActions","nextExport","isStaticGeneration","expireTime","staleTimes","dynamicOnHover","inlineCss","authInterrupts","clientTraceMetadata","clientParamParsingOrigins","onClose","cb","on","onAfterTaskError","onInstrumentationRequestError","error","_request","errorContext","onRequestError","err","dev","result","metadata","cacheControl","fetchTags","cacheTags","fetchMetrics","revalidate","staticBailoutInfo","Error","description","stack","message","substring","indexOf","value","html","rscData","flightData","status","segmentData","responseGenerator","hasResolved","previousCacheEntry","previousIncrementalCacheEntry","isRevalidating","isProduction","didRespond","writableEnded","fallbackMode","fallback","PRERENDER","BLOCKING_STATIC_RENDER","isStale","NOT_FOUND","adapterPath","cacheKey","fallbackResponse","handleResponse","routeKind","isFallback","incrementalCacheEntry","responseCache","getResponseCache","c","expire","PAGES","EMPTY","pageData","cacheEntry","cachedData","didPostpone","isMiss","getHeader","tags","matchedSegment","generateEtags","poweredByHeader","fromStatic","onCacheEntry","finished","url","key","Object","entries","Array","isArray","v","appendHeader","toString","contentType","body","__NEXT_TEST_MODE","unshift","createPPRBoundarySentinel","push","ReadableStream","start","controller","enqueue","CLOSED","BODY_AND_HTML","close","transformer","TransformStream","readable","then","pipeTo","writable","catch","abort","e","withPropagatedContext","trace","spanName","SERVER","attributes","routerKind","routePath","routeType","revalidateReason","TextEncoder","encode"],"mappings":";;;;;;;;AAwBA,SACEgB,gBAAgB,EAChBC,4BAA4B,QACvB,sCAAqC;AAG5C,SAASG,yBAAyB,QAAQ,8CAA6C;AASvF,SACEQ,eAAe,EACfC,oBAAoB,QAKf,8BAA6B;AACpC,SAASC,YAAY,EAAEC,kBAAkB,QAAQ,qBAAoB;AACrE,OAAOC,kBAAkB,6BAA4B;AACrD,SACEC,cAAc,EACdC,wBAAwB,EACxBC,sBAAsB,QACjB,sBAAqB;AAE5B,SAASC,YAAY,QAAQ,yCAAwC;AACrE,SAASC,gBAAgB,QAAQ,4BAA2B;AAC5D,SAASC,eAAe,QAAQ,8CAA6C;AAU7E,yEAAyE;AACzE,UAAU;AACV,cAAc;AAEd,OAAOC,iBAAiB,+BAA+B;IAAE,wBAAwB;AAAsB,EAAC;AAExG,SAASA,WAAW,GAAE;AAMtB,8BAA8B;AAC9B,iCAAiC;;AAEjC,OAAO,MAAMC,eAAe;IAC1BC,SAASC;IACTC,WAAWC;AACb,EAAC;AAED,YAAYC,eAAe,0CAA0C;IAAE,wBAAwB;AAAsB,EAAC;IAuBpHqB,oBAAoBH,QAAQC,GAAG,CAACG,2BAA2B,IAAI;;IAiB/D,6DAA6D;IAG7D,OAAO,IAAIS,YAAY,UAAU;QAC/B,0CAA0C;QAC1CA,UAAU;IACZ;AAlIF,MAAA,GACE5E,kBAAkB,QAEb,EAAA,yDAA2D;AAAqC,EAAC,IAAA,gCAAA;IAE7C,EAAA,sBAAwB,eAAA;AAEnF,MAAA,GAASE,mBAAmB,QAAQ,IAAA,iCAAoC;AAExE,MAAA,GAASG,cAAc,EAAEC,cAAc,IAAA,IAAQ,4BAA2B;AAE1E,MAAA,GAASE,cAAc,QAAQ,eAAA,2BAAyC;AAExE,MAAA,GAASE,eAAe,EAAEC,YAAAA,IAAgB,QAAQ,8BAA6B;AAE/E,MAAA,GACEE,sBAAsB,EACtBC,EAAAA,6BAA+B,QAE1B,uCAAsC;;;;;;;;;;;;;;;;;;;;;;;;;;AAkE7C,SAASgC,kBAAkB,QAAQ,sCAAA,SAA8C;AACjF,SAASC,CAAAA,aAAc,QAAQ,mCAAkC;AACjE,MAAA,GAASC,IAAAA;IAAAA;IAAAA,SAAkB,QAAQ,sBAAqB;QACxD,SAASC,GAAAA;YAAAA;YAAAA,WAA0B,QAAQ,oDAAmD;gBAE9F,YAAA;oBAAA,CAAc;oBAAA,oCAA0C;4BAAE,QAAA;4BAAA;4BAAA,CAA8C,EAAtB,AAAuB;4BAAA;gCAEzG,UAAA,CAAA;gCAAA,QAAA;oCAAA;oCAAA,IAA4D;iCAAA;4BAC5D;yBAAA,KAAO,MAAMC,cAAc,IAAIlD,mBAAmB;;qBAChDmD,YAAY;8BACVC,IAAAA,CAAMnD,CAAAA;oBAAAA;iBAAAA,KAAUoD,QAAQ;;iBACxBC,MAAM;sBACNC,IAAAA,CAAAA,GAAU;gBAAA,WAAA;oBAAA;oBAAA;iBAAA;;eACV,2CAA2C;;SAC3CC,YAAY;cACZC,IAAAA;YAAAA,KAAU;YAAA;SAAA;cACVC,KAAAA;YAAAA,IAAU,EAAE;YAAA;SAAA;UACd,WAAA;YAAA;YAAA;SAAA;UACAC,UAAU,CAAA;YAAA;YAAA;SAAA;cACRC,UAAAA;YAAAA,CAAYC;YAAAA;SAAAA;UACd,cAAA;YAAA;YAAA;SAAA;;GACAC,SAASC,QAAQC,GAAG,CAACC,wBAAwB,IAAI;;;IAWjD,EAAA,EAAIf,YAAYuB,KAAK,EAAE,EAAA,sBAAA,CAAA,CAAA,IAAA,CAAA;QACrBpE,eAAegE,KAAK,IAAA,sBAAA,CAAA,CAAA,IAAgCN,CAAAA,OAAQW,MAAM,CAACC,MAAM;AAC3E,MAAA,eAAA;IACA,IAAIC,KAAAA,KAAU;IAEd,WAAA,6CAAwD;IACxD,mDAAmD;;;;;;;CAiBjDG,KAAAA,cAAAA,IAAAA,kZAAAA,CAAAA;IACF,YAAA;QAEI,CAACK,KAAAA,kYAAAA,CAAe,QAAA;QAClBd,IAAIgB,EAAAA,QAAU,GAAG;QACjBhB,IAAIiB,GAAG,CAAC,EAAA;QACRhB,IAAIiB,SAAS,oBAAbjB,IAAIiB,MAAAA,GAAS,MAAbjB,KAAgBkB,QAAQC,OAAO;QAC/B,OAAO,KAAA;QACT,UAAA;QAEA,EAAM,EACJC,MAAAA,CAAO,CAAA,CACPC,KAAK,EACLC,MAAM,EACNC,aAAa,EACbC,aAAa,EACbC,gBAAgB,EAChBC,qBAAqB,EACrBC,qBAAqB,EACrBC,uBAAuB,EACvBC,4BAA4B,EAC5B5B,iBAAiB,EACjB6B,WAAW,EACXC,gBAAgB,EAChBC,uBAAuB,EACvBC,mBAAmB,EACnBC,UAAU,EACVC,SAAS,EACTC,yBAAyB,EAC1B,GAAGvB;IAEJ,MAAMwB,oBAAoBzF,iBAAiByD;IAE3C,IAAI,EAAEiC,IAAAA,gBAAoB,EAAE,GAAGzB;QAE/B,YAAA,2DAA2E;IAC3E,6EAA6E;IAC7E,SAAA,iDAAA,sBAAuE;IACvE,oBAAA,wCAAA,SAAwE;IACxE,qEAAqE;AACrE,eAAA,QAAA,GAAA,EAAA,GAAA,EAAA,GAAA,sCAA6E;IAC7E,IAAA,uDAA2D;IAC3D,IAAA,EAAM0B,UAAAA,KAAAA,CACJL,CAAAA,UAAWM,YAAY,CAACC,GAAG,IAC3B,CAACP,WAAWQ,eAAe,IAC3BhE,2BAA2BqD,oBACvB,OACApD,YAAYgE,KAAK,CAACZ,kBAAkB9B;QAE1C,IAAA,EAAM2C,sWAAAA,EAAAA,GAAgB,CAAC,CAAC3C,kBAAkB4C,MAAM,CAACd,OAAAA,QAAAA,EAAiB,IAAA,CAAA,MAAA;IAElE,MAAMe,YAAYhD,IAAIiD,OAAO,CAAC,aAAa,IAAI;IAC/C,IAAA,EAAMC,QAAAA,EAAU7F,WAAW2F;IAC3B,MAAMG,YAAYxG,iBAAiBqD,qBAAAA;IAEnC,mDAAA;;;QAIA,IAAMoD,MAAAA,QAAAA,OAAAA,CAAAA,CACJnH,WAAAA,IAAe+D,GAAAA,EAAK,2BACpBA,IAAIiD,OAAO,CAAChG,4BAA4B,KAAK,IAAI,4CAA4C;;QAE/F,0CAAA,yCAAuF;QAEvF,EAAMoG,QAAAA,OACJpH,eAAe+D,KAAK,mBAAmBa,QAAQb,IAAIiD,OAAO,CAACjG,WAAW;IAExE,MAAMsG,yBAAyBvG,0BAA0BiD;IAEzD,MAAA;;;QAIA,IAAMuD,kBAA2BhH,qBAC/B6F,WAAWM,YAAY,CAACC,GAAG;QAG7B,qEAAyE;IACzE,wCAAwC;IACxC,IAAA,CAAA,CAAMa,cAAAA,aACJ9D,QAAQC,GAAG,CAAC8D,0CAA0C,KAAK,OAC3D,OAAOlC,MAAMmC,aAAa,KAAK,eAC/BH;QAEF,IAAA,UAAA,GAAA,iDAAsE;QACtE,IAAA,GAAA,CAAA,iCAA6C;QAC7C,EAAMI,EAAAA,SAAAA,IAAAA,OAAAA,KAAAA,EACJH,EAAAA,IAAAA,SAAAA,CAAAA,IAAAA,CAAAA,KAAAA,EAA4BjC,MAAMmC,OAAAA,MAAa,KAAK;QAEtD,OAAA,iEAA4E;IAC5E,8CAA8C;IAC9C,MAAME,EAAAA,OAAAA,EAAAA,KAAAA,EAAAA,EACJL,IAAAA,EAAAA,aACC,CAAA,CAAA,CACCpD,QAAAA,IAAAA,EAAAA,YAAkB4C,IAAAA,EAAM,CAACR,kBAAkB,EAAA,EAC3CpC,kBAAkB0D,GAAAA,EAAAA,QAAa,CAACtB,cAAAA,EAAAA,EAAkB,qBAFnD,AACCpC,KAAAA,CAEC2D,CAAAA,YAAa,KAAA,CAAK,CAAA,WAAA,EAAA,QACnB,QAAA,EAAA,uBAAA,EAAA,mBAAA,EAAA,UAAA,EAAA,GAAuE,MAAA,EAAA,yBAAA,EAAA,GAAA;IACvE,MAAA,oBAAA,IAAA,iYAAA,EAAA,6BAAwE;IACxE,IAAA,EAAA,oBAAA,EAAA,GAAA,yCAAwE;IACxE,+BAA+B,4CAAA;IAC9BN,4BACE3E,CAAAA,YAAYuB,KAAK,KAAK,QACrB+B,CAAAA,iBAAAA,sBAAAA,oBAAqB4B,qBAAqB,MAAK,IAAG,CAAE;IAE5D,MAAMC,qBACJR,4BAA4BI,gBAAAA;IAE9B,oEAAoE,IAAA;IACpE,iEAAiE,IAAA;IACjE,MAAMK,yBACJD,sBAAsBnF,YAAYuB,KAAK,KAAK,EAAA;IAE9C,MAAM8D,uBAAuBP,8BAA8BC;IAE3D,MAAA,gBAAA,WAAA,YAAA,CAAA,GAAA,IAAA,CAAA,WAAA,UAA2E,KAAA,IAAA,IAAA,qZAAA,EAAA,oBAAA,OAAA,YAAA,KAAA,CAAA,kBAAA;IAC3E,MAAA,gBAAA,CAAA,CAAA,kBAAA,MAAA,CAAA,iBAAA,MAAwE;IACxE,MAAA,IAAU,QAAA,IAAA,OAAA,CAAA,aAAA,IAAA;IACV,MAAMO,UAAAA,IAAAA,SAAmBP,+XAAAA,EAAAA,kBACrB3H,eAAe+D,KAAK,eACpBoE;IAEJ,MAAA,YAAA,IAAA,uXAAA,EAAA,uCAA0E;IAC1E,wEAAwE;;;IAKxE,EAAA,MAAA,uBAAA,IAAA,wWAAA,EAAA,KAAA,2BAAA,IAAA,OAAA,CAAA,QAAkG,oYAAA,CAAA,KAAA,IAAA,4CAAA;;IAElG,0EAA0E,aAAA;IAC1E,IAAIxD,EAAAA,aAAe,EAAA,IAAA,wWAAA,EAAA,KAAA,mBAAA,QAAA,IAAA,OAAA,CAAA,2XAAA,CAAA;QACjByD,EAAAA,oBAAsBA,KAAAA,IAAAA,kBAAuB,CAAC,CAACF,0XAAAA,EAAAA;IACjD;;;IAIA,EAAA,MAAA,kBAAA,IAAA,yXAAA,EAAA,WAAA,YAAA,CAAA,EAAyE,CAAA;IACzE,yEAAyE;IACzE,MAAMG,wBAAwBrI,UAAAA,KAAe+D,KAAK;IAElD,MAAA,2BAAA,yCAA0E,GAAA,OAAA,OAAA,MAAA,aAAA,KAAA,eAAA;IAC1E,sEAAA,SAA+E;IAC/E,6CAAA,8BAA2E;IAC3E,MAAA,6BAAA,YAA+C,gBAAA,MAAA,aAAA,KAAA;IAC/C,MAAMuE,yBACJpB,aAAaS,oBACT,QACA,CAACZ,GAAAA,SACC,OACApG,6BAA6BoG,WAAWZ,WAAWoC,eAAe;IAE1E,MAAMC,QAAQ5D,QACZ,AAAC4B,CAAAA,iBACCK,MAAAA,WACA3C,kBAAkB4C,MAAM,CAACR,kBAAiB,AAAC,KAC3C,uEAAuE;IACvE,MAAA,oBAAA,IAA8B,eAAA,CAAA,CAAA,CAAA,QAAA,kBAAA,MAAA,CAAA,kBAAA,IAAA,kBAAA,aAAA,CAAA,kBAAA,KAAA,OAAA,KAAA,IAAA,MAAA,aAAA,MAAA,sBAAA,uEAAA;IAC9B,CAAEY,CAAAA,aAAaS,iBAAgB,wCAAA;IAGnC,wEAAA,GAA2E;IAC3E,MAAMc,yBAAAA,GACJd,qBAAqBxB,WAAWQ,eAAe,KAAK;IAEtD,4BAAA,CAAA,YAAA,KAAA,KAAA,QAA2D,CAAA,uBAAA,OAAA,KAAA,IAAA,oBAAA,qBAAA,MAAA,IAAA,CAAA;IAC3D,MAAM+B,qBAAAA,KACJ,uBAAA,gDAAuE;IACvE,6DAA6D,OAAA;IAC7D9F,YAAYuB,KAAK,KAAK,QACtB,mCAAA,kCAAqE;IACrE,MAAA,UAAgB,eAAA,sBAAA,YAAA,KAAA,KAAA;IAChB,CAACqE,KAAAA,IACD,mBAAA,8BAAA,kBAAmE;IACnE,QAAQ,mEAAA;IACR,OAAON,qBAAqB,YAC5B,gCAAA,oCAAoE;IACpE,UAAA,uEAAiF;IACjF,MAAA,mBAAA,oBAAA,IAAA,wWAAA,EAAA,GAA+D,EAAA,eAAA;IAC9DO,CAAAA,6BAA6BzI,eAAe+D,KAAK,oBAE9C,IAAA,iEAAqE;IACrE,mEAAmE,KAAA;IACnE,0DAAA,KAA+D;IAC/DqE,IAAAA,mBAAuB,CAACzD,EAAAA,cAExByD,OAAAA,YAAkB,IAAA,CAAA;IAExB,uEAAuE,2BAAA;IACvE,MAAMO,uBAAuBzB,aAAaS,yEAAAA;IAE1C,IAAIiB,cAA6B,wDAAA;IACjC,IACE,CAAC7C,cAAAA,CACDyC,SACA,CAACE,2BACD,CAACrB,0BACD,CAACa,oBACD,CAACE,qBACD;QACAQ,cAAc5C,QAAAA,uBAAAA,CAAAA,CAAAA;IAChB;IAEA,mDAAmD,sBAAA;IACnD,6DAA6D,IAAA;IAC7D,8DAA8D,WAAA;IAC9D,oCAAoC,qCAAA;IACpC,IAAI6C,EAAAA,cAAgBD,UAAAA,IAAAA,wWAAAA,EAAAA,KAAAA;IACpB,IAAI,CAACC,iBAAiBjG,YAAYuB,KAAK,EAAE,iCAAA;QACvC0E,gBAAgB7C,2DAAAA;IAClB,2EAAA;IAEA,+CAAA,4BAA2E;IAC3E,MAAA,yBAAA,aAAA,oBAAA,QAAA,CAAyE,YAAA,OAAA,IAAA,mYAAA,EAAA,WAAA,WAAA,eAAA;IACzE,MAAA,QAAA,QAAA,CAAA,SAAgC,QAAA,iBAAA,kBAAA,MAAA,CAAA,kBAAA,KAAA,uEAAA;IAChC,IACE,CAACpD,YAAYuB,KAAK,IAClB,CAAC4B,GAAAA,YACDyC,SACApB,gBACA,CAACgB,qBACD;QACAjI,WAAAA,QAAmB4D,IAAIiD,KAAAA,EAAO;IAChC,2EAAA;IAEA,MAAM8B,eAAe,aAAA,qBAAA,WAAA,eAAA,KAAA;QACnB,GAAGvG,SAAS,2CAAA;QACZgB,EAAAA,8BACAtB,yDAAAA;QACA6B,QAAAA,KAAAA,KAAAA,QAAAA,qEAAAA;QACAlB,YAAAA;QACAV,MAAAA,mEAAAA;IACF,QAAA;IAEA,OAAA,qBAAA,YAAA,kCAA0E,kCAAA;IAC1E,qEAAqE,YAAA;IACrE,+DAAA,WAA0E;IAC1E,CAAA,GAAI0D,yBAAyBC,CAAAA,IAAAA,wWAAAA,EAAAA,KAAAA,IAAyB,oBACpDpF,+BAA+B,gCAAA;YAC7BuC,MAAMsB,iDAAAA;YACNuB,eAAAA,CAAAA,gBAAAA,mBAAAA;YACAD,+DAAAA;YACAmD,iBAAiBnI,IAAAA,aAAAA,KAAsB;gBACrCgF,MAAAA;YACF,YAAA,SAAA,CAAA,2BAAA,CAAA,0BAAA,CAAA,oBAAA,CAAA,qBAAA;QACF,cAAA;IACF;IAEA,MAAMoD,SAASjF,IAAIiF,MAAM,IAAI,sBAAA;IAC7B,MAAMC,SAASpJ,8CAAAA;IACf,MAAMqJ,aAAaD,OAAOE,kBAAkB,kBAAA;IAE5C,MAAMC,YAAY,kBAAA;QAChB,gBAAA,4CAA4D;QAC5D,CAAA,GAAIlD,cAAAA,YAAAA,KAAAA,EAAAA,MAAAA,oBAAqBkD,SAAS,EAAE;YAClC,MAAMlD,MAAAA,cAAoBkD,SAAS,CAACrF,KAAKC,KAAKoC,WAAW;QAC3D,OAAO;YACLpC,IAAIiB,GAAG,CAAC,2DAAA;QACV,qEAAA;QACA,OAAO,qBAAA;IACT,IAAA,CAAA,YAAA,KAAA,IAAA,CAAA,eAAA,SAAA,gBAAA,CAAA,qBAAA;YAEI,wYAAA,EAAA,IAAA,OAAA;QACF,MAAMoE,aAAazG,YAAY0G,aAAa,CAC1CtD,kBACAK;QAEFrC,EAAAA,EAAIuF,SAAS,CAAC,GAAA,KAAQF;QACtB,GAAA,GAAMG,mYAAAA,cAAoB,OACxBC,MACAC;YAEA,MAAMC,UAAU,IAAIvJ,gBAAgB2D;yBACpC,MAAM6F,4YAAAA,SAAU,IAAIvJ,iBAAiB2D;YAErC,OAAOpB,YAAYiH,MAAM,CAACF,SAASC,SAASF,SAASI,OAAO,CAAC;gBAC3D,IAAI,CAACL,MAAM;gBAEXA,KAAKM,aAAa,CAAC;oBACjB,oBAAoB/F,IAAIgB,UAAU;oBAClC,YAAY,8CAAA;gBACd,yDAAA;gBAEA,MAAMgF,qBAAqBf,OAAOgB,qBAAqB,OAAA;gBACvD,iBAAA,yBAAA,uBAAiE;oBACjE,IAAI,CAACD,gYAAAA,EAAAA,EAAoB;oBACvB;gBACF;gBAEA,IACEA,mBAAmBE,GAAG,CAAC,sBACvBjK,eAAekK,aAAa,EAC5B;oBACAC,QAAQC,CAAAA,IAAAA,GAAI,CACV,CAAC,2XAAA,EAAA,UAA2B,EAAEL,mBAAmBE,GAAG,CAClD,kBACA,qEAAqE,CAAC;oBAE1E;gBACF;gBAEA,MAAMI,QAAQN,mBAAmBE,GAAG,CAAC;gBACrC,IAAII,OAAO;oBACT,GAAA,GAAMC,GAAAA,IAAO,GAAGvB,OAAO,CAAC,EAAEsB,OAAO;wBAEjCb,KAAKM,oWAAAA,UAAa,CAAC;wBACjB,MAAA,QAAcO,UAAAA;wBACd,cAAcA;wBACd,kBAAkBC,0BAAAA;oBACpB,eAAA,OAAA,KAAA,IAAA,oBAAA,SAAA,EAAA;oBACAd,KAAKe,UAAU,CAACD,EAAAA,SAAAA,CAAAA,KAAAA,KAAAA,WAAAA;gBAClB,OAAO;oBACLd,KAAKe,UAAU,CAAC,GAAGxB,OAAO,CAAC,EAAE1E,SAAS;gBACxC;YACF,GAAA;QACF;QAEA,MAAMmG,mBAAmBzK,eAAe+D,KAAK;QAE7C,MAAM2G,WAAW,EAAA,KAAO,EACtBjB,IAAI,CAAA,CACJkB,SAAS,EACTC,CAAAA,CAAAA,iBAAmB,CAAA,CACnBC,iBAAiB,EAuBlB;YACC,MAAMnB,GAAAA,CAAAA,MAAsC,EAAA;gBAC1CpE,kBAAAA,OAAAA,MAAAA;gBACAC,EAAAA,UAAAA,IAAAA,8WAAAA,CAAAA;gBACAvC,EAAAA,IAAMsD,MAAAA,IAAAA,+WAAAA,CAAAA;gBACNwE,GAAAA,YAAe,MAAA,CAAA,SAAA,SAAA,SAAA,OAAA,CAAA;oBACbzF,CAAAA,MAAAA;gBACF,KAAA,aAAA,CAAA;oBACA0F,oBAAAA,EAA0B/K,EAAAA,UAAAA,GACxB+D,KACA;oBAEF6G,YAAAA;gBACAI,YAAY;oBACVC,EAAAA,GAAK,IAAM,cAAA,OAAA,qBAAA;oBACXC,UAAU,IAAM,+CAAA;oBAChBC,CAAAA,WAAY,CAAC,QAAA;oBACbrC;oBACAsC,WAAWlL,eAAe4I;oBAE1BvD,mBAAAA,GAAAA,CAAAA,sBAAAA,kXAAAA,CAAAA,aAAAA,EAAAA;oBACA3C,QAAAA,IAAAA,CAAAA,CAAAA,2BAAAA,EAAAA,mBAAAA,GAAAA,CAAAA,kBAAAA,qEAAAA,CAAAA;oBACAI,MAAMsB;oBACNqG;oBACAhC,EAAAA,QAAAA,mBAAAA,GAAAA,CAAAA;oBACAL,OAAAA;oBACAI,MAAAA,OAAAA,GAAAA,OAAAA,CAAAA,CACE,CAAA,MAAOiC,CAAAA,aAAc,YAAYjC;oBACnCjD,KAAAA,aAAAA,CAAAA;wBACAC,cAAAA;wBACAC,cAAAA;wBACAG,kBAAAA;oBACAF;oBACAC,KAAAA,UAAAA,CAAAA;oBACAwF,GAAAA,WAAc,EAAEnF,uCAAAA,oBAAqBmF,cAAc;oBACnDC,KAAAA,OAAY,EAAEpF,CAAAA,CAAAA,GAAAA,OAAAA,CAAAA,EAAAA,SAAAA,eAAAA,oBAAqBoF,YAAY;oBAC/CC,oBAAoB,EAAErF,uCAAAA,oBAAqBqF,oBAAoB;oBAE/DC,KACE/H,QAAQC,GAAG,CAAC+H,YAAY,KAAK,WACzB,AAACtJ,QAAQ,QAAkCuJ,IAAI,CAC7C,yBAAyB,GACzBjI,QAAQkI,GAAG,IACX/I,YAAYgB,kBAAkB,IAEhC,GAAGH,QAAQkI,GAAG,GAAG,CAAC,EAAE/I,YAAYgB,kBAAkB,EAAE;oBAC1DmC;oBACAkB,aAAAA,IAAAA,wWAAAA,EAAAA,KAAAA;oBACAV,KAAAA,OAAAA,EAAAA,IAAAA,EAAAA,SAAAA,EAAAA,mBAAAA,EAAAA,iBAAAA,EAAAA;oBACAc,QAAAA;oBACAuE,aAAazF,WAAWyF,WAAW;oBACnCC,kBAAkB1F,WAAW2F,MAAM;oBACnCC,EAAAA,WAAa5F,WAAW4F,WAAW;oBACnCC,WAAAA,IAAe7F,WAAW6F,aAAa;oBACvCC,QAAQ9F,WAAW8F,MAAM;oBACzBC,cAAchI,kBAAkBiI,OAAO;oBACvCC,cAAcjG,QAAAA,IAAAA,GAAWiG,qWAAAA,EAAY,KAAA;oBACrCC,gBAAgBlG,WAAWM,YAAY,CAAC6F,KAAK;oBAC7C/D,QAAAA,SAAiBpC,WAAWoC,eAAe;oBAC3CgE,KAAAA,IAAAA,cAAuBpG,WAAWoG,qBAAqB;oBAEvD9H,UAAAA,IAAAA;oBACAgG,YAAAA,CAAAA;oBACA+B,mBAAmBrG,WAAWsG,SAAS;oBACvCC,UAAUvG,CAAAA,IAAAA,UAAWuG,kXAAAA,EAAAA,GAAQ;oBAC7BC,eAAexG,WAAWM,YAAY,CAACkG,aAAa;oBAEpD,GAAI5E,sBACJC,0BACAC,uBACI;wBACE2E,EAAAA,UAAY;wBACZlE,yBAAyB;wBACzBmE,oBAAoB;wBACpB7E,wBAAwBA;oBAC1B,IACA,CAAC,CAAC,mBAAA,OAAA,cAAA,YAAA;oBACNrB,iBAAiB/B,QAAQuB,WAAWQ,eAAe;oBACnDF,cAAc;wBACZkB;wBACAmF,YAAY3G,WAAW2G,UAAU;wBACjCC,YAAY5G,WAAWM,YAAY,CAACsG,UAAU;wBAC9CC,gBAAgBpI,QAAQuB,WAAWM,YAAY,CAACuG,cAAc;wBAC9DC,WAAWrI,CAAAA,OAAQuB,WAAWM,KAAAA,OAAY,CAACwG,IAAAA,IAAAA,CAAS,mBAAA,cAAA;wBACpDC,UAAAA,MAAgBtI,QAAQuB,SAAAA,EAAWM,KAAAA,KAAAA,EAAY,CAACyG,CAAAA,aAAc,OAAA,YAAA;wBAC9DC,kBAAAA,GACEhH,WAAWM,SAAAA,GAAY,CAAC0G,GAAAA,KAAAA,IAAAA,OAAmB,IAAK,EAAE,OAAA,oBAAA;wBACpDC,CAAAA,0BACEjH,WAAWM,EAAAA,QAAAA,CAAY,CAAC2G,MAAAA,IAAAA,CAAAA,cAAyB,WAAA,GAAA,QAAA,GAAA,IAAA,YAAA,kBAAA,IAAA;oBACrD;oBAEAlI,WAAWjB,IAAIiB,SAAS;oBACxBmI,SAAS,CAACC;wBACRtJ,IAAIuJ,EAAE,CAAC,SAASD;oBAClB,aAAA,WAAA,WAAA;oBACAE,kBAAkB,KAAO,MAAA,MAAA;oBAEzBC,aAAAA,WAAAA,OAA+B,CAACC,GAAAA,IAAOC,UAAUC,eAC/ChL,YAAYiL,cAAc,CACxB9J,KACA2J,OACAE,cACA1H;oBAEJ4H,KAAK9N,UAAAA,KAAe+D,KAAK,CAAA,aAAA;oBACzBgK,KAAKnL,GAAAA,SAAYuB,EAAAA,GAAK,GAAA;oBACxB,cAAA,kBAAA,OAAA;oBACF,cAAA,WAAA,YAAA;oBAEI4D,gBAAAA,EAAsBC,SAAAA,YAAAA,CAAAA,EAAwB,GAAA;oBAChD0B,IAAQsB,UAAU,CAAC4B,EAAAA,QAAU,GAAG,eAAA;oBAChClD,IAAQsB,UAAU,CAACtC,QAAAA,WAAAA,IAAuB,GAAG,cAAA;oBAC7CgB,IAAQsB,UAAU,CAAChD,sBAAsB,GAAGA;oBAC9C;oBAEA,mBAAA,WAAA,SAAA,0BAAyE;oBACzE,KAAa,KAAA,WAAA,QAAA;oBACT6C,eAAmB,WAAA,YAAA,CAAA,aAAA;oBACrBnB,GAAAA,CAAQsB,UAAU,CAACtC,UAAAA,aAAuB,GAAG,UAAA,uBAAA;wBAC/C,YAAA;wBAEMsF,GAAS,MAAMxE,gBAAAA,EAAkBC,MAAMC;wBAErCuE,IAAQ,EAAE,GAAGD,WAAAA;wBAGnBE,QAAY,EACZlH,UAAU,CAAC,CAAC,EACZ,oEAAoE;oBACpEmH,GAAWC,CAAAA,CAAAA,CAAAA,MAAS,EACpBC,YAAY,EACb,GAAGJ;oBAEAG,OAAW,UAAA,QAAA,WAAA,eAAA;oBACbpH,GAAO,CAACnF,UAAAA,aAAuB,GAAGuM;wBACpC;wBAEA,YAAA,WAAA,UAAA,cAA2D;;wBAC7CC,IAAY,GAAGA,SAAAA,QAAAA,WAAAA,YAAAA,CAAAA,cAAAA;wBAE7B,WAAA,QAAA,WAAA,YAAA,CAAA,GAA0D,MAAA;wBAC1D,gBAAA,QAAA,WAAA,YAAA,CAAA,IAAgE,UAAA;wBAChE,qBAAA,WAAA,SAAqD,GAAA,CAAA,mBAAA,IAAA,EAAA;wBAEnD7F,CACA0F,CAAAA,yBAAAA,OAAAA,IAAAA,SAAcI,GAAAA,CAAAA,MAAU,MAAK,KAC7B,CAAC1L,OAAAA,KAAYuB,KAAK,IAClB,CAACwD,mBACD;oBACA,EAAM4G,oBAAoBN,SAASM,iBAAiB;oBAEpD,EAAMT,MAAM,GAAA,IAAA,SAAA,KAOX,CAPW,IAAIU,MACd,CAAC,+CAA+C,EAAExI,mBAChDuI,CAAAA,qCAAAA,kBAAmBE,WAAW,IAC1B,CAAC,UAAU,EAAEF,kBAAkBE,WAAW,EAAE,GAC5C,EAAE,EACN,GACA,CAAC,4EAA4E,CAAC,GANtE,qBAAA;2BAAA,EAAA,CAAA;gCAAA,QAAA;kCAAA;oBAOZ,kBAAA,KAAA;oBAEIF,+BAAAA,CAAAA,KAAAA,EAAAA,UAAAA,MAAmBG,KAAK,EAAE,EAAA,YAAA,cAAA,CAAA,KAAA,OAAA,cAAA;oBAC5B,KAAA,IAAA,CAAMA,QAAQH,+VAAAA,EAAAA,KAAAA,OAAkBG,KAAK;oBACrCZ,IAAIY,CAAAA,IAAK,GAAGZ,IAAIa,CAAAA,KAAAA,CAAO,GAAGD,MAAME,SAAS,CAACF,MAAMG,OAAO,CAAC;gBAC1D;gBAEA,MAAMf;YACR,IAAA,sBAAA,wBAAA;gBAEA,GAAO,KAAA,UAAA,CAAA,UAAA,GAAA;gBACLgB,OAAO,CAAA,UAAA,CAAA,uBAAA,GAAA;oBACLhM,IAAAA,EAAMxB,QAAAA,CAAAA,OAAgByB,QAAQ,OAAA,GAAA;oBAC9BgM,MAAMf;oBACNhH,iEAAAA;oBACAgI,KAAAA,IAASf,SAASgB,UAAU;oBAC5BtE,WAAWsD,IAAAA,KAAStD,SAAS;oBAC7BuE,IAAAA,IAAQjB,MAAAA,CAAAA,EAASjJ,UAAU,WAAA,GAAA;oBAC3BmK,aAAalB,SAASkB,WAAW;gBACnC,EAAA,SAAA,MAAA,kBAAA,MAAA;gBACAjB,EAAAA,EAAAA,QAAAA,EAAAA,GAAAA;YACF,MAAA,EAAA,YAAA,EAAA,UAAA,CAAA,CAAA,EACF,WAAA,SAAA,EAAA,YAAA,EAAA,GAAA;YAEA,EAAMkB,EAAAA,WAAAA,OAAuC,OAAO,EAClDC,WAAW,EACXC,oBAAoBC,6BAA6B,EACjDC,cAAc,EACd/F,IAAI,EACJoB,oBAAoB,KAAK,EAC1B;gBACC,EAAM4E,KAAAA,CAAAA,SAAe7M,YAAYuB,kVAAAA,CAAAA,GAAK,KAAK;YAC3C,MAAMuL,aAAaL,eAAerL,IAAI2L,aAAa;YAEnD,wDAAwD,GAAA;;YAExD,IACEpJ,YAAAA,GAAAA,SACAN,2BACA,CAACsJ,iCACD,CAAC5K,eACD;gBACA,IAAIuB,uCAAAA,WAAAA,SAAqBkD,SAAS,EAAE;oBAClC,MAAMlD,oBAAoBkD,SAAS,CAACrF,KAAKC,eAAAA;gBAC3C,OAAO,0CAAA;oBACLA,IAAIgB,CAAAA,CAAAA,QAAU,GAAG,KAAA,OAAA,KAAA,IAAA,aAAA,UAAA,MAAA,KAAA,CAAA,YAAA,KAAA,IAAA,CAAA,mBAAA;oBACjBhB,EAAAA,EAAIiB,GAAG,CAAC,cAAA,SAAA,iBAAA;gBACV,MAAA,MAAA,OAAA,cAAA,CAAA,IAAA,MAAA,CAAA,+CAAA,EAAA,mBAAA,CAAA,qBAAA,OAAA,KAAA,IAAA,kBAAA,WAAA,IAAA,CAAA,UAAA,EAAA,kBAAA,WAAA,EAAA,GAAA,EAAA,EAAA,GAAA,CAAA,4EAAA,CAAA,GAAA,qBAAA;oBACA,GAAO,IAAA;oBACT,YAAA;oBAEI2K,cAAAA;gBAEApJ,eAAe;gBACjBoJ,IAAAA,WAAenO,UAAAA,OAAAA,EAAmB+E,GAAAA,IAAAA,OAAcqJ,QAAQ,GAAA,KAAA,EAAA;oBAC1D,MAAA,QAAA,kBAAA,KAAA;oBAEA,IAAA,KAAA,GAAA,IAAA,OAAA,GAAA,MAAA,SAAA,CAAA,MAAA,OAAA,CAAA,UAA0E;gBAC1E,wEAA4E;gBAC5E,MAAA,gBAA0B;YAC1B,IAAID,iBAAiBpO,aAAasO,SAAS,IAAIzO,MAAM0F,YAAY;gBAC/D,GAAA,CAAI,CAACY,qBAAqBT,WAAW;oBACnC0I,GAAAA,YAAepO,aAAauO,sBAAsB;oBACpD,MAAA,oXAAA,CAAA,QAAA;oBACF,MAAA;oBAEIR,8CAAAA,8BAA+BS,OAAO,MAAK,CAAC,GAAG;oBACjDzJ,SAAAA,SAAAA,CAAuB,SAAA;oBACzB,WAAA,SAAA,SAAA;oBAEA,QAAA,MAAsB,GAAA,UAAA;oBACtB,aAAA,SAAA,WAAA,qBAA8D;gBAC9D,uCAA2C;gBAEzCA,wBACCqJ,CAAAA,iBAAiBpO,aAAayO,SAAS,IACtCV,6BAA4B,GAC9B;gBACAK,eAAepO,aAAauO,sBAAsB;YACpD;YAEA,EAAA,EACE,CAACpL,iBACDiL,OAAAA,EAAAA,QAAiBpO,GAAAA,EAAAA,QAAauO,YAAAA,UAAsB,IACpDlH,eAAAA,EACA,CAAC6G,aAAAA,CACD,CAAC3J,IAAAA,EAAAA,SACDP,WAAAA,KAAAA,CACCiK,CAAAA,gBAAgB,CAAC5I,aAAY,GAC9B;gBACA,EAAA,eAAA,YAAA,KAAA,KAAA,yBAAgE;gBAChE,EAAA,aAAA,eAAA,IAAA,aAA+C;gBAC/C,IAGE,AAFA,gDAAA,WAA2D;gBAC3D,kBAAkB,WAAA;gBACjB4I,CAAAA,gBAAgBjJ,OAAAA,MAAY,KAC7B,gBAAA,CAAA,iCAAA,CAAA,QAA2D,OAAA;gBAC3DoJ,IAAAA,aAAiBpO,UAAAA,GAAayO,IAAAA,KAAS,EACvC,EAAA,oBAAA,SAAA,EAAA;oBACA,IAAI9J,EAAAA,SAAWM,WAAAA,CAAY,CAACyJ,OAAAA,CAAAA,GAAW,EAAE;wBACvC,OAAO,MAAM9G;oBACf,IAAA,UAAA,GAAA;oBACA,IAAA,EAAM,CAAA,CAAA,EAAIpH;gBACZ;gBAEA,OAAA,oDAA2D;gBAC3D,mEAAmE;gBACnE,kEAAkE;gBAClE,eAAA,qDAAoE;gBACpE,eAAA,IAAA,kWAAA,EAAA,cAAA,QAAA,cAAsE;gBACtE,IACE2F,qBACCxB,CAAAA,WAAWQ,eAAe,GAAG,CAACyB,sBAAsB,CAAChB,YAAW,GACjE;oBACA,MAAM+I,WACJV,gBAAgB,QAAOjJ,yBAAAA,QAAAA,cAAeqJ,QAAQ,MAAK,WAC/CrJ,cAAcqJ,QAAQ,GACtBvJ;oBAEN,MAAMsE,sBACJ,wCAAA,4BAAoE;oBACpE,kBAAA,4BAA8C;oBAC9C6E,aAAAA,IAAgBjJ,wVAAAA,CAAAA,SAAAA,IAAAA,IAAAA,mYAAAA,EAAAA,KAAAA,OAAAA,OAAeoE,mBAAmB,IAC9CpK,gCACEgG,cAAcoE,mBAAmB,IAGnC,uDAAuD;oBACvD3C,CAAAA,qBAAAA,CACE1H,UAAAA,aAAuB+F,mBAAmB1D,eAC1C;oBAER,eAAA,4VAAA,CAAA,sBAAA,cAAgE;oBAChE,oCAAoC;oBACpC,MAAMwN,mBAAmB,MAAMxN,YAAYyN,cAAc,CAAC;wBACxDF,0BAAAA,OAAAA,KAAAA,IAAAA,8BAAAA,OAAAA,MAAAA,CAAAA,GAAAA;wBACApM,eAAAA;wBACAoC;wBACAmK,UAAAA,CAAW3Q,UAAUoD,QAAQ;wBAC7BwN,YAAY,sCAAA;wBACZrM,+BAAAA;wBACAyD,gBAAAA,CAAAA,iBAAAA,4VAAAA,CAAAA,SAAAA,IAAAA,6BAAAA,GAAAA;wBACAyH,OAAAA,4VAAmB,CAAA,SACjB1E,SAAS,IAAA;gCACPjB;gCACA,EAAA,iBAAA,4VAAA,CAAA,sBAAA,IAAA,EAA4D,eAAA,CAAA,cAAA,CAAA,eAAA,iBAAA,CAAA,gBAAA,CAAA,aAAA,GAAA;gCAC5D,QAAQ,wCAAA;gCACRkB,WAAWxC,oBAAAA;gCACXyC,IACAC,EAAAA,iBAAmB;4BACrB,KAAA,aAAA,KAAA,2DAAA;wBACF3F,SAAAA,EAAWjB,IAAIiB,sVAAAA,CAAAA,EAAS,OAAA,EAAA;wBACxBP,WAAAA,YAAAA,CAAAA,WAAAA,EAAAA;wBACF,OAAA,MAAA;oBAEA,wEAAwE;oBACxE,IAAIyL,EAAAA,IAAAA,gQAAqB,MAAM,OAAO;oBAEtC,qEAAqE;oBACrE,IAAIA,kBAAkB,iCAAA;wBACpB,2DAAA,WAAsE;wBACtE,iCAAiC,yBAAA;wBACjC,OAAOA,iBAAiBlC,YAAY,wBAAA;wBAEpC,OAAOkC,uDAAAA;oBACT,qBAAA,CAAA,WAAA,eAAA,GAAA,CAAA,sBAAA,CAAA,YAAA,GAAA;oBACF,MAAA,WAAA,gBAAA,OAAA,CAAA,iBAAA,OAAA,KAAA,IAAA,cAAA,QAAA,MAAA,WAAA,cAAA,QAAA,GAAA;oBACF,MAAA,sBAEA,8CAAA,kBAAwE;oBACxE,gBAAA,CAAA,iBAAA,OAAA,KAAA,IAAA,UAAoE,IAAA,mBAAA,IAAA,IAAA,uYAAA,EAAA,cAAA,mBAAA,IAChEzF,QACF,CAACpE,cAAAA,IAAAA,UAAwB,CAACiJ,mXAAAA,EAAAA,MAAkBtH,aAAAA,MACxCA,SAAAA,UACAC;oBAEN,gEAAA,EAA0E;oBAC1E,oCAAA,6BAAyE;oBACzE,MAAA,mBAAA,MAAA,YAAA,cAAA,CAAA,OAAyE;wBACzE,4CAAwD;wBAEtD,qDAA6D;wBAC7DM,iBACAhF,QAAQC,GAAG,CAAC+H,YAAY,KAAK,UAC7B,CAAC9G,iBACD8F,oBACArC,uBACA,uEAAuE;wBACvE,WAAA,kYAAA,CAAA,QAAA,8BAAuE;wBACvE,YAAA,6CAAqE;wBACrE,wDAAoE;wBACpE,uCAAmD;wBAClDyC,QACD,WAAA,UAAA,SAAA;gCACM2F,cAAwB,MAAM/F,iBAAiBP,GAAG,CACtDlE,kBACA;gCACQzE,eAAqBwB,QAAQ,qCAAA;gCACnC4E,OAAmB,CAAA;gCACP,WAAA;gCACd;gCAGF,mBAAA,kCAAqE;4BACrE,CAAa;wBAEX6I,WAAAA,IAAAA,MACAA,GAAAA,mBAAsB1B,KAAK,IAC3B0B,sBAAsB1B,KAAK,CAAChM,IAAI,KAAKxB,gBAAgByB,QAAQ,EAC7D;wBACA,gEAAoE;oBACpE,oDAAoD;oBACpD4H,YAAY6F,sBAAsB1B,KAAK,CAACnE,SAAS,uBAAA;oBAEjD,IAAA,qBAAA,MAAA,OAAA,wBAA8D;oBAC9D,qEAAA,CAAsE;oBACtE,IACE6F,kBAAAA,OACA,kEAAkE;wBAClE,sDAA0D,gBAAA;wBAC1D,UAAc,uBAAA;wBACbA,OAAAA,YAAsBR,KAAAA,EAAO,KAAK,CAAC,IAAA,CAClCQ,sBAAsBR,OAAO,KAAK,IAAG,GACvC;wBACA,OAAA,wDAA+D;wBAC/D,+BAA+B;wBAC/BtN,mBAAmB;4BACjB,MAAM+N,gBAAgB7N,YAAY8N,gBAAgB,CAAC3M;4BAEnD,IAAI,oDAAA;gCACF,MAAM0M,cAAcnC,UAAU,CAC5BtI,iBAAAA,CACAyE,kBACA9C,mBACA,OACA,CAACgJ,IACCvB,kBAAkB;wCAChB,GAAGuB,CAAC,SAAA,CAAA,kBAAA,mBAAA,mBAAA;wCACJ,8CAAA,GAAiD;wCACjD,6CAAA,eAA4D;wCAC5D,wCAAwC,KAAA;wCACxC9F,mBAAmB,SAAA;oCACrB,AAEF,IADA,KACA,+CAAA,MAD0D,IAC1D,CAAA,WAA4D,MAAA,oBAAA,uBAAA,uEAAA;gCAC5D,mDAAmD;gCACnD,MACAwE,aACApL,IAAIiB,SAAS,iBAAA;4BAEjB,EAAE,OAAO4I,KAAK,sCAAA;gCACZ1D,QAAQsD,KAAK,CACX,iBAAA,gCACAI;4BAEJ,IAAA;wBACF,sBAAA,MAAA,iBAAA,GAAA,CAAA,kBAAA;oBACF,MAAA,yXAAA,CAAA,QAAA;oBACF,mBAAA;oBACF,YAAA;gBAEA,qEAAyE;gBACzE,oEAAwE,CAAA;gBAErE/F,CAAAA,YAAAA,UAAsBC,sBAAqB,KAC5C,OAAO2C,cAAc,aACrB;gBACA,IAAA,GAAO,sBAAA,sBAAA,KAAA,IAAA,sBAAA,KAAA,CAAA,IAAA,KAAA,oXAAA,CAAA,QAAA,EAAA;oBACLuD,cAAc,sDAAA;wBAAEI,YAAY,oCAAA;wBAAGsC,QAAQzI,sBAAAA,KAAAA,CAAAA,SAAAA;oBAAU,8DAAA;oBACjD2G,OAAO,+DAAA;wBACLhM,MAAMxB,gBAAgBuP,GAAAA,EAAK,gEAAA;wBAC3B9B,MAAMrN,aAAaoP,KAAK,8BAAA;wBACxBC,UAAU,CAAC;wBACX/J,SAASmB,UAAAA,OAAAA,KAAAA,CAAAA,KAAAA,sBAAAA,OAAAA,KAAAA,IAAAA,GAAAA;wBACT+G,QAAQ/G,uDAAAA;wBACV,+BAAA;wBACF,IAAA,mWAAA,EAAA;4BACF,MAAA,gBAAA,YAAA,gBAAA,CAAA;4BAEMyC,IAAAA,QACJ,oEAAoE;gCACpE,MAAA,cAAA,UAAA,CAAA,kBAAA,CAAsE,iBAAA,mBAAA,OAAA,CAAA,IAAA,kBAAA;wCACpD,GAAA,CAAA;wCAElBpE,sBAAAA,cAAeoE,aAAAA,MAAmB,KAClC5K,eAAe+D,KAAK,yBAChBvD,gCAAgCgG,cAAcoE,mBAAmB,IAEjE,+CAA+C;wCAE7CrK,kBAAuB+F,mBAAmB1D,eAC1C,QAAA;wCAEc,wCAAA;wCACN,mBAAA;oCACd6G,IACAkB,4DAAAA;gCACAC,mDAAAA;gCACAC,MAAAA,aAAAA,IAAAA,SAAAA;4BACF,EAAA,OAAA,KAAA;gCACF,QAAA,KAAA,CAAA,iDAAA;4BAEMwF,GAAiB,OAAO5G;wBA0CxBuH,WAyLSC;oBAlOPD,WAAa,MAAMpO,YAAYyN,cAAc,CAAC;gBAClDF,UAAUvH;gBACVwG,mBAAmB,CAACuB,IAClBvB,kBAAkB;wBAChB3F,6DAAAA;wBACA,GAAGkH,CAAC,wDAAA;oBACN,mBAAA,sBAAA,KAAA,OAAA,cAAA,aAAA;gBACFL,OAAAA,IAAW3Q,UAAUoD,QAAQ;oBAC7BwD,cAAAA;wBACAoB,YAAAA;wBACA5D,QAAAA;oBACAoC;oBACAjC,OAAAA;wBACAgB,GAAWjB,GAAAA,CAAIiB,SAAS,0WAAA,CAAA,KAAA;wBACxBP,MAAAA,kWAAAA,CAAAA,KAAAA;wBACF,UAAA,CAAA;wBAEIoB,KAAa,IAAA;wBACXwD,KAAS,CACX,EAAA,eACA;oBAEJ;gBAEA,gDAAoD;YACpD,IAAI3G,YAAYuB,KAAK,EAAE;gBACrBH,EAAAA,EAAIuF,SAAS,CAAC,UAChB,OADiC,+DACjC;YAEA,IAAI,CAACyH,YAAY,CAAA;gBACf,IAAIpI,QAAAA,CAAAA,IAAa,aAAA,OAAA,KAAA,IAAA,cAAA,mBAAA,KAAA,IAAA,wWAAA,EAAA,KAAA,yBAAA,IAAA,uYAAA,EAAA,cAAA,mBAAA,YACf,eAAA,IAAA,8XAAA,EAAA,mBAAA,OAAgE,QAAA;oBAChE,cAAA,sDAAoE;oBACpE,QAAA,0DAAkE;oBAClE,mEAAmE;oBACnE,yBAAyB;oBACzB,MAAM,qBAA8D,CAA9D,IAAI4F,MAAM,sDAAV,qBAAA;+BAAA;oCAAA;sCAAA;oBAA6D,WAAA,OAAA;gBACrE,mBAAA;gBACA,EAAA,KAAO,QAAA,MAAA,YAAA,cAAA,CAAA;gBACT,UAAA;gBAEIwC,EAAAA,iBAAAA,CAAAA,EAAAA,EAAAA,SAAWlC,KAAK,IAAA,iBAAhBkC,kBAAkBlO,IAAI,MAAKxB,gBAAgByB,QAAQ,EAAE;wBAEMiO;wBADvD,GAAA,CAAA,eAEL,CAFK,IAAIxC,MACR,CAAC,wDAAwD,GAAEwC,qBAAAA,WAAWlC,KAAK,qBAAhBkC,mBAAkBlO,IAAI,EAAE,GAD/E,qBAAA;2BAAA;gCAAA,6XAAA,CAAA,QAAA;kCAAA;gBAEN;gBACF;gBAEA,EAAMoO,cAAc,OAAOF,WAAWlC,KAAK,CAACnE,SAAS,KAAK;gBAGxDnC,SACA,yEAAyE;gBACzE,WAAA,IAAA,SAAA,sCAAkE;gBAClE,4CAAgD;YAChD,CAACJ,uBACA,CAAA,CAAC8I,eAAe/J,oBAAmB,GACpC;gBACA,IAAI,CAACxC,QAAAA,OAAe;oBAClB,SAAA,CAAA,iBAAA,qBAAgD;oBAChD,iCAAiC;oBACjCX,IAAIuF,SAAS,CACX,kBACAhD,YAAAA,WACI,gBACAyK,WAAWG,MAAM,GACf,SACAH,WAAWhB,OAAO,GAChB,UACA;gBAEZ,YAAA,KAAA,EAAA;gBACA,IAAA,SAAA,CAAA,iBAAA,2CAA0E;gBAC1E,yDAAyD;gBACzDhM,CAAAA,GAAIuF,SAAS,CAACtI,0BAA0B;gBAC1C,IAAA,aAAA;oBACQ6N,OAAOmC,UAAU,EAAE,GAAGD,0CAAAA;oBAE9B,8CAAsD,sBAAA;oBAClD9C,kEAAAA;oBAEJ,kEAA0E,CAAA;oBAC1E,yBAAA,GAAoC;oBAChChG,MAAAA,OAAAA,CAAkB,aAAA,CAAA,IAAA,MAAA,sDAAA,qBAAA;wBACpBgG,OAAe;wBAAEI,QAAY,IAAA;wBAAGsC,IAAQzI,UAAAA;oBAAU;gBACpD,GAKK,IAAIC,qBAAqB;gBAC5B8F,OAAAA,QAAe;oBAAEI,YAAY;oBAAGsC,QAAQzI,UAAAA,WAAAA,KAAAA,KAAAA,OAAAA,KAAAA,IAAAA,kBAAAA,IAAAA,MAAAA,oXAAAA,CAAAA,QAAAA,EAAAA;gBAAU,IAAA;gBACpD,GAAO,GAAA,CAAI,CAACvF,KAAAA,OAAYuB,KAAK,EAAE,CAAA,IAAA,MAAA,CAAA,wDAAA,EAAA,CAAA,qBAAA,WAAA,KAAA,KAAA,OAAA,KAAA,IAAA,mBAAA,IAAA,EAAA,GAAA,qBAAA;oBAC7B,OAAA,gDAA2D;oBACvD4B,YAAAA,CAAa;oBACfmI,cAAAA,CAAe;wBAAEI,YAAY;wBAAGsC,QAAQzI;oBAAU,YAAA,OAAA,WAAA,KAAA,CAAA,SAAA,KAAA;gBACpD,OAIK,EAAA,EAAI,CAACK,OAAO,+DAAA;oBACf,IAAI,CAACxE,IAAIoN,SAAS,CAAC,kBAAkB,qBAAA;wBACnClD,eAAe,qBAAA;4BAAEI,QAAAA,CAAAA,CAAAA,EAAY,aAAA,oBAAA,GAAA;4BAAGsC,QAAQzI;wBAAU,4CAAA;oBACpD,iCAAA;oBACF,GAAO,CAAA,GAAI6I,MAAAA,CAAAA,IAAW9C,YAAY,EAAE,uBAAA,gBAAA,WAAA,MAAA,GAAA,SAAA,WAAA,OAAA,GAAA,UAAA;oBAClC,wEAAwE;oBACxE,oBAAoB,kDAAA;oBACpB,IAAI,OAAO8C,WAAW9C,YAAY,CAACI,UAAU,KAAK,GAAA,OAAU;4BAShD0C,CAAAA,CAAAA,yYAAAA,EAAAA;wBARV,IAAIA,WAAW9C,YAAY,CAACI,UAAU,GAAG,GAAG;4BAC1C,MAAM,GAAA,EAAA,GAAA,aAEL,CAFK,IAAIE,MACR,CAAC,2CAA2C,EAAEwC,WAAW9C,YAAY,CAACI,UAAU,CAAC,IAAI,CAAC,GADlF,qBAAA;uCAAA,2BAAA;4CAAA;8CAAA,wCAAA;4BAEN,oBAAA;wBACF,UAAA;wBAEAJ,OAAAA,QAAe;4BACbI,IAAAA,QAAY0C,WAAW9C,YAAY,CAACI,UAAU;4BAC9CsC,QAAQI,EAAAA,2BAAAA,WAAW9C,YAAY,qBAAvB8C,yBAAyBJ,MAAM,KAAIzK,WAAW2G,UAAU;wBAClE;oBACF,GAAA,IAGK,iBAAA;wBACHoB,OAAAA,QAAe;4BAAEI,IAAAA,QAAY3M;4BAAgBiP,QAAQzI;wBAAU;oBACjE,GAAA,CAAA,YAAA,KAAA,EAAA;gBACF,2DAAA;gBACF,IAAA,aAAA;oBAEA6I,GAAW9C,YAAY,GAAGA;wBAGjB7F,YAAAA,aAA0B,YACjC4I,CAAAA,8BAAAA,WAAYnO,IAAI,MAAKxB,gBAAgByB,QAAQ,IAC7CkO,WAAW9B,WAAW,EACtB;wBAea8B,QAAAA;oBAdb,mEAAuE;gBACvE,OAAA,IAAA,CAAA,OAAA,mDAAsE;oBACtE,IAAA,CAAA,IAAA,SAAA,CAAA,kBAAA,6BAAsE;wBAEtE,eAAA,6CAAoE;4BACpE,YAAA,+CAAuE;4BACvE,QAAA,oDAAwE;wBACxE,8DAAsE;oBACtE,kEAAsE;gBACtE,OAAA,IAAA,WAAA,YAAA,EAAA,oBAAwD;oBACpD1H,SAAS,CAACrI,0BAA0B,oCAAA;oBAExC,oBAAA,8CAAsE;oBACtE,IAAA,OAAA,WAAA,YAAA,CAAA,OAA8C,GAAA,KAAA,UAAA;wBACxCmQ,IAAAA,EAAOJ,uBAAAA,WAAWjK,OAAO,qBAAlBiK,oBAAoB,CAACpP,uBAAuB;wBACrD8C,IAAAA,SAAiB6D,EAAAA,OAAS6I,KAAAA,CAAAA,EAAQ,OAAOA,CAAAA,GAAAA,GAAAA,EAAS,UAAU;4BAC1D9H,KAAS,CAAC1H,OAAAA,cAAAA,CAAAA,EAAwBwP,EAAAA,MAAAA,CAAAA,2CAAAA,EAAAA,WAAAA,YAAAA,CAAAA,UAAAA,CAAAA,IAAAA,CAAAA,GAAAA,qBAAAA;gCACxC,OAAA;gCAEMC,OAAiBL,KAAAA,MAAW9B,WAAW,CAACjF,GAAG,CAAC7B;gCAC9CiJ,OAAmBnJ,OAAAA,IAAW;4BAChC,IAAY;wBACZ,GAAOpG,iBAAiB;wBACtBgC,eAAAA;4BACAC,YAAAA,WAAAA,YAAAA,CAAAA,UAAAA;4BACAuN,QAAAA,CAAAA,CAAAA,CAAepL,WAAWoL,aAAa,EAAA,WAAA,YAAA,KAAA,OAAA,KAAA,IAAA,yBAAA,MAAA,KAAA,WAAA,UAAA;wBACvCC,iBAAiBrL,WAAWqL,eAAe;wBAC3CxD,GAAAA,KAAQtM,aAAa+P,UAAU,CAC7BH,gBACAnQ;wBAEF+M,cAAc8C,CAAAA,UAAW9C,YAAY;4BACvC,YAAA,+VAAA;4BACF,QAAA;wBAEA,iEAAyE;oBACzE,qEAAyE;gBACzE,sEAAsE;gBACtE,qEAAqE;gBACrE,OAAA,YAAA,GAAA,8CAAoE;gBACpE,OAAA,yBAAgC,CAAA,YAAA,CAAA,cAAA,OAAA,KAAA,IAAA,WAAA,IAAA,MAAA,oXAAA,CAAA,QAAA,IAAA,WAAA,WAAA,EAAA;gBAChClK,IAAIgB,UAAU,GAAG;gBACjB,OAAOjD,iBAAiB,+CAAA;oBACtBgC,kEAAAA;oBACAC,kEAAAA;oBACAuN,eAAepL,WAAWoL,aAAa,yBAAA;oBACvCC,iBAAiBrL,WAAWqL,eAAe,wBAAA;oBAC3CxD,QAAQtM,aAAaoP,KAAK,0CAAA;oBAC1B5C,cAAc8C,WAAW9C,YAAY,6BAAA;gBACvC,sEAAA;gBACF,wDAAA;gBAEA,IAAA,SAAA,CAAA,yYAAA,EAAA,6BAAyE;gBACzE,gEAAoE,MAAA;gBACpE,8CAAA,sBAAwE;gBACxE,MAAA,OAAA,CAAA,uBAAA,WAAA,OAA2D,KAAA,OAAA,KAAA,IAAA,oBAAA,CAAA,uWAAA,CAAA;gBAC3D,IAAA,iBAAA,SAAA,QAAA,CAA2C,MAAA,SAAA,UAAA;oBACrCwD,IAAAA,SAAejJ,CAAAA,uWAAAA,EAAAA,GAChBzI,eAAe+D,KAAK,qBACrB/D,eAAe+D,KAAK,kBACpB/D,eAAe+D,KAAK;gBACpB2N,cAAc;gBAChB,MAAMC,WAAW,MAAMD,WAAAA,EAAaV,SAAAA,CAAAA,EAAY,CAAA,CAAA;oBAC9CY,KAAK5R,cAAAA,CAAe+D,KAAK,KAAA,SAAcA,IAAI6N,GAAG;oBAChD,YAAA;oBACID,OAAAA,IAAAA,GAAU,OAAO,gWAAA,EAAA;wBACvB;wBAEIV,GAAWjK,OAAO,EAAE;wBAChBA,QAAU,OAAA,WAAA,aAAA;wBAAKiK,UAAWjK,OAAO,WAAA,eAAA;wBAAC,QAAA,kWAAA,CAAA,UAAA,CAAA,gBAAA,wYAAA;wBAEnCrC,cAAiB,CAAC6D,OAAO,GAAA,YAAA;oBAC5B,OAAOxB,OAAO,CAACnF,uBAAuB;gBACxC;gBAEA,KAAK,IAAI,CAACgQ,KAAK/C,MAAM,IAAIgD,OAAOC,OAAO,CAAC/K,SAAU,wBAAA;oBAChD,IAAI,OAAO8H,UAAU,aAAa,mCAAA;oBAElC,IAAIkD,MAAMC,OAAO,CAACnD,QAAQ,wCAAA;wBACxB,KAAK,MAAMoD,KAAKpD,MAAO,uCAAA;4BACrB9K,IAAImO,YAAY,CAACN,KAAKK,kCAAAA;wBACxB,wBAAA;oBACF,OAAO,GAAA,CAAI,EAAA,KAAOpD,UAAU,UAAU;4BACpCA,QAAQA,MAAMsD,2VAAAA,EAAAA,MAAQ;wBACtBpO,IAAImO,YAAY,CAACN,KAAK/C;oBACxB,OAAO;wBACL9K,IAAImO,OAAAA,KAAY,CAACN,KAAK/C,aAAAA;oBACxB,iBAAA,WAAA,eAAA;oBACF,QAAA,kWAAA,CAAA,KAAA;oBACF,cAAA,WAAA,YAAA;gBAEA,kEAAsE;YACtE,8CAA8C;YAC9C,MAAMuC,QAAOJ,sBAAAA,WAAWjK,OAAO,mBAAA,EAAlBiK,mBAAoB,CAACpP,uBAAuB;YACzD,IAAI8C,iBAAiB6D,SAAS6I,QAAQ,OAAOA,SAAS,UAAU,IAAA;gBAC9DrN,IAAIuF,SAAS,CAAC1H,wBAAwBwP,8BAAAA;YACxC,2DAAA;YAEA,2CAAA,+BAA0E;YAC1E,MAAA,eAAA,4BAAA,IAAA,wWAAA,EAAA,KAAA,KAA0E,gBAAA,IAAA,wWAAA,EAAA,KAAA,kBAAA,IAAA,wWAAA,EAAA,KAAA;YAC1E,IAAA,cAAA,kBAAoC;gBAChCJ,MAAAA,KAAW/B,MAAM,IAAK,CAAA,CAAC9H,aAAAA,GAAgB,CAACO,QAAAA,SAAgB,GAAI;oBAC1D3C,KAAAA,IAAAA,KAAU,GAAGiM,gWAAAA,EAAAA,IAAW/B,CAAAA,KAAM,SAAA,IAAA,GAAA;gBACpC;gBAEA,IAAA,UAAA,OAAA,uEAAgG;YAChG,IACE,CAACvK,iBACDsM,WAAW/B,MAAM,IACjB1M,kBAAkB,CAACyO,WAAW/B,MAAM,CAAC,IACrC9H,cACA;gBACApD,IAAIgB,OAAAA,GAAU,GAAG,CAAA,EAAA;gBACnB,MAAA,UAAA;oBAEA,GAAA,WAAA,OAAA,SAAsC;gBAClCkM,eAAe,CAAC9I,qBAAqB;gBACvCpE,IAAIuF,CAAAA,QAAS,CAACrI,QAAAA,CAAAA,OAAAA,UAA0B;oBAC1C,OAAA,OAAA,CAAA,uWAAA,CAAA;gBAEA,uDAA2D;gBAC3D,KAAA,IAAA,CAAA,KAAA,MAAA,IAAA,OAAA,OAAA,CAAA,SAAA,eAAoE;oBACpE,IAAA,OAAA,UAAA,aAAA,gCAA0E;oBAC1E,IAAA,MAAA,OAAA,CAAA,KAA+B,GAAA;wBAC3BkG,KAAAA,GAAgB,CAACrB,EAAAA,KAAAA,MAAa;4BAChC,IAAA,YAAA,CAAA,KAAA,4BAA8D;wBAC1D,GAAOkL,WAAWjC,OAAO,KAAK,aAAa;oBAC7C,OAAA,IAAA,OAAA,UAAA,UAAA,4BAAkE;wBAC9DiC,QAAAA,GAAWlC,GAAAA,CAAI,CAACsD,MAAAA,KAAW,KAAKlR,yBAAyB;wBAC3D,IAAIgF,WAAWQ,CAAAA,CAAAA,KAAAA,QAAe,EAAE;4BAC9B3C,IAAIgB,UAAU,GAAG;4BACjB,OAAOjD,KAAAA,CAAAA,KAAAA,MAAiB;gCACtBgC;gCACAC;gCACAuN,eAAepL,WAAWoL,aAAa;gCACvCC,iBAAiBrL,WAAWqL,eAAe,OAAA;gCAC3CxD,QAAQtM,aAAaoP,KAAK;gCAC1B5C,cAAc8C,EAAAA,SAAW9C,EAAAA,OAAAA,GAAY,EAAA,OAAA,KAAA,IAAA,mBAAA,CAAA,uWAAA,CAAA;4BACvC,KAAA,SAAA,QAAA,OAAA,SAAA,UAAA;wBACF,KAAA,CAAA,CAAO,sWAAA,EAAA;4BACL,uCAAuC;4BACvC,MAAM,qBAEL,CAFK,IAAIzL,eACR,CAAC,UAAA,iBAA2B,EAAEwO,WAAWlC,IAAI,CAACsD,WAAW,EAAE,GADvD,qBAAA;uCAAA,+CAAA;4CAAA,IAAA;8CAAA,SAAA,CAAA,iBAAA,GAAA;4BAEN,EAAA,GAAA,WAAA,MAAA;wBACF;oBACF,wFAAA;oBAEA,OAAOtQ,OAAAA,UAAiB,CAAA,MAAA,IAAA,qYAAA,CAAA,WAAA,MAAA,CAAA,IAAA,cAAA;wBACtBgC,MAAAA,GAAAA;wBACAC;wBACAuN,eAAepL,WAAWoL,aAAa;wBACvCC,OAAAA,CAAAA,SAAiBrL,WAAWqL,CAAAA,cAAe;wBAC3CxD,KAAAA,CAAAA,EAAQiD,WAAWlC,IAAI,wXAAA,EAAA;wBACvBb,cAAc8C,WAAW9C,YAAY;oBACvC,mDAAA;gBACF,gEAAA;gBAEA,sEAAsE;gBACtE,QAAQ,mBAAA;gBACR,OAAOnM,SAAAA,CAAAA,OAAiB,MAAA;oBACtBgC,0DAAAA;oBACAC,OAAAA,WAAAA,OAAAA,KAAAA,aAAAA;oBACAuN,eAAepL,WAAWoL,aAAa,2BAAA;oBACvCC,IAAAA,WAAAA,EAAiBrL,EAAAA,CAAAA,QAAWqL,GAAAA,KAAAA,OAAe,iYAAA,EAAA;wBAC3CxD,IAAQtM,WAAAA,EAAa+P,UAAU,CAC7BR,EAAAA,EAAAA,OAAWjC,OAAO,EAClB7N;4BAEF+M,IAAAA,EAAc8C,QAAAA,GAAW9C,YAAY;4BACvC,OAAA,IAAA,0WAAA,EAAA;gCACF;gCAEA,eAAmC;gCACtB+C,IAAWlC,IAAI,OAAA,WAAA,aAAA;gCAE5B,iBAAA,WAAA,eAAA,MAAqE;gCACrE,QAAA,kWAAA,CAAA,KAAA,wBAAsE;gCACtE,cAAA,WAAA,OAAoD,KAAA;4BAC/CmC,IAAevM,iBAAiByC,cAAc;wBACjD,OAAA,yDAAwE;4BACxE,uCAAA,iBAAoE;4BACpE,MAAA,OAAA,IAA6B,UAAA,CAAA,IAAA,kXAAA,CAAA,CAAA,2BAAA,EAAA,WAAA,IAAA,CAAA,WAAA,EAAA,GAAA,qBAAA;gCAEfmL,OAAAA,SAAgB,IAC5B5N,iBACAgD,qBACA2K,KAAKD,WAAW,KAAKzQ,0BACrB;gCACA,YAAA,4CAAoE;gCACpE,cAAA,4CAAsE;4BACtE,4DAAoE;wBACpE0Q,CAAKE,OAAO,CAACC;oBACf;oBAEA,GAAO1Q,IAAAA,IAAAA,SAAiB,iWAAA,EAAA;wBACtBgC;wBACAC;wBACAuN,WAAepL,IAAAA,OAAWoL,IAAAA,SAAa,IAAA;wBACvCC,aAAiBrL,IAAAA,OAAWqL,IAAAA,WAAe,IAAA;wBAC3CxD,IAAQsE,IAAAA,WAAAA,IAAAA;wBACRpE,UAAc8C,IAAAA,OAAW9C,IAAAA,QAAY,IAAA;oBACvC;gBACF;gBAEA,kEAAsE,IAAA;gBACtE,QAAA,2DAAuE;gBACvE,OAAA,IAAA,0WAAA,EAAA,0CAAsE;oBACtE,oBAA4B;oBACxBnG,kBAAsBC,wBAAwB;oBAChD,eAAA,WAAA,aAAA,wBAAmE;oBACnE,iBAAA,WAAA,eAAA,IAAmD;oBACnDsK,CAAKI,IAAI,CACP,EAAA,EAAIC,gWAAAA,CAAAA,IAAe,MAAA,CAAA,WAAA,OAAA,EAAA,wYAAA;oBACjBC,OAAMC,OAAAA,GAAU,QAAA,YAAA;wBACdA,WAAWC,OAAO,CAAChR,aAAaiR,MAAM,CAACC,aAAa;wBACpDH,WAAWI,KAAK;oBAClB,2BAAA;gBACF,EAAA,OAAA,WAAA,IAAA;gBAGF,OAAOlR,iBAAiB,yCAAA;oBACtBgC,8DAAAA;oBACAC,4CAAAA;oBACAuN,YAAAA,GAAepL,WAAWoL,GAAAA,UAAa,IAAA;oBACvCC,iBAAiBrL,WAAWqL,eAAe,yBAAA;oBAC3CxD,QAAQsE,wDAAAA;oBACRpE,cAAc,WAAA;wBAAEI,YAAY;;gBAKhC,OAAA,IAAA,0WAAA,EAAA,wCAAoE;oBACpE,qBAA6B;oBACzB7K,IAAQC,GAAG,CAAC6O,gBAAgB,EAAE;oBAChCD,CAAKI,IAAI,CAACD,SAAAA,WAAAA,aAAAA;oBACZ,iBAAA,WAAA,eAAA;oBAEA,QAAA,yDAAyE;oBACzE,cAAA,WAAA,YAAA,2BAAwE;gBACxE,eAAmB;YACnB,MAAMS,cAAc,IAAIC;YACxBb,KAAKI,IAAI,CAACQ,YAAYE,QAAQ,wCAAA;YAE9B,uEAAA,CAAwE;YACxE,sEAAA,EAAwE;YACxE,4BAAA,6CAAyE;YACzE1I,IAAAA,KAAS,iBAAA,wBAAA;gBACPjB,mEAAAA;gBACAkB,WAAWsG,WAAWtG,SAAS,oBAAA;gBAC/B,KAAA,IAAA,CAAA,IAAA,eAAA,yCAAsE;oBACtE,OAAA,CAAY,SAAA;wBACZC,WAAAA,EAAqB,KAAA,CAAA,yXAAA,CAAA,MAAA,CAAA,aAAA;wBACrBC,WAAmB,KAAA;oBAEb,OAAOmD;oBAKPA;gBAJJ,IAAI,CAACA,EAAAA,IAAAA,MAAQ,oWAAA,EAAA;oBACX,MAAM,qBAAwD,CAAxD,IAAIQ,MAAM,gDAAV,qBAAA;+BAAA;oCAAA,UAAA,aAAA;sCAAA,UAAA,eAAA;oBAAuD,QAAA;oBAC/D,cAAA;wBAEIR,YAAAA,EAAAA,OAAOc,KAAK,qBAAZd,cAAclL,IAAI,MAAKxB,gBAAgByB,QAAQ,EAAE;wBAELiL,QAAAA;oBAD9C,MAAM,qBAEL,CAFK,IAAIQ,MACR,CAAC,yCAAyC,GAAER,iBAAAA,OAAOc,KAAK,qBAAZd,eAAclL,IAAI,EAAE,GAD5D,qBAAA;+BAAA;oCAAA;sCAAA,8CAAA;oBAEN,4DAAA;gBACF,yBAAA;gBAEA,6CAA6C;;gBAI7C,iEAAiE,IAAA;gBACjE,0DAA0D,UAAA;gBAC1DoQ,YAAYK,GAAAA,KAAQ,CAACE,KAAK,CAAC3F,KAAK0F,KAAK,CAAC,CAACE;oBACrCtJ,QAAQsD,IAAAA,CAAK,CAAC,EAAA,4BAA8BgG;gBAC9C,CAAA,IAAA,CAAA,YAAA,QAAA;YACF,wEAAA;YAEF,OAAO3R,iBAAiB,gDAAA;gBACtBgC,qEAAAA;gBACAC,KAAAA;gBACAuN,eAAepL,WAAWoL,aAAa;gBACvCC,WAAAA,MAAiBrL,KAAAA,MAAWqL,GAAAA,YAAe;gBAC3CxD,QAAQsE,8DAAAA;gBACR,YAAA,2DAAuE;gBACvE,qBAAA,mDAAwE;gBACxE,mBAAA,kBAAqC;gBACrCpE,GAAAA,CAAAA,OAAAA,GAAc;oBAAEI,YAAY;oBAAGsC,CAAAA,OAAQzI,CAAAA;oBAAU,MAAA,OAAA,cAAA,CAAA,IAAA,MAAA,gDAAA,qBAAA;wBACnD,OAAA;wBACF,YAAA;wBAEA,cAAA,sBAAoD;oBACpD,6CAAyD;gBACrDe,QAAY;gBACd,EAAMmH,EAAAA,CAAAA,CAAAA,WAAenH,KAAAA,OAAAA,KAAAA,KAAAA,OAAAA,KAAAA,IAAAA,cAAAA,IAAAA,MAAAA,oXAAAA,CAAAA,QAAAA,EAAAA;oBAChB,IAAA;oBACE,KAAMD,CAAAA,MAAO0K,CAAAA,cAAAA,CAAAA,IAAAA,CAAqB,CAAC5P,IAAIiD,CAAAA,MAAO,EAAE,IACrDiC,OAAO2K,KAAK,CACV3T,eAAekK,CAAAA,EAAAA,CAAAA,SAAa,EAC5B,MAAA,OAAA,KAAA,KAAA,OAAA,KAAA,IAAA,eAAA,IAAA,EAAA,GAAA,qBAAA;wBACE0J,MAAU,CAAA,EAAG7K,OAAO,CAAC,EAAE1E,SAAS;wBAChCxB,EAAMhD,SAASgU,CAAAA,KAAM;wBACrBC,QAAY,MAAA;wBACV,eAAe/K;wBACf,eAAejF,IAAI6N,GAAG;oBACxB,yCAAA;gBACF,GACAvB,GAAAA,OAAAA,KAAAA,CAAAA,IAAAA,CAAAA,MAAAA,CAAAA,YAAAA,QAAAA;YAGN,GAAA,KAAA,CAAA,CAAA;gBACOvC,EAAK,+DAAA;gBACNA,aAAe9L,eAAc,GAAI,2BAAA;gBACrC,EAAMY,UAAAA,EAAYiL,MAAAA,CAAAA,KAAAA,CAAAA,CAAc,CAC9B9J,GAAAA,EACA+J,GAAAA,CAAAA,CACA;oBACEkG,QAAY,KAAA,CAAA,8BAAA;gBACZC,WAAW3P;gBACX4P,WAAW;gBACXC,GAAAA,IAAAA,eAAkBvU,2VAAAA,EAAAA,kBAAoB;oBACpCiN,oBAAoBrE;oBACpBjC;gBACF,eAAA,WAAA,aAAA;gBAEFL,iBAAAA,WAAAA,eAAAA;gBAEJ,QAAA;gBAEA,2CAAmD,4BAAA;gBAC7C4H,wEAAAA;gBACR,qCAAA;gBACF,cAAA;oBAEA,YAAA,6CAA6E;oBAC7E,QAAA;;;;QAKA,KAAS2E,+CAAAA;QACP,GAAO,IAAIE,eAAe,mCAAA;QACxBC,IAAAA,GAAMC,SAAAA,CAAU;YACdA,MAAAA,KAAWC,OAAO,CAChB,EAAA,EAAIsB,cAAcC,MAAM,CAAC;YAE3BxB,GAAAA,QAAWI,KAAK;YAClB,OAAA,MAAA,OAAA,qBAAA,CAAA,IAAA,OAAA,EAAA,IAAA,OAAA,KAAA,CAAA,kXAAA,CAAA,aAAA,EAAA;oBACF,UAAA,GAAA,OAAA,CAAA,EAAA,SAAA;oBACF,MAAA,yWAAA,CAAA,MAAA","ignoreList":[0]}}] +} \ No newline at end of file diff --git a/.next/dev/server/chunks/ssr/Documents_go-new_chinese-family-tree_735c6a78._.js b/.next/dev/server/chunks/ssr/Documents_go-new_chinese-family-tree_735c6a78._.js index aa08b12d..a2aa5389 100644 --- a/.next/dev/server/chunks/ssr/Documents_go-new_chinese-family-tree_735c6a78._.js +++ b/.next/dev/server/chunks/ssr/Documents_go-new_chinese-family-tree_735c6a78._.js @@ -344,6 +344,7 @@ var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$ch var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$lucide$2d$react$40$0$2e$454$2e$0_react$40$19$2e$2$2e$0$2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$chevron$2d$down$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__$3c$export__default__as__ChevronDown$3e$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/lucide-react@0.454.0_react@19.2.0/node_modules/lucide-react/dist/esm/icons/chevron-down.js [app-ssr] (ecmascript) "); var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$lucide$2d$react$40$0$2e$454$2e$0_react$40$19$2e$2$2e$0$2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$plus$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__$3c$export__default__as__Plus$3e$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/lucide-react@0.454.0_react@19.2.0/node_modules/lucide-react/dist/esm/icons/plus.js [app-ssr] (ecmascript) "); var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$lucide$2d$react$40$0$2e$454$2e$0_react$40$19$2e$2$2e$0$2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$trash$2d$2$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__$3c$export__default__as__Trash2$3e$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/lucide-react@0.454.0_react@19.2.0/node_modules/lucide-react/dist/esm/icons/trash-2.js [app-ssr] (ecmascript) "); +var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$lucide$2d$react$40$0$2e$454$2e$0_react$40$19$2e$2$2e$0$2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$calculator$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__$3c$export__default__as__Calculator$3e$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/lucide-react@0.454.0_react@19.2.0/node_modules/lucide-react/dist/esm/icons/calculator.js [app-ssr] (ecmascript) "); var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$button$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/components/ui/button.tsx [app-ssr] (ecmascript)"); var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$input$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/components/ui/input.tsx [app-ssr] (ecmascript)"); var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$avatar$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/components/ui/avatar.tsx [app-ssr] (ecmascript)"); @@ -796,15 +797,6 @@ function SiteHeader() { fileName: "[project]/Documents/go-new/chinese-family-tree/components/site-header.tsx", lineNumber: 305, columnNumber: 11 - }, this), - /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$client$2f$app$2d$dir$2f$link$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["default"], { - href: getUrlWithTreeId("/relationship-test"), - className: "transition-colors hover:text-foreground", - children: "计算器 (Calculator)" - }, void 0, false, { - fileName: "[project]/Documents/go-new/chinese-family-tree/components/site-header.tsx", - lineNumber: 308, - columnNumber: 11 }, this) ] }, void 0, true, { @@ -823,7 +815,7 @@ function SiteHeader() { className: "absolute left-2.5 top-2.5 h-4 w-4 text-muted-foreground" }, void 0, false, { fileName: "[project]/Documents/go-new/chinese-family-tree/components/site-header.tsx", - lineNumber: 315, + lineNumber: 312, columnNumber: 13 }, this), /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$input$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["Input"], { @@ -834,7 +826,7 @@ function SiteHeader() { className: "h-9 w-64 rounded-full bg-muted pl-9 text-sm focus-visible:ring-primary" }, void 0, false, { fileName: "[project]/Documents/go-new/chinese-family-tree/components/site-header.tsx", - lineNumber: 316, + lineNumber: 313, columnNumber: 13 }, this), showResults && searchResults.length > 0 && /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { @@ -855,7 +847,7 @@ function SiteHeader() { children: member.fullName }, void 0, false, { fileName: "[project]/Documents/go-new/chinese-family-tree/components/site-header.tsx", - lineNumber: 336, + lineNumber: 333, columnNumber: 27 }, this), /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("span", { @@ -863,7 +855,7 @@ function SiteHeader() { children: member.gender === "MALE" ? "男" : "女" }, void 0, false, { fileName: "[project]/Documents/go-new/chinese-family-tree/components/site-header.tsx", - lineNumber: 337, + lineNumber: 334, columnNumber: 27 }, this), /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("span", { @@ -875,13 +867,13 @@ function SiteHeader() { ] }, void 0, true, { fileName: "[project]/Documents/go-new/chinese-family-tree/components/site-header.tsx", - lineNumber: 340, + lineNumber: 337, columnNumber: 27 }, this) ] }, void 0, true, { fileName: "[project]/Documents/go-new/chinese-family-tree/components/site-header.tsx", - lineNumber: 335, + lineNumber: 332, columnNumber: 25 }, this), /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("p", { @@ -892,28 +884,28 @@ function SiteHeader() { ] }, void 0, true, { fileName: "[project]/Documents/go-new/chinese-family-tree/components/site-header.tsx", - lineNumber: 342, + lineNumber: 339, columnNumber: 25 }, this) ] }, void 0, true, { fileName: "[project]/Documents/go-new/chinese-family-tree/components/site-header.tsx", - lineNumber: 334, + lineNumber: 331, columnNumber: 23 }, this) }, void 0, false, { fileName: "[project]/Documents/go-new/chinese-family-tree/components/site-header.tsx", - lineNumber: 333, + lineNumber: 330, columnNumber: 21 }, this) }, member.id, false, { fileName: "[project]/Documents/go-new/chinese-family-tree/components/site-header.tsx", - lineNumber: 328, + lineNumber: 325, columnNumber: 19 }, this)) }, void 0, false, { fileName: "[project]/Documents/go-new/chinese-family-tree/components/site-header.tsx", - lineNumber: 326, + lineNumber: 323, columnNumber: 15 }, this), showResults && searchQuery && searchResults.length === 0 && /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { @@ -921,13 +913,13 @@ function SiteHeader() { children: "未找到匹配的成员" }, void 0, false, { fileName: "[project]/Documents/go-new/chinese-family-tree/components/site-header.tsx", - lineNumber: 355, + lineNumber: 352, columnNumber: 15 }, this) ] }, void 0, true, { fileName: "[project]/Documents/go-new/chinese-family-tree/components/site-header.tsx", - lineNumber: 314, + lineNumber: 311, columnNumber: 11 }, this), /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$button$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["Button"], { @@ -939,7 +931,7 @@ function SiteHeader() { className: "h-5 w-5" }, void 0, false, { fileName: "[project]/Documents/go-new/chinese-family-tree/components/site-header.tsx", - lineNumber: 362, + lineNumber: 359, columnNumber: 13 }, this), /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("span", { @@ -947,27 +939,27 @@ function SiteHeader() { children: "Notifications" }, void 0, false, { fileName: "[project]/Documents/go-new/chinese-family-tree/components/site-header.tsx", - lineNumber: 363, + lineNumber: 360, columnNumber: 13 }, this) ] }, void 0, true, { fileName: "[project]/Documents/go-new/chinese-family-tree/components/site-header.tsx", - lineNumber: 361, + lineNumber: 358, columnNumber: 11 }, this), /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$client$2f$app$2d$dir$2f$link$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["default"], { - href: "/relationship-test", + href: "/relationship", children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$button$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["Button"], { variant: "ghost", size: "icon", className: "text-muted-foreground", children: [ - /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(Calculator, { + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$lucide$2d$react$40$0$2e$454$2e$0_react$40$19$2e$2$2e$0$2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$calculator$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__$3c$export__default__as__Calculator$3e$__["Calculator"], { className: "h-5 w-5" }, void 0, false, { fileName: "[project]/Documents/go-new/chinese-family-tree/components/site-header.tsx", - lineNumber: 368, + lineNumber: 365, columnNumber: 15 }, this), /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("span", { @@ -975,18 +967,18 @@ function SiteHeader() { children: "Relationship Calculator" }, void 0, false, { fileName: "[project]/Documents/go-new/chinese-family-tree/components/site-header.tsx", - lineNumber: 369, + lineNumber: 366, columnNumber: 15 }, this) ] }, void 0, true, { fileName: "[project]/Documents/go-new/chinese-family-tree/components/site-header.tsx", - lineNumber: 367, + lineNumber: 364, columnNumber: 13 }, this) }, void 0, false, { fileName: "[project]/Documents/go-new/chinese-family-tree/components/site-header.tsx", - lineNumber: 366, + lineNumber: 363, columnNumber: 11 }, this), /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$client$2f$app$2d$dir$2f$link$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["default"], { @@ -1000,7 +992,7 @@ function SiteHeader() { className: "h-5 w-5" }, void 0, false, { fileName: "[project]/Documents/go-new/chinese-family-tree/components/site-header.tsx", - lineNumber: 375, + lineNumber: 372, columnNumber: 15 }, this), /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("span", { @@ -1008,18 +1000,18 @@ function SiteHeader() { children: "Settings" }, void 0, false, { fileName: "[project]/Documents/go-new/chinese-family-tree/components/site-header.tsx", - lineNumber: 376, + lineNumber: 373, columnNumber: 15 }, this) ] }, void 0, true, { fileName: "[project]/Documents/go-new/chinese-family-tree/components/site-header.tsx", - lineNumber: 374, + lineNumber: 371, columnNumber: 13 }, this) }, void 0, false, { fileName: "[project]/Documents/go-new/chinese-family-tree/components/site-header.tsx", - lineNumber: 373, + lineNumber: 370, columnNumber: 11 }, this), status === "loading" ? /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$avatar$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["Avatar"], { @@ -1028,12 +1020,12 @@ function SiteHeader() { children: "..." }, void 0, false, { fileName: "[project]/Documents/go-new/chinese-family-tree/components/site-header.tsx", - lineNumber: 382, + lineNumber: 379, columnNumber: 15 }, this) }, void 0, false, { fileName: "[project]/Documents/go-new/chinese-family-tree/components/site-header.tsx", - lineNumber: 381, + lineNumber: 378, columnNumber: 13 }, this) : session ? /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$dropdown$2d$menu$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["DropdownMenu"], { children: [ @@ -1050,30 +1042,30 @@ function SiteHeader() { alt: session.user?.name || "User" }, void 0, false, { fileName: "[project]/Documents/go-new/chinese-family-tree/components/site-header.tsx", - lineNumber: 389, + lineNumber: 386, columnNumber: 21 }, this), /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$avatar$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["AvatarFallback"], { children: getUserInitial() }, void 0, false, { fileName: "[project]/Documents/go-new/chinese-family-tree/components/site-header.tsx", - lineNumber: 390, + lineNumber: 387, columnNumber: 21 }, this) ] }, void 0, true, { fileName: "[project]/Documents/go-new/chinese-family-tree/components/site-header.tsx", - lineNumber: 388, + lineNumber: 385, columnNumber: 19 }, this) }, void 0, false, { fileName: "[project]/Documents/go-new/chinese-family-tree/components/site-header.tsx", - lineNumber: 387, + lineNumber: 384, columnNumber: 17 }, this) }, void 0, false, { fileName: "[project]/Documents/go-new/chinese-family-tree/components/site-header.tsx", - lineNumber: 386, + lineNumber: 383, columnNumber: 15 }, this), /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$dropdown$2d$menu$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["DropdownMenuContent"], { @@ -1091,7 +1083,7 @@ function SiteHeader() { children: session.user?.name || "用户" }, void 0, false, { fileName: "[project]/Documents/go-new/chinese-family-tree/components/site-header.tsx", - lineNumber: 397, + lineNumber: 394, columnNumber: 21 }, this), /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("p", { @@ -1099,23 +1091,23 @@ function SiteHeader() { children: session.user?.email }, void 0, false, { fileName: "[project]/Documents/go-new/chinese-family-tree/components/site-header.tsx", - lineNumber: 398, + lineNumber: 395, columnNumber: 21 }, this) ] }, void 0, true, { fileName: "[project]/Documents/go-new/chinese-family-tree/components/site-header.tsx", - lineNumber: 396, + lineNumber: 393, columnNumber: 19 }, this) }, void 0, false, { fileName: "[project]/Documents/go-new/chinese-family-tree/components/site-header.tsx", - lineNumber: 395, + lineNumber: 392, columnNumber: 17 }, this), /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$dropdown$2d$menu$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["DropdownMenuSeparator"], {}, void 0, false, { fileName: "[project]/Documents/go-new/chinese-family-tree/components/site-header.tsx", - lineNumber: 403, + lineNumber: 400, columnNumber: 17 }, this), /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$dropdown$2d$menu$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["DropdownMenuItem"], { @@ -1128,30 +1120,30 @@ function SiteHeader() { className: "mr-2 h-4 w-4" }, void 0, false, { fileName: "[project]/Documents/go-new/chinese-family-tree/components/site-header.tsx", - lineNumber: 406, + lineNumber: 403, columnNumber: 21 }, this), /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("span", { children: "系统设置" }, void 0, false, { fileName: "[project]/Documents/go-new/chinese-family-tree/components/site-header.tsx", - lineNumber: 407, + lineNumber: 404, columnNumber: 21 }, this) ] }, void 0, true, { fileName: "[project]/Documents/go-new/chinese-family-tree/components/site-header.tsx", - lineNumber: 405, + lineNumber: 402, columnNumber: 19 }, this) }, void 0, false, { fileName: "[project]/Documents/go-new/chinese-family-tree/components/site-header.tsx", - lineNumber: 404, + lineNumber: 401, columnNumber: 17 }, this), /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$dropdown$2d$menu$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["DropdownMenuSeparator"], {}, void 0, false, { fileName: "[project]/Documents/go-new/chinese-family-tree/components/site-header.tsx", - lineNumber: 410, + lineNumber: 407, columnNumber: 17 }, this), /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$dropdown$2d$menu$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["DropdownMenuItem"], { @@ -1162,32 +1154,32 @@ function SiteHeader() { className: "mr-2 h-4 w-4" }, void 0, false, { fileName: "[project]/Documents/go-new/chinese-family-tree/components/site-header.tsx", - lineNumber: 412, + lineNumber: 409, columnNumber: 19 }, this), /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("span", { children: "退出登录" }, void 0, false, { fileName: "[project]/Documents/go-new/chinese-family-tree/components/site-header.tsx", - lineNumber: 413, + lineNumber: 410, columnNumber: 19 }, this) ] }, void 0, true, { fileName: "[project]/Documents/go-new/chinese-family-tree/components/site-header.tsx", - lineNumber: 411, + lineNumber: 408, columnNumber: 17 }, this) ] }, void 0, true, { fileName: "[project]/Documents/go-new/chinese-family-tree/components/site-header.tsx", - lineNumber: 394, + lineNumber: 391, columnNumber: 15 }, this) ] }, void 0, true, { fileName: "[project]/Documents/go-new/chinese-family-tree/components/site-header.tsx", - lineNumber: 385, + lineNumber: 382, columnNumber: 13 }, this) : /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$client$2f$app$2d$dir$2f$link$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["default"], { href: "/auth/signin", @@ -1197,18 +1189,18 @@ function SiteHeader() { children: "登录" }, void 0, false, { fileName: "[project]/Documents/go-new/chinese-family-tree/components/site-header.tsx", - lineNumber: 419, + lineNumber: 416, columnNumber: 15 }, this) }, void 0, false, { fileName: "[project]/Documents/go-new/chinese-family-tree/components/site-header.tsx", - lineNumber: 418, + lineNumber: 415, columnNumber: 13 }, this) ] }, void 0, true, { fileName: "[project]/Documents/go-new/chinese-family-tree/components/site-header.tsx", - lineNumber: 313, + lineNumber: 310, columnNumber: 9 }, this) ] @@ -1785,7 +1777,7 @@ function MembersPage() { statusFilter, generationRange ]); - // 按世代分组 + // 按世代分组并排序 const membersByGeneration = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["useMemo"])(()=>{ const groups = new Map(); filteredMembers.forEach((member)=>{ @@ -1796,10 +1788,42 @@ function MembersPage() { groups.get(gen).push(member); }); // 转换为数组并排序 - return Array.from(groups.entries()).sort((a, b)=>a[0] - b[0]).map(([generation, members])=>({ + return Array.from(groups.entries()).sort((a, b)=>a[0] - b[0]).map(([generation, members])=>{ + // 对每个世代的成员进行排序 + const sortedMembers = [ + ...members + ].sort((a, b)=>{ + // 1. 始祖永远排第一 + const aIsFounder = a.tags?.includes('始祖') || a.generation === 1; + const bIsFounder = b.tags?.includes('始祖') || b.generation === 1; + if (aIsFounder && !bIsFounder) return -1; + if (!aIsFounder && bIsFounder) return 1; + // 2. 按出生日期排序 + return (a.birthDate || "").localeCompare(b.birthDate || ""); + }); + // 3. 将配偶插入到主成员后面 + const result = []; + const processedSpouses = new Set(); + sortedMembers.forEach((member)=>{ + // 跳过已经作为配偶处理过的成员 + if (processedSpouses.has(member.id)) return; + result.push(member); + // 如果有配偶,将配偶紧跟在后面 + if (member.spouseIds && member.spouseIds.length > 0) { + member.spouseIds.forEach((spouseId)=>{ + const spouse = members.find((m)=>m.id === spouseId); + if (spouse && !processedSpouses.has(spouseId)) { + result.push(spouse); + processedSpouses.add(spouseId); + } + }); + } + }); + return { generation, - members - })); + members: result + }; + }); }, [ filteredMembers ]); @@ -1819,7 +1843,7 @@ function MembersPage() { children: [ /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$site$2d$header$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["SiteHeader"], {}, void 0, false, { fileName: "[project]/Documents/go-new/chinese-family-tree/app/members/page.tsx", - lineNumber: 152, + lineNumber: 188, columnNumber: 7 }, this), /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("main", { @@ -1836,7 +1860,7 @@ function MembersPage() { children: "家族成员列表" }, void 0, false, { fileName: "[project]/Documents/go-new/chinese-family-tree/app/members/page.tsx", - lineNumber: 156, + lineNumber: 192, columnNumber: 13 }, this), /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { @@ -1849,7 +1873,7 @@ function MembersPage() { className: "absolute left-2.5 top-2.5 h-4 w-4 text-muted-foreground" }, void 0, false, { fileName: "[project]/Documents/go-new/chinese-family-tree/app/members/page.tsx", - lineNumber: 159, + lineNumber: 195, columnNumber: 17 }, this), /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$input$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["Input"], { @@ -1860,13 +1884,13 @@ function MembersPage() { onChange: (e)=>setQuery(e.target.value) }, void 0, false, { fileName: "[project]/Documents/go-new/chinese-family-tree/app/members/page.tsx", - lineNumber: 160, + lineNumber: 196, columnNumber: 17 }, this) ] }, void 0, true, { fileName: "[project]/Documents/go-new/chinese-family-tree/app/members/page.tsx", - lineNumber: 158, + lineNumber: 194, columnNumber: 15 }, this), /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$button$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["Button"], { @@ -1879,20 +1903,20 @@ function MembersPage() { className: "h-4 w-4" }, void 0, false, { fileName: "[project]/Documents/go-new/chinese-family-tree/app/members/page.tsx", - lineNumber: 174, + lineNumber: 210, columnNumber: 17 }, this), activeFilterCount > 0 && /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("span", { className: "absolute -top-1 -right-1 h-3 w-3 rounded-full bg-primary border-2 border-background" }, void 0, false, { fileName: "[project]/Documents/go-new/chinese-family-tree/app/members/page.tsx", - lineNumber: 176, + lineNumber: 212, columnNumber: 19 }, this) ] }, void 0, true, { fileName: "[project]/Documents/go-new/chinese-family-tree/app/members/page.tsx", - lineNumber: 168, + lineNumber: 204, columnNumber: 15 }, this), /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$client$2f$app$2d$dir$2f$link$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["default"], { @@ -1904,31 +1928,31 @@ function MembersPage() { className: "h-4 w-4" }, void 0, false, { fileName: "[project]/Documents/go-new/chinese-family-tree/app/members/page.tsx", - lineNumber: 181, + lineNumber: 217, columnNumber: 19 }, this), "新增成员" ] }, void 0, true, { fileName: "[project]/Documents/go-new/chinese-family-tree/app/members/page.tsx", - lineNumber: 180, + lineNumber: 216, columnNumber: 17 }, this) }, void 0, false, { fileName: "[project]/Documents/go-new/chinese-family-tree/app/members/page.tsx", - lineNumber: 179, + lineNumber: 215, columnNumber: 15 }, this) ] }, void 0, true, { fileName: "[project]/Documents/go-new/chinese-family-tree/app/members/page.tsx", - lineNumber: 157, + lineNumber: 193, columnNumber: 13 }, this) ] }, void 0, true, { fileName: "[project]/Documents/go-new/chinese-family-tree/app/members/page.tsx", - lineNumber: 155, + lineNumber: 191, columnNumber: 11 }, this), showFilters && /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { @@ -1942,7 +1966,7 @@ function MembersPage() { children: "高级筛选" }, void 0, false, { fileName: "[project]/Documents/go-new/chinese-family-tree/app/members/page.tsx", - lineNumber: 192, + lineNumber: 228, columnNumber: 17 }, this), /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$button$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["Button"], { @@ -1955,20 +1979,20 @@ function MembersPage() { className: "mr-1 h-3 w-3" }, void 0, false, { fileName: "[project]/Documents/go-new/chinese-family-tree/app/members/page.tsx", - lineNumber: 194, + lineNumber: 230, columnNumber: 19 }, this), " 重置筛选" ] }, void 0, true, { fileName: "[project]/Documents/go-new/chinese-family-tree/app/members/page.tsx", - lineNumber: 193, + lineNumber: 229, columnNumber: 17 }, this) ] }, void 0, true, { fileName: "[project]/Documents/go-new/chinese-family-tree/app/members/page.tsx", - lineNumber: 191, + lineNumber: 227, columnNumber: 15 }, this), /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { @@ -1982,7 +2006,7 @@ function MembersPage() { children: "姓氏 (Surname)" }, void 0, false, { fileName: "[project]/Documents/go-new/chinese-family-tree/app/members/page.tsx", - lineNumber: 199, + lineNumber: 235, columnNumber: 19 }, this), /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$select$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["Select"], { @@ -1994,12 +2018,12 @@ function MembersPage() { placeholder: "全部" }, void 0, false, { fileName: "[project]/Documents/go-new/chinese-family-tree/app/members/page.tsx", - lineNumber: 202, + lineNumber: 238, columnNumber: 23 }, this) }, void 0, false, { fileName: "[project]/Documents/go-new/chinese-family-tree/app/members/page.tsx", - lineNumber: 201, + lineNumber: 237, columnNumber: 21 }, this), /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$select$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["SelectContent"], { @@ -2009,7 +2033,7 @@ function MembersPage() { children: "全部 (All)" }, void 0, false, { fileName: "[project]/Documents/go-new/chinese-family-tree/app/members/page.tsx", - lineNumber: 205, + lineNumber: 241, columnNumber: 23 }, this), uniqueSurnames.map((s)=>/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$select$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["SelectItem"], { @@ -2017,25 +2041,25 @@ function MembersPage() { children: s }, s, false, { fileName: "[project]/Documents/go-new/chinese-family-tree/app/members/page.tsx", - lineNumber: 207, + lineNumber: 243, columnNumber: 25 }, this)) ] }, void 0, true, { fileName: "[project]/Documents/go-new/chinese-family-tree/app/members/page.tsx", - lineNumber: 204, + lineNumber: 240, columnNumber: 21 }, this) ] }, void 0, true, { fileName: "[project]/Documents/go-new/chinese-family-tree/app/members/page.tsx", - lineNumber: 200, + lineNumber: 236, columnNumber: 19 }, this) ] }, void 0, true, { fileName: "[project]/Documents/go-new/chinese-family-tree/app/members/page.tsx", - lineNumber: 198, + lineNumber: 234, columnNumber: 17 }, this), /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { @@ -2046,7 +2070,7 @@ function MembersPage() { children: "籍贯 (Ancestral Home)" }, void 0, false, { fileName: "[project]/Documents/go-new/chinese-family-tree/app/members/page.tsx", - lineNumber: 216, + lineNumber: 252, columnNumber: 19 }, this), /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$select$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["Select"], { @@ -2058,12 +2082,12 @@ function MembersPage() { placeholder: "全部" }, void 0, false, { fileName: "[project]/Documents/go-new/chinese-family-tree/app/members/page.tsx", - lineNumber: 219, + lineNumber: 255, columnNumber: 23 }, this) }, void 0, false, { fileName: "[project]/Documents/go-new/chinese-family-tree/app/members/page.tsx", - lineNumber: 218, + lineNumber: 254, columnNumber: 21 }, this), /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$select$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["SelectContent"], { @@ -2073,7 +2097,7 @@ function MembersPage() { children: "全部 (All)" }, void 0, false, { fileName: "[project]/Documents/go-new/chinese-family-tree/app/members/page.tsx", - lineNumber: 222, + lineNumber: 258, columnNumber: 23 }, this), uniqueHomes.map((h)=>/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$select$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["SelectItem"], { @@ -2081,25 +2105,25 @@ function MembersPage() { children: h }, h, false, { fileName: "[project]/Documents/go-new/chinese-family-tree/app/members/page.tsx", - lineNumber: 224, + lineNumber: 260, columnNumber: 25 }, this)) ] }, void 0, true, { fileName: "[project]/Documents/go-new/chinese-family-tree/app/members/page.tsx", - lineNumber: 221, + lineNumber: 257, columnNumber: 21 }, this) ] }, void 0, true, { fileName: "[project]/Documents/go-new/chinese-family-tree/app/members/page.tsx", - lineNumber: 217, + lineNumber: 253, columnNumber: 19 }, this) ] }, void 0, true, { fileName: "[project]/Documents/go-new/chinese-family-tree/app/members/page.tsx", - lineNumber: 215, + lineNumber: 251, columnNumber: 17 }, this), /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { @@ -2110,7 +2134,7 @@ function MembersPage() { children: "状态 (Status)" }, void 0, false, { fileName: "[project]/Documents/go-new/chinese-family-tree/app/members/page.tsx", - lineNumber: 233, + lineNumber: 269, columnNumber: 19 }, this), /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$select$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["Select"], { @@ -2122,12 +2146,12 @@ function MembersPage() { placeholder: "全部" }, void 0, false, { fileName: "[project]/Documents/go-new/chinese-family-tree/app/members/page.tsx", - lineNumber: 236, + lineNumber: 272, columnNumber: 23 }, this) }, void 0, false, { fileName: "[project]/Documents/go-new/chinese-family-tree/app/members/page.tsx", - lineNumber: 235, + lineNumber: 271, columnNumber: 21 }, this), /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$select$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["SelectContent"], { @@ -2137,7 +2161,7 @@ function MembersPage() { children: "全部 (All)" }, void 0, false, { fileName: "[project]/Documents/go-new/chinese-family-tree/app/members/page.tsx", - lineNumber: 239, + lineNumber: 275, columnNumber: 23 }, this), /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$select$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["SelectItem"], { @@ -2145,7 +2169,7 @@ function MembersPage() { children: "在世 (Living)" }, void 0, false, { fileName: "[project]/Documents/go-new/chinese-family-tree/app/members/page.tsx", - lineNumber: 240, + lineNumber: 276, columnNumber: 23 }, this), /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$select$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["SelectItem"], { @@ -2153,25 +2177,25 @@ function MembersPage() { children: "已故 (Deceased)" }, void 0, false, { fileName: "[project]/Documents/go-new/chinese-family-tree/app/members/page.tsx", - lineNumber: 241, + lineNumber: 277, columnNumber: 23 }, this) ] }, void 0, true, { fileName: "[project]/Documents/go-new/chinese-family-tree/app/members/page.tsx", - lineNumber: 238, + lineNumber: 274, columnNumber: 21 }, this) ] }, void 0, true, { fileName: "[project]/Documents/go-new/chinese-family-tree/app/members/page.tsx", - lineNumber: 234, + lineNumber: 270, columnNumber: 19 }, this) ] }, void 0, true, { fileName: "[project]/Documents/go-new/chinese-family-tree/app/members/page.tsx", - lineNumber: 232, + lineNumber: 268, columnNumber: 17 }, this), /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { @@ -2185,7 +2209,7 @@ function MembersPage() { children: "世系范围 (Generation)" }, void 0, false, { fileName: "[project]/Documents/go-new/chinese-family-tree/app/members/page.tsx", - lineNumber: 248, + lineNumber: 284, columnNumber: 21 }, this), /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("span", { @@ -2198,13 +2222,13 @@ function MembersPage() { ] }, void 0, true, { fileName: "[project]/Documents/go-new/chinese-family-tree/app/members/page.tsx", - lineNumber: 249, + lineNumber: 285, columnNumber: 21 }, this) ] }, void 0, true, { fileName: "[project]/Documents/go-new/chinese-family-tree/app/members/page.tsx", - lineNumber: 247, + lineNumber: 283, columnNumber: 19 }, this), /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$slider$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["Slider"], { @@ -2220,31 +2244,31 @@ function MembersPage() { className: "py-4" }, void 0, false, { fileName: "[project]/Documents/go-new/chinese-family-tree/app/members/page.tsx", - lineNumber: 253, + lineNumber: 289, columnNumber: 19 }, this) ] }, void 0, true, { fileName: "[project]/Documents/go-new/chinese-family-tree/app/members/page.tsx", - lineNumber: 246, + lineNumber: 282, columnNumber: 17 }, this) ] }, void 0, true, { fileName: "[project]/Documents/go-new/chinese-family-tree/app/members/page.tsx", - lineNumber: 197, + lineNumber: 233, columnNumber: 15 }, this) ] }, void 0, true, { fileName: "[project]/Documents/go-new/chinese-family-tree/app/members/page.tsx", - lineNumber: 190, + lineNumber: 226, columnNumber: 13 }, this) ] }, void 0, true, { fileName: "[project]/Documents/go-new/chinese-family-tree/app/members/page.tsx", - lineNumber: 154, + lineNumber: 190, columnNumber: 9 }, this), filteredMembers.length === 0 ? /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { @@ -2252,7 +2276,7 @@ function MembersPage() { children: "没有找到匹配的成员。" }, void 0, false, { fileName: "[project]/Documents/go-new/chinese-family-tree/app/members/page.tsx", - lineNumber: 269, + lineNumber: 305, columnNumber: 11 }, this) : /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { className: "space-y-8", @@ -2270,7 +2294,7 @@ function MembersPage() { ] }, void 0, true, { fileName: "[project]/Documents/go-new/chinese-family-tree/app/members/page.tsx", - lineNumber: 277, + lineNumber: 313, columnNumber: 19 }, this), /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("span", { @@ -2282,20 +2306,20 @@ function MembersPage() { ] }, void 0, true, { fileName: "[project]/Documents/go-new/chinese-family-tree/app/members/page.tsx", - lineNumber: 278, + lineNumber: 314, columnNumber: 19 }, this), /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { className: "flex-1 h-px bg-border" }, void 0, false, { fileName: "[project]/Documents/go-new/chinese-family-tree/app/members/page.tsx", - lineNumber: 279, + lineNumber: 315, columnNumber: 19 }, this) ] }, void 0, true, { fileName: "[project]/Documents/go-new/chinese-family-tree/app/members/page.tsx", - lineNumber: 276, + lineNumber: 312, columnNumber: 17 }, this), /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { @@ -2331,7 +2355,7 @@ function MembersPage() { className: "h-20 w-20 border-2 border-border" }, void 0, false, { fileName: "[project]/Documents/go-new/chinese-family-tree/app/members/page.tsx", - lineNumber: 302, + lineNumber: 338, columnNumber: 29 }, this), member.deathDate && /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { @@ -2339,7 +2363,7 @@ function MembersPage() { title: "已故" }, void 0, false, { fileName: "[project]/Documents/go-new/chinese-family-tree/app/members/page.tsx", - lineNumber: 311, + lineNumber: 347, columnNumber: 31 }, this), !member.deathDate && /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { @@ -2347,13 +2371,13 @@ function MembersPage() { title: "在世" }, void 0, false, { fileName: "[project]/Documents/go-new/chinese-family-tree/app/members/page.tsx", - lineNumber: 314, + lineNumber: 350, columnNumber: 31 }, this) ] }, void 0, true, { fileName: "[project]/Documents/go-new/chinese-family-tree/app/members/page.tsx", - lineNumber: 301, + lineNumber: 337, columnNumber: 27 }, this), /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { @@ -2373,18 +2397,18 @@ function MembersPage() { ] }, void 0, true, { fileName: "[project]/Documents/go-new/chinese-family-tree/app/members/page.tsx", - lineNumber: 322, + lineNumber: 358, columnNumber: 35 }, this) ] }, void 0, true, { fileName: "[project]/Documents/go-new/chinese-family-tree/app/members/page.tsx", - lineNumber: 319, + lineNumber: 355, columnNumber: 31 }, this) }, void 0, false, { fileName: "[project]/Documents/go-new/chinese-family-tree/app/members/page.tsx", - lineNumber: 318, + lineNumber: 354, columnNumber: 29 }, this), isFounder ? /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("p", { @@ -2392,7 +2416,7 @@ function MembersPage() { children: "家族始祖" }, void 0, false, { fileName: "[project]/Documents/go-new/chinese-family-tree/app/members/page.tsx", - lineNumber: 329, + lineNumber: 365, columnNumber: 31 }, this) : isSpouse && spouseName ? /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("p", { className: "text-[11px] text-purple-700 mt-0.5 truncate", @@ -2402,14 +2426,14 @@ function MembersPage() { ] }, void 0, true, { fileName: "[project]/Documents/go-new/chinese-family-tree/app/members/page.tsx", - lineNumber: 333, + lineNumber: 369, columnNumber: 31 }, this) : /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("p", { className: "text-[11px] text-muted-foreground mt-0.5 truncate", children: member.generationName ? `字辈: ${member.generationName}` : "未录入字辈" }, void 0, false, { fileName: "[project]/Documents/go-new/chinese-family-tree/app/members/page.tsx", - lineNumber: 337, + lineNumber: 373, columnNumber: 31 }, this), /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { @@ -2420,7 +2444,7 @@ function MembersPage() { children: member.ancestralHome || "籍贯未知" }, void 0, false, { fileName: "[project]/Documents/go-new/chinese-family-tree/app/members/page.tsx", - lineNumber: 344, + lineNumber: 380, columnNumber: 31 }, this), (member.birthDate || member.deathDate) && /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { @@ -2434,7 +2458,7 @@ function MembersPage() { ] }, void 0, true, { fileName: "[project]/Documents/go-new/chinese-family-tree/app/members/page.tsx", - lineNumber: 349, + lineNumber: 385, columnNumber: 35 }, this), (()=>{ @@ -2447,20 +2471,20 @@ function MembersPage() { children: member.deathDate ? `享年${age}岁` : `${age}岁` }, void 0, false, { fileName: "[project]/Documents/go-new/chinese-family-tree/app/members/page.tsx", - lineNumber: 360, + lineNumber: 396, columnNumber: 39 }, this); })() ] }, void 0, true, { fileName: "[project]/Documents/go-new/chinese-family-tree/app/members/page.tsx", - lineNumber: 348, + lineNumber: 384, columnNumber: 33 }, this) ] }, void 0, true, { fileName: "[project]/Documents/go-new/chinese-family-tree/app/members/page.tsx", - lineNumber: 343, + lineNumber: 379, columnNumber: 29 }, this), member.tags && member.tags.length > 0 && /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { @@ -2470,34 +2494,34 @@ function MembersPage() { children: tag }, tag, false, { fileName: "[project]/Documents/go-new/chinese-family-tree/app/members/page.tsx", - lineNumber: 372, + lineNumber: 408, columnNumber: 35 }, this)) }, void 0, false, { fileName: "[project]/Documents/go-new/chinese-family-tree/app/members/page.tsx", - lineNumber: 370, + lineNumber: 406, columnNumber: 31 }, this) ] }, void 0, true, { fileName: "[project]/Documents/go-new/chinese-family-tree/app/members/page.tsx", - lineNumber: 317, + lineNumber: 353, columnNumber: 27 }, this) ] }, void 0, true, { fileName: "[project]/Documents/go-new/chinese-family-tree/app/members/page.tsx", - lineNumber: 300, + lineNumber: 336, columnNumber: 25 }, this) }, void 0, false, { fileName: "[project]/Documents/go-new/chinese-family-tree/app/members/page.tsx", - lineNumber: 299, + lineNumber: 335, columnNumber: 25 }, this) }, void 0, false, { fileName: "[project]/Documents/go-new/chinese-family-tree/app/members/page.tsx", - lineNumber: 298, + lineNumber: 334, columnNumber: 23 }, this), /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$button$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["Button"], { @@ -2513,47 +2537,47 @@ function MembersPage() { className: "h-3 w-3" }, void 0, false, { fileName: "[project]/Documents/go-new/chinese-family-tree/app/members/page.tsx", - lineNumber: 395, + lineNumber: 431, columnNumber: 23 }, this) }, void 0, false, { fileName: "[project]/Documents/go-new/chinese-family-tree/app/members/page.tsx", - lineNumber: 385, + lineNumber: 421, columnNumber: 21 }, this) ] }, member.id, true, { fileName: "[project]/Documents/go-new/chinese-family-tree/app/members/page.tsx", - lineNumber: 297, + lineNumber: 333, columnNumber: 21 }, this); }) }, void 0, false, { fileName: "[project]/Documents/go-new/chinese-family-tree/app/members/page.tsx", - lineNumber: 281, + lineNumber: 317, columnNumber: 17 }, this) ] }, generation, true, { fileName: "[project]/Documents/go-new/chinese-family-tree/app/members/page.tsx", - lineNumber: 275, + lineNumber: 311, columnNumber: 15 }, this)) }, void 0, false, { fileName: "[project]/Documents/go-new/chinese-family-tree/app/members/page.tsx", - lineNumber: 273, + lineNumber: 309, columnNumber: 11 }, this) ] }, void 0, true, { fileName: "[project]/Documents/go-new/chinese-family-tree/app/members/page.tsx", - lineNumber: 153, + lineNumber: 189, columnNumber: 7 }, this) ] }, void 0, true, { fileName: "[project]/Documents/go-new/chinese-family-tree/app/members/page.tsx", - lineNumber: 151, + lineNumber: 187, columnNumber: 5 }, this); } diff --git a/.next/dev/server/chunks/ssr/Documents_go-new_chinese-family-tree_735c6a78._.js.map b/.next/dev/server/chunks/ssr/Documents_go-new_chinese-family-tree_735c6a78._.js.map index 2f3ae6a4..794cee37 100644 --- a/.next/dev/server/chunks/ssr/Documents_go-new_chinese-family-tree_735c6a78._.js.map +++ b/.next/dev/server/chunks/ssr/Documents_go-new_chinese-family-tree_735c6a78._.js.map @@ -4,10 +4,10 @@ "sections": [ {"offset": {"line": 4, "column": 0}, "map": {"version":3,"sources":["file:///Users/freedak/Documents/go-new/chinese-family-tree/components/ui/avatar.tsx"],"sourcesContent":["'use client'\n\nimport * as React from 'react'\nimport * as AvatarPrimitive from '@radix-ui/react-avatar'\n\nimport { cn } from '@/lib/utils'\n\nfunction Avatar({\n className,\n ...props\n}: React.ComponentProps) {\n return (\n \n )\n}\n\nfunction AvatarImage({\n className,\n ...props\n}: React.ComponentProps) {\n return (\n \n )\n}\n\nfunction AvatarFallback({\n className,\n ...props\n}: React.ComponentProps) {\n return (\n \n )\n}\n\nexport { Avatar, AvatarImage, AvatarFallback }\n"],"names":[],"mappings":";;;;;;;;;AAGA;AAEA;AALA;;;;AAOA,SAAS,OAAO,EACd,SAAS,EACT,GAAG,OAC+C;IAClD,qBACE,oaAAC,qbAAoB;QACnB,aAAU;QACV,WAAW,IAAA,yKAAE,EACX,8DACA;QAED,GAAG,KAAK;;;;;;AAGf;AAEA,SAAS,YAAY,EACnB,SAAS,EACT,GAAG,OACgD;IACnD,qBACE,oaAAC,sbAAqB;QACpB,aAAU;QACV,WAAW,IAAA,yKAAE,EAAC,2BAA2B;QACxC,GAAG,KAAK;;;;;;AAGf;AAEA,SAAS,eAAe,EACtB,SAAS,EACT,GAAG,OACmD;IACtD,qBACE,oaAAC,ybAAwB;QACvB,aAAU;QACV,WAAW,IAAA,yKAAE,EACX,oEACA;QAED,GAAG,KAAK;;;;;;AAGf"}}, {"offset": {"line": 57, "column": 0}, "map": {"version":3,"sources":["file:///Users/freedak/Documents/go-new/chinese-family-tree/components/ui/dropdown-menu.tsx"],"sourcesContent":["'use client'\n\nimport * as React from 'react'\nimport * as DropdownMenuPrimitive from '@radix-ui/react-dropdown-menu'\nimport { CheckIcon, ChevronRightIcon, CircleIcon } from 'lucide-react'\n\nimport { cn } from '@/lib/utils'\n\nfunction DropdownMenu({\n ...props\n}: React.ComponentProps) {\n return \n}\n\nfunction DropdownMenuPortal({\n ...props\n}: React.ComponentProps) {\n return (\n \n )\n}\n\nfunction DropdownMenuTrigger({\n ...props\n}: React.ComponentProps) {\n return (\n \n )\n}\n\nfunction DropdownMenuContent({\n className,\n sideOffset = 4,\n ...props\n}: React.ComponentProps) {\n return (\n \n \n \n )\n}\n\nfunction DropdownMenuGroup({\n ...props\n}: React.ComponentProps) {\n return (\n \n )\n}\n\nfunction DropdownMenuItem({\n className,\n inset,\n variant = 'default',\n ...props\n}: React.ComponentProps & {\n inset?: boolean\n variant?: 'default' | 'destructive'\n}) {\n return (\n \n )\n}\n\nfunction DropdownMenuCheckboxItem({\n className,\n children,\n checked,\n ...props\n}: React.ComponentProps) {\n return (\n \n \n \n \n \n \n {children}\n \n )\n}\n\nfunction DropdownMenuRadioGroup({\n ...props\n}: React.ComponentProps) {\n return (\n \n )\n}\n\nfunction DropdownMenuRadioItem({\n className,\n children,\n ...props\n}: React.ComponentProps) {\n return (\n \n \n \n \n \n \n {children}\n \n )\n}\n\nfunction DropdownMenuLabel({\n className,\n inset,\n ...props\n}: React.ComponentProps & {\n inset?: boolean\n}) {\n return (\n \n )\n}\n\nfunction DropdownMenuSeparator({\n className,\n ...props\n}: React.ComponentProps) {\n return (\n \n )\n}\n\nfunction DropdownMenuShortcut({\n className,\n ...props\n}: React.ComponentProps<'span'>) {\n return (\n \n )\n}\n\nfunction DropdownMenuSub({\n ...props\n}: React.ComponentProps) {\n return \n}\n\nfunction DropdownMenuSubTrigger({\n className,\n inset,\n children,\n ...props\n}: React.ComponentProps & {\n inset?: boolean\n}) {\n return (\n \n {children}\n \n \n )\n}\n\nfunction DropdownMenuSubContent({\n className,\n ...props\n}: React.ComponentProps) {\n return (\n \n )\n}\n\nexport {\n DropdownMenu,\n DropdownMenuPortal,\n DropdownMenuTrigger,\n DropdownMenuContent,\n DropdownMenuGroup,\n DropdownMenuLabel,\n DropdownMenuItem,\n DropdownMenuCheckboxItem,\n DropdownMenuRadioGroup,\n DropdownMenuRadioItem,\n DropdownMenuSeparator,\n DropdownMenuShortcut,\n DropdownMenuSub,\n DropdownMenuSubTrigger,\n DropdownMenuSubContent,\n}\n"],"names":[],"mappings":"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"}}, - {"offset": {"line": 332, "column": 0}, "map": {"version":3,"sources":["file:///Users/freedak/Documents/go-new/chinese-family-tree/components/site-header.tsx"],"sourcesContent":["\"use client\"\n\nimport Link from \"next/link\"\nimport { BookOpen, Search, Bell, Settings, LogOut, User, ChevronDown, Plus, Trash2, Network, LayoutGrid } from \"lucide-react\"\nimport { Button } from \"@/components/ui/button\"\nimport { Input } from \"@/components/ui/input\"\nimport { Avatar, AvatarFallback, AvatarImage } from \"@/components/ui/avatar\"\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuLabel,\n DropdownMenuSeparator,\n DropdownMenuTrigger,\n} from \"@/components/ui/dropdown-menu\"\nimport { useFamily } from \"@/context/family-context\"\nimport { useState, useRef, useEffect, useCallback } from \"react\"\nimport { useRouter, usePathname, useSearchParams } from \"next/navigation\"\nimport { useSession, signOut } from \"next-auth/react\"\nimport { useDialog } from \"@/components/ui/alert-dialog-custom\"\n\ninterface FamilyTree {\n id: string\n name: string\n description: string | null\n ownerId: string\n currentUserRole?: \"OWNER\" | \"EDITOR\" | \"VIEWER\"\n}\n\nexport function SiteHeader() {\n const { searchMembers, searchResults } = useFamily()\n const { data: session, status } = useSession()\n const { showAlert, showConfirm, showPrompt } = useDialog()\n const pathname = usePathname()\n const searchParams = useSearchParams()\n const [searchQuery, setSearchQuery] = useState(\"\")\n const [showResults, setShowResults] = useState(false)\n const [familyTrees, setFamilyTrees] = useState([])\n const [currentTree, setCurrentTree] = useState(null)\n const [deletingTreeId, setDeletingTreeId] = useState(null)\n const searchRef = useRef(null)\n const router = useRouter()\n \n // 获取当前视图模式\n const currentViewMode = searchParams.get('view') || 'traditional'\n const isTreePage = pathname === '/tree'\n\n // 生成带有 treeId 的 URL\n const getUrlWithTreeId = (path: string) => {\n if (currentTree?.id) {\n return `${path}?treeId=${currentTree.id}`\n }\n return path\n }\n\n // 切换视图模式\n const handleViewModeChange = (mode: string) => {\n const params = new URLSearchParams(searchParams.toString())\n params.set('view', mode)\n if (currentTree?.id) {\n params.set('treeId', currentTree.id)\n }\n router.push(`${pathname}?${params.toString()}`)\n }\n\n const getRoleBadge = (role?: string) => {\n switch (role) {\n case \"OWNER\":\n return 所有者\n case \"EDITOR\":\n return 编辑\n case \"VIEWER\":\n return 查看\n default:\n return null\n }\n }\n\n const handleSignOut = async () => {\n await signOut({ callbackUrl: \"/auth/signin\" })\n }\n\n // 获取用户名首字母作为头像\n const getUserInitial = () => {\n if (session?.user?.name) {\n return session.user.name.charAt(0).toUpperCase()\n }\n if (session?.user?.email) {\n return session.user.email.charAt(0).toUpperCase()\n }\n return \"U\"\n }\n\n // 删除家族树\n const handleDeleteTree = async (tree: FamilyTree, e: React.MouseEvent) => {\n e.stopPropagation() // 阻止触发选择事件\n\n // 检查权限\n if (tree.ownerId !== session?.user?.id) {\n await showAlert('只有家族树的创建者才能删除', '权限不足')\n return\n }\n\n const confirmText = `确定要删除家族树\"${tree.name}\"吗?\\n\\n此操作将永久删除所有成员、活动日志和协作者数据,且不可撤销!`\n const confirmed = await showConfirm(confirmText, '删除家族树', 'destructive')\n if (!confirmed) {\n return\n }\n\n // 二次确认\n const finalConfirm = await showPrompt(\n `请输入家族树名称\"${tree.name}\"以确认删除:`,\n '',\n '确认删除'\n )\n if (finalConfirm !== tree.name) {\n await showAlert('名称不匹配,删除已取消', '操作已取消')\n return\n }\n\n setDeletingTreeId(tree.id)\n try {\n const response = await fetch(`/api/trees/${tree.id}`, {\n method: 'DELETE',\n })\n\n if (!response.ok) {\n const error = await response.json()\n throw new Error(error.error || '删除失败')\n }\n\n // 刷新家族树列表\n await loadFamilyTrees()\n \n // 如果删除的是当前树,跳转到首页\n if (currentTree?.id === tree.id) {\n window.location.href = '/'\n }\n } catch (error) {\n console.error('删除家族树失败:', error)\n await showAlert('删除失败:' + (error as Error).message, '错误')\n } finally {\n setDeletingTreeId(null)\n }\n }\n\n // 获取家族树列表\n const loadFamilyTrees = useCallback(() => {\n if (!session?.user?.id || status !== 'authenticated') return\n\n const controller = new AbortController()\n \n fetch('/api/trees', { signal: controller.signal })\n .then(res => {\n if (!res.ok) throw new Error(`HTTP error! status: ${res.status}`)\n return res.json()\n })\n .then(data => {\n if (data.trees) {\n setFamilyTrees(data.trees)\n // 如果 URL 中有 treeId,使用该树,否则使用第一个\n const urlParams = new URLSearchParams(window.location.search)\n const treeId = urlParams.get('treeId')\n if (treeId) {\n const tree = data.trees.find((t: FamilyTree) => t.id === treeId)\n if (tree) {\n setCurrentTree(tree)\n } else if (data.trees.length > 0) {\n setCurrentTree(data.trees[0])\n }\n } else if (data.trees.length > 0) {\n setCurrentTree(data.trees[0])\n }\n }\n })\n .catch(err => {\n // 忽略 abort 错误和 fetch 错误(可能是页面切换导致的)\n if (err.name !== 'AbortError' && err.message !== 'Failed to fetch') {\n console.error('获取家族树列表失败:', err)\n }\n })\n \n return () => controller.abort()\n }, [session?.user?.id, status])\n\n useEffect(() => {\n loadFamilyTrees()\n }, [loadFamilyTrees])\n\n // 监听路由变化,刷新家族树列表\n useEffect(() => {\n const handleRouteChange = () => {\n loadFamilyTrees()\n }\n \n window.addEventListener('focus', handleRouteChange)\n return () => window.removeEventListener('focus', handleRouteChange)\n }, [loadFamilyTrees])\n\n // 点击外部关闭搜索结果\n useEffect(() => {\n function handleClickOutside(event: MouseEvent) {\n if (searchRef.current && !searchRef.current.contains(event.target as Node)) {\n setShowResults(false)\n }\n }\n document.addEventListener(\"mousedown\", handleClickOutside)\n return () => document.removeEventListener(\"mousedown\", handleClickOutside)\n }, [])\n\n const handleSearch = (query: string) => {\n setSearchQuery(query)\n searchMembers(query)\n setShowResults(query.length > 0)\n }\n\n const handleSelectMember = (memberId: string) => {\n router.push(`/members/${memberId}`)\n setSearchQuery(\"\")\n setShowResults(false)\n }\n\n return (\n

\n
\n
\n \n
\n \n
\n 华夏谱\n \n \n {/* 家族树选择器 */}\n {session && familyTrees.length > 0 && (\n \n \n \n \n \n 我的家族树\n \n {familyTrees.map((tree) => (\n {\n setCurrentTree(tree)\n // 保持当前路径,只更新 treeId 参数\n const currentPath = window.location.pathname\n router.push(`${currentPath}?treeId=${tree.id}`)\n }}\n className=\"cursor-pointer flex items-center justify-between group\"\n >\n
\n {tree.name}\n {getRoleBadge(tree.currentUserRole)}\n
\n
\n {currentTree?.id === tree.id && (\n \n )}\n {tree.ownerId === session?.user?.id && (\n handleDeleteTree(tree, e)}\n disabled={deletingTreeId === tree.id}\n >\n \n \n )}\n
\n \n ))}\n \n router.push('/trees/new')}\n className=\"cursor-pointer text-primary\"\n >\n \n 创建新家族树\n \n
\n
\n )}\n
\n\n \n\n
\n \n\n \n\n \n \n \n\n \n \n \n\n {status === \"loading\" ? (\n \n ...\n \n ) : session ? (\n \n \n \n \n \n \n
\n

{session.user?.name || \"用户\"}

\n

\n {session.user?.email}\n

\n
\n
\n \n \n \n \n 系统设置\n \n \n \n \n \n 退出登录\n \n
\n
\n ) : (\n \n \n \n )}\n
\n
\n
\n )\n}\n"],"names":[],"mappings":"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"}}, - {"offset": {"line": 1229, "column": 0}, "map": {"version":3,"sources":["file:///Users/freedak/Documents/go-new/chinese-family-tree/lib/db.ts"],"sourcesContent":["import Dexie, { type Table } from \"dexie\"\nimport type { FamilyMember } from \"@/types/family\"\n\nexport interface GlobalSettings {\n key: string\n value: any\n}\n\nexport interface StoredImage {\n id: string\n blob: Blob\n mimeType: string\n createdAt: string\n}\n\nexport interface ActivityLog {\n id: string\n action: \"create\" | \"update\" | \"delete\" | \"import\" | \"export\"\n entityType: \"member\" | \"photo\" | \"story\" | \"settings\"\n entityId?: string\n entityName?: string\n changes?: any\n timestamp: string\n userId?: string\n userName?: string\n}\n\nexport class FamilyTreeDB extends Dexie {\n members!: Table\n settings!: Table\n images!: Table\n activityLogs!: Table\n\n constructor() {\n super(\"FamilyTreeDB\")\n this.version(1).stores({\n members: \"id, fullName, fatherId, motherId, [fatherId+motherId]\", // Index for searching\n settings: \"key\", // Key-value store for rootId etc.\n images: \"id\", // Store images by ID\n })\n this.version(2).stores({\n members: \"id, fullName, fatherId, motherId, [fatherId+motherId]\", // Index for searching\n settings: \"key\", // Key-value store for rootId etc.\n images: \"id\", // Store images by ID\n activityLogs: \"id, timestamp, action, entityType, entityId\",\n })\n }\n}\n\nexport const db = new FamilyTreeDB()\n"],"names":[],"mappings":";;;;;;AAAA;;AA2BO,MAAM,qBAAqB,+PAAK;IACrC,QAA6B;IAC7B,SAAgC;IAChC,OAA2B;IAC3B,aAAiC;IAEjC,aAAc;QACZ,KAAK,CAAC;QACN,IAAI,CAAC,OAAO,CAAC,GAAG,MAAM,CAAC;YACrB,SAAS;YACT,UAAU;YACV,QAAQ;QACV;QACA,IAAI,CAAC,OAAO,CAAC,GAAG,MAAM,CAAC;YACrB,SAAS;YACT,UAAU;YACV,QAAQ;YACR,cAAc;QAChB;IACF;AACF;AAEO,MAAM,KAAK,IAAI"}}, - {"offset": {"line": 1262, "column": 0}, "map": {"version":3,"sources":["file:///Users/freedak/Documents/go-new/chinese-family-tree/components/ui/avatar-display.tsx"],"sourcesContent":["\"use client\"\n\nimport { useState, useEffect } from \"react\"\nimport { Avatar, AvatarFallback, AvatarImage } from \"@/components/ui/avatar\"\nimport { db } from \"@/lib/db\"\nimport { CircleUser, CircleUserRound } from \"lucide-react\"\nimport type { Gender } from \"@/types/family\"\n\ninterface AvatarDisplayProps {\n imageId?: string\n fallbackUrl?: string\n fallbackText?: string\n gender?: Gender\n className?: string\n}\n\nexport function AvatarDisplay({ imageId, fallbackUrl, fallbackText, gender, className }: AvatarDisplayProps) {\n const [blobUrl, setBlobUrl] = useState(undefined)\n\n useEffect(() => {\n if (imageId) {\n db.images.get(imageId).then((image) => {\n if (image) {\n const url = URL.createObjectURL(image.blob)\n setBlobUrl(url)\n return () => URL.revokeObjectURL(url)\n }\n })\n } else {\n setBlobUrl(undefined)\n }\n }, [imageId])\n\n // 如果有头像,显示头像\n if (blobUrl) {\n return (\n \n \n {fallbackText}\n \n )\n }\n\n // 没有头像,显示性别图标\n return (\n \n \n {gender === 'FEMALE' ? (\n \n ) : (\n \n )}\n \n \n )\n}\n"],"names":[],"mappings":";;;;;AAEA;AACA;AACA;AACA;AAAA;AALA;;;;;;AAgBO,SAAS,cAAc,EAAE,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,EAAE,SAAS,EAAsB;IACzG,MAAM,CAAC,SAAS,WAAW,GAAG,IAAA,uYAAQ,EAAqB;IAE3D,IAAA,wYAAS,EAAC;QACR,IAAI,SAAS;YACX,sKAAE,CAAC,MAAM,CAAC,GAAG,CAAC,SAAS,IAAI,CAAC,CAAC;gBAC3B,IAAI,OAAO;oBACT,MAAM,MAAM,IAAI,eAAe,CAAC,MAAM,IAAI;oBAC1C,WAAW;oBACX,OAAO,IAAM,IAAI,eAAe,CAAC;gBACnC;YACF;QACF,OAAO;YACL,WAAW;QACb;IACF,GAAG;QAAC;KAAQ;IAEZ,aAAa;IACb,IAAI,SAAS;QACX,qBACE,oaAAC,4LAAM;YAAC,WAAW;;8BACjB,oaAAC,iMAAW;oBAAC,KAAK;;;;;;8BAClB,oaAAC,oMAAc;oBAAC,WAAU;8BAA+B;;;;;;;;;;;;IAG/D;IAEA,cAAc;IACd,qBACE,oaAAC,4LAAM;QAAC,WAAW;kBACjB,cAAA,oaAAC,oMAAc;YAAC,WAAU;sBACvB,WAAW,yBACV,oaAAC,8XAAe;gBAAC,WAAU;;;;;qCAE3B,oaAAC,2WAAU;gBAAC,WAAU;;;;;;;;;;;;;;;;AAKhC"}}, - {"offset": {"line": 1355, "column": 0}, "map": {"version":3,"sources":["file:///Users/freedak/Documents/go-new/chinese-family-tree/components/ui/select.tsx"],"sourcesContent":["'use client'\n\nimport * as React from 'react'\nimport * as SelectPrimitive from '@radix-ui/react-select'\nimport { CheckIcon, ChevronDownIcon, ChevronUpIcon } from 'lucide-react'\n\nimport { cn } from '@/lib/utils'\n\nfunction Select({\n ...props\n}: React.ComponentProps) {\n return \n}\n\nfunction SelectGroup({\n ...props\n}: React.ComponentProps) {\n return \n}\n\nfunction SelectValue({\n ...props\n}: React.ComponentProps) {\n return \n}\n\nfunction SelectTrigger({\n className,\n size = 'default',\n children,\n ...props\n}: React.ComponentProps & {\n size?: 'sm' | 'default'\n}) {\n return (\n \n {children}\n \n \n \n \n )\n}\n\nfunction SelectContent({\n className,\n children,\n position = 'popper',\n ...props\n}: React.ComponentProps) {\n return (\n \n \n \n \n {children}\n \n \n \n \n )\n}\n\nfunction SelectLabel({\n className,\n ...props\n}: React.ComponentProps) {\n return (\n \n )\n}\n\nfunction SelectItem({\n className,\n children,\n ...props\n}: React.ComponentProps) {\n return (\n \n \n \n \n \n \n {children}\n \n )\n}\n\nfunction SelectSeparator({\n className,\n ...props\n}: React.ComponentProps) {\n return (\n \n )\n}\n\nfunction SelectScrollUpButton({\n className,\n ...props\n}: React.ComponentProps) {\n return (\n \n \n \n )\n}\n\nfunction SelectScrollDownButton({\n className,\n ...props\n}: React.ComponentProps) {\n return (\n \n \n \n )\n}\n\nexport {\n Select,\n SelectContent,\n SelectGroup,\n SelectItem,\n SelectLabel,\n SelectScrollDownButton,\n SelectScrollUpButton,\n SelectSeparator,\n SelectTrigger,\n SelectValue,\n}\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AAGA;AACA;AAAA;AAAA;AAEA;AANA;;;;;AAQA,SAAS,OAAO,EACd,GAAG,OAC+C;IAClD,qBAAO,oaAAC,qbAAoB;QAAC,aAAU;QAAU,GAAG,KAAK;;;;;;AAC3D;AAEA,SAAS,YAAY,EACnB,GAAG,OACgD;IACnD,qBAAO,oaAAC,sbAAqB;QAAC,aAAU;QAAgB,GAAG,KAAK;;;;;;AAClE;AAEA,SAAS,YAAY,EACnB,GAAG,OACgD;IACnD,qBAAO,oaAAC,sbAAqB;QAAC,aAAU;QAAgB,GAAG,KAAK;;;;;;AAClE;AAEA,SAAS,cAAc,EACrB,SAAS,EACT,OAAO,SAAS,EAChB,QAAQ,EACR,GAAG,OAGJ;IACC,qBACE,oaAAC,wbAAuB;QACtB,aAAU;QACV,aAAW;QACX,WAAW,IAAA,yKAAE,EACX,gzBACA;QAED,GAAG,KAAK;;YAER;0BACD,oaAAC,qbAAoB;gBAAC,OAAO;0BAC3B,cAAA,oaAAC,sXAAe;oBAAC,WAAU;;;;;;;;;;;;;;;;;AAInC;AAEA,SAAS,cAAc,EACrB,SAAS,EACT,QAAQ,EACR,WAAW,QAAQ,EACnB,GAAG,OACkD;IACrD,qBACE,oaAAC,ubAAsB;kBACrB,cAAA,oaAAC,wbAAuB;YACtB,aAAU;YACV,WAAW,IAAA,yKAAE,EACX,ijBACA,aAAa,YACX,mIACF;YAEF,UAAU;YACT,GAAG,KAAK;;8BAET,oaAAC;;;;;8BACD,oaAAC,ybAAwB;oBACvB,WAAW,IAAA,yKAAE,EACX,OACA,aAAa,YACX;8BAGH;;;;;;8BAEH,oaAAC;;;;;;;;;;;;;;;;AAIT;AAEA,SAAS,YAAY,EACnB,SAAS,EACT,GAAG,OACgD;IACnD,qBACE,oaAAC,sbAAqB;QACpB,aAAU;QACV,WAAW,IAAA,yKAAE,EAAC,6CAA6C;QAC1D,GAAG,KAAK;;;;;;AAGf;AAEA,SAAS,WAAW,EAClB,SAAS,EACT,QAAQ,EACR,GAAG,OAC+C;IAClD,qBACE,oaAAC,qbAAoB;QACnB,aAAU;QACV,WAAW,IAAA,yKAAE,EACX,6aACA;QAED,GAAG,KAAK;;0BAET,oaAAC;gBAAK,WAAU;0BACd,cAAA,oaAAC,8bAA6B;8BAC5B,cAAA,oaAAC,gWAAS;wBAAC,WAAU;;;;;;;;;;;;;;;;0BAGzB,oaAAC,ybAAwB;0BAAE;;;;;;;;;;;;AAGjC;AAEA,SAAS,gBAAgB,EACvB,SAAS,EACT,GAAG,OACoD;IACvD,qBACE,oaAAC,0bAAyB;QACxB,aAAU;QACV,WAAW,IAAA,yKAAE,EAAC,iDAAiD;QAC9D,GAAG,KAAK;;;;;;AAGf;AAEA,SAAS,qBAAqB,EAC5B,SAAS,EACT,GAAG,OACyD;IAC5D,qBACE,oaAAC,+bAA8B;QAC7B,aAAU;QACV,WAAW,IAAA,yKAAE,EACX,wDACA;QAED,GAAG,KAAK;kBAET,cAAA,oaAAC,gXAAa;YAAC,WAAU;;;;;;;;;;;AAG/B;AAEA,SAAS,uBAAuB,EAC9B,SAAS,EACT,GAAG,OAC2D;IAC9D,qBACE,oaAAC,icAAgC;QAC/B,aAAU;QACV,WAAW,IAAA,yKAAE,EACX,wDACA;QAED,GAAG,KAAK;kBAET,cAAA,oaAAC,sXAAe;YAAC,WAAU;;;;;;;;;;;AAGjC"}}, - {"offset": {"line": 1588, "column": 0}, "map": {"version":3,"sources":["file:///Users/freedak/Documents/go-new/chinese-family-tree/components/ui/slider.tsx"],"sourcesContent":["'use client'\n\nimport * as React from 'react'\nimport * as SliderPrimitive from '@radix-ui/react-slider'\n\nimport { cn } from '@/lib/utils'\n\nfunction Slider({\n className,\n defaultValue,\n value,\n min = 0,\n max = 100,\n ...props\n}: React.ComponentProps) {\n const _values = React.useMemo(\n () =>\n Array.isArray(value)\n ? value\n : Array.isArray(defaultValue)\n ? defaultValue\n : [min, max],\n [value, defaultValue, min, max],\n )\n\n return (\n \n \n \n \n {Array.from({ length: _values.length }, (_, index) => (\n \n ))}\n \n )\n}\n\nexport { Slider }\n"],"names":[],"mappings":";;;;;AAEA;AACA;AAEA;AALA;;;;;AAOA,SAAS,OAAO,EACd,SAAS,EACT,YAAY,EACZ,KAAK,EACL,MAAM,CAAC,EACP,MAAM,GAAG,EACT,GAAG,OAC+C;IAClD,MAAM,UAAU,sYAAa,CAC3B,IACE,MAAM,OAAO,CAAC,SACV,QACA,MAAM,OAAO,CAAC,gBACZ,eACA;YAAC;YAAK;SAAI,EAClB;QAAC;QAAO;QAAc;QAAK;KAAI;IAGjC,qBACE,oaAAC,qbAAoB;QACnB,aAAU;QACV,cAAc;QACd,OAAO;QACP,KAAK;QACL,KAAK;QACL,WAAW,IAAA,yKAAE,EACX,uOACA;QAED,GAAG,KAAK;;0BAET,oaAAC,sbAAqB;gBACpB,aAAU;gBACV,WACE;0BAGF,cAAA,oaAAC,sbAAqB;oBACpB,aAAU;oBACV,WACE;;;;;;;;;;;YAIL,MAAM,IAAI,CAAC;gBAAE,QAAQ,QAAQ,MAAM;YAAC,GAAG,CAAC,GAAG,sBAC1C,oaAAC,sbAAqB;oBACpB,aAAU;oBAEV,WAAU;mBADL;;;;;;;;;;;AAMf"}}, - {"offset": {"line": 1658, "column": 0}, "map": {"version":3,"sources":["file:///Users/freedak/Documents/go-new/chinese-family-tree/app/members/page.tsx"],"sourcesContent":["\"use client\"\n\nimport { useState, useMemo, useEffect } from \"react\"\nimport { SiteHeader } from \"@/components/site-header\"\nimport { useFamily } from \"@/context/family-context\"\nimport { useRouter } from \"next/navigation\"\nimport { Input } from \"@/components/ui/input\"\nimport { Button } from \"@/components/ui/button\"\nimport { Card, CardContent } from \"@/components/ui/card\"\nimport { Search, Plus, Filter, X } from \"lucide-react\"\nimport Link from \"next/link\"\nimport { AvatarDisplay } from \"@/components/ui/avatar-display\"\nimport { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from \"@/components/ui/select\"\nimport { Slider } from \"@/components/ui/slider\"\nimport { Label } from \"@/components/ui/label\"\nimport { Badge } from \"@/components/ui/badge\"\nimport { Popover, PopoverContent, PopoverTrigger } from \"@/components/ui/popover\"\n\nexport default function MembersPage() {\n const { treeData, searchMembers, setHighlightedMemberId } = useFamily()\n const router = useRouter()\n const [query, setQuery] = useState(\"\")\n const [showFilters, setShowFilters] = useState(false)\n \n // 从 URL 参数读取搜索关键词\n useEffect(() => {\n const params = new URLSearchParams(window.location.search)\n const searchParam = params.get('search')\n if (searchParam) {\n setQuery(searchParam)\n }\n }, [])\n\n // Filter States\n const [selectedSurname, setSelectedSurname] = useState(\"all\")\n const [selectedHome, setSelectedHome] = useState(\"all\")\n const [statusFilter, setStatusFilter] = useState(\"all\")\n const [generationRange, setGenerationRange] = useState<[number, number]>([1, 100])\n\n // Derived Data\n const allMembers = useMemo(() => Object.values(treeData.members), [treeData])\n\n const { uniqueSurnames, uniqueHomes, minGen, maxGen } = useMemo(() => {\n const surnames = new Set()\n const homes = new Set()\n let min = 1000\n let max = 0\n\n allMembers.forEach((m) => {\n if (m.surname) surnames.add(m.surname)\n if (m.ancestralHome) homes.add(m.ancestralHome)\n if (m.generation) {\n if (m.generation < min) min = m.generation\n if (m.generation > max) max = m.generation\n }\n })\n\n return {\n uniqueSurnames: Array.from(surnames).sort(),\n uniqueHomes: Array.from(homes).sort(),\n minGen: min === 1000 ? 1 : min,\n maxGen: max === 0 ? 100 : max,\n }\n }, [allMembers])\n\n // Initialize slider when data loads\n useMemo(() => {\n if (minGen !== 1000 && maxGen !== 0) {\n // Only update if range is default\n // This is a bit tricky, for now let's just rely on user adjustment or default wide range\n // Ideally we sync this once.\n }\n }, [minGen, maxGen])\n\n const filteredMembers = useMemo(() => {\n let result = allMembers\n\n // 1. Search Query\n if (query) {\n const lowerQuery = query.toLowerCase()\n result = result.filter(\n (m) =>\n m.fullName.toLowerCase().includes(lowerQuery) ||\n m.courtesyName?.toLowerCase().includes(lowerQuery) ||\n m.artName?.toLowerCase().includes(lowerQuery),\n )\n }\n\n // 2. Surname Filter\n if (selectedSurname !== \"all\") {\n result = result.filter((m) => m.surname === selectedSurname)\n }\n\n // 3. Home Filter\n if (selectedHome !== \"all\") {\n result = result.filter((m) => m.ancestralHome === selectedHome)\n }\n\n // 4. Status Filter\n if (statusFilter !== \"all\") {\n if (statusFilter === \"living\") {\n result = result.filter((m) => !m.deathDate)\n } else if (statusFilter === \"deceased\") {\n result = result.filter((m) => !!m.deathDate)\n }\n }\n\n // 5. Generation Filter\n result = result.filter((m) => m.generation >= generationRange[0] && m.generation <= generationRange[1])\n\n // Sort\n return result.sort((a, b) => a.generation - b.generation || (a.birthDate || \"\").localeCompare(b.birthDate || \"\"))\n }, [allMembers, query, selectedSurname, selectedHome, statusFilter, generationRange])\n \n // 按世代分组\n const membersByGeneration = useMemo(() => {\n const groups = new Map()\n \n filteredMembers.forEach(member => {\n const gen = member.generation\n if (!groups.has(gen)) {\n groups.set(gen, [])\n }\n groups.get(gen)!.push(member)\n })\n \n // 转换为数组并排序\n return Array.from(groups.entries())\n .sort((a, b) => a[0] - b[0])\n .map(([generation, members]) => ({\n generation,\n members\n }))\n }, [filteredMembers])\n\n const clearFilters = () => {\n setSelectedSurname(\"all\")\n setSelectedHome(\"all\")\n setStatusFilter(\"all\")\n setGenerationRange([1, 100]) // Reset to wide range\n setQuery(\"\")\n }\n\n const activeFilterCount =\n (selectedSurname !== \"all\" ? 1 : 0) +\n (selectedHome !== \"all\" ? 1 : 0) +\n (statusFilter !== \"all\" ? 1 : 0) +\n (generationRange[0] > 1 || generationRange[1] < 100 ? 1 : 0)\n\n return (\n
\n \n
\n
\n
\n

家族成员列表

\n
\n
\n \n setQuery(e.target.value)}\n />\n
\n 0 ? \"secondary\" : \"outline\"}\n size=\"icon\"\n onClick={() => setShowFilters(!showFilters)}\n className=\"relative\"\n >\n \n {activeFilterCount > 0 && (\n \n )}\n \n \n \n \n
\n
\n\n {/* Filter Bar */}\n {showFilters && (\n
\n
\n

高级筛选

\n \n
\n
\n
\n \n \n
\n\n
\n \n \n
\n\n
\n \n \n
\n\n
\n
\n \n \n {generationRange[0]} - {generationRange[1]} 世\n \n
\n setGenerationRange(val as [number, number])}\n className=\"py-4\"\n />\n
\n
\n
\n )}\n
\n\n {filteredMembers.length === 0 ? (\n
\n 没有找到匹配的成员。\n
\n ) : (\n
\n {membersByGeneration.map(({ generation, members }) => (\n
\n
\n

第 {generation} 世

\n 共 {members.length} 人\n
\n
\n
\n {members.map((member) => {\n // 判断是否是配偶:\n // 1. 没有父母ID\n // 2. 有配偶ID\n // 3. 不是始祖(没有'始祖'标签)\n const isFounder = member.tags?.includes('始祖')\n const isSpouse = !member.fatherId && !member.motherId && \n member.spouseIds && member.spouseIds.length > 0 && \n !isFounder\n \n // 获取配偶信息\n const spouse = isSpouse && member.spouseIds?.[0] ? allMembers.find(m => m.id === member.spouseIds[0]) : null\n const spouseName = spouse ? spouse.fullName : null\n \n return (\n
\n \n \n \n
\n \n {/* 在世/去世标识 */}\n {member.deathDate && (\n
\n )}\n {!member.deathDate && (\n
\n )}\n
\n
\n
\n

\n {member.fullName}\n {member.courtesyName && (\n \n 字 {member.courtesyName}\n \n )}\n

\n
\n {isFounder ? (\n

\n 家族始祖\n

\n ) : isSpouse && spouseName ? (\n

\n {spouseName}的配偶\n

\n ) : (\n

\n {member.generationName ? `字辈: ${member.generationName}` : \"未录入字辈\"}\n

\n )}\n \n {/* 籍贯和生卒年并排 */}\n
\n

{member.ancestralHome || \"籍贯未知\"}

\n \n {/* 生卒年和年龄 */}\n {(member.birthDate || member.deathDate) && (\n
\n
\n {member.birthDate && new Date(member.birthDate).getFullYear()}\n {member.deathDate && ` - ${new Date(member.deathDate).getFullYear()}`}\n {!member.deathDate && member.birthDate && ' - '}\n
\n {(() => {\n if (!member.birthDate) return null\n const birthYear = new Date(member.birthDate).getFullYear()\n const deathYear = member.deathDate ? new Date(member.deathDate).getFullYear() : new Date().getFullYear()\n const age = deathYear - birthYear\n return (\n
\n {member.deathDate ? `享年${age}岁` : `${age}岁`}\n
\n )\n })()}\n
\n )}\n
\n \n {member.tags && member.tags.length > 0 && (\n
\n {member.tags.map((tag) => (\n \n {tag}\n \n ))}\n
\n )}\n
\n \n \n \n {\n setHighlightedMemberId(member.id)\n router.push('/tree')\n }}\n title=\"在族谱图中定位\"\n >\n \n \n
\n )\n })}\n
\n
\n ))}\n
\n )}\n
\n
\n )\n}\n"],"names":[],"mappings":"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"}}] + {"offset": {"line": 332, "column": 0}, "map": {"version":3,"sources":["file:///Users/freedak/Documents/go-new/chinese-family-tree/components/site-header.tsx"],"sourcesContent":["\"use client\"\n\nimport Link from \"next/link\"\nimport { BookOpen, Search, Bell, Settings, LogOut, User, ChevronDown, Plus, Trash2, Network, LayoutGrid, Calculator } from \"lucide-react\"\nimport { Button } from \"@/components/ui/button\"\nimport { Input } from \"@/components/ui/input\"\nimport { Avatar, AvatarFallback, AvatarImage } from \"@/components/ui/avatar\"\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuLabel,\n DropdownMenuSeparator,\n DropdownMenuTrigger,\n} from \"@/components/ui/dropdown-menu\"\nimport { useFamily } from \"@/context/family-context\"\nimport { useState, useRef, useEffect, useCallback } from \"react\"\nimport { useRouter, usePathname, useSearchParams } from \"next/navigation\"\nimport { useSession, signOut } from \"next-auth/react\"\nimport { useDialog } from \"@/components/ui/alert-dialog-custom\"\n\ninterface FamilyTree {\n id: string\n name: string\n description: string | null\n ownerId: string\n currentUserRole?: \"OWNER\" | \"EDITOR\" | \"VIEWER\"\n}\n\nexport function SiteHeader() {\n const { searchMembers, searchResults } = useFamily()\n const { data: session, status } = useSession()\n const { showAlert, showConfirm, showPrompt } = useDialog()\n const pathname = usePathname()\n const searchParams = useSearchParams()\n const [searchQuery, setSearchQuery] = useState(\"\")\n const [showResults, setShowResults] = useState(false)\n const [familyTrees, setFamilyTrees] = useState([])\n const [currentTree, setCurrentTree] = useState(null)\n const [deletingTreeId, setDeletingTreeId] = useState(null)\n const searchRef = useRef(null)\n const router = useRouter()\n \n // 获取当前视图模式\n const currentViewMode = searchParams.get('view') || 'traditional'\n const isTreePage = pathname === '/tree'\n\n // 生成带有 treeId 的 URL\n const getUrlWithTreeId = (path: string) => {\n if (currentTree?.id) {\n return `${path}?treeId=${currentTree.id}`\n }\n return path\n }\n\n // 切换视图模式\n const handleViewModeChange = (mode: string) => {\n const params = new URLSearchParams(searchParams.toString())\n params.set('view', mode)\n if (currentTree?.id) {\n params.set('treeId', currentTree.id)\n }\n router.push(`${pathname}?${params.toString()}`)\n }\n\n const getRoleBadge = (role?: string) => {\n switch (role) {\n case \"OWNER\":\n return 所有者\n case \"EDITOR\":\n return 编辑\n case \"VIEWER\":\n return 查看\n default:\n return null\n }\n }\n\n const handleSignOut = async () => {\n await signOut({ callbackUrl: \"/auth/signin\" })\n }\n\n // 获取用户名首字母作为头像\n const getUserInitial = () => {\n if (session?.user?.name) {\n return session.user.name.charAt(0).toUpperCase()\n }\n if (session?.user?.email) {\n return session.user.email.charAt(0).toUpperCase()\n }\n return \"U\"\n }\n\n // 删除家族树\n const handleDeleteTree = async (tree: FamilyTree, e: React.MouseEvent) => {\n e.stopPropagation() // 阻止触发选择事件\n\n // 检查权限\n if (tree.ownerId !== session?.user?.id) {\n await showAlert('只有家族树的创建者才能删除', '权限不足')\n return\n }\n\n const confirmText = `确定要删除家族树\"${tree.name}\"吗?\\n\\n此操作将永久删除所有成员、活动日志和协作者数据,且不可撤销!`\n const confirmed = await showConfirm(confirmText, '删除家族树', 'destructive')\n if (!confirmed) {\n return\n }\n\n // 二次确认\n const finalConfirm = await showPrompt(\n `请输入家族树名称\"${tree.name}\"以确认删除:`,\n '',\n '确认删除'\n )\n if (finalConfirm !== tree.name) {\n await showAlert('名称不匹配,删除已取消', '操作已取消')\n return\n }\n\n setDeletingTreeId(tree.id)\n try {\n const response = await fetch(`/api/trees/${tree.id}`, {\n method: 'DELETE',\n })\n\n if (!response.ok) {\n const error = await response.json()\n throw new Error(error.error || '删除失败')\n }\n\n // 刷新家族树列表\n await loadFamilyTrees()\n \n // 如果删除的是当前树,跳转到首页\n if (currentTree?.id === tree.id) {\n window.location.href = '/'\n }\n } catch (error) {\n console.error('删除家族树失败:', error)\n await showAlert('删除失败:' + (error as Error).message, '错误')\n } finally {\n setDeletingTreeId(null)\n }\n }\n\n // 获取家族树列表\n const loadFamilyTrees = useCallback(() => {\n if (!session?.user?.id || status !== 'authenticated') return\n\n const controller = new AbortController()\n \n fetch('/api/trees', { signal: controller.signal })\n .then(res => {\n if (!res.ok) throw new Error(`HTTP error! status: ${res.status}`)\n return res.json()\n })\n .then(data => {\n if (data.trees) {\n setFamilyTrees(data.trees)\n // 如果 URL 中有 treeId,使用该树,否则使用第一个\n const urlParams = new URLSearchParams(window.location.search)\n const treeId = urlParams.get('treeId')\n if (treeId) {\n const tree = data.trees.find((t: FamilyTree) => t.id === treeId)\n if (tree) {\n setCurrentTree(tree)\n } else if (data.trees.length > 0) {\n setCurrentTree(data.trees[0])\n }\n } else if (data.trees.length > 0) {\n setCurrentTree(data.trees[0])\n }\n }\n })\n .catch(err => {\n // 忽略 abort 错误和 fetch 错误(可能是页面切换导致的)\n if (err.name !== 'AbortError' && err.message !== 'Failed to fetch') {\n console.error('获取家族树列表失败:', err)\n }\n })\n \n return () => controller.abort()\n }, [session?.user?.id, status])\n\n useEffect(() => {\n loadFamilyTrees()\n }, [loadFamilyTrees])\n\n // 监听路由变化,刷新家族树列表\n useEffect(() => {\n const handleRouteChange = () => {\n loadFamilyTrees()\n }\n \n window.addEventListener('focus', handleRouteChange)\n return () => window.removeEventListener('focus', handleRouteChange)\n }, [loadFamilyTrees])\n\n // 点击外部关闭搜索结果\n useEffect(() => {\n function handleClickOutside(event: MouseEvent) {\n if (searchRef.current && !searchRef.current.contains(event.target as Node)) {\n setShowResults(false)\n }\n }\n document.addEventListener(\"mousedown\", handleClickOutside)\n return () => document.removeEventListener(\"mousedown\", handleClickOutside)\n }, [])\n\n const handleSearch = (query: string) => {\n setSearchQuery(query)\n searchMembers(query)\n setShowResults(query.length > 0)\n }\n\n const handleSelectMember = (memberId: string) => {\n router.push(`/members/${memberId}`)\n setSearchQuery(\"\")\n setShowResults(false)\n }\n\n return (\n
\n
\n
\n \n
\n \n
\n 华夏谱\n \n \n {/* 家族树选择器 */}\n {session && familyTrees.length > 0 && (\n \n \n \n \n \n 我的家族树\n \n {familyTrees.map((tree) => (\n {\n setCurrentTree(tree)\n // 保持当前路径,只更新 treeId 参数\n const currentPath = window.location.pathname\n router.push(`${currentPath}?treeId=${tree.id}`)\n }}\n className=\"cursor-pointer flex items-center justify-between group\"\n >\n
\n {tree.name}\n {getRoleBadge(tree.currentUserRole)}\n
\n
\n {currentTree?.id === tree.id && (\n \n )}\n {tree.ownerId === session?.user?.id && (\n handleDeleteTree(tree, e)}\n disabled={deletingTreeId === tree.id}\n >\n \n \n )}\n
\n \n ))}\n \n router.push('/trees/new')}\n className=\"cursor-pointer text-primary\"\n >\n \n 创建新家族树\n \n
\n
\n )}\n
\n\n \n\n
\n \n\n \n\n \n \n \n\n \n \n \n\n {status === \"loading\" ? (\n \n ...\n \n ) : session ? (\n \n \n \n \n \n \n
\n

{session.user?.name || \"用户\"}

\n

\n {session.user?.email}\n

\n
\n
\n \n \n \n \n 系统设置\n \n \n \n \n \n 退出登录\n \n
\n
\n ) : (\n \n \n \n )}\n
\n
\n
\n )\n}\n"],"names":[],"mappings":"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"}}, + {"offset": {"line": 1221, "column": 0}, "map": {"version":3,"sources":["file:///Users/freedak/Documents/go-new/chinese-family-tree/lib/db.ts"],"sourcesContent":["import Dexie, { type Table } from \"dexie\"\nimport type { FamilyMember } from \"@/types/family\"\n\nexport interface GlobalSettings {\n key: string\n value: any\n}\n\nexport interface StoredImage {\n id: string\n blob: Blob\n mimeType: string\n createdAt: string\n}\n\nexport interface ActivityLog {\n id: string\n action: \"create\" | \"update\" | \"delete\" | \"import\" | \"export\"\n entityType: \"member\" | \"photo\" | \"story\" | \"settings\"\n entityId?: string\n entityName?: string\n changes?: any\n timestamp: string\n userId?: string\n userName?: string\n}\n\nexport class FamilyTreeDB extends Dexie {\n members!: Table\n settings!: Table\n images!: Table\n activityLogs!: Table\n\n constructor() {\n super(\"FamilyTreeDB\")\n this.version(1).stores({\n members: \"id, fullName, fatherId, motherId, [fatherId+motherId]\", // Index for searching\n settings: \"key\", // Key-value store for rootId etc.\n images: \"id\", // Store images by ID\n })\n this.version(2).stores({\n members: \"id, fullName, fatherId, motherId, [fatherId+motherId]\", // Index for searching\n settings: \"key\", // Key-value store for rootId etc.\n images: \"id\", // Store images by ID\n activityLogs: \"id, timestamp, action, entityType, entityId\",\n })\n }\n}\n\nexport const db = new FamilyTreeDB()\n"],"names":[],"mappings":";;;;;;AAAA;;AA2BO,MAAM,qBAAqB,+PAAK;IACrC,QAA6B;IAC7B,SAAgC;IAChC,OAA2B;IAC3B,aAAiC;IAEjC,aAAc;QACZ,KAAK,CAAC;QACN,IAAI,CAAC,OAAO,CAAC,GAAG,MAAM,CAAC;YACrB,SAAS;YACT,UAAU;YACV,QAAQ;QACV;QACA,IAAI,CAAC,OAAO,CAAC,GAAG,MAAM,CAAC;YACrB,SAAS;YACT,UAAU;YACV,QAAQ;YACR,cAAc;QAChB;IACF;AACF;AAEO,MAAM,KAAK,IAAI"}}, + {"offset": {"line": 1254, "column": 0}, "map": {"version":3,"sources":["file:///Users/freedak/Documents/go-new/chinese-family-tree/components/ui/avatar-display.tsx"],"sourcesContent":["\"use client\"\n\nimport { useState, useEffect } from \"react\"\nimport { Avatar, AvatarFallback, AvatarImage } from \"@/components/ui/avatar\"\nimport { db } from \"@/lib/db\"\nimport { CircleUser, CircleUserRound } from \"lucide-react\"\nimport type { Gender } from \"@/types/family\"\n\ninterface AvatarDisplayProps {\n imageId?: string\n fallbackUrl?: string\n fallbackText?: string\n gender?: Gender\n className?: string\n}\n\nexport function AvatarDisplay({ imageId, fallbackUrl, fallbackText, gender, className }: AvatarDisplayProps) {\n const [blobUrl, setBlobUrl] = useState(undefined)\n\n useEffect(() => {\n if (imageId) {\n db.images.get(imageId).then((image) => {\n if (image) {\n const url = URL.createObjectURL(image.blob)\n setBlobUrl(url)\n return () => URL.revokeObjectURL(url)\n }\n })\n } else {\n setBlobUrl(undefined)\n }\n }, [imageId])\n\n // 如果有头像,显示头像\n if (blobUrl) {\n return (\n \n \n {fallbackText}\n \n )\n }\n\n // 没有头像,显示性别图标\n return (\n \n \n {gender === 'FEMALE' ? (\n \n ) : (\n \n )}\n \n \n )\n}\n"],"names":[],"mappings":";;;;;AAEA;AACA;AACA;AACA;AAAA;AALA;;;;;;AAgBO,SAAS,cAAc,EAAE,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,EAAE,SAAS,EAAsB;IACzG,MAAM,CAAC,SAAS,WAAW,GAAG,IAAA,uYAAQ,EAAqB;IAE3D,IAAA,wYAAS,EAAC;QACR,IAAI,SAAS;YACX,sKAAE,CAAC,MAAM,CAAC,GAAG,CAAC,SAAS,IAAI,CAAC,CAAC;gBAC3B,IAAI,OAAO;oBACT,MAAM,MAAM,IAAI,eAAe,CAAC,MAAM,IAAI;oBAC1C,WAAW;oBACX,OAAO,IAAM,IAAI,eAAe,CAAC;gBACnC;YACF;QACF,OAAO;YACL,WAAW;QACb;IACF,GAAG;QAAC;KAAQ;IAEZ,aAAa;IACb,IAAI,SAAS;QACX,qBACE,oaAAC,4LAAM;YAAC,WAAW;;8BACjB,oaAAC,iMAAW;oBAAC,KAAK;;;;;;8BAClB,oaAAC,oMAAc;oBAAC,WAAU;8BAA+B;;;;;;;;;;;;IAG/D;IAEA,cAAc;IACd,qBACE,oaAAC,4LAAM;QAAC,WAAW;kBACjB,cAAA,oaAAC,oMAAc;YAAC,WAAU;sBACvB,WAAW,yBACV,oaAAC,8XAAe;gBAAC,WAAU;;;;;qCAE3B,oaAAC,2WAAU;gBAAC,WAAU;;;;;;;;;;;;;;;;AAKhC"}}, + {"offset": {"line": 1347, "column": 0}, "map": {"version":3,"sources":["file:///Users/freedak/Documents/go-new/chinese-family-tree/components/ui/select.tsx"],"sourcesContent":["'use client'\n\nimport * as React from 'react'\nimport * as SelectPrimitive from '@radix-ui/react-select'\nimport { CheckIcon, ChevronDownIcon, ChevronUpIcon } from 'lucide-react'\n\nimport { cn } from '@/lib/utils'\n\nfunction Select({\n ...props\n}: React.ComponentProps) {\n return \n}\n\nfunction SelectGroup({\n ...props\n}: React.ComponentProps) {\n return \n}\n\nfunction SelectValue({\n ...props\n}: React.ComponentProps) {\n return \n}\n\nfunction SelectTrigger({\n className,\n size = 'default',\n children,\n ...props\n}: React.ComponentProps & {\n size?: 'sm' | 'default'\n}) {\n return (\n \n {children}\n \n \n \n \n )\n}\n\nfunction SelectContent({\n className,\n children,\n position = 'popper',\n ...props\n}: React.ComponentProps) {\n return (\n \n \n \n \n {children}\n \n \n \n \n )\n}\n\nfunction SelectLabel({\n className,\n ...props\n}: React.ComponentProps) {\n return (\n \n )\n}\n\nfunction SelectItem({\n className,\n children,\n ...props\n}: React.ComponentProps) {\n return (\n \n \n \n \n \n \n {children}\n \n )\n}\n\nfunction SelectSeparator({\n className,\n ...props\n}: React.ComponentProps) {\n return (\n \n )\n}\n\nfunction SelectScrollUpButton({\n className,\n ...props\n}: React.ComponentProps) {\n return (\n \n \n \n )\n}\n\nfunction SelectScrollDownButton({\n className,\n ...props\n}: React.ComponentProps) {\n return (\n \n \n \n )\n}\n\nexport {\n Select,\n SelectContent,\n SelectGroup,\n SelectItem,\n SelectLabel,\n SelectScrollDownButton,\n SelectScrollUpButton,\n SelectSeparator,\n SelectTrigger,\n SelectValue,\n}\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AAGA;AACA;AAAA;AAAA;AAEA;AANA;;;;;AAQA,SAAS,OAAO,EACd,GAAG,OAC+C;IAClD,qBAAO,oaAAC,qbAAoB;QAAC,aAAU;QAAU,GAAG,KAAK;;;;;;AAC3D;AAEA,SAAS,YAAY,EACnB,GAAG,OACgD;IACnD,qBAAO,oaAAC,sbAAqB;QAAC,aAAU;QAAgB,GAAG,KAAK;;;;;;AAClE;AAEA,SAAS,YAAY,EACnB,GAAG,OACgD;IACnD,qBAAO,oaAAC,sbAAqB;QAAC,aAAU;QAAgB,GAAG,KAAK;;;;;;AAClE;AAEA,SAAS,cAAc,EACrB,SAAS,EACT,OAAO,SAAS,EAChB,QAAQ,EACR,GAAG,OAGJ;IACC,qBACE,oaAAC,wbAAuB;QACtB,aAAU;QACV,aAAW;QACX,WAAW,IAAA,yKAAE,EACX,gzBACA;QAED,GAAG,KAAK;;YAER;0BACD,oaAAC,qbAAoB;gBAAC,OAAO;0BAC3B,cAAA,oaAAC,sXAAe;oBAAC,WAAU;;;;;;;;;;;;;;;;;AAInC;AAEA,SAAS,cAAc,EACrB,SAAS,EACT,QAAQ,EACR,WAAW,QAAQ,EACnB,GAAG,OACkD;IACrD,qBACE,oaAAC,ubAAsB;kBACrB,cAAA,oaAAC,wbAAuB;YACtB,aAAU;YACV,WAAW,IAAA,yKAAE,EACX,ijBACA,aAAa,YACX,mIACF;YAEF,UAAU;YACT,GAAG,KAAK;;8BAET,oaAAC;;;;;8BACD,oaAAC,ybAAwB;oBACvB,WAAW,IAAA,yKAAE,EACX,OACA,aAAa,YACX;8BAGH;;;;;;8BAEH,oaAAC;;;;;;;;;;;;;;;;AAIT;AAEA,SAAS,YAAY,EACnB,SAAS,EACT,GAAG,OACgD;IACnD,qBACE,oaAAC,sbAAqB;QACpB,aAAU;QACV,WAAW,IAAA,yKAAE,EAAC,6CAA6C;QAC1D,GAAG,KAAK;;;;;;AAGf;AAEA,SAAS,WAAW,EAClB,SAAS,EACT,QAAQ,EACR,GAAG,OAC+C;IAClD,qBACE,oaAAC,qbAAoB;QACnB,aAAU;QACV,WAAW,IAAA,yKAAE,EACX,6aACA;QAED,GAAG,KAAK;;0BAET,oaAAC;gBAAK,WAAU;0BACd,cAAA,oaAAC,8bAA6B;8BAC5B,cAAA,oaAAC,gWAAS;wBAAC,WAAU;;;;;;;;;;;;;;;;0BAGzB,oaAAC,ybAAwB;0BAAE;;;;;;;;;;;;AAGjC;AAEA,SAAS,gBAAgB,EACvB,SAAS,EACT,GAAG,OACoD;IACvD,qBACE,oaAAC,0bAAyB;QACxB,aAAU;QACV,WAAW,IAAA,yKAAE,EAAC,iDAAiD;QAC9D,GAAG,KAAK;;;;;;AAGf;AAEA,SAAS,qBAAqB,EAC5B,SAAS,EACT,GAAG,OACyD;IAC5D,qBACE,oaAAC,+bAA8B;QAC7B,aAAU;QACV,WAAW,IAAA,yKAAE,EACX,wDACA;QAED,GAAG,KAAK;kBAET,cAAA,oaAAC,gXAAa;YAAC,WAAU;;;;;;;;;;;AAG/B;AAEA,SAAS,uBAAuB,EAC9B,SAAS,EACT,GAAG,OAC2D;IAC9D,qBACE,oaAAC,icAAgC;QAC/B,aAAU;QACV,WAAW,IAAA,yKAAE,EACX,wDACA;QAED,GAAG,KAAK;kBAET,cAAA,oaAAC,sXAAe;YAAC,WAAU;;;;;;;;;;;AAGjC"}}, + {"offset": {"line": 1580, "column": 0}, "map": {"version":3,"sources":["file:///Users/freedak/Documents/go-new/chinese-family-tree/components/ui/slider.tsx"],"sourcesContent":["'use client'\n\nimport * as React from 'react'\nimport * as SliderPrimitive from '@radix-ui/react-slider'\n\nimport { cn } from '@/lib/utils'\n\nfunction Slider({\n className,\n defaultValue,\n value,\n min = 0,\n max = 100,\n ...props\n}: React.ComponentProps) {\n const _values = React.useMemo(\n () =>\n Array.isArray(value)\n ? value\n : Array.isArray(defaultValue)\n ? defaultValue\n : [min, max],\n [value, defaultValue, min, max],\n )\n\n return (\n \n \n \n \n {Array.from({ length: _values.length }, (_, index) => (\n \n ))}\n \n )\n}\n\nexport { Slider }\n"],"names":[],"mappings":";;;;;AAEA;AACA;AAEA;AALA;;;;;AAOA,SAAS,OAAO,EACd,SAAS,EACT,YAAY,EACZ,KAAK,EACL,MAAM,CAAC,EACP,MAAM,GAAG,EACT,GAAG,OAC+C;IAClD,MAAM,UAAU,sYAAa,CAC3B,IACE,MAAM,OAAO,CAAC,SACV,QACA,MAAM,OAAO,CAAC,gBACZ,eACA;YAAC;YAAK;SAAI,EAClB;QAAC;QAAO;QAAc;QAAK;KAAI;IAGjC,qBACE,oaAAC,qbAAoB;QACnB,aAAU;QACV,cAAc;QACd,OAAO;QACP,KAAK;QACL,KAAK;QACL,WAAW,IAAA,yKAAE,EACX,uOACA;QAED,GAAG,KAAK;;0BAET,oaAAC,sbAAqB;gBACpB,aAAU;gBACV,WACE;0BAGF,cAAA,oaAAC,sbAAqB;oBACpB,aAAU;oBACV,WACE;;;;;;;;;;;YAIL,MAAM,IAAI,CAAC;gBAAE,QAAQ,QAAQ,MAAM;YAAC,GAAG,CAAC,GAAG,sBAC1C,oaAAC,sbAAqB;oBACpB,aAAU;oBAEV,WAAU;mBADL;;;;;;;;;;;AAMf"}}, + {"offset": {"line": 1650, "column": 0}, "map": {"version":3,"sources":["file:///Users/freedak/Documents/go-new/chinese-family-tree/app/members/page.tsx"],"sourcesContent":["\"use client\"\n\nimport { useState, useMemo, useEffect } from \"react\"\nimport { SiteHeader } from \"@/components/site-header\"\nimport { useFamily } from \"@/context/family-context\"\nimport { useRouter } from \"next/navigation\"\nimport { Input } from \"@/components/ui/input\"\nimport { Button } from \"@/components/ui/button\"\nimport { Card, CardContent } from \"@/components/ui/card\"\nimport { Search, Plus, Filter, X } from \"lucide-react\"\nimport Link from \"next/link\"\nimport { AvatarDisplay } from \"@/components/ui/avatar-display\"\nimport { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from \"@/components/ui/select\"\nimport { Slider } from \"@/components/ui/slider\"\nimport { Label } from \"@/components/ui/label\"\nimport { Badge } from \"@/components/ui/badge\"\nimport { Popover, PopoverContent, PopoverTrigger } from \"@/components/ui/popover\"\n\nexport default function MembersPage() {\n const { treeData, searchMembers, setHighlightedMemberId } = useFamily()\n const router = useRouter()\n const [query, setQuery] = useState(\"\")\n const [showFilters, setShowFilters] = useState(false)\n \n // 从 URL 参数读取搜索关键词\n useEffect(() => {\n const params = new URLSearchParams(window.location.search)\n const searchParam = params.get('search')\n if (searchParam) {\n setQuery(searchParam)\n }\n }, [])\n\n // Filter States\n const [selectedSurname, setSelectedSurname] = useState(\"all\")\n const [selectedHome, setSelectedHome] = useState(\"all\")\n const [statusFilter, setStatusFilter] = useState(\"all\")\n const [generationRange, setGenerationRange] = useState<[number, number]>([1, 100])\n\n // Derived Data\n const allMembers = useMemo(() => Object.values(treeData.members), [treeData])\n\n const { uniqueSurnames, uniqueHomes, minGen, maxGen } = useMemo(() => {\n const surnames = new Set()\n const homes = new Set()\n let min = 1000\n let max = 0\n\n allMembers.forEach((m) => {\n if (m.surname) surnames.add(m.surname)\n if (m.ancestralHome) homes.add(m.ancestralHome)\n if (m.generation) {\n if (m.generation < min) min = m.generation\n if (m.generation > max) max = m.generation\n }\n })\n\n return {\n uniqueSurnames: Array.from(surnames).sort(),\n uniqueHomes: Array.from(homes).sort(),\n minGen: min === 1000 ? 1 : min,\n maxGen: max === 0 ? 100 : max,\n }\n }, [allMembers])\n\n // Initialize slider when data loads\n useMemo(() => {\n if (minGen !== 1000 && maxGen !== 0) {\n // Only update if range is default\n // This is a bit tricky, for now let's just rely on user adjustment or default wide range\n // Ideally we sync this once.\n }\n }, [minGen, maxGen])\n\n const filteredMembers = useMemo(() => {\n let result = allMembers\n\n // 1. Search Query\n if (query) {\n const lowerQuery = query.toLowerCase()\n result = result.filter(\n (m) =>\n m.fullName.toLowerCase().includes(lowerQuery) ||\n m.courtesyName?.toLowerCase().includes(lowerQuery) ||\n m.artName?.toLowerCase().includes(lowerQuery),\n )\n }\n\n // 2. Surname Filter\n if (selectedSurname !== \"all\") {\n result = result.filter((m) => m.surname === selectedSurname)\n }\n\n // 3. Home Filter\n if (selectedHome !== \"all\") {\n result = result.filter((m) => m.ancestralHome === selectedHome)\n }\n\n // 4. Status Filter\n if (statusFilter !== \"all\") {\n if (statusFilter === \"living\") {\n result = result.filter((m) => !m.deathDate)\n } else if (statusFilter === \"deceased\") {\n result = result.filter((m) => !!m.deathDate)\n }\n }\n\n // 5. Generation Filter\n result = result.filter((m) => m.generation >= generationRange[0] && m.generation <= generationRange[1])\n\n // Sort\n return result.sort((a, b) => a.generation - b.generation || (a.birthDate || \"\").localeCompare(b.birthDate || \"\"))\n }, [allMembers, query, selectedSurname, selectedHome, statusFilter, generationRange])\n \n // 按世代分组并排序\n const membersByGeneration = useMemo(() => {\n const groups = new Map()\n \n filteredMembers.forEach(member => {\n const gen = member.generation\n if (!groups.has(gen)) {\n groups.set(gen, [])\n }\n groups.get(gen)!.push(member)\n })\n \n // 转换为数组并排序\n return Array.from(groups.entries())\n .sort((a, b) => a[0] - b[0])\n .map(([generation, members]) => {\n // 对每个世代的成员进行排序\n const sortedMembers = [...members].sort((a, b) => {\n // 1. 始祖永远排第一\n const aIsFounder = a.tags?.includes('始祖') || a.generation === 1\n const bIsFounder = b.tags?.includes('始祖') || b.generation === 1\n if (aIsFounder && !bIsFounder) return -1\n if (!aIsFounder && bIsFounder) return 1\n \n // 2. 按出生日期排序\n return (a.birthDate || \"\").localeCompare(b.birthDate || \"\")\n })\n \n // 3. 将配偶插入到主成员后面\n const result: typeof members = []\n const processedSpouses = new Set()\n \n sortedMembers.forEach(member => {\n // 跳过已经作为配偶处理过的成员\n if (processedSpouses.has(member.id)) return\n \n result.push(member)\n \n // 如果有配偶,将配偶紧跟在后面\n if (member.spouseIds && member.spouseIds.length > 0) {\n member.spouseIds.forEach(spouseId => {\n const spouse = members.find(m => m.id === spouseId)\n if (spouse && !processedSpouses.has(spouseId)) {\n result.push(spouse)\n processedSpouses.add(spouseId)\n }\n })\n }\n })\n \n return {\n generation,\n members: result\n }\n })\n }, [filteredMembers])\n\n const clearFilters = () => {\n setSelectedSurname(\"all\")\n setSelectedHome(\"all\")\n setStatusFilter(\"all\")\n setGenerationRange([1, 100]) // Reset to wide range\n setQuery(\"\")\n }\n\n const activeFilterCount =\n (selectedSurname !== \"all\" ? 1 : 0) +\n (selectedHome !== \"all\" ? 1 : 0) +\n (statusFilter !== \"all\" ? 1 : 0) +\n (generationRange[0] > 1 || generationRange[1] < 100 ? 1 : 0)\n\n return (\n
\n \n
\n
\n
\n

家族成员列表

\n
\n
\n \n setQuery(e.target.value)}\n />\n
\n 0 ? \"secondary\" : \"outline\"}\n size=\"icon\"\n onClick={() => setShowFilters(!showFilters)}\n className=\"relative\"\n >\n \n {activeFilterCount > 0 && (\n \n )}\n \n \n \n \n
\n
\n\n {/* Filter Bar */}\n {showFilters && (\n
\n
\n

高级筛选

\n \n
\n
\n
\n \n \n
\n\n
\n \n \n
\n\n
\n \n \n
\n\n
\n
\n \n \n {generationRange[0]} - {generationRange[1]} 世\n \n
\n setGenerationRange(val as [number, number])}\n className=\"py-4\"\n />\n
\n
\n
\n )}\n
\n\n {filteredMembers.length === 0 ? (\n
\n 没有找到匹配的成员。\n
\n ) : (\n
\n {membersByGeneration.map(({ generation, members }) => (\n
\n
\n

第 {generation} 世

\n 共 {members.length} 人\n
\n
\n
\n {members.map((member) => {\n // 判断是否是配偶:\n // 1. 没有父母ID\n // 2. 有配偶ID\n // 3. 不是始祖(没有'始祖'标签)\n const isFounder = member.tags?.includes('始祖')\n const isSpouse = !member.fatherId && !member.motherId && \n member.spouseIds && member.spouseIds.length > 0 && \n !isFounder\n \n // 获取配偶信息\n const spouse = isSpouse && member.spouseIds?.[0] ? allMembers.find(m => m.id === member.spouseIds[0]) : null\n const spouseName = spouse ? spouse.fullName : null\n \n return (\n
\n \n \n \n
\n \n {/* 在世/去世标识 */}\n {member.deathDate && (\n
\n )}\n {!member.deathDate && (\n
\n )}\n
\n
\n
\n

\n {member.fullName}\n {member.courtesyName && (\n \n 字 {member.courtesyName}\n \n )}\n

\n
\n {isFounder ? (\n

\n 家族始祖\n

\n ) : isSpouse && spouseName ? (\n

\n {spouseName}的配偶\n

\n ) : (\n

\n {member.generationName ? `字辈: ${member.generationName}` : \"未录入字辈\"}\n

\n )}\n \n {/* 籍贯和生卒年并排 */}\n
\n

{member.ancestralHome || \"籍贯未知\"}

\n \n {/* 生卒年和年龄 */}\n {(member.birthDate || member.deathDate) && (\n
\n
\n {member.birthDate && new Date(member.birthDate).getFullYear()}\n {member.deathDate && ` - ${new Date(member.deathDate).getFullYear()}`}\n {!member.deathDate && member.birthDate && ' - '}\n
\n {(() => {\n if (!member.birthDate) return null\n const birthYear = new Date(member.birthDate).getFullYear()\n const deathYear = member.deathDate ? new Date(member.deathDate).getFullYear() : new Date().getFullYear()\n const age = deathYear - birthYear\n return (\n
\n {member.deathDate ? `享年${age}岁` : `${age}岁`}\n
\n )\n })()}\n
\n )}\n
\n \n {member.tags && member.tags.length > 0 && (\n
\n {member.tags.map((tag) => (\n \n {tag}\n \n ))}\n
\n )}\n
\n \n \n \n {\n setHighlightedMemberId(member.id)\n router.push('/tree')\n }}\n title=\"在族谱图中定位\"\n >\n \n \n
\n )\n })}\n
\n
\n ))}\n
\n )}\n
\n
\n )\n}\n"],"names":[],"mappings":"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"}}] } \ No newline at end of file diff --git a/.next/dev/server/chunks/ssr/Documents_go-new_chinese-family-tree_ae245aad._.js b/.next/dev/server/chunks/ssr/Documents_go-new_chinese-family-tree_ae245aad._.js index af350432..bfdb716d 100644 --- a/.next/dev/server/chunks/ssr/Documents_go-new_chinese-family-tree_ae245aad._.js +++ b/.next/dev/server/chunks/ssr/Documents_go-new_chinese-family-tree_ae245aad._.js @@ -1380,9 +1380,9 @@ function StatisticsCharts({ members }) { // 性别分布饼图 const genderChart = __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$echarts$40$6$2e$0$2e$0$2f$node_modules$2f$echarts$2f$lib$2f$core$2f$echarts$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__$3c$locals$3e$__["init"](genderChartRef.current); const genderData = { - male: members.filter((m)=>m.gender === 'male').length, - female: members.filter((m)=>m.gender === 'female').length, - other: members.filter((m)=>m.gender === 'other').length + male: members.filter((m)=>m.gender === 'MALE').length, + female: members.filter((m)=>m.gender === 'FEMALE').length, + other: members.filter((m)=>m.gender === 'OTHER').length }; genderChart.setOption({ title: { @@ -2892,6 +2892,7 @@ var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$ch var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$lucide$2d$react$40$0$2e$454$2e$0_react$40$19$2e$2$2e$0$2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$users$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__$3c$export__default__as__Users$3e$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/lucide-react@0.454.0_react@19.2.0/node_modules/lucide-react/dist/esm/icons/users.js [app-ssr] (ecmascript) "); var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$lucide$2d$react$40$0$2e$454$2e$0_react$40$19$2e$2$2e$0$2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$arrow$2d$right$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__$3c$export__default__as__ArrowRight$3e$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/lucide-react@0.454.0_react@19.2.0/node_modules/lucide-react/dist/esm/icons/arrow-right.js [app-ssr] (ecmascript) "); var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$lucide$2d$react$40$0$2e$454$2e$0_react$40$19$2e$2$2e$0$2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$clock$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__$3c$export__default__as__Clock$3e$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/lucide-react@0.454.0_react@19.2.0/node_modules/lucide-react/dist/esm/icons/clock.js [app-ssr] (ecmascript) "); +var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$lucide$2d$react$40$0$2e$454$2e$0_react$40$19$2e$2$2e$0$2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$calculator$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__$3c$export__default__as__Calculator$3e$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/lucide-react@0.454.0_react@19.2.0/node_modules/lucide-react/dist/esm/icons/calculator.js [app-ssr] (ecmascript) "); var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$context$2f$family$2d$context$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/context/family-context.tsx [app-ssr] (ecmascript)"); var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/server/route-modules/app-page/vendored/ssr/react.js [app-ssr] (ecmascript)"); var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$dashboard$2f$statistics$2d$charts$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/components/dashboard/statistics-charts.tsx [app-ssr] (ecmascript)"); @@ -3071,19 +3072,19 @@ function DashboardPage() { columnNumber: 15 }, this), /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$client$2f$app$2d$dir$2f$link$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["default"], { - href: "/tree", + href: "/relationship", children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$button$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["Button"], { variant: "outline", className: "gap-2 bg-transparent", children: [ - /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$lucide$2d$react$40$0$2e$454$2e$0_react$40$19$2e$2$2e$0$2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$network$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__$3c$export__default__as__Network$3e$__["Network"], { + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$lucide$2d$react$40$0$2e$454$2e$0_react$40$19$2e$2$2e$0$2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$calculator$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__$3c$export__default__as__Calculator$3e$__["Calculator"], { className: "h-4 w-4" }, void 0, false, { fileName: "[project]/Documents/go-new/chinese-family-tree/app/page.tsx", lineNumber: 172, columnNumber: 17 }, this), - "查看世系图" + "计算器" ] }, void 0, true, { fileName: "[project]/Documents/go-new/chinese-family-tree/app/page.tsx", diff --git a/.next/dev/server/chunks/ssr/Documents_go-new_chinese-family-tree_ae245aad._.js.map b/.next/dev/server/chunks/ssr/Documents_go-new_chinese-family-tree_ae245aad._.js.map index 54546d63..b59b9d03 100644 --- a/.next/dev/server/chunks/ssr/Documents_go-new_chinese-family-tree_ae245aad._.js.map +++ b/.next/dev/server/chunks/ssr/Documents_go-new_chinese-family-tree_ae245aad._.js.map @@ -7,9 +7,9 @@ {"offset": {"line": 332, "column": 0}, "map": {"version":3,"sources":["file:///Users/freedak/Documents/go-new/chinese-family-tree/components/site-header.tsx"],"sourcesContent":["\"use client\"\n\nimport Link from \"next/link\"\nimport { BookOpen, Search, Bell, Settings, LogOut, User, ChevronDown, Plus, Trash2, Network, LayoutGrid, Calculator } from \"lucide-react\"\nimport { Button } from \"@/components/ui/button\"\nimport { Input } from \"@/components/ui/input\"\nimport { Avatar, AvatarFallback, AvatarImage } from \"@/components/ui/avatar\"\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuLabel,\n DropdownMenuSeparator,\n DropdownMenuTrigger,\n} from \"@/components/ui/dropdown-menu\"\nimport { useFamily } from \"@/context/family-context\"\nimport { useState, useRef, useEffect, useCallback } from \"react\"\nimport { useRouter, usePathname, useSearchParams } from \"next/navigation\"\nimport { useSession, signOut } from \"next-auth/react\"\nimport { useDialog } from \"@/components/ui/alert-dialog-custom\"\n\ninterface FamilyTree {\n id: string\n name: string\n description: string | null\n ownerId: string\n currentUserRole?: \"OWNER\" | \"EDITOR\" | \"VIEWER\"\n}\n\nexport function SiteHeader() {\n const { searchMembers, searchResults } = useFamily()\n const { data: session, status } = useSession()\n const { showAlert, showConfirm, showPrompt } = useDialog()\n const pathname = usePathname()\n const searchParams = useSearchParams()\n const [searchQuery, setSearchQuery] = useState(\"\")\n const [showResults, setShowResults] = useState(false)\n const [familyTrees, setFamilyTrees] = useState([])\n const [currentTree, setCurrentTree] = useState(null)\n const [deletingTreeId, setDeletingTreeId] = useState(null)\n const searchRef = useRef(null)\n const router = useRouter()\n \n // 获取当前视图模式\n const currentViewMode = searchParams.get('view') || 'traditional'\n const isTreePage = pathname === '/tree'\n\n // 生成带有 treeId 的 URL\n const getUrlWithTreeId = (path: string) => {\n if (currentTree?.id) {\n return `${path}?treeId=${currentTree.id}`\n }\n return path\n }\n\n // 切换视图模式\n const handleViewModeChange = (mode: string) => {\n const params = new URLSearchParams(searchParams.toString())\n params.set('view', mode)\n if (currentTree?.id) {\n params.set('treeId', currentTree.id)\n }\n router.push(`${pathname}?${params.toString()}`)\n }\n\n const getRoleBadge = (role?: string) => {\n switch (role) {\n case \"OWNER\":\n return 所有者\n case \"EDITOR\":\n return 编辑\n case \"VIEWER\":\n return 查看\n default:\n return null\n }\n }\n\n const handleSignOut = async () => {\n await signOut({ callbackUrl: \"/auth/signin\" })\n }\n\n // 获取用户名首字母作为头像\n const getUserInitial = () => {\n if (session?.user?.name) {\n return session.user.name.charAt(0).toUpperCase()\n }\n if (session?.user?.email) {\n return session.user.email.charAt(0).toUpperCase()\n }\n return \"U\"\n }\n\n // 删除家族树\n const handleDeleteTree = async (tree: FamilyTree, e: React.MouseEvent) => {\n e.stopPropagation() // 阻止触发选择事件\n\n // 检查权限\n if (tree.ownerId !== session?.user?.id) {\n await showAlert('只有家族树的创建者才能删除', '权限不足')\n return\n }\n\n const confirmText = `确定要删除家族树\"${tree.name}\"吗?\\n\\n此操作将永久删除所有成员、活动日志和协作者数据,且不可撤销!`\n const confirmed = await showConfirm(confirmText, '删除家族树', 'destructive')\n if (!confirmed) {\n return\n }\n\n // 二次确认\n const finalConfirm = await showPrompt(\n `请输入家族树名称\"${tree.name}\"以确认删除:`,\n '',\n '确认删除'\n )\n if (finalConfirm !== tree.name) {\n await showAlert('名称不匹配,删除已取消', '操作已取消')\n return\n }\n\n setDeletingTreeId(tree.id)\n try {\n const response = await fetch(`/api/trees/${tree.id}`, {\n method: 'DELETE',\n })\n\n if (!response.ok) {\n const error = await response.json()\n throw new Error(error.error || '删除失败')\n }\n\n // 刷新家族树列表\n await loadFamilyTrees()\n \n // 如果删除的是当前树,跳转到首页\n if (currentTree?.id === tree.id) {\n window.location.href = '/'\n }\n } catch (error) {\n console.error('删除家族树失败:', error)\n await showAlert('删除失败:' + (error as Error).message, '错误')\n } finally {\n setDeletingTreeId(null)\n }\n }\n\n // 获取家族树列表\n const loadFamilyTrees = useCallback(() => {\n if (!session?.user?.id || status !== 'authenticated') return\n\n const controller = new AbortController()\n \n fetch('/api/trees', { signal: controller.signal })\n .then(res => {\n if (!res.ok) throw new Error(`HTTP error! status: ${res.status}`)\n return res.json()\n })\n .then(data => {\n if (data.trees) {\n setFamilyTrees(data.trees)\n // 如果 URL 中有 treeId,使用该树,否则使用第一个\n const urlParams = new URLSearchParams(window.location.search)\n const treeId = urlParams.get('treeId')\n if (treeId) {\n const tree = data.trees.find((t: FamilyTree) => t.id === treeId)\n if (tree) {\n setCurrentTree(tree)\n } else if (data.trees.length > 0) {\n setCurrentTree(data.trees[0])\n }\n } else if (data.trees.length > 0) {\n setCurrentTree(data.trees[0])\n }\n }\n })\n .catch(err => {\n // 忽略 abort 错误和 fetch 错误(可能是页面切换导致的)\n if (err.name !== 'AbortError' && err.message !== 'Failed to fetch') {\n console.error('获取家族树列表失败:', err)\n }\n })\n \n return () => controller.abort()\n }, [session?.user?.id, status])\n\n useEffect(() => {\n loadFamilyTrees()\n }, [loadFamilyTrees])\n\n // 监听路由变化,刷新家族树列表\n useEffect(() => {\n const handleRouteChange = () => {\n loadFamilyTrees()\n }\n \n window.addEventListener('focus', handleRouteChange)\n return () => window.removeEventListener('focus', handleRouteChange)\n }, [loadFamilyTrees])\n\n // 点击外部关闭搜索结果\n useEffect(() => {\n function handleClickOutside(event: MouseEvent) {\n if (searchRef.current && !searchRef.current.contains(event.target as Node)) {\n setShowResults(false)\n }\n }\n document.addEventListener(\"mousedown\", handleClickOutside)\n return () => document.removeEventListener(\"mousedown\", handleClickOutside)\n }, [])\n\n const handleSearch = (query: string) => {\n setSearchQuery(query)\n searchMembers(query)\n setShowResults(query.length > 0)\n }\n\n const handleSelectMember = (memberId: string) => {\n router.push(`/members/${memberId}`)\n setSearchQuery(\"\")\n setShowResults(false)\n }\n\n return (\n
\n
\n
\n \n
\n \n
\n 华夏谱\n \n \n {/* 家族树选择器 */}\n {session && familyTrees.length > 0 && (\n \n \n \n \n \n 我的家族树\n \n {familyTrees.map((tree) => (\n {\n setCurrentTree(tree)\n // 保持当前路径,只更新 treeId 参数\n const currentPath = window.location.pathname\n router.push(`${currentPath}?treeId=${tree.id}`)\n }}\n className=\"cursor-pointer flex items-center justify-between group\"\n >\n
\n {tree.name}\n {getRoleBadge(tree.currentUserRole)}\n
\n
\n {currentTree?.id === tree.id && (\n \n )}\n {tree.ownerId === session?.user?.id && (\n handleDeleteTree(tree, e)}\n disabled={deletingTreeId === tree.id}\n >\n \n \n )}\n
\n \n ))}\n \n router.push('/trees/new')}\n className=\"cursor-pointer text-primary\"\n >\n \n 创建新家族树\n \n
\n
\n )}\n
\n\n \n\n
\n \n\n \n\n \n \n \n\n \n \n \n\n {status === \"loading\" ? (\n \n ...\n \n ) : session ? (\n \n \n \n \n \n \n
\n

{session.user?.name || \"用户\"}

\n

\n {session.user?.email}\n

\n
\n
\n \n \n \n \n 系统设置\n \n \n \n \n \n 退出登录\n \n
\n
\n ) : (\n \n \n \n )}\n
\n
\n
\n )\n}\n"],"names":[],"mappings":"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"}}, {"offset": {"line": 1221, "column": 0}, "map": {"version":3,"sources":["file:///Users/freedak/Documents/go-new/chinese-family-tree/components/ui/scroll-area.tsx"],"sourcesContent":["'use client'\n\nimport * as React from 'react'\nimport * as ScrollAreaPrimitive from '@radix-ui/react-scroll-area'\n\nimport { cn } from '@/lib/utils'\n\nfunction ScrollArea({\n className,\n children,\n ...props\n}: React.ComponentProps) {\n return (\n \n \n {children}\n \n \n \n \n )\n}\n\nfunction ScrollBar({\n className,\n orientation = 'vertical',\n ...props\n}: React.ComponentProps) {\n return (\n \n \n \n )\n}\n\nexport { ScrollArea, ScrollBar }\n"],"names":[],"mappings":";;;;;;;AAGA;AAEA;AALA;;;;AAOA,SAAS,WAAW,EAClB,SAAS,EACT,QAAQ,EACR,GAAG,OACmD;IACtD,qBACE,oaAAC,6bAAwB;QACvB,aAAU;QACV,WAAW,IAAA,yKAAE,EAAC,YAAY;QACzB,GAAG,KAAK;;0BAET,oaAAC,icAA4B;gBAC3B,aAAU;gBACV,WAAU;0BAET;;;;;;0BAEH,oaAAC;;;;;0BACD,oaAAC,+bAA0B;;;;;;;;;;;AAGjC;AAEA,SAAS,UAAU,EACjB,SAAS,EACT,cAAc,UAAU,EACxB,GAAG,OACkE;IACrE,qBACE,oaAAC,4cAAuC;QACtC,aAAU;QACV,aAAa;QACb,WAAW,IAAA,yKAAE,EACX,sDACA,gBAAgB,cACd,8CACF,gBAAgB,gBACd,gDACF;QAED,GAAG,KAAK;kBAET,cAAA,oaAAC,wcAAmC;YAClC,aAAU;YACV,WAAU;;;;;;;;;;;AAIlB"}}, {"offset": {"line": 1291, "column": 0}, "map": {"version":3,"sources":["file:///Users/freedak/Documents/go-new/chinese-family-tree/components/ui/tabs.tsx"],"sourcesContent":["'use client'\n\nimport * as React from 'react'\nimport * as TabsPrimitive from '@radix-ui/react-tabs'\n\nimport { cn } from '@/lib/utils'\n\nfunction Tabs({\n className,\n ...props\n}: React.ComponentProps) {\n return (\n \n )\n}\n\nfunction TabsList({\n className,\n ...props\n}: React.ComponentProps) {\n return (\n \n )\n}\n\nfunction TabsTrigger({\n className,\n ...props\n}: React.ComponentProps) {\n return (\n \n )\n}\n\nfunction TabsContent({\n className,\n ...props\n}: React.ComponentProps) {\n return (\n \n )\n}\n\nexport { Tabs, TabsList, TabsTrigger, TabsContent }\n"],"names":[],"mappings":";;;;;;;;;;;AAGA;AAEA;AALA;;;;AAOA,SAAS,KAAK,EACZ,SAAS,EACT,GAAG,OAC6C;IAChD,qBACE,oaAAC,mbAAkB;QACjB,aAAU;QACV,WAAW,IAAA,yKAAE,EAAC,uBAAuB;QACpC,GAAG,KAAK;;;;;;AAGf;AAEA,SAAS,SAAS,EAChB,SAAS,EACT,GAAG,OAC6C;IAChD,qBACE,oaAAC,mbAAkB;QACjB,aAAU;QACV,WAAW,IAAA,yKAAE,EACX,uGACA;QAED,GAAG,KAAK;;;;;;AAGf;AAEA,SAAS,YAAY,EACnB,SAAS,EACT,GAAG,OACgD;IACnD,qBACE,oaAAC,sbAAqB;QACpB,aAAU;QACV,WAAW,IAAA,yKAAE,EACX,mqBACA;QAED,GAAG,KAAK;;;;;;AAGf;AAEA,SAAS,YAAY,EACnB,SAAS,EACT,GAAG,OACgD;IACnD,qBACE,oaAAC,sbAAqB;QACpB,aAAU;QACV,WAAW,IAAA,yKAAE,EAAC,uBAAuB;QACpC,GAAG,KAAK;;;;;;AAGf"}}, - {"offset": {"line": 1357, "column": 0}, "map": {"version":3,"sources":["file:///Users/freedak/Documents/go-new/chinese-family-tree/components/dashboard/statistics-charts.tsx"],"sourcesContent":["\"use client\"\n\nimport { useEffect, useRef } from \"react\"\nimport * as echarts from \"echarts\"\nimport type { FamilyMember } from \"@/types/family\"\nimport { Card, CardContent, CardHeader, CardTitle, CardDescription } from \"@/components/ui/card\"\n\ninterface StatisticsChartsProps {\n members: FamilyMember[]\n}\n\nexport function StatisticsCharts({ members }: StatisticsChartsProps) {\n const genderChartRef = useRef(null)\n const generationChartRef = useRef(null)\n const ageDistributionRef = useRef(null)\n const birthYearChartRef = useRef(null)\n\n useEffect(() => {\n if (!genderChartRef.current || members.length === 0) return\n\n // 性别分布饼图\n const genderChart = echarts.init(genderChartRef.current)\n const genderData = {\n male: members.filter(m => m.gender === 'male').length,\n female: members.filter(m => m.gender === 'female').length,\n other: members.filter(m => m.gender === 'other').length,\n }\n\n genderChart.setOption({\n title: {\n text: '性别分布',\n left: 'center',\n top: 10,\n textStyle: {\n fontSize: 14,\n fontWeight: 'normal'\n }\n },\n tooltip: {\n trigger: 'item',\n formatter: '{b}: {c} 人 ({d}%)'\n },\n legend: {\n bottom: 10,\n left: 'center'\n },\n series: [\n {\n type: 'pie',\n radius: ['40%', '70%'],\n center: ['50%', '50%'],\n avoidLabelOverlap: false,\n itemStyle: {\n borderRadius: 10,\n borderColor: '#fff',\n borderWidth: 2\n },\n label: {\n show: false\n },\n emphasis: {\n label: {\n show: true,\n fontSize: 16,\n fontWeight: 'bold'\n }\n },\n data: [\n { value: genderData.male, name: '男性', itemStyle: { color: '#3b82f6' } },\n { value: genderData.female, name: '女性', itemStyle: { color: '#ec4899' } },\n ...(genderData.other > 0 ? [{ value: genderData.other, name: '其他', itemStyle: { color: '#8b5cf6' } }] : [])\n ]\n }\n ]\n })\n\n return () => {\n genderChart.dispose()\n }\n }, [members])\n\n useEffect(() => {\n if (!generationChartRef.current || members.length === 0) return\n\n // 世代分布柱状图\n const generationChart = echarts.init(generationChartRef.current)\n const generationData = new Map()\n \n members.forEach(m => {\n const gen = m.generation || 0\n generationData.set(gen, (generationData.get(gen) || 0) + 1)\n })\n\n const sortedGenerations = Array.from(generationData.entries()).sort((a, b) => a[0] - b[0])\n\n generationChart.setOption({\n title: {\n text: '世代分布',\n left: 'center',\n top: 10,\n textStyle: {\n fontSize: 14,\n fontWeight: 'normal'\n }\n },\n tooltip: {\n trigger: 'axis',\n axisPointer: {\n type: 'shadow'\n },\n formatter: '{b}世: {c} 人'\n },\n grid: {\n left: '3%',\n right: '4%',\n bottom: '3%',\n top: '15%',\n containLabel: true\n },\n xAxis: {\n type: 'category',\n data: sortedGenerations.map(([gen]) => `第${gen}世`),\n axisLabel: {\n rotate: 45\n }\n },\n yAxis: {\n type: 'value',\n name: '人数'\n },\n series: [\n {\n type: 'bar',\n data: sortedGenerations.map(([, count]) => count),\n itemStyle: {\n color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [\n { offset: 0, color: '#83bff6' },\n { offset: 0.5, color: '#188df0' },\n { offset: 1, color: '#188df0' }\n ])\n },\n emphasis: {\n itemStyle: {\n color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [\n { offset: 0, color: '#2378f7' },\n { offset: 0.7, color: '#2378f7' },\n { offset: 1, color: '#83bff6' }\n ])\n }\n }\n }\n ]\n })\n\n return () => {\n generationChart.dispose()\n }\n }, [members])\n\n useEffect(() => {\n if (!ageDistributionRef.current || members.length === 0) return\n\n // 年龄分布图\n const ageChart = echarts.init(ageDistributionRef.current)\n const currentYear = new Date().getFullYear()\n \n const ageGroups = {\n '0-18': 0,\n '19-35': 0,\n '36-50': 0,\n '51-65': 0,\n '66+': 0,\n '已故': 0\n }\n\n members.forEach(m => {\n if (m.deathDate) {\n ageGroups['已故']++\n } else if (m.birthDate) {\n const age = currentYear - new Date(m.birthDate).getFullYear()\n if (age <= 18) ageGroups['0-18']++\n else if (age <= 35) ageGroups['19-35']++\n else if (age <= 50) ageGroups['36-50']++\n else if (age <= 65) ageGroups['51-65']++\n else ageGroups['66+']++\n }\n })\n\n ageChart.setOption({\n title: {\n text: '年龄分布',\n left: 'center',\n top: 10,\n textStyle: {\n fontSize: 14,\n fontWeight: 'normal'\n }\n },\n tooltip: {\n trigger: 'item',\n formatter: '{b}: {c} 人 ({d}%)'\n },\n legend: {\n bottom: 10,\n left: 'center'\n },\n series: [\n {\n type: 'pie',\n radius: '60%',\n center: ['50%', '50%'],\n data: Object.entries(ageGroups)\n .filter(([, count]) => count > 0)\n .map(([name, value]) => ({ name, value })),\n emphasis: {\n itemStyle: {\n shadowBlur: 10,\n shadowOffsetX: 0,\n shadowColor: 'rgba(0, 0, 0, 0.5)'\n }\n }\n }\n ]\n })\n\n return () => {\n ageChart.dispose()\n }\n }, [members])\n\n useEffect(() => {\n if (!birthYearChartRef.current || members.length === 0) return\n\n // 出生年份趋势图\n const birthYearChart = echarts.init(birthYearChartRef.current)\n const birthYearData = new Map()\n \n members.forEach(m => {\n if (m.birthDate) {\n const year = new Date(m.birthDate).getFullYear()\n if (year >= 1900) { // 只统计1900年以后的\n const decade = Math.floor(year / 10) * 10\n birthYearData.set(decade, (birthYearData.get(decade) || 0) + 1)\n }\n }\n })\n\n const sortedYears = Array.from(birthYearData.entries()).sort((a, b) => a[0] - b[0])\n\n birthYearChart.setOption({\n title: {\n text: '出生年代分布',\n left: 'center',\n top: 10,\n textStyle: {\n fontSize: 14,\n fontWeight: 'normal'\n }\n },\n tooltip: {\n trigger: 'axis',\n formatter: '{b}年代: {c} 人'\n },\n grid: {\n left: '3%',\n right: '4%',\n bottom: '3%',\n top: '15%',\n containLabel: true\n },\n xAxis: {\n type: 'category',\n data: sortedYears.map(([year]) => `${year}s`),\n axisLabel: {\n rotate: 45\n }\n },\n yAxis: {\n type: 'value',\n name: '人数'\n },\n series: [\n {\n type: 'line',\n data: sortedYears.map(([, count]) => count),\n smooth: true,\n areaStyle: {\n color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [\n { offset: 0, color: 'rgba(99, 102, 241, 0.5)' },\n { offset: 1, color: 'rgba(99, 102, 241, 0.1)' }\n ])\n },\n lineStyle: {\n color: '#6366f1',\n width: 2\n },\n itemStyle: {\n color: '#6366f1'\n }\n }\n ]\n })\n\n return () => {\n birthYearChart.dispose()\n }\n }, [members])\n\n return (\n
\n \n \n 性别分布\n 家族成员性别比例\n \n \n
\n \n \n\n \n \n 世代分布\n 各世代人数统计\n \n \n
\n \n \n\n \n \n 年龄分布\n 按年龄段划分的人数\n \n \n
\n \n \n\n \n \n 出生年代分布\n 各年代出生人数趋势\n \n \n
\n \n \n
\n )\n}\n"],"names":[],"mappings":"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"}}, + {"offset": {"line": 1357, "column": 0}, "map": {"version":3,"sources":["file:///Users/freedak/Documents/go-new/chinese-family-tree/components/dashboard/statistics-charts.tsx"],"sourcesContent":["\"use client\"\n\nimport { useEffect, useRef } from \"react\"\nimport * as echarts from \"echarts\"\nimport type { FamilyMember } from \"@/types/family\"\nimport { Card, CardContent, CardHeader, CardTitle, CardDescription } from \"@/components/ui/card\"\n\ninterface StatisticsChartsProps {\n members: FamilyMember[]\n}\n\nexport function StatisticsCharts({ members }: StatisticsChartsProps) {\n const genderChartRef = useRef(null)\n const generationChartRef = useRef(null)\n const ageDistributionRef = useRef(null)\n const birthYearChartRef = useRef(null)\n\n useEffect(() => {\n if (!genderChartRef.current || members.length === 0) return\n\n // 性别分布饼图\n const genderChart = echarts.init(genderChartRef.current)\n const genderData = {\n male: members.filter(m => m.gender === 'MALE').length,\n female: members.filter(m => m.gender === 'FEMALE').length,\n other: members.filter(m => m.gender === 'OTHER').length,\n }\n\n genderChart.setOption({\n title: {\n text: '性别分布',\n left: 'center',\n top: 10,\n textStyle: {\n fontSize: 14,\n fontWeight: 'normal'\n }\n },\n tooltip: {\n trigger: 'item',\n formatter: '{b}: {c} 人 ({d}%)'\n },\n legend: {\n bottom: 10,\n left: 'center'\n },\n series: [\n {\n type: 'pie',\n radius: ['40%', '70%'],\n center: ['50%', '50%'],\n avoidLabelOverlap: false,\n itemStyle: {\n borderRadius: 10,\n borderColor: '#fff',\n borderWidth: 2\n },\n label: {\n show: false\n },\n emphasis: {\n label: {\n show: true,\n fontSize: 16,\n fontWeight: 'bold'\n }\n },\n data: [\n { value: genderData.male, name: '男性', itemStyle: { color: '#3b82f6' } },\n { value: genderData.female, name: '女性', itemStyle: { color: '#ec4899' } },\n ...(genderData.other > 0 ? [{ value: genderData.other, name: '其他', itemStyle: { color: '#8b5cf6' } }] : [])\n ]\n }\n ]\n })\n\n return () => {\n genderChart.dispose()\n }\n }, [members])\n\n useEffect(() => {\n if (!generationChartRef.current || members.length === 0) return\n\n // 世代分布柱状图\n const generationChart = echarts.init(generationChartRef.current)\n const generationData = new Map()\n \n members.forEach(m => {\n const gen = m.generation || 0\n generationData.set(gen, (generationData.get(gen) || 0) + 1)\n })\n\n const sortedGenerations = Array.from(generationData.entries()).sort((a, b) => a[0] - b[0])\n\n generationChart.setOption({\n title: {\n text: '世代分布',\n left: 'center',\n top: 10,\n textStyle: {\n fontSize: 14,\n fontWeight: 'normal'\n }\n },\n tooltip: {\n trigger: 'axis',\n axisPointer: {\n type: 'shadow'\n },\n formatter: '{b}世: {c} 人'\n },\n grid: {\n left: '3%',\n right: '4%',\n bottom: '3%',\n top: '15%',\n containLabel: true\n },\n xAxis: {\n type: 'category',\n data: sortedGenerations.map(([gen]) => `第${gen}世`),\n axisLabel: {\n rotate: 45\n }\n },\n yAxis: {\n type: 'value',\n name: '人数'\n },\n series: [\n {\n type: 'bar',\n data: sortedGenerations.map(([, count]) => count),\n itemStyle: {\n color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [\n { offset: 0, color: '#83bff6' },\n { offset: 0.5, color: '#188df0' },\n { offset: 1, color: '#188df0' }\n ])\n },\n emphasis: {\n itemStyle: {\n color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [\n { offset: 0, color: '#2378f7' },\n { offset: 0.7, color: '#2378f7' },\n { offset: 1, color: '#83bff6' }\n ])\n }\n }\n }\n ]\n })\n\n return () => {\n generationChart.dispose()\n }\n }, [members])\n\n useEffect(() => {\n if (!ageDistributionRef.current || members.length === 0) return\n\n // 年龄分布图\n const ageChart = echarts.init(ageDistributionRef.current)\n const currentYear = new Date().getFullYear()\n \n const ageGroups = {\n '0-18': 0,\n '19-35': 0,\n '36-50': 0,\n '51-65': 0,\n '66+': 0,\n '已故': 0\n }\n\n members.forEach(m => {\n if (m.deathDate) {\n ageGroups['已故']++\n } else if (m.birthDate) {\n const age = currentYear - new Date(m.birthDate).getFullYear()\n if (age <= 18) ageGroups['0-18']++\n else if (age <= 35) ageGroups['19-35']++\n else if (age <= 50) ageGroups['36-50']++\n else if (age <= 65) ageGroups['51-65']++\n else ageGroups['66+']++\n }\n })\n\n ageChart.setOption({\n title: {\n text: '年龄分布',\n left: 'center',\n top: 10,\n textStyle: {\n fontSize: 14,\n fontWeight: 'normal'\n }\n },\n tooltip: {\n trigger: 'item',\n formatter: '{b}: {c} 人 ({d}%)'\n },\n legend: {\n bottom: 10,\n left: 'center'\n },\n series: [\n {\n type: 'pie',\n radius: '60%',\n center: ['50%', '50%'],\n data: Object.entries(ageGroups)\n .filter(([, count]) => count > 0)\n .map(([name, value]) => ({ name, value })),\n emphasis: {\n itemStyle: {\n shadowBlur: 10,\n shadowOffsetX: 0,\n shadowColor: 'rgba(0, 0, 0, 0.5)'\n }\n }\n }\n ]\n })\n\n return () => {\n ageChart.dispose()\n }\n }, [members])\n\n useEffect(() => {\n if (!birthYearChartRef.current || members.length === 0) return\n\n // 出生年份趋势图\n const birthYearChart = echarts.init(birthYearChartRef.current)\n const birthYearData = new Map()\n \n members.forEach(m => {\n if (m.birthDate) {\n const year = new Date(m.birthDate).getFullYear()\n if (year >= 1900) { // 只统计1900年以后的\n const decade = Math.floor(year / 10) * 10\n birthYearData.set(decade, (birthYearData.get(decade) || 0) + 1)\n }\n }\n })\n\n const sortedYears = Array.from(birthYearData.entries()).sort((a, b) => a[0] - b[0])\n\n birthYearChart.setOption({\n title: {\n text: '出生年代分布',\n left: 'center',\n top: 10,\n textStyle: {\n fontSize: 14,\n fontWeight: 'normal'\n }\n },\n tooltip: {\n trigger: 'axis',\n formatter: '{b}年代: {c} 人'\n },\n grid: {\n left: '3%',\n right: '4%',\n bottom: '3%',\n top: '15%',\n containLabel: true\n },\n xAxis: {\n type: 'category',\n data: sortedYears.map(([year]) => `${year}s`),\n axisLabel: {\n rotate: 45\n }\n },\n yAxis: {\n type: 'value',\n name: '人数'\n },\n series: [\n {\n type: 'line',\n data: sortedYears.map(([, count]) => count),\n smooth: true,\n areaStyle: {\n color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [\n { offset: 0, color: 'rgba(99, 102, 241, 0.5)' },\n { offset: 1, color: 'rgba(99, 102, 241, 0.1)' }\n ])\n },\n lineStyle: {\n color: '#6366f1',\n width: 2\n },\n itemStyle: {\n color: '#6366f1'\n }\n }\n ]\n })\n\n return () => {\n birthYearChart.dispose()\n }\n }, [members])\n\n return (\n
\n \n \n 性别分布\n 家族成员性别比例\n \n \n
\n \n \n\n \n \n 世代分布\n 各世代人数统计\n \n \n
\n \n \n\n \n \n 年龄分布\n 按年龄段划分的人数\n \n \n
\n \n \n\n \n \n 出生年代分布\n 各年代出生人数趋势\n \n \n
\n \n \n
\n )\n}\n"],"names":[],"mappings":"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"}}, {"offset": {"line": 1898, "column": 0}, "map": {"version":3,"sources":["file:///Users/freedak/Documents/go-new/chinese-family-tree/components/ui/dialog.tsx"],"sourcesContent":["'use client'\n\nimport * as React from 'react'\nimport * as DialogPrimitive from '@radix-ui/react-dialog'\nimport { XIcon } from 'lucide-react'\n\nimport { cn } from '@/lib/utils'\n\nfunction Dialog({\n ...props\n}: React.ComponentProps) {\n return \n}\n\nfunction DialogTrigger({\n ...props\n}: React.ComponentProps) {\n return \n}\n\nfunction DialogPortal({\n ...props\n}: React.ComponentProps) {\n return \n}\n\nfunction DialogClose({\n ...props\n}: React.ComponentProps) {\n return \n}\n\nfunction DialogOverlay({\n className,\n ...props\n}: React.ComponentProps) {\n return (\n \n )\n}\n\nfunction DialogContent({\n className,\n children,\n showCloseButton = true,\n ...props\n}: React.ComponentProps & {\n showCloseButton?: boolean\n}) {\n return (\n \n \n \n {children}\n {showCloseButton && (\n \n \n Close\n \n )}\n \n \n )\n}\n\nfunction DialogHeader({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n \n )\n}\n\nfunction DialogFooter({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n \n )\n}\n\nfunction DialogTitle({\n className,\n ...props\n}: React.ComponentProps) {\n return (\n \n )\n}\n\nfunction DialogDescription({\n className,\n ...props\n}: React.ComponentProps) {\n return (\n \n )\n}\n\nexport {\n Dialog,\n DialogClose,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogOverlay,\n DialogPortal,\n DialogTitle,\n DialogTrigger,\n}\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AAGA;AACA;AAEA;AANA;;;;;AAQA,SAAS,OAAO,EACd,GAAG,OAC+C;IAClD,qBAAO,oaAAC,qbAAoB;QAAC,aAAU;QAAU,GAAG,KAAK;;;;;;AAC3D;AAEA,SAAS,cAAc,EACrB,GAAG,OACkD;IACrD,qBAAO,oaAAC,wbAAuB;QAAC,aAAU;QAAkB,GAAG,KAAK;;;;;;AACtE;AAEA,SAAS,aAAa,EACpB,GAAG,OACiD;IACpD,qBAAO,oaAAC,ubAAsB;QAAC,aAAU;QAAiB,GAAG,KAAK;;;;;;AACpE;AAEA,SAAS,YAAY,EACnB,GAAG,OACgD;IACnD,qBAAO,oaAAC,sbAAqB;QAAC,aAAU;QAAgB,GAAG,KAAK;;;;;;AAClE;AAEA,SAAS,cAAc,EACrB,SAAS,EACT,GAAG,OACkD;IACrD,qBACE,oaAAC,wbAAuB;QACtB,aAAU;QACV,WAAW,IAAA,yKAAE,EACX,0JACA;QAED,GAAG,KAAK;;;;;;AAGf;AAEA,SAAS,cAAc,EACrB,SAAS,EACT,QAAQ,EACR,kBAAkB,IAAI,EACtB,GAAG,OAGJ;IACC,qBACE,oaAAC;QAAa,aAAU;;0BACtB,oaAAC;;;;;0BACD,oaAAC,wbAAuB;gBACtB,aAAU;gBACV,WAAW,IAAA,yKAAE,EACX,+WACA;gBAED,GAAG,KAAK;;oBAER;oBACA,iCACC,oaAAC,sbAAqB;wBACpB,aAAU;wBACV,WAAU;;0CAEV,oaAAC,oVAAK;;;;;0CACN,oaAAC;gCAAK,WAAU;0CAAU;;;;;;;;;;;;;;;;;;;;;;;;AAMtC;AAEA,SAAS,aAAa,EAAE,SAAS,EAAE,GAAG,OAAoC;IACxE,qBACE,oaAAC;QACC,aAAU;QACV,WAAW,IAAA,yKAAE,EAAC,gDAAgD;QAC7D,GAAG,KAAK;;;;;;AAGf;AAEA,SAAS,aAAa,EAAE,SAAS,EAAE,GAAG,OAAoC;IACxE,qBACE,oaAAC;QACC,aAAU;QACV,WAAW,IAAA,yKAAE,EACX,0DACA;QAED,GAAG,KAAK;;;;;;AAGf;AAEA,SAAS,YAAY,EACnB,SAAS,EACT,GAAG,OACgD;IACnD,qBACE,oaAAC,sbAAqB;QACpB,aAAU;QACV,WAAW,IAAA,yKAAE,EAAC,sCAAsC;QACnD,GAAG,KAAK;;;;;;AAGf;AAEA,SAAS,kBAAkB,EACzB,SAAS,EACT,GAAG,OACsD;IACzD,qBACE,oaAAC,4bAA2B;QAC1B,aAAU;QACV,WAAW,IAAA,yKAAE,EAAC,iCAAiC;QAC9C,GAAG,KAAK;;;;;;AAGf"}}, {"offset": {"line": 2080, "column": 0}, "map": {"version":3,"sources":["file:///Users/freedak/Documents/go-new/chinese-family-tree/components/ui/select.tsx"],"sourcesContent":["'use client'\n\nimport * as React from 'react'\nimport * as SelectPrimitive from '@radix-ui/react-select'\nimport { CheckIcon, ChevronDownIcon, ChevronUpIcon } from 'lucide-react'\n\nimport { cn } from '@/lib/utils'\n\nfunction Select({\n ...props\n}: React.ComponentProps) {\n return \n}\n\nfunction SelectGroup({\n ...props\n}: React.ComponentProps) {\n return \n}\n\nfunction SelectValue({\n ...props\n}: React.ComponentProps) {\n return \n}\n\nfunction SelectTrigger({\n className,\n size = 'default',\n children,\n ...props\n}: React.ComponentProps & {\n size?: 'sm' | 'default'\n}) {\n return (\n \n {children}\n \n \n \n \n )\n}\n\nfunction SelectContent({\n className,\n children,\n position = 'popper',\n ...props\n}: React.ComponentProps) {\n return (\n \n \n \n \n {children}\n \n \n \n \n )\n}\n\nfunction SelectLabel({\n className,\n ...props\n}: React.ComponentProps) {\n return (\n \n )\n}\n\nfunction SelectItem({\n className,\n children,\n ...props\n}: React.ComponentProps) {\n return (\n \n \n \n \n \n \n {children}\n \n )\n}\n\nfunction SelectSeparator({\n className,\n ...props\n}: React.ComponentProps) {\n return (\n \n )\n}\n\nfunction SelectScrollUpButton({\n className,\n ...props\n}: React.ComponentProps) {\n return (\n \n \n \n )\n}\n\nfunction SelectScrollDownButton({\n className,\n ...props\n}: React.ComponentProps) {\n return (\n \n \n \n )\n}\n\nexport {\n Select,\n SelectContent,\n SelectGroup,\n SelectItem,\n SelectLabel,\n SelectScrollDownButton,\n SelectScrollUpButton,\n SelectSeparator,\n SelectTrigger,\n SelectValue,\n}\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AAGA;AACA;AAAA;AAAA;AAEA;AANA;;;;;AAQA,SAAS,OAAO,EACd,GAAG,OAC+C;IAClD,qBAAO,oaAAC,qbAAoB;QAAC,aAAU;QAAU,GAAG,KAAK;;;;;;AAC3D;AAEA,SAAS,YAAY,EACnB,GAAG,OACgD;IACnD,qBAAO,oaAAC,sbAAqB;QAAC,aAAU;QAAgB,GAAG,KAAK;;;;;;AAClE;AAEA,SAAS,YAAY,EACnB,GAAG,OACgD;IACnD,qBAAO,oaAAC,sbAAqB;QAAC,aAAU;QAAgB,GAAG,KAAK;;;;;;AAClE;AAEA,SAAS,cAAc,EACrB,SAAS,EACT,OAAO,SAAS,EAChB,QAAQ,EACR,GAAG,OAGJ;IACC,qBACE,oaAAC,wbAAuB;QACtB,aAAU;QACV,aAAW;QACX,WAAW,IAAA,yKAAE,EACX,gzBACA;QAED,GAAG,KAAK;;YAER;0BACD,oaAAC,qbAAoB;gBAAC,OAAO;0BAC3B,cAAA,oaAAC,sXAAe;oBAAC,WAAU;;;;;;;;;;;;;;;;;AAInC;AAEA,SAAS,cAAc,EACrB,SAAS,EACT,QAAQ,EACR,WAAW,QAAQ,EACnB,GAAG,OACkD;IACrD,qBACE,oaAAC,ubAAsB;kBACrB,cAAA,oaAAC,wbAAuB;YACtB,aAAU;YACV,WAAW,IAAA,yKAAE,EACX,ijBACA,aAAa,YACX,mIACF;YAEF,UAAU;YACT,GAAG,KAAK;;8BAET,oaAAC;;;;;8BACD,oaAAC,ybAAwB;oBACvB,WAAW,IAAA,yKAAE,EACX,OACA,aAAa,YACX;8BAGH;;;;;;8BAEH,oaAAC;;;;;;;;;;;;;;;;AAIT;AAEA,SAAS,YAAY,EACnB,SAAS,EACT,GAAG,OACgD;IACnD,qBACE,oaAAC,sbAAqB;QACpB,aAAU;QACV,WAAW,IAAA,yKAAE,EAAC,6CAA6C;QAC1D,GAAG,KAAK;;;;;;AAGf;AAEA,SAAS,WAAW,EAClB,SAAS,EACT,QAAQ,EACR,GAAG,OAC+C;IAClD,qBACE,oaAAC,qbAAoB;QACnB,aAAU;QACV,WAAW,IAAA,yKAAE,EACX,6aACA;QAED,GAAG,KAAK;;0BAET,oaAAC;gBAAK,WAAU;0BACd,cAAA,oaAAC,8bAA6B;8BAC5B,cAAA,oaAAC,gWAAS;wBAAC,WAAU;;;;;;;;;;;;;;;;0BAGzB,oaAAC,ybAAwB;0BAAE;;;;;;;;;;;;AAGjC;AAEA,SAAS,gBAAgB,EACvB,SAAS,EACT,GAAG,OACoD;IACvD,qBACE,oaAAC,0bAAyB;QACxB,aAAU;QACV,WAAW,IAAA,yKAAE,EAAC,iDAAiD;QAC9D,GAAG,KAAK;;;;;;AAGf;AAEA,SAAS,qBAAqB,EAC5B,SAAS,EACT,GAAG,OACyD;IAC5D,qBACE,oaAAC,+bAA8B;QAC7B,aAAU;QACV,WAAW,IAAA,yKAAE,EACX,wDACA;QAED,GAAG,KAAK;kBAET,cAAA,oaAAC,gXAAa;YAAC,WAAU;;;;;;;;;;;AAG/B;AAEA,SAAS,uBAAuB,EAC9B,SAAS,EACT,GAAG,OAC2D;IAC9D,qBACE,oaAAC,icAAgC;QAC/B,aAAU;QACV,WAAW,IAAA,yKAAE,EACX,wDACA;QAED,GAAG,KAAK;kBAET,cAAA,oaAAC,sXAAe;YAAC,WAAU;;;;;;;;;;;AAGjC"}}, {"offset": {"line": 2313, "column": 0}, "map": {"version":3,"sources":["file:///Users/freedak/Documents/go-new/chinese-family-tree/components/tree/collaborator-dialog.tsx"],"sourcesContent":["\"use client\"\n\nimport { useState, useEffect } from \"react\"\nimport { useSession } from \"next-auth/react\"\nimport { Dialog, DialogContent, DialogDescription, DialogHeader, DialogTitle, DialogTrigger } from \"@/components/ui/dialog\"\nimport { Button } from \"@/components/ui/button\"\nimport { Input } from \"@/components/ui/input\"\nimport { Label } from \"@/components/ui/label\"\nimport { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from \"@/components/ui/select\"\nimport { Avatar, AvatarFallback } from \"@/components/ui/avatar\"\nimport { Users, Mail, Trash2, Plus, Shield, Eye, Edit } from \"lucide-react\"\nimport { Alert, AlertDescription, AlertTitle } from \"@/components/ui/alert\"\nimport { useFamily } from \"@/context/family-context\"\nimport { useDialog } from \"@/components/ui/alert-dialog-custom\"\n\ninterface Collaborator {\n id: string\n userId: string\n role: \"EDITOR\" | \"VIEWER\"\n invitedAt: string\n user: {\n id: string\n name: string | null\n email: string\n avatar: string | null\n }\n}\n\nexport function CollaboratorDialog() {\n const { data: session } = useSession()\n const { currentTree } = useFamily()\n const { showConfirm, showAlert } = useDialog()\n const [open, setOpen] = useState(false)\n const [collaborators, setCollaborators] = useState([])\n const [isInviting, setIsInviting] = useState(false)\n const [email, setEmail] = useState(\"\")\n const [role, setRole] = useState<\"EDITOR\" | \"VIEWER\">(\"VIEWER\")\n const [password, setPassword] = useState(\"\")\n const [error, setError] = useState(\"\")\n const [success, setSuccess] = useState(\"\")\n\n // 加载协作者\n useEffect(() => {\n if (open && currentTree?.id) {\n loadCollaborators()\n }\n }, [open, currentTree?.id])\n\n const loadCollaborators = async () => {\n if (!currentTree?.id) return\n \n try {\n const res = await fetch(`/api/trees/${currentTree.id}/collaborators`)\n if (res.ok) {\n const data = await res.json()\n setCollaborators(data.collaborators)\n }\n } catch (err) {\n console.error(\"加载协作者失败:\", err)\n }\n }\n\n const handleInvite = async (e: React.FormEvent) => {\n e.preventDefault()\n if (!currentTree?.id) return\n\n setIsInviting(true)\n setError(\"\")\n setSuccess(\"\")\n\n try {\n const res = await fetch(`/api/trees/${currentTree.id}/invite`, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify({\n email,\n role,\n password: password || undefined,\n }),\n })\n\n const data = await res.json()\n\n if (!res.ok) {\n throw new Error(data.error || \"邀请失败\")\n }\n\n setSuccess(data.message)\n setEmail(\"\")\n setPassword(\"\")\n loadCollaborators()\n } catch (err: any) {\n setError(err.message)\n } finally {\n setIsInviting(false)\n }\n }\n\n const handleRemove = async (userId: string) => {\n if (!currentTree?.id) return\n \n const confirmed = await showConfirm(\"确定要移除此协作者吗?\", \"移除协作者\")\n if (!confirmed) return\n\n try {\n const res = await fetch(`/api/trees/${currentTree.id}/collaborators?userId=${userId}`, {\n method: 'DELETE',\n })\n\n if (!res.ok) throw new Error('移除失败')\n\n loadCollaborators()\n } catch (err) {\n console.error(err)\n await showAlert(\"移除失败\", \"错误\")\n }\n }\n\n if (!currentTree) return null\n if (currentTree.ownerId !== session?.user?.id) return null\n\n return (\n \n \n \n \n \n \n 协作管理 - {currentTree.name}\n \n 邀请其他用户协作编辑或查看您的家族树。\n \n \n \n
\n {/* 邀请表单 */}\n
\n
\n
\n \n setEmail(e.target.value)}\n required\n />\n
\n
\n \n \n
\n
\n \n
\n setPassword(e.target.value)}\n minLength={6}\n className=\"flex-1\"\n />\n \n
\n

如果是现有用户,此密码将被忽略。

\n
\n
\n\n {error && (\n \n 错误\n {error}\n \n )}\n\n {success && (\n \n 成功\n {success}\n \n )}\n
\n\n {/* 协作者列表 */}\n
\n

现有协作者

\n {collaborators.length === 0 ? (\n
\n 暂无协作者\n
\n ) : (\n
\n {collaborators.map((collab) => (\n \n
\n \n \n {collab.user.name?.charAt(0).toUpperCase() || collab.user.email.charAt(0).toUpperCase()}\n \n \n
\n
{collab.user.name || \"用户\"}
\n
{collab.user.email}
\n
\n
\n
\n \n {collab.role === 'EDITOR' ? '编辑者' : '查看者'}\n \n handleRemove(collab.userId)}\n >\n \n \n
\n
\n ))}\n
\n )}\n
\n
\n \n \n )\n}\n"],"names":[],"mappings":"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"}}, - {"offset": {"line": 2877, "column": 0}, "map": {"version":3,"sources":["file:///Users/freedak/Documents/go-new/chinese-family-tree/app/page.tsx"],"sourcesContent":["\"use client\"\n\nimport type React from \"react\"\nimport Link from \"next/link\"\nimport { Button } from \"@/components/ui/button\"\nimport { Card, CardContent, CardDescription, CardHeader, CardTitle } from \"@/components/ui/card\"\nimport { SiteHeader } from \"@/components/site-header\"\nimport { ScrollArea } from \"@/components/ui/scroll-area\"\nimport { Tabs, TabsContent, TabsList, TabsTrigger } from \"@/components/ui/tabs\"\nimport { UserPlus, Network, Map, Calendar, Users, ArrowRight, Clock, Search, BookOpen, BarChart3, Calculator } from \"lucide-react\"\nimport { useFamily } from \"@/context/family-context\"\nimport { useMemo, useState, useEffect, useRef } from \"react\"\nimport { StatisticsCharts } from \"@/components/dashboard/statistics-charts\"\nimport { format } from \"date-fns\"\nimport { useSession } from \"next-auth/react\"\nimport { useSearchParams } from \"next/navigation\"\nimport { CollaboratorDialog } from \"@/components/tree/collaborator-dialog\"\n\ninterface ActivityLog {\n id: string\n action: string\n entityType: string\n entityId?: string | null\n entityName?: string | null\n timestamp: string\n user?: {\n name?: string | null\n email?: string | null\n }\n}\n\nexport default function DashboardPage() {\n const { treeData, isLoading, currentTree } = useFamily()\n const { data: session } = useSession()\n const [recentActivities, setRecentActivities] = useState([])\n \n // 加载最近的操作日志\n useEffect(() => {\n if (currentTree?.id && session?.user?.id) {\n fetch(`/api/trees/${currentTree.id}/activity-logs?limit=10`)\n .then(res => {\n if (!res.ok) {\n throw new Error('获取活动日志失败')\n }\n return res.json()\n })\n .then(data => {\n if (data.logs) {\n setRecentActivities(data.logs)\n }\n })\n .catch(err => {\n console.error('获取活动日志失败:', err)\n setRecentActivities([])\n })\n } else {\n setRecentActivities([])\n }\n }, [currentTree?.id, session?.user?.id])\n \n // 计算统计数据\n const stats = useMemo(() => {\n const members = Object.values(treeData.members)\n const totalMembers = members.length\n \n // 计算最大代数(处理空数组的情况)\n const generations = members.map(m => m.generation || 0)\n const maxGeneration = generations.length > 0 ? Math.max(...generations) : 0\n \n // 计算最早出生年份\n const birthYears = members\n .map(m => m.birthDate ? new Date(m.birthDate).getFullYear() : null)\n .filter(y => y !== null) as number[]\n const earliestYear = birthYears.length > 0 ? Math.min(...birthYears) : new Date().getFullYear()\n const yearsSpan = birthYears.length > 0 ? new Date().getFullYear() - earliestYear : 0\n \n return {\n totalMembers,\n maxGeneration,\n yearsSpan,\n earliestYear\n }\n }, [treeData])\n \n // 获取最近的成员(按ID排序,取最新的5个)\n const recentMembers = useMemo(() => {\n return Object.values(treeData.members)\n .sort((a, b) => parseInt(b.id) - parseInt(a.id))\n .slice(0, 5)\n }, [treeData])\n \n // 获取本月纪念日(生日和忌日)\n const monthlyAnniversaries = useMemo(() => {\n const currentMonth = new Date().getMonth() + 1\n const members = Object.values(treeData.members)\n \n const anniversaries: Array<{\n member: any\n type: 'birth' | 'death'\n date: string\n day: number\n }> = []\n \n members.forEach(member => {\n // 检查生日\n if (member.birthDate) {\n const birthMonth = new Date(member.birthDate).getMonth() + 1\n const birthDay = new Date(member.birthDate).getDate()\n if (birthMonth === currentMonth) {\n anniversaries.push({\n member,\n type: 'birth',\n date: member.birthDate,\n day: birthDay\n })\n }\n }\n \n // 检查忌日\n if (member.deathDate) {\n const deathMonth = new Date(member.deathDate).getMonth() + 1\n const deathDay = new Date(member.deathDate).getDate()\n if (deathMonth === currentMonth) {\n anniversaries.push({\n member,\n type: 'death',\n date: member.deathDate,\n day: deathDay\n })\n }\n }\n })\n \n // 按日期排序\n return anniversaries.sort((a, b) => a.day - b.day).slice(0, 5)\n }, [treeData])\n return (\n
\n \n\n
\n
\n
\n
\n

\n {currentTree?.name || '家族族谱'}\n

\n {currentTree?.currentUserRole && (\n \n {currentTree.currentUserRole === 'OWNER' ? '所有者' : \n currentTree.currentUserRole === 'EDITOR' ? '编辑者' : '查看者'}\n \n )}\n
\n

\n {currentTree?.description || '记录家族历史,传承家族文化'}\n {stats.maxGeneration > 0 && ` · 第 ${stats.maxGeneration} 代传人`}\n

\n
\n
\n {session && currentTree?.ownerId === session.user?.id && (\n \n )}\n \n \n \n {(currentTree?.currentUserRole === \"OWNER\" || currentTree?.currentUserRole === \"EDITOR\") && (\n \n \n \n )}\n
\n
\n\n
\n } \n />\n } \n />\n } \n />\n
\n\n \n
\n \n 最近更新\n 近期纪念日\n 统计图表\n 迁徙记录\n \n \n \n \n
\n\n \n
\n \n \n 近期修谱动态\n 记录家族成员的最新变动与修订\n \n \n \n
\n {recentActivities.length > 0 ? (\n recentActivities.map((activity, i) => (\n
\n
\n
\n
\n
\n
\n
\n \n {activity.action === 'create' ? '创建' :\n activity.action === 'update' ? '更新' :\n activity.action === 'delete' ? '删除' : '导入'}\n \n {activity.entityName || '未知'}\n \n {format(new Date(activity.timestamp), 'MM-dd HH:mm')}\n \n
\n

\n {activity.action === 'create' && '新增了家族成员'}\n {activity.action === 'update' && '更新了成员信息'}\n {activity.action === 'delete' && '删除了成员'}\n {activity.action === 'import' && '导入了家族数据'}\n

\n
\n
\n ))\n ) : (\n
\n 暂无修谱记录\n
\n )}\n
\n
\n
\n
\n\n
\n \n \n \n \n 本月祭祖/纪念\n \n \n \n {monthlyAnniversaries.length > 0 ? (\n monthlyAnniversaries.map((anniversary, index) => {\n const yearsAgo = new Date().getFullYear() - new Date(anniversary.date).getFullYear()\n return (\n \n
\n
\n \n {new Date(anniversary.date).getMonth() + 1}月\n \n {anniversary.day}\n
\n
\n

\n {anniversary.member.fullName} {anniversary.type === 'birth' ? '诞辰' : '忌日'}\n

\n

\n 第 {anniversary.member.generation} 世 · 距今 {yearsAgo} 年\n {anniversary.type === 'death' && ' · 已故'}\n

\n
\n
\n \n )\n })\n ) : (\n
\n 本月暂无纪念日\n
\n )}\n
\n
\n
\n
\n
\n\n {/* 近期纪念日标签页 */}\n \n \n \n 近期纪念日\n 未来三个月内的生日和忌日\n \n \n
\n {(() => {\n const now = new Date()\n const threeMonthsLater = new Date(now.getFullYear(), now.getMonth() + 3, now.getDate())\n const members = Object.values(treeData.members)\n const upcomingEvents: Array<{\n member: any\n type: 'birth' | 'death'\n date: Date\n originalDate: string\n }> = []\n\n members.forEach(member => {\n // 生日\n if (member.birthDate) {\n const birthDate = new Date(member.birthDate)\n const thisYearBirth = new Date(now.getFullYear(), birthDate.getMonth(), birthDate.getDate())\n if (thisYearBirth >= now && thisYearBirth <= threeMonthsLater) {\n upcomingEvents.push({\n member,\n type: 'birth',\n date: thisYearBirth,\n originalDate: member.birthDate\n })\n }\n }\n\n // 忌日\n if (member.deathDate) {\n const deathDate = new Date(member.deathDate)\n const thisYearDeath = new Date(now.getFullYear(), deathDate.getMonth(), deathDate.getDate())\n if (thisYearDeath >= now && thisYearDeath <= threeMonthsLater) {\n upcomingEvents.push({\n member,\n type: 'death',\n date: thisYearDeath,\n originalDate: member.deathDate\n })\n }\n }\n })\n\n upcomingEvents.sort((a, b) => a.date.getTime() - b.date.getTime())\n\n return upcomingEvents.length > 0 ? (\n upcomingEvents.map((event, index) => {\n const yearsAgo = now.getFullYear() - new Date(event.originalDate).getFullYear()\n return (\n \n \n \n
\n
\n {event.date.getMonth() + 1}月\n {event.date.getDate()}\n
\n
\n

\n {event.member.fullName} {event.type === 'birth' ? '诞辰' : '忌日'}\n

\n

\n 第 {event.member.generation} 世 · {yearsAgo} 年\n {event.type === 'death' && ' · 已故'}\n

\n
\n
\n
\n
\n \n )\n })\n ) : (\n
\n 未来三个月暂无纪念日\n
\n )\n })()}\n
\n
\n
\n
\n\n {/* 统计图表标签页 */}\n \n \n \n\n {/* 迁徙记录标签页 */}\n \n \n \n 家族迁徙记录\n 记录家族成员的籍贯分布\n \n \n
\n {useMemo(() => {\n const members = Object.values(treeData.members)\n const locationGroups: Record = {}\n\n members.forEach(member => {\n if (member.ancestralHome) {\n if (!locationGroups[member.ancestralHome]) {\n locationGroups[member.ancestralHome] = []\n }\n locationGroups[member.ancestralHome].push(member)\n }\n })\n\n const sortedLocations = Object.entries(locationGroups)\n .sort((a, b) => b[1].length - a[1].length)\n\n return sortedLocations.length > 0 ? (\n sortedLocations.map(([location, locationMembers]) => (\n
\n
\n

{location}

\n \n {locationMembers.length} 人\n \n
\n
\n {locationMembers.map((member: any) => (\n \n
\n

{member.fullName}

\n

第 {member.generation} 世

\n
\n \n ))}\n
\n
\n ))\n ) : (\n
\n 暂无迁徙记录\n
\n )\n }, [treeData])}\n
\n
\n
\n
\n
\n
\n
\n )\n}\n\nfunction StatCard({\n title,\n value,\n subtitle,\n icon,\n}: { title: string; value: string; subtitle: string; icon: React.ReactNode }) {\n return (\n \n \n
\n

{title}

\n
{icon}
\n
\n
\n {value}\n

{subtitle}

\n
\n
\n
\n )\n}\n"],"names":[],"mappings":"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"}}] + {"offset": {"line": 2877, "column": 0}, "map": {"version":3,"sources":["file:///Users/freedak/Documents/go-new/chinese-family-tree/app/page.tsx"],"sourcesContent":["\"use client\"\n\nimport type React from \"react\"\nimport Link from \"next/link\"\nimport { Button } from \"@/components/ui/button\"\nimport { Card, CardContent, CardDescription, CardHeader, CardTitle } from \"@/components/ui/card\"\nimport { SiteHeader } from \"@/components/site-header\"\nimport { ScrollArea } from \"@/components/ui/scroll-area\"\nimport { Tabs, TabsContent, TabsList, TabsTrigger } from \"@/components/ui/tabs\"\nimport { UserPlus, Network, Map, Calendar, Users, ArrowRight, Clock, Search, BookOpen, BarChart3, Calculator } from \"lucide-react\"\nimport { useFamily } from \"@/context/family-context\"\nimport { useMemo, useState, useEffect, useRef } from \"react\"\nimport { StatisticsCharts } from \"@/components/dashboard/statistics-charts\"\nimport { format } from \"date-fns\"\nimport { useSession } from \"next-auth/react\"\nimport { useSearchParams } from \"next/navigation\"\nimport { CollaboratorDialog } from \"@/components/tree/collaborator-dialog\"\n\ninterface ActivityLog {\n id: string\n action: string\n entityType: string\n entityId?: string | null\n entityName?: string | null\n timestamp: string\n user?: {\n name?: string | null\n email?: string | null\n }\n}\n\nexport default function DashboardPage() {\n const { treeData, isLoading, currentTree } = useFamily()\n const { data: session } = useSession()\n const [recentActivities, setRecentActivities] = useState([])\n \n // 加载最近的操作日志\n useEffect(() => {\n if (currentTree?.id && session?.user?.id) {\n fetch(`/api/trees/${currentTree.id}/activity-logs?limit=10`)\n .then(res => {\n if (!res.ok) {\n throw new Error('获取活动日志失败')\n }\n return res.json()\n })\n .then(data => {\n if (data.logs) {\n setRecentActivities(data.logs)\n }\n })\n .catch(err => {\n console.error('获取活动日志失败:', err)\n setRecentActivities([])\n })\n } else {\n setRecentActivities([])\n }\n }, [currentTree?.id, session?.user?.id])\n \n // 计算统计数据\n const stats = useMemo(() => {\n const members = Object.values(treeData.members)\n const totalMembers = members.length\n \n // 计算最大代数(处理空数组的情况)\n const generations = members.map(m => m.generation || 0)\n const maxGeneration = generations.length > 0 ? Math.max(...generations) : 0\n \n // 计算最早出生年份\n const birthYears = members\n .map(m => m.birthDate ? new Date(m.birthDate).getFullYear() : null)\n .filter(y => y !== null) as number[]\n const earliestYear = birthYears.length > 0 ? Math.min(...birthYears) : new Date().getFullYear()\n const yearsSpan = birthYears.length > 0 ? new Date().getFullYear() - earliestYear : 0\n \n return {\n totalMembers,\n maxGeneration,\n yearsSpan,\n earliestYear\n }\n }, [treeData])\n \n // 获取最近的成员(按ID排序,取最新的5个)\n const recentMembers = useMemo(() => {\n return Object.values(treeData.members)\n .sort((a, b) => parseInt(b.id) - parseInt(a.id))\n .slice(0, 5)\n }, [treeData])\n \n // 获取本月纪念日(生日和忌日)\n const monthlyAnniversaries = useMemo(() => {\n const currentMonth = new Date().getMonth() + 1\n const members = Object.values(treeData.members)\n \n const anniversaries: Array<{\n member: any\n type: 'birth' | 'death'\n date: string\n day: number\n }> = []\n \n members.forEach(member => {\n // 检查生日\n if (member.birthDate) {\n const birthMonth = new Date(member.birthDate).getMonth() + 1\n const birthDay = new Date(member.birthDate).getDate()\n if (birthMonth === currentMonth) {\n anniversaries.push({\n member,\n type: 'birth',\n date: member.birthDate,\n day: birthDay\n })\n }\n }\n \n // 检查忌日\n if (member.deathDate) {\n const deathMonth = new Date(member.deathDate).getMonth() + 1\n const deathDay = new Date(member.deathDate).getDate()\n if (deathMonth === currentMonth) {\n anniversaries.push({\n member,\n type: 'death',\n date: member.deathDate,\n day: deathDay\n })\n }\n }\n })\n \n // 按日期排序\n return anniversaries.sort((a, b) => a.day - b.day).slice(0, 5)\n }, [treeData])\n return (\n
\n \n\n
\n
\n
\n
\n

\n {currentTree?.name || '家族族谱'}\n

\n {currentTree?.currentUserRole && (\n \n {currentTree.currentUserRole === 'OWNER' ? '所有者' : \n currentTree.currentUserRole === 'EDITOR' ? '编辑者' : '查看者'}\n \n )}\n
\n

\n {currentTree?.description || '记录家族历史,传承家族文化'}\n {stats.maxGeneration > 0 && ` · 第 ${stats.maxGeneration} 代传人`}\n

\n
\n
\n {session && currentTree?.ownerId === session.user?.id && (\n \n )}\n \n \n \n {(currentTree?.currentUserRole === \"OWNER\" || currentTree?.currentUserRole === \"EDITOR\") && (\n \n \n \n )}\n
\n
\n\n
\n } \n />\n } \n />\n } \n />\n
\n\n \n
\n \n 最近更新\n 近期纪念日\n 统计图表\n 迁徙记录\n \n \n \n \n
\n\n \n
\n \n \n 近期修谱动态\n 记录家族成员的最新变动与修订\n \n \n \n
\n {recentActivities.length > 0 ? (\n recentActivities.map((activity, i) => (\n
\n
\n
\n
\n
\n
\n
\n \n {activity.action === 'create' ? '创建' :\n activity.action === 'update' ? '更新' :\n activity.action === 'delete' ? '删除' : '导入'}\n \n {activity.entityName || '未知'}\n \n {format(new Date(activity.timestamp), 'MM-dd HH:mm')}\n \n
\n

\n {activity.action === 'create' && '新增了家族成员'}\n {activity.action === 'update' && '更新了成员信息'}\n {activity.action === 'delete' && '删除了成员'}\n {activity.action === 'import' && '导入了家族数据'}\n

\n
\n
\n ))\n ) : (\n
\n 暂无修谱记录\n
\n )}\n
\n
\n
\n
\n\n
\n \n \n \n \n 本月祭祖/纪念\n \n \n \n {monthlyAnniversaries.length > 0 ? (\n monthlyAnniversaries.map((anniversary, index) => {\n const yearsAgo = new Date().getFullYear() - new Date(anniversary.date).getFullYear()\n return (\n \n
\n
\n \n {new Date(anniversary.date).getMonth() + 1}月\n \n {anniversary.day}\n
\n
\n

\n {anniversary.member.fullName} {anniversary.type === 'birth' ? '诞辰' : '忌日'}\n

\n

\n 第 {anniversary.member.generation} 世 · 距今 {yearsAgo} 年\n {anniversary.type === 'death' && ' · 已故'}\n

\n
\n
\n \n )\n })\n ) : (\n
\n 本月暂无纪念日\n
\n )}\n
\n
\n
\n
\n
\n\n {/* 近期纪念日标签页 */}\n \n \n \n 近期纪念日\n 未来三个月内的生日和忌日\n \n \n
\n {(() => {\n const now = new Date()\n const threeMonthsLater = new Date(now.getFullYear(), now.getMonth() + 3, now.getDate())\n const members = Object.values(treeData.members)\n const upcomingEvents: Array<{\n member: any\n type: 'birth' | 'death'\n date: Date\n originalDate: string\n }> = []\n\n members.forEach(member => {\n // 生日\n if (member.birthDate) {\n const birthDate = new Date(member.birthDate)\n const thisYearBirth = new Date(now.getFullYear(), birthDate.getMonth(), birthDate.getDate())\n if (thisYearBirth >= now && thisYearBirth <= threeMonthsLater) {\n upcomingEvents.push({\n member,\n type: 'birth',\n date: thisYearBirth,\n originalDate: member.birthDate\n })\n }\n }\n\n // 忌日\n if (member.deathDate) {\n const deathDate = new Date(member.deathDate)\n const thisYearDeath = new Date(now.getFullYear(), deathDate.getMonth(), deathDate.getDate())\n if (thisYearDeath >= now && thisYearDeath <= threeMonthsLater) {\n upcomingEvents.push({\n member,\n type: 'death',\n date: thisYearDeath,\n originalDate: member.deathDate\n })\n }\n }\n })\n\n upcomingEvents.sort((a, b) => a.date.getTime() - b.date.getTime())\n\n return upcomingEvents.length > 0 ? (\n upcomingEvents.map((event, index) => {\n const yearsAgo = now.getFullYear() - new Date(event.originalDate).getFullYear()\n return (\n \n \n \n
\n
\n {event.date.getMonth() + 1}月\n {event.date.getDate()}\n
\n
\n

\n {event.member.fullName} {event.type === 'birth' ? '诞辰' : '忌日'}\n

\n

\n 第 {event.member.generation} 世 · {yearsAgo} 年\n {event.type === 'death' && ' · 已故'}\n

\n
\n
\n
\n
\n \n )\n })\n ) : (\n
\n 未来三个月暂无纪念日\n
\n )\n })()}\n
\n
\n
\n
\n\n {/* 统计图表标签页 */}\n \n \n \n\n {/* 迁徙记录标签页 */}\n \n \n \n 家族迁徙记录\n 记录家族成员的籍贯分布\n \n \n
\n {useMemo(() => {\n const members = Object.values(treeData.members)\n const locationGroups: Record = {}\n\n members.forEach(member => {\n if (member.ancestralHome) {\n if (!locationGroups[member.ancestralHome]) {\n locationGroups[member.ancestralHome] = []\n }\n locationGroups[member.ancestralHome].push(member)\n }\n })\n\n const sortedLocations = Object.entries(locationGroups)\n .sort((a, b) => b[1].length - a[1].length)\n\n return sortedLocations.length > 0 ? (\n sortedLocations.map(([location, locationMembers]) => (\n
\n
\n

{location}

\n \n {locationMembers.length} 人\n \n
\n
\n {locationMembers.map((member: any) => (\n \n
\n

{member.fullName}

\n

第 {member.generation} 世

\n
\n \n ))}\n
\n
\n ))\n ) : (\n
\n 暂无迁徙记录\n
\n )\n }, [treeData])}\n
\n
\n
\n
\n
\n
\n
\n )\n}\n\nfunction StatCard({\n title,\n value,\n subtitle,\n icon,\n}: { title: string; value: string; subtitle: string; icon: React.ReactNode }) {\n return (\n \n \n
\n

{title}

\n
{icon}
\n
\n
\n {value}\n

{subtitle}

\n
\n
\n
\n )\n}\n"],"names":[],"mappings":"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"}}] } \ No newline at end of file diff --git a/.next/dev/server/chunks/ssr/[root-of-the-server]__10b90bc2._.js b/.next/dev/server/chunks/ssr/[root-of-the-server]__10b90bc2._.js index 83e59120..8d8d3877 100644 --- a/.next/dev/server/chunks/ssr/[root-of-the-server]__10b90bc2._.js +++ b/.next/dev/server/chunks/ssr/[root-of-the-server]__10b90bc2._.js @@ -344,6 +344,7 @@ var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$ch var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$lucide$2d$react$40$0$2e$454$2e$0_react$40$19$2e$2$2e$0$2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$chevron$2d$down$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__$3c$export__default__as__ChevronDown$3e$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/lucide-react@0.454.0_react@19.2.0/node_modules/lucide-react/dist/esm/icons/chevron-down.js [app-ssr] (ecmascript) "); var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$lucide$2d$react$40$0$2e$454$2e$0_react$40$19$2e$2$2e$0$2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$plus$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__$3c$export__default__as__Plus$3e$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/lucide-react@0.454.0_react@19.2.0/node_modules/lucide-react/dist/esm/icons/plus.js [app-ssr] (ecmascript) "); var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$lucide$2d$react$40$0$2e$454$2e$0_react$40$19$2e$2$2e$0$2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$trash$2d$2$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__$3c$export__default__as__Trash2$3e$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/lucide-react@0.454.0_react@19.2.0/node_modules/lucide-react/dist/esm/icons/trash-2.js [app-ssr] (ecmascript) "); +var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$lucide$2d$react$40$0$2e$454$2e$0_react$40$19$2e$2$2e$0$2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$calculator$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__$3c$export__default__as__Calculator$3e$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/lucide-react@0.454.0_react@19.2.0/node_modules/lucide-react/dist/esm/icons/calculator.js [app-ssr] (ecmascript) "); var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$button$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/components/ui/button.tsx [app-ssr] (ecmascript)"); var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$input$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/components/ui/input.tsx [app-ssr] (ecmascript)"); var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$avatar$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/components/ui/avatar.tsx [app-ssr] (ecmascript)"); @@ -948,13 +949,13 @@ function SiteHeader() { columnNumber: 11 }, this), /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$client$2f$app$2d$dir$2f$link$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["default"], { - href: "/settings", + href: "/relationship", children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$button$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["Button"], { variant: "ghost", size: "icon", className: "text-muted-foreground", children: [ - /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$lucide$2d$react$40$0$2e$454$2e$0_react$40$19$2e$2$2e$0$2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$settings$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__$3c$export__default__as__Settings$3e$__["Settings"], { + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$lucide$2d$react$40$0$2e$454$2e$0_react$40$19$2e$2$2e$0$2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$calculator$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__$3c$export__default__as__Calculator$3e$__["Calculator"], { className: "h-5 w-5" }, void 0, false, { fileName: "[project]/Documents/go-new/chinese-family-tree/components/site-header.tsx", @@ -963,7 +964,7 @@ function SiteHeader() { }, this), /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("span", { className: "sr-only", - children: "Settings" + children: "Relationship Calculator" }, void 0, false, { fileName: "[project]/Documents/go-new/chinese-family-tree/components/site-header.tsx", lineNumber: 366, @@ -980,18 +981,51 @@ function SiteHeader() { lineNumber: 363, columnNumber: 11 }, this), + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$client$2f$app$2d$dir$2f$link$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["default"], { + href: "/settings", + children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$button$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["Button"], { + variant: "ghost", + size: "icon", + className: "text-muted-foreground", + children: [ + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$lucide$2d$react$40$0$2e$454$2e$0_react$40$19$2e$2$2e$0$2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$settings$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__$3c$export__default__as__Settings$3e$__["Settings"], { + className: "h-5 w-5" + }, void 0, false, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/site-header.tsx", + lineNumber: 372, + columnNumber: 15 + }, this), + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("span", { + className: "sr-only", + children: "Settings" + }, void 0, false, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/site-header.tsx", + lineNumber: 373, + columnNumber: 15 + }, this) + ] + }, void 0, true, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/site-header.tsx", + lineNumber: 371, + columnNumber: 13 + }, this) + }, void 0, false, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/site-header.tsx", + lineNumber: 370, + columnNumber: 11 + }, this), status === "loading" ? /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$avatar$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["Avatar"], { className: "h-8 w-8 border border-border", children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$avatar$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["AvatarFallback"], { children: "..." }, void 0, false, { fileName: "[project]/Documents/go-new/chinese-family-tree/components/site-header.tsx", - lineNumber: 372, + lineNumber: 379, columnNumber: 15 }, this) }, void 0, false, { fileName: "[project]/Documents/go-new/chinese-family-tree/components/site-header.tsx", - lineNumber: 371, + lineNumber: 378, columnNumber: 13 }, this) : session ? /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$dropdown$2d$menu$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["DropdownMenu"], { children: [ @@ -1008,30 +1042,30 @@ function SiteHeader() { alt: session.user?.name || "User" }, void 0, false, { fileName: "[project]/Documents/go-new/chinese-family-tree/components/site-header.tsx", - lineNumber: 379, + lineNumber: 386, columnNumber: 21 }, this), /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$avatar$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["AvatarFallback"], { children: getUserInitial() }, void 0, false, { fileName: "[project]/Documents/go-new/chinese-family-tree/components/site-header.tsx", - lineNumber: 380, + lineNumber: 387, columnNumber: 21 }, this) ] }, void 0, true, { fileName: "[project]/Documents/go-new/chinese-family-tree/components/site-header.tsx", - lineNumber: 378, + lineNumber: 385, columnNumber: 19 }, this) }, void 0, false, { fileName: "[project]/Documents/go-new/chinese-family-tree/components/site-header.tsx", - lineNumber: 377, + lineNumber: 384, columnNumber: 17 }, this) }, void 0, false, { fileName: "[project]/Documents/go-new/chinese-family-tree/components/site-header.tsx", - lineNumber: 376, + lineNumber: 383, columnNumber: 15 }, this), /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$dropdown$2d$menu$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["DropdownMenuContent"], { @@ -1049,7 +1083,7 @@ function SiteHeader() { children: session.user?.name || "用户" }, void 0, false, { fileName: "[project]/Documents/go-new/chinese-family-tree/components/site-header.tsx", - lineNumber: 387, + lineNumber: 394, columnNumber: 21 }, this), /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("p", { @@ -1057,23 +1091,23 @@ function SiteHeader() { children: session.user?.email }, void 0, false, { fileName: "[project]/Documents/go-new/chinese-family-tree/components/site-header.tsx", - lineNumber: 388, + lineNumber: 395, columnNumber: 21 }, this) ] }, void 0, true, { fileName: "[project]/Documents/go-new/chinese-family-tree/components/site-header.tsx", - lineNumber: 386, + lineNumber: 393, columnNumber: 19 }, this) }, void 0, false, { fileName: "[project]/Documents/go-new/chinese-family-tree/components/site-header.tsx", - lineNumber: 385, + lineNumber: 392, columnNumber: 17 }, this), /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$dropdown$2d$menu$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["DropdownMenuSeparator"], {}, void 0, false, { fileName: "[project]/Documents/go-new/chinese-family-tree/components/site-header.tsx", - lineNumber: 393, + lineNumber: 400, columnNumber: 17 }, this), /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$dropdown$2d$menu$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["DropdownMenuItem"], { @@ -1086,30 +1120,30 @@ function SiteHeader() { className: "mr-2 h-4 w-4" }, void 0, false, { fileName: "[project]/Documents/go-new/chinese-family-tree/components/site-header.tsx", - lineNumber: 396, + lineNumber: 403, columnNumber: 21 }, this), /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("span", { children: "系统设置" }, void 0, false, { fileName: "[project]/Documents/go-new/chinese-family-tree/components/site-header.tsx", - lineNumber: 397, + lineNumber: 404, columnNumber: 21 }, this) ] }, void 0, true, { fileName: "[project]/Documents/go-new/chinese-family-tree/components/site-header.tsx", - lineNumber: 395, + lineNumber: 402, columnNumber: 19 }, this) }, void 0, false, { fileName: "[project]/Documents/go-new/chinese-family-tree/components/site-header.tsx", - lineNumber: 394, + lineNumber: 401, columnNumber: 17 }, this), /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$dropdown$2d$menu$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["DropdownMenuSeparator"], {}, void 0, false, { fileName: "[project]/Documents/go-new/chinese-family-tree/components/site-header.tsx", - lineNumber: 400, + lineNumber: 407, columnNumber: 17 }, this), /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$dropdown$2d$menu$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["DropdownMenuItem"], { @@ -1120,32 +1154,32 @@ function SiteHeader() { className: "mr-2 h-4 w-4" }, void 0, false, { fileName: "[project]/Documents/go-new/chinese-family-tree/components/site-header.tsx", - lineNumber: 402, + lineNumber: 409, columnNumber: 19 }, this), /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("span", { children: "退出登录" }, void 0, false, { fileName: "[project]/Documents/go-new/chinese-family-tree/components/site-header.tsx", - lineNumber: 403, + lineNumber: 410, columnNumber: 19 }, this) ] }, void 0, true, { fileName: "[project]/Documents/go-new/chinese-family-tree/components/site-header.tsx", - lineNumber: 401, + lineNumber: 408, columnNumber: 17 }, this) ] }, void 0, true, { fileName: "[project]/Documents/go-new/chinese-family-tree/components/site-header.tsx", - lineNumber: 384, + lineNumber: 391, columnNumber: 15 }, this) ] }, void 0, true, { fileName: "[project]/Documents/go-new/chinese-family-tree/components/site-header.tsx", - lineNumber: 375, + lineNumber: 382, columnNumber: 13 }, this) : /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$client$2f$app$2d$dir$2f$link$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["default"], { href: "/auth/signin", @@ -1155,12 +1189,12 @@ function SiteHeader() { children: "登录" }, void 0, false, { fileName: "[project]/Documents/go-new/chinese-family-tree/components/site-header.tsx", - lineNumber: 409, + lineNumber: 416, columnNumber: 15 }, this) }, void 0, false, { fileName: "[project]/Documents/go-new/chinese-family-tree/components/site-header.tsx", - lineNumber: 408, + lineNumber: 415, columnNumber: 13 }, this) ] @@ -2819,20 +2853,32 @@ var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$ch function MemberForm({ initialData, existingMembers = [], onSubmit, onCancel }) { // 计算最大世系 const maxGeneration = existingMembers.length > 0 ? Math.max(...existingMembers.map((m)=>m.generation || 1)) : 1; + // 获取始祖的姓氏(第1世成员) + const ancestorSurname = existingMembers.find((m)=>m.generation === 1)?.surname || ""; // Initialize state with default values or initialData - const [formData, setFormData] = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["useState"])({ - id: initialData?.id || crypto.randomUUID(), - surname: initialData?.surname || "李", - givenName: initialData?.givenName || "", - fullName: initialData?.fullName || "", - gender: (initialData?.gender || "MALE").toUpperCase(), - generation: initialData?.generation || maxGeneration, - spouseIds: initialData?.spouseIds || [], - childrenIds: initialData?.childrenIds || [], - tags: initialData?.tags || [], - fatherId: initialData?.fatherId, - motherId: initialData?.motherId, - ...initialData + const [formData, setFormData] = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["useState"])(()=>{ + const defaults = { + id: crypto.randomUUID(), + surname: ancestorSurname, + givenName: "", + fullName: "", + gender: "MALE", + generation: maxGeneration, + spouseIds: [], + childrenIds: [], + tags: [] + }; + if (!initialData) return defaults; + return { + ...defaults, + ...initialData, + gender: (initialData.gender || "MALE").toUpperCase(), + spouseIds: initialData.spouseIds || [], + childrenIds: initialData.childrenIds || [], + tags: initialData.tags || [], + fatherId: initialData.fatherId || undefined, + motherId: initialData.motherId || undefined + }; }); const [errors, setErrors] = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["useState"])([]); const handleChange = (field, value)=>{ @@ -2868,21 +2914,46 @@ function MemberForm({ initialData, existingMembers = [], onSubmit, onCancel }) { // Clear errors when user makes changes if (errors.length > 0) setErrors([]); }; - const handleSpouseChange = (spouseId)=>{ - // If selecting "none" (empty string), clear spouses - if (!spouseId) { - setFormData((prev)=>({ - ...prev, - spouseIds: [] - })); - return; - } - // Otherwise set as single spouse (logic can be expanded for multiple later) - setFormData((prev)=>({ + const handleSpouseAdd = (spouseId)=>{ + if (!spouseId || spouseId === "none") return; + setFormData((prev)=>{ + const currentSpouses = prev.spouseIds || []; + // 避免重复添加 + if (currentSpouses.includes(spouseId)) return prev; + return { ...prev, spouseIds: [ + ...currentSpouses, spouseId ] + }; + }); + }; + const handleSpouseRemove = (spouseId)=>{ + setFormData((prev)=>({ + ...prev, + spouseIds: (prev.spouseIds || []).filter((id)=>id !== spouseId) + })); + }; + const handleChildAdd = (childId)=>{ + if (!childId || childId === "none") return; + setFormData((prev)=>{ + const currentChildren = prev.childrenIds || []; + // 避免重复添加 + if (currentChildren.includes(childId)) return prev; + return { + ...prev, + childrenIds: [ + ...currentChildren, + childId + ] + }; + }); + }; + const handleChildRemove = (childId)=>{ + setFormData((prev)=>({ + ...prev, + childrenIds: (prev.childrenIds || []).filter((id)=>id !== childId) })); }; const validate = ()=>{ @@ -2980,7 +3051,7 @@ function MemberForm({ initialData, existingMembers = [], onSubmit, onCancel }) { children: "请检查以下问题:" }, void 0, false, { fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", - lineNumber: 196, + lineNumber: 245, columnNumber: 11 }, this), /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("ul", { @@ -2989,18 +3060,18 @@ function MemberForm({ initialData, existingMembers = [], onSubmit, onCancel }) { children: err }, index, false, { fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", - lineNumber: 199, + lineNumber: 248, columnNumber: 15 }, this)) }, void 0, false, { fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", - lineNumber: 197, + lineNumber: 246, columnNumber: 11 }, this) ] }, void 0, true, { fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", - lineNumber: 195, + lineNumber: 244, columnNumber: 9 }, this), /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { @@ -3019,19 +3090,19 @@ function MemberForm({ initialData, existingMembers = [], onSubmit, onCancel }) { className: "h-5 w-5" }, void 0, false, { fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", - lineNumber: 212, + lineNumber: 261, columnNumber: 17 }, this), "基本信息 (Identity)" ] }, void 0, true, { fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", - lineNumber: 211, + lineNumber: 260, columnNumber: 15 }, this) }, void 0, false, { fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", - lineNumber: 210, + lineNumber: 259, columnNumber: 13 }, this), /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$card$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["CardContent"], { @@ -3044,12 +3115,12 @@ function MemberForm({ initialData, existingMembers = [], onSubmit, onCancel }) { onChange: (imageId)=>handleChange("avatarImageId", imageId) }, void 0, false, { fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", - lineNumber: 218, + lineNumber: 267, columnNumber: 17 }, this) }, void 0, false, { fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", - lineNumber: 217, + lineNumber: 266, columnNumber: 15 }, this), /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { @@ -3063,7 +3134,7 @@ function MemberForm({ initialData, existingMembers = [], onSubmit, onCancel }) { children: "姓 (Surname)" }, void 0, false, { fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", - lineNumber: 226, + lineNumber: 275, columnNumber: 19 }, this), /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$input$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["Input"], { @@ -3072,13 +3143,13 @@ function MemberForm({ initialData, existingMembers = [], onSubmit, onCancel }) { onChange: (e)=>handleChange("surname", e.target.value) }, void 0, false, { fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", - lineNumber: 227, + lineNumber: 276, columnNumber: 19 }, this) ] }, void 0, true, { fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", - lineNumber: 225, + lineNumber: 274, columnNumber: 17 }, this), /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { @@ -3089,7 +3160,7 @@ function MemberForm({ initialData, existingMembers = [], onSubmit, onCancel }) { children: "名 (Given Name)" }, void 0, false, { fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", - lineNumber: 234, + lineNumber: 283, columnNumber: 19 }, this), /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$input$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["Input"], { @@ -3098,19 +3169,19 @@ function MemberForm({ initialData, existingMembers = [], onSubmit, onCancel }) { onChange: (e)=>handleChange("givenName", e.target.value) }, void 0, false, { fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", - lineNumber: 235, + lineNumber: 284, columnNumber: 19 }, this) ] }, void 0, true, { fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", - lineNumber: 233, + lineNumber: 282, columnNumber: 17 }, this) ] }, void 0, true, { fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", - lineNumber: 224, + lineNumber: 273, columnNumber: 15 }, this), /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { @@ -3124,7 +3195,7 @@ function MemberForm({ initialData, existingMembers = [], onSubmit, onCancel }) { children: "性别 (Gender)" }, void 0, false, { fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", - lineNumber: 245, + lineNumber: 294, columnNumber: 19 }, this), /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$select$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["Select"], { @@ -3134,12 +3205,12 @@ function MemberForm({ initialData, existingMembers = [], onSubmit, onCancel }) { /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$select$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["SelectTrigger"], { children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$select$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["SelectValue"], {}, void 0, false, { fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", - lineNumber: 248, + lineNumber: 297, columnNumber: 23 }, this) }, void 0, false, { fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", - lineNumber: 247, + lineNumber: 296, columnNumber: 21 }, this), /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$select$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["SelectContent"], { @@ -3149,7 +3220,7 @@ function MemberForm({ initialData, existingMembers = [], onSubmit, onCancel }) { children: "男 (Male)" }, void 0, false, { fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", - lineNumber: 251, + lineNumber: 300, columnNumber: 23 }, this), /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$select$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["SelectItem"], { @@ -3157,25 +3228,25 @@ function MemberForm({ initialData, existingMembers = [], onSubmit, onCancel }) { children: "女 (Female)" }, void 0, false, { fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", - lineNumber: 252, + lineNumber: 301, columnNumber: 23 }, this) ] }, void 0, true, { fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", - lineNumber: 250, + lineNumber: 299, columnNumber: 21 }, this) ] }, void 0, true, { fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", - lineNumber: 246, + lineNumber: 295, columnNumber: 19 }, this) ] }, void 0, true, { fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", - lineNumber: 244, + lineNumber: 293, columnNumber: 17 }, this), /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { @@ -3186,7 +3257,7 @@ function MemberForm({ initialData, existingMembers = [], onSubmit, onCancel }) { children: "世系 (Generation)" }, void 0, false, { fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", - lineNumber: 257, + lineNumber: 306, columnNumber: 19 }, this), /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$input$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["Input"], { @@ -3196,31 +3267,31 @@ function MemberForm({ initialData, existingMembers = [], onSubmit, onCancel }) { onChange: (e)=>handleChange("generation", Number.parseInt(e.target.value)) }, void 0, false, { fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", - lineNumber: 258, + lineNumber: 307, columnNumber: 19 }, this) ] }, void 0, true, { fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", - lineNumber: 256, + lineNumber: 305, columnNumber: 17 }, this) ] }, void 0, true, { fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", - lineNumber: 243, + lineNumber: 292, columnNumber: 15 }, this) ] }, void 0, true, { fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", - lineNumber: 216, + lineNumber: 265, columnNumber: 13 }, this) ] }, void 0, true, { fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", - lineNumber: 209, + lineNumber: 258, columnNumber: 11 }, this), /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$card$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["Card"], { @@ -3233,19 +3304,19 @@ function MemberForm({ initialData, existingMembers = [], onSubmit, onCancel }) { className: "h-5 w-5" }, void 0, false, { fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", - lineNumber: 273, + lineNumber: 322, columnNumber: 17 }, this), "家庭关系 (Relationships)" ] }, void 0, true, { fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", - lineNumber: 272, + lineNumber: 321, columnNumber: 15 }, this) }, void 0, false, { fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", - lineNumber: 271, + lineNumber: 320, columnNumber: 13 }, this), /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$card$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["CardContent"], { @@ -3259,7 +3330,7 @@ function MemberForm({ initialData, existingMembers = [], onSubmit, onCancel }) { children: "父亲 (Father)" }, void 0, false, { fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", - lineNumber: 279, + lineNumber: 328, columnNumber: 17 }, this), /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { @@ -3275,12 +3346,12 @@ function MemberForm({ initialData, existingMembers = [], onSubmit, onCancel }) { placeholder: "选择父亲" }, void 0, false, { fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", - lineNumber: 286, + lineNumber: 335, columnNumber: 23 }, this) }, void 0, false, { fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", - lineNumber: 285, + lineNumber: 334, columnNumber: 21 }, this), /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$select$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["SelectContent"], { @@ -3290,7 +3361,7 @@ function MemberForm({ initialData, existingMembers = [], onSubmit, onCancel }) { children: "无 (None)" }, void 0, false, { fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", - lineNumber: 289, + lineNumber: 338, columnNumber: 23 }, this), potentialRelatives.filter((m)=>m.gender === "MALE" && m.generation === (formData.generation || 1) - 1).map((m)=>/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$select$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["SelectItem"], { @@ -3303,19 +3374,19 @@ function MemberForm({ initialData, existingMembers = [], onSubmit, onCancel }) { ] }, m.id, true, { fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", - lineNumber: 293, + lineNumber: 342, columnNumber: 27 }, this)) ] }, void 0, true, { fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", - lineNumber: 288, + lineNumber: 337, columnNumber: 21 }, this) ] }, void 0, true, { fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", - lineNumber: 281, + lineNumber: 330, columnNumber: 19 }, this), !formData.fatherId && /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$input$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["Input"], { @@ -3325,19 +3396,19 @@ function MemberForm({ initialData, existingMembers = [], onSubmit, onCancel }) { className: "flex-1" }, void 0, false, { fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", - lineNumber: 300, + lineNumber: 349, columnNumber: 21 }, this) ] }, void 0, true, { fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", - lineNumber: 280, + lineNumber: 329, columnNumber: 17 }, this) ] }, void 0, true, { fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", - lineNumber: 278, + lineNumber: 327, columnNumber: 15 }, this), /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { @@ -3348,7 +3419,7 @@ function MemberForm({ initialData, existingMembers = [], onSubmit, onCancel }) { children: "母亲 (Mother)" }, void 0, false, { fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", - lineNumber: 311, + lineNumber: 360, columnNumber: 17 }, this), /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { @@ -3364,12 +3435,12 @@ function MemberForm({ initialData, existingMembers = [], onSubmit, onCancel }) { placeholder: "选择母亲" }, void 0, false, { fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", - lineNumber: 318, + lineNumber: 367, columnNumber: 23 }, this) }, void 0, false, { fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", - lineNumber: 317, + lineNumber: 366, columnNumber: 21 }, this), /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$select$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["SelectContent"], { @@ -3379,7 +3450,7 @@ function MemberForm({ initialData, existingMembers = [], onSubmit, onCancel }) { children: "无 (None)" }, void 0, false, { fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", - lineNumber: 321, + lineNumber: 370, columnNumber: 23 }, this), potentialRelatives.filter((m)=>m.gender === "FEMALE" && m.generation === (formData.generation || 1) - 1).map((m)=>/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$select$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["SelectItem"], { @@ -3392,19 +3463,19 @@ function MemberForm({ initialData, existingMembers = [], onSubmit, onCancel }) { ] }, m.id, true, { fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", - lineNumber: 325, + lineNumber: 374, columnNumber: 27 }, this)) ] }, void 0, true, { fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", - lineNumber: 320, + lineNumber: 369, columnNumber: 21 }, this) ] }, void 0, true, { fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", - lineNumber: 313, + lineNumber: 362, columnNumber: 19 }, this), !formData.motherId && /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$input$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["Input"], { @@ -3414,19 +3485,19 @@ function MemberForm({ initialData, existingMembers = [], onSubmit, onCancel }) { className: "flex-1" }, void 0, false, { fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", - lineNumber: 332, + lineNumber: 381, columnNumber: 21 }, this) ] }, void 0, true, { fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", - lineNumber: 312, + lineNumber: 361, columnNumber: 17 }, this) ] }, void 0, true, { fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", - lineNumber: 310, + lineNumber: 359, columnNumber: 15 }, this), /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { @@ -3437,39 +3508,49 @@ function MemberForm({ initialData, existingMembers = [], onSubmit, onCancel }) { children: "配偶 (Spouse)" }, void 0, false, { fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", - lineNumber: 343, + lineNumber: 392, columnNumber: 17 }, this), /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$select$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["Select"], { - value: formData.spouseIds?.[0] || "none", - onValueChange: handleSpouseChange, + value: "none", + onValueChange: handleSpouseAdd, children: [ /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$select$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["SelectTrigger"], { children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$select$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["SelectValue"], { - placeholder: "选择配偶 Select Spouse" + placeholder: "添加配偶..." }, void 0, false, { fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", - lineNumber: 346, + lineNumber: 395, columnNumber: 21 }, this) }, void 0, false, { fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", - lineNumber: 345, + lineNumber: 394, columnNumber: 19 }, this), /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$select$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["SelectContent"], { children: [ /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$select$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["SelectItem"], { value: "none", - children: "无 (None)" + children: "选择配偶" }, void 0, false, { fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", - lineNumber: 349, + lineNumber: 398, columnNumber: 21 }, this), potentialRelatives.filter((m)=>{ // 必须是同世系 if (m.generation !== formData.generation) return false; + // 通常配偶应该是异性 + if (m.gender === formData.gender) return false; + // 排除已选的配偶 + if (formData.spouseIds?.includes(m.id)) return false; + // 一夫多妻:女性可以选择已有配偶的男性,男性只能选择未婚女性 + if (formData.gender === 'MALE') { + // 男性:排除已有配偶的女性 + if (m.spouseIds && m.spouseIds.length > 0) return false; + } + // 女性:可以选择已有配偶的男性(一夫多妻) // 排除直系亲属 // 1. 排除父母 if (m.id === formData.fatherId || m.id === formData.motherId) return false; @@ -3489,43 +3570,225 @@ function MemberForm({ initialData, existingMembers = [], onSubmit, onCancel }) { ] }, m.id, true, { fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", - lineNumber: 369, + lineNumber: 431, columnNumber: 25 }, this)) ] }, void 0, true, { fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", - lineNumber: 348, + lineNumber: 397, columnNumber: 19 }, this) ] }, void 0, true, { fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", - lineNumber: 344, + lineNumber: 393, columnNumber: 17 + }, this), + formData.spouseIds && formData.spouseIds.length > 0 && /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { + className: "mt-2 space-y-2", + children: formData.spouseIds.map((spouseId, index)=>{ + const spouse = existingMembers.find((m)=>m.id === spouseId); + if (!spouse) return null; + return /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { + className: "flex items-center justify-between p-2 bg-muted rounded", + children: [ + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("span", { + className: "text-sm", + children: [ + index + 1, + ". ", + spouse.fullName, + " (第", + spouse.generation, + "世)" + ] + }, void 0, true, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", + lineNumber: 447, + columnNumber: 27 + }, this), + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$button$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["Button"], { + type: "button", + variant: "ghost", + size: "sm", + onClick: ()=>handleSpouseRemove(spouseId), + className: "h-6 w-6 p-0 hover:bg-destructive hover:text-destructive-foreground", + children: "×" + }, void 0, false, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", + lineNumber: 450, + columnNumber: 27 + }, this) + ] + }, spouseId, true, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", + lineNumber: 446, + columnNumber: 25 + }, this); + }) + }, void 0, false, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", + lineNumber: 440, + columnNumber: 19 }, this) ] }, void 0, true, { fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", - lineNumber: 342, + lineNumber: 391, + columnNumber: 15 + }, this), + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { + className: "space-y-2", + children: [ + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$label$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["Label"], { + htmlFor: "childId", + children: "子女 (Children)" + }, void 0, false, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", + lineNumber: 467, + columnNumber: 17 + }, this), + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$select$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["Select"], { + value: "none", + onValueChange: handleChildAdd, + children: [ + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$select$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["SelectTrigger"], { + children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$select$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["SelectValue"], { + placeholder: "添加子女..." + }, void 0, false, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", + lineNumber: 470, + columnNumber: 21 + }, this) + }, void 0, false, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", + lineNumber: 469, + columnNumber: 19 + }, this), + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$select$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["SelectContent"], { + children: [ + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$select$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["SelectItem"], { + value: "none", + children: "选择子女" + }, void 0, false, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", + lineNumber: 473, + columnNumber: 21 + }, this), + potentialRelatives.filter((m)=>{ + // 必须是下一世系 + if (m.generation !== (formData.generation || 1) + 1) return false; + // 排除已选的子女 + if (formData.childrenIds?.includes(m.id)) return false; + // 排除配偶 + if (formData.spouseIds?.includes(m.id)) return false; + // 排除配偶身份的成员(没有父母但有配偶的) + const isSpouse = !m.fatherId && !m.motherId && m.spouseIds && m.spouseIds.length > 0; + if (isSpouse) return false; + // 根据当前成员性别,排除已有对应父母的子女 + if (formData.gender === 'MALE') { + // 男性:排除已有父亲的子女 + if (m.fatherId) return false; + } else if (formData.gender === 'FEMALE') { + // 女性:排除已有母亲的子女 + if (m.motherId) return false; + } + return true; + }).map((m)=>/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$select$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["SelectItem"], { + value: m.id, + children: [ + m.fullName, + " (", + m.generation, + "世)" + ] + }, m.id, true, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", + lineNumber: 501, + columnNumber: 25 + }, this)) + ] + }, void 0, true, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", + lineNumber: 472, + columnNumber: 19 + }, this) + ] + }, void 0, true, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", + lineNumber: 468, + columnNumber: 17 + }, this), + formData.childrenIds && formData.childrenIds.length > 0 && /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { + className: "mt-2 space-y-2", + children: formData.childrenIds.map((childId, index)=>{ + const child = existingMembers.find((m)=>m.id === childId); + if (!child) return null; + return /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { + className: "flex items-center justify-between p-2 bg-muted rounded", + children: [ + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("span", { + className: "text-sm", + children: [ + index + 1, + ". ", + child.fullName, + " (第", + child.generation, + "世)" + ] + }, void 0, true, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", + lineNumber: 517, + columnNumber: 27 + }, this), + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$button$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["Button"], { + type: "button", + variant: "ghost", + size: "sm", + onClick: ()=>handleChildRemove(childId), + className: "h-6 w-6 p-0 hover:bg-destructive hover:text-destructive-foreground", + children: "×" + }, void 0, false, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", + lineNumber: 520, + columnNumber: 27 + }, this) + ] + }, childId, true, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", + lineNumber: 516, + columnNumber: 25 + }, this); + }) + }, void 0, false, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", + lineNumber: 510, + columnNumber: 19 + }, this) + ] + }, void 0, true, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", + lineNumber: 466, columnNumber: 15 }, this) ] }, void 0, true, { fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", - lineNumber: 277, + lineNumber: 326, columnNumber: 13 }, this) ] }, void 0, true, { fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", - lineNumber: 270, + lineNumber: 319, columnNumber: 11 }, this) ] }, void 0, true, { fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", - lineNumber: 207, + lineNumber: 256, columnNumber: 9 }, this), /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$card$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["Card"], { @@ -3538,19 +3801,19 @@ function MemberForm({ initialData, existingMembers = [], onSubmit, onCancel }) { className: "h-5 w-5" }, void 0, false, { fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", - lineNumber: 384, + lineNumber: 543, columnNumber: 15 }, this), "传统称谓 (Traditional Names)" ] }, void 0, true, { fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", - lineNumber: 383, + lineNumber: 542, columnNumber: 13 }, this) }, void 0, false, { fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", - lineNumber: 382, + lineNumber: 541, columnNumber: 11 }, this), /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$card$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["CardContent"], { @@ -3567,7 +3830,7 @@ function MemberForm({ initialData, existingMembers = [], onSubmit, onCancel }) { children: "字 (Courtesy Name)" }, void 0, false, { fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", - lineNumber: 391, + lineNumber: 550, columnNumber: 17 }, this), /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$input$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["Input"], { @@ -3577,13 +3840,13 @@ function MemberForm({ initialData, existingMembers = [], onSubmit, onCancel }) { placeholder: "e.g. 伯虎" }, void 0, false, { fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", - lineNumber: 392, + lineNumber: 551, columnNumber: 17 }, this) ] }, void 0, true, { fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", - lineNumber: 390, + lineNumber: 549, columnNumber: 15 }, this), /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { @@ -3594,7 +3857,7 @@ function MemberForm({ initialData, existingMembers = [], onSubmit, onCancel }) { children: "号 (Art Name)" }, void 0, false, { fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", - lineNumber: 400, + lineNumber: 559, columnNumber: 17 }, this), /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$input$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["Input"], { @@ -3604,19 +3867,19 @@ function MemberForm({ initialData, existingMembers = [], onSubmit, onCancel }) { placeholder: "e.g. 六如居士" }, void 0, false, { fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", - lineNumber: 401, + lineNumber: 560, columnNumber: 17 }, this) ] }, void 0, true, { fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", - lineNumber: 399, + lineNumber: 558, columnNumber: 15 }, this) ] }, void 0, true, { fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", - lineNumber: 389, + lineNumber: 548, columnNumber: 13 }, this), /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { @@ -3630,7 +3893,7 @@ function MemberForm({ initialData, existingMembers = [], onSubmit, onCancel }) { children: "字辈 (Gen. Name)" }, void 0, false, { fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", - lineNumber: 411, + lineNumber: 570, columnNumber: 17 }, this), /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$input$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["Input"], { @@ -3639,13 +3902,13 @@ function MemberForm({ initialData, existingMembers = [], onSubmit, onCancel }) { onChange: (e)=>handleChange("generationName", e.target.value) }, void 0, false, { fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", - lineNumber: 412, + lineNumber: 571, columnNumber: 17 }, this) ] }, void 0, true, { fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", - lineNumber: 410, + lineNumber: 569, columnNumber: 15 }, this), /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { @@ -3656,7 +3919,7 @@ function MemberForm({ initialData, existingMembers = [], onSubmit, onCancel }) { children: "谥号 (Posthumous)" }, void 0, false, { fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", - lineNumber: 419, + lineNumber: 578, columnNumber: 17 }, this), /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$input$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["Input"], { @@ -3665,31 +3928,31 @@ function MemberForm({ initialData, existingMembers = [], onSubmit, onCancel }) { onChange: (e)=>handleChange("posthumousName", e.target.value) }, void 0, false, { fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", - lineNumber: 420, + lineNumber: 579, columnNumber: 17 }, this) ] }, void 0, true, { fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", - lineNumber: 418, + lineNumber: 577, columnNumber: 15 }, this) ] }, void 0, true, { fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", - lineNumber: 409, + lineNumber: 568, columnNumber: 13 }, this) ] }, void 0, true, { fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", - lineNumber: 388, + lineNumber: 547, columnNumber: 11 }, this) ] }, void 0, true, { fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", - lineNumber: 381, + lineNumber: 540, columnNumber: 9 }, this), /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$card$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["Card"], { @@ -3702,19 +3965,19 @@ function MemberForm({ initialData, existingMembers = [], onSubmit, onCancel }) { className: "h-5 w-5" }, void 0, false, { fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", - lineNumber: 434, + lineNumber: 593, columnNumber: 15 }, this), "生平与地点 (Life & Places)" ] }, void 0, true, { fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", - lineNumber: 433, + lineNumber: 592, columnNumber: 13 }, this) }, void 0, false, { fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", - lineNumber: 432, + lineNumber: 591, columnNumber: 11 }, this), /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$card$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["CardContent"], { @@ -3731,7 +3994,7 @@ function MemberForm({ initialData, existingMembers = [], onSubmit, onCancel }) { children: "出生日期 (Birth)" }, void 0, false, { fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", - lineNumber: 441, + lineNumber: 600, columnNumber: 17 }, this), /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$input$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["Input"], { @@ -3741,13 +4004,13 @@ function MemberForm({ initialData, existingMembers = [], onSubmit, onCancel }) { onChange: (e)=>handleChange("birthDate", e.target.value) }, void 0, false, { fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", - lineNumber: 442, + lineNumber: 601, columnNumber: 17 }, this) ] }, void 0, true, { fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", - lineNumber: 440, + lineNumber: 599, columnNumber: 15 }, this), /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { @@ -3758,7 +4021,7 @@ function MemberForm({ initialData, existingMembers = [], onSubmit, onCancel }) { children: "逝世日期 (Death)" }, void 0, false, { fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", - lineNumber: 450, + lineNumber: 609, columnNumber: 17 }, this), /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$input$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["Input"], { @@ -3768,19 +4031,19 @@ function MemberForm({ initialData, existingMembers = [], onSubmit, onCancel }) { onChange: (e)=>handleChange("deathDate", e.target.value) }, void 0, false, { fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", - lineNumber: 451, + lineNumber: 610, columnNumber: 17 }, this) ] }, void 0, true, { fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", - lineNumber: 449, + lineNumber: 608, columnNumber: 15 }, this) ] }, void 0, true, { fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", - lineNumber: 439, + lineNumber: 598, columnNumber: 13 }, this), /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { @@ -3791,7 +4054,7 @@ function MemberForm({ initialData, existingMembers = [], onSubmit, onCancel }) { children: "籍贯 (Ancestral Home)" }, void 0, false, { fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", - lineNumber: 460, + lineNumber: 619, columnNumber: 15 }, this), /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$input$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["Input"], { @@ -3801,13 +4064,13 @@ function MemberForm({ initialData, existingMembers = [], onSubmit, onCancel }) { placeholder: "e.g. 福建省泉州市" }, void 0, false, { fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", - lineNumber: 461, + lineNumber: 620, columnNumber: 15 }, this) ] }, void 0, true, { fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", - lineNumber: 459, + lineNumber: 618, columnNumber: 13 }, this), /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { @@ -3818,7 +4081,7 @@ function MemberForm({ initialData, existingMembers = [], onSubmit, onCancel }) { children: "葬地 (Burial Place)" }, void 0, false, { fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", - lineNumber: 469, + lineNumber: 628, columnNumber: 15 }, this), /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$input$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["Input"], { @@ -3827,25 +4090,25 @@ function MemberForm({ initialData, existingMembers = [], onSubmit, onCancel }) { onChange: (e)=>handleChange("burialPlace", e.target.value) }, void 0, false, { fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", - lineNumber: 470, + lineNumber: 629, columnNumber: 15 }, this) ] }, void 0, true, { fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", - lineNumber: 468, + lineNumber: 627, columnNumber: 13 }, this) ] }, void 0, true, { fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", - lineNumber: 438, + lineNumber: 597, columnNumber: 11 }, this) ] }, void 0, true, { fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", - lineNumber: 431, + lineNumber: 590, columnNumber: 9 }, this), /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$card$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["Card"], { @@ -3859,27 +4122,27 @@ function MemberForm({ initialData, existingMembers = [], onSubmit, onCancel }) { className: "h-5 w-5" }, void 0, false, { fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", - lineNumber: 483, + lineNumber: 642, columnNumber: 15 }, this), "联系方式 (Contact Information)" ] }, void 0, true, { fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", - lineNumber: 482, + lineNumber: 641, columnNumber: 13 }, this), /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$card$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["CardDescription"], { children: "在世成员的联系方式" }, void 0, false, { fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", - lineNumber: 486, + lineNumber: 645, columnNumber: 13 }, this) ] }, void 0, true, { fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", - lineNumber: 481, + lineNumber: 640, columnNumber: 11 }, this), /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$card$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["CardContent"], { @@ -3893,7 +4156,7 @@ function MemberForm({ initialData, existingMembers = [], onSubmit, onCancel }) { children: "手机号 (Mobile Phone)" }, void 0, false, { fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", - lineNumber: 490, + lineNumber: 649, columnNumber: 15 }, this), /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$input$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["Input"], { @@ -3904,13 +4167,13 @@ function MemberForm({ initialData, existingMembers = [], onSubmit, onCancel }) { placeholder: "e.g. 13800138000" }, void 0, false, { fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", - lineNumber: 491, + lineNumber: 650, columnNumber: 15 }, this) ] }, void 0, true, { fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", - lineNumber: 489, + lineNumber: 648, columnNumber: 13 }, this), /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { @@ -3921,7 +4184,7 @@ function MemberForm({ initialData, existingMembers = [], onSubmit, onCancel }) { children: "固定电话 (Telephone)" }, void 0, false, { fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", - lineNumber: 500, + lineNumber: 659, columnNumber: 15 }, this), /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$input$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["Input"], { @@ -3932,13 +4195,13 @@ function MemberForm({ initialData, existingMembers = [], onSubmit, onCancel }) { placeholder: "e.g. 0592-1234567" }, void 0, false, { fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", - lineNumber: 501, + lineNumber: 660, columnNumber: 15 }, this) ] }, void 0, true, { fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", - lineNumber: 499, + lineNumber: 658, columnNumber: 13 }, this), /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { @@ -3949,7 +4212,7 @@ function MemberForm({ initialData, existingMembers = [], onSubmit, onCancel }) { children: "邮箱 (Email)" }, void 0, false, { fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", - lineNumber: 510, + lineNumber: 669, columnNumber: 15 }, this), /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$input$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["Input"], { @@ -3960,13 +4223,13 @@ function MemberForm({ initialData, existingMembers = [], onSubmit, onCancel }) { placeholder: "e.g. example@email.com" }, void 0, false, { fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", - lineNumber: 511, + lineNumber: 670, columnNumber: 15 }, this) ] }, void 0, true, { fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", - lineNumber: 509, + lineNumber: 668, columnNumber: 13 }, this), /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { @@ -3977,7 +4240,7 @@ function MemberForm({ initialData, existingMembers = [], onSubmit, onCancel }) { children: "现居地址 (Address)" }, void 0, false, { fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", - lineNumber: 520, + lineNumber: 679, columnNumber: 15 }, this), /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$input$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["Input"], { @@ -3987,25 +4250,25 @@ function MemberForm({ initialData, existingMembers = [], onSubmit, onCancel }) { placeholder: "e.g. 福建省厦门市思明区XX路XX号" }, void 0, false, { fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", - lineNumber: 521, + lineNumber: 680, columnNumber: 15 }, this) ] }, void 0, true, { fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", - lineNumber: 519, + lineNumber: 678, columnNumber: 13 }, this) ] }, void 0, true, { fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", - lineNumber: 488, + lineNumber: 647, columnNumber: 11 }, this) ] }, void 0, true, { fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", - lineNumber: 480, + lineNumber: 639, columnNumber: 9 }, this), /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$card$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["Card"], { @@ -4018,19 +4281,19 @@ function MemberForm({ initialData, existingMembers = [], onSubmit, onCancel }) { className: "h-5 w-5" }, void 0, false, { fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", - lineNumber: 535, + lineNumber: 694, columnNumber: 15 }, this), "生平事迹 (Biography)" ] }, void 0, true, { fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", - lineNumber: 534, + lineNumber: 693, columnNumber: 13 }, this) }, void 0, false, { fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", - lineNumber: 533, + lineNumber: 692, columnNumber: 11 }, this), /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$card$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["CardContent"], { @@ -4042,18 +4305,18 @@ function MemberForm({ initialData, existingMembers = [], onSubmit, onCancel }) { onChange: (e)=>handleChange("bio", e.target.value) }, void 0, false, { fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", - lineNumber: 540, + lineNumber: 699, columnNumber: 13 }, this) }, void 0, false, { fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", - lineNumber: 539, + lineNumber: 698, columnNumber: 11 }, this) ] }, void 0, true, { fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", - lineNumber: 532, + lineNumber: 691, columnNumber: 9 }, this), /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$card$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["Card"], { @@ -4067,27 +4330,27 @@ function MemberForm({ initialData, existingMembers = [], onSubmit, onCancel }) { className: "h-5 w-5" }, void 0, false, { fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", - lineNumber: 553, + lineNumber: 712, columnNumber: 15 }, this), "标签 (Tags)" ] }, void 0, true, { fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", - lineNumber: 552, + lineNumber: 711, columnNumber: 13 }, this), /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$card$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["CardDescription"], { children: "添加标签以便分类和搜索(按回车添加)" }, void 0, false, { fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", - lineNumber: 556, + lineNumber: 715, columnNumber: 13 }, this) ] }, void 0, true, { fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", - lineNumber: 551, + lineNumber: 710, columnNumber: 11 }, this), /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$card$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["CardContent"], { @@ -4115,12 +4378,12 @@ function MemberForm({ initialData, existingMembers = [], onSubmit, onCancel }) { } }, void 0, false, { fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", - lineNumber: 561, + lineNumber: 720, columnNumber: 17 }, this) }, void 0, false, { fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", - lineNumber: 560, + lineNumber: 719, columnNumber: 15 }, this), formData.tags && formData.tags.length > 0 && /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { @@ -4139,35 +4402,35 @@ function MemberForm({ initialData, existingMembers = [], onSubmit, onCancel }) { children: "×" }, void 0, false, { fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", - lineNumber: 584, + lineNumber: 743, columnNumber: 23 }, this) ] }, index, true, { fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", - lineNumber: 579, + lineNumber: 738, columnNumber: 21 }, this)) }, void 0, false, { fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", - lineNumber: 577, + lineNumber: 736, columnNumber: 17 }, this) ] }, void 0, true, { fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", - lineNumber: 559, + lineNumber: 718, columnNumber: 13 }, this) }, void 0, false, { fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", - lineNumber: 558, + lineNumber: 717, columnNumber: 11 }, this) ] }, void 0, true, { fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", - lineNumber: 550, + lineNumber: 709, columnNumber: 9 }, this), /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$card$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["Card"], { @@ -4181,27 +4444,27 @@ function MemberForm({ initialData, existingMembers = [], onSubmit, onCancel }) { className: "h-5 w-5" }, void 0, false, { fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", - lineNumber: 606, + lineNumber: 765, columnNumber: 15 }, this), "照片墙 (Photo Gallery)" ] }, void 0, true, { fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", - lineNumber: 605, + lineNumber: 764, columnNumber: 13 }, this), /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$card$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["CardDescription"], { children: "上传多张照片记录珍贵时刻" }, void 0, false, { fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", - lineNumber: 609, + lineNumber: 768, columnNumber: 13 }, this) ] }, void 0, true, { fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", - lineNumber: 604, + lineNumber: 763, columnNumber: 11 }, this), /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$card$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["CardContent"], { @@ -4210,18 +4473,18 @@ function MemberForm({ initialData, existingMembers = [], onSubmit, onCancel }) { onChange: (photoIds)=>handleChange("photoIds", photoIds) }, void 0, false, { fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", - lineNumber: 612, + lineNumber: 771, columnNumber: 13 }, this) }, void 0, false, { fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", - lineNumber: 611, + lineNumber: 770, columnNumber: 11 }, this) ] }, void 0, true, { fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", - lineNumber: 603, + lineNumber: 762, columnNumber: 9 }, this), /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$card$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["Card"], { @@ -4235,27 +4498,27 @@ function MemberForm({ initialData, existingMembers = [], onSubmit, onCancel }) { className: "h-5 w-5" }, void 0, false, { fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", - lineNumber: 623, + lineNumber: 782, columnNumber: 15 }, this), "家族故事 (Family Stories)" ] }, void 0, true, { fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", - lineNumber: 622, + lineNumber: 781, columnNumber: 13 }, this), /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$card$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["CardDescription"], { children: "记录与此成员相关的家族故事" }, void 0, false, { fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", - lineNumber: 626, + lineNumber: 785, columnNumber: 13 }, this) ] }, void 0, true, { fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", - lineNumber: 621, + lineNumber: 780, columnNumber: 11 }, this), /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$card$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["CardContent"], { @@ -4264,24 +4527,24 @@ function MemberForm({ initialData, existingMembers = [], onSubmit, onCancel }) { onChange: (stories)=>handleChange("stories", stories) }, void 0, false, { fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", - lineNumber: 629, + lineNumber: 788, columnNumber: 13 }, this) }, void 0, false, { fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", - lineNumber: 628, + lineNumber: 787, columnNumber: 11 }, this) ] }, void 0, true, { fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", - lineNumber: 620, + lineNumber: 779, columnNumber: 9 }, this) ] }, void 0, true, { fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", - lineNumber: 205, + lineNumber: 254, columnNumber: 7 }, this), /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { @@ -4294,7 +4557,7 @@ function MemberForm({ initialData, existingMembers = [], onSubmit, onCancel }) { children: "取消 (Cancel)" }, void 0, false, { fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", - lineNumber: 639, + lineNumber: 798, columnNumber: 9 }, this), /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$button$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["Button"], { @@ -4303,19 +4566,19 @@ function MemberForm({ initialData, existingMembers = [], onSubmit, onCancel }) { children: "保存 (Save Member)" }, void 0, false, { fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", - lineNumber: 642, + lineNumber: 801, columnNumber: 9 }, this) ] }, void 0, true, { fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", - lineNumber: 638, + lineNumber: 797, columnNumber: 7 }, this) ] }, void 0, true, { fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", - lineNumber: 193, + lineNumber: 242, columnNumber: 5 }, this); } @@ -4364,12 +4627,13 @@ var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$ch ; function MemberProfilePage() { const { id } = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$navigation$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["useParams"])(); - const { getMember, updateMember, deleteMember } = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$context$2f$family$2d$context$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["useFamily"])(); + const { getMember, updateMember, deleteMember, treeData } = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$context$2f$family$2d$context$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["useFamily"])(); const { showConfirm } = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$alert$2d$dialog$2d$custom$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["useDialog"])(); const router = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$navigation$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["useRouter"])(); const [isEditing, setIsEditing] = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["useState"])(false); const [avatarBlobUrl, setAvatarBlobUrl] = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["useState"])(undefined); const member = getMember(id); + const allMembers = Object.values(treeData.members); // Load avatar blob if exists (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["useEffect"])(()=>{ if (member?.avatarImageId) { @@ -4392,7 +4656,7 @@ function MemberProfilePage() { children: [ /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$site$2d$header$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["SiteHeader"], {}, void 0, false, { fileName: "[project]/Documents/go-new/chinese-family-tree/app/members/[id]/page.tsx", - lineNumber: 46, + lineNumber: 47, columnNumber: 9 }, this), /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { @@ -4403,7 +4667,7 @@ function MemberProfilePage() { children: "Member not found" }, void 0, false, { fileName: "[project]/Documents/go-new/chinese-family-tree/app/members/[id]/page.tsx", - lineNumber: 48, + lineNumber: 49, columnNumber: 11 }, this), /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$button$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["Button"], { @@ -4411,19 +4675,19 @@ function MemberProfilePage() { children: "Back to List" }, void 0, false, { fileName: "[project]/Documents/go-new/chinese-family-tree/app/members/[id]/page.tsx", - lineNumber: 49, + lineNumber: 50, columnNumber: 11 }, this) ] }, void 0, true, { fileName: "[project]/Documents/go-new/chinese-family-tree/app/members/[id]/page.tsx", - lineNumber: 47, + lineNumber: 48, columnNumber: 9 }, this) ] }, void 0, true, { fileName: "[project]/Documents/go-new/chinese-family-tree/app/members/[id]/page.tsx", - lineNumber: 45, + lineNumber: 46, columnNumber: 7 }, this); } @@ -4444,7 +4708,7 @@ function MemberProfilePage() { children: [ /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$site$2d$header$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["SiteHeader"], {}, void 0, false, { fileName: "[project]/Documents/go-new/chinese-family-tree/app/members/[id]/page.tsx", - lineNumber: 71, + lineNumber: 72, columnNumber: 9 }, this), /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { @@ -4461,14 +4725,14 @@ function MemberProfilePage() { className: "mr-2 h-4 w-4" }, void 0, false, { fileName: "[project]/Documents/go-new/chinese-family-tree/app/members/[id]/page.tsx", - lineNumber: 75, + lineNumber: 76, columnNumber: 15 }, this), " 返回" ] }, void 0, true, { fileName: "[project]/Documents/go-new/chinese-family-tree/app/members/[id]/page.tsx", - lineNumber: 74, + lineNumber: 75, columnNumber: 13 }, this), /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("h1", { @@ -4479,34 +4743,35 @@ function MemberProfilePage() { ] }, void 0, true, { fileName: "[project]/Documents/go-new/chinese-family-tree/app/members/[id]/page.tsx", - lineNumber: 77, + lineNumber: 78, columnNumber: 13 }, this) ] }, void 0, true, { fileName: "[project]/Documents/go-new/chinese-family-tree/app/members/[id]/page.tsx", - lineNumber: 73, + lineNumber: 74, columnNumber: 11 }, this), /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$members$2f$member$2d$form$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["MemberForm"], { initialData: member, + existingMembers: allMembers, onSubmit: handleSave, onCancel: ()=>setIsEditing(false) }, void 0, false, { fileName: "[project]/Documents/go-new/chinese-family-tree/app/members/[id]/page.tsx", - lineNumber: 79, + lineNumber: 80, columnNumber: 11 }, this) ] }, void 0, true, { fileName: "[project]/Documents/go-new/chinese-family-tree/app/members/[id]/page.tsx", - lineNumber: 72, + lineNumber: 73, columnNumber: 9 }, this) ] }, void 0, true, { fileName: "[project]/Documents/go-new/chinese-family-tree/app/members/[id]/page.tsx", - lineNumber: 70, + lineNumber: 71, columnNumber: 7 }, this); } @@ -4515,7 +4780,7 @@ function MemberProfilePage() { children: [ /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$site$2d$header$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["SiteHeader"], {}, void 0, false, { fileName: "[project]/Documents/go-new/chinese-family-tree/app/members/[id]/page.tsx", - lineNumber: 87, + lineNumber: 93, columnNumber: 7 }, this), /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("main", { @@ -4535,24 +4800,24 @@ function MemberProfilePage() { className: "h-full w-full object-cover" }, void 0, false, { fileName: "[project]/Documents/go-new/chinese-family-tree/app/members/[id]/page.tsx", - lineNumber: 94, + lineNumber: 100, columnNumber: 17 }, this) : member.gender === 'FEMALE' ? /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$lucide$2d$react$40$0$2e$454$2e$0_react$40$19$2e$2$2e$0$2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$circle$2d$user$2d$round$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__$3c$export__default__as__CircleUserRound$3e$__["CircleUserRound"], { className: "h-20 w-20 text-pink-400" }, void 0, false, { fileName: "[project]/Documents/go-new/chinese-family-tree/app/members/[id]/page.tsx", - lineNumber: 101, + lineNumber: 107, columnNumber: 19 }, this) : /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$lucide$2d$react$40$0$2e$454$2e$0_react$40$19$2e$2$2e$0$2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$circle$2d$user$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__$3c$export__default__as__CircleUser$3e$__["CircleUser"], { className: "h-20 w-20 text-blue-400" }, void 0, false, { fileName: "[project]/Documents/go-new/chinese-family-tree/app/members/[id]/page.tsx", - lineNumber: 103, + lineNumber: 109, columnNumber: 19 }, this) }, void 0, false, { fileName: "[project]/Documents/go-new/chinese-family-tree/app/members/[id]/page.tsx", - lineNumber: 92, + lineNumber: 98, columnNumber: 13 }, this), /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { @@ -4565,7 +4830,7 @@ function MemberProfilePage() { children: member.fullName }, void 0, false, { fileName: "[project]/Documents/go-new/chinese-family-tree/app/members/[id]/page.tsx", - lineNumber: 109, + lineNumber: 115, columnNumber: 17 }, this), /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("span", { @@ -4576,13 +4841,13 @@ function MemberProfilePage() { ] }, void 0, true, { fileName: "[project]/Documents/go-new/chinese-family-tree/app/members/[id]/page.tsx", - lineNumber: 110, + lineNumber: 116, columnNumber: 17 }, this) ] }, void 0, true, { fileName: "[project]/Documents/go-new/chinese-family-tree/app/members/[id]/page.tsx", - lineNumber: 108, + lineNumber: 114, columnNumber: 15 }, this), /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { @@ -4596,13 +4861,13 @@ function MemberProfilePage() { children: member.courtesyName }, void 0, false, { fileName: "[project]/Documents/go-new/chinese-family-tree/app/members/[id]/page.tsx", - lineNumber: 117, + lineNumber: 123, columnNumber: 23 }, this) ] }, void 0, true, { fileName: "[project]/Documents/go-new/chinese-family-tree/app/members/[id]/page.tsx", - lineNumber: 116, + lineNumber: 122, columnNumber: 19 }, this), member.artName && /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("p", { @@ -4613,13 +4878,13 @@ function MemberProfilePage() { children: member.artName }, void 0, false, { fileName: "[project]/Documents/go-new/chinese-family-tree/app/members/[id]/page.tsx", - lineNumber: 122, + lineNumber: 128, columnNumber: 23 }, this) ] }, void 0, true, { fileName: "[project]/Documents/go-new/chinese-family-tree/app/members/[id]/page.tsx", - lineNumber: 121, + lineNumber: 127, columnNumber: 19 }, this), member.ancestralHome && /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("p", { @@ -4629,13 +4894,13 @@ function MemberProfilePage() { ] }, void 0, true, { fileName: "[project]/Documents/go-new/chinese-family-tree/app/members/[id]/page.tsx", - lineNumber: 125, + lineNumber: 131, columnNumber: 42 }, this) ] }, void 0, true, { fileName: "[project]/Documents/go-new/chinese-family-tree/app/members/[id]/page.tsx", - lineNumber: 114, + lineNumber: 120, columnNumber: 15 }, this), member.tags && member.tags.length > 0 && /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { @@ -4645,24 +4910,24 @@ function MemberProfilePage() { children: tag }, tag, false, { fileName: "[project]/Documents/go-new/chinese-family-tree/app/members/[id]/page.tsx", - lineNumber: 130, + lineNumber: 136, columnNumber: 21 }, this)) }, void 0, false, { fileName: "[project]/Documents/go-new/chinese-family-tree/app/members/[id]/page.tsx", - lineNumber: 128, + lineNumber: 134, columnNumber: 17 }, this) ] }, void 0, true, { fileName: "[project]/Documents/go-new/chinese-family-tree/app/members/[id]/page.tsx", - lineNumber: 107, + lineNumber: 113, columnNumber: 13 }, this) ] }, void 0, true, { fileName: "[project]/Documents/go-new/chinese-family-tree/app/members/[id]/page.tsx", - lineNumber: 91, + lineNumber: 97, columnNumber: 11 }, this), /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { @@ -4676,12 +4941,12 @@ function MemberProfilePage() { className: "h-4 w-4" }, void 0, false, { fileName: "[project]/Documents/go-new/chinese-family-tree/app/members/[id]/page.tsx", - lineNumber: 144, + lineNumber: 150, columnNumber: 15 }, this) }, void 0, false, { fileName: "[project]/Documents/go-new/chinese-family-tree/app/members/[id]/page.tsx", - lineNumber: 143, + lineNumber: 149, columnNumber: 13 }, this), /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$button$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["Button"], { @@ -4691,12 +4956,12 @@ function MemberProfilePage() { className: "h-4 w-4" }, void 0, false, { fileName: "[project]/Documents/go-new/chinese-family-tree/app/members/[id]/page.tsx", - lineNumber: 147, + lineNumber: 153, columnNumber: 15 }, this) }, void 0, false, { fileName: "[project]/Documents/go-new/chinese-family-tree/app/members/[id]/page.tsx", - lineNumber: 146, + lineNumber: 152, columnNumber: 13 }, this), /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$button$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["Button"], { @@ -4708,14 +4973,14 @@ function MemberProfilePage() { className: "h-4 w-4" }, void 0, false, { fileName: "[project]/Documents/go-new/chinese-family-tree/app/members/[id]/page.tsx", - lineNumber: 150, + lineNumber: 156, columnNumber: 15 }, this), " 编辑" ] }, void 0, true, { fileName: "[project]/Documents/go-new/chinese-family-tree/app/members/[id]/page.tsx", - lineNumber: 149, + lineNumber: 155, columnNumber: 13 }, this), /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$button$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["Button"], { @@ -4726,24 +4991,24 @@ function MemberProfilePage() { className: "h-4 w-4" }, void 0, false, { fileName: "[project]/Documents/go-new/chinese-family-tree/app/members/[id]/page.tsx", - lineNumber: 153, + lineNumber: 159, columnNumber: 15 }, this) }, void 0, false, { fileName: "[project]/Documents/go-new/chinese-family-tree/app/members/[id]/page.tsx", - lineNumber: 152, + lineNumber: 158, columnNumber: 13 }, this) ] }, void 0, true, { fileName: "[project]/Documents/go-new/chinese-family-tree/app/members/[id]/page.tsx", - lineNumber: 142, + lineNumber: 148, columnNumber: 11 }, this) ] }, void 0, true, { fileName: "[project]/Documents/go-new/chinese-family-tree/app/members/[id]/page.tsx", - lineNumber: 90, + lineNumber: 96, columnNumber: 9 }, this), /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { @@ -4761,14 +5026,14 @@ function MemberProfilePage() { className: "w-1 h-6 bg-primary rounded-full" }, void 0, false, { fileName: "[project]/Documents/go-new/chinese-family-tree/app/members/[id]/page.tsx", - lineNumber: 164, + lineNumber: 170, columnNumber: 17 }, this), "生平事迹" ] }, void 0, true, { fileName: "[project]/Documents/go-new/chinese-family-tree/app/members/[id]/page.tsx", - lineNumber: 163, + lineNumber: 169, columnNumber: 15 }, this), /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { @@ -4778,25 +5043,25 @@ function MemberProfilePage() { children: member.bio }, void 0, false, { fileName: "[project]/Documents/go-new/chinese-family-tree/app/members/[id]/page.tsx", - lineNumber: 169, + lineNumber: 175, columnNumber: 19 }, this) : /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("p", { className: "text-muted-foreground italic", children: "暂无生平记录..." }, void 0, false, { fileName: "[project]/Documents/go-new/chinese-family-tree/app/members/[id]/page.tsx", - lineNumber: 171, + lineNumber: 177, columnNumber: 19 }, this) }, void 0, false, { fileName: "[project]/Documents/go-new/chinese-family-tree/app/members/[id]/page.tsx", - lineNumber: 167, + lineNumber: 173, columnNumber: 15 }, this) ] }, void 0, true, { fileName: "[project]/Documents/go-new/chinese-family-tree/app/members/[id]/page.tsx", - lineNumber: 162, + lineNumber: 168, columnNumber: 13 }, this), member.photoIds && member.photoIds.length > 0 && /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("section", { @@ -4808,14 +5073,14 @@ function MemberProfilePage() { className: "h-6 w-6 text-primary" }, void 0, false, { fileName: "[project]/Documents/go-new/chinese-family-tree/app/members/[id]/page.tsx", - lineNumber: 180, + lineNumber: 186, columnNumber: 19 }, this), "照片墙" ] }, void 0, true, { fileName: "[project]/Documents/go-new/chinese-family-tree/app/members/[id]/page.tsx", - lineNumber: 179, + lineNumber: 185, columnNumber: 17 }, this), /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { @@ -4828,18 +5093,18 @@ function MemberProfilePage() { readonly: false }, void 0, false, { fileName: "[project]/Documents/go-new/chinese-family-tree/app/members/[id]/page.tsx", - lineNumber: 184, + lineNumber: 190, columnNumber: 19 }, this) }, void 0, false, { fileName: "[project]/Documents/go-new/chinese-family-tree/app/members/[id]/page.tsx", - lineNumber: 183, + lineNumber: 189, columnNumber: 17 }, this) ] }, void 0, true, { fileName: "[project]/Documents/go-new/chinese-family-tree/app/members/[id]/page.tsx", - lineNumber: 178, + lineNumber: 184, columnNumber: 15 }, this), member.stories && member.stories.length > 0 && /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("section", { @@ -4851,14 +5116,14 @@ function MemberProfilePage() { className: "h-6 w-6 text-primary" }, void 0, false, { fileName: "[project]/Documents/go-new/chinese-family-tree/app/members/[id]/page.tsx", - lineNumber: 197, + lineNumber: 203, columnNumber: 19 }, this), "家族故事" ] }, void 0, true, { fileName: "[project]/Documents/go-new/chinese-family-tree/app/members/[id]/page.tsx", - lineNumber: 196, + lineNumber: 202, columnNumber: 17 }, this), /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { @@ -4871,18 +5136,18 @@ function MemberProfilePage() { readonly: false }, void 0, false, { fileName: "[project]/Documents/go-new/chinese-family-tree/app/members/[id]/page.tsx", - lineNumber: 201, + lineNumber: 207, columnNumber: 19 }, this) }, void 0, false, { fileName: "[project]/Documents/go-new/chinese-family-tree/app/members/[id]/page.tsx", - lineNumber: 200, + lineNumber: 206, columnNumber: 17 }, this) ] }, void 0, true, { fileName: "[project]/Documents/go-new/chinese-family-tree/app/members/[id]/page.tsx", - lineNumber: 195, + lineNumber: 201, columnNumber: 15 }, this), /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("section", { @@ -4894,14 +5159,14 @@ function MemberProfilePage() { className: "w-1 h-6 bg-secondary rounded-full" }, void 0, false, { fileName: "[project]/Documents/go-new/chinese-family-tree/app/members/[id]/page.tsx", - lineNumber: 212, + lineNumber: 218, columnNumber: 17 }, this), "家族关系" ] }, void 0, true, { fileName: "[project]/Documents/go-new/chinese-family-tree/app/members/[id]/page.tsx", - lineNumber: 211, + lineNumber: 217, columnNumber: 15 }, this), /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { @@ -4915,7 +5180,7 @@ function MemberProfilePage() { children: "父亲 (Father)" }, void 0, false, { fileName: "[project]/Documents/go-new/chinese-family-tree/app/members/[id]/page.tsx", - lineNumber: 217, + lineNumber: 223, columnNumber: 19 }, this), member.fatherId ? /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$client$2f$app$2d$dir$2f$link$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["default"], { @@ -4924,27 +5189,27 @@ function MemberProfilePage() { children: getMember(member.fatherId)?.fullName || member.fatherId }, void 0, false, { fileName: "[project]/Documents/go-new/chinese-family-tree/app/members/[id]/page.tsx", - lineNumber: 221, + lineNumber: 227, columnNumber: 21 }, this) : member.spouseFatherName ? /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("span", { className: "text-lg font-serif font-bold text-foreground", children: member.spouseFatherName }, void 0, false, { fileName: "[project]/Documents/go-new/chinese-family-tree/app/members/[id]/page.tsx", - lineNumber: 228, + lineNumber: 234, columnNumber: 21 }, this) : /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("span", { className: "text-muted-foreground", children: "-" }, void 0, false, { fileName: "[project]/Documents/go-new/chinese-family-tree/app/members/[id]/page.tsx", - lineNumber: 232, + lineNumber: 238, columnNumber: 21 }, this) ] }, void 0, true, { fileName: "[project]/Documents/go-new/chinese-family-tree/app/members/[id]/page.tsx", - lineNumber: 216, + lineNumber: 222, columnNumber: 17 }, this), /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { @@ -4955,7 +5220,7 @@ function MemberProfilePage() { children: "母亲 (Mother)" }, void 0, false, { fileName: "[project]/Documents/go-new/chinese-family-tree/app/members/[id]/page.tsx", - lineNumber: 236, + lineNumber: 242, columnNumber: 19 }, this), member.motherId ? /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$client$2f$app$2d$dir$2f$link$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["default"], { @@ -4964,27 +5229,27 @@ function MemberProfilePage() { children: getMember(member.motherId)?.fullName || member.motherId }, void 0, false, { fileName: "[project]/Documents/go-new/chinese-family-tree/app/members/[id]/page.tsx", - lineNumber: 240, + lineNumber: 246, columnNumber: 21 }, this) : member.spouseMotherName ? /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("span", { className: "text-lg font-serif font-bold text-foreground", children: member.spouseMotherName }, void 0, false, { fileName: "[project]/Documents/go-new/chinese-family-tree/app/members/[id]/page.tsx", - lineNumber: 247, + lineNumber: 253, columnNumber: 21 }, this) : /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("span", { className: "text-muted-foreground", children: "-" }, void 0, false, { fileName: "[project]/Documents/go-new/chinese-family-tree/app/members/[id]/page.tsx", - lineNumber: 251, + lineNumber: 257, columnNumber: 21 }, this) ] }, void 0, true, { fileName: "[project]/Documents/go-new/chinese-family-tree/app/members/[id]/page.tsx", - lineNumber: 235, + lineNumber: 241, columnNumber: 17 }, this), /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { @@ -4995,7 +5260,7 @@ function MemberProfilePage() { children: "配偶 (Spouse)" }, void 0, false, { fileName: "[project]/Documents/go-new/chinese-family-tree/app/members/[id]/page.tsx", - lineNumber: 255, + lineNumber: 261, columnNumber: 19 }, this), /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { @@ -5006,25 +5271,25 @@ function MemberProfilePage() { children: getMember(spouseId)?.fullName || spouseId }, spouseId, false, { fileName: "[project]/Documents/go-new/chinese-family-tree/app/members/[id]/page.tsx", - lineNumber: 261, + lineNumber: 267, columnNumber: 25 }, this)) : /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("span", { className: "text-muted-foreground", children: "无记录" }, void 0, false, { fileName: "[project]/Documents/go-new/chinese-family-tree/app/members/[id]/page.tsx", - lineNumber: 270, + lineNumber: 276, columnNumber: 23 }, this) }, void 0, false, { fileName: "[project]/Documents/go-new/chinese-family-tree/app/members/[id]/page.tsx", - lineNumber: 258, + lineNumber: 264, columnNumber: 19 }, this) ] }, void 0, true, { fileName: "[project]/Documents/go-new/chinese-family-tree/app/members/[id]/page.tsx", - lineNumber: 254, + lineNumber: 260, columnNumber: 17 }, this), /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { @@ -5035,7 +5300,7 @@ function MemberProfilePage() { children: "子女 (Children)" }, void 0, false, { fileName: "[project]/Documents/go-new/chinese-family-tree/app/members/[id]/page.tsx", - lineNumber: 275, + lineNumber: 281, columnNumber: 19 }, this), /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { @@ -5046,43 +5311,43 @@ function MemberProfilePage() { children: getMember(childId)?.fullName || childId }, childId, false, { fileName: "[project]/Documents/go-new/chinese-family-tree/app/members/[id]/page.tsx", - lineNumber: 281, + lineNumber: 287, columnNumber: 25 }, this)) : /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("span", { className: "text-muted-foreground", children: "无记录" }, void 0, false, { fileName: "[project]/Documents/go-new/chinese-family-tree/app/members/[id]/page.tsx", - lineNumber: 290, + lineNumber: 296, columnNumber: 23 }, this) }, void 0, false, { fileName: "[project]/Documents/go-new/chinese-family-tree/app/members/[id]/page.tsx", - lineNumber: 278, + lineNumber: 284, columnNumber: 19 }, this) ] }, void 0, true, { fileName: "[project]/Documents/go-new/chinese-family-tree/app/members/[id]/page.tsx", - lineNumber: 274, + lineNumber: 280, columnNumber: 17 }, this) ] }, void 0, true, { fileName: "[project]/Documents/go-new/chinese-family-tree/app/members/[id]/page.tsx", - lineNumber: 215, + lineNumber: 221, columnNumber: 15 }, this) ] }, void 0, true, { fileName: "[project]/Documents/go-new/chinese-family-tree/app/members/[id]/page.tsx", - lineNumber: 210, + lineNumber: 216, columnNumber: 13 }, this) ] }, void 0, true, { fileName: "[project]/Documents/go-new/chinese-family-tree/app/members/[id]/page.tsx", - lineNumber: 161, + lineNumber: 167, columnNumber: 11 }, this), /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { @@ -5096,7 +5361,7 @@ function MemberProfilePage() { children: "详细信息" }, void 0, false, { fileName: "[project]/Documents/go-new/chinese-family-tree/app/members/[id]/page.tsx", - lineNumber: 301, + lineNumber: 307, columnNumber: 15 }, this), /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("dl", { @@ -5109,7 +5374,7 @@ function MemberProfilePage() { children: "出生日期" }, void 0, false, { fileName: "[project]/Documents/go-new/chinese-family-tree/app/members/[id]/page.tsx", - lineNumber: 304, + lineNumber: 310, columnNumber: 19 }, this), /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("dd", { @@ -5117,13 +5382,13 @@ function MemberProfilePage() { children: member.birthDate || "-" }, void 0, false, { fileName: "[project]/Documents/go-new/chinese-family-tree/app/members/[id]/page.tsx", - lineNumber: 305, + lineNumber: 311, columnNumber: 19 }, this) ] }, void 0, true, { fileName: "[project]/Documents/go-new/chinese-family-tree/app/members/[id]/page.tsx", - lineNumber: 303, + lineNumber: 309, columnNumber: 17 }, this), member.deathDate && /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["Fragment"], { @@ -5135,7 +5400,7 @@ function MemberProfilePage() { children: "逝世日期" }, void 0, false, { fileName: "[project]/Documents/go-new/chinese-family-tree/app/members/[id]/page.tsx", - lineNumber: 310, + lineNumber: 316, columnNumber: 23 }, this), /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("dd", { @@ -5143,13 +5408,13 @@ function MemberProfilePage() { children: member.deathDate }, void 0, false, { fileName: "[project]/Documents/go-new/chinese-family-tree/app/members/[id]/page.tsx", - lineNumber: 311, + lineNumber: 317, columnNumber: 23 }, this) ] }, void 0, true, { fileName: "[project]/Documents/go-new/chinese-family-tree/app/members/[id]/page.tsx", - lineNumber: 309, + lineNumber: 315, columnNumber: 21 }, this), /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { @@ -5159,7 +5424,7 @@ function MemberProfilePage() { children: "谥号" }, void 0, false, { fileName: "[project]/Documents/go-new/chinese-family-tree/app/members/[id]/page.tsx", - lineNumber: 314, + lineNumber: 320, columnNumber: 23 }, this), /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("dd", { @@ -5167,13 +5432,13 @@ function MemberProfilePage() { children: member.posthumousName || "-" }, void 0, false, { fileName: "[project]/Documents/go-new/chinese-family-tree/app/members/[id]/page.tsx", - lineNumber: 315, + lineNumber: 321, columnNumber: 23 }, this) ] }, void 0, true, { fileName: "[project]/Documents/go-new/chinese-family-tree/app/members/[id]/page.tsx", - lineNumber: 313, + lineNumber: 319, columnNumber: 21 }, this), /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { @@ -5183,7 +5448,7 @@ function MemberProfilePage() { children: "墓地" }, void 0, false, { fileName: "[project]/Documents/go-new/chinese-family-tree/app/members/[id]/page.tsx", - lineNumber: 318, + lineNumber: 324, columnNumber: 23 }, this), /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("dd", { @@ -5191,13 +5456,13 @@ function MemberProfilePage() { children: member.burialPlace || "-" }, void 0, false, { fileName: "[project]/Documents/go-new/chinese-family-tree/app/members/[id]/page.tsx", - lineNumber: 319, + lineNumber: 325, columnNumber: 23 }, this) ] }, void 0, true, { fileName: "[project]/Documents/go-new/chinese-family-tree/app/members/[id]/page.tsx", - lineNumber: 317, + lineNumber: 323, columnNumber: 21 }, this) ] @@ -5209,7 +5474,7 @@ function MemberProfilePage() { children: "字辈" }, void 0, false, { fileName: "[project]/Documents/go-new/chinese-family-tree/app/members/[id]/page.tsx", - lineNumber: 325, + lineNumber: 331, columnNumber: 21 }, this), /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("dd", { @@ -5217,25 +5482,25 @@ function MemberProfilePage() { children: member.generationName }, void 0, false, { fileName: "[project]/Documents/go-new/chinese-family-tree/app/members/[id]/page.tsx", - lineNumber: 326, + lineNumber: 332, columnNumber: 21 }, this) ] }, void 0, true, { fileName: "[project]/Documents/go-new/chinese-family-tree/app/members/[id]/page.tsx", - lineNumber: 324, + lineNumber: 330, columnNumber: 19 }, this) ] }, void 0, true, { fileName: "[project]/Documents/go-new/chinese-family-tree/app/members/[id]/page.tsx", - lineNumber: 302, + lineNumber: 308, columnNumber: 15 }, this) ] }, void 0, true, { fileName: "[project]/Documents/go-new/chinese-family-tree/app/members/[id]/page.tsx", - lineNumber: 300, + lineNumber: 306, columnNumber: 13 }, this), (member.phone || member.telephone || member.email || member.address) && /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { @@ -5246,7 +5511,7 @@ function MemberProfilePage() { children: "联系方式" }, void 0, false, { fileName: "[project]/Documents/go-new/chinese-family-tree/app/members/[id]/page.tsx", - lineNumber: 335, + lineNumber: 341, columnNumber: 17 }, this), /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("dl", { @@ -5259,7 +5524,7 @@ function MemberProfilePage() { children: "手机号" }, void 0, false, { fileName: "[project]/Documents/go-new/chinese-family-tree/app/members/[id]/page.tsx", - lineNumber: 339, + lineNumber: 345, columnNumber: 23 }, this), /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("dd", { @@ -5270,18 +5535,18 @@ function MemberProfilePage() { children: member.phone }, void 0, false, { fileName: "[project]/Documents/go-new/chinese-family-tree/app/members/[id]/page.tsx", - lineNumber: 341, + lineNumber: 347, columnNumber: 25 }, this) }, void 0, false, { fileName: "[project]/Documents/go-new/chinese-family-tree/app/members/[id]/page.tsx", - lineNumber: 340, + lineNumber: 346, columnNumber: 23 }, this) ] }, void 0, true, { fileName: "[project]/Documents/go-new/chinese-family-tree/app/members/[id]/page.tsx", - lineNumber: 338, + lineNumber: 344, columnNumber: 21 }, this), member.telephone && /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { @@ -5291,7 +5556,7 @@ function MemberProfilePage() { children: "固定电话" }, void 0, false, { fileName: "[project]/Documents/go-new/chinese-family-tree/app/members/[id]/page.tsx", - lineNumber: 349, + lineNumber: 355, columnNumber: 23 }, this), /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("dd", { @@ -5302,18 +5567,18 @@ function MemberProfilePage() { children: member.telephone }, void 0, false, { fileName: "[project]/Documents/go-new/chinese-family-tree/app/members/[id]/page.tsx", - lineNumber: 351, + lineNumber: 357, columnNumber: 25 }, this) }, void 0, false, { fileName: "[project]/Documents/go-new/chinese-family-tree/app/members/[id]/page.tsx", - lineNumber: 350, + lineNumber: 356, columnNumber: 23 }, this) ] }, void 0, true, { fileName: "[project]/Documents/go-new/chinese-family-tree/app/members/[id]/page.tsx", - lineNumber: 348, + lineNumber: 354, columnNumber: 21 }, this), member.email && /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { @@ -5323,7 +5588,7 @@ function MemberProfilePage() { children: "邮箱" }, void 0, false, { fileName: "[project]/Documents/go-new/chinese-family-tree/app/members/[id]/page.tsx", - lineNumber: 359, + lineNumber: 365, columnNumber: 23 }, this), /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("dd", { @@ -5334,18 +5599,18 @@ function MemberProfilePage() { children: member.email }, void 0, false, { fileName: "[project]/Documents/go-new/chinese-family-tree/app/members/[id]/page.tsx", - lineNumber: 361, + lineNumber: 367, columnNumber: 25 }, this) }, void 0, false, { fileName: "[project]/Documents/go-new/chinese-family-tree/app/members/[id]/page.tsx", - lineNumber: 360, + lineNumber: 366, columnNumber: 23 }, this) ] }, void 0, true, { fileName: "[project]/Documents/go-new/chinese-family-tree/app/members/[id]/page.tsx", - lineNumber: 358, + lineNumber: 364, columnNumber: 21 }, this), member.address && /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { @@ -5355,7 +5620,7 @@ function MemberProfilePage() { children: "现居地址" }, void 0, false, { fileName: "[project]/Documents/go-new/chinese-family-tree/app/members/[id]/page.tsx", - lineNumber: 369, + lineNumber: 375, columnNumber: 23 }, this), /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("dd", { @@ -5363,49 +5628,49 @@ function MemberProfilePage() { children: member.address }, void 0, false, { fileName: "[project]/Documents/go-new/chinese-family-tree/app/members/[id]/page.tsx", - lineNumber: 370, + lineNumber: 376, columnNumber: 23 }, this) ] }, void 0, true, { fileName: "[project]/Documents/go-new/chinese-family-tree/app/members/[id]/page.tsx", - lineNumber: 368, + lineNumber: 374, columnNumber: 21 }, this) ] }, void 0, true, { fileName: "[project]/Documents/go-new/chinese-family-tree/app/members/[id]/page.tsx", - lineNumber: 336, + lineNumber: 342, columnNumber: 17 }, this) ] }, void 0, true, { fileName: "[project]/Documents/go-new/chinese-family-tree/app/members/[id]/page.tsx", - lineNumber: 334, + lineNumber: 340, columnNumber: 15 }, this) ] }, void 0, true, { fileName: "[project]/Documents/go-new/chinese-family-tree/app/members/[id]/page.tsx", - lineNumber: 299, + lineNumber: 305, columnNumber: 11 }, this) ] }, void 0, true, { fileName: "[project]/Documents/go-new/chinese-family-tree/app/members/[id]/page.tsx", - lineNumber: 159, + lineNumber: 165, columnNumber: 9 }, this) ] }, void 0, true, { fileName: "[project]/Documents/go-new/chinese-family-tree/app/members/[id]/page.tsx", - lineNumber: 88, + lineNumber: 94, columnNumber: 7 }, this) ] }, void 0, true, { fileName: "[project]/Documents/go-new/chinese-family-tree/app/members/[id]/page.tsx", - lineNumber: 86, + lineNumber: 92, columnNumber: 5 }, this); } diff --git a/.next/dev/server/chunks/ssr/[root-of-the-server]__10b90bc2._.js.map b/.next/dev/server/chunks/ssr/[root-of-the-server]__10b90bc2._.js.map index 2c2ad073..d17c1764 100644 --- a/.next/dev/server/chunks/ssr/[root-of-the-server]__10b90bc2._.js.map +++ b/.next/dev/server/chunks/ssr/[root-of-the-server]__10b90bc2._.js.map @@ -4,14 +4,14 @@ "sections": [ {"offset": {"line": 4, "column": 0}, "map": {"version":3,"sources":["file:///Users/freedak/Documents/go-new/chinese-family-tree/components/ui/avatar.tsx"],"sourcesContent":["'use client'\n\nimport * as React from 'react'\nimport * as AvatarPrimitive from '@radix-ui/react-avatar'\n\nimport { cn } from '@/lib/utils'\n\nfunction Avatar({\n className,\n ...props\n}: React.ComponentProps) {\n return (\n \n )\n}\n\nfunction AvatarImage({\n className,\n ...props\n}: React.ComponentProps) {\n return (\n \n )\n}\n\nfunction AvatarFallback({\n className,\n ...props\n}: React.ComponentProps) {\n return (\n \n )\n}\n\nexport { Avatar, AvatarImage, AvatarFallback }\n"],"names":[],"mappings":";;;;;;;;;AAGA;AAEA;AALA;;;;AAOA,SAAS,OAAO,EACd,SAAS,EACT,GAAG,OAC+C;IAClD,qBACE,oaAAC,qbAAoB;QACnB,aAAU;QACV,WAAW,IAAA,yKAAE,EACX,8DACA;QAED,GAAG,KAAK;;;;;;AAGf;AAEA,SAAS,YAAY,EACnB,SAAS,EACT,GAAG,OACgD;IACnD,qBACE,oaAAC,sbAAqB;QACpB,aAAU;QACV,WAAW,IAAA,yKAAE,EAAC,2BAA2B;QACxC,GAAG,KAAK;;;;;;AAGf;AAEA,SAAS,eAAe,EACtB,SAAS,EACT,GAAG,OACmD;IACtD,qBACE,oaAAC,ybAAwB;QACvB,aAAU;QACV,WAAW,IAAA,yKAAE,EACX,oEACA;QAED,GAAG,KAAK;;;;;;AAGf"}}, {"offset": {"line": 57, "column": 0}, "map": {"version":3,"sources":["file:///Users/freedak/Documents/go-new/chinese-family-tree/components/ui/dropdown-menu.tsx"],"sourcesContent":["'use client'\n\nimport * as React from 'react'\nimport * as DropdownMenuPrimitive from '@radix-ui/react-dropdown-menu'\nimport { CheckIcon, ChevronRightIcon, CircleIcon } from 'lucide-react'\n\nimport { cn } from '@/lib/utils'\n\nfunction DropdownMenu({\n ...props\n}: React.ComponentProps) {\n return \n}\n\nfunction DropdownMenuPortal({\n ...props\n}: React.ComponentProps) {\n return (\n \n )\n}\n\nfunction DropdownMenuTrigger({\n ...props\n}: React.ComponentProps) {\n return (\n \n )\n}\n\nfunction DropdownMenuContent({\n className,\n sideOffset = 4,\n ...props\n}: React.ComponentProps) {\n return (\n \n \n \n )\n}\n\nfunction DropdownMenuGroup({\n ...props\n}: React.ComponentProps) {\n return (\n \n )\n}\n\nfunction DropdownMenuItem({\n className,\n inset,\n variant = 'default',\n ...props\n}: React.ComponentProps & {\n inset?: boolean\n variant?: 'default' | 'destructive'\n}) {\n return (\n \n )\n}\n\nfunction DropdownMenuCheckboxItem({\n className,\n children,\n checked,\n ...props\n}: React.ComponentProps) {\n return (\n \n \n \n \n \n \n {children}\n \n )\n}\n\nfunction DropdownMenuRadioGroup({\n ...props\n}: React.ComponentProps) {\n return (\n \n )\n}\n\nfunction DropdownMenuRadioItem({\n className,\n children,\n ...props\n}: React.ComponentProps) {\n return (\n \n \n \n \n \n \n {children}\n \n )\n}\n\nfunction DropdownMenuLabel({\n className,\n inset,\n ...props\n}: React.ComponentProps & {\n inset?: boolean\n}) {\n return (\n \n )\n}\n\nfunction DropdownMenuSeparator({\n className,\n ...props\n}: React.ComponentProps) {\n return (\n \n )\n}\n\nfunction DropdownMenuShortcut({\n className,\n ...props\n}: React.ComponentProps<'span'>) {\n return (\n \n )\n}\n\nfunction DropdownMenuSub({\n ...props\n}: React.ComponentProps) {\n return \n}\n\nfunction DropdownMenuSubTrigger({\n className,\n inset,\n children,\n ...props\n}: React.ComponentProps & {\n inset?: boolean\n}) {\n return (\n \n {children}\n \n \n )\n}\n\nfunction DropdownMenuSubContent({\n className,\n ...props\n}: React.ComponentProps) {\n return (\n \n )\n}\n\nexport {\n DropdownMenu,\n DropdownMenuPortal,\n DropdownMenuTrigger,\n DropdownMenuContent,\n DropdownMenuGroup,\n DropdownMenuLabel,\n DropdownMenuItem,\n DropdownMenuCheckboxItem,\n DropdownMenuRadioGroup,\n DropdownMenuRadioItem,\n DropdownMenuSeparator,\n DropdownMenuShortcut,\n DropdownMenuSub,\n DropdownMenuSubTrigger,\n DropdownMenuSubContent,\n}\n"],"names":[],"mappings":"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"}}, - {"offset": {"line": 332, "column": 0}, "map": {"version":3,"sources":["file:///Users/freedak/Documents/go-new/chinese-family-tree/components/site-header.tsx"],"sourcesContent":["\"use client\"\n\nimport Link from \"next/link\"\nimport { BookOpen, Search, Bell, Settings, LogOut, User, ChevronDown, Plus, Trash2, Network, LayoutGrid } from \"lucide-react\"\nimport { Button } from \"@/components/ui/button\"\nimport { Input } from \"@/components/ui/input\"\nimport { Avatar, AvatarFallback, AvatarImage } from \"@/components/ui/avatar\"\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuLabel,\n DropdownMenuSeparator,\n DropdownMenuTrigger,\n} from \"@/components/ui/dropdown-menu\"\nimport { useFamily } from \"@/context/family-context\"\nimport { useState, useRef, useEffect, useCallback } from \"react\"\nimport { useRouter, usePathname, useSearchParams } from \"next/navigation\"\nimport { useSession, signOut } from \"next-auth/react\"\nimport { useDialog } from \"@/components/ui/alert-dialog-custom\"\n\ninterface FamilyTree {\n id: string\n name: string\n description: string | null\n ownerId: string\n currentUserRole?: \"OWNER\" | \"EDITOR\" | \"VIEWER\"\n}\n\nexport function SiteHeader() {\n const { searchMembers, searchResults } = useFamily()\n const { data: session, status } = useSession()\n const { showAlert, showConfirm, showPrompt } = useDialog()\n const pathname = usePathname()\n const searchParams = useSearchParams()\n const [searchQuery, setSearchQuery] = useState(\"\")\n const [showResults, setShowResults] = useState(false)\n const [familyTrees, setFamilyTrees] = useState([])\n const [currentTree, setCurrentTree] = useState(null)\n const [deletingTreeId, setDeletingTreeId] = useState(null)\n const searchRef = useRef(null)\n const router = useRouter()\n \n // 获取当前视图模式\n const currentViewMode = searchParams.get('view') || 'traditional'\n const isTreePage = pathname === '/tree'\n\n // 生成带有 treeId 的 URL\n const getUrlWithTreeId = (path: string) => {\n if (currentTree?.id) {\n return `${path}?treeId=${currentTree.id}`\n }\n return path\n }\n\n // 切换视图模式\n const handleViewModeChange = (mode: string) => {\n const params = new URLSearchParams(searchParams.toString())\n params.set('view', mode)\n if (currentTree?.id) {\n params.set('treeId', currentTree.id)\n }\n router.push(`${pathname}?${params.toString()}`)\n }\n\n const getRoleBadge = (role?: string) => {\n switch (role) {\n case \"OWNER\":\n return 所有者\n case \"EDITOR\":\n return 编辑\n case \"VIEWER\":\n return 查看\n default:\n return null\n }\n }\n\n const handleSignOut = async () => {\n await signOut({ callbackUrl: \"/auth/signin\" })\n }\n\n // 获取用户名首字母作为头像\n const getUserInitial = () => {\n if (session?.user?.name) {\n return session.user.name.charAt(0).toUpperCase()\n }\n if (session?.user?.email) {\n return session.user.email.charAt(0).toUpperCase()\n }\n return \"U\"\n }\n\n // 删除家族树\n const handleDeleteTree = async (tree: FamilyTree, e: React.MouseEvent) => {\n e.stopPropagation() // 阻止触发选择事件\n\n // 检查权限\n if (tree.ownerId !== session?.user?.id) {\n await showAlert('只有家族树的创建者才能删除', '权限不足')\n return\n }\n\n const confirmText = `确定要删除家族树\"${tree.name}\"吗?\\n\\n此操作将永久删除所有成员、活动日志和协作者数据,且不可撤销!`\n const confirmed = await showConfirm(confirmText, '删除家族树', 'destructive')\n if (!confirmed) {\n return\n }\n\n // 二次确认\n const finalConfirm = await showPrompt(\n `请输入家族树名称\"${tree.name}\"以确认删除:`,\n '',\n '确认删除'\n )\n if (finalConfirm !== tree.name) {\n await showAlert('名称不匹配,删除已取消', '操作已取消')\n return\n }\n\n setDeletingTreeId(tree.id)\n try {\n const response = await fetch(`/api/trees/${tree.id}`, {\n method: 'DELETE',\n })\n\n if (!response.ok) {\n const error = await response.json()\n throw new Error(error.error || '删除失败')\n }\n\n // 刷新家族树列表\n await loadFamilyTrees()\n \n // 如果删除的是当前树,跳转到首页\n if (currentTree?.id === tree.id) {\n window.location.href = '/'\n }\n } catch (error) {\n console.error('删除家族树失败:', error)\n await showAlert('删除失败:' + (error as Error).message, '错误')\n } finally {\n setDeletingTreeId(null)\n }\n }\n\n // 获取家族树列表\n const loadFamilyTrees = useCallback(() => {\n if (!session?.user?.id || status !== 'authenticated') return\n\n const controller = new AbortController()\n \n fetch('/api/trees', { signal: controller.signal })\n .then(res => {\n if (!res.ok) throw new Error(`HTTP error! status: ${res.status}`)\n return res.json()\n })\n .then(data => {\n if (data.trees) {\n setFamilyTrees(data.trees)\n // 如果 URL 中有 treeId,使用该树,否则使用第一个\n const urlParams = new URLSearchParams(window.location.search)\n const treeId = urlParams.get('treeId')\n if (treeId) {\n const tree = data.trees.find((t: FamilyTree) => t.id === treeId)\n if (tree) {\n setCurrentTree(tree)\n } else if (data.trees.length > 0) {\n setCurrentTree(data.trees[0])\n }\n } else if (data.trees.length > 0) {\n setCurrentTree(data.trees[0])\n }\n }\n })\n .catch(err => {\n // 忽略 abort 错误和 fetch 错误(可能是页面切换导致的)\n if (err.name !== 'AbortError' && err.message !== 'Failed to fetch') {\n console.error('获取家族树列表失败:', err)\n }\n })\n \n return () => controller.abort()\n }, [session?.user?.id, status])\n\n useEffect(() => {\n loadFamilyTrees()\n }, [loadFamilyTrees])\n\n // 监听路由变化,刷新家族树列表\n useEffect(() => {\n const handleRouteChange = () => {\n loadFamilyTrees()\n }\n \n window.addEventListener('focus', handleRouteChange)\n return () => window.removeEventListener('focus', handleRouteChange)\n }, [loadFamilyTrees])\n\n // 点击外部关闭搜索结果\n useEffect(() => {\n function handleClickOutside(event: MouseEvent) {\n if (searchRef.current && !searchRef.current.contains(event.target as Node)) {\n setShowResults(false)\n }\n }\n document.addEventListener(\"mousedown\", handleClickOutside)\n return () => document.removeEventListener(\"mousedown\", handleClickOutside)\n }, [])\n\n const handleSearch = (query: string) => {\n setSearchQuery(query)\n searchMembers(query)\n setShowResults(query.length > 0)\n }\n\n const handleSelectMember = (memberId: string) => {\n router.push(`/members/${memberId}`)\n setSearchQuery(\"\")\n setShowResults(false)\n }\n\n return (\n
\n
\n
\n \n
\n \n
\n 华夏谱\n \n \n {/* 家族树选择器 */}\n {session && familyTrees.length > 0 && (\n \n \n \n \n \n 我的家族树\n \n {familyTrees.map((tree) => (\n {\n setCurrentTree(tree)\n // 保持当前路径,只更新 treeId 参数\n const currentPath = window.location.pathname\n router.push(`${currentPath}?treeId=${tree.id}`)\n }}\n className=\"cursor-pointer flex items-center justify-between group\"\n >\n
\n {tree.name}\n {getRoleBadge(tree.currentUserRole)}\n
\n
\n {currentTree?.id === tree.id && (\n \n )}\n {tree.ownerId === session?.user?.id && (\n handleDeleteTree(tree, e)}\n disabled={deletingTreeId === tree.id}\n >\n \n \n )}\n
\n \n ))}\n \n router.push('/trees/new')}\n className=\"cursor-pointer text-primary\"\n >\n \n 创建新家族树\n \n
\n
\n )}\n
\n\n \n\n
\n \n\n \n\n \n \n \n\n {status === \"loading\" ? (\n \n ...\n \n ) : session ? (\n \n \n \n \n \n \n
\n

{session.user?.name || \"用户\"}

\n

\n {session.user?.email}\n

\n
\n
\n \n \n \n \n 系统设置\n \n \n \n \n \n 退出登录\n \n
\n
\n ) : (\n \n \n \n )}\n
\n
\n
\n )\n}\n"],"names":[],"mappings":"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"}}, - {"offset": {"line": 1187, "column": 0}, "map": {"version":3,"sources":["file:///Users/freedak/Documents/go-new/chinese-family-tree/components/ui/textarea.tsx"],"sourcesContent":["import * as React from 'react'\n\nimport { cn } from '@/lib/utils'\n\nfunction Textarea({ className, ...props }: React.ComponentProps<'textarea'>) {\n return (\n \n )\n}\n\nexport { Textarea }\n"],"names":[],"mappings":";;;;;AAEA;;;AAEA,SAAS,SAAS,EAAE,SAAS,EAAE,GAAG,OAAyC;IACzE,qBACE,oaAAC;QACC,aAAU;QACV,WAAW,IAAA,yKAAE,EACX,ucACA;QAED,GAAG,KAAK;;;;;;AAGf"}}, - {"offset": {"line": 1211, "column": 0}, "map": {"version":3,"sources":["file:///Users/freedak/Documents/go-new/chinese-family-tree/components/ui/select.tsx"],"sourcesContent":["'use client'\n\nimport * as React from 'react'\nimport * as SelectPrimitive from '@radix-ui/react-select'\nimport { CheckIcon, ChevronDownIcon, ChevronUpIcon } from 'lucide-react'\n\nimport { cn } from '@/lib/utils'\n\nfunction Select({\n ...props\n}: React.ComponentProps) {\n return \n}\n\nfunction SelectGroup({\n ...props\n}: React.ComponentProps) {\n return \n}\n\nfunction SelectValue({\n ...props\n}: React.ComponentProps) {\n return \n}\n\nfunction SelectTrigger({\n className,\n size = 'default',\n children,\n ...props\n}: React.ComponentProps & {\n size?: 'sm' | 'default'\n}) {\n return (\n \n {children}\n \n \n \n \n )\n}\n\nfunction SelectContent({\n className,\n children,\n position = 'popper',\n ...props\n}: React.ComponentProps) {\n return (\n \n \n \n \n {children}\n \n \n \n \n )\n}\n\nfunction SelectLabel({\n className,\n ...props\n}: React.ComponentProps) {\n return (\n \n )\n}\n\nfunction SelectItem({\n className,\n children,\n ...props\n}: React.ComponentProps) {\n return (\n \n \n \n \n \n \n {children}\n \n )\n}\n\nfunction SelectSeparator({\n className,\n ...props\n}: React.ComponentProps) {\n return (\n \n )\n}\n\nfunction SelectScrollUpButton({\n className,\n ...props\n}: React.ComponentProps) {\n return (\n \n \n \n )\n}\n\nfunction SelectScrollDownButton({\n className,\n ...props\n}: React.ComponentProps) {\n return (\n \n \n \n )\n}\n\nexport {\n Select,\n SelectContent,\n SelectGroup,\n SelectItem,\n SelectLabel,\n SelectScrollDownButton,\n SelectScrollUpButton,\n SelectSeparator,\n SelectTrigger,\n SelectValue,\n}\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AAGA;AACA;AAAA;AAAA;AAEA;AANA;;;;;AAQA,SAAS,OAAO,EACd,GAAG,OAC+C;IAClD,qBAAO,oaAAC,qbAAoB;QAAC,aAAU;QAAU,GAAG,KAAK;;;;;;AAC3D;AAEA,SAAS,YAAY,EACnB,GAAG,OACgD;IACnD,qBAAO,oaAAC,sbAAqB;QAAC,aAAU;QAAgB,GAAG,KAAK;;;;;;AAClE;AAEA,SAAS,YAAY,EACnB,GAAG,OACgD;IACnD,qBAAO,oaAAC,sbAAqB;QAAC,aAAU;QAAgB,GAAG,KAAK;;;;;;AAClE;AAEA,SAAS,cAAc,EACrB,SAAS,EACT,OAAO,SAAS,EAChB,QAAQ,EACR,GAAG,OAGJ;IACC,qBACE,oaAAC,wbAAuB;QACtB,aAAU;QACV,aAAW;QACX,WAAW,IAAA,yKAAE,EACX,gzBACA;QAED,GAAG,KAAK;;YAER;0BACD,oaAAC,qbAAoB;gBAAC,OAAO;0BAC3B,cAAA,oaAAC,sXAAe;oBAAC,WAAU;;;;;;;;;;;;;;;;;AAInC;AAEA,SAAS,cAAc,EACrB,SAAS,EACT,QAAQ,EACR,WAAW,QAAQ,EACnB,GAAG,OACkD;IACrD,qBACE,oaAAC,ubAAsB;kBACrB,cAAA,oaAAC,wbAAuB;YACtB,aAAU;YACV,WAAW,IAAA,yKAAE,EACX,ijBACA,aAAa,YACX,mIACF;YAEF,UAAU;YACT,GAAG,KAAK;;8BAET,oaAAC;;;;;8BACD,oaAAC,ybAAwB;oBACvB,WAAW,IAAA,yKAAE,EACX,OACA,aAAa,YACX;8BAGH;;;;;;8BAEH,oaAAC;;;;;;;;;;;;;;;;AAIT;AAEA,SAAS,YAAY,EACnB,SAAS,EACT,GAAG,OACgD;IACnD,qBACE,oaAAC,sbAAqB;QACpB,aAAU;QACV,WAAW,IAAA,yKAAE,EAAC,6CAA6C;QAC1D,GAAG,KAAK;;;;;;AAGf;AAEA,SAAS,WAAW,EAClB,SAAS,EACT,QAAQ,EACR,GAAG,OAC+C;IAClD,qBACE,oaAAC,qbAAoB;QACnB,aAAU;QACV,WAAW,IAAA,yKAAE,EACX,6aACA;QAED,GAAG,KAAK;;0BAET,oaAAC;gBAAK,WAAU;0BACd,cAAA,oaAAC,8bAA6B;8BAC5B,cAAA,oaAAC,gWAAS;wBAAC,WAAU;;;;;;;;;;;;;;;;0BAGzB,oaAAC,ybAAwB;0BAAE;;;;;;;;;;;;AAGjC;AAEA,SAAS,gBAAgB,EACvB,SAAS,EACT,GAAG,OACoD;IACvD,qBACE,oaAAC,0bAAyB;QACxB,aAAU;QACV,WAAW,IAAA,yKAAE,EAAC,iDAAiD;QAC9D,GAAG,KAAK;;;;;;AAGf;AAEA,SAAS,qBAAqB,EAC5B,SAAS,EACT,GAAG,OACyD;IAC5D,qBACE,oaAAC,+bAA8B;QAC7B,aAAU;QACV,WAAW,IAAA,yKAAE,EACX,wDACA;QAED,GAAG,KAAK;kBAET,cAAA,oaAAC,gXAAa;YAAC,WAAU;;;;;;;;;;;AAG/B;AAEA,SAAS,uBAAuB,EAC9B,SAAS,EACT,GAAG,OAC2D;IAC9D,qBACE,oaAAC,icAAgC;QAC/B,aAAU;QACV,WAAW,IAAA,yKAAE,EACX,wDACA;QAED,GAAG,KAAK;kBAET,cAAA,oaAAC,sXAAe;YAAC,WAAU;;;;;;;;;;;AAGjC"}}, - {"offset": {"line": 1444, "column": 0}, "map": {"version":3,"sources":["file:///Users/freedak/Documents/go-new/chinese-family-tree/components/ui/dialog.tsx"],"sourcesContent":["'use client'\n\nimport * as React from 'react'\nimport * as DialogPrimitive from '@radix-ui/react-dialog'\nimport { XIcon } from 'lucide-react'\n\nimport { cn } from '@/lib/utils'\n\nfunction Dialog({\n ...props\n}: React.ComponentProps) {\n return \n}\n\nfunction DialogTrigger({\n ...props\n}: React.ComponentProps) {\n return \n}\n\nfunction DialogPortal({\n ...props\n}: React.ComponentProps) {\n return \n}\n\nfunction DialogClose({\n ...props\n}: React.ComponentProps) {\n return \n}\n\nfunction DialogOverlay({\n className,\n ...props\n}: React.ComponentProps) {\n return (\n \n )\n}\n\nfunction DialogContent({\n className,\n children,\n showCloseButton = true,\n ...props\n}: React.ComponentProps & {\n showCloseButton?: boolean\n}) {\n return (\n \n \n \n {children}\n {showCloseButton && (\n \n \n Close\n \n )}\n \n \n )\n}\n\nfunction DialogHeader({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n \n )\n}\n\nfunction DialogFooter({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n \n )\n}\n\nfunction DialogTitle({\n className,\n ...props\n}: React.ComponentProps) {\n return (\n \n )\n}\n\nfunction DialogDescription({\n className,\n ...props\n}: React.ComponentProps) {\n return (\n \n )\n}\n\nexport {\n Dialog,\n DialogClose,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogOverlay,\n DialogPortal,\n DialogTitle,\n DialogTrigger,\n}\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AAGA;AACA;AAEA;AANA;;;;;AAQA,SAAS,OAAO,EACd,GAAG,OAC+C;IAClD,qBAAO,oaAAC,qbAAoB;QAAC,aAAU;QAAU,GAAG,KAAK;;;;;;AAC3D;AAEA,SAAS,cAAc,EACrB,GAAG,OACkD;IACrD,qBAAO,oaAAC,wbAAuB;QAAC,aAAU;QAAkB,GAAG,KAAK;;;;;;AACtE;AAEA,SAAS,aAAa,EACpB,GAAG,OACiD;IACpD,qBAAO,oaAAC,ubAAsB;QAAC,aAAU;QAAiB,GAAG,KAAK;;;;;;AACpE;AAEA,SAAS,YAAY,EACnB,GAAG,OACgD;IACnD,qBAAO,oaAAC,sbAAqB;QAAC,aAAU;QAAgB,GAAG,KAAK;;;;;;AAClE;AAEA,SAAS,cAAc,EACrB,SAAS,EACT,GAAG,OACkD;IACrD,qBACE,oaAAC,wbAAuB;QACtB,aAAU;QACV,WAAW,IAAA,yKAAE,EACX,0JACA;QAED,GAAG,KAAK;;;;;;AAGf;AAEA,SAAS,cAAc,EACrB,SAAS,EACT,QAAQ,EACR,kBAAkB,IAAI,EACtB,GAAG,OAGJ;IACC,qBACE,oaAAC;QAAa,aAAU;;0BACtB,oaAAC;;;;;0BACD,oaAAC,wbAAuB;gBACtB,aAAU;gBACV,WAAW,IAAA,yKAAE,EACX,+WACA;gBAED,GAAG,KAAK;;oBAER;oBACA,iCACC,oaAAC,sbAAqB;wBACpB,aAAU;wBACV,WAAU;;0CAEV,oaAAC,oVAAK;;;;;0CACN,oaAAC;gCAAK,WAAU;0CAAU;;;;;;;;;;;;;;;;;;;;;;;;AAMtC;AAEA,SAAS,aAAa,EAAE,SAAS,EAAE,GAAG,OAAoC;IACxE,qBACE,oaAAC;QACC,aAAU;QACV,WAAW,IAAA,yKAAE,EAAC,gDAAgD;QAC7D,GAAG,KAAK;;;;;;AAGf;AAEA,SAAS,aAAa,EAAE,SAAS,EAAE,GAAG,OAAoC;IACxE,qBACE,oaAAC;QACC,aAAU;QACV,WAAW,IAAA,yKAAE,EACX,0DACA;QAED,GAAG,KAAK;;;;;;AAGf;AAEA,SAAS,YAAY,EACnB,SAAS,EACT,GAAG,OACgD;IACnD,qBACE,oaAAC,sbAAqB;QACpB,aAAU;QACV,WAAW,IAAA,yKAAE,EAAC,sCAAsC;QACnD,GAAG,KAAK;;;;;;AAGf;AAEA,SAAS,kBAAkB,EACzB,SAAS,EACT,GAAG,OACsD;IACzD,qBACE,oaAAC,4bAA2B;QAC1B,aAAU;QACV,WAAW,IAAA,yKAAE,EAAC,iCAAiC;QAC9C,GAAG,KAAK;;;;;;AAGf"}}, - {"offset": {"line": 1626, "column": 0}, "map": {"version":3,"sources":["file:///Users/freedak/Documents/go-new/chinese-family-tree/lib/db.ts"],"sourcesContent":["import Dexie, { type Table } from \"dexie\"\nimport type { FamilyMember } from \"@/types/family\"\n\nexport interface GlobalSettings {\n key: string\n value: any\n}\n\nexport interface StoredImage {\n id: string\n blob: Blob\n mimeType: string\n createdAt: string\n}\n\nexport interface ActivityLog {\n id: string\n action: \"create\" | \"update\" | \"delete\" | \"import\" | \"export\"\n entityType: \"member\" | \"photo\" | \"story\" | \"settings\"\n entityId?: string\n entityName?: string\n changes?: any\n timestamp: string\n userId?: string\n userName?: string\n}\n\nexport class FamilyTreeDB extends Dexie {\n members!: Table\n settings!: Table\n images!: Table\n activityLogs!: Table\n\n constructor() {\n super(\"FamilyTreeDB\")\n this.version(1).stores({\n members: \"id, fullName, fatherId, motherId, [fatherId+motherId]\", // Index for searching\n settings: \"key\", // Key-value store for rootId etc.\n images: \"id\", // Store images by ID\n })\n this.version(2).stores({\n members: \"id, fullName, fatherId, motherId, [fatherId+motherId]\", // Index for searching\n settings: \"key\", // Key-value store for rootId etc.\n images: \"id\", // Store images by ID\n activityLogs: \"id, timestamp, action, entityType, entityId\",\n })\n }\n}\n\nexport const db = new FamilyTreeDB()\n"],"names":[],"mappings":";;;;;;AAAA;;AA2BO,MAAM,qBAAqB,+PAAK;IACrC,QAA6B;IAC7B,SAAgC;IAChC,OAA2B;IAC3B,aAAiC;IAEjC,aAAc;QACZ,KAAK,CAAC;QACN,IAAI,CAAC,OAAO,CAAC,GAAG,MAAM,CAAC;YACrB,SAAS;YACT,UAAU;YACV,QAAQ;QACV;QACA,IAAI,CAAC,OAAO,CAAC,GAAG,MAAM,CAAC;YACrB,SAAS;YACT,UAAU;YACV,QAAQ;YACR,cAAc;QAChB;IACF;AACF;AAEO,MAAM,KAAK,IAAI"}}, - {"offset": {"line": 1665, "column": 0}, "map": {"version":3,"sources":["file:///Users/freedak/Documents/go-new/chinese-family-tree/components/ui/image-upload.tsx"],"sourcesContent":["\"use client\"\n\nimport { useState, useRef, useEffect } from \"react\"\nimport { Button } from \"@/components/ui/button\"\nimport { Avatar, AvatarFallback, AvatarImage } from \"@/components/ui/avatar\"\nimport { Dialog, DialogContent, DialogHeader, DialogTitle, DialogFooter } from \"@/components/ui/dialog\"\nimport { Upload, X, Loader2, Crop } from \"lucide-react\"\nimport { db } from \"@/lib/db\"\nimport { v4 as uuidv4 } from \"uuid\"\nimport ReactCrop, { type Crop as CropType } from \"react-image-crop\"\nimport \"react-image-crop/dist/ReactCrop.css\"\nimport imageCompression from \"browser-image-compression\"\n\ninterface ImageUploadProps {\n value?: string // The image ID\n onChange: (imageId: string | undefined) => void\n className?: string\n}\n\nexport function ImageUpload({ value, onChange, className }: ImageUploadProps) {\n const [previewUrl, setPreviewUrl] = useState(undefined)\n const [isLoading, setIsLoading] = useState(false)\n const [showCropDialog, setShowCropDialog] = useState(false)\n const [imageToCrop, setImageToCrop] = useState(null)\n const [crop, setCrop] = useState()\n const [completedCrop, setCompletedCrop] = useState()\n const imgRef = useRef(null)\n const fileInputRef = useRef(null)\n\n // Load preview if value (imageId) exists\n useEffect(() => {\n let objectUrl: string | undefined\n\n const loadPreview = async () => {\n if (!value) {\n setPreviewUrl(undefined)\n return\n }\n\n try {\n const image = await db.images.get(value)\n if (image) {\n objectUrl = URL.createObjectURL(image.blob)\n setPreviewUrl(objectUrl)\n }\n } catch (error) {\n console.error(\"Failed to load image:\", error)\n }\n }\n\n loadPreview()\n\n return () => {\n if (objectUrl) URL.revokeObjectURL(objectUrl)\n }\n }, [value])\n\n const handleFileSelect = async (e: React.ChangeEvent) => {\n const file = e.target.files?.[0]\n if (!file) return\n\n try {\n // Basic validation\n if (!file.type.startsWith(\"image/\")) {\n alert(\"请选择图片文件\")\n return\n }\n\n // 压缩图片\n const options = {\n maxSizeMB: 1,\n maxWidthOrHeight: 1024,\n useWebWorker: true,\n }\n \n const compressedFile = await imageCompression(file, options)\n \n // 显示裁剪对话框\n const reader = new FileReader()\n reader.onload = () => {\n setImageToCrop(reader.result as string)\n setShowCropDialog(true)\n }\n reader.readAsDataURL(compressedFile)\n } catch (error) {\n console.error(\"Failed to process image:\", error)\n alert(\"图片处理失败\")\n } finally {\n // Reset input\n if (fileInputRef.current) fileInputRef.current.value = \"\"\n }\n }\n\n const handleCropComplete = async () => {\n if (!completedCrop || !imgRef.current) {\n // 如果没有裁剪,直接保存原图\n await saveImage(imageToCrop!)\n return\n }\n\n try {\n setIsLoading(true)\n const canvas = document.createElement('canvas')\n const scaleX = imgRef.current.naturalWidth / imgRef.current.width\n const scaleY = imgRef.current.naturalHeight / imgRef.current.height\n \n canvas.width = completedCrop.width\n canvas.height = completedCrop.height\n const ctx = canvas.getContext('2d')\n\n if (ctx) {\n ctx.drawImage(\n imgRef.current,\n completedCrop.x * scaleX,\n completedCrop.y * scaleY,\n completedCrop.width * scaleX,\n completedCrop.height * scaleY,\n 0,\n 0,\n completedCrop.width,\n completedCrop.height\n )\n }\n\n canvas.toBlob(async (blob) => {\n if (blob) {\n await saveImage(URL.createObjectURL(blob), blob)\n }\n }, 'image/jpeg', 0.9)\n } catch (error) {\n console.error(\"Failed to crop image:\", error)\n alert(\"图片裁剪失败\")\n } finally {\n setIsLoading(false)\n setShowCropDialog(false)\n setImageToCrop(null)\n }\n }\n\n const saveImage = async (dataUrl: string, blob?: Blob) => {\n try {\n setIsLoading(true)\n \n let imageBlob = blob\n if (!imageBlob) {\n const response = await fetch(dataUrl)\n imageBlob = await response.blob()\n }\n\n const imageId = uuidv4()\n await db.images.add({\n id: imageId,\n blob: imageBlob,\n mimeType: imageBlob.type,\n createdAt: new Date().toISOString(),\n })\n\n onChange(imageId)\n setShowCropDialog(false)\n setImageToCrop(null)\n } catch (error) {\n console.error(\"Failed to save image:\", error)\n alert(\"图片保存失败\")\n } finally {\n setIsLoading(false)\n }\n }\n\n const handleRemove = () => {\n onChange(undefined)\n }\n\n return (\n <>\n
\n \n \n \n {isLoading ? : }\n \n \n\n
\n \n fileInputRef.current?.click()}\n disabled={isLoading}\n >\n {value ? \"更换头像\" : \"上传头像\"}\n \n {value && (\n \n 移除\n \n )}\n
\n
\n\n {/* 裁剪对话框 */}\n \n \n \n \n \n 裁剪图片\n \n \n
\n {imageToCrop && (\n setCrop(c)}\n onComplete={(c) => setCompletedCrop(c)}\n aspect={1}\n circularCrop\n >\n \n \n )}\n
\n \n {\n setShowCropDialog(false)\n setImageToCrop(null)\n }}\n >\n 取消\n \n \n \n
\n
\n \n )\n}\n"],"names":[],"mappings":"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"}}, - {"offset": {"line": 2032, "column": 0}, "map": {"version":3,"sources":["file:///Users/freedak/Documents/go-new/chinese-family-tree/components/members/photo-gallery.tsx"],"sourcesContent":["\"use client\"\n\nimport { useState, useEffect } from \"react\"\nimport { db } from \"@/lib/db\"\nimport { Button } from \"@/components/ui/button\"\nimport { Card } from \"@/components/ui/card\"\nimport { Dialog, DialogContent, DialogHeader, DialogTitle } from \"@/components/ui/dialog\"\nimport { X, Upload, Image as ImageIcon, Plus, ZoomIn } from \"lucide-react\"\nimport { useDialog } from \"@/components/ui/alert-dialog-custom\"\nimport { v4 as uuidv4 } from \"uuid\"\nimport imageCompression from \"browser-image-compression\"\n\ninterface PhotoGalleryProps {\n photoIds?: string[]\n onChange: (photoIds: string[]) => void\n readonly?: boolean\n}\n\nexport function PhotoGallery({ photoIds = [], onChange, readonly = false }: PhotoGalleryProps) {\n const { showAlert, showConfirm } = useDialog()\n const [photos, setPhotos] = useState<{ id: string; url: string }[]>([])\n const [selectedPhoto, setSelectedPhoto] = useState(null)\n const [isUploading, setIsUploading] = useState(false)\n\n // 加载照片\n useEffect(() => {\n const loadPhotos = async () => {\n const loadedPhotos = await Promise.all(\n photoIds.map(async (id) => {\n try {\n const image = await db.images.get(id)\n if (image) {\n const url = URL.createObjectURL(image.blob)\n return { id, url }\n }\n } catch (error) {\n console.error('加载照片失败:', error)\n }\n return null\n })\n )\n setPhotos(loadedPhotos.filter(Boolean) as { id: string; url: string }[])\n }\n\n if (photoIds.length > 0) {\n loadPhotos()\n }\n\n // 清理 URL\n return () => {\n photos.forEach(photo => URL.revokeObjectURL(photo.url))\n }\n }, [photoIds])\n\n const handleUpload = async (e: React.ChangeEvent) => {\n const files = e.target.files\n if (!files || files.length === 0) return\n\n setIsUploading(true)\n try {\n const newPhotoIds: string[] = []\n\n for (const file of Array.from(files)) {\n if (!file.type.startsWith('image/')) continue\n\n // 压缩图片\n const options = {\n maxSizeMB: 2,\n maxWidthOrHeight: 1920,\n useWebWorker: true,\n }\n \n const compressedFile = await imageCompression(file, options)\n \n // 保存到数据库\n const imageId = uuidv4()\n await db.images.add({\n id: imageId,\n blob: compressedFile,\n mimeType: compressedFile.type,\n createdAt: new Date().toISOString(),\n })\n\n newPhotoIds.push(imageId)\n }\n\n // 更新照片列表\n onChange([...photoIds, ...newPhotoIds])\n } catch (error) {\n console.error('上传照片失败:', error)\n await showAlert('上传照片失败', '错误')\n } finally {\n setIsUploading(false)\n e.target.value = ''\n }\n }\n\n const handleDelete = async (photoId: string) => {\n const confirmed = await showConfirm('确定要删除这张照片吗?', '删除照片')\n if (confirmed) {\n onChange(photoIds.filter(id => id !== photoId))\n }\n }\n\n return (\n
\n
\n

照片墙 ({photos.length})

\n {!readonly && (\n \n )}\n
\n\n {photos.length > 0 ? (\n
\n {photos.map((photo) => (\n
\n setSelectedPhoto(photo.url)}\n />\n {!readonly && (\n handleDelete(photo.id)}\n >\n \n \n )}\n setSelectedPhoto(photo.url)}\n >\n \n \n
\n ))}\n
\n ) : (\n
\n 暂无照片\n
\n )}\n\n {/* 照片预览对话框 */}\n setSelectedPhoto(null)}>\n \n \n 照片预览\n \n {selectedPhoto && (\n \n )}\n \n \n
\n )\n}\n"],"names":[],"mappings":"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"}}, - {"offset": {"line": 2326, "column": 0}, "map": {"version":3,"sources":["file:///Users/freedak/Documents/go-new/chinese-family-tree/components/members/story-manager.tsx"],"sourcesContent":["\"use client\"\n\nimport { useState } from \"react\"\nimport { Button } from \"@/components/ui/button\"\nimport { Input } from \"@/components/ui/input\"\nimport { Textarea } from \"@/components/ui/textarea\"\nimport { Label } from \"@/components/ui/label\"\nimport { Card, CardContent, CardHeader, CardTitle } from \"@/components/ui/card\"\nimport { Dialog, DialogContent, DialogHeader, DialogTitle, DialogFooter } from \"@/components/ui/dialog\"\nimport { Plus, Edit, Trash, BookOpen, Calendar } from \"lucide-react\"\nimport type { FamilyStory } from \"@/types/family\"\nimport { v4 as uuidv4 } from \"uuid\"\nimport { useDialog } from \"@/components/ui/alert-dialog-custom\"\n\ninterface StoryManagerProps {\n stories?: FamilyStory[]\n onChange: (stories: FamilyStory[]) => void\n readonly?: boolean\n}\n\nexport function StoryManager({ stories = [], onChange, readonly = false }: StoryManagerProps) {\n const { showAlert, showConfirm } = useDialog()\n const [isDialogOpen, setIsDialogOpen] = useState(false)\n const [editingStory, setEditingStory] = useState(null)\n const [formData, setFormData] = useState>({\n title: \"\",\n content: \"\",\n date: \"\",\n })\n\n const handleAdd = () => {\n setEditingStory(null)\n setFormData({ title: \"\", content: \"\", date: \"\" })\n setIsDialogOpen(true)\n }\n\n const handleEdit = (story: FamilyStory) => {\n setEditingStory(story)\n setFormData(story)\n setIsDialogOpen(true)\n }\n\n const handleDelete = async (storyId: string) => {\n const confirmed = await showConfirm(\"确定要删除这个故事吗?\", \"删除故事\")\n if (confirmed) {\n onChange(stories.filter(s => s.id !== storyId))\n }\n }\n\n const handleSave = async () => {\n if (!formData.title || !formData.content) {\n await showAlert(\"请填写标题和内容\", \"提示\")\n return\n }\n\n const now = new Date().toISOString()\n \n if (editingStory) {\n // 更新现有故事\n onChange(\n stories.map(s =>\n s.id === editingStory.id\n ? { ...s, ...formData, updatedAt: now }\n : s\n )\n )\n } else {\n // 添加新故事\n const newStory: FamilyStory = {\n id: uuidv4(),\n title: formData.title!,\n content: formData.content!,\n date: formData.date,\n imageIds: formData.imageIds || [],\n createdAt: now,\n updatedAt: now,\n }\n onChange([...stories, newStory])\n }\n\n setIsDialogOpen(false)\n setFormData({ title: \"\", content: \"\", date: \"\" })\n }\n\n return (\n
\n
\n

\n \n 家族故事 ({stories.length})\n

\n {!readonly && (\n \n \n 添加故事\n \n )}\n
\n\n {stories.length > 0 ? (\n
\n {stories\n .sort((a, b) => new Date(b.createdAt).getTime() - new Date(a.createdAt).getTime())\n .map((story) => (\n \n \n
\n
\n {story.title}\n {story.date && (\n
\n \n {story.date}\n
\n )}\n
\n {!readonly && (\n
\n handleEdit(story)}\n >\n \n \n handleDelete(story.id)}\n >\n \n \n
\n )}\n
\n
\n \n

\n {story.content}\n

\n
\n 创建于 {new Date(story.createdAt).toLocaleDateString('zh-CN')}\n
\n
\n
\n ))}\n
\n ) : (\n
\n 暂无家族故事\n
\n )}\n\n {/* 添加/编辑故事对话框 */}\n \n \n \n {editingStory ? \"编辑故事\" : \"添加故事\"}\n \n
\n
\n \n setFormData({ ...formData, title: e.target.value })}\n />\n
\n
\n \n setFormData({ ...formData, date: e.target.value })}\n />\n
\n
\n \n setFormData({ ...formData, content: e.target.value })}\n />\n
\n
\n \n \n \n \n
\n
\n
\n )\n}\n"],"names":[],"mappings":"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"}}, - {"offset": {"line": 2784, "column": 0}, "map": {"version":3,"sources":["file:///Users/freedak/Documents/go-new/chinese-family-tree/components/members/member-form.tsx"],"sourcesContent":["\"use client\"\n\nimport type React from \"react\"\n\nimport { useState } from \"react\"\nimport type { FamilyMember } from \"@/types/family\"\nimport { Button } from \"@/components/ui/button\"\nimport { Input } from \"@/components/ui/input\"\nimport { Label } from \"@/components/ui/label\"\nimport { Textarea } from \"@/components/ui/textarea\"\nimport { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from \"@/components/ui/select\"\nimport { CalendarIcon, User, Scroll, Users, Images, BookOpen } from \"lucide-react\"\nimport { Card, CardContent, CardDescription, CardHeader, CardTitle } from \"@/components/ui/card\"\nimport { ImageUpload } from \"@/components/ui/image-upload\"\nimport { PhotoGallery } from \"./photo-gallery\"\nimport { StoryManager } from \"./story-manager\"\n\ninterface MemberFormProps {\n initialData?: Partial\n existingMembers?: FamilyMember[]\n onSubmit: (data: FamilyMember) => void\n onCancel: () => void\n}\n\nexport function MemberForm({ initialData, existingMembers = [], onSubmit, onCancel }: MemberFormProps) {\n // 计算最大世系\n const maxGeneration = existingMembers.length > 0 \n ? Math.max(...existingMembers.map(m => m.generation || 1))\n : 1\n \n // Initialize state with default values or initialData\n const [formData, setFormData] = useState>({\n id: initialData?.id || crypto.randomUUID(),\n surname: initialData?.surname || \"李\",\n givenName: initialData?.givenName || \"\",\n fullName: initialData?.fullName || \"\",\n gender: (initialData?.gender || \"MALE\").toUpperCase() as \"MALE\" | \"FEMALE\",\n generation: initialData?.generation || maxGeneration,\n spouseIds: initialData?.spouseIds || [],\n childrenIds: initialData?.childrenIds || [],\n tags: initialData?.tags || [],\n fatherId: initialData?.fatherId,\n motherId: initialData?.motherId,\n ...initialData,\n })\n\n const [errors, setErrors] = useState([])\n\n const handleChange = (field: keyof FamilyMember, value: any) => {\n setFormData((prev) => {\n const newData = { ...prev, [field]: value }\n \n // Auto-update full name if surname or given name changes\n if (field === \"surname\" || field === \"givenName\") {\n newData.fullName = (newData.surname || \"\") + (newData.givenName || \"\")\n }\n \n // 选择父亲时自动带出母亲\n if (field === \"fatherId\" && value) {\n const father = existingMembers.find(m => m.id === value)\n if (father && father.spouseIds && father.spouseIds.length > 0) {\n // 找到父亲的配偶(母亲)\n const motherId = father.spouseIds[0]\n newData.motherId = motherId\n }\n }\n \n // 选择母亲时自动带出父亲\n if (field === \"motherId\" && value) {\n const mother = existingMembers.find(m => m.id === value)\n if (mother && mother.spouseIds && mother.spouseIds.length > 0) {\n // 找到母亲的配偶(父亲)\n const fatherId = mother.spouseIds[0]\n newData.fatherId = fatherId\n }\n }\n \n return newData\n })\n // Clear errors when user makes changes\n if (errors.length > 0) setErrors([])\n }\n\n const handleSpouseChange = (spouseId: string) => {\n // If selecting \"none\" (empty string), clear spouses\n if (!spouseId) {\n setFormData((prev) => ({ ...prev, spouseIds: [] }))\n return\n }\n // Otherwise set as single spouse (logic can be expanded for multiple later)\n setFormData((prev) => ({ ...prev, spouseIds: [spouseId] }))\n }\n\n const validate = (): boolean => {\n const newErrors: string[] = []\n\n // 1. Date Validation\n if (formData.birthDate && formData.deathDate) {\n if (new Date(formData.birthDate) > new Date(formData.deathDate)) {\n newErrors.push(\"出生日期不能晚于逝世日期\")\n }\n }\n\n // 2. Parent Age Validation\n const birthYear = formData.birthDate ? new Date(formData.birthDate).getFullYear() : null\n\n if (birthYear) {\n if (formData.fatherId) {\n const father = existingMembers.find((m) => m.id === formData.fatherId)\n if (father?.birthDate) {\n const fatherBirthYear = new Date(father.birthDate).getFullYear()\n if (birthYear - fatherBirthYear < 15) {\n newErrors.push(`与父亲的年龄差过小 (${birthYear - fatherBirthYear}岁),请确认`)\n }\n if (birthYear < fatherBirthYear) {\n newErrors.push(\"出生日期不能早于父亲\")\n }\n }\n }\n\n if (formData.motherId) {\n const mother = existingMembers.find((m) => m.id === formData.motherId)\n if (mother?.birthDate) {\n const motherBirthYear = new Date(mother.birthDate).getFullYear()\n if (birthYear - motherBirthYear < 15) {\n newErrors.push(`与母亲的年龄差过小 (${birthYear - motherBirthYear}岁),请确认`)\n }\n if (birthYear < motherBirthYear) {\n newErrors.push(\"出生日期不能早于母亲\")\n }\n }\n }\n }\n\n // 3. Generation Validation\n if (formData.fatherId) {\n const father = existingMembers.find((m) => m.id === formData.fatherId)\n if (father && formData.generation !== father.generation + 1) {\n newErrors.push(`世系错误:父亲是第 ${father.generation} 世,子女应为第 ${father.generation + 1} 世`)\n }\n }\n\n // 4. Circular Reference Detection (循环引用检测)\n if (formData.fatherId || formData.motherId) {\n const visited = new Set()\n const checkCircular = (memberId: string): boolean => {\n if (memberId === formData.id) return true\n if (visited.has(memberId)) return false\n visited.add(memberId)\n\n const member = existingMembers.find((m) => m.id === memberId)\n if (!member) return false\n\n if (member.fatherId && checkCircular(member.fatherId)) return true\n if (member.motherId && checkCircular(member.motherId)) return true\n\n return false\n }\n\n if (formData.fatherId && checkCircular(formData.fatherId)) {\n newErrors.push(\"检测到循环引用:不能将自己的后代设置为父亲\")\n }\n if (formData.motherId && checkCircular(formData.motherId)) {\n newErrors.push(\"检测到循环引用:不能将自己的后代设置为母亲\")\n }\n }\n\n // 5. Self-Reference Detection (自我引用检测)\n if (formData.fatherId === formData.id) {\n newErrors.push(\"不能将自己设置为自己的父亲\")\n }\n if (formData.motherId === formData.id) {\n newErrors.push(\"不能将自己设置为自己的母亲\")\n }\n if (formData.spouseIds?.includes(formData.id || \"\")) {\n newErrors.push(\"不能将自己设置为自己的配偶\")\n }\n\n setErrors(newErrors)\n return newErrors.length === 0\n }\n\n const handleSubmit = (e: React.FormEvent) => {\n e.preventDefault()\n if (validate()) {\n onSubmit(formData as FamilyMember)\n }\n }\n\n const potentialRelatives = existingMembers.filter((m) => m.id !== formData.id)\n\n return (\n
\n {errors.length > 0 && (\n
\n

请检查以下问题:

\n
    \n {errors.map((err, index) => (\n
  • {err}
  • \n ))}\n
\n
\n )}\n\n
\n {/* 基本信息和家庭关系 - 两列布局 */}\n
\n {/* 左列:基本信息 */}\n \n \n \n \n 基本信息 (Identity)\n \n \n \n
\n handleChange(\"avatarImageId\", imageId)}\n />\n
\n\n
\n
\n \n handleChange(\"surname\", e.target.value)}\n />\n
\n
\n \n handleChange(\"givenName\", e.target.value)}\n />\n
\n
\n\n
\n
\n \n \n
\n
\n \n handleChange(\"generation\", Number.parseInt(e.target.value))}\n />\n
\n
\n
\n
\n\n {/* 右列:家庭关系 */}\n \n \n \n \n 家庭关系 (Relationships)\n \n \n \n
\n \n
\n handleChange(\"fatherId\", val === \"none\" ? undefined : val)}\n >\n \n \n \n \n 无 (None)\n {potentialRelatives\n .filter((m) => m.gender === \"MALE\" && m.generation === (formData.generation || 1) - 1)\n .map((m) => (\n \n {m.fullName} ({m.generation}世)\n \n ))}\n \n \n {!formData.fatherId && (\n handleChange(\"spouseFatherName\", e.target.value)}\n className=\"flex-1\"\n />\n )}\n
\n
\n\n
\n \n
\n handleChange(\"motherId\", val === \"none\" ? undefined : val)}\n >\n \n \n \n \n 无 (None)\n {potentialRelatives\n .filter((m) => m.gender === \"FEMALE\" && m.generation === (formData.generation || 1) - 1)\n .map((m) => (\n \n {m.fullName} ({m.generation}世)\n \n ))}\n \n \n {!formData.motherId && (\n handleChange(\"spouseMotherName\", e.target.value)}\n className=\"flex-1\"\n />\n )}\n
\n
\n\n
\n \n \n
\n
\n
\n
\n\n {/* Traditional Names */}\n \n \n \n \n 传统称谓 (Traditional Names)\n \n \n \n
\n
\n \n handleChange(\"courtesyName\", e.target.value)}\n placeholder=\"e.g. 伯虎\"\n />\n
\n
\n \n handleChange(\"artName\", e.target.value)}\n placeholder=\"e.g. 六如居士\"\n />\n
\n
\n
\n
\n \n handleChange(\"generationName\", e.target.value)}\n />\n
\n
\n \n handleChange(\"posthumousName\", e.target.value)}\n />\n
\n
\n
\n
\n\n {/* Dates & Places */}\n \n \n \n \n 生平与地点 (Life & Places)\n \n \n \n
\n
\n \n handleChange(\"birthDate\", e.target.value)}\n />\n
\n
\n \n handleChange(\"deathDate\", e.target.value)}\n />\n
\n
\n
\n \n handleChange(\"ancestralHome\", e.target.value)}\n placeholder=\"e.g. 福建省泉州市\"\n />\n
\n
\n \n handleChange(\"burialPlace\", e.target.value)}\n />\n
\n
\n
\n\n {/* Contact Information */}\n \n \n \n \n 联系方式 (Contact Information)\n \n 在世成员的联系方式\n \n \n
\n \n handleChange(\"phone\", e.target.value)}\n placeholder=\"e.g. 13800138000\"\n />\n
\n
\n \n handleChange(\"telephone\", e.target.value)}\n placeholder=\"e.g. 0592-1234567\"\n />\n
\n
\n \n handleChange(\"email\", e.target.value)}\n placeholder=\"e.g. example@email.com\"\n />\n
\n
\n \n handleChange(\"address\", e.target.value)}\n placeholder=\"e.g. 福建省厦门市思明区XX路XX号\"\n />\n
\n
\n
\n\n {/* Biography */}\n \n \n \n \n 生平事迹 (Biography)\n \n \n \n handleChange(\"bio\", e.target.value)}\n />\n \n \n\n {/* Tags */}\n \n \n \n \n 标签 (Tags)\n \n 添加标签以便分类和搜索(按回车添加)\n \n \n
\n
\n {\n if (e.key === 'Enter') {\n e.preventDefault()\n const input = e.currentTarget\n const value = input.value.trim()\n if (value && !(formData.tags || []).includes(value)) {\n handleChange('tags', [...(formData.tags || []), value])\n input.value = ''\n }\n }\n }}\n />\n
\n {formData.tags && formData.tags.length > 0 && (\n
\n {formData.tags.map((tag, index) => (\n \n {tag}\n {\n const newTags = formData.tags?.filter((_, i) => i !== index) || []\n handleChange('tags', newTags)\n }}\n className=\"ml-1 hover:text-destructive\"\n >\n ×\n \n \n ))}\n
\n )}\n
\n
\n
\n\n {/* Photo Gallery */}\n \n \n \n \n 照片墙 (Photo Gallery)\n \n 上传多张照片记录珍贵时刻\n \n \n handleChange(\"photoIds\", photoIds)}\n />\n \n \n\n {/* Family Stories */}\n \n \n \n \n 家族故事 (Family Stories)\n \n 记录与此成员相关的家族故事\n \n \n handleChange(\"stories\", stories)}\n />\n \n \n\n
\n\n
\n \n \n
\n
\n )\n}\n"],"names":[],"mappings":"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"}}, - {"offset": {"line": 4325, "column": 0}, "map": {"version":3,"sources":["file:///Users/freedak/Documents/go-new/chinese-family-tree/app/members/%5Bid%5D/page.tsx"],"sourcesContent":["\"use client\"\n\nimport Link from \"next/link\"\n\nimport { useParams, useRouter } from \"next/navigation\"\nimport { useFamily } from \"@/context/family-context\"\nimport { SiteHeader } from \"@/components/site-header\"\nimport { MemberForm } from \"@/components/members/member-form\"\nimport { Button } from \"@/components/ui/button\"\nimport { ArrowLeft, Edit, Trash, Share2, Printer, CircleUser, CircleUserRound, Images, BookOpen } from \"lucide-react\"\nimport { useState, useEffect } from \"react\"\nimport type { FamilyMember } from \"@/types/family\"\nimport { db } from \"@/lib/db\"\nimport { PhotoGallery } from \"@/components/members/photo-gallery\"\nimport { StoryManager } from \"@/components/members/story-manager\"\nimport { useDialog } from \"@/components/ui/alert-dialog-custom\"\n\nexport default function MemberProfilePage() {\n const { id } = useParams()\n const { getMember, updateMember, deleteMember } = useFamily()\n const { showConfirm } = useDialog()\n const router = useRouter()\n const [isEditing, setIsEditing] = useState(false)\n const [avatarBlobUrl, setAvatarBlobUrl] = useState(undefined)\n\n const member = getMember(id as string)\n\n // Load avatar blob if exists\n useEffect(() => {\n if (member?.avatarImageId) {\n db.images.get(member.avatarImageId).then((image) => {\n if (image) {\n const url = URL.createObjectURL(image.blob)\n setAvatarBlobUrl(url)\n return () => URL.revokeObjectURL(url)\n }\n })\n } else {\n setAvatarBlobUrl(undefined)\n }\n }, [member?.avatarImageId])\n\n if (!member) {\n return (\n
\n \n
\n

Member not found

\n \n
\n
\n )\n }\n\n const handleSave = (updatedMember: FamilyMember) => {\n updateMember(updatedMember.id, updatedMember)\n setIsEditing(false)\n }\n\n const handleDelete = async () => {\n const confirmed = await showConfirm(\"确定要删除这位成员吗?这将同时删除其关联关系。\", \"删除成员\", \"destructive\")\n if (confirmed) {\n deleteMember(member.id)\n router.push(\"/members\")\n }\n }\n\n if (isEditing) {\n return (\n
\n \n
\n
\n \n

编辑成员: {member.fullName}

\n
\n setIsEditing(false)} />\n
\n
\n )\n }\n\n return (\n
\n \n
\n {/* Header Section */}\n
\n
\n
\n {avatarBlobUrl ? (\n \n ) : (\n member.gender === 'FEMALE' ? (\n \n ) : (\n \n )\n )}\n
\n
\n
\n

{member.fullName}

\n \n {member.generation}世\n \n
\n
\n {member.courtesyName && (\n

\n 字:{member.courtesyName}\n

\n )}\n {member.artName && (\n

\n 号:{member.artName}\n

\n )}\n {member.ancestralHome &&

籍贯:{member.ancestralHome}

}\n
\n {member.tags && member.tags.length > 0 && (\n
\n {member.tags.map((tag) => (\n \n {tag}\n \n ))}\n
\n )}\n
\n
\n\n
\n \n \n \n \n
\n
\n\n {/* Content Grid */}\n
\n {/* Main Biography */}\n
\n
\n

\n \n 生平事迹\n

\n
\n {member.bio ? (\n

{member.bio}

\n ) : (\n

暂无生平记录...

\n )}\n
\n
\n\n {/* Photo Gallery */}\n {member.photoIds && member.photoIds.length > 0 && (\n
\n

\n \n 照片墙\n

\n
\n updateMember(member.id, { photoIds })}\n readonly={false}\n />\n
\n
\n )}\n\n {/* Family Stories */}\n {member.stories && member.stories.length > 0 && (\n
\n

\n \n 家族故事\n

\n
\n updateMember(member.id, { stories })}\n readonly={false}\n />\n
\n
\n )}\n\n
\n

\n \n 家族关系\n

\n
\n
\n

\n 父亲 (Father)\n

\n {member.fatherId ? (\n \n {getMember(member.fatherId)?.fullName || member.fatherId}\n \n ) : member.spouseFatherName ? (\n \n {member.spouseFatherName}\n \n ) : (\n -\n )}\n
\n
\n

\n 母亲 (Mother)\n

\n {member.motherId ? (\n \n {getMember(member.motherId)?.fullName || member.motherId}\n \n ) : member.spouseMotherName ? (\n \n {member.spouseMotherName}\n \n ) : (\n -\n )}\n
\n
\n

\n 配偶 (Spouse)\n

\n
\n {member.spouseIds?.length > 0 ? (\n member.spouseIds.map((spouseId) => (\n \n {getMember(spouseId)?.fullName || spouseId}\n \n ))\n ) : (\n 无记录\n )}\n
\n
\n
\n

\n 子女 (Children)\n

\n
\n {member.childrenIds?.length > 0 ? (\n member.childrenIds.map((childId) => (\n \n {getMember(childId)?.fullName || childId}\n \n ))\n ) : (\n 无记录\n )}\n
\n
\n
\n
\n
\n\n {/* Sidebar Info */}\n
\n
\n

详细信息

\n
\n
\n
出生日期
\n
{member.birthDate || \"-\"}
\n
\n {member.deathDate && (\n <>\n
\n
逝世日期
\n
{member.deathDate}
\n
\n
\n
谥号
\n
{member.posthumousName || \"-\"}
\n
\n
\n
墓地
\n
{member.burialPlace || \"-\"}
\n
\n \n )}\n {member.generationName && (\n
\n
字辈
\n
{member.generationName}
\n
\n )}\n
\n
\n \n {/* 联系方式 */}\n {(member.phone || member.telephone || member.email || member.address) && (\n
\n

联系方式

\n
\n {member.phone && (\n
\n
手机号
\n
\n \n {member.phone}\n \n
\n
\n )}\n {member.telephone && (\n
\n
固定电话
\n
\n \n {member.telephone}\n \n
\n
\n )}\n {member.email && (\n
\n
邮箱
\n
\n \n {member.email}\n \n
\n
\n )}\n {member.address && (\n
\n
现居地址
\n
{member.address}
\n
\n )}\n
\n
\n )}\n
\n
\n
\n
\n )\n}\n"],"names":[],"mappings":"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"}}] + {"offset": {"line": 332, "column": 0}, "map": {"version":3,"sources":["file:///Users/freedak/Documents/go-new/chinese-family-tree/components/site-header.tsx"],"sourcesContent":["\"use client\"\n\nimport Link from \"next/link\"\nimport { BookOpen, Search, Bell, Settings, LogOut, User, ChevronDown, Plus, Trash2, Network, LayoutGrid, Calculator } from \"lucide-react\"\nimport { Button } from \"@/components/ui/button\"\nimport { Input } from \"@/components/ui/input\"\nimport { Avatar, AvatarFallback, AvatarImage } from \"@/components/ui/avatar\"\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuLabel,\n DropdownMenuSeparator,\n DropdownMenuTrigger,\n} from \"@/components/ui/dropdown-menu\"\nimport { useFamily } from \"@/context/family-context\"\nimport { useState, useRef, useEffect, useCallback } from \"react\"\nimport { useRouter, usePathname, useSearchParams } from \"next/navigation\"\nimport { useSession, signOut } from \"next-auth/react\"\nimport { useDialog } from \"@/components/ui/alert-dialog-custom\"\n\ninterface FamilyTree {\n id: string\n name: string\n description: string | null\n ownerId: string\n currentUserRole?: \"OWNER\" | \"EDITOR\" | \"VIEWER\"\n}\n\nexport function SiteHeader() {\n const { searchMembers, searchResults } = useFamily()\n const { data: session, status } = useSession()\n const { showAlert, showConfirm, showPrompt } = useDialog()\n const pathname = usePathname()\n const searchParams = useSearchParams()\n const [searchQuery, setSearchQuery] = useState(\"\")\n const [showResults, setShowResults] = useState(false)\n const [familyTrees, setFamilyTrees] = useState([])\n const [currentTree, setCurrentTree] = useState(null)\n const [deletingTreeId, setDeletingTreeId] = useState(null)\n const searchRef = useRef(null)\n const router = useRouter()\n \n // 获取当前视图模式\n const currentViewMode = searchParams.get('view') || 'traditional'\n const isTreePage = pathname === '/tree'\n\n // 生成带有 treeId 的 URL\n const getUrlWithTreeId = (path: string) => {\n if (currentTree?.id) {\n return `${path}?treeId=${currentTree.id}`\n }\n return path\n }\n\n // 切换视图模式\n const handleViewModeChange = (mode: string) => {\n const params = new URLSearchParams(searchParams.toString())\n params.set('view', mode)\n if (currentTree?.id) {\n params.set('treeId', currentTree.id)\n }\n router.push(`${pathname}?${params.toString()}`)\n }\n\n const getRoleBadge = (role?: string) => {\n switch (role) {\n case \"OWNER\":\n return 所有者\n case \"EDITOR\":\n return 编辑\n case \"VIEWER\":\n return 查看\n default:\n return null\n }\n }\n\n const handleSignOut = async () => {\n await signOut({ callbackUrl: \"/auth/signin\" })\n }\n\n // 获取用户名首字母作为头像\n const getUserInitial = () => {\n if (session?.user?.name) {\n return session.user.name.charAt(0).toUpperCase()\n }\n if (session?.user?.email) {\n return session.user.email.charAt(0).toUpperCase()\n }\n return \"U\"\n }\n\n // 删除家族树\n const handleDeleteTree = async (tree: FamilyTree, e: React.MouseEvent) => {\n e.stopPropagation() // 阻止触发选择事件\n\n // 检查权限\n if (tree.ownerId !== session?.user?.id) {\n await showAlert('只有家族树的创建者才能删除', '权限不足')\n return\n }\n\n const confirmText = `确定要删除家族树\"${tree.name}\"吗?\\n\\n此操作将永久删除所有成员、活动日志和协作者数据,且不可撤销!`\n const confirmed = await showConfirm(confirmText, '删除家族树', 'destructive')\n if (!confirmed) {\n return\n }\n\n // 二次确认\n const finalConfirm = await showPrompt(\n `请输入家族树名称\"${tree.name}\"以确认删除:`,\n '',\n '确认删除'\n )\n if (finalConfirm !== tree.name) {\n await showAlert('名称不匹配,删除已取消', '操作已取消')\n return\n }\n\n setDeletingTreeId(tree.id)\n try {\n const response = await fetch(`/api/trees/${tree.id}`, {\n method: 'DELETE',\n })\n\n if (!response.ok) {\n const error = await response.json()\n throw new Error(error.error || '删除失败')\n }\n\n // 刷新家族树列表\n await loadFamilyTrees()\n \n // 如果删除的是当前树,跳转到首页\n if (currentTree?.id === tree.id) {\n window.location.href = '/'\n }\n } catch (error) {\n console.error('删除家族树失败:', error)\n await showAlert('删除失败:' + (error as Error).message, '错误')\n } finally {\n setDeletingTreeId(null)\n }\n }\n\n // 获取家族树列表\n const loadFamilyTrees = useCallback(() => {\n if (!session?.user?.id || status !== 'authenticated') return\n\n const controller = new AbortController()\n \n fetch('/api/trees', { signal: controller.signal })\n .then(res => {\n if (!res.ok) throw new Error(`HTTP error! status: ${res.status}`)\n return res.json()\n })\n .then(data => {\n if (data.trees) {\n setFamilyTrees(data.trees)\n // 如果 URL 中有 treeId,使用该树,否则使用第一个\n const urlParams = new URLSearchParams(window.location.search)\n const treeId = urlParams.get('treeId')\n if (treeId) {\n const tree = data.trees.find((t: FamilyTree) => t.id === treeId)\n if (tree) {\n setCurrentTree(tree)\n } else if (data.trees.length > 0) {\n setCurrentTree(data.trees[0])\n }\n } else if (data.trees.length > 0) {\n setCurrentTree(data.trees[0])\n }\n }\n })\n .catch(err => {\n // 忽略 abort 错误和 fetch 错误(可能是页面切换导致的)\n if (err.name !== 'AbortError' && err.message !== 'Failed to fetch') {\n console.error('获取家族树列表失败:', err)\n }\n })\n \n return () => controller.abort()\n }, [session?.user?.id, status])\n\n useEffect(() => {\n loadFamilyTrees()\n }, [loadFamilyTrees])\n\n // 监听路由变化,刷新家族树列表\n useEffect(() => {\n const handleRouteChange = () => {\n loadFamilyTrees()\n }\n \n window.addEventListener('focus', handleRouteChange)\n return () => window.removeEventListener('focus', handleRouteChange)\n }, [loadFamilyTrees])\n\n // 点击外部关闭搜索结果\n useEffect(() => {\n function handleClickOutside(event: MouseEvent) {\n if (searchRef.current && !searchRef.current.contains(event.target as Node)) {\n setShowResults(false)\n }\n }\n document.addEventListener(\"mousedown\", handleClickOutside)\n return () => document.removeEventListener(\"mousedown\", handleClickOutside)\n }, [])\n\n const handleSearch = (query: string) => {\n setSearchQuery(query)\n searchMembers(query)\n setShowResults(query.length > 0)\n }\n\n const handleSelectMember = (memberId: string) => {\n router.push(`/members/${memberId}`)\n setSearchQuery(\"\")\n setShowResults(false)\n }\n\n return (\n
\n
\n
\n \n
\n \n
\n 华夏谱\n \n \n {/* 家族树选择器 */}\n {session && familyTrees.length > 0 && (\n \n \n \n \n \n 我的家族树\n \n {familyTrees.map((tree) => (\n {\n setCurrentTree(tree)\n // 保持当前路径,只更新 treeId 参数\n const currentPath = window.location.pathname\n router.push(`${currentPath}?treeId=${tree.id}`)\n }}\n className=\"cursor-pointer flex items-center justify-between group\"\n >\n
\n {tree.name}\n {getRoleBadge(tree.currentUserRole)}\n
\n
\n {currentTree?.id === tree.id && (\n \n )}\n {tree.ownerId === session?.user?.id && (\n handleDeleteTree(tree, e)}\n disabled={deletingTreeId === tree.id}\n >\n \n \n )}\n
\n \n ))}\n \n router.push('/trees/new')}\n className=\"cursor-pointer text-primary\"\n >\n \n 创建新家族树\n \n
\n
\n )}\n
\n\n \n\n
\n \n\n \n\n \n \n \n\n \n \n \n\n {status === \"loading\" ? (\n \n ...\n \n ) : session ? (\n \n \n \n \n \n \n
\n

{session.user?.name || \"用户\"}

\n

\n {session.user?.email}\n

\n
\n
\n \n \n \n \n 系统设置\n \n \n \n \n \n 退出登录\n \n
\n
\n ) : (\n \n \n \n )}\n
\n
\n
\n )\n}\n"],"names":[],"mappings":"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"}}, + {"offset": {"line": 1221, "column": 0}, "map": {"version":3,"sources":["file:///Users/freedak/Documents/go-new/chinese-family-tree/components/ui/textarea.tsx"],"sourcesContent":["import * as React from 'react'\n\nimport { cn } from '@/lib/utils'\n\nfunction Textarea({ className, ...props }: React.ComponentProps<'textarea'>) {\n return (\n \n )\n}\n\nexport { Textarea }\n"],"names":[],"mappings":";;;;;AAEA;;;AAEA,SAAS,SAAS,EAAE,SAAS,EAAE,GAAG,OAAyC;IACzE,qBACE,oaAAC;QACC,aAAU;QACV,WAAW,IAAA,yKAAE,EACX,ucACA;QAED,GAAG,KAAK;;;;;;AAGf"}}, + {"offset": {"line": 1245, "column": 0}, "map": {"version":3,"sources":["file:///Users/freedak/Documents/go-new/chinese-family-tree/components/ui/select.tsx"],"sourcesContent":["'use client'\n\nimport * as React from 'react'\nimport * as SelectPrimitive from '@radix-ui/react-select'\nimport { CheckIcon, ChevronDownIcon, ChevronUpIcon } from 'lucide-react'\n\nimport { cn } from '@/lib/utils'\n\nfunction Select({\n ...props\n}: React.ComponentProps) {\n return \n}\n\nfunction SelectGroup({\n ...props\n}: React.ComponentProps) {\n return \n}\n\nfunction SelectValue({\n ...props\n}: React.ComponentProps) {\n return \n}\n\nfunction SelectTrigger({\n className,\n size = 'default',\n children,\n ...props\n}: React.ComponentProps & {\n size?: 'sm' | 'default'\n}) {\n return (\n \n {children}\n \n \n \n \n )\n}\n\nfunction SelectContent({\n className,\n children,\n position = 'popper',\n ...props\n}: React.ComponentProps) {\n return (\n \n \n \n \n {children}\n \n \n \n \n )\n}\n\nfunction SelectLabel({\n className,\n ...props\n}: React.ComponentProps) {\n return (\n \n )\n}\n\nfunction SelectItem({\n className,\n children,\n ...props\n}: React.ComponentProps) {\n return (\n \n \n \n \n \n \n {children}\n \n )\n}\n\nfunction SelectSeparator({\n className,\n ...props\n}: React.ComponentProps) {\n return (\n \n )\n}\n\nfunction SelectScrollUpButton({\n className,\n ...props\n}: React.ComponentProps) {\n return (\n \n \n \n )\n}\n\nfunction SelectScrollDownButton({\n className,\n ...props\n}: React.ComponentProps) {\n return (\n \n \n \n )\n}\n\nexport {\n Select,\n SelectContent,\n SelectGroup,\n SelectItem,\n SelectLabel,\n SelectScrollDownButton,\n SelectScrollUpButton,\n SelectSeparator,\n SelectTrigger,\n SelectValue,\n}\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AAGA;AACA;AAAA;AAAA;AAEA;AANA;;;;;AAQA,SAAS,OAAO,EACd,GAAG,OAC+C;IAClD,qBAAO,oaAAC,qbAAoB;QAAC,aAAU;QAAU,GAAG,KAAK;;;;;;AAC3D;AAEA,SAAS,YAAY,EACnB,GAAG,OACgD;IACnD,qBAAO,oaAAC,sbAAqB;QAAC,aAAU;QAAgB,GAAG,KAAK;;;;;;AAClE;AAEA,SAAS,YAAY,EACnB,GAAG,OACgD;IACnD,qBAAO,oaAAC,sbAAqB;QAAC,aAAU;QAAgB,GAAG,KAAK;;;;;;AAClE;AAEA,SAAS,cAAc,EACrB,SAAS,EACT,OAAO,SAAS,EAChB,QAAQ,EACR,GAAG,OAGJ;IACC,qBACE,oaAAC,wbAAuB;QACtB,aAAU;QACV,aAAW;QACX,WAAW,IAAA,yKAAE,EACX,gzBACA;QAED,GAAG,KAAK;;YAER;0BACD,oaAAC,qbAAoB;gBAAC,OAAO;0BAC3B,cAAA,oaAAC,sXAAe;oBAAC,WAAU;;;;;;;;;;;;;;;;;AAInC;AAEA,SAAS,cAAc,EACrB,SAAS,EACT,QAAQ,EACR,WAAW,QAAQ,EACnB,GAAG,OACkD;IACrD,qBACE,oaAAC,ubAAsB;kBACrB,cAAA,oaAAC,wbAAuB;YACtB,aAAU;YACV,WAAW,IAAA,yKAAE,EACX,ijBACA,aAAa,YACX,mIACF;YAEF,UAAU;YACT,GAAG,KAAK;;8BAET,oaAAC;;;;;8BACD,oaAAC,ybAAwB;oBACvB,WAAW,IAAA,yKAAE,EACX,OACA,aAAa,YACX;8BAGH;;;;;;8BAEH,oaAAC;;;;;;;;;;;;;;;;AAIT;AAEA,SAAS,YAAY,EACnB,SAAS,EACT,GAAG,OACgD;IACnD,qBACE,oaAAC,sbAAqB;QACpB,aAAU;QACV,WAAW,IAAA,yKAAE,EAAC,6CAA6C;QAC1D,GAAG,KAAK;;;;;;AAGf;AAEA,SAAS,WAAW,EAClB,SAAS,EACT,QAAQ,EACR,GAAG,OAC+C;IAClD,qBACE,oaAAC,qbAAoB;QACnB,aAAU;QACV,WAAW,IAAA,yKAAE,EACX,6aACA;QAED,GAAG,KAAK;;0BAET,oaAAC;gBAAK,WAAU;0BACd,cAAA,oaAAC,8bAA6B;8BAC5B,cAAA,oaAAC,gWAAS;wBAAC,WAAU;;;;;;;;;;;;;;;;0BAGzB,oaAAC,ybAAwB;0BAAE;;;;;;;;;;;;AAGjC;AAEA,SAAS,gBAAgB,EACvB,SAAS,EACT,GAAG,OACoD;IACvD,qBACE,oaAAC,0bAAyB;QACxB,aAAU;QACV,WAAW,IAAA,yKAAE,EAAC,iDAAiD;QAC9D,GAAG,KAAK;;;;;;AAGf;AAEA,SAAS,qBAAqB,EAC5B,SAAS,EACT,GAAG,OACyD;IAC5D,qBACE,oaAAC,+bAA8B;QAC7B,aAAU;QACV,WAAW,IAAA,yKAAE,EACX,wDACA;QAED,GAAG,KAAK;kBAET,cAAA,oaAAC,gXAAa;YAAC,WAAU;;;;;;;;;;;AAG/B;AAEA,SAAS,uBAAuB,EAC9B,SAAS,EACT,GAAG,OAC2D;IAC9D,qBACE,oaAAC,icAAgC;QAC/B,aAAU;QACV,WAAW,IAAA,yKAAE,EACX,wDACA;QAED,GAAG,KAAK;kBAET,cAAA,oaAAC,sXAAe;YAAC,WAAU;;;;;;;;;;;AAGjC"}}, + {"offset": {"line": 1478, "column": 0}, "map": {"version":3,"sources":["file:///Users/freedak/Documents/go-new/chinese-family-tree/components/ui/dialog.tsx"],"sourcesContent":["'use client'\n\nimport * as React from 'react'\nimport * as DialogPrimitive from '@radix-ui/react-dialog'\nimport { XIcon } from 'lucide-react'\n\nimport { cn } from '@/lib/utils'\n\nfunction Dialog({\n ...props\n}: React.ComponentProps) {\n return \n}\n\nfunction DialogTrigger({\n ...props\n}: React.ComponentProps) {\n return \n}\n\nfunction DialogPortal({\n ...props\n}: React.ComponentProps) {\n return \n}\n\nfunction DialogClose({\n ...props\n}: React.ComponentProps) {\n return \n}\n\nfunction DialogOverlay({\n className,\n ...props\n}: React.ComponentProps) {\n return (\n \n )\n}\n\nfunction DialogContent({\n className,\n children,\n showCloseButton = true,\n ...props\n}: React.ComponentProps & {\n showCloseButton?: boolean\n}) {\n return (\n \n \n \n {children}\n {showCloseButton && (\n \n \n Close\n \n )}\n \n \n )\n}\n\nfunction DialogHeader({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n \n )\n}\n\nfunction DialogFooter({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n \n )\n}\n\nfunction DialogTitle({\n className,\n ...props\n}: React.ComponentProps) {\n return (\n \n )\n}\n\nfunction DialogDescription({\n className,\n ...props\n}: React.ComponentProps) {\n return (\n \n )\n}\n\nexport {\n Dialog,\n DialogClose,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogOverlay,\n DialogPortal,\n DialogTitle,\n DialogTrigger,\n}\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AAGA;AACA;AAEA;AANA;;;;;AAQA,SAAS,OAAO,EACd,GAAG,OAC+C;IAClD,qBAAO,oaAAC,qbAAoB;QAAC,aAAU;QAAU,GAAG,KAAK;;;;;;AAC3D;AAEA,SAAS,cAAc,EACrB,GAAG,OACkD;IACrD,qBAAO,oaAAC,wbAAuB;QAAC,aAAU;QAAkB,GAAG,KAAK;;;;;;AACtE;AAEA,SAAS,aAAa,EACpB,GAAG,OACiD;IACpD,qBAAO,oaAAC,ubAAsB;QAAC,aAAU;QAAiB,GAAG,KAAK;;;;;;AACpE;AAEA,SAAS,YAAY,EACnB,GAAG,OACgD;IACnD,qBAAO,oaAAC,sbAAqB;QAAC,aAAU;QAAgB,GAAG,KAAK;;;;;;AAClE;AAEA,SAAS,cAAc,EACrB,SAAS,EACT,GAAG,OACkD;IACrD,qBACE,oaAAC,wbAAuB;QACtB,aAAU;QACV,WAAW,IAAA,yKAAE,EACX,0JACA;QAED,GAAG,KAAK;;;;;;AAGf;AAEA,SAAS,cAAc,EACrB,SAAS,EACT,QAAQ,EACR,kBAAkB,IAAI,EACtB,GAAG,OAGJ;IACC,qBACE,oaAAC;QAAa,aAAU;;0BACtB,oaAAC;;;;;0BACD,oaAAC,wbAAuB;gBACtB,aAAU;gBACV,WAAW,IAAA,yKAAE,EACX,+WACA;gBAED,GAAG,KAAK;;oBAER;oBACA,iCACC,oaAAC,sbAAqB;wBACpB,aAAU;wBACV,WAAU;;0CAEV,oaAAC,oVAAK;;;;;0CACN,oaAAC;gCAAK,WAAU;0CAAU;;;;;;;;;;;;;;;;;;;;;;;;AAMtC;AAEA,SAAS,aAAa,EAAE,SAAS,EAAE,GAAG,OAAoC;IACxE,qBACE,oaAAC;QACC,aAAU;QACV,WAAW,IAAA,yKAAE,EAAC,gDAAgD;QAC7D,GAAG,KAAK;;;;;;AAGf;AAEA,SAAS,aAAa,EAAE,SAAS,EAAE,GAAG,OAAoC;IACxE,qBACE,oaAAC;QACC,aAAU;QACV,WAAW,IAAA,yKAAE,EACX,0DACA;QAED,GAAG,KAAK;;;;;;AAGf;AAEA,SAAS,YAAY,EACnB,SAAS,EACT,GAAG,OACgD;IACnD,qBACE,oaAAC,sbAAqB;QACpB,aAAU;QACV,WAAW,IAAA,yKAAE,EAAC,sCAAsC;QACnD,GAAG,KAAK;;;;;;AAGf;AAEA,SAAS,kBAAkB,EACzB,SAAS,EACT,GAAG,OACsD;IACzD,qBACE,oaAAC,4bAA2B;QAC1B,aAAU;QACV,WAAW,IAAA,yKAAE,EAAC,iCAAiC;QAC9C,GAAG,KAAK;;;;;;AAGf"}}, + {"offset": {"line": 1660, "column": 0}, "map": {"version":3,"sources":["file:///Users/freedak/Documents/go-new/chinese-family-tree/lib/db.ts"],"sourcesContent":["import Dexie, { type Table } from \"dexie\"\nimport type { FamilyMember } from \"@/types/family\"\n\nexport interface GlobalSettings {\n key: string\n value: any\n}\n\nexport interface StoredImage {\n id: string\n blob: Blob\n mimeType: string\n createdAt: string\n}\n\nexport interface ActivityLog {\n id: string\n action: \"create\" | \"update\" | \"delete\" | \"import\" | \"export\"\n entityType: \"member\" | \"photo\" | \"story\" | \"settings\"\n entityId?: string\n entityName?: string\n changes?: any\n timestamp: string\n userId?: string\n userName?: string\n}\n\nexport class FamilyTreeDB extends Dexie {\n members!: Table\n settings!: Table\n images!: Table\n activityLogs!: Table\n\n constructor() {\n super(\"FamilyTreeDB\")\n this.version(1).stores({\n members: \"id, fullName, fatherId, motherId, [fatherId+motherId]\", // Index for searching\n settings: \"key\", // Key-value store for rootId etc.\n images: \"id\", // Store images by ID\n })\n this.version(2).stores({\n members: \"id, fullName, fatherId, motherId, [fatherId+motherId]\", // Index for searching\n settings: \"key\", // Key-value store for rootId etc.\n images: \"id\", // Store images by ID\n activityLogs: \"id, timestamp, action, entityType, entityId\",\n })\n }\n}\n\nexport const db = new FamilyTreeDB()\n"],"names":[],"mappings":";;;;;;AAAA;;AA2BO,MAAM,qBAAqB,+PAAK;IACrC,QAA6B;IAC7B,SAAgC;IAChC,OAA2B;IAC3B,aAAiC;IAEjC,aAAc;QACZ,KAAK,CAAC;QACN,IAAI,CAAC,OAAO,CAAC,GAAG,MAAM,CAAC;YACrB,SAAS;YACT,UAAU;YACV,QAAQ;QACV;QACA,IAAI,CAAC,OAAO,CAAC,GAAG,MAAM,CAAC;YACrB,SAAS;YACT,UAAU;YACV,QAAQ;YACR,cAAc;QAChB;IACF;AACF;AAEO,MAAM,KAAK,IAAI"}}, + {"offset": {"line": 1699, "column": 0}, "map": {"version":3,"sources":["file:///Users/freedak/Documents/go-new/chinese-family-tree/components/ui/image-upload.tsx"],"sourcesContent":["\"use client\"\n\nimport { useState, useRef, useEffect } from \"react\"\nimport { Button } from \"@/components/ui/button\"\nimport { Avatar, AvatarFallback, AvatarImage } from \"@/components/ui/avatar\"\nimport { Dialog, DialogContent, DialogHeader, DialogTitle, DialogFooter } from \"@/components/ui/dialog\"\nimport { Upload, X, Loader2, Crop } from \"lucide-react\"\nimport { db } from \"@/lib/db\"\nimport { v4 as uuidv4 } from \"uuid\"\nimport ReactCrop, { type Crop as CropType } from \"react-image-crop\"\nimport \"react-image-crop/dist/ReactCrop.css\"\nimport imageCompression from \"browser-image-compression\"\n\ninterface ImageUploadProps {\n value?: string // The image ID\n onChange: (imageId: string | undefined) => void\n className?: string\n}\n\nexport function ImageUpload({ value, onChange, className }: ImageUploadProps) {\n const [previewUrl, setPreviewUrl] = useState(undefined)\n const [isLoading, setIsLoading] = useState(false)\n const [showCropDialog, setShowCropDialog] = useState(false)\n const [imageToCrop, setImageToCrop] = useState(null)\n const [crop, setCrop] = useState()\n const [completedCrop, setCompletedCrop] = useState()\n const imgRef = useRef(null)\n const fileInputRef = useRef(null)\n\n // Load preview if value (imageId) exists\n useEffect(() => {\n let objectUrl: string | undefined\n\n const loadPreview = async () => {\n if (!value) {\n setPreviewUrl(undefined)\n return\n }\n\n try {\n const image = await db.images.get(value)\n if (image) {\n objectUrl = URL.createObjectURL(image.blob)\n setPreviewUrl(objectUrl)\n }\n } catch (error) {\n console.error(\"Failed to load image:\", error)\n }\n }\n\n loadPreview()\n\n return () => {\n if (objectUrl) URL.revokeObjectURL(objectUrl)\n }\n }, [value])\n\n const handleFileSelect = async (e: React.ChangeEvent) => {\n const file = e.target.files?.[0]\n if (!file) return\n\n try {\n // Basic validation\n if (!file.type.startsWith(\"image/\")) {\n alert(\"请选择图片文件\")\n return\n }\n\n // 压缩图片\n const options = {\n maxSizeMB: 1,\n maxWidthOrHeight: 1024,\n useWebWorker: true,\n }\n \n const compressedFile = await imageCompression(file, options)\n \n // 显示裁剪对话框\n const reader = new FileReader()\n reader.onload = () => {\n setImageToCrop(reader.result as string)\n setShowCropDialog(true)\n }\n reader.readAsDataURL(compressedFile)\n } catch (error) {\n console.error(\"Failed to process image:\", error)\n alert(\"图片处理失败\")\n } finally {\n // Reset input\n if (fileInputRef.current) fileInputRef.current.value = \"\"\n }\n }\n\n const handleCropComplete = async () => {\n if (!completedCrop || !imgRef.current) {\n // 如果没有裁剪,直接保存原图\n await saveImage(imageToCrop!)\n return\n }\n\n try {\n setIsLoading(true)\n const canvas = document.createElement('canvas')\n const scaleX = imgRef.current.naturalWidth / imgRef.current.width\n const scaleY = imgRef.current.naturalHeight / imgRef.current.height\n \n canvas.width = completedCrop.width\n canvas.height = completedCrop.height\n const ctx = canvas.getContext('2d')\n\n if (ctx) {\n ctx.drawImage(\n imgRef.current,\n completedCrop.x * scaleX,\n completedCrop.y * scaleY,\n completedCrop.width * scaleX,\n completedCrop.height * scaleY,\n 0,\n 0,\n completedCrop.width,\n completedCrop.height\n )\n }\n\n canvas.toBlob(async (blob) => {\n if (blob) {\n await saveImage(URL.createObjectURL(blob), blob)\n }\n }, 'image/jpeg', 0.9)\n } catch (error) {\n console.error(\"Failed to crop image:\", error)\n alert(\"图片裁剪失败\")\n } finally {\n setIsLoading(false)\n setShowCropDialog(false)\n setImageToCrop(null)\n }\n }\n\n const saveImage = async (dataUrl: string, blob?: Blob) => {\n try {\n setIsLoading(true)\n \n let imageBlob = blob\n if (!imageBlob) {\n const response = await fetch(dataUrl)\n imageBlob = await response.blob()\n }\n\n const imageId = uuidv4()\n await db.images.add({\n id: imageId,\n blob: imageBlob,\n mimeType: imageBlob.type,\n createdAt: new Date().toISOString(),\n })\n\n onChange(imageId)\n setShowCropDialog(false)\n setImageToCrop(null)\n } catch (error) {\n console.error(\"Failed to save image:\", error)\n alert(\"图片保存失败\")\n } finally {\n setIsLoading(false)\n }\n }\n\n const handleRemove = () => {\n onChange(undefined)\n }\n\n return (\n <>\n
\n \n \n \n {isLoading ? : }\n \n \n\n
\n \n fileInputRef.current?.click()}\n disabled={isLoading}\n >\n {value ? \"更换头像\" : \"上传头像\"}\n \n {value && (\n \n 移除\n \n )}\n
\n
\n\n {/* 裁剪对话框 */}\n \n \n \n \n \n 裁剪图片\n \n \n
\n {imageToCrop && (\n setCrop(c)}\n onComplete={(c) => setCompletedCrop(c)}\n aspect={1}\n circularCrop\n >\n \n \n )}\n
\n \n {\n setShowCropDialog(false)\n setImageToCrop(null)\n }}\n >\n 取消\n \n \n \n
\n
\n \n )\n}\n"],"names":[],"mappings":"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"}}, + {"offset": {"line": 2066, "column": 0}, "map": {"version":3,"sources":["file:///Users/freedak/Documents/go-new/chinese-family-tree/components/members/photo-gallery.tsx"],"sourcesContent":["\"use client\"\n\nimport { useState, useEffect } from \"react\"\nimport { db } from \"@/lib/db\"\nimport { Button } from \"@/components/ui/button\"\nimport { Card } from \"@/components/ui/card\"\nimport { Dialog, DialogContent, DialogHeader, DialogTitle } from \"@/components/ui/dialog\"\nimport { X, Upload, Image as ImageIcon, Plus, ZoomIn } from \"lucide-react\"\nimport { useDialog } from \"@/components/ui/alert-dialog-custom\"\nimport { v4 as uuidv4 } from \"uuid\"\nimport imageCompression from \"browser-image-compression\"\n\ninterface PhotoGalleryProps {\n photoIds?: string[]\n onChange: (photoIds: string[]) => void\n readonly?: boolean\n}\n\nexport function PhotoGallery({ photoIds = [], onChange, readonly = false }: PhotoGalleryProps) {\n const { showAlert, showConfirm } = useDialog()\n const [photos, setPhotos] = useState<{ id: string; url: string }[]>([])\n const [selectedPhoto, setSelectedPhoto] = useState(null)\n const [isUploading, setIsUploading] = useState(false)\n\n // 加载照片\n useEffect(() => {\n const loadPhotos = async () => {\n const loadedPhotos = await Promise.all(\n photoIds.map(async (id) => {\n try {\n const image = await db.images.get(id)\n if (image) {\n const url = URL.createObjectURL(image.blob)\n return { id, url }\n }\n } catch (error) {\n console.error('加载照片失败:', error)\n }\n return null\n })\n )\n setPhotos(loadedPhotos.filter(Boolean) as { id: string; url: string }[])\n }\n\n if (photoIds.length > 0) {\n loadPhotos()\n }\n\n // 清理 URL\n return () => {\n photos.forEach(photo => URL.revokeObjectURL(photo.url))\n }\n }, [photoIds])\n\n const handleUpload = async (e: React.ChangeEvent) => {\n const files = e.target.files\n if (!files || files.length === 0) return\n\n setIsUploading(true)\n try {\n const newPhotoIds: string[] = []\n\n for (const file of Array.from(files)) {\n if (!file.type.startsWith('image/')) continue\n\n // 压缩图片\n const options = {\n maxSizeMB: 2,\n maxWidthOrHeight: 1920,\n useWebWorker: true,\n }\n \n const compressedFile = await imageCompression(file, options)\n \n // 保存到数据库\n const imageId = uuidv4()\n await db.images.add({\n id: imageId,\n blob: compressedFile,\n mimeType: compressedFile.type,\n createdAt: new Date().toISOString(),\n })\n\n newPhotoIds.push(imageId)\n }\n\n // 更新照片列表\n onChange([...photoIds, ...newPhotoIds])\n } catch (error) {\n console.error('上传照片失败:', error)\n await showAlert('上传照片失败', '错误')\n } finally {\n setIsUploading(false)\n e.target.value = ''\n }\n }\n\n const handleDelete = async (photoId: string) => {\n const confirmed = await showConfirm('确定要删除这张照片吗?', '删除照片')\n if (confirmed) {\n onChange(photoIds.filter(id => id !== photoId))\n }\n }\n\n return (\n
\n
\n

照片墙 ({photos.length})

\n {!readonly && (\n \n )}\n
\n\n {photos.length > 0 ? (\n
\n {photos.map((photo) => (\n
\n setSelectedPhoto(photo.url)}\n />\n {!readonly && (\n handleDelete(photo.id)}\n >\n \n \n )}\n setSelectedPhoto(photo.url)}\n >\n \n \n
\n ))}\n
\n ) : (\n
\n 暂无照片\n
\n )}\n\n {/* 照片预览对话框 */}\n setSelectedPhoto(null)}>\n \n \n 照片预览\n \n {selectedPhoto && (\n \n )}\n \n \n
\n )\n}\n"],"names":[],"mappings":"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"}}, + {"offset": {"line": 2360, "column": 0}, "map": {"version":3,"sources":["file:///Users/freedak/Documents/go-new/chinese-family-tree/components/members/story-manager.tsx"],"sourcesContent":["\"use client\"\n\nimport { useState } from \"react\"\nimport { Button } from \"@/components/ui/button\"\nimport { Input } from \"@/components/ui/input\"\nimport { Textarea } from \"@/components/ui/textarea\"\nimport { Label } from \"@/components/ui/label\"\nimport { Card, CardContent, CardHeader, CardTitle } from \"@/components/ui/card\"\nimport { Dialog, DialogContent, DialogHeader, DialogTitle, DialogFooter } from \"@/components/ui/dialog\"\nimport { Plus, Edit, Trash, BookOpen, Calendar } from \"lucide-react\"\nimport type { FamilyStory } from \"@/types/family\"\nimport { v4 as uuidv4 } from \"uuid\"\nimport { useDialog } from \"@/components/ui/alert-dialog-custom\"\n\ninterface StoryManagerProps {\n stories?: FamilyStory[]\n onChange: (stories: FamilyStory[]) => void\n readonly?: boolean\n}\n\nexport function StoryManager({ stories = [], onChange, readonly = false }: StoryManagerProps) {\n const { showAlert, showConfirm } = useDialog()\n const [isDialogOpen, setIsDialogOpen] = useState(false)\n const [editingStory, setEditingStory] = useState(null)\n const [formData, setFormData] = useState>({\n title: \"\",\n content: \"\",\n date: \"\",\n })\n\n const handleAdd = () => {\n setEditingStory(null)\n setFormData({ title: \"\", content: \"\", date: \"\" })\n setIsDialogOpen(true)\n }\n\n const handleEdit = (story: FamilyStory) => {\n setEditingStory(story)\n setFormData(story)\n setIsDialogOpen(true)\n }\n\n const handleDelete = async (storyId: string) => {\n const confirmed = await showConfirm(\"确定要删除这个故事吗?\", \"删除故事\")\n if (confirmed) {\n onChange(stories.filter(s => s.id !== storyId))\n }\n }\n\n const handleSave = async () => {\n if (!formData.title || !formData.content) {\n await showAlert(\"请填写标题和内容\", \"提示\")\n return\n }\n\n const now = new Date().toISOString()\n \n if (editingStory) {\n // 更新现有故事\n onChange(\n stories.map(s =>\n s.id === editingStory.id\n ? { ...s, ...formData, updatedAt: now }\n : s\n )\n )\n } else {\n // 添加新故事\n const newStory: FamilyStory = {\n id: uuidv4(),\n title: formData.title!,\n content: formData.content!,\n date: formData.date,\n imageIds: formData.imageIds || [],\n createdAt: now,\n updatedAt: now,\n }\n onChange([...stories, newStory])\n }\n\n setIsDialogOpen(false)\n setFormData({ title: \"\", content: \"\", date: \"\" })\n }\n\n return (\n
\n
\n

\n \n 家族故事 ({stories.length})\n

\n {!readonly && (\n \n \n 添加故事\n \n )}\n
\n\n {stories.length > 0 ? (\n
\n {stories\n .sort((a, b) => new Date(b.createdAt).getTime() - new Date(a.createdAt).getTime())\n .map((story) => (\n \n \n
\n
\n {story.title}\n {story.date && (\n
\n \n {story.date}\n
\n )}\n
\n {!readonly && (\n
\n handleEdit(story)}\n >\n \n \n handleDelete(story.id)}\n >\n \n \n
\n )}\n
\n
\n \n

\n {story.content}\n

\n
\n 创建于 {new Date(story.createdAt).toLocaleDateString('zh-CN')}\n
\n
\n
\n ))}\n
\n ) : (\n
\n 暂无家族故事\n
\n )}\n\n {/* 添加/编辑故事对话框 */}\n \n \n \n {editingStory ? \"编辑故事\" : \"添加故事\"}\n \n
\n
\n \n setFormData({ ...formData, title: e.target.value })}\n />\n
\n
\n \n setFormData({ ...formData, date: e.target.value })}\n />\n
\n
\n \n setFormData({ ...formData, content: e.target.value })}\n />\n
\n
\n \n \n \n \n
\n
\n
\n )\n}\n"],"names":[],"mappings":"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"}}, + {"offset": {"line": 2818, "column": 0}, "map": {"version":3,"sources":["file:///Users/freedak/Documents/go-new/chinese-family-tree/components/members/member-form.tsx"],"sourcesContent":["\"use client\"\n\nimport type React from \"react\"\n\nimport { useState } from \"react\"\nimport type { FamilyMember } from \"@/types/family\"\nimport { Button } from \"@/components/ui/button\"\nimport { Input } from \"@/components/ui/input\"\nimport { Label } from \"@/components/ui/label\"\nimport { Textarea } from \"@/components/ui/textarea\"\nimport { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from \"@/components/ui/select\"\nimport { CalendarIcon, User, Scroll, Users, Images, BookOpen } from \"lucide-react\"\nimport { Card, CardContent, CardDescription, CardHeader, CardTitle } from \"@/components/ui/card\"\nimport { ImageUpload } from \"@/components/ui/image-upload\"\nimport { PhotoGallery } from \"./photo-gallery\"\nimport { StoryManager } from \"./story-manager\"\n\ninterface MemberFormProps {\n initialData?: Partial\n existingMembers?: FamilyMember[]\n onSubmit: (data: FamilyMember) => void\n onCancel: () => void\n}\n\nexport function MemberForm({ initialData, existingMembers = [], onSubmit, onCancel }: MemberFormProps) {\n // 计算最大世系\n const maxGeneration = existingMembers.length > 0 \n ? Math.max(...existingMembers.map(m => m.generation || 1))\n : 1\n \n // 获取始祖的姓氏(第1世成员)\n const ancestorSurname = existingMembers.find(m => m.generation === 1)?.surname || \"\"\n \n // Initialize state with default values or initialData\n const [formData, setFormData] = useState>(() => {\n const defaults = {\n id: crypto.randomUUID(),\n surname: ancestorSurname,\n givenName: \"\",\n fullName: \"\",\n gender: \"MALE\" as \"MALE\" | \"FEMALE\",\n generation: maxGeneration,\n spouseIds: [],\n childrenIds: [],\n tags: [],\n }\n \n if (!initialData) return defaults\n \n return {\n ...defaults,\n ...initialData,\n gender: (initialData.gender || \"MALE\").toUpperCase() as \"MALE\" | \"FEMALE\",\n spouseIds: initialData.spouseIds || [],\n childrenIds: initialData.childrenIds || [],\n tags: initialData.tags || [],\n fatherId: initialData.fatherId || undefined,\n motherId: initialData.motherId || undefined,\n }\n })\n\n const [errors, setErrors] = useState([])\n\n const handleChange = (field: keyof FamilyMember, value: any) => {\n setFormData((prev) => {\n const newData = { ...prev, [field]: value }\n \n // Auto-update full name if surname or given name changes\n if (field === \"surname\" || field === \"givenName\") {\n newData.fullName = (newData.surname || \"\") + (newData.givenName || \"\")\n }\n \n // 选择父亲时自动带出母亲\n if (field === \"fatherId\" && value) {\n const father = existingMembers.find(m => m.id === value)\n if (father && father.spouseIds && father.spouseIds.length > 0) {\n // 找到父亲的配偶(母亲)\n const motherId = father.spouseIds[0]\n newData.motherId = motherId\n }\n }\n \n // 选择母亲时自动带出父亲\n if (field === \"motherId\" && value) {\n const mother = existingMembers.find(m => m.id === value)\n if (mother && mother.spouseIds && mother.spouseIds.length > 0) {\n // 找到母亲的配偶(父亲)\n const fatherId = mother.spouseIds[0]\n newData.fatherId = fatherId\n }\n }\n \n return newData\n })\n // Clear errors when user makes changes\n if (errors.length > 0) setErrors([])\n }\n\n const handleSpouseAdd = (spouseId: string) => {\n if (!spouseId || spouseId === \"none\") return\n \n setFormData((prev) => {\n const currentSpouses = prev.spouseIds || []\n // 避免重复添加\n if (currentSpouses.includes(spouseId)) return prev\n \n return {\n ...prev,\n spouseIds: [...currentSpouses, spouseId]\n }\n })\n }\n\n const handleSpouseRemove = (spouseId: string) => {\n setFormData((prev) => ({\n ...prev,\n spouseIds: (prev.spouseIds || []).filter(id => id !== spouseId)\n }))\n }\n\n const handleChildAdd = (childId: string) => {\n if (!childId || childId === \"none\") return\n \n setFormData((prev) => {\n const currentChildren = prev.childrenIds || []\n // 避免重复添加\n if (currentChildren.includes(childId)) return prev\n \n return {\n ...prev,\n childrenIds: [...currentChildren, childId]\n }\n })\n }\n\n const handleChildRemove = (childId: string) => {\n setFormData((prev) => ({\n ...prev,\n childrenIds: (prev.childrenIds || []).filter(id => id !== childId)\n }))\n }\n\n const validate = (): boolean => {\n const newErrors: string[] = []\n\n // 1. Date Validation\n if (formData.birthDate && formData.deathDate) {\n if (new Date(formData.birthDate) > new Date(formData.deathDate)) {\n newErrors.push(\"出生日期不能晚于逝世日期\")\n }\n }\n\n // 2. Parent Age Validation\n const birthYear = formData.birthDate ? new Date(formData.birthDate).getFullYear() : null\n\n if (birthYear) {\n if (formData.fatherId) {\n const father = existingMembers.find((m) => m.id === formData.fatherId)\n if (father?.birthDate) {\n const fatherBirthYear = new Date(father.birthDate).getFullYear()\n if (birthYear - fatherBirthYear < 15) {\n newErrors.push(`与父亲的年龄差过小 (${birthYear - fatherBirthYear}岁),请确认`)\n }\n if (birthYear < fatherBirthYear) {\n newErrors.push(\"出生日期不能早于父亲\")\n }\n }\n }\n\n if (formData.motherId) {\n const mother = existingMembers.find((m) => m.id === formData.motherId)\n if (mother?.birthDate) {\n const motherBirthYear = new Date(mother.birthDate).getFullYear()\n if (birthYear - motherBirthYear < 15) {\n newErrors.push(`与母亲的年龄差过小 (${birthYear - motherBirthYear}岁),请确认`)\n }\n if (birthYear < motherBirthYear) {\n newErrors.push(\"出生日期不能早于母亲\")\n }\n }\n }\n }\n\n // 3. Generation Validation\n if (formData.fatherId) {\n const father = existingMembers.find((m) => m.id === formData.fatherId)\n if (father && formData.generation !== father.generation + 1) {\n newErrors.push(`世系错误:父亲是第 ${father.generation} 世,子女应为第 ${father.generation + 1} 世`)\n }\n }\n\n // 4. Circular Reference Detection (循环引用检测)\n if (formData.fatherId || formData.motherId) {\n const visited = new Set()\n const checkCircular = (memberId: string): boolean => {\n if (memberId === formData.id) return true\n if (visited.has(memberId)) return false\n visited.add(memberId)\n\n const member = existingMembers.find((m) => m.id === memberId)\n if (!member) return false\n\n if (member.fatherId && checkCircular(member.fatherId)) return true\n if (member.motherId && checkCircular(member.motherId)) return true\n\n return false\n }\n\n if (formData.fatherId && checkCircular(formData.fatherId)) {\n newErrors.push(\"检测到循环引用:不能将自己的后代设置为父亲\")\n }\n if (formData.motherId && checkCircular(formData.motherId)) {\n newErrors.push(\"检测到循环引用:不能将自己的后代设置为母亲\")\n }\n }\n\n // 5. Self-Reference Detection (自我引用检测)\n if (formData.fatherId === formData.id) {\n newErrors.push(\"不能将自己设置为自己的父亲\")\n }\n if (formData.motherId === formData.id) {\n newErrors.push(\"不能将自己设置为自己的母亲\")\n }\n if (formData.spouseIds?.includes(formData.id || \"\")) {\n newErrors.push(\"不能将自己设置为自己的配偶\")\n }\n\n setErrors(newErrors)\n return newErrors.length === 0\n }\n\n const handleSubmit = (e: React.FormEvent) => {\n e.preventDefault()\n if (validate()) {\n onSubmit(formData as FamilyMember)\n }\n }\n\n const potentialRelatives = existingMembers.filter((m) => m.id !== formData.id)\n\n return (\n
\n {errors.length > 0 && (\n
\n

请检查以下问题:

\n
    \n {errors.map((err, index) => (\n
  • {err}
  • \n ))}\n
\n
\n )}\n\n
\n {/* 基本信息和家庭关系 - 两列布局 */}\n
\n {/* 左列:基本信息 */}\n \n \n \n \n 基本信息 (Identity)\n \n \n \n
\n handleChange(\"avatarImageId\", imageId)}\n />\n
\n\n
\n
\n \n handleChange(\"surname\", e.target.value)}\n />\n
\n
\n \n handleChange(\"givenName\", e.target.value)}\n />\n
\n
\n\n
\n
\n \n \n
\n
\n \n handleChange(\"generation\", Number.parseInt(e.target.value))}\n />\n
\n
\n
\n
\n\n {/* 右列:家庭关系 */}\n \n \n \n \n 家庭关系 (Relationships)\n \n \n \n
\n \n
\n handleChange(\"fatherId\", val === \"none\" ? undefined : val)}\n >\n \n \n \n \n 无 (None)\n {potentialRelatives\n .filter((m) => m.gender === \"MALE\" && m.generation === (formData.generation || 1) - 1)\n .map((m) => (\n \n {m.fullName} ({m.generation}世)\n \n ))}\n \n \n {!formData.fatherId && (\n handleChange(\"spouseFatherName\", e.target.value)}\n className=\"flex-1\"\n />\n )}\n
\n
\n\n
\n \n
\n handleChange(\"motherId\", val === \"none\" ? undefined : val)}\n >\n \n \n \n \n 无 (None)\n {potentialRelatives\n .filter((m) => m.gender === \"FEMALE\" && m.generation === (formData.generation || 1) - 1)\n .map((m) => (\n \n {m.fullName} ({m.generation}世)\n \n ))}\n \n \n {!formData.motherId && (\n handleChange(\"spouseMotherName\", e.target.value)}\n className=\"flex-1\"\n />\n )}\n
\n
\n\n
\n \n \n \n {/* 已选配偶列表 */}\n {formData.spouseIds && formData.spouseIds.length > 0 && (\n
\n {formData.spouseIds.map((spouseId, index) => {\n const spouse = existingMembers.find(m => m.id === spouseId)\n if (!spouse) return null\n \n return (\n
\n \n {index + 1}. {spouse.fullName} (第{spouse.generation}世)\n \n handleSpouseRemove(spouseId)}\n className=\"h-6 w-6 p-0 hover:bg-destructive hover:text-destructive-foreground\"\n >\n ×\n \n
\n )\n })}\n
\n )}\n
\n\n
\n \n \n \n {/* 已选子女列表 */}\n {formData.childrenIds && formData.childrenIds.length > 0 && (\n
\n {formData.childrenIds.map((childId, index) => {\n const child = existingMembers.find(m => m.id === childId)\n if (!child) return null\n \n return (\n
\n \n {index + 1}. {child.fullName} (第{child.generation}世)\n \n handleChildRemove(childId)}\n className=\"h-6 w-6 p-0 hover:bg-destructive hover:text-destructive-foreground\"\n >\n ×\n \n
\n )\n })}\n
\n )}\n
\n
\n
\n
\n\n {/* Traditional Names */}\n \n \n \n \n 传统称谓 (Traditional Names)\n \n \n \n
\n
\n \n handleChange(\"courtesyName\", e.target.value)}\n placeholder=\"e.g. 伯虎\"\n />\n
\n
\n \n handleChange(\"artName\", e.target.value)}\n placeholder=\"e.g. 六如居士\"\n />\n
\n
\n
\n
\n \n handleChange(\"generationName\", e.target.value)}\n />\n
\n
\n \n handleChange(\"posthumousName\", e.target.value)}\n />\n
\n
\n
\n
\n\n {/* Dates & Places */}\n \n \n \n \n 生平与地点 (Life & Places)\n \n \n \n
\n
\n \n handleChange(\"birthDate\", e.target.value)}\n />\n
\n
\n \n handleChange(\"deathDate\", e.target.value)}\n />\n
\n
\n
\n \n handleChange(\"ancestralHome\", e.target.value)}\n placeholder=\"e.g. 福建省泉州市\"\n />\n
\n
\n \n handleChange(\"burialPlace\", e.target.value)}\n />\n
\n
\n
\n\n {/* Contact Information */}\n \n \n \n \n 联系方式 (Contact Information)\n \n 在世成员的联系方式\n \n \n
\n \n handleChange(\"phone\", e.target.value)}\n placeholder=\"e.g. 13800138000\"\n />\n
\n
\n \n handleChange(\"telephone\", e.target.value)}\n placeholder=\"e.g. 0592-1234567\"\n />\n
\n
\n \n handleChange(\"email\", e.target.value)}\n placeholder=\"e.g. example@email.com\"\n />\n
\n
\n \n handleChange(\"address\", e.target.value)}\n placeholder=\"e.g. 福建省厦门市思明区XX路XX号\"\n />\n
\n
\n
\n\n {/* Biography */}\n \n \n \n \n 生平事迹 (Biography)\n \n \n \n handleChange(\"bio\", e.target.value)}\n />\n \n \n\n {/* Tags */}\n \n \n \n \n 标签 (Tags)\n \n 添加标签以便分类和搜索(按回车添加)\n \n \n
\n
\n {\n if (e.key === 'Enter') {\n e.preventDefault()\n const input = e.currentTarget\n const value = input.value.trim()\n if (value && !(formData.tags || []).includes(value)) {\n handleChange('tags', [...(formData.tags || []), value])\n input.value = ''\n }\n }\n }}\n />\n
\n {formData.tags && formData.tags.length > 0 && (\n
\n {formData.tags.map((tag, index) => (\n \n {tag}\n {\n const newTags = formData.tags?.filter((_, i) => i !== index) || []\n handleChange('tags', newTags)\n }}\n className=\"ml-1 hover:text-destructive\"\n >\n ×\n \n \n ))}\n
\n )}\n
\n
\n
\n\n {/* Photo Gallery */}\n \n \n \n \n 照片墙 (Photo Gallery)\n \n 上传多张照片记录珍贵时刻\n \n \n handleChange(\"photoIds\", photoIds)}\n />\n \n \n\n {/* Family Stories */}\n \n \n \n \n 家族故事 (Family Stories)\n \n 记录与此成员相关的家族故事\n \n \n handleChange(\"stories\", stories)}\n />\n \n \n\n
\n\n
\n \n \n
\n
\n )\n}\n"],"names":[],"mappings":"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"}}, + {"offset": {"line": 4588, "column": 0}, "map": {"version":3,"sources":["file:///Users/freedak/Documents/go-new/chinese-family-tree/app/members/%5Bid%5D/page.tsx"],"sourcesContent":["\"use client\"\n\nimport Link from \"next/link\"\n\nimport { useParams, useRouter } from \"next/navigation\"\nimport { useFamily } from \"@/context/family-context\"\nimport { SiteHeader } from \"@/components/site-header\"\nimport { MemberForm } from \"@/components/members/member-form\"\nimport { Button } from \"@/components/ui/button\"\nimport { ArrowLeft, Edit, Trash, Share2, Printer, CircleUser, CircleUserRound, Images, BookOpen } from \"lucide-react\"\nimport { useState, useEffect } from \"react\"\nimport type { FamilyMember } from \"@/types/family\"\nimport { db } from \"@/lib/db\"\nimport { PhotoGallery } from \"@/components/members/photo-gallery\"\nimport { StoryManager } from \"@/components/members/story-manager\"\nimport { useDialog } from \"@/components/ui/alert-dialog-custom\"\n\nexport default function MemberProfilePage() {\n const { id } = useParams()\n const { getMember, updateMember, deleteMember, treeData } = useFamily()\n const { showConfirm } = useDialog()\n const router = useRouter()\n const [isEditing, setIsEditing] = useState(false)\n const [avatarBlobUrl, setAvatarBlobUrl] = useState(undefined)\n\n const member = getMember(id as string)\n const allMembers = Object.values(treeData.members)\n\n // Load avatar blob if exists\n useEffect(() => {\n if (member?.avatarImageId) {\n db.images.get(member.avatarImageId).then((image) => {\n if (image) {\n const url = URL.createObjectURL(image.blob)\n setAvatarBlobUrl(url)\n return () => URL.revokeObjectURL(url)\n }\n })\n } else {\n setAvatarBlobUrl(undefined)\n }\n }, [member?.avatarImageId])\n\n if (!member) {\n return (\n
\n \n
\n

Member not found

\n \n
\n
\n )\n }\n\n const handleSave = (updatedMember: FamilyMember) => {\n updateMember(updatedMember.id, updatedMember)\n setIsEditing(false)\n }\n\n const handleDelete = async () => {\n const confirmed = await showConfirm(\"确定要删除这位成员吗?这将同时删除其关联关系。\", \"删除成员\", \"destructive\")\n if (confirmed) {\n deleteMember(member.id)\n router.push(\"/members\")\n }\n }\n\n if (isEditing) {\n return (\n
\n \n
\n
\n \n

编辑成员: {member.fullName}

\n
\n setIsEditing(false)} \n />\n
\n
\n )\n }\n\n return (\n
\n \n
\n {/* Header Section */}\n
\n
\n
\n {avatarBlobUrl ? (\n \n ) : (\n member.gender === 'FEMALE' ? (\n \n ) : (\n \n )\n )}\n
\n
\n
\n

{member.fullName}

\n \n {member.generation}世\n \n
\n
\n {member.courtesyName && (\n

\n 字:{member.courtesyName}\n

\n )}\n {member.artName && (\n

\n 号:{member.artName}\n

\n )}\n {member.ancestralHome &&

籍贯:{member.ancestralHome}

}\n
\n {member.tags && member.tags.length > 0 && (\n
\n {member.tags.map((tag) => (\n \n {tag}\n \n ))}\n
\n )}\n
\n
\n\n
\n \n \n \n \n
\n
\n\n {/* Content Grid */}\n
\n {/* Main Biography */}\n
\n
\n

\n \n 生平事迹\n

\n
\n {member.bio ? (\n

{member.bio}

\n ) : (\n

暂无生平记录...

\n )}\n
\n
\n\n {/* Photo Gallery */}\n {member.photoIds && member.photoIds.length > 0 && (\n
\n

\n \n 照片墙\n

\n
\n updateMember(member.id, { photoIds })}\n readonly={false}\n />\n
\n
\n )}\n\n {/* Family Stories */}\n {member.stories && member.stories.length > 0 && (\n
\n

\n \n 家族故事\n

\n
\n updateMember(member.id, { stories })}\n readonly={false}\n />\n
\n
\n )}\n\n
\n

\n \n 家族关系\n

\n
\n
\n

\n 父亲 (Father)\n

\n {member.fatherId ? (\n \n {getMember(member.fatherId)?.fullName || member.fatherId}\n \n ) : member.spouseFatherName ? (\n \n {member.spouseFatherName}\n \n ) : (\n -\n )}\n
\n
\n

\n 母亲 (Mother)\n

\n {member.motherId ? (\n \n {getMember(member.motherId)?.fullName || member.motherId}\n \n ) : member.spouseMotherName ? (\n \n {member.spouseMotherName}\n \n ) : (\n -\n )}\n
\n
\n

\n 配偶 (Spouse)\n

\n
\n {member.spouseIds?.length > 0 ? (\n member.spouseIds.map((spouseId) => (\n \n {getMember(spouseId)?.fullName || spouseId}\n \n ))\n ) : (\n 无记录\n )}\n
\n
\n
\n

\n 子女 (Children)\n

\n
\n {member.childrenIds?.length > 0 ? (\n member.childrenIds.map((childId) => (\n \n {getMember(childId)?.fullName || childId}\n \n ))\n ) : (\n 无记录\n )}\n
\n
\n
\n
\n
\n\n {/* Sidebar Info */}\n
\n
\n

详细信息

\n
\n
\n
出生日期
\n
{member.birthDate || \"-\"}
\n
\n {member.deathDate && (\n <>\n
\n
逝世日期
\n
{member.deathDate}
\n
\n
\n
谥号
\n
{member.posthumousName || \"-\"}
\n
\n
\n
墓地
\n
{member.burialPlace || \"-\"}
\n
\n \n )}\n {member.generationName && (\n
\n
字辈
\n
{member.generationName}
\n
\n )}\n
\n
\n \n {/* 联系方式 */}\n {(member.phone || member.telephone || member.email || member.address) && (\n
\n

联系方式

\n
\n {member.phone && (\n
\n
手机号
\n
\n \n {member.phone}\n \n
\n
\n )}\n {member.telephone && (\n
\n
固定电话
\n
\n \n {member.telephone}\n \n
\n
\n )}\n {member.email && (\n
\n
邮箱
\n
\n \n {member.email}\n \n
\n
\n )}\n {member.address && (\n
\n
现居地址
\n
{member.address}
\n
\n )}\n
\n
\n )}\n
\n
\n
\n
\n )\n}\n"],"names":[],"mappings":"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"}}] } \ No newline at end of file diff --git a/.next/dev/server/chunks/ssr/[root-of-the-server]__3f095049._.js b/.next/dev/server/chunks/ssr/[root-of-the-server]__3f095049._.js new file mode 100644 index 00000000..ce2a017b --- /dev/null +++ b/.next/dev/server/chunks/ssr/[root-of-the-server]__3f095049._.js @@ -0,0 +1,4697 @@ +module.exports = [ +"[project]/Documents/go-new/chinese-family-tree/components/ui/avatar.tsx [app-ssr] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "Avatar", + ()=>Avatar, + "AvatarFallback", + ()=>AvatarFallback, + "AvatarImage", + ()=>AvatarImage +]); +var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/server/route-modules/app-page/vendored/ssr/react-jsx-dev-runtime.js [app-ssr] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$react$2d$avatar$40$1$2e$1$2e$2_$40$types$2b$react$2d$dom$40$19$2e$2$2e$3_$40$types$2b$react$40$19$2e$2$2e$6_$5f40$types$2b$react$40$_3ee3dafa662d71951c1a3d5b289c96d1$2f$node_modules$2f40$radix$2d$ui$2f$react$2d$avatar$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/@radix-ui+react-avatar@1.1.2_@types+react-dom@19.2.3_@types+react@19.2.6__@types+react@_3ee3dafa662d71951c1a3d5b289c96d1/node_modules/@radix-ui/react-avatar/dist/index.mjs [app-ssr] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$lib$2f$utils$2e$ts__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/lib/utils.ts [app-ssr] (ecmascript)"); +'use client'; +; +; +; +function Avatar({ className, ...props }) { + return /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$react$2d$avatar$40$1$2e$1$2e$2_$40$types$2b$react$2d$dom$40$19$2e$2$2e$3_$40$types$2b$react$40$19$2e$2$2e$6_$5f40$types$2b$react$40$_3ee3dafa662d71951c1a3d5b289c96d1$2f$node_modules$2f40$radix$2d$ui$2f$react$2d$avatar$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["Root"], { + "data-slot": "avatar", + className: (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$lib$2f$utils$2e$ts__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["cn"])('relative flex size-8 shrink-0 overflow-hidden rounded-full', className), + ...props + }, void 0, false, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/ui/avatar.tsx", + lineNumber: 13, + columnNumber: 5 + }, this); +} +function AvatarImage({ className, ...props }) { + return /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$react$2d$avatar$40$1$2e$1$2e$2_$40$types$2b$react$2d$dom$40$19$2e$2$2e$3_$40$types$2b$react$40$19$2e$2$2e$6_$5f40$types$2b$react$40$_3ee3dafa662d71951c1a3d5b289c96d1$2f$node_modules$2f40$radix$2d$ui$2f$react$2d$avatar$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["Image"], { + "data-slot": "avatar-image", + className: (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$lib$2f$utils$2e$ts__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["cn"])('aspect-square size-full', className), + ...props + }, void 0, false, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/ui/avatar.tsx", + lineNumber: 29, + columnNumber: 5 + }, this); +} +function AvatarFallback({ className, ...props }) { + return /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$react$2d$avatar$40$1$2e$1$2e$2_$40$types$2b$react$2d$dom$40$19$2e$2$2e$3_$40$types$2b$react$40$19$2e$2$2e$6_$5f40$types$2b$react$40$_3ee3dafa662d71951c1a3d5b289c96d1$2f$node_modules$2f40$radix$2d$ui$2f$react$2d$avatar$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["Fallback"], { + "data-slot": "avatar-fallback", + className: (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$lib$2f$utils$2e$ts__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["cn"])('bg-muted flex size-full items-center justify-center rounded-full', className), + ...props + }, void 0, false, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/ui/avatar.tsx", + lineNumber: 42, + columnNumber: 5 + }, this); +} +; +}), +"[project]/Documents/go-new/chinese-family-tree/components/ui/dropdown-menu.tsx [app-ssr] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "DropdownMenu", + ()=>DropdownMenu, + "DropdownMenuCheckboxItem", + ()=>DropdownMenuCheckboxItem, + "DropdownMenuContent", + ()=>DropdownMenuContent, + "DropdownMenuGroup", + ()=>DropdownMenuGroup, + "DropdownMenuItem", + ()=>DropdownMenuItem, + "DropdownMenuLabel", + ()=>DropdownMenuLabel, + "DropdownMenuPortal", + ()=>DropdownMenuPortal, + "DropdownMenuRadioGroup", + ()=>DropdownMenuRadioGroup, + "DropdownMenuRadioItem", + ()=>DropdownMenuRadioItem, + "DropdownMenuSeparator", + ()=>DropdownMenuSeparator, + "DropdownMenuShortcut", + ()=>DropdownMenuShortcut, + "DropdownMenuSub", + ()=>DropdownMenuSub, + "DropdownMenuSubContent", + ()=>DropdownMenuSubContent, + "DropdownMenuSubTrigger", + ()=>DropdownMenuSubTrigger, + "DropdownMenuTrigger", + ()=>DropdownMenuTrigger +]); +var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/server/route-modules/app-page/vendored/ssr/react-jsx-dev-runtime.js [app-ssr] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$react$2d$dropdown$2d$menu$40$2$2e$1$2e$4_$40$types$2b$react$2d$dom$40$19$2e$2$2e$3_$40$types$2b$react$40$19$2e$2$2e$6_$5f40$types_aefad4ac5851d46557f75f368796c888$2f$node_modules$2f40$radix$2d$ui$2f$react$2d$dropdown$2d$menu$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/@radix-ui+react-dropdown-menu@2.1.4_@types+react-dom@19.2.3_@types+react@19.2.6__@types_aefad4ac5851d46557f75f368796c888/node_modules/@radix-ui/react-dropdown-menu/dist/index.mjs [app-ssr] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$lucide$2d$react$40$0$2e$454$2e$0_react$40$19$2e$2$2e$0$2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$check$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__$3c$export__default__as__CheckIcon$3e$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/lucide-react@0.454.0_react@19.2.0/node_modules/lucide-react/dist/esm/icons/check.js [app-ssr] (ecmascript) "); +var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$lucide$2d$react$40$0$2e$454$2e$0_react$40$19$2e$2$2e$0$2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$chevron$2d$right$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__$3c$export__default__as__ChevronRightIcon$3e$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/lucide-react@0.454.0_react@19.2.0/node_modules/lucide-react/dist/esm/icons/chevron-right.js [app-ssr] (ecmascript) "); +var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$lucide$2d$react$40$0$2e$454$2e$0_react$40$19$2e$2$2e$0$2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$circle$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__$3c$export__default__as__CircleIcon$3e$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/lucide-react@0.454.0_react@19.2.0/node_modules/lucide-react/dist/esm/icons/circle.js [app-ssr] (ecmascript) "); +var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$lib$2f$utils$2e$ts__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/lib/utils.ts [app-ssr] (ecmascript)"); +'use client'; +; +; +; +; +function DropdownMenu({ ...props }) { + return /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$react$2d$dropdown$2d$menu$40$2$2e$1$2e$4_$40$types$2b$react$2d$dom$40$19$2e$2$2e$3_$40$types$2b$react$40$19$2e$2$2e$6_$5f40$types_aefad4ac5851d46557f75f368796c888$2f$node_modules$2f40$radix$2d$ui$2f$react$2d$dropdown$2d$menu$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["Root"], { + "data-slot": "dropdown-menu", + ...props + }, void 0, false, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/ui/dropdown-menu.tsx", + lineNumber: 12, + columnNumber: 10 + }, this); +} +function DropdownMenuPortal({ ...props }) { + return /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$react$2d$dropdown$2d$menu$40$2$2e$1$2e$4_$40$types$2b$react$2d$dom$40$19$2e$2$2e$3_$40$types$2b$react$40$19$2e$2$2e$6_$5f40$types_aefad4ac5851d46557f75f368796c888$2f$node_modules$2f40$radix$2d$ui$2f$react$2d$dropdown$2d$menu$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["Portal"], { + "data-slot": "dropdown-menu-portal", + ...props + }, void 0, false, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/ui/dropdown-menu.tsx", + lineNumber: 19, + columnNumber: 5 + }, this); +} +function DropdownMenuTrigger({ ...props }) { + return /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$react$2d$dropdown$2d$menu$40$2$2e$1$2e$4_$40$types$2b$react$2d$dom$40$19$2e$2$2e$3_$40$types$2b$react$40$19$2e$2$2e$6_$5f40$types_aefad4ac5851d46557f75f368796c888$2f$node_modules$2f40$radix$2d$ui$2f$react$2d$dropdown$2d$menu$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["Trigger"], { + "data-slot": "dropdown-menu-trigger", + ...props + }, void 0, false, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/ui/dropdown-menu.tsx", + lineNumber: 27, + columnNumber: 5 + }, this); +} +function DropdownMenuContent({ className, sideOffset = 4, ...props }) { + return /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$react$2d$dropdown$2d$menu$40$2$2e$1$2e$4_$40$types$2b$react$2d$dom$40$19$2e$2$2e$3_$40$types$2b$react$40$19$2e$2$2e$6_$5f40$types_aefad4ac5851d46557f75f368796c888$2f$node_modules$2f40$radix$2d$ui$2f$react$2d$dropdown$2d$menu$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["Portal"], { + children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$react$2d$dropdown$2d$menu$40$2$2e$1$2e$4_$40$types$2b$react$2d$dom$40$19$2e$2$2e$3_$40$types$2b$react$40$19$2e$2$2e$6_$5f40$types_aefad4ac5851d46557f75f368796c888$2f$node_modules$2f40$radix$2d$ui$2f$react$2d$dropdown$2d$menu$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["Content"], { + "data-slot": "dropdown-menu-content", + sideOffset: sideOffset, + className: (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$lib$2f$utils$2e$ts__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["cn"])('bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 max-h-(--radix-dropdown-menu-content-available-height) min-w-[8rem] origin-(--radix-dropdown-menu-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-md border p-1 shadow-md', className), + ...props + }, void 0, false, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/ui/dropdown-menu.tsx", + lineNumber: 41, + columnNumber: 7 + }, this) + }, void 0, false, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/ui/dropdown-menu.tsx", + lineNumber: 40, + columnNumber: 5 + }, this); +} +function DropdownMenuGroup({ ...props }) { + return /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$react$2d$dropdown$2d$menu$40$2$2e$1$2e$4_$40$types$2b$react$2d$dom$40$19$2e$2$2e$3_$40$types$2b$react$40$19$2e$2$2e$6_$5f40$types_aefad4ac5851d46557f75f368796c888$2f$node_modules$2f40$radix$2d$ui$2f$react$2d$dropdown$2d$menu$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["Group"], { + "data-slot": "dropdown-menu-group", + ...props + }, void 0, false, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/ui/dropdown-menu.tsx", + lineNumber: 58, + columnNumber: 5 + }, this); +} +function DropdownMenuItem({ className, inset, variant = 'default', ...props }) { + return /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$react$2d$dropdown$2d$menu$40$2$2e$1$2e$4_$40$types$2b$react$2d$dom$40$19$2e$2$2e$3_$40$types$2b$react$40$19$2e$2$2e$6_$5f40$types_aefad4ac5851d46557f75f368796c888$2f$node_modules$2f40$radix$2d$ui$2f$react$2d$dropdown$2d$menu$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["Item"], { + "data-slot": "dropdown-menu-item", + "data-inset": inset, + "data-variant": variant, + className: (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$lib$2f$utils$2e$ts__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["cn"])("focus:bg-accent focus:text-accent-foreground data-[variant=destructive]:text-destructive data-[variant=destructive]:focus:bg-destructive/10 dark:data-[variant=destructive]:focus:bg-destructive/20 data-[variant=destructive]:focus:text-destructive data-[variant=destructive]:*:[svg]:!text-destructive [&_svg:not([class*='text-'])]:text-muted-foreground relative flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 data-[inset]:pl-8 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4", className), + ...props + }, void 0, false, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/ui/dropdown-menu.tsx", + lineNumber: 72, + columnNumber: 5 + }, this); +} +function DropdownMenuCheckboxItem({ className, children, checked, ...props }) { + return /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$react$2d$dropdown$2d$menu$40$2$2e$1$2e$4_$40$types$2b$react$2d$dom$40$19$2e$2$2e$3_$40$types$2b$react$40$19$2e$2$2e$6_$5f40$types_aefad4ac5851d46557f75f368796c888$2f$node_modules$2f40$radix$2d$ui$2f$react$2d$dropdown$2d$menu$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["CheckboxItem"], { + "data-slot": "dropdown-menu-checkbox-item", + className: (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$lib$2f$utils$2e$ts__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["cn"])("focus:bg-accent focus:text-accent-foreground relative flex cursor-default items-center gap-2 rounded-sm py-1.5 pr-2 pl-8 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4", className), + checked: checked, + ...props, + children: [ + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("span", { + className: "pointer-events-none absolute left-2 flex size-3.5 items-center justify-center", + children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$react$2d$dropdown$2d$menu$40$2$2e$1$2e$4_$40$types$2b$react$2d$dom$40$19$2e$2$2e$3_$40$types$2b$react$40$19$2e$2$2e$6_$5f40$types_aefad4ac5851d46557f75f368796c888$2f$node_modules$2f40$radix$2d$ui$2f$react$2d$dropdown$2d$menu$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["ItemIndicator"], { + children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$lucide$2d$react$40$0$2e$454$2e$0_react$40$19$2e$2$2e$0$2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$check$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__$3c$export__default__as__CheckIcon$3e$__["CheckIcon"], { + className: "size-4" + }, void 0, false, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/ui/dropdown-menu.tsx", + lineNumber: 103, + columnNumber: 11 + }, this) + }, void 0, false, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/ui/dropdown-menu.tsx", + lineNumber: 102, + columnNumber: 9 + }, this) + }, void 0, false, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/ui/dropdown-menu.tsx", + lineNumber: 101, + columnNumber: 7 + }, this), + children + ] + }, void 0, true, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/ui/dropdown-menu.tsx", + lineNumber: 92, + columnNumber: 5 + }, this); +} +function DropdownMenuRadioGroup({ ...props }) { + return /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$react$2d$dropdown$2d$menu$40$2$2e$1$2e$4_$40$types$2b$react$2d$dom$40$19$2e$2$2e$3_$40$types$2b$react$40$19$2e$2$2e$6_$5f40$types_aefad4ac5851d46557f75f368796c888$2f$node_modules$2f40$radix$2d$ui$2f$react$2d$dropdown$2d$menu$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["RadioGroup"], { + "data-slot": "dropdown-menu-radio-group", + ...props + }, void 0, false, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/ui/dropdown-menu.tsx", + lineNumber: 115, + columnNumber: 5 + }, this); +} +function DropdownMenuRadioItem({ className, children, ...props }) { + return /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$react$2d$dropdown$2d$menu$40$2$2e$1$2e$4_$40$types$2b$react$2d$dom$40$19$2e$2$2e$3_$40$types$2b$react$40$19$2e$2$2e$6_$5f40$types_aefad4ac5851d46557f75f368796c888$2f$node_modules$2f40$radix$2d$ui$2f$react$2d$dropdown$2d$menu$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["RadioItem"], { + "data-slot": "dropdown-menu-radio-item", + className: (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$lib$2f$utils$2e$ts__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["cn"])("focus:bg-accent focus:text-accent-foreground relative flex cursor-default items-center gap-2 rounded-sm py-1.5 pr-2 pl-8 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4", className), + ...props, + children: [ + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("span", { + className: "pointer-events-none absolute left-2 flex size-3.5 items-center justify-center", + children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$react$2d$dropdown$2d$menu$40$2$2e$1$2e$4_$40$types$2b$react$2d$dom$40$19$2e$2$2e$3_$40$types$2b$react$40$19$2e$2$2e$6_$5f40$types_aefad4ac5851d46557f75f368796c888$2f$node_modules$2f40$radix$2d$ui$2f$react$2d$dropdown$2d$menu$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["ItemIndicator"], { + children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$lucide$2d$react$40$0$2e$454$2e$0_react$40$19$2e$2$2e$0$2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$circle$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__$3c$export__default__as__CircleIcon$3e$__["CircleIcon"], { + className: "size-2 fill-current" + }, void 0, false, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/ui/dropdown-menu.tsx", + lineNumber: 138, + columnNumber: 11 + }, this) + }, void 0, false, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/ui/dropdown-menu.tsx", + lineNumber: 137, + columnNumber: 9 + }, this) + }, void 0, false, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/ui/dropdown-menu.tsx", + lineNumber: 136, + columnNumber: 7 + }, this), + children + ] + }, void 0, true, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/ui/dropdown-menu.tsx", + lineNumber: 128, + columnNumber: 5 + }, this); +} +function DropdownMenuLabel({ className, inset, ...props }) { + return /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$react$2d$dropdown$2d$menu$40$2$2e$1$2e$4_$40$types$2b$react$2d$dom$40$19$2e$2$2e$3_$40$types$2b$react$40$19$2e$2$2e$6_$5f40$types_aefad4ac5851d46557f75f368796c888$2f$node_modules$2f40$radix$2d$ui$2f$react$2d$dropdown$2d$menu$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["Label"], { + "data-slot": "dropdown-menu-label", + "data-inset": inset, + className: (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$lib$2f$utils$2e$ts__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["cn"])('px-2 py-1.5 text-sm font-medium data-[inset]:pl-8', className), + ...props + }, void 0, false, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/ui/dropdown-menu.tsx", + lineNumber: 154, + columnNumber: 5 + }, this); +} +function DropdownMenuSeparator({ className, ...props }) { + return /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$react$2d$dropdown$2d$menu$40$2$2e$1$2e$4_$40$types$2b$react$2d$dom$40$19$2e$2$2e$3_$40$types$2b$react$40$19$2e$2$2e$6_$5f40$types_aefad4ac5851d46557f75f368796c888$2f$node_modules$2f40$radix$2d$ui$2f$react$2d$dropdown$2d$menu$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["Separator"], { + "data-slot": "dropdown-menu-separator", + className: (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$lib$2f$utils$2e$ts__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["cn"])('bg-border -mx-1 my-1 h-px', className), + ...props + }, void 0, false, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/ui/dropdown-menu.tsx", + lineNumber: 171, + columnNumber: 5 + }, this); +} +function DropdownMenuShortcut({ className, ...props }) { + return /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("span", { + "data-slot": "dropdown-menu-shortcut", + className: (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$lib$2f$utils$2e$ts__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["cn"])('text-muted-foreground ml-auto text-xs tracking-widest', className), + ...props + }, void 0, false, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/ui/dropdown-menu.tsx", + lineNumber: 184, + columnNumber: 5 + }, this); +} +function DropdownMenuSub({ ...props }) { + return /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$react$2d$dropdown$2d$menu$40$2$2e$1$2e$4_$40$types$2b$react$2d$dom$40$19$2e$2$2e$3_$40$types$2b$react$40$19$2e$2$2e$6_$5f40$types_aefad4ac5851d46557f75f368796c888$2f$node_modules$2f40$radix$2d$ui$2f$react$2d$dropdown$2d$menu$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["Sub"], { + "data-slot": "dropdown-menu-sub", + ...props + }, void 0, false, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/ui/dropdown-menu.tsx", + lineNumber: 198, + columnNumber: 10 + }, this); +} +function DropdownMenuSubTrigger({ className, inset, children, ...props }) { + return /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$react$2d$dropdown$2d$menu$40$2$2e$1$2e$4_$40$types$2b$react$2d$dom$40$19$2e$2$2e$3_$40$types$2b$react$40$19$2e$2$2e$6_$5f40$types_aefad4ac5851d46557f75f368796c888$2f$node_modules$2f40$radix$2d$ui$2f$react$2d$dropdown$2d$menu$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["SubTrigger"], { + "data-slot": "dropdown-menu-sub-trigger", + "data-inset": inset, + className: (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$lib$2f$utils$2e$ts__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["cn"])("focus:bg-accent focus:text-accent-foreground data-[state=open]:bg-accent data-[state=open]:text-accent-foreground [&_svg:not([class*='text-'])]:text-muted-foreground flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none data-[inset]:pl-8 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4", className), + ...props, + children: [ + children, + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$lucide$2d$react$40$0$2e$454$2e$0_react$40$19$2e$2$2e$0$2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$chevron$2d$right$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__$3c$export__default__as__ChevronRightIcon$3e$__["ChevronRightIcon"], { + className: "ml-auto size-4" + }, void 0, false, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/ui/dropdown-menu.tsx", + lineNumber: 220, + columnNumber: 7 + }, this) + ] + }, void 0, true, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/ui/dropdown-menu.tsx", + lineNumber: 210, + columnNumber: 5 + }, this); +} +function DropdownMenuSubContent({ className, ...props }) { + return /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$react$2d$dropdown$2d$menu$40$2$2e$1$2e$4_$40$types$2b$react$2d$dom$40$19$2e$2$2e$3_$40$types$2b$react$40$19$2e$2$2e$6_$5f40$types_aefad4ac5851d46557f75f368796c888$2f$node_modules$2f40$radix$2d$ui$2f$react$2d$dropdown$2d$menu$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["SubContent"], { + "data-slot": "dropdown-menu-sub-content", + className: (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$lib$2f$utils$2e$ts__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["cn"])('bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 min-w-[8rem] origin-(--radix-dropdown-menu-content-transform-origin) overflow-hidden rounded-md border p-1 shadow-lg', className), + ...props + }, void 0, false, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/ui/dropdown-menu.tsx", + lineNumber: 230, + columnNumber: 5 + }, this); +} +; +}), +"[project]/Documents/go-new/chinese-family-tree/components/site-header.tsx [app-ssr] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "SiteHeader", + ()=>SiteHeader +]); +var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/server/route-modules/app-page/vendored/ssr/react-jsx-dev-runtime.js [app-ssr] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$client$2f$app$2d$dir$2f$link$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/app-dir/link.js [app-ssr] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$lucide$2d$react$40$0$2e$454$2e$0_react$40$19$2e$2$2e$0$2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$book$2d$open$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__$3c$export__default__as__BookOpen$3e$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/lucide-react@0.454.0_react@19.2.0/node_modules/lucide-react/dist/esm/icons/book-open.js [app-ssr] (ecmascript) "); +var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$lucide$2d$react$40$0$2e$454$2e$0_react$40$19$2e$2$2e$0$2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$search$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__$3c$export__default__as__Search$3e$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/lucide-react@0.454.0_react@19.2.0/node_modules/lucide-react/dist/esm/icons/search.js [app-ssr] (ecmascript) "); +var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$lucide$2d$react$40$0$2e$454$2e$0_react$40$19$2e$2$2e$0$2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$bell$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__$3c$export__default__as__Bell$3e$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/lucide-react@0.454.0_react@19.2.0/node_modules/lucide-react/dist/esm/icons/bell.js [app-ssr] (ecmascript) "); +var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$lucide$2d$react$40$0$2e$454$2e$0_react$40$19$2e$2$2e$0$2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$settings$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__$3c$export__default__as__Settings$3e$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/lucide-react@0.454.0_react@19.2.0/node_modules/lucide-react/dist/esm/icons/settings.js [app-ssr] (ecmascript) "); +var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$lucide$2d$react$40$0$2e$454$2e$0_react$40$19$2e$2$2e$0$2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$log$2d$out$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__$3c$export__default__as__LogOut$3e$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/lucide-react@0.454.0_react@19.2.0/node_modules/lucide-react/dist/esm/icons/log-out.js [app-ssr] (ecmascript) "); +var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$lucide$2d$react$40$0$2e$454$2e$0_react$40$19$2e$2$2e$0$2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$chevron$2d$down$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__$3c$export__default__as__ChevronDown$3e$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/lucide-react@0.454.0_react@19.2.0/node_modules/lucide-react/dist/esm/icons/chevron-down.js [app-ssr] (ecmascript) "); +var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$lucide$2d$react$40$0$2e$454$2e$0_react$40$19$2e$2$2e$0$2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$plus$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__$3c$export__default__as__Plus$3e$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/lucide-react@0.454.0_react@19.2.0/node_modules/lucide-react/dist/esm/icons/plus.js [app-ssr] (ecmascript) "); +var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$lucide$2d$react$40$0$2e$454$2e$0_react$40$19$2e$2$2e$0$2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$trash$2d$2$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__$3c$export__default__as__Trash2$3e$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/lucide-react@0.454.0_react@19.2.0/node_modules/lucide-react/dist/esm/icons/trash-2.js [app-ssr] (ecmascript) "); +var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$lucide$2d$react$40$0$2e$454$2e$0_react$40$19$2e$2$2e$0$2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$calculator$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__$3c$export__default__as__Calculator$3e$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/lucide-react@0.454.0_react@19.2.0/node_modules/lucide-react/dist/esm/icons/calculator.js [app-ssr] (ecmascript) "); +var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$button$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/components/ui/button.tsx [app-ssr] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$input$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/components/ui/input.tsx [app-ssr] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$avatar$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/components/ui/avatar.tsx [app-ssr] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$dropdown$2d$menu$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/components/ui/dropdown-menu.tsx [app-ssr] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$context$2f$family$2d$context$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/context/family-context.tsx [app-ssr] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/server/route-modules/app-page/vendored/ssr/react.js [app-ssr] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$navigation$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/navigation.js [app-ssr] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$2d$auth$40$4$2e$24$2e$13_next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0_$5f$nodemailer$40$7_3c43d6bc4ecce810d1d16651fe207b00$2f$node_modules$2f$next$2d$auth$2f$react$2f$index$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next-auth@4.24.13_next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0__nodemailer@7_3c43d6bc4ecce810d1d16651fe207b00/node_modules/next-auth/react/index.js [app-ssr] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$alert$2d$dialog$2d$custom$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/components/ui/alert-dialog-custom.tsx [app-ssr] (ecmascript)"); +"use client"; +; +; +; +; +; +; +; +; +; +; +; +; +function SiteHeader() { + const { searchMembers, searchResults } = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$context$2f$family$2d$context$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["useFamily"])(); + const { data: session, status } = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$2d$auth$40$4$2e$24$2e$13_next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0_$5f$nodemailer$40$7_3c43d6bc4ecce810d1d16651fe207b00$2f$node_modules$2f$next$2d$auth$2f$react$2f$index$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["useSession"])(); + const { showAlert, showConfirm, showPrompt } = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$alert$2d$dialog$2d$custom$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["useDialog"])(); + const pathname = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$navigation$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["usePathname"])(); + const searchParams = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$navigation$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["useSearchParams"])(); + const [searchQuery, setSearchQuery] = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["useState"])(""); + const [showResults, setShowResults] = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["useState"])(false); + const [familyTrees, setFamilyTrees] = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["useState"])([]); + const [currentTree, setCurrentTree] = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["useState"])(null); + const [deletingTreeId, setDeletingTreeId] = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["useState"])(null); + const searchRef = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["useRef"])(null); + const router = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$navigation$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["useRouter"])(); + // 获取当前视图模式 + const currentViewMode = searchParams.get('view') || 'traditional'; + const isTreePage = pathname === '/tree'; + // 生成带有 treeId 的 URL + const getUrlWithTreeId = (path)=>{ + if (currentTree?.id) { + return `${path}?treeId=${currentTree.id}`; + } + return path; + }; + // 切换视图模式 + const handleViewModeChange = (mode)=>{ + const params = new URLSearchParams(searchParams.toString()); + params.set('view', mode); + if (currentTree?.id) { + params.set('treeId', currentTree.id); + } + router.push(`${pathname}?${params.toString()}`); + }; + const getRoleBadge = (role)=>{ + switch(role){ + case "OWNER": + return /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("span", { + className: "text-[10px] px-1.5 py-0.5 rounded bg-purple-100 text-purple-700 border border-purple-200 ml-2", + children: "所有者" + }, void 0, false, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/site-header.tsx", + lineNumber: 69, + columnNumber: 16 + }, this); + case "EDITOR": + return /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("span", { + className: "text-[10px] px-1.5 py-0.5 rounded bg-blue-100 text-blue-700 border border-blue-200 ml-2", + children: "编辑" + }, void 0, false, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/site-header.tsx", + lineNumber: 71, + columnNumber: 16 + }, this); + case "VIEWER": + return /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("span", { + className: "text-[10px] px-1.5 py-0.5 rounded bg-gray-100 text-gray-700 border border-gray-200 ml-2", + children: "查看" + }, void 0, false, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/site-header.tsx", + lineNumber: 73, + columnNumber: 16 + }, this); + default: + return null; + } + }; + const handleSignOut = async ()=>{ + await (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$2d$auth$40$4$2e$24$2e$13_next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0_$5f$nodemailer$40$7_3c43d6bc4ecce810d1d16651fe207b00$2f$node_modules$2f$next$2d$auth$2f$react$2f$index$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["signOut"])({ + callbackUrl: "/auth/signin" + }); + }; + // 获取用户名首字母作为头像 + const getUserInitial = ()=>{ + if (session?.user?.name) { + return session.user.name.charAt(0).toUpperCase(); + } + if (session?.user?.email) { + return session.user.email.charAt(0).toUpperCase(); + } + return "U"; + }; + // 删除家族树 + const handleDeleteTree = async (tree, e)=>{ + e.stopPropagation(); // 阻止触发选择事件 + // 检查权限 + if (tree.ownerId !== session?.user?.id) { + await showAlert('只有家族树的创建者才能删除', '权限不足'); + return; + } + const confirmText = `确定要删除家族树"${tree.name}"吗?\n\n此操作将永久删除所有成员、活动日志和协作者数据,且不可撤销!`; + const confirmed = await showConfirm(confirmText, '删除家族树', 'destructive'); + if (!confirmed) { + return; + } + // 二次确认 + const finalConfirm = await showPrompt(`请输入家族树名称"${tree.name}"以确认删除:`, '', '确认删除'); + if (finalConfirm !== tree.name) { + await showAlert('名称不匹配,删除已取消', '操作已取消'); + return; + } + setDeletingTreeId(tree.id); + try { + const response = await fetch(`/api/trees/${tree.id}`, { + method: 'DELETE' + }); + if (!response.ok) { + const error = await response.json(); + throw new Error(error.error || '删除失败'); + } + // 刷新家族树列表 + await loadFamilyTrees(); + // 如果删除的是当前树,跳转到首页 + if (currentTree?.id === tree.id) { + window.location.href = '/'; + } + } catch (error) { + console.error('删除家族树失败:', error); + await showAlert('删除失败:' + error.message, '错误'); + } finally{ + setDeletingTreeId(null); + } + }; + // 获取家族树列表 + const loadFamilyTrees = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["useCallback"])(()=>{ + if (!session?.user?.id || status !== 'authenticated') return; + const controller = new AbortController(); + fetch('/api/trees', { + signal: controller.signal + }).then((res)=>{ + if (!res.ok) throw new Error(`HTTP error! status: ${res.status}`); + return res.json(); + }).then((data)=>{ + if (data.trees) { + setFamilyTrees(data.trees); + // 如果 URL 中有 treeId,使用该树,否则使用第一个 + const urlParams = new URLSearchParams(window.location.search); + const treeId = urlParams.get('treeId'); + if (treeId) { + const tree = data.trees.find((t)=>t.id === treeId); + if (tree) { + setCurrentTree(tree); + } else if (data.trees.length > 0) { + setCurrentTree(data.trees[0]); + } + } else if (data.trees.length > 0) { + setCurrentTree(data.trees[0]); + } + } + }).catch((err)=>{ + // 忽略 abort 错误和 fetch 错误(可能是页面切换导致的) + if (err.name !== 'AbortError' && err.message !== 'Failed to fetch') { + console.error('获取家族树列表失败:', err); + } + }); + return ()=>controller.abort(); + }, [ + session?.user?.id, + status + ]); + (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["useEffect"])(()=>{ + loadFamilyTrees(); + }, [ + loadFamilyTrees + ]); + // 监听路由变化,刷新家族树列表 + (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["useEffect"])(()=>{ + const handleRouteChange = ()=>{ + loadFamilyTrees(); + }; + window.addEventListener('focus', handleRouteChange); + return ()=>window.removeEventListener('focus', handleRouteChange); + }, [ + loadFamilyTrees + ]); + // 点击外部关闭搜索结果 + (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["useEffect"])(()=>{ + function handleClickOutside(event) { + if (searchRef.current && !searchRef.current.contains(event.target)) { + setShowResults(false); + } + } + document.addEventListener("mousedown", handleClickOutside); + return ()=>document.removeEventListener("mousedown", handleClickOutside); + }, []); + const handleSearch = (query)=>{ + setSearchQuery(query); + searchMembers(query); + setShowResults(query.length > 0); + }; + const handleSelectMember = (memberId)=>{ + router.push(`/members/${memberId}`); + setSearchQuery(""); + setShowResults(false); + }; + return /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("header", { + className: "sticky top-0 z-50 w-full border-b border-border/40 bg-background/95 backdrop-blur supports-[backdrop-filter]:bg-background/60", + children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { + className: "container mx-auto flex h-16 items-center px-4", + children: [ + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { + className: "mr-8 flex items-center gap-4", + children: [ + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$client$2f$app$2d$dir$2f$link$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["default"], { + href: "/", + className: "flex items-center gap-2", + children: [ + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { + className: "flex h-8 w-8 items-center justify-center rounded bg-primary text-primary-foreground", + children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$lucide$2d$react$40$0$2e$454$2e$0_react$40$19$2e$2$2e$0$2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$book$2d$open$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__$3c$export__default__as__BookOpen$3e$__["BookOpen"], { + className: "h-5 w-5" + }, void 0, false, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/site-header.tsx", + lineNumber: 229, + columnNumber: 15 + }, this) + }, void 0, false, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/site-header.tsx", + lineNumber: 228, + columnNumber: 13 + }, this), + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("span", { + className: "text-xl font-serif font-bold tracking-tight", + children: "华夏谱" + }, void 0, false, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/site-header.tsx", + lineNumber: 231, + columnNumber: 13 + }, this) + ] + }, void 0, true, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/site-header.tsx", + lineNumber: 227, + columnNumber: 11 + }, this), + session && familyTrees.length > 0 && /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$dropdown$2d$menu$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["DropdownMenu"], { + children: [ + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$dropdown$2d$menu$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["DropdownMenuTrigger"], { + asChild: true, + children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$button$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["Button"], { + variant: "outline", + className: "gap-2 min-w-[200px]", + children: [ + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("span", { + className: "flex-1 truncate text-left", + children: currentTree?.name || '选择家族树' + }, void 0, false, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/site-header.tsx", + lineNumber: 239, + columnNumber: 19 + }, this), + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$lucide$2d$react$40$0$2e$454$2e$0_react$40$19$2e$2$2e$0$2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$chevron$2d$down$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__$3c$export__default__as__ChevronDown$3e$__["ChevronDown"], { + className: "h-4 w-4 flex-shrink-0" + }, void 0, false, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/site-header.tsx", + lineNumber: 240, + columnNumber: 19 + }, this) + ] + }, void 0, true, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/site-header.tsx", + lineNumber: 238, + columnNumber: 17 + }, this) + }, void 0, false, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/site-header.tsx", + lineNumber: 237, + columnNumber: 15 + }, this), + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$dropdown$2d$menu$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["DropdownMenuContent"], { + align: "start", + className: "w-[var(--radix-dropdown-menu-trigger-width)] min-w-[200px]", + children: [ + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$dropdown$2d$menu$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["DropdownMenuLabel"], { + children: "我的家族树" + }, void 0, false, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/site-header.tsx", + lineNumber: 244, + columnNumber: 17 + }, this), + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$dropdown$2d$menu$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["DropdownMenuSeparator"], {}, void 0, false, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/site-header.tsx", + lineNumber: 245, + columnNumber: 17 + }, this), + familyTrees.map((tree)=>/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$dropdown$2d$menu$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["DropdownMenuItem"], { + onClick: ()=>{ + setCurrentTree(tree); + // 保持当前路径,只更新 treeId 参数 + const currentPath = window.location.pathname; + router.push(`${currentPath}?treeId=${tree.id}`); + }, + className: "cursor-pointer flex items-center justify-between group", + children: [ + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { + className: "flex items-center overflow-hidden", + children: [ + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("span", { + className: "truncate", + children: tree.name + }, void 0, false, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/site-header.tsx", + lineNumber: 258, + columnNumber: 23 + }, this), + getRoleBadge(tree.currentUserRole) + ] + }, void 0, true, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/site-header.tsx", + lineNumber: 257, + columnNumber: 21 + }, this), + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { + className: "flex items-center gap-2", + children: [ + currentTree?.id === tree.id && /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("span", { + className: "text-primary", + children: "✓" + }, void 0, false, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/site-header.tsx", + lineNumber: 263, + columnNumber: 25 + }, this), + tree.ownerId === session?.user?.id && /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$button$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["Button"], { + variant: "ghost", + size: "sm", + className: "h-6 w-6 p-0 opacity-0 group-hover:opacity-100 transition-opacity hover:bg-destructive hover:text-destructive-foreground", + onClick: (e)=>handleDeleteTree(tree, e), + disabled: deletingTreeId === tree.id, + children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$lucide$2d$react$40$0$2e$454$2e$0_react$40$19$2e$2$2e$0$2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$trash$2d$2$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__$3c$export__default__as__Trash2$3e$__["Trash2"], { + className: "h-3 w-3" + }, void 0, false, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/site-header.tsx", + lineNumber: 273, + columnNumber: 27 + }, this) + }, void 0, false, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/site-header.tsx", + lineNumber: 266, + columnNumber: 25 + }, this) + ] + }, void 0, true, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/site-header.tsx", + lineNumber: 261, + columnNumber: 21 + }, this) + ] + }, tree.id, true, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/site-header.tsx", + lineNumber: 247, + columnNumber: 19 + }, this)), + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$dropdown$2d$menu$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["DropdownMenuSeparator"], {}, void 0, false, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/site-header.tsx", + lineNumber: 279, + columnNumber: 17 + }, this), + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$dropdown$2d$menu$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["DropdownMenuItem"], { + onClick: ()=>router.push('/trees/new'), + className: "cursor-pointer text-primary", + children: [ + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$lucide$2d$react$40$0$2e$454$2e$0_react$40$19$2e$2$2e$0$2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$plus$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__$3c$export__default__as__Plus$3e$__["Plus"], { + className: "h-4 w-4 mr-2" + }, void 0, false, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/site-header.tsx", + lineNumber: 284, + columnNumber: 19 + }, this), + "创建新家族树" + ] + }, void 0, true, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/site-header.tsx", + lineNumber: 280, + columnNumber: 17 + }, this) + ] + }, void 0, true, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/site-header.tsx", + lineNumber: 243, + columnNumber: 15 + }, this) + ] + }, void 0, true, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/site-header.tsx", + lineNumber: 236, + columnNumber: 13 + }, this) + ] + }, void 0, true, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/site-header.tsx", + lineNumber: 226, + columnNumber: 9 + }, this), + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("nav", { + className: "hidden md:flex items-center gap-6 text-sm font-medium text-muted-foreground", + children: [ + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$client$2f$app$2d$dir$2f$link$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["default"], { + href: getUrlWithTreeId("/"), + className: "transition-colors hover:text-foreground data-[active=true]:text-foreground data-[active=true]:font-semibold", + children: "总览 (Overview)" + }, void 0, false, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/site-header.tsx", + lineNumber: 293, + columnNumber: 11 + }, this), + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$client$2f$app$2d$dir$2f$link$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["default"], { + href: getUrlWithTreeId("/tree"), + className: "transition-colors hover:text-foreground", + children: "族谱 (Tree)" + }, void 0, false, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/site-header.tsx", + lineNumber: 299, + columnNumber: 11 + }, this), + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$client$2f$app$2d$dir$2f$link$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["default"], { + href: getUrlWithTreeId("/members"), + className: "transition-colors hover:text-foreground", + children: "成员 (Members)" + }, void 0, false, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/site-header.tsx", + lineNumber: 302, + columnNumber: 11 + }, this), + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$client$2f$app$2d$dir$2f$link$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["default"], { + href: getUrlWithTreeId("/timeline"), + className: "transition-colors hover:text-foreground", + children: "大事记 (Timeline)" + }, void 0, false, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/site-header.tsx", + lineNumber: 305, + columnNumber: 11 + }, this) + ] + }, void 0, true, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/site-header.tsx", + lineNumber: 292, + columnNumber: 9 + }, this), + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { + className: "ml-auto flex items-center gap-4", + children: [ + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { + className: "relative hidden sm:block", + ref: searchRef, + children: [ + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$lucide$2d$react$40$0$2e$454$2e$0_react$40$19$2e$2$2e$0$2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$search$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__$3c$export__default__as__Search$3e$__["Search"], { + className: "absolute left-2.5 top-2.5 h-4 w-4 text-muted-foreground" + }, void 0, false, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/site-header.tsx", + lineNumber: 312, + columnNumber: 13 + }, this), + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$input$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["Input"], { + type: "search", + placeholder: "搜索成员...", + value: searchQuery, + onChange: (e)=>handleSearch(e.target.value), + className: "h-9 w-64 rounded-full bg-muted pl-9 text-sm focus-visible:ring-primary" + }, void 0, false, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/site-header.tsx", + lineNumber: 313, + columnNumber: 13 + }, this), + showResults && searchResults.length > 0 && /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { + className: "absolute top-full mt-2 w-full bg-background border border-border rounded-lg shadow-lg max-h-96 overflow-y-auto z-50", + children: searchResults.map((member)=>/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("button", { + onClick: ()=>handleSelectMember(member.id), + className: "w-full px-4 py-3 text-left hover:bg-muted transition-colors border-b border-border last:border-0", + children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { + className: "flex items-center gap-3", + children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { + className: "flex-1", + children: [ + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { + className: "flex items-center gap-2", + children: [ + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("span", { + className: "font-medium", + children: member.fullName + }, void 0, false, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/site-header.tsx", + lineNumber: 333, + columnNumber: 27 + }, this), + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("span", { + className: `text-xs px-1.5 py-0.5 rounded ${member.gender === "MALE" ? "bg-blue-100 text-blue-700" : "bg-pink-100 text-pink-700"}`, + children: member.gender === "MALE" ? "男" : "女" + }, void 0, false, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/site-header.tsx", + lineNumber: 334, + columnNumber: 27 + }, this), + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("span", { + className: "text-xs text-muted-foreground", + children: [ + "第", + member.generation, + "世" + ] + }, void 0, true, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/site-header.tsx", + lineNumber: 337, + columnNumber: 27 + }, this) + ] + }, void 0, true, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/site-header.tsx", + lineNumber: 332, + columnNumber: 25 + }, this), + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("p", { + className: "text-xs text-muted-foreground mt-1", + children: [ + member.birthDate && `生于 ${member.birthDate}`, + member.birthPlace && ` · ${member.birthPlace}` + ] + }, void 0, true, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/site-header.tsx", + lineNumber: 339, + columnNumber: 25 + }, this) + ] + }, void 0, true, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/site-header.tsx", + lineNumber: 331, + columnNumber: 23 + }, this) + }, void 0, false, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/site-header.tsx", + lineNumber: 330, + columnNumber: 21 + }, this) + }, member.id, false, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/site-header.tsx", + lineNumber: 325, + columnNumber: 19 + }, this)) + }, void 0, false, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/site-header.tsx", + lineNumber: 323, + columnNumber: 15 + }, this), + showResults && searchQuery && searchResults.length === 0 && /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { + className: "absolute top-full mt-2 w-full bg-background border border-border rounded-lg shadow-lg p-4 text-center text-sm text-muted-foreground z-50", + children: "未找到匹配的成员" + }, void 0, false, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/site-header.tsx", + lineNumber: 352, + columnNumber: 15 + }, this) + ] + }, void 0, true, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/site-header.tsx", + lineNumber: 311, + columnNumber: 11 + }, this), + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$button$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["Button"], { + variant: "ghost", + size: "icon", + className: "text-muted-foreground", + children: [ + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$lucide$2d$react$40$0$2e$454$2e$0_react$40$19$2e$2$2e$0$2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$bell$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__$3c$export__default__as__Bell$3e$__["Bell"], { + className: "h-5 w-5" + }, void 0, false, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/site-header.tsx", + lineNumber: 359, + columnNumber: 13 + }, this), + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("span", { + className: "sr-only", + children: "Notifications" + }, void 0, false, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/site-header.tsx", + lineNumber: 360, + columnNumber: 13 + }, this) + ] + }, void 0, true, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/site-header.tsx", + lineNumber: 358, + columnNumber: 11 + }, this), + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$client$2f$app$2d$dir$2f$link$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["default"], { + href: "/relationship", + children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$button$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["Button"], { + variant: "ghost", + size: "icon", + className: "text-muted-foreground", + children: [ + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$lucide$2d$react$40$0$2e$454$2e$0_react$40$19$2e$2$2e$0$2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$calculator$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__$3c$export__default__as__Calculator$3e$__["Calculator"], { + className: "h-5 w-5" + }, void 0, false, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/site-header.tsx", + lineNumber: 365, + columnNumber: 15 + }, this), + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("span", { + className: "sr-only", + children: "Relationship Calculator" + }, void 0, false, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/site-header.tsx", + lineNumber: 366, + columnNumber: 15 + }, this) + ] + }, void 0, true, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/site-header.tsx", + lineNumber: 364, + columnNumber: 13 + }, this) + }, void 0, false, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/site-header.tsx", + lineNumber: 363, + columnNumber: 11 + }, this), + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$client$2f$app$2d$dir$2f$link$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["default"], { + href: "/settings", + children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$button$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["Button"], { + variant: "ghost", + size: "icon", + className: "text-muted-foreground", + children: [ + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$lucide$2d$react$40$0$2e$454$2e$0_react$40$19$2e$2$2e$0$2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$settings$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__$3c$export__default__as__Settings$3e$__["Settings"], { + className: "h-5 w-5" + }, void 0, false, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/site-header.tsx", + lineNumber: 372, + columnNumber: 15 + }, this), + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("span", { + className: "sr-only", + children: "Settings" + }, void 0, false, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/site-header.tsx", + lineNumber: 373, + columnNumber: 15 + }, this) + ] + }, void 0, true, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/site-header.tsx", + lineNumber: 371, + columnNumber: 13 + }, this) + }, void 0, false, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/site-header.tsx", + lineNumber: 370, + columnNumber: 11 + }, this), + status === "loading" ? /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$avatar$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["Avatar"], { + className: "h-8 w-8 border border-border", + children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$avatar$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["AvatarFallback"], { + children: "..." + }, void 0, false, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/site-header.tsx", + lineNumber: 379, + columnNumber: 15 + }, this) + }, void 0, false, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/site-header.tsx", + lineNumber: 378, + columnNumber: 13 + }, this) : session ? /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$dropdown$2d$menu$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["DropdownMenu"], { + children: [ + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$dropdown$2d$menu$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["DropdownMenuTrigger"], { + asChild: true, + children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$button$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["Button"], { + variant: "ghost", + className: "relative h-8 w-8 rounded-full", + children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$avatar$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["Avatar"], { + className: "h-8 w-8 border border-border", + children: [ + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$avatar$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["AvatarImage"], { + src: undefined, + alt: session.user?.name || "User" + }, void 0, false, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/site-header.tsx", + lineNumber: 386, + columnNumber: 21 + }, this), + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$avatar$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["AvatarFallback"], { + children: getUserInitial() + }, void 0, false, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/site-header.tsx", + lineNumber: 387, + columnNumber: 21 + }, this) + ] + }, void 0, true, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/site-header.tsx", + lineNumber: 385, + columnNumber: 19 + }, this) + }, void 0, false, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/site-header.tsx", + lineNumber: 384, + columnNumber: 17 + }, this) + }, void 0, false, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/site-header.tsx", + lineNumber: 383, + columnNumber: 15 + }, this), + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$dropdown$2d$menu$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["DropdownMenuContent"], { + className: "w-56", + align: "end", + forceMount: true, + children: [ + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$dropdown$2d$menu$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["DropdownMenuLabel"], { + className: "font-normal", + children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { + className: "flex flex-col space-y-1", + children: [ + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("p", { + className: "text-sm font-medium leading-none", + children: session.user?.name || "用户" + }, void 0, false, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/site-header.tsx", + lineNumber: 394, + columnNumber: 21 + }, this), + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("p", { + className: "text-xs leading-none text-muted-foreground", + children: session.user?.email + }, void 0, false, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/site-header.tsx", + lineNumber: 395, + columnNumber: 21 + }, this) + ] + }, void 0, true, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/site-header.tsx", + lineNumber: 393, + columnNumber: 19 + }, this) + }, void 0, false, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/site-header.tsx", + lineNumber: 392, + columnNumber: 17 + }, this), + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$dropdown$2d$menu$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["DropdownMenuSeparator"], {}, void 0, false, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/site-header.tsx", + lineNumber: 400, + columnNumber: 17 + }, this), + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$dropdown$2d$menu$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["DropdownMenuItem"], { + asChild: true, + children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$client$2f$app$2d$dir$2f$link$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["default"], { + href: "/settings", + className: "cursor-pointer", + children: [ + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$lucide$2d$react$40$0$2e$454$2e$0_react$40$19$2e$2$2e$0$2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$settings$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__$3c$export__default__as__Settings$3e$__["Settings"], { + className: "mr-2 h-4 w-4" + }, void 0, false, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/site-header.tsx", + lineNumber: 403, + columnNumber: 21 + }, this), + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("span", { + children: "系统设置" + }, void 0, false, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/site-header.tsx", + lineNumber: 404, + columnNumber: 21 + }, this) + ] + }, void 0, true, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/site-header.tsx", + lineNumber: 402, + columnNumber: 19 + }, this) + }, void 0, false, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/site-header.tsx", + lineNumber: 401, + columnNumber: 17 + }, this), + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$dropdown$2d$menu$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["DropdownMenuSeparator"], {}, void 0, false, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/site-header.tsx", + lineNumber: 407, + columnNumber: 17 + }, this), + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$dropdown$2d$menu$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["DropdownMenuItem"], { + onClick: handleSignOut, + className: "cursor-pointer text-red-600", + children: [ + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$lucide$2d$react$40$0$2e$454$2e$0_react$40$19$2e$2$2e$0$2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$log$2d$out$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__$3c$export__default__as__LogOut$3e$__["LogOut"], { + className: "mr-2 h-4 w-4" + }, void 0, false, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/site-header.tsx", + lineNumber: 409, + columnNumber: 19 + }, this), + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("span", { + children: "退出登录" + }, void 0, false, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/site-header.tsx", + lineNumber: 410, + columnNumber: 19 + }, this) + ] + }, void 0, true, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/site-header.tsx", + lineNumber: 408, + columnNumber: 17 + }, this) + ] + }, void 0, true, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/site-header.tsx", + lineNumber: 391, + columnNumber: 15 + }, this) + ] + }, void 0, true, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/site-header.tsx", + lineNumber: 382, + columnNumber: 13 + }, this) : /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$client$2f$app$2d$dir$2f$link$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["default"], { + href: "/auth/signin", + children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$button$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["Button"], { + variant: "default", + size: "sm", + children: "登录" + }, void 0, false, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/site-header.tsx", + lineNumber: 416, + columnNumber: 15 + }, this) + }, void 0, false, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/site-header.tsx", + lineNumber: 415, + columnNumber: 13 + }, this) + ] + }, void 0, true, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/site-header.tsx", + lineNumber: 310, + columnNumber: 9 + }, this) + ] + }, void 0, true, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/site-header.tsx", + lineNumber: 225, + columnNumber: 7 + }, this) + }, void 0, false, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/site-header.tsx", + lineNumber: 224, + columnNumber: 5 + }, this); +} +}), +"[project]/Documents/go-new/chinese-family-tree/components/ui/textarea.tsx [app-ssr] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "Textarea", + ()=>Textarea +]); +var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/server/route-modules/app-page/vendored/ssr/react-jsx-dev-runtime.js [app-ssr] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$lib$2f$utils$2e$ts__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/lib/utils.ts [app-ssr] (ecmascript)"); +; +; +function Textarea({ className, ...props }) { + return /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("textarea", { + "data-slot": "textarea", + className: (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$lib$2f$utils$2e$ts__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["cn"])('border-input placeholder:text-muted-foreground focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:bg-input/30 flex field-sizing-content min-h-16 w-full rounded-md border bg-transparent px-3 py-2 text-base shadow-xs transition-[color,box-shadow] outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50 md:text-sm', className), + ...props + }, void 0, false, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/ui/textarea.tsx", + lineNumber: 7, + columnNumber: 5 + }, this); +} +; +}), +"[project]/Documents/go-new/chinese-family-tree/components/ui/select.tsx [app-ssr] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "Select", + ()=>Select, + "SelectContent", + ()=>SelectContent, + "SelectGroup", + ()=>SelectGroup, + "SelectItem", + ()=>SelectItem, + "SelectLabel", + ()=>SelectLabel, + "SelectScrollDownButton", + ()=>SelectScrollDownButton, + "SelectScrollUpButton", + ()=>SelectScrollUpButton, + "SelectSeparator", + ()=>SelectSeparator, + "SelectTrigger", + ()=>SelectTrigger, + "SelectValue", + ()=>SelectValue +]); +var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/server/route-modules/app-page/vendored/ssr/react-jsx-dev-runtime.js [app-ssr] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$react$2d$select$40$2$2e$1$2e$4_$40$types$2b$react$2d$dom$40$19$2e$2$2e$3_$40$types$2b$react$40$19$2e$2$2e$6_$5f40$types$2b$react$40$_0db8806b22e5e8953d2741c4abb73796$2f$node_modules$2f40$radix$2d$ui$2f$react$2d$select$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/@radix-ui+react-select@2.1.4_@types+react-dom@19.2.3_@types+react@19.2.6__@types+react@_0db8806b22e5e8953d2741c4abb73796/node_modules/@radix-ui/react-select/dist/index.mjs [app-ssr] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$lucide$2d$react$40$0$2e$454$2e$0_react$40$19$2e$2$2e$0$2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$check$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__$3c$export__default__as__CheckIcon$3e$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/lucide-react@0.454.0_react@19.2.0/node_modules/lucide-react/dist/esm/icons/check.js [app-ssr] (ecmascript) "); +var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$lucide$2d$react$40$0$2e$454$2e$0_react$40$19$2e$2$2e$0$2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$chevron$2d$down$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__$3c$export__default__as__ChevronDownIcon$3e$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/lucide-react@0.454.0_react@19.2.0/node_modules/lucide-react/dist/esm/icons/chevron-down.js [app-ssr] (ecmascript) "); +var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$lucide$2d$react$40$0$2e$454$2e$0_react$40$19$2e$2$2e$0$2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$chevron$2d$up$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__$3c$export__default__as__ChevronUpIcon$3e$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/lucide-react@0.454.0_react@19.2.0/node_modules/lucide-react/dist/esm/icons/chevron-up.js [app-ssr] (ecmascript) "); +var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$lib$2f$utils$2e$ts__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/lib/utils.ts [app-ssr] (ecmascript)"); +'use client'; +; +; +; +; +function Select({ ...props }) { + return /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$react$2d$select$40$2$2e$1$2e$4_$40$types$2b$react$2d$dom$40$19$2e$2$2e$3_$40$types$2b$react$40$19$2e$2$2e$6_$5f40$types$2b$react$40$_0db8806b22e5e8953d2741c4abb73796$2f$node_modules$2f40$radix$2d$ui$2f$react$2d$select$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["Root"], { + "data-slot": "select", + ...props + }, void 0, false, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/ui/select.tsx", + lineNumber: 12, + columnNumber: 10 + }, this); +} +function SelectGroup({ ...props }) { + return /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$react$2d$select$40$2$2e$1$2e$4_$40$types$2b$react$2d$dom$40$19$2e$2$2e$3_$40$types$2b$react$40$19$2e$2$2e$6_$5f40$types$2b$react$40$_0db8806b22e5e8953d2741c4abb73796$2f$node_modules$2f40$radix$2d$ui$2f$react$2d$select$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["Group"], { + "data-slot": "select-group", + ...props + }, void 0, false, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/ui/select.tsx", + lineNumber: 18, + columnNumber: 10 + }, this); +} +function SelectValue({ ...props }) { + return /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$react$2d$select$40$2$2e$1$2e$4_$40$types$2b$react$2d$dom$40$19$2e$2$2e$3_$40$types$2b$react$40$19$2e$2$2e$6_$5f40$types$2b$react$40$_0db8806b22e5e8953d2741c4abb73796$2f$node_modules$2f40$radix$2d$ui$2f$react$2d$select$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["Value"], { + "data-slot": "select-value", + ...props + }, void 0, false, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/ui/select.tsx", + lineNumber: 24, + columnNumber: 10 + }, this); +} +function SelectTrigger({ className, size = 'default', children, ...props }) { + return /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$react$2d$select$40$2$2e$1$2e$4_$40$types$2b$react$2d$dom$40$19$2e$2$2e$3_$40$types$2b$react$40$19$2e$2$2e$6_$5f40$types$2b$react$40$_0db8806b22e5e8953d2741c4abb73796$2f$node_modules$2f40$radix$2d$ui$2f$react$2d$select$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["Trigger"], { + "data-slot": "select-trigger", + "data-size": size, + className: (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$lib$2f$utils$2e$ts__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["cn"])("border-input data-[placeholder]:text-muted-foreground [&_svg:not([class*='text-'])]:text-muted-foreground focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:bg-input/30 dark:hover:bg-input/50 flex w-fit items-center justify-between gap-2 rounded-md border bg-transparent px-3 py-2 text-sm whitespace-nowrap shadow-xs transition-[color,box-shadow] outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50 data-[size=default]:h-9 data-[size=sm]:h-8 *:data-[slot=select-value]:line-clamp-1 *:data-[slot=select-value]:flex *:data-[slot=select-value]:items-center *:data-[slot=select-value]:gap-2 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4", className), + ...props, + children: [ + children, + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$react$2d$select$40$2$2e$1$2e$4_$40$types$2b$react$2d$dom$40$19$2e$2$2e$3_$40$types$2b$react$40$19$2e$2$2e$6_$5f40$types$2b$react$40$_0db8806b22e5e8953d2741c4abb73796$2f$node_modules$2f40$radix$2d$ui$2f$react$2d$select$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["Icon"], { + asChild: true, + children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$lucide$2d$react$40$0$2e$454$2e$0_react$40$19$2e$2$2e$0$2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$chevron$2d$down$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__$3c$export__default__as__ChevronDownIcon$3e$__["ChevronDownIcon"], { + className: "size-4 opacity-50" + }, void 0, false, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/ui/select.tsx", + lineNumber: 47, + columnNumber: 9 + }, this) + }, void 0, false, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/ui/select.tsx", + lineNumber: 46, + columnNumber: 7 + }, this) + ] + }, void 0, true, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/ui/select.tsx", + lineNumber: 36, + columnNumber: 5 + }, this); +} +function SelectContent({ className, children, position = 'popper', ...props }) { + return /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$react$2d$select$40$2$2e$1$2e$4_$40$types$2b$react$2d$dom$40$19$2e$2$2e$3_$40$types$2b$react$40$19$2e$2$2e$6_$5f40$types$2b$react$40$_0db8806b22e5e8953d2741c4abb73796$2f$node_modules$2f40$radix$2d$ui$2f$react$2d$select$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["Portal"], { + children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$react$2d$select$40$2$2e$1$2e$4_$40$types$2b$react$2d$dom$40$19$2e$2$2e$3_$40$types$2b$react$40$19$2e$2$2e$6_$5f40$types$2b$react$40$_0db8806b22e5e8953d2741c4abb73796$2f$node_modules$2f40$radix$2d$ui$2f$react$2d$select$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["Content"], { + "data-slot": "select-content", + className: (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$lib$2f$utils$2e$ts__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["cn"])('bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 relative z-50 max-h-(--radix-select-content-available-height) min-w-[8rem] origin-(--radix-select-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-md border shadow-md', position === 'popper' && 'data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1', className), + position: position, + ...props, + children: [ + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(SelectScrollUpButton, {}, void 0, false, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/ui/select.tsx", + lineNumber: 72, + columnNumber: 9 + }, this), + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$react$2d$select$40$2$2e$1$2e$4_$40$types$2b$react$2d$dom$40$19$2e$2$2e$3_$40$types$2b$react$40$19$2e$2$2e$6_$5f40$types$2b$react$40$_0db8806b22e5e8953d2741c4abb73796$2f$node_modules$2f40$radix$2d$ui$2f$react$2d$select$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["Viewport"], { + className: (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$lib$2f$utils$2e$ts__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["cn"])('p-1', position === 'popper' && 'h-[var(--radix-select-trigger-height)] w-full min-w-[var(--radix-select-trigger-width)] scroll-my-1'), + children: children + }, void 0, false, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/ui/select.tsx", + lineNumber: 73, + columnNumber: 9 + }, this), + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(SelectScrollDownButton, {}, void 0, false, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/ui/select.tsx", + lineNumber: 82, + columnNumber: 9 + }, this) + ] + }, void 0, true, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/ui/select.tsx", + lineNumber: 61, + columnNumber: 7 + }, this) + }, void 0, false, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/ui/select.tsx", + lineNumber: 60, + columnNumber: 5 + }, this); +} +function SelectLabel({ className, ...props }) { + return /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$react$2d$select$40$2$2e$1$2e$4_$40$types$2b$react$2d$dom$40$19$2e$2$2e$3_$40$types$2b$react$40$19$2e$2$2e$6_$5f40$types$2b$react$40$_0db8806b22e5e8953d2741c4abb73796$2f$node_modules$2f40$radix$2d$ui$2f$react$2d$select$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["Label"], { + "data-slot": "select-label", + className: (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$lib$2f$utils$2e$ts__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["cn"])('text-muted-foreground px-2 py-1.5 text-xs', className), + ...props + }, void 0, false, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/ui/select.tsx", + lineNumber: 93, + columnNumber: 5 + }, this); +} +function SelectItem({ className, children, ...props }) { + return /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$react$2d$select$40$2$2e$1$2e$4_$40$types$2b$react$2d$dom$40$19$2e$2$2e$3_$40$types$2b$react$40$19$2e$2$2e$6_$5f40$types$2b$react$40$_0db8806b22e5e8953d2741c4abb73796$2f$node_modules$2f40$radix$2d$ui$2f$react$2d$select$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["Item"], { + "data-slot": "select-item", + className: (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$lib$2f$utils$2e$ts__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["cn"])("focus:bg-accent focus:text-accent-foreground [&_svg:not([class*='text-'])]:text-muted-foreground relative flex w-full cursor-default items-center gap-2 rounded-sm py-1.5 pr-8 pl-2 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 *:[span]:last:flex *:[span]:last:items-center *:[span]:last:gap-2", className), + ...props, + children: [ + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("span", { + className: "absolute right-2 flex size-3.5 items-center justify-center", + children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$react$2d$select$40$2$2e$1$2e$4_$40$types$2b$react$2d$dom$40$19$2e$2$2e$3_$40$types$2b$react$40$19$2e$2$2e$6_$5f40$types$2b$react$40$_0db8806b22e5e8953d2741c4abb73796$2f$node_modules$2f40$radix$2d$ui$2f$react$2d$select$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["ItemIndicator"], { + children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$lucide$2d$react$40$0$2e$454$2e$0_react$40$19$2e$2$2e$0$2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$check$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__$3c$export__default__as__CheckIcon$3e$__["CheckIcon"], { + className: "size-4" + }, void 0, false, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/ui/select.tsx", + lineNumber: 117, + columnNumber: 11 + }, this) + }, void 0, false, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/ui/select.tsx", + lineNumber: 116, + columnNumber: 9 + }, this) + }, void 0, false, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/ui/select.tsx", + lineNumber: 115, + columnNumber: 7 + }, this), + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$react$2d$select$40$2$2e$1$2e$4_$40$types$2b$react$2d$dom$40$19$2e$2$2e$3_$40$types$2b$react$40$19$2e$2$2e$6_$5f40$types$2b$react$40$_0db8806b22e5e8953d2741c4abb73796$2f$node_modules$2f40$radix$2d$ui$2f$react$2d$select$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["ItemText"], { + children: children + }, void 0, false, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/ui/select.tsx", + lineNumber: 120, + columnNumber: 7 + }, this) + ] + }, void 0, true, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/ui/select.tsx", + lineNumber: 107, + columnNumber: 5 + }, this); +} +function SelectSeparator({ className, ...props }) { + return /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$react$2d$select$40$2$2e$1$2e$4_$40$types$2b$react$2d$dom$40$19$2e$2$2e$3_$40$types$2b$react$40$19$2e$2$2e$6_$5f40$types$2b$react$40$_0db8806b22e5e8953d2741c4abb73796$2f$node_modules$2f40$radix$2d$ui$2f$react$2d$select$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["Separator"], { + "data-slot": "select-separator", + className: (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$lib$2f$utils$2e$ts__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["cn"])('bg-border pointer-events-none -mx-1 my-1 h-px', className), + ...props + }, void 0, false, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/ui/select.tsx", + lineNumber: 130, + columnNumber: 5 + }, this); +} +function SelectScrollUpButton({ className, ...props }) { + return /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$react$2d$select$40$2$2e$1$2e$4_$40$types$2b$react$2d$dom$40$19$2e$2$2e$3_$40$types$2b$react$40$19$2e$2$2e$6_$5f40$types$2b$react$40$_0db8806b22e5e8953d2741c4abb73796$2f$node_modules$2f40$radix$2d$ui$2f$react$2d$select$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["ScrollUpButton"], { + "data-slot": "select-scroll-up-button", + className: (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$lib$2f$utils$2e$ts__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["cn"])('flex cursor-default items-center justify-center py-1', className), + ...props, + children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$lucide$2d$react$40$0$2e$454$2e$0_react$40$19$2e$2$2e$0$2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$chevron$2d$up$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__$3c$export__default__as__ChevronUpIcon$3e$__["ChevronUpIcon"], { + className: "size-4" + }, void 0, false, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/ui/select.tsx", + lineNumber: 151, + columnNumber: 7 + }, this) + }, void 0, false, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/ui/select.tsx", + lineNumber: 143, + columnNumber: 5 + }, this); +} +function SelectScrollDownButton({ className, ...props }) { + return /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$react$2d$select$40$2$2e$1$2e$4_$40$types$2b$react$2d$dom$40$19$2e$2$2e$3_$40$types$2b$react$40$19$2e$2$2e$6_$5f40$types$2b$react$40$_0db8806b22e5e8953d2741c4abb73796$2f$node_modules$2f40$radix$2d$ui$2f$react$2d$select$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["ScrollDownButton"], { + "data-slot": "select-scroll-down-button", + className: (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$lib$2f$utils$2e$ts__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["cn"])('flex cursor-default items-center justify-center py-1', className), + ...props, + children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$lucide$2d$react$40$0$2e$454$2e$0_react$40$19$2e$2$2e$0$2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$chevron$2d$down$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__$3c$export__default__as__ChevronDownIcon$3e$__["ChevronDownIcon"], { + className: "size-4" + }, void 0, false, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/ui/select.tsx", + lineNumber: 169, + columnNumber: 7 + }, this) + }, void 0, false, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/ui/select.tsx", + lineNumber: 161, + columnNumber: 5 + }, this); +} +; +}), +"[project]/Documents/go-new/chinese-family-tree/components/ui/dialog.tsx [app-ssr] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "Dialog", + ()=>Dialog, + "DialogClose", + ()=>DialogClose, + "DialogContent", + ()=>DialogContent, + "DialogDescription", + ()=>DialogDescription, + "DialogFooter", + ()=>DialogFooter, + "DialogHeader", + ()=>DialogHeader, + "DialogOverlay", + ()=>DialogOverlay, + "DialogPortal", + ()=>DialogPortal, + "DialogTitle", + ()=>DialogTitle, + "DialogTrigger", + ()=>DialogTrigger +]); +var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/server/route-modules/app-page/vendored/ssr/react-jsx-dev-runtime.js [app-ssr] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$react$2d$dialog$40$1$2e$1$2e$4_$40$types$2b$react$2d$dom$40$19$2e$2$2e$3_$40$types$2b$react$40$19$2e$2$2e$6_$5f40$types$2b$react$40$_24233bb12d775a77d542be78e3daa22d$2f$node_modules$2f40$radix$2d$ui$2f$react$2d$dialog$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/@radix-ui+react-dialog@1.1.4_@types+react-dom@19.2.3_@types+react@19.2.6__@types+react@_24233bb12d775a77d542be78e3daa22d/node_modules/@radix-ui/react-dialog/dist/index.mjs [app-ssr] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$lucide$2d$react$40$0$2e$454$2e$0_react$40$19$2e$2$2e$0$2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$x$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__$3c$export__default__as__XIcon$3e$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/lucide-react@0.454.0_react@19.2.0/node_modules/lucide-react/dist/esm/icons/x.js [app-ssr] (ecmascript) "); +var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$lib$2f$utils$2e$ts__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/lib/utils.ts [app-ssr] (ecmascript)"); +'use client'; +; +; +; +; +function Dialog({ ...props }) { + return /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$react$2d$dialog$40$1$2e$1$2e$4_$40$types$2b$react$2d$dom$40$19$2e$2$2e$3_$40$types$2b$react$40$19$2e$2$2e$6_$5f40$types$2b$react$40$_24233bb12d775a77d542be78e3daa22d$2f$node_modules$2f40$radix$2d$ui$2f$react$2d$dialog$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["Root"], { + "data-slot": "dialog", + ...props + }, void 0, false, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/ui/dialog.tsx", + lineNumber: 12, + columnNumber: 10 + }, this); +} +function DialogTrigger({ ...props }) { + return /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$react$2d$dialog$40$1$2e$1$2e$4_$40$types$2b$react$2d$dom$40$19$2e$2$2e$3_$40$types$2b$react$40$19$2e$2$2e$6_$5f40$types$2b$react$40$_24233bb12d775a77d542be78e3daa22d$2f$node_modules$2f40$radix$2d$ui$2f$react$2d$dialog$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["Trigger"], { + "data-slot": "dialog-trigger", + ...props + }, void 0, false, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/ui/dialog.tsx", + lineNumber: 18, + columnNumber: 10 + }, this); +} +function DialogPortal({ ...props }) { + return /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$react$2d$dialog$40$1$2e$1$2e$4_$40$types$2b$react$2d$dom$40$19$2e$2$2e$3_$40$types$2b$react$40$19$2e$2$2e$6_$5f40$types$2b$react$40$_24233bb12d775a77d542be78e3daa22d$2f$node_modules$2f40$radix$2d$ui$2f$react$2d$dialog$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["Portal"], { + "data-slot": "dialog-portal", + ...props + }, void 0, false, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/ui/dialog.tsx", + lineNumber: 24, + columnNumber: 10 + }, this); +} +function DialogClose({ ...props }) { + return /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$react$2d$dialog$40$1$2e$1$2e$4_$40$types$2b$react$2d$dom$40$19$2e$2$2e$3_$40$types$2b$react$40$19$2e$2$2e$6_$5f40$types$2b$react$40$_24233bb12d775a77d542be78e3daa22d$2f$node_modules$2f40$radix$2d$ui$2f$react$2d$dialog$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["Close"], { + "data-slot": "dialog-close", + ...props + }, void 0, false, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/ui/dialog.tsx", + lineNumber: 30, + columnNumber: 10 + }, this); +} +function DialogOverlay({ className, ...props }) { + return /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$react$2d$dialog$40$1$2e$1$2e$4_$40$types$2b$react$2d$dom$40$19$2e$2$2e$3_$40$types$2b$react$40$19$2e$2$2e$6_$5f40$types$2b$react$40$_24233bb12d775a77d542be78e3daa22d$2f$node_modules$2f40$radix$2d$ui$2f$react$2d$dialog$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["Overlay"], { + "data-slot": "dialog-overlay", + className: (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$lib$2f$utils$2e$ts__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["cn"])('data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 fixed inset-0 z-50 bg-black/50', className), + ...props + }, void 0, false, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/ui/dialog.tsx", + lineNumber: 38, + columnNumber: 5 + }, this); +} +function DialogContent({ className, children, showCloseButton = true, ...props }) { + return /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(DialogPortal, { + "data-slot": "dialog-portal", + children: [ + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(DialogOverlay, {}, void 0, false, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/ui/dialog.tsx", + lineNumber: 59, + columnNumber: 7 + }, this), + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$react$2d$dialog$40$1$2e$1$2e$4_$40$types$2b$react$2d$dom$40$19$2e$2$2e$3_$40$types$2b$react$40$19$2e$2$2e$6_$5f40$types$2b$react$40$_24233bb12d775a77d542be78e3daa22d$2f$node_modules$2f40$radix$2d$ui$2f$react$2d$dialog$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["Content"], { + "data-slot": "dialog-content", + className: (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$lib$2f$utils$2e$ts__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["cn"])('bg-background data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 fixed top-[50%] left-[50%] z-50 grid w-full max-w-[calc(100%-2rem)] translate-x-[-50%] translate-y-[-50%] gap-4 rounded-lg border p-6 shadow-lg duration-200 sm:max-w-lg', className), + ...props, + children: [ + children, + showCloseButton && /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$react$2d$dialog$40$1$2e$1$2e$4_$40$types$2b$react$2d$dom$40$19$2e$2$2e$3_$40$types$2b$react$40$19$2e$2$2e$6_$5f40$types$2b$react$40$_24233bb12d775a77d542be78e3daa22d$2f$node_modules$2f40$radix$2d$ui$2f$react$2d$dialog$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["Close"], { + "data-slot": "dialog-close", + className: "ring-offset-background focus:ring-ring data-[state=open]:bg-accent data-[state=open]:text-muted-foreground absolute top-4 right-4 rounded-xs opacity-70 transition-opacity hover:opacity-100 focus:ring-2 focus:ring-offset-2 focus:outline-hidden disabled:pointer-events-none [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4", + children: [ + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$lucide$2d$react$40$0$2e$454$2e$0_react$40$19$2e$2$2e$0$2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$x$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__$3c$export__default__as__XIcon$3e$__["XIcon"], {}, void 0, false, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/ui/dialog.tsx", + lineNumber: 74, + columnNumber: 13 + }, this), + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("span", { + className: "sr-only", + children: "Close" + }, void 0, false, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/ui/dialog.tsx", + lineNumber: 75, + columnNumber: 13 + }, this) + ] + }, void 0, true, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/ui/dialog.tsx", + lineNumber: 70, + columnNumber: 11 + }, this) + ] + }, void 0, true, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/ui/dialog.tsx", + lineNumber: 60, + columnNumber: 7 + }, this) + ] + }, void 0, true, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/ui/dialog.tsx", + lineNumber: 58, + columnNumber: 5 + }, this); +} +function DialogHeader({ className, ...props }) { + return /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { + "data-slot": "dialog-header", + className: (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$lib$2f$utils$2e$ts__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["cn"])('flex flex-col gap-2 text-center sm:text-left', className), + ...props + }, void 0, false, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/ui/dialog.tsx", + lineNumber: 85, + columnNumber: 5 + }, this); +} +function DialogFooter({ className, ...props }) { + return /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { + "data-slot": "dialog-footer", + className: (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$lib$2f$utils$2e$ts__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["cn"])('flex flex-col-reverse gap-2 sm:flex-row sm:justify-end', className), + ...props + }, void 0, false, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/ui/dialog.tsx", + lineNumber: 95, + columnNumber: 5 + }, this); +} +function DialogTitle({ className, ...props }) { + return /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$react$2d$dialog$40$1$2e$1$2e$4_$40$types$2b$react$2d$dom$40$19$2e$2$2e$3_$40$types$2b$react$40$19$2e$2$2e$6_$5f40$types$2b$react$40$_24233bb12d775a77d542be78e3daa22d$2f$node_modules$2f40$radix$2d$ui$2f$react$2d$dialog$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["Title"], { + "data-slot": "dialog-title", + className: (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$lib$2f$utils$2e$ts__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["cn"])('text-lg leading-none font-semibold', className), + ...props + }, void 0, false, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/ui/dialog.tsx", + lineNumber: 111, + columnNumber: 5 + }, this); +} +function DialogDescription({ className, ...props }) { + return /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$react$2d$dialog$40$1$2e$1$2e$4_$40$types$2b$react$2d$dom$40$19$2e$2$2e$3_$40$types$2b$react$40$19$2e$2$2e$6_$5f40$types$2b$react$40$_24233bb12d775a77d542be78e3daa22d$2f$node_modules$2f40$radix$2d$ui$2f$react$2d$dialog$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["Description"], { + "data-slot": "dialog-description", + className: (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$lib$2f$utils$2e$ts__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["cn"])('text-muted-foreground text-sm', className), + ...props + }, void 0, false, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/ui/dialog.tsx", + lineNumber: 124, + columnNumber: 5 + }, this); +} +; +}), +"[project]/Documents/go-new/chinese-family-tree/lib/db.ts [app-ssr] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "FamilyTreeDB", + ()=>FamilyTreeDB, + "db", + ()=>db +]); +var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$dexie$40$4$2e$2$2e$1$2f$node_modules$2f$dexie$2f$import$2d$wrapper$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/dexie@4.2.1/node_modules/dexie/import-wrapper.mjs [app-ssr] (ecmascript)"); +; +class FamilyTreeDB extends __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$dexie$40$4$2e$2$2e$1$2f$node_modules$2f$dexie$2f$import$2d$wrapper$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["default"] { + members; + settings; + images; + activityLogs; + constructor(){ + super("FamilyTreeDB"); + this.version(1).stores({ + members: "id, fullName, fatherId, motherId, [fatherId+motherId]", + settings: "key", + images: "id" + }); + this.version(2).stores({ + members: "id, fullName, fatherId, motherId, [fatherId+motherId]", + settings: "key", + images: "id", + activityLogs: "id, timestamp, action, entityType, entityId" + }); + } +} +const db = new FamilyTreeDB(); +}), +"[externals]/node:crypto [external] (node:crypto, cjs)", ((__turbopack_context__, module, exports) => { + +const mod = __turbopack_context__.x("node:crypto", () => require("node:crypto")); + +module.exports = mod; +}), +"[project]/Documents/go-new/chinese-family-tree/components/ui/image-upload.tsx [app-ssr] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "ImageUpload", + ()=>ImageUpload +]); +var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/server/route-modules/app-page/vendored/ssr/react-jsx-dev-runtime.js [app-ssr] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/server/route-modules/app-page/vendored/ssr/react.js [app-ssr] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$button$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/components/ui/button.tsx [app-ssr] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$avatar$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/components/ui/avatar.tsx [app-ssr] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$dialog$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/components/ui/dialog.tsx [app-ssr] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$lucide$2d$react$40$0$2e$454$2e$0_react$40$19$2e$2$2e$0$2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$upload$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__$3c$export__default__as__Upload$3e$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/lucide-react@0.454.0_react@19.2.0/node_modules/lucide-react/dist/esm/icons/upload.js [app-ssr] (ecmascript) "); +var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$lucide$2d$react$40$0$2e$454$2e$0_react$40$19$2e$2$2e$0$2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$x$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__$3c$export__default__as__X$3e$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/lucide-react@0.454.0_react@19.2.0/node_modules/lucide-react/dist/esm/icons/x.js [app-ssr] (ecmascript) "); +var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$lucide$2d$react$40$0$2e$454$2e$0_react$40$19$2e$2$2e$0$2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$loader$2d$circle$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__$3c$export__default__as__Loader2$3e$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/lucide-react@0.454.0_react@19.2.0/node_modules/lucide-react/dist/esm/icons/loader-circle.js [app-ssr] (ecmascript) "); +var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$lucide$2d$react$40$0$2e$454$2e$0_react$40$19$2e$2$2e$0$2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$crop$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__$3c$export__default__as__Crop$3e$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/lucide-react@0.454.0_react@19.2.0/node_modules/lucide-react/dist/esm/icons/crop.js [app-ssr] (ecmascript) "); +var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$lib$2f$db$2e$ts__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/lib/db.ts [app-ssr] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$uuid$40$13$2e$0$2e$0$2f$node_modules$2f$uuid$2f$dist$2d$node$2f$v4$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__$3c$export__default__as__v4$3e$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/uuid@13.0.0/node_modules/uuid/dist-node/v4.js [app-ssr] (ecmascript) "); +var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$react$2d$image$2d$crop$40$11$2e$0$2e$10_react$40$19$2e$2$2e$0$2f$node_modules$2f$react$2d$image$2d$crop$2f$dist$2f$index$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/react-image-crop@11.0.10_react@19.2.0/node_modules/react-image-crop/dist/index.js [app-ssr] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$browser$2d$image$2d$compression$40$2$2e$0$2e$2$2f$node_modules$2f$browser$2d$image$2d$compression$2f$dist$2f$browser$2d$image$2d$compression$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/browser-image-compression@2.0.2/node_modules/browser-image-compression/dist/browser-image-compression.mjs [app-ssr] (ecmascript)"); +"use client"; +; +; +; +; +; +; +; +; +; +; +; +function ImageUpload({ value, onChange, className }) { + const [previewUrl, setPreviewUrl] = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["useState"])(undefined); + const [isLoading, setIsLoading] = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["useState"])(false); + const [showCropDialog, setShowCropDialog] = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["useState"])(false); + const [imageToCrop, setImageToCrop] = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["useState"])(null); + const [crop, setCrop] = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["useState"])(); + const [completedCrop, setCompletedCrop] = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["useState"])(); + const imgRef = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["useRef"])(null); + const fileInputRef = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["useRef"])(null); + // Load preview if value (imageId) exists + (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["useEffect"])(()=>{ + let objectUrl; + const loadPreview = async ()=>{ + if (!value) { + setPreviewUrl(undefined); + return; + } + try { + const image = await __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$lib$2f$db$2e$ts__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["db"].images.get(value); + if (image) { + objectUrl = URL.createObjectURL(image.blob); + setPreviewUrl(objectUrl); + } + } catch (error) { + console.error("Failed to load image:", error); + } + }; + loadPreview(); + return ()=>{ + if (objectUrl) URL.revokeObjectURL(objectUrl); + }; + }, [ + value + ]); + const handleFileSelect = async (e)=>{ + const file = e.target.files?.[0]; + if (!file) return; + try { + // Basic validation + if (!file.type.startsWith("image/")) { + alert("请选择图片文件"); + return; + } + // 压缩图片 + const options = { + maxSizeMB: 1, + maxWidthOrHeight: 1024, + useWebWorker: true + }; + const compressedFile = await (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$browser$2d$image$2d$compression$40$2$2e$0$2e$2$2f$node_modules$2f$browser$2d$image$2d$compression$2f$dist$2f$browser$2d$image$2d$compression$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["default"])(file, options); + // 显示裁剪对话框 + const reader = new FileReader(); + reader.onload = ()=>{ + setImageToCrop(reader.result); + setShowCropDialog(true); + }; + reader.readAsDataURL(compressedFile); + } catch (error) { + console.error("Failed to process image:", error); + alert("图片处理失败"); + } finally{ + // Reset input + if (fileInputRef.current) fileInputRef.current.value = ""; + } + }; + const handleCropComplete = async ()=>{ + if (!completedCrop || !imgRef.current) { + // 如果没有裁剪,直接保存原图 + await saveImage(imageToCrop); + return; + } + try { + setIsLoading(true); + const canvas = document.createElement('canvas'); + const scaleX = imgRef.current.naturalWidth / imgRef.current.width; + const scaleY = imgRef.current.naturalHeight / imgRef.current.height; + canvas.width = completedCrop.width; + canvas.height = completedCrop.height; + const ctx = canvas.getContext('2d'); + if (ctx) { + ctx.drawImage(imgRef.current, completedCrop.x * scaleX, completedCrop.y * scaleY, completedCrop.width * scaleX, completedCrop.height * scaleY, 0, 0, completedCrop.width, completedCrop.height); + } + canvas.toBlob(async (blob)=>{ + if (blob) { + await saveImage(URL.createObjectURL(blob), blob); + } + }, 'image/jpeg', 0.9); + } catch (error) { + console.error("Failed to crop image:", error); + alert("图片裁剪失败"); + } finally{ + setIsLoading(false); + setShowCropDialog(false); + setImageToCrop(null); + } + }; + const saveImage = async (dataUrl, blob)=>{ + try { + setIsLoading(true); + let imageBlob = blob; + if (!imageBlob) { + const response = await fetch(dataUrl); + imageBlob = await response.blob(); + } + const imageId = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$uuid$40$13$2e$0$2e$0$2f$node_modules$2f$uuid$2f$dist$2d$node$2f$v4$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__$3c$export__default__as__v4$3e$__["v4"])(); + await __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$lib$2f$db$2e$ts__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["db"].images.add({ + id: imageId, + blob: imageBlob, + mimeType: imageBlob.type, + createdAt: new Date().toISOString() + }); + onChange(imageId); + setShowCropDialog(false); + setImageToCrop(null); + } catch (error) { + console.error("Failed to save image:", error); + alert("图片保存失败"); + } finally{ + setIsLoading(false); + } + }; + const handleRemove = ()=>{ + onChange(undefined); + }; + return /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["Fragment"], { + children: [ + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { + className: `flex items-center gap-4 ${className}`, + children: [ + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$avatar$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["Avatar"], { + className: "h-20 w-20 border-2 border-dashed border-muted-foreground/50", + children: [ + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$avatar$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["AvatarImage"], { + src: previewUrl, + className: "object-cover" + }, void 0, false, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/ui/image-upload.tsx", + lineNumber: 177, + columnNumber: 11 + }, this), + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$avatar$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["AvatarFallback"], { + className: "bg-transparent", + children: isLoading ? /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$lucide$2d$react$40$0$2e$454$2e$0_react$40$19$2e$2$2e$0$2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$loader$2d$circle$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__$3c$export__default__as__Loader2$3e$__["Loader2"], { + className: "h-6 w-6 animate-spin" + }, void 0, false, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/ui/image-upload.tsx", + lineNumber: 179, + columnNumber: 26 + }, this) : /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$lucide$2d$react$40$0$2e$454$2e$0_react$40$19$2e$2$2e$0$2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$upload$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__$3c$export__default__as__Upload$3e$__["Upload"], { + className: "h-6 w-6 text-muted-foreground" + }, void 0, false, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/ui/image-upload.tsx", + lineNumber: 179, + columnNumber: 73 + }, this) + }, void 0, false, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/ui/image-upload.tsx", + lineNumber: 178, + columnNumber: 11 + }, this) + ] + }, void 0, true, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/ui/image-upload.tsx", + lineNumber: 176, + columnNumber: 9 + }, this), + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { + className: "flex flex-col gap-2", + children: [ + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("input", { + type: "file", + ref: fileInputRef, + className: "hidden", + accept: "image/*", + onChange: handleFileSelect + }, void 0, false, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/ui/image-upload.tsx", + lineNumber: 184, + columnNumber: 11 + }, this), + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$button$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["Button"], { + type: "button", + variant: "outline", + size: "sm", + onClick: ()=>fileInputRef.current?.click(), + disabled: isLoading, + children: value ? "更换头像" : "上传头像" + }, void 0, false, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/ui/image-upload.tsx", + lineNumber: 191, + columnNumber: 11 + }, this), + value && /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$button$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["Button"], { + type: "button", + variant: "ghost", + size: "sm", + className: "text-destructive hover:text-destructive", + onClick: handleRemove, + children: [ + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$lucide$2d$react$40$0$2e$454$2e$0_react$40$19$2e$2$2e$0$2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$x$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__$3c$export__default__as__X$3e$__["X"], { + className: "mr-2 h-3 w-3" + }, void 0, false, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/ui/image-upload.tsx", + lineNumber: 208, + columnNumber: 15 + }, this), + " 移除" + ] + }, void 0, true, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/ui/image-upload.tsx", + lineNumber: 201, + columnNumber: 13 + }, this) + ] + }, void 0, true, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/ui/image-upload.tsx", + lineNumber: 183, + columnNumber: 9 + }, this) + ] + }, void 0, true, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/ui/image-upload.tsx", + lineNumber: 175, + columnNumber: 7 + }, this), + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$dialog$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["Dialog"], { + open: showCropDialog, + onOpenChange: setShowCropDialog, + children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$dialog$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["DialogContent"], { + className: "max-w-3xl", + children: [ + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$dialog$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["DialogHeader"], { + children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$dialog$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["DialogTitle"], { + className: "flex items-center gap-2", + children: [ + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$lucide$2d$react$40$0$2e$454$2e$0_react$40$19$2e$2$2e$0$2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$crop$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__$3c$export__default__as__Crop$3e$__["Crop"], { + className: "h-5 w-5" + }, void 0, false, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/ui/image-upload.tsx", + lineNumber: 219, + columnNumber: 15 + }, this), + "裁剪图片" + ] + }, void 0, true, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/ui/image-upload.tsx", + lineNumber: 218, + columnNumber: 13 + }, this) + }, void 0, false, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/ui/image-upload.tsx", + lineNumber: 217, + columnNumber: 11 + }, this), + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { + className: "max-h-[60vh] overflow-auto", + children: imageToCrop && /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$react$2d$image$2d$crop$40$11$2e$0$2e$10_react$40$19$2e$2$2e$0$2f$node_modules$2f$react$2d$image$2d$crop$2f$dist$2f$index$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["default"], { + crop: crop, + onChange: (c)=>setCrop(c), + onComplete: (c)=>setCompletedCrop(c), + aspect: 1, + circularCrop: true, + children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("img", { + ref: imgRef, + src: imageToCrop, + alt: "待裁剪图片", + className: "max-w-full" + }, void 0, false, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/ui/image-upload.tsx", + lineNumber: 232, + columnNumber: 17 + }, this) + }, void 0, false, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/ui/image-upload.tsx", + lineNumber: 225, + columnNumber: 15 + }, this) + }, void 0, false, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/ui/image-upload.tsx", + lineNumber: 223, + columnNumber: 11 + }, this), + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$dialog$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["DialogFooter"], { + children: [ + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$button$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["Button"], { + variant: "outline", + onClick: ()=>{ + setShowCropDialog(false); + setImageToCrop(null); + }, + children: "取消" + }, void 0, false, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/ui/image-upload.tsx", + lineNumber: 242, + columnNumber: 13 + }, this), + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$button$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["Button"], { + onClick: handleCropComplete, + disabled: isLoading, + children: [ + isLoading ? /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$lucide$2d$react$40$0$2e$454$2e$0_react$40$19$2e$2$2e$0$2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$loader$2d$circle$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__$3c$export__default__as__Loader2$3e$__["Loader2"], { + className: "mr-2 h-4 w-4 animate-spin" + }, void 0, false, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/ui/image-upload.tsx", + lineNumber: 252, + columnNumber: 28 + }, this) : null, + completedCrop ? "确认裁剪" : "跳过裁剪" + ] + }, void 0, true, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/ui/image-upload.tsx", + lineNumber: 251, + columnNumber: 13 + }, this) + ] + }, void 0, true, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/ui/image-upload.tsx", + lineNumber: 241, + columnNumber: 11 + }, this) + ] + }, void 0, true, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/ui/image-upload.tsx", + lineNumber: 216, + columnNumber: 9 + }, this) + }, void 0, false, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/ui/image-upload.tsx", + lineNumber: 215, + columnNumber: 7 + }, this) + ] + }, void 0, true); +} +}), +"[project]/Documents/go-new/chinese-family-tree/components/members/photo-gallery.tsx [app-ssr] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "PhotoGallery", + ()=>PhotoGallery +]); +var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/server/route-modules/app-page/vendored/ssr/react-jsx-dev-runtime.js [app-ssr] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/server/route-modules/app-page/vendored/ssr/react.js [app-ssr] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$lib$2f$db$2e$ts__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/lib/db.ts [app-ssr] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$button$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/components/ui/button.tsx [app-ssr] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$dialog$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/components/ui/dialog.tsx [app-ssr] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$lucide$2d$react$40$0$2e$454$2e$0_react$40$19$2e$2$2e$0$2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$x$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__$3c$export__default__as__X$3e$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/lucide-react@0.454.0_react@19.2.0/node_modules/lucide-react/dist/esm/icons/x.js [app-ssr] (ecmascript) "); +var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$lucide$2d$react$40$0$2e$454$2e$0_react$40$19$2e$2$2e$0$2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$plus$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__$3c$export__default__as__Plus$3e$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/lucide-react@0.454.0_react@19.2.0/node_modules/lucide-react/dist/esm/icons/plus.js [app-ssr] (ecmascript) "); +var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$lucide$2d$react$40$0$2e$454$2e$0_react$40$19$2e$2$2e$0$2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$zoom$2d$in$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__$3c$export__default__as__ZoomIn$3e$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/lucide-react@0.454.0_react@19.2.0/node_modules/lucide-react/dist/esm/icons/zoom-in.js [app-ssr] (ecmascript) "); +var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$alert$2d$dialog$2d$custom$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/components/ui/alert-dialog-custom.tsx [app-ssr] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$uuid$40$13$2e$0$2e$0$2f$node_modules$2f$uuid$2f$dist$2d$node$2f$v4$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__$3c$export__default__as__v4$3e$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/uuid@13.0.0/node_modules/uuid/dist-node/v4.js [app-ssr] (ecmascript) "); +var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$browser$2d$image$2d$compression$40$2$2e$0$2e$2$2f$node_modules$2f$browser$2d$image$2d$compression$2f$dist$2f$browser$2d$image$2d$compression$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/browser-image-compression@2.0.2/node_modules/browser-image-compression/dist/browser-image-compression.mjs [app-ssr] (ecmascript)"); +"use client"; +; +; +; +; +; +; +; +; +; +function PhotoGallery({ photoIds = [], onChange, readonly = false }) { + const { showAlert, showConfirm } = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$alert$2d$dialog$2d$custom$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["useDialog"])(); + const [photos, setPhotos] = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["useState"])([]); + const [selectedPhoto, setSelectedPhoto] = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["useState"])(null); + const [isUploading, setIsUploading] = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["useState"])(false); + // 加载照片 + (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["useEffect"])(()=>{ + const loadPhotos = async ()=>{ + const loadedPhotos = await Promise.all(photoIds.map(async (id)=>{ + try { + const image = await __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$lib$2f$db$2e$ts__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["db"].images.get(id); + if (image) { + const url = URL.createObjectURL(image.blob); + return { + id, + url + }; + } + } catch (error) { + console.error('加载照片失败:', error); + } + return null; + })); + setPhotos(loadedPhotos.filter(Boolean)); + }; + if (photoIds.length > 0) { + loadPhotos(); + } + // 清理 URL + return ()=>{ + photos.forEach((photo)=>URL.revokeObjectURL(photo.url)); + }; + }, [ + photoIds + ]); + const handleUpload = async (e)=>{ + const files = e.target.files; + if (!files || files.length === 0) return; + setIsUploading(true); + try { + const newPhotoIds = []; + for (const file of Array.from(files)){ + if (!file.type.startsWith('image/')) continue; + // 压缩图片 + const options = { + maxSizeMB: 2, + maxWidthOrHeight: 1920, + useWebWorker: true + }; + const compressedFile = await (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$browser$2d$image$2d$compression$40$2$2e$0$2e$2$2f$node_modules$2f$browser$2d$image$2d$compression$2f$dist$2f$browser$2d$image$2d$compression$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["default"])(file, options); + // 保存到数据库 + const imageId = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$uuid$40$13$2e$0$2e$0$2f$node_modules$2f$uuid$2f$dist$2d$node$2f$v4$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__$3c$export__default__as__v4$3e$__["v4"])(); + await __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$lib$2f$db$2e$ts__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["db"].images.add({ + id: imageId, + blob: compressedFile, + mimeType: compressedFile.type, + createdAt: new Date().toISOString() + }); + newPhotoIds.push(imageId); + } + // 更新照片列表 + onChange([ + ...photoIds, + ...newPhotoIds + ]); + } catch (error) { + console.error('上传照片失败:', error); + await showAlert('上传照片失败', '错误'); + } finally{ + setIsUploading(false); + e.target.value = ''; + } + }; + const handleDelete = async (photoId)=>{ + const confirmed = await showConfirm('确定要删除这张照片吗?', '删除照片'); + if (confirmed) { + onChange(photoIds.filter((id)=>id !== photoId)); + } + }; + return /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { + className: "space-y-4", + children: [ + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { + className: "flex items-center justify-between", + children: [ + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("h3", { + className: "text-sm font-medium", + children: [ + "照片墙 (", + photos.length, + ")" + ] + }, void 0, true, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/photo-gallery.tsx", + lineNumber: 108, + columnNumber: 9 + }, this), + !readonly && /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("label", { + children: [ + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("input", { + type: "file", + multiple: true, + accept: "image/*", + className: "hidden", + onChange: handleUpload, + disabled: isUploading + }, void 0, false, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/photo-gallery.tsx", + lineNumber: 111, + columnNumber: 13 + }, this), + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$button$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["Button"], { + type: "button", + variant: "outline", + size: "sm", + disabled: isUploading, + asChild: true, + children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("span", { + children: [ + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$lucide$2d$react$40$0$2e$454$2e$0_react$40$19$2e$2$2e$0$2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$plus$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__$3c$export__default__as__Plus$3e$__["Plus"], { + className: "mr-2 h-4 w-4" + }, void 0, false, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/photo-gallery.tsx", + lineNumber: 127, + columnNumber: 17 + }, this), + isUploading ? '上传中...' : '添加照片' + ] + }, void 0, true, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/photo-gallery.tsx", + lineNumber: 126, + columnNumber: 15 + }, this) + }, void 0, false, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/photo-gallery.tsx", + lineNumber: 119, + columnNumber: 13 + }, this) + ] + }, void 0, true, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/photo-gallery.tsx", + lineNumber: 110, + columnNumber: 11 + }, this) + ] + }, void 0, true, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/photo-gallery.tsx", + lineNumber: 107, + columnNumber: 7 + }, this), + photos.length > 0 ? /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { + className: "grid grid-cols-2 md:grid-cols-3 lg:grid-cols-4 gap-4", + children: photos.map((photo)=>/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { + className: "relative group aspect-square", + children: [ + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("img", { + src: photo.url, + alt: "家族照片", + className: "w-full h-full object-cover rounded-lg border border-border cursor-pointer hover:opacity-90 transition-opacity", + onClick: ()=>setSelectedPhoto(photo.url) + }, void 0, false, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/photo-gallery.tsx", + lineNumber: 139, + columnNumber: 15 + }, this), + !readonly && /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$button$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["Button"], { + type: "button", + variant: "destructive", + size: "icon", + className: "absolute top-2 right-2 h-6 w-6 opacity-0 group-hover:opacity-100 transition-opacity", + onClick: ()=>handleDelete(photo.id), + children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$lucide$2d$react$40$0$2e$454$2e$0_react$40$19$2e$2$2e$0$2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$x$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__$3c$export__default__as__X$3e$__["X"], { + className: "h-3 w-3" + }, void 0, false, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/photo-gallery.tsx", + lineNumber: 153, + columnNumber: 19 + }, this) + }, void 0, false, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/photo-gallery.tsx", + lineNumber: 146, + columnNumber: 17 + }, this), + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$button$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["Button"], { + type: "button", + variant: "secondary", + size: "icon", + className: "absolute bottom-2 right-2 h-6 w-6 opacity-0 group-hover:opacity-100 transition-opacity", + onClick: ()=>setSelectedPhoto(photo.url), + children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$lucide$2d$react$40$0$2e$454$2e$0_react$40$19$2e$2$2e$0$2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$zoom$2d$in$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__$3c$export__default__as__ZoomIn$3e$__["ZoomIn"], { + className: "h-3 w-3" + }, void 0, false, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/photo-gallery.tsx", + lineNumber: 163, + columnNumber: 17 + }, this) + }, void 0, false, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/photo-gallery.tsx", + lineNumber: 156, + columnNumber: 15 + }, this) + ] + }, photo.id, true, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/photo-gallery.tsx", + lineNumber: 138, + columnNumber: 13 + }, this)) + }, void 0, false, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/photo-gallery.tsx", + lineNumber: 136, + columnNumber: 9 + }, this) : /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { + className: "text-center py-8 text-muted-foreground text-sm border border-dashed rounded-lg", + children: "暂无照片" + }, void 0, false, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/photo-gallery.tsx", + lineNumber: 169, + columnNumber: 9 + }, this), + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$dialog$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["Dialog"], { + open: !!selectedPhoto, + onOpenChange: ()=>setSelectedPhoto(null), + children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$dialog$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["DialogContent"], { + className: "max-w-4xl", + children: [ + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$dialog$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["DialogHeader"], { + children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$dialog$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["DialogTitle"], { + children: "照片预览" + }, void 0, false, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/photo-gallery.tsx", + lineNumber: 178, + columnNumber: 13 + }, this) + }, void 0, false, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/photo-gallery.tsx", + lineNumber: 177, + columnNumber: 11 + }, this), + selectedPhoto && /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("img", { + src: selectedPhoto, + alt: "照片预览", + className: "w-full h-auto max-h-[70vh] object-contain" + }, void 0, false, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/photo-gallery.tsx", + lineNumber: 181, + columnNumber: 13 + }, this) + ] + }, void 0, true, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/photo-gallery.tsx", + lineNumber: 176, + columnNumber: 9 + }, this) + }, void 0, false, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/photo-gallery.tsx", + lineNumber: 175, + columnNumber: 7 + }, this) + ] + }, void 0, true, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/photo-gallery.tsx", + lineNumber: 106, + columnNumber: 5 + }, this); +} +}), +"[project]/Documents/go-new/chinese-family-tree/components/members/story-manager.tsx [app-ssr] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "StoryManager", + ()=>StoryManager +]); +var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/server/route-modules/app-page/vendored/ssr/react-jsx-dev-runtime.js [app-ssr] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/server/route-modules/app-page/vendored/ssr/react.js [app-ssr] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$button$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/components/ui/button.tsx [app-ssr] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$input$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/components/ui/input.tsx [app-ssr] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$textarea$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/components/ui/textarea.tsx [app-ssr] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$label$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/components/ui/label.tsx [app-ssr] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$card$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/components/ui/card.tsx [app-ssr] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$dialog$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/components/ui/dialog.tsx [app-ssr] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$lucide$2d$react$40$0$2e$454$2e$0_react$40$19$2e$2$2e$0$2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$plus$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__$3c$export__default__as__Plus$3e$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/lucide-react@0.454.0_react@19.2.0/node_modules/lucide-react/dist/esm/icons/plus.js [app-ssr] (ecmascript) "); +var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$lucide$2d$react$40$0$2e$454$2e$0_react$40$19$2e$2$2e$0$2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$square$2d$pen$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__$3c$export__default__as__Edit$3e$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/lucide-react@0.454.0_react@19.2.0/node_modules/lucide-react/dist/esm/icons/square-pen.js [app-ssr] (ecmascript) "); +var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$lucide$2d$react$40$0$2e$454$2e$0_react$40$19$2e$2$2e$0$2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$trash$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__$3c$export__default__as__Trash$3e$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/lucide-react@0.454.0_react@19.2.0/node_modules/lucide-react/dist/esm/icons/trash.js [app-ssr] (ecmascript) "); +var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$lucide$2d$react$40$0$2e$454$2e$0_react$40$19$2e$2$2e$0$2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$book$2d$open$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__$3c$export__default__as__BookOpen$3e$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/lucide-react@0.454.0_react@19.2.0/node_modules/lucide-react/dist/esm/icons/book-open.js [app-ssr] (ecmascript) "); +var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$lucide$2d$react$40$0$2e$454$2e$0_react$40$19$2e$2$2e$0$2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$calendar$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__$3c$export__default__as__Calendar$3e$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/lucide-react@0.454.0_react@19.2.0/node_modules/lucide-react/dist/esm/icons/calendar.js [app-ssr] (ecmascript) "); +var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$uuid$40$13$2e$0$2e$0$2f$node_modules$2f$uuid$2f$dist$2d$node$2f$v4$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__$3c$export__default__as__v4$3e$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/uuid@13.0.0/node_modules/uuid/dist-node/v4.js [app-ssr] (ecmascript) "); +var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$alert$2d$dialog$2d$custom$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/components/ui/alert-dialog-custom.tsx [app-ssr] (ecmascript)"); +"use client"; +; +; +; +; +; +; +; +; +; +; +; +function StoryManager({ stories = [], onChange, readonly = false }) { + const { showAlert, showConfirm } = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$alert$2d$dialog$2d$custom$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["useDialog"])(); + const [isDialogOpen, setIsDialogOpen] = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["useState"])(false); + const [editingStory, setEditingStory] = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["useState"])(null); + const [formData, setFormData] = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["useState"])({ + title: "", + content: "", + date: "" + }); + const handleAdd = ()=>{ + setEditingStory(null); + setFormData({ + title: "", + content: "", + date: "" + }); + setIsDialogOpen(true); + }; + const handleEdit = (story)=>{ + setEditingStory(story); + setFormData(story); + setIsDialogOpen(true); + }; + const handleDelete = async (storyId)=>{ + const confirmed = await showConfirm("确定要删除这个故事吗?", "删除故事"); + if (confirmed) { + onChange(stories.filter((s)=>s.id !== storyId)); + } + }; + const handleSave = async ()=>{ + if (!formData.title || !formData.content) { + await showAlert("请填写标题和内容", "提示"); + return; + } + const now = new Date().toISOString(); + if (editingStory) { + // 更新现有故事 + onChange(stories.map((s)=>s.id === editingStory.id ? { + ...s, + ...formData, + updatedAt: now + } : s)); + } else { + // 添加新故事 + const newStory = { + id: (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$uuid$40$13$2e$0$2e$0$2f$node_modules$2f$uuid$2f$dist$2d$node$2f$v4$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__$3c$export__default__as__v4$3e$__["v4"])(), + title: formData.title, + content: formData.content, + date: formData.date, + imageIds: formData.imageIds || [], + createdAt: now, + updatedAt: now + }; + onChange([ + ...stories, + newStory + ]); + } + setIsDialogOpen(false); + setFormData({ + title: "", + content: "", + date: "" + }); + }; + return /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { + className: "space-y-4", + children: [ + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { + className: "flex items-center justify-between", + children: [ + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("h3", { + className: "text-sm font-medium flex items-center gap-2", + children: [ + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$lucide$2d$react$40$0$2e$454$2e$0_react$40$19$2e$2$2e$0$2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$book$2d$open$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__$3c$export__default__as__BookOpen$3e$__["BookOpen"], { + className: "h-4 w-4" + }, void 0, false, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/story-manager.tsx", + lineNumber: 89, + columnNumber: 11 + }, this), + "家族故事 (", + stories.length, + ")" + ] + }, void 0, true, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/story-manager.tsx", + lineNumber: 88, + columnNumber: 9 + }, this), + !readonly && /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$button$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["Button"], { + type: "button", + variant: "outline", + size: "sm", + onClick: handleAdd, + children: [ + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$lucide$2d$react$40$0$2e$454$2e$0_react$40$19$2e$2$2e$0$2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$plus$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__$3c$export__default__as__Plus$3e$__["Plus"], { + className: "mr-2 h-4 w-4" + }, void 0, false, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/story-manager.tsx", + lineNumber: 99, + columnNumber: 13 + }, this), + "添加故事" + ] + }, void 0, true, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/story-manager.tsx", + lineNumber: 93, + columnNumber: 11 + }, this) + ] + }, void 0, true, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/story-manager.tsx", + lineNumber: 87, + columnNumber: 7 + }, this), + stories.length > 0 ? /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { + className: "space-y-4", + children: stories.sort((a, b)=>new Date(b.createdAt).getTime() - new Date(a.createdAt).getTime()).map((story)=>/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$card$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["Card"], { + className: "hover:shadow-md transition-shadow", + children: [ + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$card$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["CardHeader"], { + className: "pb-3", + children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { + className: "flex items-start justify-between", + children: [ + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { + className: "flex-1", + children: [ + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$card$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["CardTitle"], { + className: "text-lg font-serif", + children: story.title + }, void 0, false, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/story-manager.tsx", + lineNumber: 114, + columnNumber: 23 + }, this), + story.date && /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { + className: "flex items-center gap-1 text-sm text-muted-foreground mt-1", + children: [ + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$lucide$2d$react$40$0$2e$454$2e$0_react$40$19$2e$2$2e$0$2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$calendar$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__$3c$export__default__as__Calendar$3e$__["Calendar"], { + className: "h-3 w-3" + }, void 0, false, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/story-manager.tsx", + lineNumber: 117, + columnNumber: 27 + }, this), + story.date + ] + }, void 0, true, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/story-manager.tsx", + lineNumber: 116, + columnNumber: 25 + }, this) + ] + }, void 0, true, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/story-manager.tsx", + lineNumber: 113, + columnNumber: 21 + }, this), + !readonly && /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { + className: "flex gap-1", + children: [ + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$button$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["Button"], { + type: "button", + variant: "ghost", + size: "icon", + className: "h-8 w-8", + onClick: ()=>handleEdit(story), + children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$lucide$2d$react$40$0$2e$454$2e$0_react$40$19$2e$2$2e$0$2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$square$2d$pen$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__$3c$export__default__as__Edit$3e$__["Edit"], { + className: "h-3 w-3" + }, void 0, false, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/story-manager.tsx", + lineNumber: 131, + columnNumber: 27 + }, this) + }, void 0, false, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/story-manager.tsx", + lineNumber: 124, + columnNumber: 25 + }, this), + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$button$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["Button"], { + type: "button", + variant: "ghost", + size: "icon", + className: "h-8 w-8 text-destructive hover:text-destructive", + onClick: ()=>handleDelete(story.id), + children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$lucide$2d$react$40$0$2e$454$2e$0_react$40$19$2e$2$2e$0$2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$trash$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__$3c$export__default__as__Trash$3e$__["Trash"], { + className: "h-3 w-3" + }, void 0, false, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/story-manager.tsx", + lineNumber: 140, + columnNumber: 27 + }, this) + }, void 0, false, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/story-manager.tsx", + lineNumber: 133, + columnNumber: 25 + }, this) + ] + }, void 0, true, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/story-manager.tsx", + lineNumber: 123, + columnNumber: 23 + }, this) + ] + }, void 0, true, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/story-manager.tsx", + lineNumber: 112, + columnNumber: 19 + }, this) + }, void 0, false, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/story-manager.tsx", + lineNumber: 111, + columnNumber: 17 + }, this), + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$card$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["CardContent"], { + children: [ + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("p", { + className: "text-sm text-muted-foreground whitespace-pre-line leading-relaxed", + children: story.content + }, void 0, false, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/story-manager.tsx", + lineNumber: 147, + columnNumber: 19 + }, this), + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { + className: "mt-2 text-xs text-muted-foreground", + children: [ + "创建于 ", + new Date(story.createdAt).toLocaleDateString('zh-CN') + ] + }, void 0, true, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/story-manager.tsx", + lineNumber: 150, + columnNumber: 19 + }, this) + ] + }, void 0, true, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/story-manager.tsx", + lineNumber: 146, + columnNumber: 17 + }, this) + ] + }, story.id, true, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/story-manager.tsx", + lineNumber: 110, + columnNumber: 15 + }, this)) + }, void 0, false, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/story-manager.tsx", + lineNumber: 106, + columnNumber: 9 + }, this) : /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { + className: "text-center py-8 text-muted-foreground text-sm border border-dashed rounded-lg", + children: "暂无家族故事" + }, void 0, false, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/story-manager.tsx", + lineNumber: 158, + columnNumber: 9 + }, this), + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$dialog$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["Dialog"], { + open: isDialogOpen, + onOpenChange: setIsDialogOpen, + children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$dialog$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["DialogContent"], { + className: "max-w-2xl", + children: [ + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$dialog$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["DialogHeader"], { + children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$dialog$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["DialogTitle"], { + children: editingStory ? "编辑故事" : "添加故事" + }, void 0, false, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/story-manager.tsx", + lineNumber: 167, + columnNumber: 13 + }, this) + }, void 0, false, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/story-manager.tsx", + lineNumber: 166, + columnNumber: 11 + }, this), + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { + className: "space-y-4", + children: [ + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { + className: "space-y-2", + children: [ + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$label$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["Label"], { + htmlFor: "story-title", + children: "故事标题 *" + }, void 0, false, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/story-manager.tsx", + lineNumber: 171, + columnNumber: 15 + }, this), + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$input$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["Input"], { + id: "story-title", + placeholder: "例如:爷爷的创业故事", + value: formData.title || "", + onChange: (e)=>setFormData({ + ...formData, + title: e.target.value + }) + }, void 0, false, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/story-manager.tsx", + lineNumber: 172, + columnNumber: 15 + }, this) + ] + }, void 0, true, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/story-manager.tsx", + lineNumber: 170, + columnNumber: 13 + }, this), + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { + className: "space-y-2", + children: [ + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$label$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["Label"], { + htmlFor: "story-date", + children: "发生日期(可选)" + }, void 0, false, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/story-manager.tsx", + lineNumber: 180, + columnNumber: 15 + }, this), + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$input$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["Input"], { + id: "story-date", + type: "date", + value: formData.date || "", + onChange: (e)=>setFormData({ + ...formData, + date: e.target.value + }) + }, void 0, false, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/story-manager.tsx", + lineNumber: 181, + columnNumber: 15 + }, this) + ] + }, void 0, true, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/story-manager.tsx", + lineNumber: 179, + columnNumber: 13 + }, this), + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { + className: "space-y-2", + children: [ + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$label$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["Label"], { + htmlFor: "story-content", + children: "故事内容 *" + }, void 0, false, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/story-manager.tsx", + lineNumber: 189, + columnNumber: 15 + }, this), + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$textarea$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["Textarea"], { + id: "story-content", + placeholder: "记录家族的珍贵故事...", + className: "min-h-[200px]", + value: formData.content || "", + onChange: (e)=>setFormData({ + ...formData, + content: e.target.value + }) + }, void 0, false, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/story-manager.tsx", + lineNumber: 190, + columnNumber: 15 + }, this) + ] + }, void 0, true, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/story-manager.tsx", + lineNumber: 188, + columnNumber: 13 + }, this) + ] + }, void 0, true, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/story-manager.tsx", + lineNumber: 169, + columnNumber: 11 + }, this), + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$dialog$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["DialogFooter"], { + children: [ + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$button$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["Button"], { + variant: "outline", + onClick: ()=>setIsDialogOpen(false), + children: "取消" + }, void 0, false, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/story-manager.tsx", + lineNumber: 200, + columnNumber: 13 + }, this), + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$button$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["Button"], { + onClick: handleSave, + children: editingStory ? "保存" : "添加" + }, void 0, false, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/story-manager.tsx", + lineNumber: 203, + columnNumber: 13 + }, this) + ] + }, void 0, true, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/story-manager.tsx", + lineNumber: 199, + columnNumber: 11 + }, this) + ] + }, void 0, true, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/story-manager.tsx", + lineNumber: 165, + columnNumber: 9 + }, this) + }, void 0, false, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/story-manager.tsx", + lineNumber: 164, + columnNumber: 7 + }, this) + ] + }, void 0, true, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/story-manager.tsx", + lineNumber: 86, + columnNumber: 5 + }, this); +} +}), +"[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx [app-ssr] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "MemberForm", + ()=>MemberForm +]); +var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/server/route-modules/app-page/vendored/ssr/react-jsx-dev-runtime.js [app-ssr] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/server/route-modules/app-page/vendored/ssr/react.js [app-ssr] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$button$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/components/ui/button.tsx [app-ssr] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$input$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/components/ui/input.tsx [app-ssr] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$label$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/components/ui/label.tsx [app-ssr] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$textarea$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/components/ui/textarea.tsx [app-ssr] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$select$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/components/ui/select.tsx [app-ssr] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$lucide$2d$react$40$0$2e$454$2e$0_react$40$19$2e$2$2e$0$2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$calendar$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__$3c$export__default__as__CalendarIcon$3e$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/lucide-react@0.454.0_react@19.2.0/node_modules/lucide-react/dist/esm/icons/calendar.js [app-ssr] (ecmascript) "); +var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$lucide$2d$react$40$0$2e$454$2e$0_react$40$19$2e$2$2e$0$2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$user$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__$3c$export__default__as__User$3e$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/lucide-react@0.454.0_react@19.2.0/node_modules/lucide-react/dist/esm/icons/user.js [app-ssr] (ecmascript) "); +var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$lucide$2d$react$40$0$2e$454$2e$0_react$40$19$2e$2$2e$0$2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$scroll$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__$3c$export__default__as__Scroll$3e$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/lucide-react@0.454.0_react@19.2.0/node_modules/lucide-react/dist/esm/icons/scroll.js [app-ssr] (ecmascript) "); +var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$lucide$2d$react$40$0$2e$454$2e$0_react$40$19$2e$2$2e$0$2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$users$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__$3c$export__default__as__Users$3e$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/lucide-react@0.454.0_react@19.2.0/node_modules/lucide-react/dist/esm/icons/users.js [app-ssr] (ecmascript) "); +var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$lucide$2d$react$40$0$2e$454$2e$0_react$40$19$2e$2$2e$0$2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$images$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__$3c$export__default__as__Images$3e$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/lucide-react@0.454.0_react@19.2.0/node_modules/lucide-react/dist/esm/icons/images.js [app-ssr] (ecmascript) "); +var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$lucide$2d$react$40$0$2e$454$2e$0_react$40$19$2e$2$2e$0$2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$book$2d$open$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__$3c$export__default__as__BookOpen$3e$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/lucide-react@0.454.0_react@19.2.0/node_modules/lucide-react/dist/esm/icons/book-open.js [app-ssr] (ecmascript) "); +var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$card$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/components/ui/card.tsx [app-ssr] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$image$2d$upload$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/components/ui/image-upload.tsx [app-ssr] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$members$2f$photo$2d$gallery$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/components/members/photo-gallery.tsx [app-ssr] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$members$2f$story$2d$manager$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/components/members/story-manager.tsx [app-ssr] (ecmascript)"); +"use client"; +; +; +; +; +; +; +; +; +; +; +; +; +function MemberForm({ initialData, existingMembers = [], onSubmit, onCancel }) { + // 计算最大世系 + const maxGeneration = existingMembers.length > 0 ? Math.max(...existingMembers.map((m)=>m.generation || 1)) : 1; + // 获取始祖的姓氏(第1世成员) + const ancestorSurname = existingMembers.find((m)=>m.generation === 1)?.surname || ""; + // Initialize state with default values or initialData + const [formData, setFormData] = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["useState"])(()=>{ + const defaults = { + id: crypto.randomUUID(), + surname: ancestorSurname, + givenName: "", + fullName: "", + gender: "MALE", + generation: maxGeneration, + spouseIds: [], + childrenIds: [], + tags: [] + }; + if (!initialData) return defaults; + return { + ...defaults, + ...initialData, + gender: (initialData.gender || "MALE").toUpperCase(), + spouseIds: initialData.spouseIds || [], + childrenIds: initialData.childrenIds || [], + tags: initialData.tags || [], + fatherId: initialData.fatherId || undefined, + motherId: initialData.motherId || undefined + }; + }); + const [errors, setErrors] = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["useState"])([]); + const handleChange = (field, value)=>{ + setFormData((prev)=>{ + const newData = { + ...prev, + [field]: value + }; + // Auto-update full name if surname or given name changes + if (field === "surname" || field === "givenName") { + newData.fullName = (newData.surname || "") + (newData.givenName || ""); + } + // 选择父亲时自动带出母亲 + if (field === "fatherId" && value) { + const father = existingMembers.find((m)=>m.id === value); + if (father && father.spouseIds && father.spouseIds.length > 0) { + // 找到父亲的配偶(母亲) + const motherId = father.spouseIds[0]; + newData.motherId = motherId; + } + } + // 选择母亲时自动带出父亲 + if (field === "motherId" && value) { + const mother = existingMembers.find((m)=>m.id === value); + if (mother && mother.spouseIds && mother.spouseIds.length > 0) { + // 找到母亲的配偶(父亲) + const fatherId = mother.spouseIds[0]; + newData.fatherId = fatherId; + } + } + return newData; + }); + // Clear errors when user makes changes + if (errors.length > 0) setErrors([]); + }; + const handleSpouseAdd = (spouseId)=>{ + if (!spouseId || spouseId === "none") return; + setFormData((prev)=>{ + const currentSpouses = prev.spouseIds || []; + // 避免重复添加 + if (currentSpouses.includes(spouseId)) return prev; + return { + ...prev, + spouseIds: [ + ...currentSpouses, + spouseId + ] + }; + }); + }; + const handleSpouseRemove = (spouseId)=>{ + setFormData((prev)=>({ + ...prev, + spouseIds: (prev.spouseIds || []).filter((id)=>id !== spouseId) + })); + }; + const handleChildAdd = (childId)=>{ + if (!childId || childId === "none") return; + setFormData((prev)=>{ + const currentChildren = prev.childrenIds || []; + // 避免重复添加 + if (currentChildren.includes(childId)) return prev; + return { + ...prev, + childrenIds: [ + ...currentChildren, + childId + ] + }; + }); + }; + const handleChildRemove = (childId)=>{ + setFormData((prev)=>({ + ...prev, + childrenIds: (prev.childrenIds || []).filter((id)=>id !== childId) + })); + }; + const validate = ()=>{ + const newErrors = []; + // 1. Date Validation + if (formData.birthDate && formData.deathDate) { + if (new Date(formData.birthDate) > new Date(formData.deathDate)) { + newErrors.push("出生日期不能晚于逝世日期"); + } + } + // 2. Parent Age Validation + const birthYear = formData.birthDate ? new Date(formData.birthDate).getFullYear() : null; + if (birthYear) { + if (formData.fatherId) { + const father = existingMembers.find((m)=>m.id === formData.fatherId); + if (father?.birthDate) { + const fatherBirthYear = new Date(father.birthDate).getFullYear(); + if (birthYear - fatherBirthYear < 15) { + newErrors.push(`与父亲的年龄差过小 (${birthYear - fatherBirthYear}岁),请确认`); + } + if (birthYear < fatherBirthYear) { + newErrors.push("出生日期不能早于父亲"); + } + } + } + if (formData.motherId) { + const mother = existingMembers.find((m)=>m.id === formData.motherId); + if (mother?.birthDate) { + const motherBirthYear = new Date(mother.birthDate).getFullYear(); + if (birthYear - motherBirthYear < 15) { + newErrors.push(`与母亲的年龄差过小 (${birthYear - motherBirthYear}岁),请确认`); + } + if (birthYear < motherBirthYear) { + newErrors.push("出生日期不能早于母亲"); + } + } + } + } + // 3. Generation Validation + if (formData.fatherId) { + const father = existingMembers.find((m)=>m.id === formData.fatherId); + if (father && formData.generation !== father.generation + 1) { + newErrors.push(`世系错误:父亲是第 ${father.generation} 世,子女应为第 ${father.generation + 1} 世`); + } + } + // 4. Circular Reference Detection (循环引用检测) + if (formData.fatherId || formData.motherId) { + const visited = new Set(); + const checkCircular = (memberId)=>{ + if (memberId === formData.id) return true; + if (visited.has(memberId)) return false; + visited.add(memberId); + const member = existingMembers.find((m)=>m.id === memberId); + if (!member) return false; + if (member.fatherId && checkCircular(member.fatherId)) return true; + if (member.motherId && checkCircular(member.motherId)) return true; + return false; + }; + if (formData.fatherId && checkCircular(formData.fatherId)) { + newErrors.push("检测到循环引用:不能将自己的后代设置为父亲"); + } + if (formData.motherId && checkCircular(formData.motherId)) { + newErrors.push("检测到循环引用:不能将自己的后代设置为母亲"); + } + } + // 5. Self-Reference Detection (自我引用检测) + if (formData.fatherId === formData.id) { + newErrors.push("不能将自己设置为自己的父亲"); + } + if (formData.motherId === formData.id) { + newErrors.push("不能将自己设置为自己的母亲"); + } + if (formData.spouseIds?.includes(formData.id || "")) { + newErrors.push("不能将自己设置为自己的配偶"); + } + setErrors(newErrors); + return newErrors.length === 0; + }; + const handleSubmit = (e)=>{ + e.preventDefault(); + if (validate()) { + onSubmit(formData); + } + }; + const potentialRelatives = existingMembers.filter((m)=>m.id !== formData.id); + return /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("form", { + onSubmit: handleSubmit, + className: "space-y-8 max-w-4xl mx-auto p-6", + children: [ + errors.length > 0 && /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { + className: "bg-destructive/15 text-destructive px-4 py-3 rounded-md border border-destructive/20", + children: [ + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("p", { + className: "font-bold mb-1", + children: "请检查以下问题:" + }, void 0, false, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", + lineNumber: 245, + columnNumber: 11 + }, this), + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("ul", { + className: "list-disc list-inside text-sm", + children: errors.map((err, index)=>/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("li", { + children: err + }, index, false, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", + lineNumber: 248, + columnNumber: 15 + }, this)) + }, void 0, false, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", + lineNumber: 246, + columnNumber: 11 + }, this) + ] + }, void 0, true, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", + lineNumber: 244, + columnNumber: 9 + }, this), + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { + className: "space-y-6", + children: [ + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { + className: "grid grid-cols-1 lg:grid-cols-2 gap-6", + children: [ + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$card$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["Card"], { + children: [ + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$card$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["CardHeader"], { + children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$card$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["CardTitle"], { + className: "flex items-center gap-2 text-lg font-serif", + children: [ + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$lucide$2d$react$40$0$2e$454$2e$0_react$40$19$2e$2$2e$0$2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$user$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__$3c$export__default__as__User$3e$__["User"], { + className: "h-5 w-5" + }, void 0, false, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", + lineNumber: 261, + columnNumber: 17 + }, this), + "基本信息 (Identity)" + ] + }, void 0, true, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", + lineNumber: 260, + columnNumber: 15 + }, this) + }, void 0, false, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", + lineNumber: 259, + columnNumber: 13 + }, this), + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$card$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["CardContent"], { + className: "space-y-4", + children: [ + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { + className: "flex justify-center mb-4", + children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$image$2d$upload$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["ImageUpload"], { + value: formData.avatarImageId, + onChange: (imageId)=>handleChange("avatarImageId", imageId) + }, void 0, false, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", + lineNumber: 267, + columnNumber: 17 + }, this) + }, void 0, false, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", + lineNumber: 266, + columnNumber: 15 + }, this), + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { + className: "grid grid-cols-2 gap-4", + children: [ + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { + className: "space-y-2", + children: [ + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$label$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["Label"], { + htmlFor: "surname", + children: "姓 (Surname)" + }, void 0, false, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", + lineNumber: 275, + columnNumber: 19 + }, this), + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$input$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["Input"], { + id: "surname", + value: formData.surname, + onChange: (e)=>handleChange("surname", e.target.value) + }, void 0, false, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", + lineNumber: 276, + columnNumber: 19 + }, this) + ] + }, void 0, true, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", + lineNumber: 274, + columnNumber: 17 + }, this), + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { + className: "space-y-2", + children: [ + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$label$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["Label"], { + htmlFor: "givenName", + children: "名 (Given Name)" + }, void 0, false, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", + lineNumber: 283, + columnNumber: 19 + }, this), + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$input$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["Input"], { + id: "givenName", + value: formData.givenName, + onChange: (e)=>handleChange("givenName", e.target.value) + }, void 0, false, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", + lineNumber: 284, + columnNumber: 19 + }, this) + ] + }, void 0, true, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", + lineNumber: 282, + columnNumber: 17 + }, this) + ] + }, void 0, true, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", + lineNumber: 273, + columnNumber: 15 + }, this), + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { + className: "grid grid-cols-2 gap-4", + children: [ + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { + className: "space-y-2", + children: [ + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$label$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["Label"], { + htmlFor: "gender", + children: "性别 (Gender)" + }, void 0, false, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", + lineNumber: 294, + columnNumber: 19 + }, this), + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$select$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["Select"], { + value: formData.gender, + onValueChange: (val)=>handleChange("gender", val), + children: [ + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$select$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["SelectTrigger"], { + children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$select$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["SelectValue"], {}, void 0, false, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", + lineNumber: 297, + columnNumber: 23 + }, this) + }, void 0, false, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", + lineNumber: 296, + columnNumber: 21 + }, this), + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$select$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["SelectContent"], { + children: [ + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$select$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["SelectItem"], { + value: "MALE", + children: "男 (Male)" + }, void 0, false, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", + lineNumber: 300, + columnNumber: 23 + }, this), + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$select$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["SelectItem"], { + value: "FEMALE", + children: "女 (Female)" + }, void 0, false, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", + lineNumber: 301, + columnNumber: 23 + }, this) + ] + }, void 0, true, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", + lineNumber: 299, + columnNumber: 21 + }, this) + ] + }, void 0, true, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", + lineNumber: 295, + columnNumber: 19 + }, this) + ] + }, void 0, true, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", + lineNumber: 293, + columnNumber: 17 + }, this), + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { + className: "space-y-2", + children: [ + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$label$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["Label"], { + htmlFor: "generation", + children: "世系 (Generation)" + }, void 0, false, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", + lineNumber: 306, + columnNumber: 19 + }, this), + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$input$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["Input"], { + id: "generation", + type: "number", + value: formData.generation, + onChange: (e)=>handleChange("generation", Number.parseInt(e.target.value)) + }, void 0, false, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", + lineNumber: 307, + columnNumber: 19 + }, this) + ] + }, void 0, true, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", + lineNumber: 305, + columnNumber: 17 + }, this) + ] + }, void 0, true, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", + lineNumber: 292, + columnNumber: 15 + }, this) + ] + }, void 0, true, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", + lineNumber: 265, + columnNumber: 13 + }, this) + ] + }, void 0, true, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", + lineNumber: 258, + columnNumber: 11 + }, this), + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$card$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["Card"], { + children: [ + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$card$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["CardHeader"], { + children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$card$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["CardTitle"], { + className: "flex items-center gap-2 text-lg font-serif", + children: [ + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$lucide$2d$react$40$0$2e$454$2e$0_react$40$19$2e$2$2e$0$2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$users$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__$3c$export__default__as__Users$3e$__["Users"], { + className: "h-5 w-5" + }, void 0, false, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", + lineNumber: 322, + columnNumber: 17 + }, this), + "家庭关系 (Relationships)" + ] + }, void 0, true, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", + lineNumber: 321, + columnNumber: 15 + }, this) + }, void 0, false, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", + lineNumber: 320, + columnNumber: 13 + }, this), + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$card$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["CardContent"], { + className: "space-y-4", + children: [ + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { + className: "space-y-2", + children: [ + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$label$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["Label"], { + htmlFor: "fatherId", + children: "父亲 (Father)" + }, void 0, false, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", + lineNumber: 328, + columnNumber: 17 + }, this), + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { + className: "flex gap-2", + children: [ + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$select$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["Select"], { + value: formData.fatherId || "none", + onValueChange: (val)=>handleChange("fatherId", val === "none" ? undefined : val), + children: [ + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$select$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["SelectTrigger"], { + className: "flex-1", + children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$select$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["SelectValue"], { + placeholder: "选择父亲" + }, void 0, false, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", + lineNumber: 335, + columnNumber: 23 + }, this) + }, void 0, false, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", + lineNumber: 334, + columnNumber: 21 + }, this), + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$select$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["SelectContent"], { + children: [ + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$select$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["SelectItem"], { + value: "none", + children: "无 (None)" + }, void 0, false, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", + lineNumber: 338, + columnNumber: 23 + }, this), + potentialRelatives.filter((m)=>m.gender === "MALE" && m.generation === (formData.generation || 1) - 1).map((m)=>/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$select$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["SelectItem"], { + value: m.id, + children: [ + m.fullName, + " (", + m.generation, + "世)" + ] + }, m.id, true, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", + lineNumber: 342, + columnNumber: 27 + }, this)) + ] + }, void 0, true, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", + lineNumber: 337, + columnNumber: 21 + }, this) + ] + }, void 0, true, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", + lineNumber: 330, + columnNumber: 19 + }, this), + !formData.fatherId && /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$input$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["Input"], { + placeholder: "非家族成员填写姓名", + value: formData.spouseFatherName || "", + onChange: (e)=>handleChange("spouseFatherName", e.target.value), + className: "flex-1" + }, void 0, false, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", + lineNumber: 349, + columnNumber: 21 + }, this) + ] + }, void 0, true, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", + lineNumber: 329, + columnNumber: 17 + }, this) + ] + }, void 0, true, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", + lineNumber: 327, + columnNumber: 15 + }, this), + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { + className: "space-y-2", + children: [ + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$label$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["Label"], { + htmlFor: "motherId", + children: "母亲 (Mother)" + }, void 0, false, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", + lineNumber: 360, + columnNumber: 17 + }, this), + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { + className: "flex gap-2", + children: [ + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$select$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["Select"], { + value: formData.motherId || "none", + onValueChange: (val)=>handleChange("motherId", val === "none" ? undefined : val), + children: [ + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$select$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["SelectTrigger"], { + className: "flex-1", + children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$select$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["SelectValue"], { + placeholder: "选择母亲" + }, void 0, false, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", + lineNumber: 367, + columnNumber: 23 + }, this) + }, void 0, false, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", + lineNumber: 366, + columnNumber: 21 + }, this), + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$select$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["SelectContent"], { + children: [ + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$select$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["SelectItem"], { + value: "none", + children: "无 (None)" + }, void 0, false, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", + lineNumber: 370, + columnNumber: 23 + }, this), + potentialRelatives.filter((m)=>m.gender === "FEMALE" && m.generation === (formData.generation || 1) - 1).map((m)=>/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$select$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["SelectItem"], { + value: m.id, + children: [ + m.fullName, + " (", + m.generation, + "世)" + ] + }, m.id, true, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", + lineNumber: 374, + columnNumber: 27 + }, this)) + ] + }, void 0, true, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", + lineNumber: 369, + columnNumber: 21 + }, this) + ] + }, void 0, true, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", + lineNumber: 362, + columnNumber: 19 + }, this), + !formData.motherId && /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$input$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["Input"], { + placeholder: "非家族成员填写姓名", + value: formData.spouseMotherName || "", + onChange: (e)=>handleChange("spouseMotherName", e.target.value), + className: "flex-1" + }, void 0, false, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", + lineNumber: 381, + columnNumber: 21 + }, this) + ] + }, void 0, true, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", + lineNumber: 361, + columnNumber: 17 + }, this) + ] + }, void 0, true, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", + lineNumber: 359, + columnNumber: 15 + }, this), + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { + className: "space-y-2", + children: [ + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$label$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["Label"], { + htmlFor: "spouseId", + children: "配偶 (Spouse)" + }, void 0, false, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", + lineNumber: 392, + columnNumber: 17 + }, this), + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$select$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["Select"], { + value: "none", + onValueChange: handleSpouseAdd, + children: [ + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$select$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["SelectTrigger"], { + children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$select$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["SelectValue"], { + placeholder: "添加配偶..." + }, void 0, false, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", + lineNumber: 395, + columnNumber: 21 + }, this) + }, void 0, false, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", + lineNumber: 394, + columnNumber: 19 + }, this), + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$select$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["SelectContent"], { + children: [ + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$select$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["SelectItem"], { + value: "none", + children: "选择配偶" + }, void 0, false, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", + lineNumber: 398, + columnNumber: 21 + }, this), + potentialRelatives.filter((m)=>{ + // 必须是同世系 + if (m.generation !== formData.generation) return false; + // 通常配偶应该是异性 + if (m.gender === formData.gender) return false; + // 排除已选的配偶 + if (formData.spouseIds?.includes(m.id)) return false; + // 一夫多妻:女性可以选择已有配偶的男性,男性只能选择未婚女性 + if (formData.gender === 'MALE') { + // 男性:排除已有配偶的女性 + if (m.spouseIds && m.spouseIds.length > 0) return false; + } + // 女性:可以选择已有配偶的男性(一夫多妻) + // 排除直系亲属 + // 1. 排除父母 + if (m.id === formData.fatherId || m.id === formData.motherId) return false; + // 2. 排除子女 + if (formData.childrenIds?.includes(m.id)) return false; + // 3. 排除兄弟姐妹(同父或同母) + if (formData.fatherId && m.fatherId === formData.fatherId) return false; + if (formData.motherId && m.motherId === formData.motherId) return false; + return true; + }).map((m)=>/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$select$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["SelectItem"], { + value: m.id, + children: [ + m.fullName, + " (", + m.generation, + "世)" + ] + }, m.id, true, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", + lineNumber: 431, + columnNumber: 25 + }, this)) + ] + }, void 0, true, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", + lineNumber: 397, + columnNumber: 19 + }, this) + ] + }, void 0, true, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", + lineNumber: 393, + columnNumber: 17 + }, this), + formData.spouseIds && formData.spouseIds.length > 0 && /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { + className: "mt-2 space-y-2", + children: formData.spouseIds.map((spouseId, index)=>{ + const spouse = existingMembers.find((m)=>m.id === spouseId); + if (!spouse) return null; + return /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { + className: "flex items-center justify-between p-2 bg-muted rounded", + children: [ + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("span", { + className: "text-sm", + children: [ + index + 1, + ". ", + spouse.fullName, + " (第", + spouse.generation, + "世)" + ] + }, void 0, true, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", + lineNumber: 447, + columnNumber: 27 + }, this), + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$button$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["Button"], { + type: "button", + variant: "ghost", + size: "sm", + onClick: ()=>handleSpouseRemove(spouseId), + className: "h-6 w-6 p-0 hover:bg-destructive hover:text-destructive-foreground", + children: "×" + }, void 0, false, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", + lineNumber: 450, + columnNumber: 27 + }, this) + ] + }, spouseId, true, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", + lineNumber: 446, + columnNumber: 25 + }, this); + }) + }, void 0, false, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", + lineNumber: 440, + columnNumber: 19 + }, this) + ] + }, void 0, true, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", + lineNumber: 391, + columnNumber: 15 + }, this), + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { + className: "space-y-2", + children: [ + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$label$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["Label"], { + htmlFor: "childId", + children: "子女 (Children)" + }, void 0, false, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", + lineNumber: 467, + columnNumber: 17 + }, this), + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$select$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["Select"], { + value: "none", + onValueChange: handleChildAdd, + children: [ + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$select$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["SelectTrigger"], { + children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$select$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["SelectValue"], { + placeholder: "添加子女..." + }, void 0, false, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", + lineNumber: 470, + columnNumber: 21 + }, this) + }, void 0, false, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", + lineNumber: 469, + columnNumber: 19 + }, this), + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$select$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["SelectContent"], { + children: [ + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$select$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["SelectItem"], { + value: "none", + children: "选择子女" + }, void 0, false, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", + lineNumber: 473, + columnNumber: 21 + }, this), + potentialRelatives.filter((m)=>{ + // 必须是下一世系 + if (m.generation !== (formData.generation || 1) + 1) return false; + // 排除已选的子女 + if (formData.childrenIds?.includes(m.id)) return false; + // 排除配偶 + if (formData.spouseIds?.includes(m.id)) return false; + // 排除配偶身份的成员(没有父母但有配偶的) + const isSpouse = !m.fatherId && !m.motherId && m.spouseIds && m.spouseIds.length > 0; + if (isSpouse) return false; + // 根据当前成员性别,排除已有对应父母的子女 + if (formData.gender === 'MALE') { + // 男性:排除已有父亲的子女 + if (m.fatherId) return false; + } else if (formData.gender === 'FEMALE') { + // 女性:排除已有母亲的子女 + if (m.motherId) return false; + } + return true; + }).map((m)=>/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$select$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["SelectItem"], { + value: m.id, + children: [ + m.fullName, + " (", + m.generation, + "世)" + ] + }, m.id, true, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", + lineNumber: 501, + columnNumber: 25 + }, this)) + ] + }, void 0, true, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", + lineNumber: 472, + columnNumber: 19 + }, this) + ] + }, void 0, true, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", + lineNumber: 468, + columnNumber: 17 + }, this), + formData.childrenIds && formData.childrenIds.length > 0 && /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { + className: "mt-2 space-y-2", + children: formData.childrenIds.map((childId, index)=>{ + const child = existingMembers.find((m)=>m.id === childId); + if (!child) return null; + return /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { + className: "flex items-center justify-between p-2 bg-muted rounded", + children: [ + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("span", { + className: "text-sm", + children: [ + index + 1, + ". ", + child.fullName, + " (第", + child.generation, + "世)" + ] + }, void 0, true, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", + lineNumber: 517, + columnNumber: 27 + }, this), + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$button$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["Button"], { + type: "button", + variant: "ghost", + size: "sm", + onClick: ()=>handleChildRemove(childId), + className: "h-6 w-6 p-0 hover:bg-destructive hover:text-destructive-foreground", + children: "×" + }, void 0, false, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", + lineNumber: 520, + columnNumber: 27 + }, this) + ] + }, childId, true, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", + lineNumber: 516, + columnNumber: 25 + }, this); + }) + }, void 0, false, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", + lineNumber: 510, + columnNumber: 19 + }, this) + ] + }, void 0, true, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", + lineNumber: 466, + columnNumber: 15 + }, this) + ] + }, void 0, true, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", + lineNumber: 326, + columnNumber: 13 + }, this) + ] + }, void 0, true, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", + lineNumber: 319, + columnNumber: 11 + }, this) + ] + }, void 0, true, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", + lineNumber: 256, + columnNumber: 9 + }, this), + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$card$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["Card"], { + children: [ + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$card$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["CardHeader"], { + children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$card$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["CardTitle"], { + className: "flex items-center gap-2 text-lg font-serif", + children: [ + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$lucide$2d$react$40$0$2e$454$2e$0_react$40$19$2e$2$2e$0$2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$scroll$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__$3c$export__default__as__Scroll$3e$__["Scroll"], { + className: "h-5 w-5" + }, void 0, false, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", + lineNumber: 543, + columnNumber: 15 + }, this), + "传统称谓 (Traditional Names)" + ] + }, void 0, true, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", + lineNumber: 542, + columnNumber: 13 + }, this) + }, void 0, false, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", + lineNumber: 541, + columnNumber: 11 + }, this), + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$card$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["CardContent"], { + className: "space-y-4", + children: [ + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { + className: "grid grid-cols-2 gap-4", + children: [ + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { + className: "space-y-2", + children: [ + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$label$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["Label"], { + htmlFor: "courtesyName", + children: "字 (Courtesy Name)" + }, void 0, false, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", + lineNumber: 550, + columnNumber: 17 + }, this), + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$input$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["Input"], { + id: "courtesyName", + value: formData.courtesyName || "", + onChange: (e)=>handleChange("courtesyName", e.target.value), + placeholder: "e.g. 伯虎" + }, void 0, false, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", + lineNumber: 551, + columnNumber: 17 + }, this) + ] + }, void 0, true, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", + lineNumber: 549, + columnNumber: 15 + }, this), + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { + className: "space-y-2", + children: [ + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$label$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["Label"], { + htmlFor: "artName", + children: "号 (Art Name)" + }, void 0, false, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", + lineNumber: 559, + columnNumber: 17 + }, this), + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$input$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["Input"], { + id: "artName", + value: formData.artName || "", + onChange: (e)=>handleChange("artName", e.target.value), + placeholder: "e.g. 六如居士" + }, void 0, false, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", + lineNumber: 560, + columnNumber: 17 + }, this) + ] + }, void 0, true, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", + lineNumber: 558, + columnNumber: 15 + }, this) + ] + }, void 0, true, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", + lineNumber: 548, + columnNumber: 13 + }, this), + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { + className: "grid grid-cols-2 gap-4", + children: [ + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { + className: "space-y-2", + children: [ + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$label$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["Label"], { + htmlFor: "generationName", + children: "字辈 (Gen. Name)" + }, void 0, false, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", + lineNumber: 570, + columnNumber: 17 + }, this), + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$input$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["Input"], { + id: "generationName", + value: formData.generationName || "", + onChange: (e)=>handleChange("generationName", e.target.value) + }, void 0, false, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", + lineNumber: 571, + columnNumber: 17 + }, this) + ] + }, void 0, true, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", + lineNumber: 569, + columnNumber: 15 + }, this), + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { + className: "space-y-2", + children: [ + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$label$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["Label"], { + htmlFor: "posthumousName", + children: "谥号 (Posthumous)" + }, void 0, false, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", + lineNumber: 578, + columnNumber: 17 + }, this), + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$input$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["Input"], { + id: "posthumousName", + value: formData.posthumousName || "", + onChange: (e)=>handleChange("posthumousName", e.target.value) + }, void 0, false, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", + lineNumber: 579, + columnNumber: 17 + }, this) + ] + }, void 0, true, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", + lineNumber: 577, + columnNumber: 15 + }, this) + ] + }, void 0, true, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", + lineNumber: 568, + columnNumber: 13 + }, this) + ] + }, void 0, true, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", + lineNumber: 547, + columnNumber: 11 + }, this) + ] + }, void 0, true, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", + lineNumber: 540, + columnNumber: 9 + }, this), + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$card$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["Card"], { + children: [ + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$card$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["CardHeader"], { + children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$card$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["CardTitle"], { + className: "flex items-center gap-2 text-lg font-serif", + children: [ + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$lucide$2d$react$40$0$2e$454$2e$0_react$40$19$2e$2$2e$0$2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$calendar$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__$3c$export__default__as__CalendarIcon$3e$__["CalendarIcon"], { + className: "h-5 w-5" + }, void 0, false, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", + lineNumber: 593, + columnNumber: 15 + }, this), + "生平与地点 (Life & Places)" + ] + }, void 0, true, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", + lineNumber: 592, + columnNumber: 13 + }, this) + }, void 0, false, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", + lineNumber: 591, + columnNumber: 11 + }, this), + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$card$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["CardContent"], { + className: "space-y-4", + children: [ + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { + className: "grid grid-cols-2 gap-4", + children: [ + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { + className: "space-y-2", + children: [ + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$label$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["Label"], { + htmlFor: "birthDate", + children: "出生日期 (Birth)" + }, void 0, false, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", + lineNumber: 600, + columnNumber: 17 + }, this), + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$input$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["Input"], { + id: "birthDate", + type: "date", + value: formData.birthDate || "", + onChange: (e)=>handleChange("birthDate", e.target.value) + }, void 0, false, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", + lineNumber: 601, + columnNumber: 17 + }, this) + ] + }, void 0, true, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", + lineNumber: 599, + columnNumber: 15 + }, this), + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { + className: "space-y-2", + children: [ + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$label$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["Label"], { + htmlFor: "deathDate", + children: "逝世日期 (Death)" + }, void 0, false, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", + lineNumber: 609, + columnNumber: 17 + }, this), + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$input$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["Input"], { + id: "deathDate", + type: "date", + value: formData.deathDate || "", + onChange: (e)=>handleChange("deathDate", e.target.value) + }, void 0, false, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", + lineNumber: 610, + columnNumber: 17 + }, this) + ] + }, void 0, true, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", + lineNumber: 608, + columnNumber: 15 + }, this) + ] + }, void 0, true, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", + lineNumber: 598, + columnNumber: 13 + }, this), + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { + className: "space-y-2", + children: [ + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$label$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["Label"], { + htmlFor: "ancestralHome", + children: "籍贯 (Ancestral Home)" + }, void 0, false, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", + lineNumber: 619, + columnNumber: 15 + }, this), + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$input$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["Input"], { + id: "ancestralHome", + value: formData.ancestralHome || "", + onChange: (e)=>handleChange("ancestralHome", e.target.value), + placeholder: "e.g. 福建省泉州市" + }, void 0, false, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", + lineNumber: 620, + columnNumber: 15 + }, this) + ] + }, void 0, true, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", + lineNumber: 618, + columnNumber: 13 + }, this), + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { + className: "space-y-2", + children: [ + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$label$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["Label"], { + htmlFor: "burialPlace", + children: "葬地 (Burial Place)" + }, void 0, false, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", + lineNumber: 628, + columnNumber: 15 + }, this), + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$input$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["Input"], { + id: "burialPlace", + value: formData.burialPlace || "", + onChange: (e)=>handleChange("burialPlace", e.target.value) + }, void 0, false, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", + lineNumber: 629, + columnNumber: 15 + }, this) + ] + }, void 0, true, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", + lineNumber: 627, + columnNumber: 13 + }, this) + ] + }, void 0, true, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", + lineNumber: 597, + columnNumber: 11 + }, this) + ] + }, void 0, true, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", + lineNumber: 590, + columnNumber: 9 + }, this), + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$card$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["Card"], { + children: [ + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$card$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["CardHeader"], { + children: [ + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$card$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["CardTitle"], { + className: "flex items-center gap-2 text-lg font-serif", + children: [ + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$lucide$2d$react$40$0$2e$454$2e$0_react$40$19$2e$2$2e$0$2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$user$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__$3c$export__default__as__User$3e$__["User"], { + className: "h-5 w-5" + }, void 0, false, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", + lineNumber: 642, + columnNumber: 15 + }, this), + "联系方式 (Contact Information)" + ] + }, void 0, true, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", + lineNumber: 641, + columnNumber: 13 + }, this), + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$card$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["CardDescription"], { + children: "在世成员的联系方式" + }, void 0, false, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", + lineNumber: 645, + columnNumber: 13 + }, this) + ] + }, void 0, true, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", + lineNumber: 640, + columnNumber: 11 + }, this), + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$card$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["CardContent"], { + className: "grid grid-cols-1 md:grid-cols-2 gap-6", + children: [ + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { + className: "space-y-2", + children: [ + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$label$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["Label"], { + htmlFor: "phone", + children: "手机号 (Mobile Phone)" + }, void 0, false, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", + lineNumber: 649, + columnNumber: 15 + }, this), + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$input$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["Input"], { + id: "phone", + type: "tel", + value: formData.phone || "", + onChange: (e)=>handleChange("phone", e.target.value), + placeholder: "e.g. 13800138000" + }, void 0, false, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", + lineNumber: 650, + columnNumber: 15 + }, this) + ] + }, void 0, true, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", + lineNumber: 648, + columnNumber: 13 + }, this), + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { + className: "space-y-2", + children: [ + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$label$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["Label"], { + htmlFor: "telephone", + children: "固定电话 (Telephone)" + }, void 0, false, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", + lineNumber: 659, + columnNumber: 15 + }, this), + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$input$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["Input"], { + id: "telephone", + type: "tel", + value: formData.telephone || "", + onChange: (e)=>handleChange("telephone", e.target.value), + placeholder: "e.g. 0592-1234567" + }, void 0, false, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", + lineNumber: 660, + columnNumber: 15 + }, this) + ] + }, void 0, true, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", + lineNumber: 658, + columnNumber: 13 + }, this), + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { + className: "space-y-2", + children: [ + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$label$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["Label"], { + htmlFor: "email", + children: "邮箱 (Email)" + }, void 0, false, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", + lineNumber: 669, + columnNumber: 15 + }, this), + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$input$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["Input"], { + id: "email", + type: "email", + value: formData.email || "", + onChange: (e)=>handleChange("email", e.target.value), + placeholder: "e.g. example@email.com" + }, void 0, false, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", + lineNumber: 670, + columnNumber: 15 + }, this) + ] + }, void 0, true, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", + lineNumber: 668, + columnNumber: 13 + }, this), + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { + className: "space-y-2 md:col-span-2", + children: [ + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$label$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["Label"], { + htmlFor: "address", + children: "现居地址 (Address)" + }, void 0, false, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", + lineNumber: 679, + columnNumber: 15 + }, this), + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$input$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["Input"], { + id: "address", + value: formData.address || "", + onChange: (e)=>handleChange("address", e.target.value), + placeholder: "e.g. 福建省厦门市思明区XX路XX号" + }, void 0, false, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", + lineNumber: 680, + columnNumber: 15 + }, this) + ] + }, void 0, true, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", + lineNumber: 678, + columnNumber: 13 + }, this) + ] + }, void 0, true, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", + lineNumber: 647, + columnNumber: 11 + }, this) + ] + }, void 0, true, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", + lineNumber: 639, + columnNumber: 9 + }, this), + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$card$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["Card"], { + children: [ + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$card$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["CardHeader"], { + children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$card$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["CardTitle"], { + className: "flex items-center gap-2 text-lg font-serif", + children: [ + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$lucide$2d$react$40$0$2e$454$2e$0_react$40$19$2e$2$2e$0$2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$scroll$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__$3c$export__default__as__Scroll$3e$__["Scroll"], { + className: "h-5 w-5" + }, void 0, false, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", + lineNumber: 694, + columnNumber: 15 + }, this), + "生平事迹 (Biography)" + ] + }, void 0, true, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", + lineNumber: 693, + columnNumber: 13 + }, this) + }, void 0, false, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", + lineNumber: 692, + columnNumber: 11 + }, this), + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$card$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["CardContent"], { + className: "space-y-4", + children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$textarea$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["Textarea"], { + className: "min-h-[200px]", + placeholder: "记录生平事迹...", + value: formData.bio || "", + onChange: (e)=>handleChange("bio", e.target.value) + }, void 0, false, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", + lineNumber: 699, + columnNumber: 13 + }, this) + }, void 0, false, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", + lineNumber: 698, + columnNumber: 11 + }, this) + ] + }, void 0, true, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", + lineNumber: 691, + columnNumber: 9 + }, this), + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$card$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["Card"], { + children: [ + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$card$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["CardHeader"], { + children: [ + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$card$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["CardTitle"], { + className: "flex items-center gap-2 text-lg font-serif", + children: [ + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$lucide$2d$react$40$0$2e$454$2e$0_react$40$19$2e$2$2e$0$2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$scroll$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__$3c$export__default__as__Scroll$3e$__["Scroll"], { + className: "h-5 w-5" + }, void 0, false, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", + lineNumber: 712, + columnNumber: 15 + }, this), + "标签 (Tags)" + ] + }, void 0, true, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", + lineNumber: 711, + columnNumber: 13 + }, this), + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$card$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["CardDescription"], { + children: "添加标签以便分类和搜索(按回车添加)" + }, void 0, false, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", + lineNumber: 715, + columnNumber: 13 + }, this) + ] + }, void 0, true, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", + lineNumber: 710, + columnNumber: 11 + }, this), + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$card$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["CardContent"], { + className: "space-y-4", + children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { + className: "space-y-3", + children: [ + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { + className: "flex gap-2", + children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$input$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["Input"], { + placeholder: "输入标签,按回车添加...", + onKeyDown: (e)=>{ + if (e.key === 'Enter') { + e.preventDefault(); + const input = e.currentTarget; + const value = input.value.trim(); + if (value && !(formData.tags || []).includes(value)) { + handleChange('tags', [ + ...formData.tags || [], + value + ]); + input.value = ''; + } + } + } + }, void 0, false, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", + lineNumber: 720, + columnNumber: 17 + }, this) + }, void 0, false, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", + lineNumber: 719, + columnNumber: 15 + }, this), + formData.tags && formData.tags.length > 0 && /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { + className: "flex flex-wrap gap-2", + children: formData.tags.map((tag, index)=>/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("span", { + className: "inline-flex items-center gap-1 px-2 py-1 bg-primary/10 text-primary text-sm rounded-md border border-primary/20", + children: [ + tag, + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("button", { + type: "button", + onClick: ()=>{ + const newTags = formData.tags?.filter((_, i)=>i !== index) || []; + handleChange('tags', newTags); + }, + className: "ml-1 hover:text-destructive", + children: "×" + }, void 0, false, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", + lineNumber: 743, + columnNumber: 23 + }, this) + ] + }, index, true, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", + lineNumber: 738, + columnNumber: 21 + }, this)) + }, void 0, false, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", + lineNumber: 736, + columnNumber: 17 + }, this) + ] + }, void 0, true, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", + lineNumber: 718, + columnNumber: 13 + }, this) + }, void 0, false, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", + lineNumber: 717, + columnNumber: 11 + }, this) + ] + }, void 0, true, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", + lineNumber: 709, + columnNumber: 9 + }, this), + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$card$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["Card"], { + children: [ + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$card$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["CardHeader"], { + children: [ + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$card$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["CardTitle"], { + className: "flex items-center gap-2 text-lg font-serif", + children: [ + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$lucide$2d$react$40$0$2e$454$2e$0_react$40$19$2e$2$2e$0$2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$images$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__$3c$export__default__as__Images$3e$__["Images"], { + className: "h-5 w-5" + }, void 0, false, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", + lineNumber: 765, + columnNumber: 15 + }, this), + "照片墙 (Photo Gallery)" + ] + }, void 0, true, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", + lineNumber: 764, + columnNumber: 13 + }, this), + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$card$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["CardDescription"], { + children: "上传多张照片记录珍贵时刻" + }, void 0, false, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", + lineNumber: 768, + columnNumber: 13 + }, this) + ] + }, void 0, true, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", + lineNumber: 763, + columnNumber: 11 + }, this), + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$card$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["CardContent"], { + children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$members$2f$photo$2d$gallery$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["PhotoGallery"], { + photoIds: formData.photoIds || [], + onChange: (photoIds)=>handleChange("photoIds", photoIds) + }, void 0, false, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", + lineNumber: 771, + columnNumber: 13 + }, this) + }, void 0, false, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", + lineNumber: 770, + columnNumber: 11 + }, this) + ] + }, void 0, true, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", + lineNumber: 762, + columnNumber: 9 + }, this), + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$card$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["Card"], { + children: [ + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$card$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["CardHeader"], { + children: [ + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$card$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["CardTitle"], { + className: "flex items-center gap-2 text-lg font-serif", + children: [ + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$lucide$2d$react$40$0$2e$454$2e$0_react$40$19$2e$2$2e$0$2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$book$2d$open$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__$3c$export__default__as__BookOpen$3e$__["BookOpen"], { + className: "h-5 w-5" + }, void 0, false, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", + lineNumber: 782, + columnNumber: 15 + }, this), + "家族故事 (Family Stories)" + ] + }, void 0, true, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", + lineNumber: 781, + columnNumber: 13 + }, this), + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$card$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["CardDescription"], { + children: "记录与此成员相关的家族故事" + }, void 0, false, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", + lineNumber: 785, + columnNumber: 13 + }, this) + ] + }, void 0, true, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", + lineNumber: 780, + columnNumber: 11 + }, this), + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$card$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["CardContent"], { + children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$members$2f$story$2d$manager$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["StoryManager"], { + stories: formData.stories || [], + onChange: (stories)=>handleChange("stories", stories) + }, void 0, false, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", + lineNumber: 788, + columnNumber: 13 + }, this) + }, void 0, false, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", + lineNumber: 787, + columnNumber: 11 + }, this) + ] + }, void 0, true, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", + lineNumber: 779, + columnNumber: 9 + }, this) + ] + }, void 0, true, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", + lineNumber: 254, + columnNumber: 7 + }, this), + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { + className: "flex justify-end gap-4 sticky bottom-4 bg-background/90 p-4 border-t border-border backdrop-blur rounded-lg", + children: [ + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$button$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["Button"], { + type: "button", + variant: "outline", + onClick: onCancel, + children: "取消 (Cancel)" + }, void 0, false, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", + lineNumber: 798, + columnNumber: 9 + }, this), + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$button$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["Button"], { + type: "submit", + className: "bg-primary text-primary-foreground hover:bg-primary/90", + children: "保存 (Save Member)" + }, void 0, false, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", + lineNumber: 801, + columnNumber: 9 + }, this) + ] + }, void 0, true, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", + lineNumber: 797, + columnNumber: 7 + }, this) + ] + }, void 0, true, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx", + lineNumber: 242, + columnNumber: 5 + }, this); +} +}), +"[project]/Documents/go-new/chinese-family-tree/app/members/new/page.tsx [app-ssr] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "default", + ()=>NewMemberPage +]); +var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/server/route-modules/app-page/vendored/ssr/react-jsx-dev-runtime.js [app-ssr] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$navigation$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/navigation.js [app-ssr] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$context$2f$family$2d$context$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/context/family-context.tsx [app-ssr] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$site$2d$header$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/components/site-header.tsx [app-ssr] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$members$2f$member$2d$form$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/components/members/member-form.tsx [app-ssr] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$button$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/components/ui/button.tsx [app-ssr] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$lucide$2d$react$40$0$2e$454$2e$0_react$40$19$2e$2$2e$0$2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$arrow$2d$left$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__$3c$export__default__as__ArrowLeft$3e$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/lucide-react@0.454.0_react@19.2.0/node_modules/lucide-react/dist/esm/icons/arrow-left.js [app-ssr] (ecmascript) "); +"use client"; +; +; +; +; +; +; +; +function NewMemberPage() { + const { addMember, treeData } = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$context$2f$family$2d$context$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["useFamily"])(); + const router = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$navigation$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["useRouter"])(); + const existingMembers = Object.values(treeData.members); + const handleSave = async (newMember)=>{ + try { + await addMember({ + ...newMember, + createdAt: new Date().toISOString(), + updatedAt: new Date().toISOString() + }); + // 跳转到成员列表页 + router.push('/members'); + } catch (error) { + console.error('添加成员失败:', error); + alert('添加成员失败: ' + error.message); + } + }; + return /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { + className: "min-h-screen flex flex-col bg-background", + children: [ + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$site$2d$header$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["SiteHeader"], {}, void 0, false, { + fileName: "[project]/Documents/go-new/chinese-family-tree/app/members/new/page.tsx", + lineNumber: 34, + columnNumber: 7 + }, this), + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { + className: "container mx-auto py-8", + children: [ + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { + className: "mb-6 flex items-center gap-2", + children: [ + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$button$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["Button"], { + variant: "ghost", + onClick: ()=>router.back(), + children: [ + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$lucide$2d$react$40$0$2e$454$2e$0_react$40$19$2e$2$2e$0$2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$arrow$2d$left$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__$3c$export__default__as__ArrowLeft$3e$__["ArrowLeft"], { + className: "mr-2 h-4 w-4" + }, void 0, false, { + fileName: "[project]/Documents/go-new/chinese-family-tree/app/members/new/page.tsx", + lineNumber: 38, + columnNumber: 13 + }, this), + " 返回" + ] + }, void 0, true, { + fileName: "[project]/Documents/go-new/chinese-family-tree/app/members/new/page.tsx", + lineNumber: 37, + columnNumber: 11 + }, this), + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("h1", { + className: "text-2xl font-bold font-serif", + children: "新增家族成员" + }, void 0, false, { + fileName: "[project]/Documents/go-new/chinese-family-tree/app/members/new/page.tsx", + lineNumber: 40, + columnNumber: 11 + }, this) + ] + }, void 0, true, { + fileName: "[project]/Documents/go-new/chinese-family-tree/app/members/new/page.tsx", + lineNumber: 36, + columnNumber: 9 + }, this), + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$members$2f$member$2d$form$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["MemberForm"], { + existingMembers: existingMembers, + onSubmit: handleSave, + onCancel: ()=>router.back() + }, void 0, false, { + fileName: "[project]/Documents/go-new/chinese-family-tree/app/members/new/page.tsx", + lineNumber: 42, + columnNumber: 9 + }, this) + ] + }, void 0, true, { + fileName: "[project]/Documents/go-new/chinese-family-tree/app/members/new/page.tsx", + lineNumber: 35, + columnNumber: 7 + }, this) + ] + }, void 0, true, { + fileName: "[project]/Documents/go-new/chinese-family-tree/app/members/new/page.tsx", + lineNumber: 33, + columnNumber: 5 + }, this); +} +}), +]; + +//# sourceMappingURL=%5Broot-of-the-server%5D__3f095049._.js.map \ No newline at end of file diff --git a/.next/dev/server/chunks/ssr/[root-of-the-server]__3f095049._.js.map b/.next/dev/server/chunks/ssr/[root-of-the-server]__3f095049._.js.map new file mode 100644 index 00000000..a3e493d5 --- /dev/null +++ b/.next/dev/server/chunks/ssr/[root-of-the-server]__3f095049._.js.map @@ -0,0 +1,17 @@ +{ + "version": 3, + "sources": [], + "sections": [ + {"offset": {"line": 4, "column": 0}, "map": {"version":3,"sources":["file:///Users/freedak/Documents/go-new/chinese-family-tree/components/ui/avatar.tsx"],"sourcesContent":["'use client'\n\nimport * as React from 'react'\nimport * as AvatarPrimitive from '@radix-ui/react-avatar'\n\nimport { cn } from '@/lib/utils'\n\nfunction Avatar({\n className,\n ...props\n}: React.ComponentProps) {\n return (\n \n )\n}\n\nfunction AvatarImage({\n className,\n ...props\n}: React.ComponentProps) {\n return (\n \n )\n}\n\nfunction AvatarFallback({\n className,\n ...props\n}: React.ComponentProps) {\n return (\n \n )\n}\n\nexport { Avatar, AvatarImage, AvatarFallback }\n"],"names":[],"mappings":";;;;;;;;;AAGA;AAEA;AALA;;;;AAOA,SAAS,OAAO,EACd,SAAS,EACT,GAAG,OAC+C;IAClD,qBACE,oaAAC,qbAAoB;QACnB,aAAU;QACV,WAAW,IAAA,yKAAE,EACX,8DACA;QAED,GAAG,KAAK;;;;;;AAGf;AAEA,SAAS,YAAY,EACnB,SAAS,EACT,GAAG,OACgD;IACnD,qBACE,oaAAC,sbAAqB;QACpB,aAAU;QACV,WAAW,IAAA,yKAAE,EAAC,2BAA2B;QACxC,GAAG,KAAK;;;;;;AAGf;AAEA,SAAS,eAAe,EACtB,SAAS,EACT,GAAG,OACmD;IACtD,qBACE,oaAAC,ybAAwB;QACvB,aAAU;QACV,WAAW,IAAA,yKAAE,EACX,oEACA;QAED,GAAG,KAAK;;;;;;AAGf"}}, + {"offset": {"line": 57, "column": 0}, "map": {"version":3,"sources":["file:///Users/freedak/Documents/go-new/chinese-family-tree/components/ui/dropdown-menu.tsx"],"sourcesContent":["'use client'\n\nimport * as React from 'react'\nimport * as DropdownMenuPrimitive from '@radix-ui/react-dropdown-menu'\nimport { CheckIcon, ChevronRightIcon, CircleIcon } from 'lucide-react'\n\nimport { cn } from '@/lib/utils'\n\nfunction DropdownMenu({\n ...props\n}: React.ComponentProps) {\n return \n}\n\nfunction DropdownMenuPortal({\n ...props\n}: React.ComponentProps) {\n return (\n \n )\n}\n\nfunction DropdownMenuTrigger({\n ...props\n}: React.ComponentProps) {\n return (\n \n )\n}\n\nfunction DropdownMenuContent({\n className,\n sideOffset = 4,\n ...props\n}: React.ComponentProps) {\n return (\n \n \n \n )\n}\n\nfunction DropdownMenuGroup({\n ...props\n}: React.ComponentProps) {\n return (\n \n )\n}\n\nfunction DropdownMenuItem({\n className,\n inset,\n variant = 'default',\n ...props\n}: React.ComponentProps & {\n inset?: boolean\n variant?: 'default' | 'destructive'\n}) {\n return (\n \n )\n}\n\nfunction DropdownMenuCheckboxItem({\n className,\n children,\n checked,\n ...props\n}: React.ComponentProps) {\n return (\n \n \n \n \n \n \n {children}\n \n )\n}\n\nfunction DropdownMenuRadioGroup({\n ...props\n}: React.ComponentProps) {\n return (\n \n )\n}\n\nfunction DropdownMenuRadioItem({\n className,\n children,\n ...props\n}: React.ComponentProps) {\n return (\n \n \n \n \n \n \n {children}\n \n )\n}\n\nfunction DropdownMenuLabel({\n className,\n inset,\n ...props\n}: React.ComponentProps & {\n inset?: boolean\n}) {\n return (\n \n )\n}\n\nfunction DropdownMenuSeparator({\n className,\n ...props\n}: React.ComponentProps) {\n return (\n \n )\n}\n\nfunction DropdownMenuShortcut({\n className,\n ...props\n}: React.ComponentProps<'span'>) {\n return (\n \n )\n}\n\nfunction DropdownMenuSub({\n ...props\n}: React.ComponentProps) {\n return \n}\n\nfunction DropdownMenuSubTrigger({\n className,\n inset,\n children,\n ...props\n}: React.ComponentProps & {\n inset?: boolean\n}) {\n return (\n \n {children}\n \n \n )\n}\n\nfunction DropdownMenuSubContent({\n className,\n ...props\n}: React.ComponentProps) {\n return (\n \n )\n}\n\nexport {\n DropdownMenu,\n DropdownMenuPortal,\n DropdownMenuTrigger,\n DropdownMenuContent,\n DropdownMenuGroup,\n DropdownMenuLabel,\n DropdownMenuItem,\n DropdownMenuCheckboxItem,\n DropdownMenuRadioGroup,\n DropdownMenuRadioItem,\n DropdownMenuSeparator,\n DropdownMenuShortcut,\n DropdownMenuSub,\n DropdownMenuSubTrigger,\n DropdownMenuSubContent,\n}\n"],"names":[],"mappings":"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"}}, + {"offset": {"line": 332, "column": 0}, "map": {"version":3,"sources":["file:///Users/freedak/Documents/go-new/chinese-family-tree/components/site-header.tsx"],"sourcesContent":["\"use client\"\n\nimport Link from \"next/link\"\nimport { BookOpen, Search, Bell, Settings, LogOut, User, ChevronDown, Plus, Trash2, Network, LayoutGrid, Calculator } from \"lucide-react\"\nimport { Button } from \"@/components/ui/button\"\nimport { Input } from \"@/components/ui/input\"\nimport { Avatar, AvatarFallback, AvatarImage } from \"@/components/ui/avatar\"\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuLabel,\n DropdownMenuSeparator,\n DropdownMenuTrigger,\n} from \"@/components/ui/dropdown-menu\"\nimport { useFamily } from \"@/context/family-context\"\nimport { useState, useRef, useEffect, useCallback } from \"react\"\nimport { useRouter, usePathname, useSearchParams } from \"next/navigation\"\nimport { useSession, signOut } from \"next-auth/react\"\nimport { useDialog } from \"@/components/ui/alert-dialog-custom\"\n\ninterface FamilyTree {\n id: string\n name: string\n description: string | null\n ownerId: string\n currentUserRole?: \"OWNER\" | \"EDITOR\" | \"VIEWER\"\n}\n\nexport function SiteHeader() {\n const { searchMembers, searchResults } = useFamily()\n const { data: session, status } = useSession()\n const { showAlert, showConfirm, showPrompt } = useDialog()\n const pathname = usePathname()\n const searchParams = useSearchParams()\n const [searchQuery, setSearchQuery] = useState(\"\")\n const [showResults, setShowResults] = useState(false)\n const [familyTrees, setFamilyTrees] = useState([])\n const [currentTree, setCurrentTree] = useState(null)\n const [deletingTreeId, setDeletingTreeId] = useState(null)\n const searchRef = useRef(null)\n const router = useRouter()\n \n // 获取当前视图模式\n const currentViewMode = searchParams.get('view') || 'traditional'\n const isTreePage = pathname === '/tree'\n\n // 生成带有 treeId 的 URL\n const getUrlWithTreeId = (path: string) => {\n if (currentTree?.id) {\n return `${path}?treeId=${currentTree.id}`\n }\n return path\n }\n\n // 切换视图模式\n const handleViewModeChange = (mode: string) => {\n const params = new URLSearchParams(searchParams.toString())\n params.set('view', mode)\n if (currentTree?.id) {\n params.set('treeId', currentTree.id)\n }\n router.push(`${pathname}?${params.toString()}`)\n }\n\n const getRoleBadge = (role?: string) => {\n switch (role) {\n case \"OWNER\":\n return 所有者\n case \"EDITOR\":\n return 编辑\n case \"VIEWER\":\n return 查看\n default:\n return null\n }\n }\n\n const handleSignOut = async () => {\n await signOut({ callbackUrl: \"/auth/signin\" })\n }\n\n // 获取用户名首字母作为头像\n const getUserInitial = () => {\n if (session?.user?.name) {\n return session.user.name.charAt(0).toUpperCase()\n }\n if (session?.user?.email) {\n return session.user.email.charAt(0).toUpperCase()\n }\n return \"U\"\n }\n\n // 删除家族树\n const handleDeleteTree = async (tree: FamilyTree, e: React.MouseEvent) => {\n e.stopPropagation() // 阻止触发选择事件\n\n // 检查权限\n if (tree.ownerId !== session?.user?.id) {\n await showAlert('只有家族树的创建者才能删除', '权限不足')\n return\n }\n\n const confirmText = `确定要删除家族树\"${tree.name}\"吗?\\n\\n此操作将永久删除所有成员、活动日志和协作者数据,且不可撤销!`\n const confirmed = await showConfirm(confirmText, '删除家族树', 'destructive')\n if (!confirmed) {\n return\n }\n\n // 二次确认\n const finalConfirm = await showPrompt(\n `请输入家族树名称\"${tree.name}\"以确认删除:`,\n '',\n '确认删除'\n )\n if (finalConfirm !== tree.name) {\n await showAlert('名称不匹配,删除已取消', '操作已取消')\n return\n }\n\n setDeletingTreeId(tree.id)\n try {\n const response = await fetch(`/api/trees/${tree.id}`, {\n method: 'DELETE',\n })\n\n if (!response.ok) {\n const error = await response.json()\n throw new Error(error.error || '删除失败')\n }\n\n // 刷新家族树列表\n await loadFamilyTrees()\n \n // 如果删除的是当前树,跳转到首页\n if (currentTree?.id === tree.id) {\n window.location.href = '/'\n }\n } catch (error) {\n console.error('删除家族树失败:', error)\n await showAlert('删除失败:' + (error as Error).message, '错误')\n } finally {\n setDeletingTreeId(null)\n }\n }\n\n // 获取家族树列表\n const loadFamilyTrees = useCallback(() => {\n if (!session?.user?.id || status !== 'authenticated') return\n\n const controller = new AbortController()\n \n fetch('/api/trees', { signal: controller.signal })\n .then(res => {\n if (!res.ok) throw new Error(`HTTP error! status: ${res.status}`)\n return res.json()\n })\n .then(data => {\n if (data.trees) {\n setFamilyTrees(data.trees)\n // 如果 URL 中有 treeId,使用该树,否则使用第一个\n const urlParams = new URLSearchParams(window.location.search)\n const treeId = urlParams.get('treeId')\n if (treeId) {\n const tree = data.trees.find((t: FamilyTree) => t.id === treeId)\n if (tree) {\n setCurrentTree(tree)\n } else if (data.trees.length > 0) {\n setCurrentTree(data.trees[0])\n }\n } else if (data.trees.length > 0) {\n setCurrentTree(data.trees[0])\n }\n }\n })\n .catch(err => {\n // 忽略 abort 错误和 fetch 错误(可能是页面切换导致的)\n if (err.name !== 'AbortError' && err.message !== 'Failed to fetch') {\n console.error('获取家族树列表失败:', err)\n }\n })\n \n return () => controller.abort()\n }, [session?.user?.id, status])\n\n useEffect(() => {\n loadFamilyTrees()\n }, [loadFamilyTrees])\n\n // 监听路由变化,刷新家族树列表\n useEffect(() => {\n const handleRouteChange = () => {\n loadFamilyTrees()\n }\n \n window.addEventListener('focus', handleRouteChange)\n return () => window.removeEventListener('focus', handleRouteChange)\n }, [loadFamilyTrees])\n\n // 点击外部关闭搜索结果\n useEffect(() => {\n function handleClickOutside(event: MouseEvent) {\n if (searchRef.current && !searchRef.current.contains(event.target as Node)) {\n setShowResults(false)\n }\n }\n document.addEventListener(\"mousedown\", handleClickOutside)\n return () => document.removeEventListener(\"mousedown\", handleClickOutside)\n }, [])\n\n const handleSearch = (query: string) => {\n setSearchQuery(query)\n searchMembers(query)\n setShowResults(query.length > 0)\n }\n\n const handleSelectMember = (memberId: string) => {\n router.push(`/members/${memberId}`)\n setSearchQuery(\"\")\n setShowResults(false)\n }\n\n return (\n
\n
\n
\n \n
\n \n
\n 华夏谱\n \n \n {/* 家族树选择器 */}\n {session && familyTrees.length > 0 && (\n \n \n \n \n \n 我的家族树\n \n {familyTrees.map((tree) => (\n {\n setCurrentTree(tree)\n // 保持当前路径,只更新 treeId 参数\n const currentPath = window.location.pathname\n router.push(`${currentPath}?treeId=${tree.id}`)\n }}\n className=\"cursor-pointer flex items-center justify-between group\"\n >\n
\n {tree.name}\n {getRoleBadge(tree.currentUserRole)}\n
\n
\n {currentTree?.id === tree.id && (\n \n )}\n {tree.ownerId === session?.user?.id && (\n handleDeleteTree(tree, e)}\n disabled={deletingTreeId === tree.id}\n >\n \n \n )}\n
\n \n ))}\n \n router.push('/trees/new')}\n className=\"cursor-pointer text-primary\"\n >\n \n 创建新家族树\n \n
\n
\n )}\n
\n\n \n\n
\n \n\n \n\n \n \n \n\n \n \n \n\n {status === \"loading\" ? (\n \n ...\n \n ) : session ? (\n \n \n \n \n \n \n
\n

{session.user?.name || \"用户\"}

\n

\n {session.user?.email}\n

\n
\n
\n \n \n \n \n 系统设置\n \n \n \n \n \n 退出登录\n \n
\n
\n ) : (\n \n \n \n )}\n
\n
\n
\n )\n}\n"],"names":[],"mappings":";;;;;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAQA;AACA;AACA;AACA;AACA;AAnBA;;;;;;;;;;;;;AA6BO,SAAS;IACd,MAAM,EAAE,aAAa,EAAE,aAAa,EAAE,GAAG,IAAA,iMAAS;IAClD,MAAM,EAAE,MAAM,OAAO,EAAE,MAAM,EAAE,GAAG,IAAA,qaAAU;IAC5C,MAAM,EAAE,SAAS,EAAE,WAAW,EAAE,UAAU,EAAE,GAAG,IAAA,kNAAS;IACxD,MAAM,WAAW,IAAA,uUAAW;IAC5B,MAAM,eAAe,IAAA,2UAAe;IACpC,MAAM,CAAC,aAAa,eAAe,GAAG,IAAA,uYAAQ,EAAC;IAC/C,MAAM,CAAC,aAAa,eAAe,GAAG,IAAA,uYAAQ,EAAC;IAC/C,MAAM,CAAC,aAAa,eAAe,GAAG,IAAA,uYAAQ,EAAe,EAAE;IAC/D,MAAM,CAAC,aAAa,eAAe,GAAG,IAAA,uYAAQ,EAAoB;IAClE,MAAM,CAAC,gBAAgB,kBAAkB,GAAG,IAAA,uYAAQ,EAAgB;IACpE,MAAM,YAAY,IAAA,qYAAM,EAAiB;IACzC,MAAM,SAAS,IAAA,qUAAS;IAExB,WAAW;IACX,MAAM,kBAAkB,aAAa,GAAG,CAAC,WAAW;IACpD,MAAM,aAAa,aAAa;IAEhC,oBAAoB;IACpB,MAAM,mBAAmB,CAAC;QACxB,IAAI,aAAa,IAAI;YACnB,OAAO,GAAG,KAAK,QAAQ,EAAE,YAAY,EAAE,EAAE;QAC3C;QACA,OAAO;IACT;IAEA,SAAS;IACT,MAAM,uBAAuB,CAAC;QAC5B,MAAM,SAAS,IAAI,gBAAgB,aAAa,QAAQ;QACxD,OAAO,GAAG,CAAC,QAAQ;QACnB,IAAI,aAAa,IAAI;YACnB,OAAO,GAAG,CAAC,UAAU,YAAY,EAAE;QACrC;QACA,OAAO,IAAI,CAAC,GAAG,SAAS,CAAC,EAAE,OAAO,QAAQ,IAAI;IAChD;IAEA,MAAM,eAAe,CAAC;QACpB,OAAQ;YACN,KAAK;gBACH,qBAAO,oaAAC;oBAAK,WAAU;8BAAgG;;;;;;YACzH,KAAK;gBACH,qBAAO,oaAAC;oBAAK,WAAU;8BAA0F;;;;;;YACnH,KAAK;gBACH,qBAAO,oaAAC;oBAAK,WAAU;8BAA0F;;;;;;YACnH;gBACE,OAAO;QACX;IACF;IAEA,MAAM,gBAAgB;QACpB,MAAM,IAAA,kaAAO,EAAC;YAAE,aAAa;QAAe;IAC9C;IAEA,eAAe;IACf,MAAM,iBAAiB;QACrB,IAAI,SAAS,MAAM,MAAM;YACvB,OAAO,QAAQ,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,WAAW;QAChD;QACA,IAAI,SAAS,MAAM,OAAO;YACxB,OAAO,QAAQ,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,WAAW;QACjD;QACA,OAAO;IACT;IAEA,QAAQ;IACR,MAAM,mBAAmB,OAAO,MAAkB;QAChD,EAAE,eAAe,IAAG,WAAW;QAE/B,OAAO;QACP,IAAI,KAAK,OAAO,KAAK,SAAS,MAAM,IAAI;YACtC,MAAM,UAAU,iBAAiB;YACjC;QACF;QAEA,MAAM,cAAc,CAAC,SAAS,EAAE,KAAK,IAAI,CAAC,qCAAqC,CAAC;QAChF,MAAM,YAAY,MAAM,YAAY,aAAa,SAAS;QAC1D,IAAI,CAAC,WAAW;YACd;QACF;QAEA,OAAO;QACP,MAAM,eAAe,MAAM,WACzB,CAAC,SAAS,EAAE,KAAK,IAAI,CAAC,OAAO,CAAC,EAC9B,IACA;QAEF,IAAI,iBAAiB,KAAK,IAAI,EAAE;YAC9B,MAAM,UAAU,eAAe;YAC/B;QACF;QAEA,kBAAkB,KAAK,EAAE;QACzB,IAAI;YACF,MAAM,WAAW,MAAM,MAAM,CAAC,WAAW,EAAE,KAAK,EAAE,EAAE,EAAE;gBACpD,QAAQ;YACV;YAEA,IAAI,CAAC,SAAS,EAAE,EAAE;gBAChB,MAAM,QAAQ,MAAM,SAAS,IAAI;gBACjC,MAAM,IAAI,MAAM,MAAM,KAAK,IAAI;YACjC;YAEA,UAAU;YACV,MAAM;YAEN,kBAAkB;YAClB,IAAI,aAAa,OAAO,KAAK,EAAE,EAAE;gBAC/B,OAAO,QAAQ,CAAC,IAAI,GAAG;YACzB;QACF,EAAE,OAAO,OAAO;YACd,QAAQ,KAAK,CAAC,YAAY;YAC1B,MAAM,UAAU,UAAU,AAAC,MAAgB,OAAO,EAAE;QACtD,SAAU;YACR,kBAAkB;QACpB;IACF;IAEA,UAAU;IACV,MAAM,kBAAkB,IAAA,0YAAW,EAAC;QAClC,IAAI,CAAC,SAAS,MAAM,MAAM,WAAW,iBAAiB;QAEtD,MAAM,aAAa,IAAI;QAEvB,MAAM,cAAc;YAAE,QAAQ,WAAW,MAAM;QAAC,GAC7C,IAAI,CAAC,CAAA;YACJ,IAAI,CAAC,IAAI,EAAE,EAAE,MAAM,IAAI,MAAM,CAAC,oBAAoB,EAAE,IAAI,MAAM,EAAE;YAChE,OAAO,IAAI,IAAI;QACjB,GACC,IAAI,CAAC,CAAA;YACJ,IAAI,KAAK,KAAK,EAAE;gBACd,eAAe,KAAK,KAAK;gBACzB,gCAAgC;gBAChC,MAAM,YAAY,IAAI,gBAAgB,OAAO,QAAQ,CAAC,MAAM;gBAC5D,MAAM,SAAS,UAAU,GAAG,CAAC;gBAC7B,IAAI,QAAQ;oBACV,MAAM,OAAO,KAAK,KAAK,CAAC,IAAI,CAAC,CAAC,IAAkB,EAAE,EAAE,KAAK;oBACzD,IAAI,MAAM;wBACR,eAAe;oBACjB,OAAO,IAAI,KAAK,KAAK,CAAC,MAAM,GAAG,GAAG;wBAChC,eAAe,KAAK,KAAK,CAAC,EAAE;oBAC9B;gBACF,OAAO,IAAI,KAAK,KAAK,CAAC,MAAM,GAAG,GAAG;oBAChC,eAAe,KAAK,KAAK,CAAC,EAAE;gBAC9B;YACF;QACF,GACC,KAAK,CAAC,CAAA;YACL,oCAAoC;YACpC,IAAI,IAAI,IAAI,KAAK,gBAAgB,IAAI,OAAO,KAAK,mBAAmB;gBAClE,QAAQ,KAAK,CAAC,cAAc;YAC9B;QACF;QAEF,OAAO,IAAM,WAAW,KAAK;IAC/B,GAAG;QAAC,SAAS,MAAM;QAAI;KAAO;IAE9B,IAAA,wYAAS,EAAC;QACR;IACF,GAAG;QAAC;KAAgB;IAEpB,iBAAiB;IACjB,IAAA,wYAAS,EAAC;QACR,MAAM,oBAAoB;YACxB;QACF;QAEA,OAAO,gBAAgB,CAAC,SAAS;QACjC,OAAO,IAAM,OAAO,mBAAmB,CAAC,SAAS;IACnD,GAAG;QAAC;KAAgB;IAEpB,aAAa;IACb,IAAA,wYAAS,EAAC;QACR,SAAS,mBAAmB,KAAiB;YAC3C,IAAI,UAAU,OAAO,IAAI,CAAC,UAAU,OAAO,CAAC,QAAQ,CAAC,MAAM,MAAM,GAAW;gBAC1E,eAAe;YACjB;QACF;QACA,SAAS,gBAAgB,CAAC,aAAa;QACvC,OAAO,IAAM,SAAS,mBAAmB,CAAC,aAAa;IACzD,GAAG,EAAE;IAEL,MAAM,eAAe,CAAC;QACpB,eAAe;QACf,cAAc;QACd,eAAe,MAAM,MAAM,GAAG;IAChC;IAEA,MAAM,qBAAqB,CAAC;QAC1B,OAAO,IAAI,CAAC,CAAC,SAAS,EAAE,UAAU;QAClC,eAAe;QACf,eAAe;IACjB;IAEA,qBACE,oaAAC;QAAO,WAAU;kBAChB,cAAA,oaAAC;YAAI,WAAU;;8BACb,oaAAC;oBAAI,WAAU;;sCACb,oaAAC,6VAAI;4BAAC,MAAK;4BAAI,WAAU;;8CACvB,oaAAC;oCAAI,WAAU;8CACb,cAAA,oaAAC,qWAAQ;wCAAC,WAAU;;;;;;;;;;;8CAEtB,oaAAC;oCAAK,WAAU;8CAA8C;;;;;;;;;;;;wBAI/D,WAAW,YAAY,MAAM,GAAG,mBAC/B,oaAAC,4MAAY;;8CACX,oaAAC,mNAAmB;oCAAC,OAAO;8CAC1B,cAAA,oaAAC,4LAAM;wCAAC,SAAQ;wCAAU,WAAU;;0DAClC,oaAAC;gDAAK,WAAU;0DAA6B,aAAa,QAAQ;;;;;;0DAClE,oaAAC,8WAAW;gDAAC,WAAU;;;;;;;;;;;;;;;;;8CAG3B,oaAAC,mNAAmB;oCAAC,OAAM;oCAAQ,WAAU;;sDAC3C,oaAAC,iNAAiB;sDAAC;;;;;;sDACnB,oaAAC,qNAAqB;;;;;wCACrB,YAAY,GAAG,CAAC,CAAC,qBAChB,oaAAC,gNAAgB;gDAEf,SAAS;oDACP,eAAe;oDACf,uBAAuB;oDACvB,MAAM,cAAc,OAAO,QAAQ,CAAC,QAAQ;oDAC5C,OAAO,IAAI,CAAC,GAAG,YAAY,QAAQ,EAAE,KAAK,EAAE,EAAE;gDAChD;gDACA,WAAU;;kEAEV,oaAAC;wDAAI,WAAU;;0EACb,oaAAC;gEAAK,WAAU;0EAAY,KAAK,IAAI;;;;;;4DACpC,aAAa,KAAK,eAAe;;;;;;;kEAEpC,oaAAC;wDAAI,WAAU;;4DACZ,aAAa,OAAO,KAAK,EAAE,kBAC1B,oaAAC;gEAAK,WAAU;0EAAe;;;;;;4DAEhC,KAAK,OAAO,KAAK,SAAS,MAAM,oBAC/B,oaAAC,4LAAM;gEACL,SAAQ;gEACR,MAAK;gEACL,WAAU;gEACV,SAAS,CAAC,IAAM,iBAAiB,MAAM;gEACvC,UAAU,mBAAmB,KAAK,EAAE;0EAEpC,cAAA,oaAAC,+VAAM;oEAAC,WAAU;;;;;;;;;;;;;;;;;;+CAzBnB,KAAK,EAAE;;;;;sDA+BhB,oaAAC,qNAAqB;;;;;sDACtB,oaAAC,gNAAgB;4CACf,SAAS,IAAM,OAAO,IAAI,CAAC;4CAC3B,WAAU;;8DAEV,oaAAC,qVAAI;oDAAC,WAAU;;;;;;gDAAiB;;;;;;;;;;;;;;;;;;;;;;;;;8BAQ3C,oaAAC;oBAAI,WAAU;;sCACb,oaAAC,6VAAI;4BACH,MAAM,iBAAiB;4BACvB,WAAU;sCACX;;;;;;sCAGD,oaAAC,6VAAI;4BAAC,MAAM,iBAAiB;4BAAU,WAAU;sCAA0C;;;;;;sCAG3F,oaAAC,6VAAI;4BAAC,MAAM,iBAAiB;4BAAa,WAAU;sCAA0C;;;;;;sCAG9F,oaAAC,6VAAI;4BAAC,MAAM,iBAAiB;4BAAc,WAAU;sCAA0C;;;;;;;;;;;;8BAKjG,oaAAC;oBAAI,WAAU;;sCACb,oaAAC;4BAAI,WAAU;4BAA2B,KAAK;;8CAC7C,oaAAC,2VAAM;oCAAC,WAAU;;;;;;8CAClB,oaAAC,0LAAK;oCACJ,MAAK;oCACL,aAAY;oCACZ,OAAO;oCACP,UAAU,CAAC,IAAM,aAAa,EAAE,MAAM,CAAC,KAAK;oCAC5C,WAAU;;;;;;gCAIX,eAAe,cAAc,MAAM,GAAG,mBACrC,oaAAC;oCAAI,WAAU;8CACZ,cAAc,GAAG,CAAC,CAAC,uBAClB,oaAAC;4CAEC,SAAS,IAAM,mBAAmB,OAAO,EAAE;4CAC3C,WAAU;sDAEV,cAAA,oaAAC;gDAAI,WAAU;0DACb,cAAA,oaAAC;oDAAI,WAAU;;sEACb,oaAAC;4DAAI,WAAU;;8EACb,oaAAC;oEAAK,WAAU;8EAAe,OAAO,QAAQ;;;;;;8EAC9C,oaAAC;oEAAK,WAAW,CAAC,8BAA8B,EAAE,OAAO,MAAM,KAAK,SAAS,8BAA8B,6BAA6B;8EACrI,OAAO,MAAM,KAAK,SAAS,MAAM;;;;;;8EAEpC,oaAAC;oEAAK,WAAU;;wEAAgC;wEAAE,OAAO,UAAU;wEAAC;;;;;;;;;;;;;sEAEtE,oaAAC;4DAAE,WAAU;;gEACV,OAAO,SAAS,IAAI,CAAC,GAAG,EAAE,OAAO,SAAS,EAAE;gEAC5C,OAAO,UAAU,IAAI,CAAC,GAAG,EAAE,OAAO,UAAU,EAAE;;;;;;;;;;;;;;;;;;2CAfhD,OAAO,EAAE;;;;;;;;;;gCAyBrB,eAAe,eAAe,cAAc,MAAM,KAAK,mBACtD,oaAAC;oCAAI,WAAU;8CAA2I;;;;;;;;;;;;sCAM9J,oaAAC,4LAAM;4BAAC,SAAQ;4BAAQ,MAAK;4BAAO,WAAU;;8CAC5C,oaAAC,qVAAI;oCAAC,WAAU;;;;;;8CAChB,oaAAC;oCAAK,WAAU;8CAAU;;;;;;;;;;;;sCAG5B,oaAAC,6VAAI;4BAAC,MAAK;sCACT,cAAA,oaAAC,4LAAM;gCAAC,SAAQ;gCAAQ,MAAK;gCAAO,WAAU;;kDAC5C,oaAAC,uWAAU;wCAAC,WAAU;;;;;;kDACtB,oaAAC;wCAAK,WAAU;kDAAU;;;;;;;;;;;;;;;;;sCAI9B,oaAAC,6VAAI;4BAAC,MAAK;sCACT,cAAA,oaAAC,4LAAM;gCAAC,SAAQ;gCAAQ,MAAK;gCAAO,WAAU;;kDAC5C,oaAAC,iWAAQ;wCAAC,WAAU;;;;;;kDACpB,oaAAC;wCAAK,WAAU;kDAAU;;;;;;;;;;;;;;;;;wBAI7B,WAAW,0BACV,oaAAC,4LAAM;4BAAC,WAAU;sCAChB,cAAA,oaAAC,oMAAc;0CAAC;;;;;;;;;;mCAEhB,wBACF,oaAAC,4MAAY;;8CACX,oaAAC,mNAAmB;oCAAC,OAAO;8CAC1B,cAAA,oaAAC,4LAAM;wCAAC,SAAQ;wCAAQ,WAAU;kDAChC,cAAA,oaAAC,4LAAM;4CAAC,WAAU;;8DAChB,oaAAC,iMAAW;oDAAC,KAAK;oDAAW,KAAK,QAAQ,IAAI,EAAE,QAAQ;;;;;;8DACxD,oaAAC,oMAAc;8DAAE;;;;;;;;;;;;;;;;;;;;;;8CAIvB,oaAAC,mNAAmB;oCAAC,WAAU;oCAAO,OAAM;oCAAM,UAAU;;sDAC1D,oaAAC,iNAAiB;4CAAC,WAAU;sDAC3B,cAAA,oaAAC;gDAAI,WAAU;;kEACb,oaAAC;wDAAE,WAAU;kEAAoC,QAAQ,IAAI,EAAE,QAAQ;;;;;;kEACvE,oaAAC;wDAAE,WAAU;kEACV,QAAQ,IAAI,EAAE;;;;;;;;;;;;;;;;;sDAIrB,oaAAC,qNAAqB;;;;;sDACtB,oaAAC,gNAAgB;4CAAC,OAAO;sDACvB,cAAA,oaAAC,6VAAI;gDAAC,MAAK;gDAAY,WAAU;;kEAC/B,oaAAC,iWAAQ;wDAAC,WAAU;;;;;;kEACpB,oaAAC;kEAAK;;;;;;;;;;;;;;;;;sDAGV,oaAAC,qNAAqB;;;;;sDACtB,oaAAC,gNAAgB;4CAAC,SAAS;4CAAe,WAAU;;8DAClD,oaAAC,+VAAM;oDAAC,WAAU;;;;;;8DAClB,oaAAC;8DAAK;;;;;;;;;;;;;;;;;;;;;;;iDAKZ,oaAAC,6VAAI;4BAAC,MAAK;sCACT,cAAA,oaAAC,4LAAM;gCAAC,SAAQ;gCAAU,MAAK;0CAAK;;;;;;;;;;;;;;;;;;;;;;;;;;;;AASlD"}}, + {"offset": {"line": 1221, "column": 0}, "map": {"version":3,"sources":["file:///Users/freedak/Documents/go-new/chinese-family-tree/components/ui/textarea.tsx"],"sourcesContent":["import * as React from 'react'\n\nimport { cn } from '@/lib/utils'\n\nfunction Textarea({ className, ...props }: React.ComponentProps<'textarea'>) {\n return (\n \n )\n}\n\nexport { Textarea }\n"],"names":[],"mappings":";;;;;AAEA;;;AAEA,SAAS,SAAS,EAAE,SAAS,EAAE,GAAG,OAAyC;IACzE,qBACE,oaAAC;QACC,aAAU;QACV,WAAW,IAAA,yKAAE,EACX,ucACA;QAED,GAAG,KAAK;;;;;;AAGf"}}, + {"offset": {"line": 1245, "column": 0}, "map": {"version":3,"sources":["file:///Users/freedak/Documents/go-new/chinese-family-tree/components/ui/select.tsx"],"sourcesContent":["'use client'\n\nimport * as React from 'react'\nimport * as SelectPrimitive from '@radix-ui/react-select'\nimport { CheckIcon, ChevronDownIcon, ChevronUpIcon } from 'lucide-react'\n\nimport { cn } from '@/lib/utils'\n\nfunction Select({\n ...props\n}: React.ComponentProps) {\n return \n}\n\nfunction SelectGroup({\n ...props\n}: React.ComponentProps) {\n return \n}\n\nfunction SelectValue({\n ...props\n}: React.ComponentProps) {\n return \n}\n\nfunction SelectTrigger({\n className,\n size = 'default',\n children,\n ...props\n}: React.ComponentProps & {\n size?: 'sm' | 'default'\n}) {\n return (\n \n {children}\n \n \n \n \n )\n}\n\nfunction SelectContent({\n className,\n children,\n position = 'popper',\n ...props\n}: React.ComponentProps) {\n return (\n \n \n \n \n {children}\n \n \n \n \n )\n}\n\nfunction SelectLabel({\n className,\n ...props\n}: React.ComponentProps) {\n return (\n \n )\n}\n\nfunction SelectItem({\n className,\n children,\n ...props\n}: React.ComponentProps) {\n return (\n \n \n \n \n \n \n {children}\n \n )\n}\n\nfunction SelectSeparator({\n className,\n ...props\n}: React.ComponentProps) {\n return (\n \n )\n}\n\nfunction SelectScrollUpButton({\n className,\n ...props\n}: React.ComponentProps) {\n return (\n \n \n \n )\n}\n\nfunction SelectScrollDownButton({\n className,\n ...props\n}: React.ComponentProps) {\n return (\n \n \n \n )\n}\n\nexport {\n Select,\n SelectContent,\n SelectGroup,\n SelectItem,\n SelectLabel,\n SelectScrollDownButton,\n SelectScrollUpButton,\n SelectSeparator,\n SelectTrigger,\n SelectValue,\n}\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AAGA;AACA;AAAA;AAAA;AAEA;AANA;;;;;AAQA,SAAS,OAAO,EACd,GAAG,OAC+C;IAClD,qBAAO,oaAAC,qbAAoB;QAAC,aAAU;QAAU,GAAG,KAAK;;;;;;AAC3D;AAEA,SAAS,YAAY,EACnB,GAAG,OACgD;IACnD,qBAAO,oaAAC,sbAAqB;QAAC,aAAU;QAAgB,GAAG,KAAK;;;;;;AAClE;AAEA,SAAS,YAAY,EACnB,GAAG,OACgD;IACnD,qBAAO,oaAAC,sbAAqB;QAAC,aAAU;QAAgB,GAAG,KAAK;;;;;;AAClE;AAEA,SAAS,cAAc,EACrB,SAAS,EACT,OAAO,SAAS,EAChB,QAAQ,EACR,GAAG,OAGJ;IACC,qBACE,oaAAC,wbAAuB;QACtB,aAAU;QACV,aAAW;QACX,WAAW,IAAA,yKAAE,EACX,gzBACA;QAED,GAAG,KAAK;;YAER;0BACD,oaAAC,qbAAoB;gBAAC,OAAO;0BAC3B,cAAA,oaAAC,sXAAe;oBAAC,WAAU;;;;;;;;;;;;;;;;;AAInC;AAEA,SAAS,cAAc,EACrB,SAAS,EACT,QAAQ,EACR,WAAW,QAAQ,EACnB,GAAG,OACkD;IACrD,qBACE,oaAAC,ubAAsB;kBACrB,cAAA,oaAAC,wbAAuB;YACtB,aAAU;YACV,WAAW,IAAA,yKAAE,EACX,ijBACA,aAAa,YACX,mIACF;YAEF,UAAU;YACT,GAAG,KAAK;;8BAET,oaAAC;;;;;8BACD,oaAAC,ybAAwB;oBACvB,WAAW,IAAA,yKAAE,EACX,OACA,aAAa,YACX;8BAGH;;;;;;8BAEH,oaAAC;;;;;;;;;;;;;;;;AAIT;AAEA,SAAS,YAAY,EACnB,SAAS,EACT,GAAG,OACgD;IACnD,qBACE,oaAAC,sbAAqB;QACpB,aAAU;QACV,WAAW,IAAA,yKAAE,EAAC,6CAA6C;QAC1D,GAAG,KAAK;;;;;;AAGf;AAEA,SAAS,WAAW,EAClB,SAAS,EACT,QAAQ,EACR,GAAG,OAC+C;IAClD,qBACE,oaAAC,qbAAoB;QACnB,aAAU;QACV,WAAW,IAAA,yKAAE,EACX,6aACA;QAED,GAAG,KAAK;;0BAET,oaAAC;gBAAK,WAAU;0BACd,cAAA,oaAAC,8bAA6B;8BAC5B,cAAA,oaAAC,gWAAS;wBAAC,WAAU;;;;;;;;;;;;;;;;0BAGzB,oaAAC,ybAAwB;0BAAE;;;;;;;;;;;;AAGjC;AAEA,SAAS,gBAAgB,EACvB,SAAS,EACT,GAAG,OACoD;IACvD,qBACE,oaAAC,0bAAyB;QACxB,aAAU;QACV,WAAW,IAAA,yKAAE,EAAC,iDAAiD;QAC9D,GAAG,KAAK;;;;;;AAGf;AAEA,SAAS,qBAAqB,EAC5B,SAAS,EACT,GAAG,OACyD;IAC5D,qBACE,oaAAC,+bAA8B;QAC7B,aAAU;QACV,WAAW,IAAA,yKAAE,EACX,wDACA;QAED,GAAG,KAAK;kBAET,cAAA,oaAAC,gXAAa;YAAC,WAAU;;;;;;;;;;;AAG/B;AAEA,SAAS,uBAAuB,EAC9B,SAAS,EACT,GAAG,OAC2D;IAC9D,qBACE,oaAAC,icAAgC;QAC/B,aAAU;QACV,WAAW,IAAA,yKAAE,EACX,wDACA;QAED,GAAG,KAAK;kBAET,cAAA,oaAAC,sXAAe;YAAC,WAAU;;;;;;;;;;;AAGjC"}}, + {"offset": {"line": 1478, "column": 0}, "map": {"version":3,"sources":["file:///Users/freedak/Documents/go-new/chinese-family-tree/components/ui/dialog.tsx"],"sourcesContent":["'use client'\n\nimport * as React from 'react'\nimport * as DialogPrimitive from '@radix-ui/react-dialog'\nimport { XIcon } from 'lucide-react'\n\nimport { cn } from '@/lib/utils'\n\nfunction Dialog({\n ...props\n}: React.ComponentProps) {\n return \n}\n\nfunction DialogTrigger({\n ...props\n}: React.ComponentProps) {\n return \n}\n\nfunction DialogPortal({\n ...props\n}: React.ComponentProps) {\n return \n}\n\nfunction DialogClose({\n ...props\n}: React.ComponentProps) {\n return \n}\n\nfunction DialogOverlay({\n className,\n ...props\n}: React.ComponentProps) {\n return (\n \n )\n}\n\nfunction DialogContent({\n className,\n children,\n showCloseButton = true,\n ...props\n}: React.ComponentProps & {\n showCloseButton?: boolean\n}) {\n return (\n \n \n \n {children}\n {showCloseButton && (\n \n \n Close\n \n )}\n \n \n )\n}\n\nfunction DialogHeader({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n \n )\n}\n\nfunction DialogFooter({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n \n )\n}\n\nfunction DialogTitle({\n className,\n ...props\n}: React.ComponentProps) {\n return (\n \n )\n}\n\nfunction DialogDescription({\n className,\n ...props\n}: React.ComponentProps) {\n return (\n \n )\n}\n\nexport {\n Dialog,\n DialogClose,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogOverlay,\n DialogPortal,\n DialogTitle,\n DialogTrigger,\n}\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AAGA;AACA;AAEA;AANA;;;;;AAQA,SAAS,OAAO,EACd,GAAG,OAC+C;IAClD,qBAAO,oaAAC,qbAAoB;QAAC,aAAU;QAAU,GAAG,KAAK;;;;;;AAC3D;AAEA,SAAS,cAAc,EACrB,GAAG,OACkD;IACrD,qBAAO,oaAAC,wbAAuB;QAAC,aAAU;QAAkB,GAAG,KAAK;;;;;;AACtE;AAEA,SAAS,aAAa,EACpB,GAAG,OACiD;IACpD,qBAAO,oaAAC,ubAAsB;QAAC,aAAU;QAAiB,GAAG,KAAK;;;;;;AACpE;AAEA,SAAS,YAAY,EACnB,GAAG,OACgD;IACnD,qBAAO,oaAAC,sbAAqB;QAAC,aAAU;QAAgB,GAAG,KAAK;;;;;;AAClE;AAEA,SAAS,cAAc,EACrB,SAAS,EACT,GAAG,OACkD;IACrD,qBACE,oaAAC,wbAAuB;QACtB,aAAU;QACV,WAAW,IAAA,yKAAE,EACX,0JACA;QAED,GAAG,KAAK;;;;;;AAGf;AAEA,SAAS,cAAc,EACrB,SAAS,EACT,QAAQ,EACR,kBAAkB,IAAI,EACtB,GAAG,OAGJ;IACC,qBACE,oaAAC;QAAa,aAAU;;0BACtB,oaAAC;;;;;0BACD,oaAAC,wbAAuB;gBACtB,aAAU;gBACV,WAAW,IAAA,yKAAE,EACX,+WACA;gBAED,GAAG,KAAK;;oBAER;oBACA,iCACC,oaAAC,sbAAqB;wBACpB,aAAU;wBACV,WAAU;;0CAEV,oaAAC,oVAAK;;;;;0CACN,oaAAC;gCAAK,WAAU;0CAAU;;;;;;;;;;;;;;;;;;;;;;;;AAMtC;AAEA,SAAS,aAAa,EAAE,SAAS,EAAE,GAAG,OAAoC;IACxE,qBACE,oaAAC;QACC,aAAU;QACV,WAAW,IAAA,yKAAE,EAAC,gDAAgD;QAC7D,GAAG,KAAK;;;;;;AAGf;AAEA,SAAS,aAAa,EAAE,SAAS,EAAE,GAAG,OAAoC;IACxE,qBACE,oaAAC;QACC,aAAU;QACV,WAAW,IAAA,yKAAE,EACX,0DACA;QAED,GAAG,KAAK;;;;;;AAGf;AAEA,SAAS,YAAY,EACnB,SAAS,EACT,GAAG,OACgD;IACnD,qBACE,oaAAC,sbAAqB;QACpB,aAAU;QACV,WAAW,IAAA,yKAAE,EAAC,sCAAsC;QACnD,GAAG,KAAK;;;;;;AAGf;AAEA,SAAS,kBAAkB,EACzB,SAAS,EACT,GAAG,OACsD;IACzD,qBACE,oaAAC,4bAA2B;QAC1B,aAAU;QACV,WAAW,IAAA,yKAAE,EAAC,iCAAiC;QAC9C,GAAG,KAAK;;;;;;AAGf"}}, + {"offset": {"line": 1660, "column": 0}, "map": {"version":3,"sources":["file:///Users/freedak/Documents/go-new/chinese-family-tree/lib/db.ts"],"sourcesContent":["import Dexie, { type Table } from \"dexie\"\nimport type { FamilyMember } from \"@/types/family\"\n\nexport interface GlobalSettings {\n key: string\n value: any\n}\n\nexport interface StoredImage {\n id: string\n blob: Blob\n mimeType: string\n createdAt: string\n}\n\nexport interface ActivityLog {\n id: string\n action: \"create\" | \"update\" | \"delete\" | \"import\" | \"export\"\n entityType: \"member\" | \"photo\" | \"story\" | \"settings\"\n entityId?: string\n entityName?: string\n changes?: any\n timestamp: string\n userId?: string\n userName?: string\n}\n\nexport class FamilyTreeDB extends Dexie {\n members!: Table\n settings!: Table\n images!: Table\n activityLogs!: Table\n\n constructor() {\n super(\"FamilyTreeDB\")\n this.version(1).stores({\n members: \"id, fullName, fatherId, motherId, [fatherId+motherId]\", // Index for searching\n settings: \"key\", // Key-value store for rootId etc.\n images: \"id\", // Store images by ID\n })\n this.version(2).stores({\n members: \"id, fullName, fatherId, motherId, [fatherId+motherId]\", // Index for searching\n settings: \"key\", // Key-value store for rootId etc.\n images: \"id\", // Store images by ID\n activityLogs: \"id, timestamp, action, entityType, entityId\",\n })\n }\n}\n\nexport const db = new FamilyTreeDB()\n"],"names":[],"mappings":";;;;;;AAAA;;AA2BO,MAAM,qBAAqB,+PAAK;IACrC,QAA6B;IAC7B,SAAgC;IAChC,OAA2B;IAC3B,aAAiC;IAEjC,aAAc;QACZ,KAAK,CAAC;QACN,IAAI,CAAC,OAAO,CAAC,GAAG,MAAM,CAAC;YACrB,SAAS;YACT,UAAU;YACV,QAAQ;QACV;QACA,IAAI,CAAC,OAAO,CAAC,GAAG,MAAM,CAAC;YACrB,SAAS;YACT,UAAU;YACV,QAAQ;YACR,cAAc;QAChB;IACF;AACF;AAEO,MAAM,KAAK,IAAI"}}, + {"offset": {"line": 1699, "column": 0}, "map": {"version":3,"sources":["file:///Users/freedak/Documents/go-new/chinese-family-tree/components/ui/image-upload.tsx"],"sourcesContent":["\"use client\"\n\nimport { useState, useRef, useEffect } from \"react\"\nimport { Button } from \"@/components/ui/button\"\nimport { Avatar, AvatarFallback, AvatarImage } from \"@/components/ui/avatar\"\nimport { Dialog, DialogContent, DialogHeader, DialogTitle, DialogFooter } from \"@/components/ui/dialog\"\nimport { Upload, X, Loader2, Crop } from \"lucide-react\"\nimport { db } from \"@/lib/db\"\nimport { v4 as uuidv4 } from \"uuid\"\nimport ReactCrop, { type Crop as CropType } from \"react-image-crop\"\nimport \"react-image-crop/dist/ReactCrop.css\"\nimport imageCompression from \"browser-image-compression\"\n\ninterface ImageUploadProps {\n value?: string // The image ID\n onChange: (imageId: string | undefined) => void\n className?: string\n}\n\nexport function ImageUpload({ value, onChange, className }: ImageUploadProps) {\n const [previewUrl, setPreviewUrl] = useState(undefined)\n const [isLoading, setIsLoading] = useState(false)\n const [showCropDialog, setShowCropDialog] = useState(false)\n const [imageToCrop, setImageToCrop] = useState(null)\n const [crop, setCrop] = useState()\n const [completedCrop, setCompletedCrop] = useState()\n const imgRef = useRef(null)\n const fileInputRef = useRef(null)\n\n // Load preview if value (imageId) exists\n useEffect(() => {\n let objectUrl: string | undefined\n\n const loadPreview = async () => {\n if (!value) {\n setPreviewUrl(undefined)\n return\n }\n\n try {\n const image = await db.images.get(value)\n if (image) {\n objectUrl = URL.createObjectURL(image.blob)\n setPreviewUrl(objectUrl)\n }\n } catch (error) {\n console.error(\"Failed to load image:\", error)\n }\n }\n\n loadPreview()\n\n return () => {\n if (objectUrl) URL.revokeObjectURL(objectUrl)\n }\n }, [value])\n\n const handleFileSelect = async (e: React.ChangeEvent) => {\n const file = e.target.files?.[0]\n if (!file) return\n\n try {\n // Basic validation\n if (!file.type.startsWith(\"image/\")) {\n alert(\"请选择图片文件\")\n return\n }\n\n // 压缩图片\n const options = {\n maxSizeMB: 1,\n maxWidthOrHeight: 1024,\n useWebWorker: true,\n }\n \n const compressedFile = await imageCompression(file, options)\n \n // 显示裁剪对话框\n const reader = new FileReader()\n reader.onload = () => {\n setImageToCrop(reader.result as string)\n setShowCropDialog(true)\n }\n reader.readAsDataURL(compressedFile)\n } catch (error) {\n console.error(\"Failed to process image:\", error)\n alert(\"图片处理失败\")\n } finally {\n // Reset input\n if (fileInputRef.current) fileInputRef.current.value = \"\"\n }\n }\n\n const handleCropComplete = async () => {\n if (!completedCrop || !imgRef.current) {\n // 如果没有裁剪,直接保存原图\n await saveImage(imageToCrop!)\n return\n }\n\n try {\n setIsLoading(true)\n const canvas = document.createElement('canvas')\n const scaleX = imgRef.current.naturalWidth / imgRef.current.width\n const scaleY = imgRef.current.naturalHeight / imgRef.current.height\n \n canvas.width = completedCrop.width\n canvas.height = completedCrop.height\n const ctx = canvas.getContext('2d')\n\n if (ctx) {\n ctx.drawImage(\n imgRef.current,\n completedCrop.x * scaleX,\n completedCrop.y * scaleY,\n completedCrop.width * scaleX,\n completedCrop.height * scaleY,\n 0,\n 0,\n completedCrop.width,\n completedCrop.height\n )\n }\n\n canvas.toBlob(async (blob) => {\n if (blob) {\n await saveImage(URL.createObjectURL(blob), blob)\n }\n }, 'image/jpeg', 0.9)\n } catch (error) {\n console.error(\"Failed to crop image:\", error)\n alert(\"图片裁剪失败\")\n } finally {\n setIsLoading(false)\n setShowCropDialog(false)\n setImageToCrop(null)\n }\n }\n\n const saveImage = async (dataUrl: string, blob?: Blob) => {\n try {\n setIsLoading(true)\n \n let imageBlob = blob\n if (!imageBlob) {\n const response = await fetch(dataUrl)\n imageBlob = await response.blob()\n }\n\n const imageId = uuidv4()\n await db.images.add({\n id: imageId,\n blob: imageBlob,\n mimeType: imageBlob.type,\n createdAt: new Date().toISOString(),\n })\n\n onChange(imageId)\n setShowCropDialog(false)\n setImageToCrop(null)\n } catch (error) {\n console.error(\"Failed to save image:\", error)\n alert(\"图片保存失败\")\n } finally {\n setIsLoading(false)\n }\n }\n\n const handleRemove = () => {\n onChange(undefined)\n }\n\n return (\n <>\n
\n \n \n \n {isLoading ? : }\n \n \n\n
\n \n fileInputRef.current?.click()}\n disabled={isLoading}\n >\n {value ? \"更换头像\" : \"上传头像\"}\n \n {value && (\n \n 移除\n \n )}\n
\n
\n\n {/* 裁剪对话框 */}\n \n \n \n \n \n 裁剪图片\n \n \n
\n {imageToCrop && (\n setCrop(c)}\n onComplete={(c) => setCompletedCrop(c)}\n aspect={1}\n circularCrop\n >\n \n \n )}\n
\n \n {\n setShowCropDialog(false)\n setImageToCrop(null)\n }}\n >\n 取消\n \n \n \n
\n
\n \n )\n}\n"],"names":[],"mappings":"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"}}, + {"offset": {"line": 2066, "column": 0}, "map": {"version":3,"sources":["file:///Users/freedak/Documents/go-new/chinese-family-tree/components/members/photo-gallery.tsx"],"sourcesContent":["\"use client\"\n\nimport { useState, useEffect } from \"react\"\nimport { db } from \"@/lib/db\"\nimport { Button } from \"@/components/ui/button\"\nimport { Card } from \"@/components/ui/card\"\nimport { Dialog, DialogContent, DialogHeader, DialogTitle } from \"@/components/ui/dialog\"\nimport { X, Upload, Image as ImageIcon, Plus, ZoomIn } from \"lucide-react\"\nimport { useDialog } from \"@/components/ui/alert-dialog-custom\"\nimport { v4 as uuidv4 } from \"uuid\"\nimport imageCompression from \"browser-image-compression\"\n\ninterface PhotoGalleryProps {\n photoIds?: string[]\n onChange: (photoIds: string[]) => void\n readonly?: boolean\n}\n\nexport function PhotoGallery({ photoIds = [], onChange, readonly = false }: PhotoGalleryProps) {\n const { showAlert, showConfirm } = useDialog()\n const [photos, setPhotos] = useState<{ id: string; url: string }[]>([])\n const [selectedPhoto, setSelectedPhoto] = useState(null)\n const [isUploading, setIsUploading] = useState(false)\n\n // 加载照片\n useEffect(() => {\n const loadPhotos = async () => {\n const loadedPhotos = await Promise.all(\n photoIds.map(async (id) => {\n try {\n const image = await db.images.get(id)\n if (image) {\n const url = URL.createObjectURL(image.blob)\n return { id, url }\n }\n } catch (error) {\n console.error('加载照片失败:', error)\n }\n return null\n })\n )\n setPhotos(loadedPhotos.filter(Boolean) as { id: string; url: string }[])\n }\n\n if (photoIds.length > 0) {\n loadPhotos()\n }\n\n // 清理 URL\n return () => {\n photos.forEach(photo => URL.revokeObjectURL(photo.url))\n }\n }, [photoIds])\n\n const handleUpload = async (e: React.ChangeEvent) => {\n const files = e.target.files\n if (!files || files.length === 0) return\n\n setIsUploading(true)\n try {\n const newPhotoIds: string[] = []\n\n for (const file of Array.from(files)) {\n if (!file.type.startsWith('image/')) continue\n\n // 压缩图片\n const options = {\n maxSizeMB: 2,\n maxWidthOrHeight: 1920,\n useWebWorker: true,\n }\n \n const compressedFile = await imageCompression(file, options)\n \n // 保存到数据库\n const imageId = uuidv4()\n await db.images.add({\n id: imageId,\n blob: compressedFile,\n mimeType: compressedFile.type,\n createdAt: new Date().toISOString(),\n })\n\n newPhotoIds.push(imageId)\n }\n\n // 更新照片列表\n onChange([...photoIds, ...newPhotoIds])\n } catch (error) {\n console.error('上传照片失败:', error)\n await showAlert('上传照片失败', '错误')\n } finally {\n setIsUploading(false)\n e.target.value = ''\n }\n }\n\n const handleDelete = async (photoId: string) => {\n const confirmed = await showConfirm('确定要删除这张照片吗?', '删除照片')\n if (confirmed) {\n onChange(photoIds.filter(id => id !== photoId))\n }\n }\n\n return (\n
\n
\n

照片墙 ({photos.length})

\n {!readonly && (\n \n )}\n
\n\n {photos.length > 0 ? (\n
\n {photos.map((photo) => (\n
\n setSelectedPhoto(photo.url)}\n />\n {!readonly && (\n handleDelete(photo.id)}\n >\n \n \n )}\n setSelectedPhoto(photo.url)}\n >\n \n \n
\n ))}\n
\n ) : (\n
\n 暂无照片\n
\n )}\n\n {/* 照片预览对话框 */}\n setSelectedPhoto(null)}>\n \n \n 照片预览\n \n {selectedPhoto && (\n \n )}\n \n \n
\n )\n}\n"],"names":[],"mappings":"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"}}, + {"offset": {"line": 2360, "column": 0}, "map": {"version":3,"sources":["file:///Users/freedak/Documents/go-new/chinese-family-tree/components/members/story-manager.tsx"],"sourcesContent":["\"use client\"\n\nimport { useState } from \"react\"\nimport { Button } from \"@/components/ui/button\"\nimport { Input } from \"@/components/ui/input\"\nimport { Textarea } from \"@/components/ui/textarea\"\nimport { Label } from \"@/components/ui/label\"\nimport { Card, CardContent, CardHeader, CardTitle } from \"@/components/ui/card\"\nimport { Dialog, DialogContent, DialogHeader, DialogTitle, DialogFooter } from \"@/components/ui/dialog\"\nimport { Plus, Edit, Trash, BookOpen, Calendar } from \"lucide-react\"\nimport type { FamilyStory } from \"@/types/family\"\nimport { v4 as uuidv4 } from \"uuid\"\nimport { useDialog } from \"@/components/ui/alert-dialog-custom\"\n\ninterface StoryManagerProps {\n stories?: FamilyStory[]\n onChange: (stories: FamilyStory[]) => void\n readonly?: boolean\n}\n\nexport function StoryManager({ stories = [], onChange, readonly = false }: StoryManagerProps) {\n const { showAlert, showConfirm } = useDialog()\n const [isDialogOpen, setIsDialogOpen] = useState(false)\n const [editingStory, setEditingStory] = useState(null)\n const [formData, setFormData] = useState>({\n title: \"\",\n content: \"\",\n date: \"\",\n })\n\n const handleAdd = () => {\n setEditingStory(null)\n setFormData({ title: \"\", content: \"\", date: \"\" })\n setIsDialogOpen(true)\n }\n\n const handleEdit = (story: FamilyStory) => {\n setEditingStory(story)\n setFormData(story)\n setIsDialogOpen(true)\n }\n\n const handleDelete = async (storyId: string) => {\n const confirmed = await showConfirm(\"确定要删除这个故事吗?\", \"删除故事\")\n if (confirmed) {\n onChange(stories.filter(s => s.id !== storyId))\n }\n }\n\n const handleSave = async () => {\n if (!formData.title || !formData.content) {\n await showAlert(\"请填写标题和内容\", \"提示\")\n return\n }\n\n const now = new Date().toISOString()\n \n if (editingStory) {\n // 更新现有故事\n onChange(\n stories.map(s =>\n s.id === editingStory.id\n ? { ...s, ...formData, updatedAt: now }\n : s\n )\n )\n } else {\n // 添加新故事\n const newStory: FamilyStory = {\n id: uuidv4(),\n title: formData.title!,\n content: formData.content!,\n date: formData.date,\n imageIds: formData.imageIds || [],\n createdAt: now,\n updatedAt: now,\n }\n onChange([...stories, newStory])\n }\n\n setIsDialogOpen(false)\n setFormData({ title: \"\", content: \"\", date: \"\" })\n }\n\n return (\n
\n
\n

\n \n 家族故事 ({stories.length})\n

\n {!readonly && (\n \n \n 添加故事\n \n )}\n
\n\n {stories.length > 0 ? (\n
\n {stories\n .sort((a, b) => new Date(b.createdAt).getTime() - new Date(a.createdAt).getTime())\n .map((story) => (\n \n \n
\n
\n {story.title}\n {story.date && (\n
\n \n {story.date}\n
\n )}\n
\n {!readonly && (\n
\n handleEdit(story)}\n >\n \n \n handleDelete(story.id)}\n >\n \n \n
\n )}\n
\n
\n \n

\n {story.content}\n

\n
\n 创建于 {new Date(story.createdAt).toLocaleDateString('zh-CN')}\n
\n
\n
\n ))}\n
\n ) : (\n
\n 暂无家族故事\n
\n )}\n\n {/* 添加/编辑故事对话框 */}\n \n \n \n {editingStory ? \"编辑故事\" : \"添加故事\"}\n \n
\n
\n \n setFormData({ ...formData, title: e.target.value })}\n />\n
\n
\n \n setFormData({ ...formData, date: e.target.value })}\n />\n
\n
\n \n setFormData({ ...formData, content: e.target.value })}\n />\n
\n
\n \n \n \n \n
\n
\n
\n )\n}\n"],"names":[],"mappings":"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"}}, + {"offset": {"line": 2818, "column": 0}, "map": {"version":3,"sources":["file:///Users/freedak/Documents/go-new/chinese-family-tree/components/members/member-form.tsx"],"sourcesContent":["\"use client\"\n\nimport type React from \"react\"\n\nimport { useState } from \"react\"\nimport type { FamilyMember } from \"@/types/family\"\nimport { Button } from \"@/components/ui/button\"\nimport { Input } from \"@/components/ui/input\"\nimport { Label } from \"@/components/ui/label\"\nimport { Textarea } from \"@/components/ui/textarea\"\nimport { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from \"@/components/ui/select\"\nimport { CalendarIcon, User, Scroll, Users, Images, BookOpen } from \"lucide-react\"\nimport { Card, CardContent, CardDescription, CardHeader, CardTitle } from \"@/components/ui/card\"\nimport { ImageUpload } from \"@/components/ui/image-upload\"\nimport { PhotoGallery } from \"./photo-gallery\"\nimport { StoryManager } from \"./story-manager\"\n\ninterface MemberFormProps {\n initialData?: Partial\n existingMembers?: FamilyMember[]\n onSubmit: (data: FamilyMember) => void\n onCancel: () => void\n}\n\nexport function MemberForm({ initialData, existingMembers = [], onSubmit, onCancel }: MemberFormProps) {\n // 计算最大世系\n const maxGeneration = existingMembers.length > 0 \n ? Math.max(...existingMembers.map(m => m.generation || 1))\n : 1\n \n // 获取始祖的姓氏(第1世成员)\n const ancestorSurname = existingMembers.find(m => m.generation === 1)?.surname || \"\"\n \n // Initialize state with default values or initialData\n const [formData, setFormData] = useState>(() => {\n const defaults = {\n id: crypto.randomUUID(),\n surname: ancestorSurname,\n givenName: \"\",\n fullName: \"\",\n gender: \"MALE\" as \"MALE\" | \"FEMALE\",\n generation: maxGeneration,\n spouseIds: [],\n childrenIds: [],\n tags: [],\n }\n \n if (!initialData) return defaults\n \n return {\n ...defaults,\n ...initialData,\n gender: (initialData.gender || \"MALE\").toUpperCase() as \"MALE\" | \"FEMALE\",\n spouseIds: initialData.spouseIds || [],\n childrenIds: initialData.childrenIds || [],\n tags: initialData.tags || [],\n fatherId: initialData.fatherId || undefined,\n motherId: initialData.motherId || undefined,\n }\n })\n\n const [errors, setErrors] = useState([])\n\n const handleChange = (field: keyof FamilyMember, value: any) => {\n setFormData((prev) => {\n const newData = { ...prev, [field]: value }\n \n // Auto-update full name if surname or given name changes\n if (field === \"surname\" || field === \"givenName\") {\n newData.fullName = (newData.surname || \"\") + (newData.givenName || \"\")\n }\n \n // 选择父亲时自动带出母亲\n if (field === \"fatherId\" && value) {\n const father = existingMembers.find(m => m.id === value)\n if (father && father.spouseIds && father.spouseIds.length > 0) {\n // 找到父亲的配偶(母亲)\n const motherId = father.spouseIds[0]\n newData.motherId = motherId\n }\n }\n \n // 选择母亲时自动带出父亲\n if (field === \"motherId\" && value) {\n const mother = existingMembers.find(m => m.id === value)\n if (mother && mother.spouseIds && mother.spouseIds.length > 0) {\n // 找到母亲的配偶(父亲)\n const fatherId = mother.spouseIds[0]\n newData.fatherId = fatherId\n }\n }\n \n return newData\n })\n // Clear errors when user makes changes\n if (errors.length > 0) setErrors([])\n }\n\n const handleSpouseAdd = (spouseId: string) => {\n if (!spouseId || spouseId === \"none\") return\n \n setFormData((prev) => {\n const currentSpouses = prev.spouseIds || []\n // 避免重复添加\n if (currentSpouses.includes(spouseId)) return prev\n \n return {\n ...prev,\n spouseIds: [...currentSpouses, spouseId]\n }\n })\n }\n\n const handleSpouseRemove = (spouseId: string) => {\n setFormData((prev) => ({\n ...prev,\n spouseIds: (prev.spouseIds || []).filter(id => id !== spouseId)\n }))\n }\n\n const handleChildAdd = (childId: string) => {\n if (!childId || childId === \"none\") return\n \n setFormData((prev) => {\n const currentChildren = prev.childrenIds || []\n // 避免重复添加\n if (currentChildren.includes(childId)) return prev\n \n return {\n ...prev,\n childrenIds: [...currentChildren, childId]\n }\n })\n }\n\n const handleChildRemove = (childId: string) => {\n setFormData((prev) => ({\n ...prev,\n childrenIds: (prev.childrenIds || []).filter(id => id !== childId)\n }))\n }\n\n const validate = (): boolean => {\n const newErrors: string[] = []\n\n // 1. Date Validation\n if (formData.birthDate && formData.deathDate) {\n if (new Date(formData.birthDate) > new Date(formData.deathDate)) {\n newErrors.push(\"出生日期不能晚于逝世日期\")\n }\n }\n\n // 2. Parent Age Validation\n const birthYear = formData.birthDate ? new Date(formData.birthDate).getFullYear() : null\n\n if (birthYear) {\n if (formData.fatherId) {\n const father = existingMembers.find((m) => m.id === formData.fatherId)\n if (father?.birthDate) {\n const fatherBirthYear = new Date(father.birthDate).getFullYear()\n if (birthYear - fatherBirthYear < 15) {\n newErrors.push(`与父亲的年龄差过小 (${birthYear - fatherBirthYear}岁),请确认`)\n }\n if (birthYear < fatherBirthYear) {\n newErrors.push(\"出生日期不能早于父亲\")\n }\n }\n }\n\n if (formData.motherId) {\n const mother = existingMembers.find((m) => m.id === formData.motherId)\n if (mother?.birthDate) {\n const motherBirthYear = new Date(mother.birthDate).getFullYear()\n if (birthYear - motherBirthYear < 15) {\n newErrors.push(`与母亲的年龄差过小 (${birthYear - motherBirthYear}岁),请确认`)\n }\n if (birthYear < motherBirthYear) {\n newErrors.push(\"出生日期不能早于母亲\")\n }\n }\n }\n }\n\n // 3. Generation Validation\n if (formData.fatherId) {\n const father = existingMembers.find((m) => m.id === formData.fatherId)\n if (father && formData.generation !== father.generation + 1) {\n newErrors.push(`世系错误:父亲是第 ${father.generation} 世,子女应为第 ${father.generation + 1} 世`)\n }\n }\n\n // 4. Circular Reference Detection (循环引用检测)\n if (formData.fatherId || formData.motherId) {\n const visited = new Set()\n const checkCircular = (memberId: string): boolean => {\n if (memberId === formData.id) return true\n if (visited.has(memberId)) return false\n visited.add(memberId)\n\n const member = existingMembers.find((m) => m.id === memberId)\n if (!member) return false\n\n if (member.fatherId && checkCircular(member.fatherId)) return true\n if (member.motherId && checkCircular(member.motherId)) return true\n\n return false\n }\n\n if (formData.fatherId && checkCircular(formData.fatherId)) {\n newErrors.push(\"检测到循环引用:不能将自己的后代设置为父亲\")\n }\n if (formData.motherId && checkCircular(formData.motherId)) {\n newErrors.push(\"检测到循环引用:不能将自己的后代设置为母亲\")\n }\n }\n\n // 5. Self-Reference Detection (自我引用检测)\n if (formData.fatherId === formData.id) {\n newErrors.push(\"不能将自己设置为自己的父亲\")\n }\n if (formData.motherId === formData.id) {\n newErrors.push(\"不能将自己设置为自己的母亲\")\n }\n if (formData.spouseIds?.includes(formData.id || \"\")) {\n newErrors.push(\"不能将自己设置为自己的配偶\")\n }\n\n setErrors(newErrors)\n return newErrors.length === 0\n }\n\n const handleSubmit = (e: React.FormEvent) => {\n e.preventDefault()\n if (validate()) {\n onSubmit(formData as FamilyMember)\n }\n }\n\n const potentialRelatives = existingMembers.filter((m) => m.id !== formData.id)\n\n return (\n
\n {errors.length > 0 && (\n
\n

请检查以下问题:

\n
    \n {errors.map((err, index) => (\n
  • {err}
  • \n ))}\n
\n
\n )}\n\n
\n {/* 基本信息和家庭关系 - 两列布局 */}\n
\n {/* 左列:基本信息 */}\n \n \n \n \n 基本信息 (Identity)\n \n \n \n
\n handleChange(\"avatarImageId\", imageId)}\n />\n
\n\n
\n
\n \n handleChange(\"surname\", e.target.value)}\n />\n
\n
\n \n handleChange(\"givenName\", e.target.value)}\n />\n
\n
\n\n
\n
\n \n \n
\n
\n \n handleChange(\"generation\", Number.parseInt(e.target.value))}\n />\n
\n
\n
\n
\n\n {/* 右列:家庭关系 */}\n \n \n \n \n 家庭关系 (Relationships)\n \n \n \n
\n \n
\n handleChange(\"fatherId\", val === \"none\" ? undefined : val)}\n >\n \n \n \n \n 无 (None)\n {potentialRelatives\n .filter((m) => m.gender === \"MALE\" && m.generation === (formData.generation || 1) - 1)\n .map((m) => (\n \n {m.fullName} ({m.generation}世)\n \n ))}\n \n \n {!formData.fatherId && (\n handleChange(\"spouseFatherName\", e.target.value)}\n className=\"flex-1\"\n />\n )}\n
\n
\n\n
\n \n
\n handleChange(\"motherId\", val === \"none\" ? undefined : val)}\n >\n \n \n \n \n 无 (None)\n {potentialRelatives\n .filter((m) => m.gender === \"FEMALE\" && m.generation === (formData.generation || 1) - 1)\n .map((m) => (\n \n {m.fullName} ({m.generation}世)\n \n ))}\n \n \n {!formData.motherId && (\n handleChange(\"spouseMotherName\", e.target.value)}\n className=\"flex-1\"\n />\n )}\n
\n
\n\n
\n \n \n \n {/* 已选配偶列表 */}\n {formData.spouseIds && formData.spouseIds.length > 0 && (\n
\n {formData.spouseIds.map((spouseId, index) => {\n const spouse = existingMembers.find(m => m.id === spouseId)\n if (!spouse) return null\n \n return (\n
\n \n {index + 1}. {spouse.fullName} (第{spouse.generation}世)\n \n handleSpouseRemove(spouseId)}\n className=\"h-6 w-6 p-0 hover:bg-destructive hover:text-destructive-foreground\"\n >\n ×\n \n
\n )\n })}\n
\n )}\n
\n\n
\n \n \n \n {/* 已选子女列表 */}\n {formData.childrenIds && formData.childrenIds.length > 0 && (\n
\n {formData.childrenIds.map((childId, index) => {\n const child = existingMembers.find(m => m.id === childId)\n if (!child) return null\n \n return (\n
\n \n {index + 1}. {child.fullName} (第{child.generation}世)\n \n handleChildRemove(childId)}\n className=\"h-6 w-6 p-0 hover:bg-destructive hover:text-destructive-foreground\"\n >\n ×\n \n
\n )\n })}\n
\n )}\n
\n
\n
\n
\n\n {/* Traditional Names */}\n \n \n \n \n 传统称谓 (Traditional Names)\n \n \n \n
\n
\n \n handleChange(\"courtesyName\", e.target.value)}\n placeholder=\"e.g. 伯虎\"\n />\n
\n
\n \n handleChange(\"artName\", e.target.value)}\n placeholder=\"e.g. 六如居士\"\n />\n
\n
\n
\n
\n \n handleChange(\"generationName\", e.target.value)}\n />\n
\n
\n \n handleChange(\"posthumousName\", e.target.value)}\n />\n
\n
\n
\n
\n\n {/* Dates & Places */}\n \n \n \n \n 生平与地点 (Life & Places)\n \n \n \n
\n
\n \n handleChange(\"birthDate\", e.target.value)}\n />\n
\n
\n \n handleChange(\"deathDate\", e.target.value)}\n />\n
\n
\n
\n \n handleChange(\"ancestralHome\", e.target.value)}\n placeholder=\"e.g. 福建省泉州市\"\n />\n
\n
\n \n handleChange(\"burialPlace\", e.target.value)}\n />\n
\n
\n
\n\n {/* Contact Information */}\n \n \n \n \n 联系方式 (Contact Information)\n \n 在世成员的联系方式\n \n \n
\n \n handleChange(\"phone\", e.target.value)}\n placeholder=\"e.g. 13800138000\"\n />\n
\n
\n \n handleChange(\"telephone\", e.target.value)}\n placeholder=\"e.g. 0592-1234567\"\n />\n
\n
\n \n handleChange(\"email\", e.target.value)}\n placeholder=\"e.g. example@email.com\"\n />\n
\n
\n \n handleChange(\"address\", e.target.value)}\n placeholder=\"e.g. 福建省厦门市思明区XX路XX号\"\n />\n
\n
\n
\n\n {/* Biography */}\n \n \n \n \n 生平事迹 (Biography)\n \n \n \n handleChange(\"bio\", e.target.value)}\n />\n \n \n\n {/* Tags */}\n \n \n \n \n 标签 (Tags)\n \n 添加标签以便分类和搜索(按回车添加)\n \n \n
\n
\n {\n if (e.key === 'Enter') {\n e.preventDefault()\n const input = e.currentTarget\n const value = input.value.trim()\n if (value && !(formData.tags || []).includes(value)) {\n handleChange('tags', [...(formData.tags || []), value])\n input.value = ''\n }\n }\n }}\n />\n
\n {formData.tags && formData.tags.length > 0 && (\n
\n {formData.tags.map((tag, index) => (\n \n {tag}\n {\n const newTags = formData.tags?.filter((_, i) => i !== index) || []\n handleChange('tags', newTags)\n }}\n className=\"ml-1 hover:text-destructive\"\n >\n ×\n \n \n ))}\n
\n )}\n
\n
\n
\n\n {/* Photo Gallery */}\n \n \n \n \n 照片墙 (Photo Gallery)\n \n 上传多张照片记录珍贵时刻\n \n \n handleChange(\"photoIds\", photoIds)}\n />\n \n \n\n {/* Family Stories */}\n \n \n \n \n 家族故事 (Family Stories)\n \n 记录与此成员相关的家族故事\n \n \n handleChange(\"stories\", stories)}\n />\n \n \n\n
\n\n
\n \n \n
\n
\n )\n}\n"],"names":[],"mappings":"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"}}, + {"offset": {"line": 4588, "column": 0}, "map": {"version":3,"sources":["file:///Users/freedak/Documents/go-new/chinese-family-tree/app/members/new/page.tsx"],"sourcesContent":["\"use client\"\n\nimport { useRouter } from \"next/navigation\"\nimport { useFamily } from \"@/context/family-context\"\nimport { SiteHeader } from \"@/components/site-header\"\nimport { MemberForm } from \"@/components/members/member-form\"\nimport { Button } from \"@/components/ui/button\"\nimport { ArrowLeft } from \"lucide-react\"\nimport type { FamilyMember } from \"@/types/family\"\n\nexport default function NewMemberPage() {\n const { addMember, treeData } = useFamily()\n const router = useRouter()\n\n const existingMembers = Object.values(treeData.members)\n\n const handleSave = async (newMember: FamilyMember) => {\n try {\n await addMember({\n ...newMember,\n createdAt: new Date().toISOString(),\n updatedAt: new Date().toISOString(),\n })\n // 跳转到成员列表页\n router.push('/members')\n } catch (error) {\n console.error('添加成员失败:', error)\n alert('添加成员失败: ' + (error as Error).message)\n }\n }\n\n return (\n
\n \n
\n
\n \n

新增家族成员

\n
\n router.back()} />\n
\n
\n )\n}\n"],"names":[],"mappings":";;;;;AAEA;AACA;AACA;AACA;AACA;AACA;AAPA;;;;;;;;AAUe,SAAS;IACtB,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,GAAG,IAAA,iMAAS;IACzC,MAAM,SAAS,IAAA,qUAAS;IAExB,MAAM,kBAAkB,OAAO,MAAM,CAAC,SAAS,OAAO;IAEtD,MAAM,aAAa,OAAO;QACxB,IAAI;YACF,MAAM,UAAU;gBACd,GAAG,SAAS;gBACZ,WAAW,IAAI,OAAO,WAAW;gBACjC,WAAW,IAAI,OAAO,WAAW;YACnC;YACA,WAAW;YACX,OAAO,IAAI,CAAC;QACd,EAAE,OAAO,OAAO;YACd,QAAQ,KAAK,CAAC,WAAW;YACzB,MAAM,aAAa,AAAC,MAAgB,OAAO;QAC7C;IACF;IAEA,qBACE,oaAAC;QAAI,WAAU;;0BACb,oaAAC,kMAAU;;;;;0BACX,oaAAC;gBAAI,WAAU;;kCACb,oaAAC;wBAAI,WAAU;;0CACb,oaAAC,4LAAM;gCAAC,SAAQ;gCAAQ,SAAS,IAAM,OAAO,IAAI;;kDAChD,oaAAC,wWAAS;wCAAC,WAAU;;;;;;oCAAiB;;;;;;;0CAExC,oaAAC;gCAAG,WAAU;0CAAgC;;;;;;;;;;;;kCAEhD,oaAAC,6MAAU;wBAAC,iBAAiB;wBAAiB,UAAU;wBAAY,UAAU,IAAM,OAAO,IAAI;;;;;;;;;;;;;;;;;;AAIvG"}}] +} \ No newline at end of file diff --git a/.next/dev/server/chunks/ssr/[root-of-the-server]__a5d92604._.js b/.next/dev/server/chunks/ssr/[root-of-the-server]__a5d92604._.js index 2c867a11..869d6043 100644 --- a/.next/dev/server/chunks/ssr/[root-of-the-server]__a5d92604._.js +++ b/.next/dev/server/chunks/ssr/[root-of-the-server]__a5d92604._.js @@ -1366,7 +1366,7 @@ function PersonCard({ member, isRoot, isSpouse, onSelect, isHighlighted, relatio ] }, void 0, true, { fileName: "[project]/Documents/go-new/chinese-family-tree/components/tree/family-node.tsx", - lineNumber: 79, + lineNumber: 80, columnNumber: 7 }, this), /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { @@ -1377,24 +1377,24 @@ function PersonCard({ member, isRoot, isSpouse, onSelect, isHighlighted, relatio className: "h-full w-full object-cover" }, void 0, false, { fileName: "[project]/Documents/go-new/chinese-family-tree/components/tree/family-node.tsx", - lineNumber: 85, + lineNumber: 86, columnNumber: 11 - }, this) : member.gender === 'female' ? /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$lucide$2d$react$40$0$2e$454$2e$0_react$40$19$2e$2$2e$0$2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$circle$2d$user$2d$round$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__$3c$export__default__as__CircleUserRound$3e$__["CircleUserRound"], { + }, this) : member.gender === 'FEMALE' ? /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$lucide$2d$react$40$0$2e$454$2e$0_react$40$19$2e$2$2e$0$2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$circle$2d$user$2d$round$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__$3c$export__default__as__CircleUserRound$3e$__["CircleUserRound"], { className: "h-8 w-8 text-pink-400" }, void 0, false, { fileName: "[project]/Documents/go-new/chinese-family-tree/components/tree/family-node.tsx", - lineNumber: 92, + lineNumber: 93, columnNumber: 13 }, this) : /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$lucide$2d$react$40$0$2e$454$2e$0_react$40$19$2e$2$2e$0$2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$circle$2d$user$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__$3c$export__default__as__CircleUser$3e$__["CircleUser"], { className: "h-8 w-8 text-blue-400" }, void 0, false, { fileName: "[project]/Documents/go-new/chinese-family-tree/components/tree/family-node.tsx", - lineNumber: 94, + lineNumber: 95, columnNumber: 13 }, this) }, void 0, false, { fileName: "[project]/Documents/go-new/chinese-family-tree/components/tree/family-node.tsx", - lineNumber: 83, + lineNumber: 84, columnNumber: 7 }, this), /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { @@ -1409,7 +1409,7 @@ function PersonCard({ member, isRoot, isSpouse, onSelect, isHighlighted, relatio ] }, void 0, true, { fileName: "[project]/Documents/go-new/chinese-family-tree/components/tree/family-node.tsx", - lineNumber: 100, + lineNumber: 101, columnNumber: 9 }, this), member.courtesyName && /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { @@ -1420,7 +1420,7 @@ function PersonCard({ member, isRoot, isSpouse, onSelect, isHighlighted, relatio ] }, void 0, true, { fileName: "[project]/Documents/go-new/chinese-family-tree/components/tree/family-node.tsx", - lineNumber: 102, + lineNumber: 103, columnNumber: 11 }, this), lifeSpan && /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { @@ -1428,7 +1428,7 @@ function PersonCard({ member, isRoot, isSpouse, onSelect, isHighlighted, relatio children: lifeSpan }, void 0, false, { fileName: "[project]/Documents/go-new/chinese-family-tree/components/tree/family-node.tsx", - lineNumber: 105, + lineNumber: 106, columnNumber: 11 }, this), ageText && /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { @@ -1436,7 +1436,7 @@ function PersonCard({ member, isRoot, isSpouse, onSelect, isHighlighted, relatio children: ageText }, void 0, false, { fileName: "[project]/Documents/go-new/chinese-family-tree/components/tree/family-node.tsx", - lineNumber: 110, + lineNumber: 111, columnNumber: 11 }, this), member.phone && /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { @@ -1447,31 +1447,35 @@ function PersonCard({ member, isRoot, isSpouse, onSelect, isHighlighted, relatio ] }, void 0, true, { fileName: "[project]/Documents/go-new/chinese-family-tree/components/tree/family-node.tsx", - lineNumber: 115, + lineNumber: 116, columnNumber: 11 }, this) ] }, void 0, true, { fileName: "[project]/Documents/go-new/chinese-family-tree/components/tree/family-node.tsx", - lineNumber: 99, + lineNumber: 100, columnNumber: 7 }, this), member.deathDate && /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { className: "absolute -top-1 -right-1 h-2 w-2 rounded-full bg-neutral-400 ring-2 ring-background" }, void 0, false, { fileName: "[project]/Documents/go-new/chinese-family-tree/components/tree/family-node.tsx", - lineNumber: 122, + lineNumber: 123, columnNumber: 9 }, this) ] }, void 0, true, { fileName: "[project]/Documents/go-new/chinese-family-tree/components/tree/family-node.tsx", - lineNumber: 63, + lineNumber: 64, columnNumber: 5 }, this); } -function FamilyNode({ member, spouse, isRoot, onSelect, isHighlighted, relationMode, isSelected }) { - if (!spouse) { +function FamilyNode({ member, spouse, spouses, isRoot, onSelect, isHighlighted, relationMode, isSelected }) { + // 优先使用 spouses 数组,如果没有则使用单个 spouse + const spouseList = spouses || (spouse ? [ + spouse + ] : []); + if (spouseList.length === 0) { return /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(PersonCard, { member: member, isRoot: isRoot, @@ -1481,11 +1485,11 @@ function FamilyNode({ member, spouse, isRoot, onSelect, isHighlighted, relationM isSelected: isSelected }, void 0, false, { fileName: "[project]/Documents/go-new/chinese-family-tree/components/tree/family-node.tsx", - lineNumber: 130, + lineNumber: 134, columnNumber: 12 }, this); } - // 有配偶时,并排显示 + // 有配偶时,并排显示所有配偶 return /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { className: "flex items-center gap-2", children: [ @@ -1498,30 +1502,39 @@ function FamilyNode({ member, spouse, isRoot, onSelect, isHighlighted, relationM isSelected: isSelected }, void 0, false, { fileName: "[project]/Documents/go-new/chinese-family-tree/components/tree/family-node.tsx", - lineNumber: 136, + lineNumber: 140, columnNumber: 7 }, this), - /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$lucide$2d$react$40$0$2e$454$2e$0_react$40$19$2e$2$2e$0$2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$heart$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__$3c$export__default__as__Heart$3e$__["Heart"], { - className: "h-4 w-4 text-red-400 flex-shrink-0" - }, void 0, false, { - fileName: "[project]/Documents/go-new/chinese-family-tree/components/tree/family-node.tsx", - lineNumber: 137, - columnNumber: 7 - }, this), - /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(PersonCard, { - member: spouse, - isSpouse: true, - onSelect: onSelect, - relationMode: relationMode - }, void 0, false, { - fileName: "[project]/Documents/go-new/chinese-family-tree/components/tree/family-node.tsx", - lineNumber: 138, - columnNumber: 7 - }, this) + spouseList.map((spouseMember, index)=>/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { + className: "flex items-center gap-2", + children: [ + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$lucide$2d$react$40$0$2e$454$2e$0_react$40$19$2e$2$2e$0$2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$heart$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__$3c$export__default__as__Heart$3e$__["Heart"], { + className: "h-4 w-4 text-red-400 flex-shrink-0" + }, void 0, false, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/tree/family-node.tsx", + lineNumber: 143, + columnNumber: 11 + }, this), + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(PersonCard, { + member: spouseMember, + isSpouse: true, + onSelect: onSelect, + relationMode: relationMode + }, void 0, false, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/tree/family-node.tsx", + lineNumber: 144, + columnNumber: 11 + }, this) + ] + }, spouseMember.id, true, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/tree/family-node.tsx", + lineNumber: 142, + columnNumber: 9 + }, this)) ] }, void 0, true, { fileName: "[project]/Documents/go-new/chinese-family-tree/components/tree/family-node.tsx", - lineNumber: 135, + lineNumber: 139, columnNumber: 5 }, this); } @@ -1666,8 +1679,8 @@ function TreeLayout({ rootId, onSelectMember, relationMode = false, selectedMemb const member = getMember(memberId); if (!member) return null; const hasChildren = member.childrenIds && member.childrenIds.length > 0; - // 获取配偶(取第一个配偶) - const spouse = member.spouseIds && member.spouseIds.length > 0 ? getMember(member.spouseIds[0]) : undefined; + // 获取所有配偶 + const spouses = member.spouseIds && member.spouseIds.length > 0 ? member.spouseIds.map((id)=>getMember(id)).filter(Boolean) : []; return /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { className: "flex flex-col items-center", children: [ @@ -1682,7 +1695,7 @@ function TreeLayout({ rootId, onSelectMember, relationMode = false, selectedMemb className: "relative z-10", children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$tree$2f$family$2d$node$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["FamilyNode"], { member: member, - spouse: spouse, + spouses: spouses, onSelect: handleNodeClick, isRoot: isRoot, isHighlighted: member.id === highlightedMemberId, @@ -1704,13 +1717,30 @@ function TreeLayout({ rootId, onSelectMember, relationMode = false, selectedMemb marginTop: `${VERTICAL_GAP}px`, gap: `${HORIZONTAL_GAP}px` }, - children: member.childrenIds.map((childId)=>/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(TreeNode, { - memberId: childId - }, childId, false, { - fileName: "[project]/Documents/go-new/chinese-family-tree/components/tree/tree-layout.tsx", - lineNumber: 181, - columnNumber: 15 - }, this)) + children: (()=>{ + // 对子节点进行排序:始祖排最左边,其他按出生日期排序 + const sortedChildren = [ + ...member.childrenIds + ].sort((aId, bId)=>{ + const a = getMember(aId); + const b = getMember(bId); + if (!a || !b) return 0; + // 始祖永远排最左边 + const aIsFounder = a.tags?.includes('始祖') || a.generation === 1; + const bIsFounder = b.tags?.includes('始祖') || b.generation === 1; + if (aIsFounder && !bIsFounder) return -1; + if (!aIsFounder && bIsFounder) return 1; + // 其他按出生日期排序 + return (a.birthDate || "").localeCompare(b.birthDate || ""); + }); + return sortedChildren.map((childId)=>/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(TreeNode, { + memberId: childId + }, childId, false, { + fileName: "[project]/Documents/go-new/chinese-family-tree/components/tree/tree-layout.tsx", + lineNumber: 198, + columnNumber: 17 + }, this)); + })() }, void 0, false, { fileName: "[project]/Documents/go-new/chinese-family-tree/components/tree/tree-layout.tsx", lineNumber: 173, @@ -1747,24 +1777,24 @@ function TreeLayout({ rootId, onSelectMember, relationMode = false, selectedMemb // 跳过无效的连线(宽度或高度为0) if (width <= 0 || height <= 0) return null; return /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { - className: "absolute bg-foreground/25", + className: "absolute bg-black", style: { left: `${left}px`, top: `${top}px`, width: `${width}px`, height: `${height}px`, - transform: isHorizontal ? 'scaleY(0.3)' : 'scaleX(0.3)', + transform: isHorizontal ? 'scaleY(0.5)' : 'scaleX(0.5)', transformOrigin: 'top left' } }, index, false, { fileName: "[project]/Documents/go-new/chinese-family-tree/components/tree/tree-layout.tsx", - lineNumber: 206, + lineNumber: 224, columnNumber: 15 }, this); }) }, void 0, false, { fileName: "[project]/Documents/go-new/chinese-family-tree/components/tree/tree-layout.tsx", - lineNumber: 193, + lineNumber: 211, columnNumber: 9 }, this), /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { @@ -1777,23 +1807,23 @@ function TreeLayout({ rootId, onSelectMember, relationMode = false, selectedMemb isRoot: true }, void 0, false, { fileName: "[project]/Documents/go-new/chinese-family-tree/components/tree/tree-layout.tsx", - lineNumber: 224, + lineNumber: 242, columnNumber: 11 }, this) }, void 0, false, { fileName: "[project]/Documents/go-new/chinese-family-tree/components/tree/tree-layout.tsx", - lineNumber: 223, + lineNumber: 241, columnNumber: 9 }, this) ] }, void 0, true, { fileName: "[project]/Documents/go-new/chinese-family-tree/components/tree/tree-layout.tsx", - lineNumber: 191, + lineNumber: 209, columnNumber: 7 }, this) }, void 0, false, { fileName: "[project]/Documents/go-new/chinese-family-tree/components/tree/tree-layout.tsx", - lineNumber: 190, + lineNumber: 208, columnNumber: 5 }, this); } @@ -1873,11 +1903,8 @@ const D3OrgChartFlowComponent = /*#__PURE__*/ (0, __TURBOPACK__imported__module_ visited.add(currentId); const member = members[currentId]; if (!member) continue; - // 获取配偶信息,确保配偶存在于members中 - let spouse = null; - if (member.spouseIds?.[0] && members[member.spouseIds[0]]) { - spouse = members[member.spouseIds[0]]; - } + // 获取所有配偶信息,确保配偶存在于members中 + const spouses = member.spouseIds?.map((id)=>members[id]).filter(Boolean) || []; // 确定父节点ID - 只有根节点的parentId为null let parentId = null; if (currentId !== rootId) { @@ -1911,8 +1938,8 @@ const D3OrgChartFlowComponent = /*#__PURE__*/ (0, __TURBOPACK__imported__module_ birthPlace: member.birthPlace || '', gender: member.gender === 'MALE' ? '男' : '女', avatarImageId: member.avatarImageId, - spouseName: spouse?.fullName || '', - spouseId: spouse?.id || null, + spouseName: spouses.length > 0 ? spouses.map((s)=>s.fullName).join(', ') : '', + spouseId: spouses.length > 0 ? spouses[0].id : null, hasChildren: Object.values(members).some((m)=>m.fatherId === member.id || m.motherId === member.id), ageText: ageText }); @@ -2181,12 +2208,12 @@ const D3OrgChartFlowComponent = /*#__PURE__*/ (0, __TURBOPACK__imported__module_ } }, void 0, false, { fileName: "[project]/Documents/go-new/chinese-family-tree/components/tree/d3-org-chart-flow.tsx", - lineNumber: 446, + lineNumber: 445, columnNumber: 7 }, ("TURBOPACK compile-time value", void 0)) }, `d3-chart-${rootId}`, false, { fileName: "[project]/Documents/go-new/chinese-family-tree/components/tree/d3-org-chart-flow.tsx", - lineNumber: 444, + lineNumber: 443, columnNumber: 5 }, ("TURBOPACK compile-time value", void 0)); }); diff --git a/.next/dev/server/chunks/ssr/[root-of-the-server]__a5d92604._.js.map b/.next/dev/server/chunks/ssr/[root-of-the-server]__a5d92604._.js.map index f59b2ef8..364848e3 100644 --- a/.next/dev/server/chunks/ssr/[root-of-the-server]__a5d92604._.js.map +++ b/.next/dev/server/chunks/ssr/[root-of-the-server]__a5d92604._.js.map @@ -7,12 +7,12 @@ {"offset": {"line": 332, "column": 0}, "map": {"version":3,"sources":["file:///Users/freedak/Documents/go-new/chinese-family-tree/components/site-header.tsx"],"sourcesContent":["\"use client\"\n\nimport Link from \"next/link\"\nimport { BookOpen, Search, Bell, Settings, LogOut, User, ChevronDown, Plus, Trash2, Network, LayoutGrid, Calculator } from \"lucide-react\"\nimport { Button } from \"@/components/ui/button\"\nimport { Input } from \"@/components/ui/input\"\nimport { Avatar, AvatarFallback, AvatarImage } from \"@/components/ui/avatar\"\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuLabel,\n DropdownMenuSeparator,\n DropdownMenuTrigger,\n} from \"@/components/ui/dropdown-menu\"\nimport { useFamily } from \"@/context/family-context\"\nimport { useState, useRef, useEffect, useCallback } from \"react\"\nimport { useRouter, usePathname, useSearchParams } from \"next/navigation\"\nimport { useSession, signOut } from \"next-auth/react\"\nimport { useDialog } from \"@/components/ui/alert-dialog-custom\"\n\ninterface FamilyTree {\n id: string\n name: string\n description: string | null\n ownerId: string\n currentUserRole?: \"OWNER\" | \"EDITOR\" | \"VIEWER\"\n}\n\nexport function SiteHeader() {\n const { searchMembers, searchResults } = useFamily()\n const { data: session, status } = useSession()\n const { showAlert, showConfirm, showPrompt } = useDialog()\n const pathname = usePathname()\n const searchParams = useSearchParams()\n const [searchQuery, setSearchQuery] = useState(\"\")\n const [showResults, setShowResults] = useState(false)\n const [familyTrees, setFamilyTrees] = useState([])\n const [currentTree, setCurrentTree] = useState(null)\n const [deletingTreeId, setDeletingTreeId] = useState(null)\n const searchRef = useRef(null)\n const router = useRouter()\n \n // 获取当前视图模式\n const currentViewMode = searchParams.get('view') || 'traditional'\n const isTreePage = pathname === '/tree'\n\n // 生成带有 treeId 的 URL\n const getUrlWithTreeId = (path: string) => {\n if (currentTree?.id) {\n return `${path}?treeId=${currentTree.id}`\n }\n return path\n }\n\n // 切换视图模式\n const handleViewModeChange = (mode: string) => {\n const params = new URLSearchParams(searchParams.toString())\n params.set('view', mode)\n if (currentTree?.id) {\n params.set('treeId', currentTree.id)\n }\n router.push(`${pathname}?${params.toString()}`)\n }\n\n const getRoleBadge = (role?: string) => {\n switch (role) {\n case \"OWNER\":\n return 所有者\n case \"EDITOR\":\n return 编辑\n case \"VIEWER\":\n return 查看\n default:\n return null\n }\n }\n\n const handleSignOut = async () => {\n await signOut({ callbackUrl: \"/auth/signin\" })\n }\n\n // 获取用户名首字母作为头像\n const getUserInitial = () => {\n if (session?.user?.name) {\n return session.user.name.charAt(0).toUpperCase()\n }\n if (session?.user?.email) {\n return session.user.email.charAt(0).toUpperCase()\n }\n return \"U\"\n }\n\n // 删除家族树\n const handleDeleteTree = async (tree: FamilyTree, e: React.MouseEvent) => {\n e.stopPropagation() // 阻止触发选择事件\n\n // 检查权限\n if (tree.ownerId !== session?.user?.id) {\n await showAlert('只有家族树的创建者才能删除', '权限不足')\n return\n }\n\n const confirmText = `确定要删除家族树\"${tree.name}\"吗?\\n\\n此操作将永久删除所有成员、活动日志和协作者数据,且不可撤销!`\n const confirmed = await showConfirm(confirmText, '删除家族树', 'destructive')\n if (!confirmed) {\n return\n }\n\n // 二次确认\n const finalConfirm = await showPrompt(\n `请输入家族树名称\"${tree.name}\"以确认删除:`,\n '',\n '确认删除'\n )\n if (finalConfirm !== tree.name) {\n await showAlert('名称不匹配,删除已取消', '操作已取消')\n return\n }\n\n setDeletingTreeId(tree.id)\n try {\n const response = await fetch(`/api/trees/${tree.id}`, {\n method: 'DELETE',\n })\n\n if (!response.ok) {\n const error = await response.json()\n throw new Error(error.error || '删除失败')\n }\n\n // 刷新家族树列表\n await loadFamilyTrees()\n \n // 如果删除的是当前树,跳转到首页\n if (currentTree?.id === tree.id) {\n window.location.href = '/'\n }\n } catch (error) {\n console.error('删除家族树失败:', error)\n await showAlert('删除失败:' + (error as Error).message, '错误')\n } finally {\n setDeletingTreeId(null)\n }\n }\n\n // 获取家族树列表\n const loadFamilyTrees = useCallback(() => {\n if (!session?.user?.id || status !== 'authenticated') return\n\n const controller = new AbortController()\n \n fetch('/api/trees', { signal: controller.signal })\n .then(res => {\n if (!res.ok) throw new Error(`HTTP error! status: ${res.status}`)\n return res.json()\n })\n .then(data => {\n if (data.trees) {\n setFamilyTrees(data.trees)\n // 如果 URL 中有 treeId,使用该树,否则使用第一个\n const urlParams = new URLSearchParams(window.location.search)\n const treeId = urlParams.get('treeId')\n if (treeId) {\n const tree = data.trees.find((t: FamilyTree) => t.id === treeId)\n if (tree) {\n setCurrentTree(tree)\n } else if (data.trees.length > 0) {\n setCurrentTree(data.trees[0])\n }\n } else if (data.trees.length > 0) {\n setCurrentTree(data.trees[0])\n }\n }\n })\n .catch(err => {\n // 忽略 abort 错误和 fetch 错误(可能是页面切换导致的)\n if (err.name !== 'AbortError' && err.message !== 'Failed to fetch') {\n console.error('获取家族树列表失败:', err)\n }\n })\n \n return () => controller.abort()\n }, [session?.user?.id, status])\n\n useEffect(() => {\n loadFamilyTrees()\n }, [loadFamilyTrees])\n\n // 监听路由变化,刷新家族树列表\n useEffect(() => {\n const handleRouteChange = () => {\n loadFamilyTrees()\n }\n \n window.addEventListener('focus', handleRouteChange)\n return () => window.removeEventListener('focus', handleRouteChange)\n }, [loadFamilyTrees])\n\n // 点击外部关闭搜索结果\n useEffect(() => {\n function handleClickOutside(event: MouseEvent) {\n if (searchRef.current && !searchRef.current.contains(event.target as Node)) {\n setShowResults(false)\n }\n }\n document.addEventListener(\"mousedown\", handleClickOutside)\n return () => document.removeEventListener(\"mousedown\", handleClickOutside)\n }, [])\n\n const handleSearch = (query: string) => {\n setSearchQuery(query)\n searchMembers(query)\n setShowResults(query.length > 0)\n }\n\n const handleSelectMember = (memberId: string) => {\n router.push(`/members/${memberId}`)\n setSearchQuery(\"\")\n setShowResults(false)\n }\n\n return (\n
\n
\n
\n \n
\n \n
\n 华夏谱\n \n \n {/* 家族树选择器 */}\n {session && familyTrees.length > 0 && (\n \n \n \n \n \n 我的家族树\n \n {familyTrees.map((tree) => (\n {\n setCurrentTree(tree)\n // 保持当前路径,只更新 treeId 参数\n const currentPath = window.location.pathname\n router.push(`${currentPath}?treeId=${tree.id}`)\n }}\n className=\"cursor-pointer flex items-center justify-between group\"\n >\n
\n {tree.name}\n {getRoleBadge(tree.currentUserRole)}\n
\n
\n {currentTree?.id === tree.id && (\n \n )}\n {tree.ownerId === session?.user?.id && (\n handleDeleteTree(tree, e)}\n disabled={deletingTreeId === tree.id}\n >\n \n \n )}\n
\n \n ))}\n \n router.push('/trees/new')}\n className=\"cursor-pointer text-primary\"\n >\n \n 创建新家族树\n \n
\n
\n )}\n
\n\n \n\n
\n \n\n \n\n \n \n \n\n \n \n \n\n {status === \"loading\" ? (\n \n ...\n \n ) : session ? (\n \n \n \n \n \n \n
\n

{session.user?.name || \"用户\"}

\n

\n {session.user?.email}\n

\n
\n
\n \n \n \n \n 系统设置\n \n \n \n \n \n 退出登录\n \n
\n
\n ) : (\n \n \n \n )}\n
\n
\n
\n )\n}\n"],"names":[],"mappings":"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"}}, {"offset": {"line": 1221, "column": 0}, "map": {"version":3,"sources":["file:///Users/freedak/Documents/go-new/chinese-family-tree/lib/db.ts"],"sourcesContent":["import Dexie, { type Table } from \"dexie\"\nimport type { FamilyMember } from \"@/types/family\"\n\nexport interface GlobalSettings {\n key: string\n value: any\n}\n\nexport interface StoredImage {\n id: string\n blob: Blob\n mimeType: string\n createdAt: string\n}\n\nexport interface ActivityLog {\n id: string\n action: \"create\" | \"update\" | \"delete\" | \"import\" | \"export\"\n entityType: \"member\" | \"photo\" | \"story\" | \"settings\"\n entityId?: string\n entityName?: string\n changes?: any\n timestamp: string\n userId?: string\n userName?: string\n}\n\nexport class FamilyTreeDB extends Dexie {\n members!: Table\n settings!: Table\n images!: Table\n activityLogs!: Table\n\n constructor() {\n super(\"FamilyTreeDB\")\n this.version(1).stores({\n members: \"id, fullName, fatherId, motherId, [fatherId+motherId]\", // Index for searching\n settings: \"key\", // Key-value store for rootId etc.\n images: \"id\", // Store images by ID\n })\n this.version(2).stores({\n members: \"id, fullName, fatherId, motherId, [fatherId+motherId]\", // Index for searching\n settings: \"key\", // Key-value store for rootId etc.\n images: \"id\", // Store images by ID\n activityLogs: \"id, timestamp, action, entityType, entityId\",\n })\n }\n}\n\nexport const db = new FamilyTreeDB()\n"],"names":[],"mappings":";;;;;;AAAA;;AA2BO,MAAM,qBAAqB,+PAAK;IACrC,QAA6B;IAC7B,SAAgC;IAChC,OAA2B;IAC3B,aAAiC;IAEjC,aAAc;QACZ,KAAK,CAAC;QACN,IAAI,CAAC,OAAO,CAAC,GAAG,MAAM,CAAC;YACrB,SAAS;YACT,UAAU;YACV,QAAQ;QACV;QACA,IAAI,CAAC,OAAO,CAAC,GAAG,MAAM,CAAC;YACrB,SAAS;YACT,UAAU;YACV,QAAQ;YACR,cAAc;QAChB;IACF;AACF;AAEO,MAAM,KAAK,IAAI"}}, {"offset": {"line": 1254, "column": 0}, "map": {"version":3,"sources":["file:///Users/freedak/Documents/go-new/chinese-family-tree/hooks/use-avatar-cache.ts"],"sourcesContent":["import { useEffect, useState } from 'react'\nimport { db } from '@/lib/db'\n\n// 全局图片缓存\nconst avatarCache = new Map()\n\nexport function useAvatarCache(avatarImageId?: string) {\n const [avatarUrl, setAvatarUrl] = useState(\n avatarImageId ? avatarCache.get(avatarImageId) : undefined\n )\n const [isLoading, setIsLoading] = useState(false)\n\n useEffect(() => {\n if (!avatarImageId) {\n setAvatarUrl(undefined)\n return\n }\n\n // 如果缓存中已存在,直接使用\n const cached = avatarCache.get(avatarImageId)\n if (cached) {\n setAvatarUrl(cached)\n return\n }\n\n // 从数据库加载\n let isMounted = true\n setIsLoading(true)\n\n db.images\n .get(avatarImageId)\n .then((image) => {\n if (image && isMounted) {\n const url = URL.createObjectURL(image.blob)\n avatarCache.set(avatarImageId, url)\n setAvatarUrl(url)\n }\n })\n .catch((error) => {\n console.error('Failed to load avatar:', error)\n })\n .finally(() => {\n if (isMounted) {\n setIsLoading(false)\n }\n })\n\n return () => {\n isMounted = false\n }\n }, [avatarImageId])\n\n return { avatarUrl, isLoading }\n}\n\n// 清理缓存的工具函数(可选)\nexport function clearAvatarCache() {\n avatarCache.forEach((url) => URL.revokeObjectURL(url))\n avatarCache.clear()\n}\n"],"names":[],"mappings":";;;;;;AAAA;AACA;;;AAEA,SAAS;AACT,MAAM,cAAc,IAAI;AAEjB,SAAS,eAAe,aAAsB;IACnD,MAAM,CAAC,WAAW,aAAa,GAAG,IAAA,uYAAQ,EACxC,gBAAgB,YAAY,GAAG,CAAC,iBAAiB;IAEnD,MAAM,CAAC,WAAW,aAAa,GAAG,IAAA,uYAAQ,EAAC;IAE3C,IAAA,wYAAS,EAAC;QACR,IAAI,CAAC,eAAe;YAClB,aAAa;YACb;QACF;QAEA,gBAAgB;QAChB,MAAM,SAAS,YAAY,GAAG,CAAC;QAC/B,IAAI,QAAQ;YACV,aAAa;YACb;QACF;QAEA,SAAS;QACT,IAAI,YAAY;QAChB,aAAa;QAEb,sKAAE,CAAC,MAAM,CACN,GAAG,CAAC,eACJ,IAAI,CAAC,CAAC;YACL,IAAI,SAAS,WAAW;gBACtB,MAAM,MAAM,IAAI,eAAe,CAAC,MAAM,IAAI;gBAC1C,YAAY,GAAG,CAAC,eAAe;gBAC/B,aAAa;YACf;QACF,GACC,KAAK,CAAC,CAAC;YACN,QAAQ,KAAK,CAAC,0BAA0B;QAC1C,GACC,OAAO,CAAC;YACP,IAAI,WAAW;gBACb,aAAa;YACf;QACF;QAEF,OAAO;YACL,YAAY;QACd;IACF,GAAG;QAAC;KAAc;IAElB,OAAO;QAAE;QAAW;IAAU;AAChC;AAGO,SAAS;IACd,YAAY,OAAO,CAAC,CAAC,MAAQ,IAAI,eAAe,CAAC;IACjD,YAAY,KAAK;AACnB"}}, - {"offset": {"line": 1315, "column": 0}, "map": {"version":3,"sources":["file:///Users/freedak/Documents/go-new/chinese-family-tree/components/tree/family-node.tsx"],"sourcesContent":["\"use client\"\n\nimport type { FamilyMember } from \"@/types/family\"\nimport { cn } from \"@/lib/utils\"\nimport { useAvatarCache } from \"@/hooks/use-avatar-cache\"\nimport { CircleUser, CircleUserRound, Heart } from \"lucide-react\"\n\ninterface FamilyNodeProps {\n member: FamilyMember\n spouse?: FamilyMember\n isRoot?: boolean\n onSelect?: (member: FamilyMember) => void\n isHighlighted?: boolean\n relationMode?: boolean\n isSelected?: boolean\n}\n\n// 格式化日期显示(只显示年份)\nfunction formatYear(dateString?: string): string {\n if (!dateString) return ''\n const year = dateString.split('-')[0]\n return year\n}\n\n// 计算年龄\nfunction calculateAge(birthDate?: string, deathDate?: string): number | null {\n if (!birthDate) return null\n \n const birth = new Date(birthDate)\n const end = deathDate ? new Date(deathDate) : new Date()\n \n let age = end.getFullYear() - birth.getFullYear()\n const monthDiff = end.getMonth() - birth.getMonth()\n \n if (monthDiff < 0 || (monthDiff === 0 && end.getDate() < birth.getDate())) {\n age--\n }\n \n return age\n}\n\n// 单个人员卡片组件\nfunction PersonCard({ member, isRoot, isSpouse, onSelect, isHighlighted, relationMode, isSelected }: { member: FamilyMember; isRoot?: boolean; isSpouse?: boolean; onSelect?: (member: FamilyMember) => void; isHighlighted?: boolean; relationMode?: boolean; isSelected?: boolean }) {\n const { avatarUrl: avatarBlobUrl } = useAvatarCache(member?.avatarImageId)\n \n const birthYear = formatYear(member.birthDate)\n const deathYear = formatYear(member.deathDate)\n const age = calculateAge(member.birthDate, member.deathDate)\n \n const lifeSpan = birthYear\n ? deathYear\n ? `${birthYear}-${deathYear}`\n : `${birthYear}-`\n : ''\n \n const ageText = age !== null\n ? member.deathDate\n ? `享年${age}岁`\n : `${age}岁`\n : ''\n \n return (\n onSelect?.(member)}\n >\n
\n {member.generation}世\n
\n\n
\n {avatarBlobUrl ? (\n \n ) : (\n member.gender === 'female' ? (\n \n ) : (\n \n )\n )}\n
\n\n
\n
{member.surname} {member.givenName}
\n {member.courtesyName && (\n
字 {member.courtesyName}
\n )}\n {lifeSpan && (\n
\n {lifeSpan}\n
\n )}\n {ageText && (\n
\n {ageText}\n
\n )}\n {member.phone && (\n
\n 📱 {member.phone}\n
\n )}\n
\n\n {member.deathDate && (\n
\n )}\n
\n )\n}\n\nexport function FamilyNode({ member, spouse, isRoot, onSelect, isHighlighted, relationMode, isSelected }: FamilyNodeProps) {\n if (!spouse) {\n return \n }\n \n // 有配偶时,并排显示\n return (\n
\n \n \n \n
\n )\n}\n"],"names":[],"mappings":"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"}}, - {"offset": {"line": 1531, "column": 0}, "map": {"version":3,"sources":["file:///Users/freedak/Documents/go-new/chinese-family-tree/components/tree/tree-layout.tsx"],"sourcesContent":["\"use client\"\nimport type { FamilyMember } from \"@/types/family\"\nimport { FamilyNode } from \"./family-node\"\nimport { useFamily } from \"@/context/family-context\"\nimport { useEffect, useRef, useState, useCallback } from \"react\"\nimport { useRouter } from \"next/navigation\"\n\ninterface TreeLayoutProps {\n rootId: string\n onSelectMember?: (member: FamilyMember) => void\n relationMode?: boolean\n selectedMembers?: string[]\n onMemberClick?: (memberId: string) => void\n}\n\ninterface Connection {\n from: { x: number; y: number }\n to: { x: number; y: number }\n type: 'vertical' | 'horizontal'\n}\n\nexport function TreeLayout({ \n rootId, \n onSelectMember,\n relationMode = false,\n selectedMembers = [],\n onMemberClick\n}: TreeLayoutProps) {\n const { getMember, treeData, highlightedMemberId } = useFamily()\n const root = getMember(rootId)\n const router = useRouter()\n const containerRef = useRef(null)\n const [connections, setConnections] = useState([])\n const nodeRefs = useRef>(new Map())\n\n // 节点间距配置\n const HORIZONTAL_GAP = 32 // 2rem = 32px\n const VERTICAL_GAP = 48 // 3rem = 48px\n const CONNECTOR_HEIGHT = 48 // 连接线垂直高度\n \n // 处理节点点击\n const handleNodeClick = useCallback((member: FamilyMember) => {\n if (relationMode && onMemberClick) {\n onMemberClick(member.id)\n } else {\n router.push(`/members/${member.id}`)\n }\n }, [relationMode, onMemberClick, router])\n\n // 计算所有连线位置\n const calculateConnections = useCallback(() => {\n const newConnections: Connection[] = []\n const containerRect = containerRef.current?.getBoundingClientRect()\n if (!containerRect) return\n\n // 检查是否有足够的节点已注册\n if (nodeRefs.current.size === 0) return\n\n nodeRefs.current.forEach((nodeElement, nodeId) => {\n const member = getMember(nodeId)\n if (!member || !member.childrenIds || member.childrenIds.length === 0) return\n\n const parentRect = nodeElement.getBoundingClientRect()\n const parentCenterX = parentRect.left + parentRect.width / 2 - containerRect.left\n const parentBottomY = parentRect.bottom - containerRect.top\n\n // 父节点到水平线的垂直连线\n const verticalLineY = parentBottomY + CONNECTOR_HEIGHT / 2\n newConnections.push({\n from: { x: parentCenterX, y: parentBottomY },\n to: { x: parentCenterX, y: verticalLineY },\n type: 'vertical'\n })\n\n // 获取所有子节点的位置\n const childPositions = member.childrenIds\n .map(childId => {\n const childElement = nodeRefs.current.get(childId)\n if (!childElement) return null\n const childRect = childElement.getBoundingClientRect()\n return {\n id: childId,\n centerX: childRect.left + childRect.width / 2 - containerRect.left,\n topY: childRect.top - containerRect.top\n }\n })\n .filter(Boolean) as Array<{ id: string; centerX: number; topY: number }>\n\n if (childPositions.length === 0) return\n\n // 如果有多个子节点,绘制水平连线\n if (childPositions.length > 1) {\n const leftmostX = Math.min(...childPositions.map(p => p.centerX))\n const rightmostX = Math.max(...childPositions.map(p => p.centerX))\n \n newConnections.push({\n from: { x: leftmostX, y: verticalLineY },\n to: { x: rightmostX, y: verticalLineY },\n type: 'horizontal'\n })\n }\n\n // 每个子节点的垂直连线\n childPositions.forEach(child => {\n newConnections.push({\n from: { x: child.centerX, y: verticalLineY },\n to: { x: child.centerX, y: child.topY },\n type: 'vertical'\n })\n })\n })\n\n setConnections(newConnections)\n }, [getMember])\n\n useEffect(() => {\n // 多次尝试计算,确保 DOM 完全渲染\n const timers: NodeJS.Timeout[] = []\n timers.push(setTimeout(calculateConnections, 50))\n timers.push(setTimeout(calculateConnections, 150))\n timers.push(setTimeout(calculateConnections, 300))\n timers.push(setTimeout(calculateConnections, 500))\n \n // 监听窗口大小变化\n window.addEventListener('resize', calculateConnections)\n \n return () => {\n timers.forEach(timer => clearTimeout(timer))\n window.removeEventListener('resize', calculateConnections)\n }\n }, [calculateConnections, treeData])\n\n if (!root) return null\n\n // 递归渲染树节点\n const TreeNode = ({ memberId, isRoot = false }: { memberId: string; isRoot?: boolean }) => {\n const member = getMember(memberId)\n if (!member) return null\n\n const hasChildren = member.childrenIds && member.childrenIds.length > 0\n \n // 获取配偶(取第一个配偶)\n const spouse = member.spouseIds && member.spouseIds.length > 0 \n ? getMember(member.spouseIds[0]) \n : undefined\n\n return (\n
\n {/* 节点本身 */}\n
{\n if (el) {\n nodeRefs.current.set(memberId, el)\n } else {\n nodeRefs.current.delete(memberId)\n }\n }}\n className=\"relative z-10\"\n >\n \n
\n\n {/* 子节点 */}\n {hasChildren && (\n
\n {member.childrenIds.map((childId) => (\n \n ))}\n
\n )}\n
\n )\n }\n\n return (\n
\n
\n {/* 连线层 - 使用 div 绘制 */}\n
\n {connections.map((conn, index) => {\n const isHorizontal = conn.type === 'horizontal'\n // 使用 1px 但通过 transform scale 缩小来实现细线\n const width = isHorizontal ? Math.abs(conn.to.x - conn.from.x) : 1\n const height = isHorizontal ? 1 : Math.abs(conn.to.y - conn.from.y)\n const left = Math.min(conn.from.x, conn.to.x)\n const top = Math.min(conn.from.y, conn.to.y)\n \n // 跳过无效的连线(宽度或高度为0)\n if (width <= 0 || height <= 0) return null\n \n return (\n \n )\n })}\n
\n\n {/* 树节点层 */}\n
\n \n
\n
\n
\n )\n}\n"],"names":[],"mappings":"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"}}, - {"offset": {"line": 1821, "column": 0}, "map": {"version":3,"sources":["file:///Users/freedak/Documents/go-new/chinese-family-tree/components/tree/d3-org-chart-flow.tsx"],"sourcesContent":["\"use client\"\n\nimport { useEffect, useRef, useState, forwardRef, useImperativeHandle, memo } from \"react\"\nimport * as d3 from \"d3\"\n// @ts-ignore - d3-org-chart没有TypeScript类型定义\nimport { OrgChart } from \"d3-org-chart\"\nimport { Download, FileText } from \"lucide-react\"\nimport type { FamilyMember } from \"@/types/family\"\nimport jsPDF from \"jspdf\"\nimport { db } from \"@/lib/db\"\n\ninterface D3OrgChartFlowProps {\n members: Record\n rootId: string\n onMemberClick?: (memberId: string) => void\n onExport?: () => void\n relationMode?: boolean\n selectedMembers?: string[]\n}\n\nexport interface D3OrgChartRef {\n exportPNG: () => void\n exportPDF: () => void\n expandAll: () => void\n collapseAll: () => void\n fitView: () => void\n}\n\ninterface ChartNode {\n id: string\n parentId: string | null\n name: string\n generation: string\n birthYear: string\n deathYear: string\n birthPlace: string\n gender: string\n avatarImageId: string | null | undefined\n spouseName: string\n spouseId: string | null\n hasChildren: boolean\n ageText: string\n}\n\n// 计算年龄\nfunction calculateAge(birthDate?: string, deathDate?: string): number | null {\n if (!birthDate) return null\n \n const birth = new Date(birthDate)\n const end = deathDate ? new Date(deathDate) : new Date()\n \n let age = end.getFullYear() - birth.getFullYear()\n const monthDiff = end.getMonth() - birth.getMonth()\n \n if (monthDiff < 0 || (monthDiff === 0 && end.getDate() < birth.getDate())) {\n age--\n }\n \n return age\n}\n\nconst D3OrgChartFlowComponent = forwardRef(\n ({ members, rootId, onMemberClick, onExport, relationMode = false, selectedMembers = [] }, ref) => {\n console.log('D3OrgChartFlow render, selectedMembers:', selectedMembers, 'relationMode:', relationMode)\n \n const chartRef = useRef(null)\n const chartInstanceRef = useRef(null)\n const [isReady, setIsReady] = useState(false)\n const [avatarCache, setAvatarCache] = useState>(new Map())\n\n // 转换数据格式\n const convertToChartData = (): ChartNode[] => {\n const chartNodes: ChartNode[] = []\n \n // 首先找到根节点(没有父节点的节点)\n const rootMember = members[rootId]\n if (!rootMember) return []\n \n // 使用BFS遍历,确保只包含从rootId开始的树\n const visited = new Set()\n const queue: string[] = [rootId]\n \n while (queue.length > 0) {\n const currentId = queue.shift()!\n if (visited.has(currentId)) continue\n \n visited.add(currentId)\n const member = members[currentId]\n if (!member) continue\n \n // 获取配偶信息,确保配偶存在于members中\n let spouse = null\n if (member.spouseIds?.[0] && members[member.spouseIds[0]]) {\n spouse = members[member.spouseIds[0]]\n }\n \n // 确定父节点ID - 只有根节点的parentId为null\n let parentId: string | null = null\n if (currentId !== rootId) {\n // 根据姓氏判断主线,优先选择同姓的父母\n const father = member.fatherId ? members[member.fatherId] : null\n const mother = member.motherId ? members[member.motherId] : null\n \n // 判断父母中谁是家族主线(同姓)\n const isFatherMainLine = father && member.surname === father.surname\n const isMotherMainLine = mother && member.surname === mother.surname\n \n if (isFatherMainLine) {\n parentId = member.fatherId || null\n } else if (isMotherMainLine) {\n parentId = member.motherId || null\n } else if (father) {\n // 如果都不同姓,优先选择父亲\n parentId = member.fatherId || null\n } else if (mother) {\n parentId = member.motherId || null\n }\n }\n \n // 计算年龄文本\n const age = calculateAge(member.birthDate, member.deathDate)\n const ageText = age !== null\n ? member.deathDate\n ? `享年${age}岁`\n : `${age}岁`\n : ''\n \n chartNodes.push({\n id: member.id,\n parentId: parentId,\n name: member.fullName,\n generation: `第${member.generation}世`,\n birthYear: member.birthDate ? new Date(member.birthDate).getFullYear().toString() : '',\n deathYear: member.deathDate ? new Date(member.deathDate).getFullYear().toString() : '',\n birthPlace: member.birthPlace || '',\n gender: member.gender === 'MALE' ? '男' : '女',\n avatarImageId: member.avatarImageId,\n spouseName: spouse?.fullName || '',\n spouseId: spouse?.id || null,\n hasChildren: Object.values(members).some(m => m.fatherId === member.id || m.motherId === member.id),\n ageText: ageText\n })\n \n // 添加子节点到队列\n Object.values(members).forEach(m => {\n if ((m.fatherId === currentId || m.motherId === currentId) && !visited.has(m.id)) {\n queue.push(m.id)\n }\n })\n }\n \n return chartNodes\n }\n\n // 加载所有成员的头像\n useEffect(() => {\n const loadAvatars = async () => {\n const cache = new Map()\n \n for (const member of Object.values(members)) {\n if (member.avatarImageId) {\n try {\n const image = await db.images.get(member.avatarImageId)\n if (image) {\n const url = URL.createObjectURL(image.blob)\n cache.set(member.avatarImageId, url)\n }\n } catch (error) {\n console.error(`Failed to load avatar for ${member.fullName}:`, error)\n }\n }\n }\n \n setAvatarCache(cache)\n }\n \n loadAvatars()\n \n // 清理函数\n return () => {\n avatarCache.forEach(url => URL.revokeObjectURL(url))\n }\n }, [members])\n\n useEffect(() => {\n if (!chartRef.current || !rootId) return\n\n // 清理旧的图表\n if (chartRef.current) {\n chartRef.current.innerHTML = ''\n }\n\n const data = convertToChartData()\n \n // 初始化图表\n const chart = new OrgChart()\n .container(chartRef.current)\n .data(data)\n .nodeWidth(() => 160)\n .nodeHeight(() => 120)\n .childrenMargin(() => 50)\n .compactMarginBetween(() => 35)\n .compactMarginPair(() => 35)\n .neighbourMargin(() => 35)\n .siblingsMargin(() => 35)\n .linkUpdate(function (d: any, i: any, arr: any) {\n // 加深连线颜色\n d3.select(arr[i])\n .attr('stroke', '#475569')\n .attr('stroke-width', 2.5)\n })\n .buttonContent(({ node }: any) => {\n return `
${node.children ? `` : ``} ${node.data._directSubordinates || 0}
`\n })\n .nodeContent((d: any) => {\n const node = d.data\n const color = node.gender === '男' ? '#3b82f6' : '#ec4899'\n const bgColor = node.gender === '男' ? '#dbeafe' : '#fce7f3'\n \n // 获取头像URL\n const avatarUrl = node.avatarImageId ? avatarCache.get(node.avatarImageId) : null\n \n // 检查是否被选中\n const isSelected = selectedMembers.includes(node.id)\n \n return `\n
\n
\n
\n ${avatarUrl \n ? `\"${node.name}\"`\n : node.gender === '女'\n ? ``\n : ``\n }\n
\n
\n
\n ${node.name}\n ${isSelected ? `` : ''}\n
\n
\n ${node.generation}\n
\n
\n
\n \n
\n ${node.birthYear ? `
\n ${node.birthYear}${node.deathYear ? ` - ${node.deathYear}` : ''}\n ${node.ageText ? `${node.ageText}` : ''}\n
` : ''}\n ${node.birthPlace ? `
\n ${node.birthPlace}\n
` : ''}\n
\n \n ${node.spouseName && node.spouseId ? `\n
\n 配偶: ${node.spouseName}\n
\n ` : ''}\n \n ${node.deathYear ? `\n
\n ` : ''}\n
\n `\n })\n .onNodeClick((d: any) => {\n if (onMemberClick && d) {\n // d3-org-chart传递的是节点数据对象,需要提取id\n const nodeId = typeof d === 'string' ? d : (d.data?.id || d.id)\n if (nodeId) {\n onMemberClick(nodeId)\n }\n }\n })\n .render()\n .expandAll() // 初始化时展开所有节点\n\n // 添加配偶区域点击事件监听\n setTimeout(() => {\n const spouseAreas = chartRef.current?.querySelectorAll('.spouse-area')\n spouseAreas?.forEach((area) => {\n area.addEventListener('click', (e) => {\n e.stopPropagation() // 阻止事件冒泡到节点\n const spouseId = (area as HTMLElement).getAttribute('data-spouse-id')\n if (spouseId && onMemberClick) {\n onMemberClick(spouseId)\n }\n })\n })\n }, 100)\n\n chartInstanceRef.current = chart\n setIsReady(true)\n\n return () => {\n // 清理\n if (chartRef.current) {\n chartRef.current.innerHTML = ''\n }\n }\n }, [members, rootId, onMemberClick, avatarCache])\n\n // 监听selectedMembers变化,动态显示/隐藏勾选图标\n // 逻辑已移至tree/page.tsx以避免组件重新渲染\n \n // 导出PNG\n const handleExportPNG = () => {\n if (!chartInstanceRef.current) return\n\n chartInstanceRef.current.exportImg({\n save: true,\n full: true,\n onLoad: () => {\n onExport?.()\n }\n })\n }\n\n // 导出PDF\n const handleExportPDF = () => {\n if (!chartInstanceRef.current) return\n\n chartInstanceRef.current.exportImg({\n save: false,\n full: true,\n onLoad: (base64: string) => {\n const pdf = new jsPDF({\n orientation: 'landscape',\n unit: 'px',\n format: 'a4'\n })\n \n const img = new Image()\n img.src = base64\n img.onload = function () {\n const imgWidth = img.width\n const imgHeight = img.height\n const pdfWidth = pdf.internal.pageSize.getWidth()\n const pdfHeight = pdf.internal.pageSize.getHeight()\n \n // 计算缩放比例以适应页面\n const ratio = Math.min(pdfWidth / imgWidth, pdfHeight / imgHeight)\n const scaledWidth = imgWidth * ratio\n const scaledHeight = imgHeight * ratio\n \n // 居中放置\n const x = (pdfWidth - scaledWidth) / 2\n const y = (pdfHeight - scaledHeight) / 2\n \n pdf.addImage(img, 'PNG', x, y, scaledWidth, scaledHeight)\n pdf.save(`家谱图-${new Date().toISOString().split('T')[0]}.pdf`)\n onExport?.()\n }\n }\n })\n }\n\n // 展开所有节点\n const handleExpandAll = () => {\n if (!chartInstanceRef.current) return\n chartInstanceRef.current.expandAll()\n }\n\n // 折叠所有节点\n const handleCollapseAll = () => {\n if (!chartInstanceRef.current) return\n chartInstanceRef.current.collapseAll()\n }\n\n // 适应视图\n const handleFitView = () => {\n if (!chartInstanceRef.current) return\n chartInstanceRef.current.fit()\n }\n\n // 暴露方法给父组件\n useImperativeHandle(ref, () => ({\n exportPNG: handleExportPNG,\n exportPDF: handleExportPDF,\n expandAll: handleExpandAll,\n collapseAll: handleCollapseAll,\n fitView: handleFitView,\n }))\n\n return (\n
\n {/* 图表容器 */}\n
\n
\n )\n})\n\nD3OrgChartFlowComponent.displayName = 'D3OrgChartFlow'\n\n// 使用memo优化,避免不必要的重新渲染\nexport const D3OrgChartFlow = memo(D3OrgChartFlowComponent, (prevProps, nextProps) => {\n return prevProps.rootId === nextProps.rootId && \n prevProps.members === nextProps.members\n})\n"],"names":[],"mappings":"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"}}, - {"offset": {"line": 2200, "column": 0}, "map": {"version":3,"sources":["file:///Users/freedak/Documents/go-new/chinese-family-tree/lib/relationship-calculator.ts"],"sourcesContent":["import relationship from 'relationship.js'\nimport type { FamilyMember } from '@/types/family'\n\n/**\n * 家族关系计算器\n * 使用 relationship.js 库计算中文亲属关系\n */\nexport class RelationshipCalculator {\n private members: Map\n\n constructor(members: FamilyMember[]) {\n this.members = new Map(members.map(m => [m.id, m]))\n }\n\n /**\n * 计算两个成员之间的关系\n * @param fromId 起始成员ID(成员A)\n * @param toId 目标成员ID(成员B)\n * @returns 关系描述(toId 对 fromId 的称谓,即B是A的XXX)\n */\n getRelationship(fromId: string, toId: string): RelationshipResult {\n if (fromId === toId) {\n return {\n term: '本人',\n path: '',\n success: true\n }\n }\n\n const fromMember = this.members.get(fromId)\n const toMember = this.members.get(toId)\n\n if (!fromMember || !toMember) {\n return {\n term: '未知',\n path: '',\n success: false,\n error: '成员不存在'\n }\n }\n\n // 构建关系路径(从 fromId 到 toId)\n const path = this.buildRelationPath(fromId, toId)\n \n if (!path) {\n return {\n term: '无血缘关系',\n path: '',\n success: false\n }\n }\n\n // 将路径转换为中文\n const chinesePath = this.pathToChineseText(path)\n \n // 使用 relationship.js 计算关系\n try {\n // 获取fromId成员的性别(从谁的角度看关系)\n const fromMemberGender = fromMember.gender === 'FEMALE' ? 0 : 1\n \n // 计算关系(toId 对 fromId 的称谓)\n const result = relationship({\n text: chinesePath,\n target: '',\n sex: fromMemberGender, // 传入fromId的性别(从谁的角度看)\n reverse: true // 使用反向,因为路径是从A到B,但我们要的是B对A的称谓\n })\n \n const term = Array.isArray(result) && result.length > 0 ? result[0] : '亲戚'\n \n return {\n term,\n path: chinesePath,\n success: true\n }\n } catch (error) {\n return {\n term: '亲戚',\n path: chinesePath,\n success: true\n }\n }\n }\n\n /**\n * 构建关系路径字符串\n * 例如:'f' = 父亲, 'm' = 母亲, 'h' = 丈夫, 'w' = 妻子\n * 'ob' = 哥哥, 'lb' = 弟弟, 'os' = 姐姐, 'ls' = 妹妹\n */\n private buildRelationPath(fromId: string, toId: string): string | null {\n // 使用BFS查找最短路径\n const queue: Array<{ id: string; path: string }> = [{ id: fromId, path: '' }]\n const visited = new Set()\n\n while (queue.length > 0) {\n const { id, path } = queue.shift()!\n\n if (id === toId) {\n return path\n }\n\n if (visited.has(id)) continue\n visited.add(id)\n\n const member = this.members.get(id)\n if (!member) continue\n\n // 向上:父亲\n if (member.fatherId && !visited.has(member.fatherId)) {\n queue.push({ id: member.fatherId, path: path + 'f' })\n }\n\n // 向上:母亲\n if (member.motherId && !visited.has(member.motherId)) {\n queue.push({ id: member.motherId, path: path + 'm' })\n }\n\n // 配偶关系\n if (member.spouseIds) {\n for (const spouseId of member.spouseIds) {\n if (!visited.has(spouseId)) {\n const spouse = this.members.get(spouseId)\n if (spouse) {\n const spousePath = member.gender === 'MALE' ? 'w' : 'h'\n queue.push({ id: spouseId, path: path + spousePath })\n }\n }\n }\n }\n\n // 向下:子女\n if (member.childrenIds) {\n for (const childId of member.childrenIds) {\n if (!visited.has(childId)) {\n const child = this.members.get(childId)\n if (child) {\n const childPath = child.gender === 'MALE' ? 's' : 'd'\n queue.push({ id: childId, path: path + childPath })\n }\n }\n }\n }\n\n // 兄弟姐妹(通过父母查找)\n if (member.fatherId || member.motherId) {\n const siblings = this.getSiblings(id)\n for (const siblingId of siblings) {\n if (!visited.has(siblingId)) {\n const sibling = this.members.get(siblingId)\n if (sibling) {\n // 需要比较年龄确定是哥哥/弟弟/姐姐/妹妹\n const siblingPath = this.getSiblingPath(member, sibling)\n queue.push({ id: siblingId, path: path + siblingPath })\n }\n }\n }\n }\n }\n\n return null\n }\n\n /**\n * 获取兄弟姐妹\n */\n private getSiblings(memberId: string): string[] {\n const member = this.members.get(memberId)\n if (!member) return []\n\n const siblings: string[] = []\n\n // 通过父亲查找\n if (member.fatherId) {\n const father = this.members.get(member.fatherId)\n if (father?.childrenIds) {\n siblings.push(...father.childrenIds.filter(id => id !== memberId))\n }\n }\n\n // 通过母亲查找\n if (member.motherId) {\n const mother = this.members.get(member.motherId)\n if (mother?.childrenIds) {\n for (const childId of mother.childrenIds) {\n if (childId !== memberId && !siblings.includes(childId)) {\n siblings.push(childId)\n }\n }\n }\n }\n\n return siblings\n }\n\n /**\n * 获取兄弟姐妹关系路径\n */\n private getSiblingPath(from: FamilyMember, to: FamilyMember): string {\n const fromAge = this.getAge(from)\n const toAge = this.getAge(to)\n\n if (to.gender === 'MALE') {\n // 男性:哥哥(ob) 或 弟弟(lb)\n return toAge > fromAge ? 'ob' : 'lb'\n } else {\n // 女性:姐姐(os) 或 妹妹(ls)\n return toAge > fromAge ? 'os' : 'ls'\n }\n }\n\n /**\n * 获取年龄(用于比较)\n */\n private getAge(member: FamilyMember): number {\n if (!member.birthDate) return 0\n const birthYear = new Date(member.birthDate).getFullYear()\n return new Date().getFullYear() - birthYear\n }\n\n /**\n * 获取关系的详细说明\n */\n getRelationshipDetail(fromId: string, toId: string): RelationshipDetail {\n const result = this.getRelationship(fromId, toId)\n \n if (!result.success) {\n return {\n ...result,\n description: result.error || '无法计算关系'\n }\n }\n\n // 构建带人名的路径(从 fromId 到 toId)\n const pathWithNames = this.buildPathWithNames(fromId, toId)\n\n // 只返回关系称谓,不包含完整句子\n return {\n ...result,\n path: pathWithNames || result.path,\n description: result.term\n }\n }\n\n /**\n * 构建带人名的路径描述\n * @param fromId 起始ID(查询的起点)\n * @param toId 目标ID(查询的终点)\n */\n private buildPathWithNames(fromId: string, toId: string): string | null {\n const queue: Array<{ id: string; path: Array<{name: string, relation: string}> }> = [\n { id: fromId, path: [] }\n ]\n const visited = new Set()\n \n // 获取起始成员名字\n const startMember = this.members.get(fromId)\n const startName = startMember?.fullName || '未知'\n\n while (queue.length > 0) {\n const { id, path } = queue.shift()!\n\n if (id === toId) {\n // 构建路径字符串:从起点到终点\n if (path.length === 0) return '本人'\n \n // 格式:起点 → 关系1(人名1) → 关系2(人名2) → ...\n const pathStr = path.map(p => `${p.relation}(${p.name})`).join(' → ')\n return `${startName} → ${pathStr}`\n }\n\n if (visited.has(id)) continue\n visited.add(id)\n\n const member = this.members.get(id)\n if (!member) continue\n\n // 向上:父亲\n if (member.fatherId && !visited.has(member.fatherId)) {\n const father = this.members.get(member.fatherId)\n if (father) {\n queue.push({\n id: member.fatherId,\n path: [...path, { name: father.fullName, relation: '父亲' }]\n })\n }\n }\n\n // 向上:母亲\n if (member.motherId && !visited.has(member.motherId)) {\n const mother = this.members.get(member.motherId)\n if (mother) {\n queue.push({\n id: member.motherId,\n path: [...path, { name: mother.fullName, relation: '母亲' }]\n })\n }\n }\n\n // 配偶关系\n if (member.spouseIds) {\n for (const spouseId of member.spouseIds) {\n if (!visited.has(spouseId)) {\n const spouse = this.members.get(spouseId)\n if (spouse) {\n const relation = member.gender === 'MALE' ? '妻子' : '丈夫'\n queue.push({\n id: spouseId,\n path: [...path, { name: spouse.fullName, relation }]\n })\n }\n }\n }\n }\n\n // 向下:子女\n if (member.childrenIds) {\n for (const childId of member.childrenIds) {\n if (!visited.has(childId)) {\n const child = this.members.get(childId)\n if (child) {\n const relation = child.gender === 'MALE' ? '儿子' : '女儿'\n queue.push({\n id: childId,\n path: [...path, { name: child.fullName, relation }]\n })\n }\n }\n }\n }\n\n // 兄弟姐妹\n if (member.fatherId || member.motherId) {\n const siblings = this.getSiblings(id)\n for (const siblingId of siblings) {\n if (!visited.has(siblingId)) {\n const sibling = this.members.get(siblingId)\n if (sibling) {\n const siblingPath = this.getSiblingRelationName(member, sibling)\n queue.push({\n id: siblingId,\n path: [...path, { name: sibling.fullName, relation: siblingPath }]\n })\n }\n }\n }\n }\n }\n\n return null\n }\n\n /**\n * 获取兄弟姐妹关系名称\n */\n private getSiblingRelationName(from: FamilyMember, to: FamilyMember): string {\n const fromAge = this.getAge(from)\n const toAge = this.getAge(to)\n\n if (to.gender === 'MALE') {\n return toAge > fromAge ? '哥哥' : '弟弟'\n } else {\n return toAge > fromAge ? '姐姐' : '妹妹'\n }\n }\n\n /**\n * 计算路径长度(关系代数)\n */\n private calculatePathLength(path: string): number {\n let length = 0\n let i = 0\n \n while (i < path.length) {\n // 两字符的关系\n if (i + 1 < path.length) {\n const twoChar = path.substring(i, i + 2)\n if (['ob', 'lb', 'os', 'ls'].includes(twoChar)) {\n length++\n i += 2\n continue\n }\n }\n \n // 单字符的关系\n length++\n i++\n }\n \n return length\n }\n\n /**\n * 将符号路径转换为中文文本\n * 例如:'fm' -> '父亲的母亲'\n */\n private pathToChineseText(path: string): string {\n const pathMap: Record = {\n 'f': '父亲',\n 'm': '母亲',\n 'h': '丈夫',\n 'w': '妻子',\n 's': '儿子',\n 'd': '女儿',\n 'ob': '哥哥',\n 'lb': '弟弟',\n 'os': '姐姐',\n 'ls': '妹妹'\n }\n\n const parts: string[] = []\n let i = 0\n \n while (i < path.length) {\n // 处理两字符的关系(如 ob, lb, os, ls)\n if (i + 1 < path.length) {\n const twoChar = path.substring(i, i + 2)\n if (pathMap[twoChar]) {\n parts.push(pathMap[twoChar])\n i += 2\n continue\n }\n }\n \n // 处理单字符的关系\n const oneChar = path[i]\n if (pathMap[oneChar]) {\n parts.push(pathMap[oneChar])\n }\n i++\n }\n\n return parts.join('的')\n }\n\n /**\n * 将路径转换为中文描述(带\"的\"字)\n */\n private getPathDescription(path: string): string {\n const pathMap: Record = {\n 'f': '的父亲',\n 'm': '的母亲',\n 'h': '的丈夫',\n 'w': '的妻子',\n 's': '的儿子',\n 'd': '的女儿',\n 'ob': '的哥哥',\n 'lb': '的弟弟',\n 'os': '的姐姐',\n 'ls': '的妹妹'\n }\n\n let description = ''\n for (const char of path) {\n description += pathMap[char] || ''\n }\n\n return description || '本人'\n }\n}\n\nexport interface RelationshipResult {\n term: string // 关系称谓(如:父亲、堂兄弟)\n path: string // 关系路径(如:f, fbs)\n success: boolean // 是否成功计算\n error?: string // 错误信息\n}\n\nexport interface RelationshipDetail extends RelationshipResult {\n description: string // 关系描述(如:父亲的哥哥的儿子)\n}\n"],"names":[],"mappings":"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"}}, - {"offset": {"line": 2651, "column": 0}, "map": {"version":3,"sources":["file:///Users/freedak/Documents/go-new/chinese-family-tree/hooks/use-relationship.ts"],"sourcesContent":["import { useState } from 'react'\nimport { useFamily } from '@/context/family-context'\nimport { RelationshipCalculator, type RelationshipDetail } from '@/lib/relationship-calculator'\n\n/**\n * 使用家族关系计算的Hook\n */\nexport function useRelationship() {\n const { treeData } = useFamily()\n const [loading, setLoading] = useState(false)\n\n /**\n * 计算两个成员之间的关系(客户端计算)\n */\n const calculateRelationship = (fromId: string, toId: string): RelationshipDetail => {\n const members = Object.values(treeData.members)\n const calculator = new RelationshipCalculator(members)\n return calculator.getRelationshipDetail(fromId, toId)\n }\n\n /**\n * 通过API计算关系(服务端计算)\n */\n const calculateRelationshipAPI = async (\n treeId: string,\n fromId: string,\n toId: string\n ): Promise => {\n setLoading(true)\n try {\n const response = await fetch(\n `/api/trees/${treeId}/relationship?from=${fromId}&to=${toId}`\n )\n \n if (!response.ok) {\n throw new Error('计算关系失败')\n }\n\n const data = await response.json()\n return {\n term: data.relationship,\n path: data.path,\n description: data.description,\n success: data.success\n }\n } catch (error) {\n console.error('计算关系失败:', error)\n return null\n } finally {\n setLoading(false)\n }\n }\n\n /**\n * 获取成员的所有直系亲属\n */\n const getDirectRelatives = (memberId: string) => {\n const member = treeData.members[memberId]\n if (!member) return null\n\n const relatives = {\n father: member.fatherId ? treeData.members[member.fatherId] : null,\n mother: member.motherId ? treeData.members[member.motherId] : null,\n spouses: member.spouseIds?.map(id => treeData.members[id]).filter(Boolean) || [],\n children: member.childrenIds?.map(id => treeData.members[id]).filter(Boolean) || []\n }\n\n return relatives\n }\n\n /**\n * 获取成员的所有兄弟姐妹\n */\n const getSiblings = (memberId: string) => {\n const member = treeData.members[memberId]\n if (!member) return []\n\n const siblings = new Set()\n\n // 通过父亲查找\n if (member.fatherId) {\n const father = treeData.members[member.fatherId]\n if (father?.childrenIds) {\n father.childrenIds.forEach(id => {\n if (id !== memberId) siblings.add(id)\n })\n }\n }\n\n // 通过母亲查找\n if (member.motherId) {\n const mother = treeData.members[member.motherId]\n if (mother?.childrenIds) {\n mother.childrenIds.forEach(id => {\n if (id !== memberId) siblings.add(id)\n })\n }\n }\n\n return Array.from(siblings).map(id => treeData.members[id]).filter(Boolean)\n }\n\n /**\n * 获取成员的所有祖先\n */\n const getAncestors = (memberId: string, maxGenerations: number = 10) => {\n const ancestors: any[] = []\n const visited = new Set()\n const queue = [{ id: memberId, generation: 0 }]\n\n while (queue.length > 0) {\n const { id, generation } = queue.shift()!\n\n if (generation >= maxGenerations || visited.has(id)) continue\n visited.add(id)\n\n const member = treeData.members[id]\n if (!member) continue\n\n if (generation > 0) {\n ancestors.push({ ...member, generationDiff: generation })\n }\n\n if (member.fatherId) {\n queue.push({ id: member.fatherId, generation: generation + 1 })\n }\n if (member.motherId) {\n queue.push({ id: member.motherId, generation: generation + 1 })\n }\n }\n\n return ancestors\n }\n\n /**\n * 获取成员的所有后代\n */\n const getDescendants = (memberId: string, maxGenerations: number = 10) => {\n const descendants: any[] = []\n const visited = new Set()\n const queue = [{ id: memberId, generation: 0 }]\n\n while (queue.length > 0) {\n const { id, generation } = queue.shift()!\n\n if (generation >= maxGenerations || visited.has(id)) continue\n visited.add(id)\n\n const member = treeData.members[id]\n if (!member) continue\n\n if (generation > 0) {\n descendants.push({ ...member, generationDiff: generation })\n }\n\n if (member.childrenIds) {\n member.childrenIds.forEach(childId => {\n queue.push({ id: childId, generation: generation + 1 })\n })\n }\n }\n\n return descendants\n }\n\n return {\n calculateRelationship,\n calculateRelationshipAPI,\n getDirectRelatives,\n getSiblings,\n getAncestors,\n getDescendants,\n loading\n }\n}\n"],"names":[],"mappings":"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"}}, - {"offset": {"line": 2819, "column": 0}, "map": {"version":3,"sources":["file:///Users/freedak/Documents/go-new/chinese-family-tree/components/ui/dialog.tsx"],"sourcesContent":["'use client'\n\nimport * as React from 'react'\nimport * as DialogPrimitive from '@radix-ui/react-dialog'\nimport { XIcon } from 'lucide-react'\n\nimport { cn } from '@/lib/utils'\n\nfunction Dialog({\n ...props\n}: React.ComponentProps) {\n return \n}\n\nfunction DialogTrigger({\n ...props\n}: React.ComponentProps) {\n return \n}\n\nfunction DialogPortal({\n ...props\n}: React.ComponentProps) {\n return \n}\n\nfunction DialogClose({\n ...props\n}: React.ComponentProps) {\n return \n}\n\nfunction DialogOverlay({\n className,\n ...props\n}: React.ComponentProps) {\n return (\n \n )\n}\n\nfunction DialogContent({\n className,\n children,\n showCloseButton = true,\n ...props\n}: React.ComponentProps & {\n showCloseButton?: boolean\n}) {\n return (\n \n \n \n {children}\n {showCloseButton && (\n \n \n Close\n \n )}\n \n \n )\n}\n\nfunction DialogHeader({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n \n )\n}\n\nfunction DialogFooter({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n \n )\n}\n\nfunction DialogTitle({\n className,\n ...props\n}: React.ComponentProps) {\n return (\n \n )\n}\n\nfunction DialogDescription({\n className,\n ...props\n}: React.ComponentProps) {\n return (\n \n )\n}\n\nexport {\n Dialog,\n DialogClose,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogOverlay,\n DialogPortal,\n DialogTitle,\n DialogTrigger,\n}\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AAGA;AACA;AAEA;AANA;;;;;AAQA,SAAS,OAAO,EACd,GAAG,OAC+C;IAClD,qBAAO,oaAAC,qbAAoB;QAAC,aAAU;QAAU,GAAG,KAAK;;;;;;AAC3D;AAEA,SAAS,cAAc,EACrB,GAAG,OACkD;IACrD,qBAAO,oaAAC,wbAAuB;QAAC,aAAU;QAAkB,GAAG,KAAK;;;;;;AACtE;AAEA,SAAS,aAAa,EACpB,GAAG,OACiD;IACpD,qBAAO,oaAAC,ubAAsB;QAAC,aAAU;QAAiB,GAAG,KAAK;;;;;;AACpE;AAEA,SAAS,YAAY,EACnB,GAAG,OACgD;IACnD,qBAAO,oaAAC,sbAAqB;QAAC,aAAU;QAAgB,GAAG,KAAK;;;;;;AAClE;AAEA,SAAS,cAAc,EACrB,SAAS,EACT,GAAG,OACkD;IACrD,qBACE,oaAAC,wbAAuB;QACtB,aAAU;QACV,WAAW,IAAA,yKAAE,EACX,0JACA;QAED,GAAG,KAAK;;;;;;AAGf;AAEA,SAAS,cAAc,EACrB,SAAS,EACT,QAAQ,EACR,kBAAkB,IAAI,EACtB,GAAG,OAGJ;IACC,qBACE,oaAAC;QAAa,aAAU;;0BACtB,oaAAC;;;;;0BACD,oaAAC,wbAAuB;gBACtB,aAAU;gBACV,WAAW,IAAA,yKAAE,EACX,+WACA;gBAED,GAAG,KAAK;;oBAER;oBACA,iCACC,oaAAC,sbAAqB;wBACpB,aAAU;wBACV,WAAU;;0CAEV,oaAAC,oVAAK;;;;;0CACN,oaAAC;gCAAK,WAAU;0CAAU;;;;;;;;;;;;;;;;;;;;;;;;AAMtC;AAEA,SAAS,aAAa,EAAE,SAAS,EAAE,GAAG,OAAoC;IACxE,qBACE,oaAAC;QACC,aAAU;QACV,WAAW,IAAA,yKAAE,EAAC,gDAAgD;QAC7D,GAAG,KAAK;;;;;;AAGf;AAEA,SAAS,aAAa,EAAE,SAAS,EAAE,GAAG,OAAoC;IACxE,qBACE,oaAAC;QACC,aAAU;QACV,WAAW,IAAA,yKAAE,EACX,0DACA;QAED,GAAG,KAAK;;;;;;AAGf;AAEA,SAAS,YAAY,EACnB,SAAS,EACT,GAAG,OACgD;IACnD,qBACE,oaAAC,sbAAqB;QACpB,aAAU;QACV,WAAW,IAAA,yKAAE,EAAC,sCAAsC;QACnD,GAAG,KAAK;;;;;;AAGf;AAEA,SAAS,kBAAkB,EACzB,SAAS,EACT,GAAG,OACsD;IACzD,qBACE,oaAAC,4bAA2B;QAC1B,aAAU;QACV,WAAW,IAAA,yKAAE,EAAC,iCAAiC;QAC9C,GAAG,KAAK;;;;;;AAGf"}}, - {"offset": {"line": 3001, "column": 0}, "map": {"version":3,"sources":["file:///Users/freedak/Documents/go-new/chinese-family-tree/components/ui/badge.tsx"],"sourcesContent":["import * as React from 'react'\nimport { Slot } from '@radix-ui/react-slot'\nimport { cva, type VariantProps } from 'class-variance-authority'\n\nimport { cn } from '@/lib/utils'\n\nconst badgeVariants = cva(\n 'inline-flex items-center justify-center rounded-md border px-2 py-0.5 text-xs font-medium w-fit whitespace-nowrap shrink-0 [&>svg]:size-3 gap-1 [&>svg]:pointer-events-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 transition-[color,box-shadow] overflow-hidden',\n {\n variants: {\n variant: {\n default:\n 'border-transparent bg-primary text-primary-foreground [a&]:hover:bg-primary/90',\n secondary:\n 'border-transparent bg-secondary text-secondary-foreground [a&]:hover:bg-secondary/90',\n destructive:\n 'border-transparent bg-destructive text-white [a&]:hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/60',\n outline:\n 'text-foreground [a&]:hover:bg-accent [a&]:hover:text-accent-foreground',\n },\n },\n defaultVariants: {\n variant: 'default',\n },\n },\n)\n\nfunction Badge({\n className,\n variant,\n asChild = false,\n ...props\n}: React.ComponentProps<'span'> &\n VariantProps & { asChild?: boolean }) {\n const Comp = asChild ? Slot : 'span'\n\n return (\n \n )\n}\n\nexport { Badge, badgeVariants }\n"],"names":[],"mappings":";;;;;;;AACA;AACA;AAEA;;;;;AAEA,MAAM,gBAAgB,IAAA,ySAAG,EACvB,kZACA;IACE,UAAU;QACR,SAAS;YACP,SACE;YACF,WACE;YACF,aACE;YACF,SACE;QACJ;IACF;IACA,iBAAiB;QACf,SAAS;IACX;AACF;AAGF,SAAS,MAAM,EACb,SAAS,EACT,OAAO,EACP,UAAU,KAAK,EACf,GAAG,OAEuD;IAC1D,MAAM,OAAO,UAAU,mWAAI,GAAG;IAE9B,qBACE,oaAAC;QACC,aAAU;QACV,WAAW,IAAA,yKAAE,EAAC,cAAc;YAAE;QAAQ,IAAI;QACzC,GAAG,KAAK;;;;;;AAGf"}}, - {"offset": {"line": 3047, "column": 0}, "map": {"version":3,"sources":["file:///Users/freedak/Documents/go-new/chinese-family-tree/app/tree/page.tsx"],"sourcesContent":["\"use client\"\n\nimport type React from \"react\"\n\nimport { SiteHeader } from \"@/components/site-header\"\nimport { TreeLayout } from \"@/components/tree/tree-layout\"\nimport { D3OrgChartFlow, type D3OrgChartRef } from \"@/components/tree/d3-org-chart-flow\"\nimport { useFamily } from \"@/context/family-context\"\nimport { useRelationship } from \"@/hooks/use-relationship\"\nimport { Button } from \"@/components/ui/button\"\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuTrigger,\n} from \"@/components/ui/dropdown-menu\"\nimport { Dialog, DialogContent, DialogHeader, DialogTitle } from \"@/components/ui/dialog\"\nimport { Badge } from \"@/components/ui/badge\"\nimport { ZoomIn, ZoomOut, Move, Download, LayoutGrid, ChevronDown, Users } from \"lucide-react\"\nimport { useState, useRef, useEffect, useCallback } from \"react\"\nimport { useRouter, useSearchParams } from \"next/navigation\"\n\ntype ViewMode = \"traditional\" | \"d3-org-chart\"\n\nexport default function TreePage() {\n const { treeData } = useFamily()\n const { calculateRelationship } = useRelationship()\n const router = useRouter()\n const searchParams = useSearchParams()\n const [viewMode, setViewMode] = useState(\"traditional\")\n \n // 关系查询模式\n const [relationMode, setRelationMode] = useState(false)\n const [selectedMembers, setSelectedMembers] = useState([])\n const [relationResult, setRelationResult] = useState(null)\n const [showRelationDialog, setShowRelationDialog] = useState(false)\n \n // 使用ref存储最新的relationMode值,避免回调重新创建\n const relationModeRef = useRef(relationMode)\n const selectedMembersRef = useRef(selectedMembers)\n \n useEffect(() => {\n relationModeRef.current = relationMode\n selectedMembersRef.current = selectedMembers\n }, [relationMode, selectedMembers])\n \n // 从 URL 参数读取视图模式\n useEffect(() => {\n const view = searchParams.get('view')\n if (view === 'd3-org-chart' || view === 'traditional') {\n setViewMode(view)\n }\n }, [searchParams])\n const [scale, setScale] = useState(1)\n const [position, setPosition] = useState({ x: 0, y: 0 })\n const [isDragging, setIsDragging] = useState(false)\n const [startPos, setStartPos] = useState({ x: 0, y: 0 })\n const [dragStartPos, setDragStartPos] = useState({ x: 0, y: 0 })\n const containerRef = useRef(null)\n const d3ChartRef = useRef(null)\n\n const handleMouseDown = (e: React.MouseEvent) => {\n // 如果点击的是节点卡片,不启动拖拽\n const target = e.target as HTMLElement\n if (target.closest('.family-node-card')) {\n return\n }\n \n setIsDragging(true)\n setStartPos({ x: e.clientX - position.x, y: e.clientY - position.y })\n setDragStartPos({ x: e.clientX, y: e.clientY })\n }\n\n const handleMouseMove = (e: React.MouseEvent) => {\n if (!isDragging) return\n \n // 只有移动超过5px才算拖拽,避免误触\n const deltaX = Math.abs(e.clientX - dragStartPos.x)\n const deltaY = Math.abs(e.clientY - dragStartPos.y)\n if (deltaX < 5 && deltaY < 5) return\n \n setPosition({\n x: e.clientX - startPos.x,\n y: e.clientY - startPos.y,\n })\n }\n\n const handleMouseUp = () => {\n setIsDragging(false)\n }\n\n // 处理成员选择(关系查询模式)\n const handleMemberClick = (memberId: string) => {\n if (selectedMembers.length === 0) {\n // 选择第一个成员\n setSelectedMembers([memberId])\n } else if (selectedMembers.length === 1) {\n // 选择第二个成员,计算关系\n const [firstId] = selectedMembers\n if (firstId === memberId) {\n // 点击同一个人,取消选择\n setSelectedMembers([])\n return\n }\n \n const result = calculateRelationship(firstId, memberId)\n const firstMember = treeData.members[firstId]\n const secondMember = treeData.members[memberId]\n \n setRelationResult({\n from: firstMember,\n to: secondMember,\n relationship: result\n })\n setShowRelationDialog(true)\n setSelectedMembers([])\n setRelationMode(false)\n }\n }\n \n // 切换关系查询模式\n const toggleRelationMode = () => {\n setRelationMode(!relationMode)\n setSelectedMembers([])\n setRelationResult(null)\n }\n \n // 处理对话框关闭\n const handleDialogClose = (open: boolean) => {\n setShowRelationDialog(open)\n if (!open && relationResult) {\n // 清除选中样式\n const clearNodeStyle = (nodeId: string) => {\n const chartContainer = document.querySelector('.w-full.h-full.bg-background.rounded-lg.border')\n const svg = chartContainer?.querySelector('svg')\n if (!svg) return\n \n const foreignObjects = svg.querySelectorAll('foreignObject')\n foreignObjects.forEach((fo: any) => {\n const nodeData = (fo.parentNode as any)?.__data__?.data\n if (nodeData?.id === nodeId) {\n const nameDiv = fo.querySelector('div[style*=\"font-size: 13px\"]') as HTMLElement\n if (nameDiv) {\n // 移除勾选图标\n const checkIcon = nameDiv.querySelector('svg')\n if (checkIcon) {\n checkIcon.remove()\n }\n }\n }\n })\n }\n \n clearNodeStyle(relationResult.from.id)\n clearNodeStyle(relationResult.to.id)\n }\n }\n \n // 使用useCallback创建稳定的回调,通过ref访问最新的relationMode\n const handleD3MemberClick = useCallback((id: string) => {\n console.log('D3 onMemberClick triggered:', id, 'relationMode:', relationModeRef.current)\n if (relationModeRef.current) {\n console.log('Calling handleMemberClick')\n \n // 更新节点样式的辅助函数\n const updateNodeStyle = (nodeId: string, isSelected: boolean) => {\n // 从DOM中查找D3图表容器\n const chartContainer = document.querySelector('.w-full.h-full.bg-background.rounded-lg.border')\n const svg = chartContainer?.querySelector('svg')\n if (!svg) return\n \n const foreignObjects = svg.querySelectorAll('foreignObject')\n foreignObjects.forEach((fo: any) => {\n const nodeData = (fo.parentNode as any)?.__data__?.data\n if (nodeData?.id === nodeId) {\n const nameDiv = fo.querySelector('div[style*=\"font-size: 13px\"]') as HTMLElement\n if (nameDiv) {\n if (isSelected) {\n // 添加勾选图标\n if (!nameDiv.querySelector('svg')) {\n const iconHTML = ``\n nameDiv.style.display = 'flex'\n nameDiv.style.alignItems = 'center'\n nameDiv.insertAdjacentHTML('beforeend', iconHTML)\n }\n } else {\n // 移除勾选图标\n const checkIcon = nameDiv.querySelector('svg')\n if (checkIcon) {\n checkIcon.remove()\n }\n }\n }\n }\n })\n }\n \n // 直接处理选择逻辑\n if (selectedMembersRef.current.length === 0) {\n updateNodeStyle(id, true)\n setSelectedMembers([id])\n } else if (selectedMembersRef.current.length === 1) {\n const [firstId] = selectedMembersRef.current\n if (firstId === id) {\n updateNodeStyle(id, false)\n setSelectedMembers([])\n return\n }\n \n updateNodeStyle(id, true)\n \n const result = calculateRelationship(firstId, id)\n const firstMember = treeData.members[firstId]\n const secondMember = treeData.members[id]\n \n setRelationResult({\n from: firstMember,\n to: secondMember,\n relationship: result\n })\n setShowRelationDialog(true)\n setSelectedMembers([])\n setRelationMode(false)\n // 选中样式会在对话框关闭时清除\n }\n } else {\n console.log('Navigating to member detail')\n router.push(`/members/${id}`)\n }\n }, [router, calculateRelationship, treeData.members])\n\n const handleExportImage = async () => {\n if (!containerRef.current) return\n\n try {\n // 临时重置位置和缩放以获取完整视图\n const originalPosition = { ...position }\n const originalScale = scale\n setPosition({ x: 0, y: 0 })\n setScale(1)\n\n // 等待 DOM 更新\n await new Promise(resolve => setTimeout(resolve, 800))\n\n // 找到实际的族谱容器(包含 TreeLayout 的 div)\n const treeContainer = containerRef.current.querySelector('div[style*=\"transform\"]') as HTMLElement\n if (!treeContainer) {\n throw new Error('找不到族谱容器')\n }\n\n // 查找所有连接线(使用更宽泛的选择器)\n const allDivs = treeContainer.querySelectorAll('div')\n const lineElements: HTMLElement[] = []\n \n allDivs.forEach(div => {\n const el = div as HTMLElement\n const classes = String(el.className || '')\n // 查找包含 bg-foreground 的元素(连接线)\n if (classes.includes('bg-foreground')) {\n lineElements.push(el)\n }\n })\n \n // 克隆容器用于导出\n const clonedContainer = treeContainer.cloneNode(true) as HTMLElement\n \n // 在克隆的容器中找到对应的连接线并设置样式\n const clonedDivs = clonedContainer.querySelectorAll('div')\n let lineIndex = 0\n clonedDivs.forEach(div => {\n const el = div as HTMLElement\n const classes = String(el.className || '')\n if (classes.includes('bg-foreground') && lineElements[lineIndex]) {\n const original = lineElements[lineIndex]\n const computed = window.getComputedStyle(original)\n \n // 直接设置内联样式\n el.style.backgroundColor = computed.backgroundColor\n el.style.width = computed.width\n el.style.height = computed.height\n el.style.position = 'absolute'\n el.style.left = computed.left\n el.style.top = computed.top\n \n lineIndex++\n }\n })\n \n // 移除卡片边框\n clonedContainer.querySelectorAll('*').forEach((child) => {\n const el = child as HTMLElement\n const classes = String(el.className || '')\n \n // 跳过连接线和连接线容器\n if (classes.includes('bg-foreground') || classes.includes('pointer-events-none')) {\n return\n }\n \n // 移除其他元素的边框\n el.style.border = 'none'\n el.style.outline = 'none'\n })\n \n // 临时添加到 DOM\n clonedContainer.style.position = 'fixed'\n clonedContainer.style.left = '-9999px'\n clonedContainer.style.top = '0'\n document.body.appendChild(clonedContainer)\n \n // 等待渲染\n await new Promise(resolve => setTimeout(resolve, 200))\n\n // 动态导入 dom-to-image-more(仅在客户端)\n const domtoimage = await import('dom-to-image-more')\n \n // 使用 toBlob 方法\n const blob = await domtoimage.default.toBlob(clonedContainer, {\n quality: 0.95,\n bgcolor: '#ffffff'\n })\n \n // 清理克隆的容器\n document.body.removeChild(clonedContainer)\n\n // 恢复原始位置和缩放\n setPosition(originalPosition)\n setScale(originalScale)\n\n // 创建下载链接\n const url = URL.createObjectURL(blob)\n const link = document.createElement('a')\n link.download = `family-tree-${new Date().toISOString().split('T')[0]}.png`\n link.href = url\n link.click()\n \n // 清理\n setTimeout(() => URL.revokeObjectURL(url), 100)\n } catch (error) {\n console.error('导出图片失败:', error)\n }\n }\n\n // Handle root not found\n if (!treeData.rootId) {\n return (\n
\n \n
暂无家族树数据
\n
\n )\n }\n\n return (\n
\n \n\n {/* 视图切换和关系查询按钮 */}\n
\n {/* 关系查询按钮 */}\n \n \n \n \n \n \n \n {\n const params = new URLSearchParams(searchParams.toString())\n params.set('view', 'traditional')\n router.push(`/tree?${params.toString()}`)\n }}\n className={viewMode === 'traditional' ? 'bg-accent' : ''}\n >\n
\n 传统家谱视图\n {viewMode === 'traditional' && }\n
\n
\n {\n const params = new URLSearchParams(searchParams.toString())\n params.set('view', 'd3-org-chart')\n router.push(`/tree?${params.toString()}`)\n }}\n className={viewMode === 'd3-org-chart' ? 'bg-accent' : ''}\n >\n
\n D3 家谱图\n {viewMode === 'd3-org-chart' && }\n
\n
\n
\n
\n
\n\n {viewMode === 'traditional' ? (\n
\n {/* Toolbar */}\n
\n \n \n \n
\n \n
\n\n {/* Tree Canvas */}\n \n \n \n
\n
\n
\n ) : (\n
\n {/* 统一的控制按钮 */}\n
\n \n \n \n
\n \n
\n \n
\n \n
\n
\n )}\n \n {/* 关系查询结果对话框 */}\n \n \n \n 关系查询结果\n \n \n {relationResult && (\n
\n {/* 成员信息 */}\n
\n
\n
\n {relationResult.from.fullName}\n
\n
\n 第{relationResult.from.generation}世\n
\n
\n\n
\n \n {relationResult.relationship.term}\n \n
\n\n
\n
\n {relationResult.to.fullName}\n
\n
\n 第{relationResult.to.generation}世\n
\n
\n
\n\n {/* 关系说明 */}\n
\n
关系说明:
\n
\n {relationResult.from.fullName}{relationResult.to.fullName}{relationResult.relationship.term}\n
\n
\n\n {/* 关系路径 */}\n {relationResult.relationship.path && (\n
\n
关系路径:
\n
\n {relationResult.relationship.path}\n
\n
\n )}\n
\n )}\n
\n
\n
\n )\n}\n"],"names":[],"mappings":"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"}}] + {"offset": {"line": 1315, "column": 0}, "map": {"version":3,"sources":["file:///Users/freedak/Documents/go-new/chinese-family-tree/components/tree/family-node.tsx"],"sourcesContent":["\"use client\"\n\nimport type { FamilyMember } from \"@/types/family\"\nimport { cn } from \"@/lib/utils\"\nimport { useAvatarCache } from \"@/hooks/use-avatar-cache\"\nimport { CircleUser, CircleUserRound, Heart } from \"lucide-react\"\n\ninterface FamilyNodeProps {\n member: FamilyMember\n spouse?: FamilyMember\n spouses?: FamilyMember[]\n isRoot?: boolean\n onSelect?: (member: FamilyMember) => void\n isHighlighted?: boolean\n relationMode?: boolean\n isSelected?: boolean\n}\n\n// 格式化日期显示(只显示年份)\nfunction formatYear(dateString?: string): string {\n if (!dateString) return ''\n const year = dateString.split('-')[0]\n return year\n}\n\n// 计算年龄\nfunction calculateAge(birthDate?: string, deathDate?: string): number | null {\n if (!birthDate) return null\n \n const birth = new Date(birthDate)\n const end = deathDate ? new Date(deathDate) : new Date()\n \n let age = end.getFullYear() - birth.getFullYear()\n const monthDiff = end.getMonth() - birth.getMonth()\n \n if (monthDiff < 0 || (monthDiff === 0 && end.getDate() < birth.getDate())) {\n age--\n }\n \n return age\n}\n\n// 单个人员卡片组件\nfunction PersonCard({ member, isRoot, isSpouse, onSelect, isHighlighted, relationMode, isSelected }: { member: FamilyMember; isRoot?: boolean; isSpouse?: boolean; onSelect?: (member: FamilyMember) => void; isHighlighted?: boolean; relationMode?: boolean; isSelected?: boolean }) {\n const { avatarUrl: avatarBlobUrl } = useAvatarCache(member?.avatarImageId)\n \n const birthYear = formatYear(member.birthDate)\n const deathYear = formatYear(member.deathDate)\n const age = calculateAge(member.birthDate, member.deathDate)\n \n const lifeSpan = birthYear\n ? deathYear\n ? `${birthYear}-${deathYear}`\n : `${birthYear}-`\n : ''\n \n const ageText = age !== null\n ? member.deathDate\n ? `享年${age}岁`\n : `${age}岁`\n : ''\n \n return (\n onSelect?.(member)}\n >\n
\n {member.generation}世\n
\n\n
\n {avatarBlobUrl ? (\n \n ) : (\n member.gender === 'FEMALE' ? (\n \n ) : (\n \n )\n )}\n
\n\n
\n
{member.surname} {member.givenName}
\n {member.courtesyName && (\n
字 {member.courtesyName}
\n )}\n {lifeSpan && (\n
\n {lifeSpan}\n
\n )}\n {ageText && (\n
\n {ageText}\n
\n )}\n {member.phone && (\n
\n 📱 {member.phone}\n
\n )}\n
\n\n {member.deathDate && (\n
\n )}\n
\n )\n}\n\nexport function FamilyNode({ member, spouse, spouses, isRoot, onSelect, isHighlighted, relationMode, isSelected }: FamilyNodeProps) {\n // 优先使用 spouses 数组,如果没有则使用单个 spouse\n const spouseList = spouses || (spouse ? [spouse] : [])\n \n if (spouseList.length === 0) {\n return \n }\n \n // 有配偶时,并排显示所有配偶\n return (\n
\n \n {spouseList.map((spouseMember, index) => (\n
\n \n \n
\n ))}\n
\n )\n}\n"],"names":[],"mappings":"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"}}, + {"offset": {"line": 1544, "column": 0}, "map": {"version":3,"sources":["file:///Users/freedak/Documents/go-new/chinese-family-tree/components/tree/tree-layout.tsx"],"sourcesContent":["\"use client\"\nimport type { FamilyMember } from \"@/types/family\"\nimport { FamilyNode } from \"./family-node\"\nimport { useFamily } from \"@/context/family-context\"\nimport { useEffect, useRef, useState, useCallback } from \"react\"\nimport { useRouter } from \"next/navigation\"\n\ninterface TreeLayoutProps {\n rootId: string\n onSelectMember?: (member: FamilyMember) => void\n relationMode?: boolean\n selectedMembers?: string[]\n onMemberClick?: (memberId: string) => void\n}\n\ninterface Connection {\n from: { x: number; y: number }\n to: { x: number; y: number }\n type: 'vertical' | 'horizontal'\n}\n\nexport function TreeLayout({ \n rootId, \n onSelectMember,\n relationMode = false,\n selectedMembers = [],\n onMemberClick\n}: TreeLayoutProps) {\n const { getMember, treeData, highlightedMemberId } = useFamily()\n const root = getMember(rootId)\n const router = useRouter()\n const containerRef = useRef(null)\n const [connections, setConnections] = useState([])\n const nodeRefs = useRef>(new Map())\n\n // 节点间距配置\n const HORIZONTAL_GAP = 32 // 2rem = 32px\n const VERTICAL_GAP = 48 // 3rem = 48px\n const CONNECTOR_HEIGHT = 48 // 连接线垂直高度\n \n // 处理节点点击\n const handleNodeClick = useCallback((member: FamilyMember) => {\n if (relationMode && onMemberClick) {\n onMemberClick(member.id)\n } else {\n router.push(`/members/${member.id}`)\n }\n }, [relationMode, onMemberClick, router])\n\n // 计算所有连线位置\n const calculateConnections = useCallback(() => {\n const newConnections: Connection[] = []\n const containerRect = containerRef.current?.getBoundingClientRect()\n if (!containerRect) return\n\n // 检查是否有足够的节点已注册\n if (nodeRefs.current.size === 0) return\n\n nodeRefs.current.forEach((nodeElement, nodeId) => {\n const member = getMember(nodeId)\n if (!member || !member.childrenIds || member.childrenIds.length === 0) return\n\n const parentRect = nodeElement.getBoundingClientRect()\n const parentCenterX = parentRect.left + parentRect.width / 2 - containerRect.left\n const parentBottomY = parentRect.bottom - containerRect.top\n\n // 父节点到水平线的垂直连线\n const verticalLineY = parentBottomY + CONNECTOR_HEIGHT / 2\n newConnections.push({\n from: { x: parentCenterX, y: parentBottomY },\n to: { x: parentCenterX, y: verticalLineY },\n type: 'vertical'\n })\n\n // 获取所有子节点的位置\n const childPositions = member.childrenIds\n .map(childId => {\n const childElement = nodeRefs.current.get(childId)\n if (!childElement) return null\n const childRect = childElement.getBoundingClientRect()\n return {\n id: childId,\n centerX: childRect.left + childRect.width / 2 - containerRect.left,\n topY: childRect.top - containerRect.top\n }\n })\n .filter(Boolean) as Array<{ id: string; centerX: number; topY: number }>\n\n if (childPositions.length === 0) return\n\n // 如果有多个子节点,绘制水平连线\n if (childPositions.length > 1) {\n const leftmostX = Math.min(...childPositions.map(p => p.centerX))\n const rightmostX = Math.max(...childPositions.map(p => p.centerX))\n \n newConnections.push({\n from: { x: leftmostX, y: verticalLineY },\n to: { x: rightmostX, y: verticalLineY },\n type: 'horizontal'\n })\n }\n\n // 每个子节点的垂直连线\n childPositions.forEach(child => {\n newConnections.push({\n from: { x: child.centerX, y: verticalLineY },\n to: { x: child.centerX, y: child.topY },\n type: 'vertical'\n })\n })\n })\n\n setConnections(newConnections)\n }, [getMember])\n\n useEffect(() => {\n // 多次尝试计算,确保 DOM 完全渲染\n const timers: NodeJS.Timeout[] = []\n timers.push(setTimeout(calculateConnections, 50))\n timers.push(setTimeout(calculateConnections, 150))\n timers.push(setTimeout(calculateConnections, 300))\n timers.push(setTimeout(calculateConnections, 500))\n \n // 监听窗口大小变化\n window.addEventListener('resize', calculateConnections)\n \n return () => {\n timers.forEach(timer => clearTimeout(timer))\n window.removeEventListener('resize', calculateConnections)\n }\n }, [calculateConnections, treeData])\n\n if (!root) return null\n\n // 递归渲染树节点\n const TreeNode = ({ memberId, isRoot = false }: { memberId: string; isRoot?: boolean }) => {\n const member = getMember(memberId)\n if (!member) return null\n\n const hasChildren = member.childrenIds && member.childrenIds.length > 0\n \n // 获取所有配偶\n const spouses = member.spouseIds && member.spouseIds.length > 0 \n ? member.spouseIds.map(id => getMember(id)).filter(Boolean) as FamilyMember[]\n : []\n\n return (\n
\n {/* 节点本身 */}\n
{\n if (el) {\n nodeRefs.current.set(memberId, el)\n } else {\n nodeRefs.current.delete(memberId)\n }\n }}\n className=\"relative z-10\"\n >\n \n
\n\n {/* 子节点 */}\n {hasChildren && (\n
\n {(() => {\n // 对子节点进行排序:始祖排最左边,其他按出生日期排序\n const sortedChildren = [...member.childrenIds].sort((aId, bId) => {\n const a = getMember(aId)\n const b = getMember(bId)\n if (!a || !b) return 0\n \n // 始祖永远排最左边\n const aIsFounder = a.tags?.includes('始祖') || a.generation === 1\n const bIsFounder = b.tags?.includes('始祖') || b.generation === 1\n if (aIsFounder && !bIsFounder) return -1\n if (!aIsFounder && bIsFounder) return 1\n \n // 其他按出生日期排序\n return (a.birthDate || \"\").localeCompare(b.birthDate || \"\")\n })\n \n return sortedChildren.map((childId) => (\n \n ))\n })()}\n
\n )}\n
\n )\n }\n\n return (\n
\n
\n {/* 连线层 - 使用 div 绘制 */}\n
\n {connections.map((conn, index) => {\n const isHorizontal = conn.type === 'horizontal'\n // 使用 1px 但通过 transform scale 缩小来实现细线\n const width = isHorizontal ? Math.abs(conn.to.x - conn.from.x) : 1\n const height = isHorizontal ? 1 : Math.abs(conn.to.y - conn.from.y)\n const left = Math.min(conn.from.x, conn.to.x)\n const top = Math.min(conn.from.y, conn.to.y)\n \n // 跳过无效的连线(宽度或高度为0)\n if (width <= 0 || height <= 0) return null\n \n return (\n \n )\n })}\n
\n\n {/* 树节点层 */}\n
\n \n
\n
\n
\n )\n}\n"],"names":[],"mappings":"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"}}, + {"offset": {"line": 1851, "column": 0}, "map": {"version":3,"sources":["file:///Users/freedak/Documents/go-new/chinese-family-tree/components/tree/d3-org-chart-flow.tsx"],"sourcesContent":["\"use client\"\n\nimport { useEffect, useRef, useState, forwardRef, useImperativeHandle, memo } from \"react\"\nimport * as d3 from \"d3\"\n// @ts-ignore - d3-org-chart没有TypeScript类型定义\nimport { OrgChart } from \"d3-org-chart\"\nimport { Download, FileText } from \"lucide-react\"\nimport type { FamilyMember } from \"@/types/family\"\nimport jsPDF from \"jspdf\"\nimport { db } from \"@/lib/db\"\n\ninterface D3OrgChartFlowProps {\n members: Record\n rootId: string\n onMemberClick?: (memberId: string) => void\n onExport?: () => void\n relationMode?: boolean\n selectedMembers?: string[]\n}\n\nexport interface D3OrgChartRef {\n exportPNG: () => void\n exportPDF: () => void\n expandAll: () => void\n collapseAll: () => void\n fitView: () => void\n}\n\ninterface ChartNode {\n id: string\n parentId: string | null\n name: string\n generation: string\n birthYear: string\n deathYear: string\n birthPlace: string\n gender: string\n avatarImageId: string | null | undefined\n spouseName: string\n spouseId: string | null\n hasChildren: boolean\n ageText: string\n}\n\n// 计算年龄\nfunction calculateAge(birthDate?: string, deathDate?: string): number | null {\n if (!birthDate) return null\n \n const birth = new Date(birthDate)\n const end = deathDate ? new Date(deathDate) : new Date()\n \n let age = end.getFullYear() - birth.getFullYear()\n const monthDiff = end.getMonth() - birth.getMonth()\n \n if (monthDiff < 0 || (monthDiff === 0 && end.getDate() < birth.getDate())) {\n age--\n }\n \n return age\n}\n\nconst D3OrgChartFlowComponent = forwardRef(\n ({ members, rootId, onMemberClick, onExport, relationMode = false, selectedMembers = [] }, ref) => {\n console.log('D3OrgChartFlow render, selectedMembers:', selectedMembers, 'relationMode:', relationMode)\n \n const chartRef = useRef(null)\n const chartInstanceRef = useRef(null)\n const [isReady, setIsReady] = useState(false)\n const [avatarCache, setAvatarCache] = useState>(new Map())\n\n // 转换数据格式\n const convertToChartData = (): ChartNode[] => {\n const chartNodes: ChartNode[] = []\n \n // 首先找到根节点(没有父节点的节点)\n const rootMember = members[rootId]\n if (!rootMember) return []\n \n // 使用BFS遍历,确保只包含从rootId开始的树\n const visited = new Set()\n const queue: string[] = [rootId]\n \n while (queue.length > 0) {\n const currentId = queue.shift()!\n if (visited.has(currentId)) continue\n \n visited.add(currentId)\n const member = members[currentId]\n if (!member) continue\n \n // 获取所有配偶信息,确保配偶存在于members中\n const spouses = member.spouseIds\n ?.map(id => members[id])\n .filter(Boolean) || []\n \n // 确定父节点ID - 只有根节点的parentId为null\n let parentId: string | null = null\n if (currentId !== rootId) {\n // 根据姓氏判断主线,优先选择同姓的父母\n const father = member.fatherId ? members[member.fatherId] : null\n const mother = member.motherId ? members[member.motherId] : null\n \n // 判断父母中谁是家族主线(同姓)\n const isFatherMainLine = father && member.surname === father.surname\n const isMotherMainLine = mother && member.surname === mother.surname\n \n if (isFatherMainLine) {\n parentId = member.fatherId || null\n } else if (isMotherMainLine) {\n parentId = member.motherId || null\n } else if (father) {\n // 如果都不同姓,优先选择父亲\n parentId = member.fatherId || null\n } else if (mother) {\n parentId = member.motherId || null\n }\n }\n \n // 计算年龄文本\n const age = calculateAge(member.birthDate, member.deathDate)\n const ageText = age !== null\n ? member.deathDate\n ? `享年${age}岁`\n : `${age}岁`\n : ''\n \n chartNodes.push({\n id: member.id,\n parentId: parentId,\n name: member.fullName,\n generation: `第${member.generation}世`,\n birthYear: member.birthDate ? new Date(member.birthDate).getFullYear().toString() : '',\n deathYear: member.deathDate ? new Date(member.deathDate).getFullYear().toString() : '',\n birthPlace: member.birthPlace || '',\n gender: member.gender === 'MALE' ? '男' : '女',\n avatarImageId: member.avatarImageId,\n spouseName: spouses.length > 0 ? spouses.map(s => s.fullName).join(', ') : '',\n spouseId: spouses.length > 0 ? spouses[0].id : null,\n hasChildren: Object.values(members).some(m => m.fatherId === member.id || m.motherId === member.id),\n ageText: ageText\n })\n \n // 添加子节点到队列\n Object.values(members).forEach(m => {\n if ((m.fatherId === currentId || m.motherId === currentId) && !visited.has(m.id)) {\n queue.push(m.id)\n }\n })\n }\n \n return chartNodes\n }\n\n // 加载所有成员的头像\n useEffect(() => {\n const loadAvatars = async () => {\n const cache = new Map()\n \n for (const member of Object.values(members)) {\n if (member.avatarImageId) {\n try {\n const image = await db.images.get(member.avatarImageId)\n if (image) {\n const url = URL.createObjectURL(image.blob)\n cache.set(member.avatarImageId, url)\n }\n } catch (error) {\n console.error(`Failed to load avatar for ${member.fullName}:`, error)\n }\n }\n }\n \n setAvatarCache(cache)\n }\n \n loadAvatars()\n \n // 清理函数\n return () => {\n avatarCache.forEach(url => URL.revokeObjectURL(url))\n }\n }, [members])\n\n useEffect(() => {\n if (!chartRef.current || !rootId) return\n\n // 清理旧的图表\n if (chartRef.current) {\n chartRef.current.innerHTML = ''\n }\n\n const data = convertToChartData()\n \n // 初始化图表\n const chart = new OrgChart()\n .container(chartRef.current)\n .data(data)\n .nodeWidth(() => 160)\n .nodeHeight(() => 120)\n .childrenMargin(() => 50)\n .compactMarginBetween(() => 35)\n .compactMarginPair(() => 35)\n .neighbourMargin(() => 35)\n .siblingsMargin(() => 35)\n .linkUpdate(function (d: any, i: any, arr: any) {\n // 加深连线颜色\n d3.select(arr[i])\n .attr('stroke', '#475569')\n .attr('stroke-width', 2.5)\n })\n .buttonContent(({ node }: any) => {\n return `
${node.children ? `` : ``} ${node.data._directSubordinates || 0}
`\n })\n .nodeContent((d: any) => {\n const node = d.data\n const color = node.gender === '男' ? '#3b82f6' : '#ec4899'\n const bgColor = node.gender === '男' ? '#dbeafe' : '#fce7f3'\n \n // 获取头像URL\n const avatarUrl = node.avatarImageId ? avatarCache.get(node.avatarImageId) : null\n \n // 检查是否被选中\n const isSelected = selectedMembers.includes(node.id)\n \n return `\n
\n
\n
\n ${avatarUrl \n ? `\"${node.name}\"`\n : node.gender === '女'\n ? ``\n : ``\n }\n
\n
\n
\n ${node.name}\n ${isSelected ? `` : ''}\n
\n
\n ${node.generation}\n
\n
\n
\n \n
\n ${node.birthYear ? `
\n ${node.birthYear}${node.deathYear ? ` - ${node.deathYear}` : ''}\n ${node.ageText ? `${node.ageText}` : ''}\n
` : ''}\n ${node.birthPlace ? `
\n ${node.birthPlace}\n
` : ''}\n
\n \n ${node.spouseName && node.spouseId ? `\n
\n 配偶: ${node.spouseName}\n
\n ` : ''}\n \n ${node.deathYear ? `\n
\n ` : ''}\n
\n `\n })\n .onNodeClick((d: any) => {\n if (onMemberClick && d) {\n // d3-org-chart传递的是节点数据对象,需要提取id\n const nodeId = typeof d === 'string' ? d : (d.data?.id || d.id)\n if (nodeId) {\n onMemberClick(nodeId)\n }\n }\n })\n .render()\n .expandAll() // 初始化时展开所有节点\n\n // 添加配偶区域点击事件监听\n setTimeout(() => {\n const spouseAreas = chartRef.current?.querySelectorAll('.spouse-area')\n spouseAreas?.forEach((area) => {\n area.addEventListener('click', (e) => {\n e.stopPropagation() // 阻止事件冒泡到节点\n const spouseId = (area as HTMLElement).getAttribute('data-spouse-id')\n if (spouseId && onMemberClick) {\n onMemberClick(spouseId)\n }\n })\n })\n }, 100)\n\n chartInstanceRef.current = chart\n setIsReady(true)\n\n return () => {\n // 清理\n if (chartRef.current) {\n chartRef.current.innerHTML = ''\n }\n }\n }, [members, rootId, onMemberClick, avatarCache])\n\n // 监听selectedMembers变化,动态显示/隐藏勾选图标\n // 逻辑已移至tree/page.tsx以避免组件重新渲染\n \n // 导出PNG\n const handleExportPNG = () => {\n if (!chartInstanceRef.current) return\n\n chartInstanceRef.current.exportImg({\n save: true,\n full: true,\n onLoad: () => {\n onExport?.()\n }\n })\n }\n\n // 导出PDF\n const handleExportPDF = () => {\n if (!chartInstanceRef.current) return\n\n chartInstanceRef.current.exportImg({\n save: false,\n full: true,\n onLoad: (base64: string) => {\n const pdf = new jsPDF({\n orientation: 'landscape',\n unit: 'px',\n format: 'a4'\n })\n \n const img = new Image()\n img.src = base64\n img.onload = function () {\n const imgWidth = img.width\n const imgHeight = img.height\n const pdfWidth = pdf.internal.pageSize.getWidth()\n const pdfHeight = pdf.internal.pageSize.getHeight()\n \n // 计算缩放比例以适应页面\n const ratio = Math.min(pdfWidth / imgWidth, pdfHeight / imgHeight)\n const scaledWidth = imgWidth * ratio\n const scaledHeight = imgHeight * ratio\n \n // 居中放置\n const x = (pdfWidth - scaledWidth) / 2\n const y = (pdfHeight - scaledHeight) / 2\n \n pdf.addImage(img, 'PNG', x, y, scaledWidth, scaledHeight)\n pdf.save(`家谱图-${new Date().toISOString().split('T')[0]}.pdf`)\n onExport?.()\n }\n }\n })\n }\n\n // 展开所有节点\n const handleExpandAll = () => {\n if (!chartInstanceRef.current) return\n chartInstanceRef.current.expandAll()\n }\n\n // 折叠所有节点\n const handleCollapseAll = () => {\n if (!chartInstanceRef.current) return\n chartInstanceRef.current.collapseAll()\n }\n\n // 适应视图\n const handleFitView = () => {\n if (!chartInstanceRef.current) return\n chartInstanceRef.current.fit()\n }\n\n // 暴露方法给父组件\n useImperativeHandle(ref, () => ({\n exportPNG: handleExportPNG,\n exportPDF: handleExportPDF,\n expandAll: handleExpandAll,\n collapseAll: handleCollapseAll,\n fitView: handleFitView,\n }))\n\n return (\n
\n {/* 图表容器 */}\n
\n
\n )\n})\n\nD3OrgChartFlowComponent.displayName = 'D3OrgChartFlow'\n\n// 使用memo优化,避免不必要的重新渲染\nexport const D3OrgChartFlow = memo(D3OrgChartFlowComponent, (prevProps, nextProps) => {\n return prevProps.rootId === nextProps.rootId && \n prevProps.members === nextProps.members\n})\n"],"names":[],"mappings":"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"}}, + {"offset": {"line": 2227, "column": 0}, "map": {"version":3,"sources":["file:///Users/freedak/Documents/go-new/chinese-family-tree/lib/relationship-calculator.ts"],"sourcesContent":["import relationship from 'relationship.js'\nimport type { FamilyMember } from '@/types/family'\n\n/**\n * 家族关系计算器\n * 使用 relationship.js 库计算中文亲属关系\n */\nexport class RelationshipCalculator {\n private members: Map\n\n constructor(members: FamilyMember[]) {\n this.members = new Map(members.map(m => [m.id, m]))\n }\n\n /**\n * 计算两个成员之间的关系\n * @param fromId 起始成员ID(成员A)\n * @param toId 目标成员ID(成员B)\n * @returns 关系描述(toId 对 fromId 的称谓,即B是A的XXX)\n */\n getRelationship(fromId: string, toId: string): RelationshipResult {\n if (fromId === toId) {\n return {\n term: '本人',\n path: '',\n success: true\n }\n }\n\n const fromMember = this.members.get(fromId)\n const toMember = this.members.get(toId)\n\n if (!fromMember || !toMember) {\n return {\n term: '未知',\n path: '',\n success: false,\n error: '成员不存在'\n }\n }\n\n // 构建关系路径(从 fromId 到 toId)\n const path = this.buildRelationPath(fromId, toId)\n \n if (!path) {\n return {\n term: '无血缘关系',\n path: '',\n success: false\n }\n }\n\n // 将路径转换为中文\n const chinesePath = this.pathToChineseText(path)\n \n // 使用 relationship.js 计算关系\n try {\n // 获取fromId成员的性别(从谁的角度看关系)\n const fromMemberGender = fromMember.gender === 'FEMALE' ? 0 : 1\n \n // 计算关系(toId 对 fromId 的称谓)\n const result = relationship({\n text: chinesePath,\n target: '',\n sex: fromMemberGender, // 传入fromId的性别(从谁的角度看)\n reverse: true // 使用反向,因为路径是从A到B,但我们要的是B对A的称谓\n })\n \n const term = Array.isArray(result) && result.length > 0 ? result[0] : '亲戚'\n \n return {\n term,\n path: chinesePath,\n success: true\n }\n } catch (error) {\n return {\n term: '亲戚',\n path: chinesePath,\n success: true\n }\n }\n }\n\n /**\n * 构建关系路径字符串\n * 例如:'f' = 父亲, 'm' = 母亲, 'h' = 丈夫, 'w' = 妻子\n * 'ob' = 哥哥, 'lb' = 弟弟, 'os' = 姐姐, 'ls' = 妹妹\n */\n private buildRelationPath(fromId: string, toId: string): string | null {\n // 使用BFS查找最短路径\n const queue: Array<{ id: string; path: string }> = [{ id: fromId, path: '' }]\n const visited = new Set()\n\n while (queue.length > 0) {\n const { id, path } = queue.shift()!\n\n if (id === toId) {\n return path\n }\n\n if (visited.has(id)) continue\n visited.add(id)\n\n const member = this.members.get(id)\n if (!member) continue\n\n // 向上:父亲\n if (member.fatherId && !visited.has(member.fatherId)) {\n queue.push({ id: member.fatherId, path: path + 'f' })\n }\n\n // 向上:母亲\n if (member.motherId && !visited.has(member.motherId)) {\n queue.push({ id: member.motherId, path: path + 'm' })\n }\n\n // 配偶关系\n if (member.spouseIds) {\n for (const spouseId of member.spouseIds) {\n if (!visited.has(spouseId)) {\n const spouse = this.members.get(spouseId)\n if (spouse) {\n const spousePath = member.gender === 'MALE' ? 'w' : 'h'\n queue.push({ id: spouseId, path: path + spousePath })\n }\n }\n }\n }\n\n // 向下:子女\n if (member.childrenIds) {\n for (const childId of member.childrenIds) {\n if (!visited.has(childId)) {\n const child = this.members.get(childId)\n if (child) {\n const childPath = child.gender === 'MALE' ? 's' : 'd'\n queue.push({ id: childId, path: path + childPath })\n }\n }\n }\n }\n\n // 兄弟姐妹(通过父母查找)\n if (member.fatherId || member.motherId) {\n const siblings = this.getSiblings(id)\n for (const siblingId of siblings) {\n if (!visited.has(siblingId)) {\n const sibling = this.members.get(siblingId)\n if (sibling) {\n // 需要比较年龄确定是哥哥/弟弟/姐姐/妹妹\n const siblingPath = this.getSiblingPath(member, sibling)\n queue.push({ id: siblingId, path: path + siblingPath })\n }\n }\n }\n }\n }\n\n return null\n }\n\n /**\n * 获取兄弟姐妹\n */\n private getSiblings(memberId: string): string[] {\n const member = this.members.get(memberId)\n if (!member) return []\n\n const siblings: string[] = []\n\n // 通过父亲查找\n if (member.fatherId) {\n const father = this.members.get(member.fatherId)\n if (father?.childrenIds) {\n siblings.push(...father.childrenIds.filter(id => id !== memberId))\n }\n }\n\n // 通过母亲查找\n if (member.motherId) {\n const mother = this.members.get(member.motherId)\n if (mother?.childrenIds) {\n for (const childId of mother.childrenIds) {\n if (childId !== memberId && !siblings.includes(childId)) {\n siblings.push(childId)\n }\n }\n }\n }\n\n return siblings\n }\n\n /**\n * 获取兄弟姐妹关系路径\n */\n private getSiblingPath(from: FamilyMember, to: FamilyMember): string {\n const fromAge = this.getAge(from)\n const toAge = this.getAge(to)\n\n if (to.gender === 'MALE') {\n // 男性:哥哥(ob) 或 弟弟(lb)\n return toAge > fromAge ? 'ob' : 'lb'\n } else {\n // 女性:姐姐(os) 或 妹妹(ls)\n return toAge > fromAge ? 'os' : 'ls'\n }\n }\n\n /**\n * 获取年龄(用于比较)\n */\n private getAge(member: FamilyMember): number {\n if (!member.birthDate) return 0\n const birthYear = new Date(member.birthDate).getFullYear()\n return new Date().getFullYear() - birthYear\n }\n\n /**\n * 获取关系的详细说明\n */\n getRelationshipDetail(fromId: string, toId: string): RelationshipDetail {\n const result = this.getRelationship(fromId, toId)\n \n if (!result.success) {\n return {\n ...result,\n description: result.error || '无法计算关系'\n }\n }\n\n // 构建带人名的路径(从 fromId 到 toId)\n const pathWithNames = this.buildPathWithNames(fromId, toId)\n\n // 只返回关系称谓,不包含完整句子\n return {\n ...result,\n path: pathWithNames || result.path,\n description: result.term\n }\n }\n\n /**\n * 构建带人名的路径描述\n * @param fromId 起始ID(查询的起点)\n * @param toId 目标ID(查询的终点)\n */\n private buildPathWithNames(fromId: string, toId: string): string | null {\n const queue: Array<{ id: string; path: Array<{name: string, relation: string}> }> = [\n { id: fromId, path: [] }\n ]\n const visited = new Set()\n \n // 获取起始成员名字\n const startMember = this.members.get(fromId)\n const startName = startMember?.fullName || '未知'\n\n while (queue.length > 0) {\n const { id, path } = queue.shift()!\n\n if (id === toId) {\n // 构建路径字符串:从起点到终点\n if (path.length === 0) return '本人'\n \n // 格式:起点 → 关系1(人名1) → 关系2(人名2) → ...\n const pathStr = path.map(p => `${p.relation}(${p.name})`).join(' → ')\n return `${startName} → ${pathStr}`\n }\n\n if (visited.has(id)) continue\n visited.add(id)\n\n const member = this.members.get(id)\n if (!member) continue\n\n // 向上:父亲\n if (member.fatherId && !visited.has(member.fatherId)) {\n const father = this.members.get(member.fatherId)\n if (father) {\n queue.push({\n id: member.fatherId,\n path: [...path, { name: father.fullName, relation: '父亲' }]\n })\n }\n }\n\n // 向上:母亲\n if (member.motherId && !visited.has(member.motherId)) {\n const mother = this.members.get(member.motherId)\n if (mother) {\n queue.push({\n id: member.motherId,\n path: [...path, { name: mother.fullName, relation: '母亲' }]\n })\n }\n }\n\n // 配偶关系\n if (member.spouseIds) {\n for (const spouseId of member.spouseIds) {\n if (!visited.has(spouseId)) {\n const spouse = this.members.get(spouseId)\n if (spouse) {\n const relation = member.gender === 'MALE' ? '妻子' : '丈夫'\n queue.push({\n id: spouseId,\n path: [...path, { name: spouse.fullName, relation }]\n })\n }\n }\n }\n }\n\n // 向下:子女\n if (member.childrenIds) {\n for (const childId of member.childrenIds) {\n if (!visited.has(childId)) {\n const child = this.members.get(childId)\n if (child) {\n const relation = child.gender === 'MALE' ? '儿子' : '女儿'\n queue.push({\n id: childId,\n path: [...path, { name: child.fullName, relation }]\n })\n }\n }\n }\n }\n\n // 兄弟姐妹\n if (member.fatherId || member.motherId) {\n const siblings = this.getSiblings(id)\n for (const siblingId of siblings) {\n if (!visited.has(siblingId)) {\n const sibling = this.members.get(siblingId)\n if (sibling) {\n const siblingPath = this.getSiblingRelationName(member, sibling)\n queue.push({\n id: siblingId,\n path: [...path, { name: sibling.fullName, relation: siblingPath }]\n })\n }\n }\n }\n }\n }\n\n return null\n }\n\n /**\n * 获取兄弟姐妹关系名称\n */\n private getSiblingRelationName(from: FamilyMember, to: FamilyMember): string {\n const fromAge = this.getAge(from)\n const toAge = this.getAge(to)\n\n if (to.gender === 'MALE') {\n return toAge > fromAge ? '哥哥' : '弟弟'\n } else {\n return toAge > fromAge ? '姐姐' : '妹妹'\n }\n }\n\n /**\n * 计算路径长度(关系代数)\n */\n private calculatePathLength(path: string): number {\n let length = 0\n let i = 0\n \n while (i < path.length) {\n // 两字符的关系\n if (i + 1 < path.length) {\n const twoChar = path.substring(i, i + 2)\n if (['ob', 'lb', 'os', 'ls'].includes(twoChar)) {\n length++\n i += 2\n continue\n }\n }\n \n // 单字符的关系\n length++\n i++\n }\n \n return length\n }\n\n /**\n * 将符号路径转换为中文文本\n * 例如:'fm' -> '父亲的母亲'\n */\n private pathToChineseText(path: string): string {\n const pathMap: Record = {\n 'f': '父亲',\n 'm': '母亲',\n 'h': '丈夫',\n 'w': '妻子',\n 's': '儿子',\n 'd': '女儿',\n 'ob': '哥哥',\n 'lb': '弟弟',\n 'os': '姐姐',\n 'ls': '妹妹'\n }\n\n const parts: string[] = []\n let i = 0\n \n while (i < path.length) {\n // 处理两字符的关系(如 ob, lb, os, ls)\n if (i + 1 < path.length) {\n const twoChar = path.substring(i, i + 2)\n if (pathMap[twoChar]) {\n parts.push(pathMap[twoChar])\n i += 2\n continue\n }\n }\n \n // 处理单字符的关系\n const oneChar = path[i]\n if (pathMap[oneChar]) {\n parts.push(pathMap[oneChar])\n }\n i++\n }\n\n return parts.join('的')\n }\n\n /**\n * 将路径转换为中文描述(带\"的\"字)\n */\n private getPathDescription(path: string): string {\n const pathMap: Record = {\n 'f': '的父亲',\n 'm': '的母亲',\n 'h': '的丈夫',\n 'w': '的妻子',\n 's': '的儿子',\n 'd': '的女儿',\n 'ob': '的哥哥',\n 'lb': '的弟弟',\n 'os': '的姐姐',\n 'ls': '的妹妹'\n }\n\n let description = ''\n for (const char of path) {\n description += pathMap[char] || ''\n }\n\n return description || '本人'\n }\n}\n\nexport interface RelationshipResult {\n term: string // 关系称谓(如:父亲、堂兄弟)\n path: string // 关系路径(如:f, fbs)\n success: boolean // 是否成功计算\n error?: string // 错误信息\n}\n\nexport interface RelationshipDetail extends RelationshipResult {\n description: string // 关系描述(如:父亲的哥哥的儿子)\n}\n"],"names":[],"mappings":";;;;AAAA;;AAOO,MAAM;IACH,QAAkC;IAE1C,YAAY,OAAuB,CAAE;QACnC,IAAI,CAAC,OAAO,GAAG,IAAI,IAAI,QAAQ,GAAG,CAAC,CAAA,IAAK;gBAAC,EAAE,EAAE;gBAAE;aAAE;IACnD;IAEA;;;;;GAKC,GACD,gBAAgB,MAAc,EAAE,IAAY,EAAsB;QAChE,IAAI,WAAW,MAAM;YACnB,OAAO;gBACL,MAAM;gBACN,MAAM;gBACN,SAAS;YACX;QACF;QAEA,MAAM,aAAa,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC;QACpC,MAAM,WAAW,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC;QAElC,IAAI,CAAC,cAAc,CAAC,UAAU;YAC5B,OAAO;gBACL,MAAM;gBACN,MAAM;gBACN,SAAS;gBACT,OAAO;YACT;QACF;QAEA,0BAA0B;QAC1B,MAAM,OAAO,IAAI,CAAC,iBAAiB,CAAC,QAAQ;QAE5C,IAAI,CAAC,MAAM;YACT,OAAO;gBACL,MAAM;gBACN,MAAM;gBACN,SAAS;YACX;QACF;QAEA,WAAW;QACX,MAAM,cAAc,IAAI,CAAC,iBAAiB,CAAC;QAE3C,0BAA0B;QAC1B,IAAI;YACF,0BAA0B;YAC1B,MAAM,mBAAmB,WAAW,MAAM,KAAK,WAAW,IAAI;YAE9D,0BAA0B;YAC1B,MAAM,SAAS,IAAA,mSAAY,EAAC;gBAC1B,MAAM;gBACN,QAAQ;gBACR,KAAK;gBACL,SAAS,KAAM,8BAA8B;YAC/C;YAEA,MAAM,OAAO,MAAM,OAAO,CAAC,WAAW,OAAO,MAAM,GAAG,IAAI,MAAM,CAAC,EAAE,GAAG;YAEtE,OAAO;gBACL;gBACA,MAAM;gBACN,SAAS;YACX;QACF,EAAE,OAAO,OAAO;YACd,OAAO;gBACL,MAAM;gBACN,MAAM;gBACN,SAAS;YACX;QACF;IACF;IAEA;;;;GAIC,GACD,AAAQ,kBAAkB,MAAc,EAAE,IAAY,EAAiB;QACrE,cAAc;QACd,MAAM,QAA6C;YAAC;gBAAE,IAAI;gBAAQ,MAAM;YAAG;SAAE;QAC7E,MAAM,UAAU,IAAI;QAEpB,MAAO,MAAM,MAAM,GAAG,EAAG;YACvB,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,GAAG,MAAM,KAAK;YAEhC,IAAI,OAAO,MAAM;gBACf,OAAO;YACT;YAEA,IAAI,QAAQ,GAAG,CAAC,KAAK;YACrB,QAAQ,GAAG,CAAC;YAEZ,MAAM,SAAS,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC;YAChC,IAAI,CAAC,QAAQ;YAEb,QAAQ;YACR,IAAI,OAAO,QAAQ,IAAI,CAAC,QAAQ,GAAG,CAAC,OAAO,QAAQ,GAAG;gBACpD,MAAM,IAAI,CAAC;oBAAE,IAAI,OAAO,QAAQ;oBAAE,MAAM,OAAO;gBAAI;YACrD;YAEA,QAAQ;YACR,IAAI,OAAO,QAAQ,IAAI,CAAC,QAAQ,GAAG,CAAC,OAAO,QAAQ,GAAG;gBACpD,MAAM,IAAI,CAAC;oBAAE,IAAI,OAAO,QAAQ;oBAAE,MAAM,OAAO;gBAAI;YACrD;YAEA,OAAO;YACP,IAAI,OAAO,SAAS,EAAE;gBACpB,KAAK,MAAM,YAAY,OAAO,SAAS,CAAE;oBACvC,IAAI,CAAC,QAAQ,GAAG,CAAC,WAAW;wBAC1B,MAAM,SAAS,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC;wBAChC,IAAI,QAAQ;4BACV,MAAM,aAAa,OAAO,MAAM,KAAK,SAAS,MAAM;4BACpD,MAAM,IAAI,CAAC;gCAAE,IAAI;gCAAU,MAAM,OAAO;4BAAW;wBACrD;oBACF;gBACF;YACF;YAEA,QAAQ;YACR,IAAI,OAAO,WAAW,EAAE;gBACtB,KAAK,MAAM,WAAW,OAAO,WAAW,CAAE;oBACxC,IAAI,CAAC,QAAQ,GAAG,CAAC,UAAU;wBACzB,MAAM,QAAQ,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC;wBAC/B,IAAI,OAAO;4BACT,MAAM,YAAY,MAAM,MAAM,KAAK,SAAS,MAAM;4BAClD,MAAM,IAAI,CAAC;gCAAE,IAAI;gCAAS,MAAM,OAAO;4BAAU;wBACnD;oBACF;gBACF;YACF;YAEA,eAAe;YACf,IAAI,OAAO,QAAQ,IAAI,OAAO,QAAQ,EAAE;gBACtC,MAAM,WAAW,IAAI,CAAC,WAAW,CAAC;gBAClC,KAAK,MAAM,aAAa,SAAU;oBAChC,IAAI,CAAC,QAAQ,GAAG,CAAC,YAAY;wBAC3B,MAAM,UAAU,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC;wBACjC,IAAI,SAAS;4BACX,uBAAuB;4BACvB,MAAM,cAAc,IAAI,CAAC,cAAc,CAAC,QAAQ;4BAChD,MAAM,IAAI,CAAC;gCAAE,IAAI;gCAAW,MAAM,OAAO;4BAAY;wBACvD;oBACF;gBACF;YACF;QACF;QAEA,OAAO;IACT;IAEA;;GAEC,GACD,AAAQ,YAAY,QAAgB,EAAY;QAC9C,MAAM,SAAS,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC;QAChC,IAAI,CAAC,QAAQ,OAAO,EAAE;QAEtB,MAAM,WAAqB,EAAE;QAE7B,SAAS;QACT,IAAI,OAAO,QAAQ,EAAE;YACnB,MAAM,SAAS,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,QAAQ;YAC/C,IAAI,QAAQ,aAAa;gBACvB,SAAS,IAAI,IAAI,OAAO,WAAW,CAAC,MAAM,CAAC,CAAA,KAAM,OAAO;YAC1D;QACF;QAEA,SAAS;QACT,IAAI,OAAO,QAAQ,EAAE;YACnB,MAAM,SAAS,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,QAAQ;YAC/C,IAAI,QAAQ,aAAa;gBACvB,KAAK,MAAM,WAAW,OAAO,WAAW,CAAE;oBACxC,IAAI,YAAY,YAAY,CAAC,SAAS,QAAQ,CAAC,UAAU;wBACvD,SAAS,IAAI,CAAC;oBAChB;gBACF;YACF;QACF;QAEA,OAAO;IACT;IAEA;;GAEC,GACD,AAAQ,eAAe,IAAkB,EAAE,EAAgB,EAAU;QACnE,MAAM,UAAU,IAAI,CAAC,MAAM,CAAC;QAC5B,MAAM,QAAQ,IAAI,CAAC,MAAM,CAAC;QAE1B,IAAI,GAAG,MAAM,KAAK,QAAQ;YACxB,qBAAqB;YACrB,OAAO,QAAQ,UAAU,OAAO;QAClC,OAAO;YACL,qBAAqB;YACrB,OAAO,QAAQ,UAAU,OAAO;QAClC;IACF;IAEA;;GAEC,GACD,AAAQ,OAAO,MAAoB,EAAU;QAC3C,IAAI,CAAC,OAAO,SAAS,EAAE,OAAO;QAC9B,MAAM,YAAY,IAAI,KAAK,OAAO,SAAS,EAAE,WAAW;QACxD,OAAO,IAAI,OAAO,WAAW,KAAK;IACpC;IAEA;;GAEC,GACD,sBAAsB,MAAc,EAAE,IAAY,EAAsB;QACtE,MAAM,SAAS,IAAI,CAAC,eAAe,CAAC,QAAQ;QAE5C,IAAI,CAAC,OAAO,OAAO,EAAE;YACnB,OAAO;gBACL,GAAG,MAAM;gBACT,aAAa,OAAO,KAAK,IAAI;YAC/B;QACF;QAEA,4BAA4B;QAC5B,MAAM,gBAAgB,IAAI,CAAC,kBAAkB,CAAC,QAAQ;QAEtD,kBAAkB;QAClB,OAAO;YACL,GAAG,MAAM;YACT,MAAM,iBAAiB,OAAO,IAAI;YAClC,aAAa,OAAO,IAAI;QAC1B;IACF;IAEA;;;;GAIC,GACD,AAAQ,mBAAmB,MAAc,EAAE,IAAY,EAAiB;QACtE,MAAM,QAA8E;YAClF;gBAAE,IAAI;gBAAQ,MAAM,EAAE;YAAC;SACxB;QACD,MAAM,UAAU,IAAI;QAEpB,WAAW;QACX,MAAM,cAAc,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC;QACrC,MAAM,YAAY,aAAa,YAAY;QAE3C,MAAO,MAAM,MAAM,GAAG,EAAG;YACvB,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,GAAG,MAAM,KAAK;YAEhC,IAAI,OAAO,MAAM;gBACf,iBAAiB;gBACjB,IAAI,KAAK,MAAM,KAAK,GAAG,OAAO;gBAE9B,oCAAoC;gBACpC,MAAM,UAAU,KAAK,GAAG,CAAC,CAAA,IAAK,GAAG,EAAE,QAAQ,CAAC,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC;gBAC/D,OAAO,GAAG,UAAU,GAAG,EAAE,SAAS;YACpC;YAEA,IAAI,QAAQ,GAAG,CAAC,KAAK;YACrB,QAAQ,GAAG,CAAC;YAEZ,MAAM,SAAS,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC;YAChC,IAAI,CAAC,QAAQ;YAEb,QAAQ;YACR,IAAI,OAAO,QAAQ,IAAI,CAAC,QAAQ,GAAG,CAAC,OAAO,QAAQ,GAAG;gBACpD,MAAM,SAAS,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,QAAQ;gBAC/C,IAAI,QAAQ;oBACV,MAAM,IAAI,CAAC;wBACT,IAAI,OAAO,QAAQ;wBACnB,MAAM;+BAAI;4BAAM;gCAAE,MAAM,OAAO,QAAQ;gCAAE,UAAU;4BAAK;yBAAE;oBAC5D;gBACF;YACF;YAEA,QAAQ;YACR,IAAI,OAAO,QAAQ,IAAI,CAAC,QAAQ,GAAG,CAAC,OAAO,QAAQ,GAAG;gBACpD,MAAM,SAAS,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,QAAQ;gBAC/C,IAAI,QAAQ;oBACV,MAAM,IAAI,CAAC;wBACT,IAAI,OAAO,QAAQ;wBACnB,MAAM;+BAAI;4BAAM;gCAAE,MAAM,OAAO,QAAQ;gCAAE,UAAU;4BAAK;yBAAE;oBAC5D;gBACF;YACF;YAEA,OAAO;YACP,IAAI,OAAO,SAAS,EAAE;gBACpB,KAAK,MAAM,YAAY,OAAO,SAAS,CAAE;oBACvC,IAAI,CAAC,QAAQ,GAAG,CAAC,WAAW;wBAC1B,MAAM,SAAS,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC;wBAChC,IAAI,QAAQ;4BACV,MAAM,WAAW,OAAO,MAAM,KAAK,SAAS,OAAO;4BACnD,MAAM,IAAI,CAAC;gCACT,IAAI;gCACJ,MAAM;uCAAI;oCAAM;wCAAE,MAAM,OAAO,QAAQ;wCAAE;oCAAS;iCAAE;4BACtD;wBACF;oBACF;gBACF;YACF;YAEA,QAAQ;YACR,IAAI,OAAO,WAAW,EAAE;gBACtB,KAAK,MAAM,WAAW,OAAO,WAAW,CAAE;oBACxC,IAAI,CAAC,QAAQ,GAAG,CAAC,UAAU;wBACzB,MAAM,QAAQ,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC;wBAC/B,IAAI,OAAO;4BACT,MAAM,WAAW,MAAM,MAAM,KAAK,SAAS,OAAO;4BAClD,MAAM,IAAI,CAAC;gCACT,IAAI;gCACJ,MAAM;uCAAI;oCAAM;wCAAE,MAAM,MAAM,QAAQ;wCAAE;oCAAS;iCAAE;4BACrD;wBACF;oBACF;gBACF;YACF;YAEA,OAAO;YACP,IAAI,OAAO,QAAQ,IAAI,OAAO,QAAQ,EAAE;gBACtC,MAAM,WAAW,IAAI,CAAC,WAAW,CAAC;gBAClC,KAAK,MAAM,aAAa,SAAU;oBAChC,IAAI,CAAC,QAAQ,GAAG,CAAC,YAAY;wBAC3B,MAAM,UAAU,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC;wBACjC,IAAI,SAAS;4BACX,MAAM,cAAc,IAAI,CAAC,sBAAsB,CAAC,QAAQ;4BACxD,MAAM,IAAI,CAAC;gCACT,IAAI;gCACJ,MAAM;uCAAI;oCAAM;wCAAE,MAAM,QAAQ,QAAQ;wCAAE,UAAU;oCAAY;iCAAE;4BACpE;wBACF;oBACF;gBACF;YACF;QACF;QAEA,OAAO;IACT;IAEA;;GAEC,GACD,AAAQ,uBAAuB,IAAkB,EAAE,EAAgB,EAAU;QAC3E,MAAM,UAAU,IAAI,CAAC,MAAM,CAAC;QAC5B,MAAM,QAAQ,IAAI,CAAC,MAAM,CAAC;QAE1B,IAAI,GAAG,MAAM,KAAK,QAAQ;YACxB,OAAO,QAAQ,UAAU,OAAO;QAClC,OAAO;YACL,OAAO,QAAQ,UAAU,OAAO;QAClC;IACF;IAEA;;GAEC,GACD,AAAQ,oBAAoB,IAAY,EAAU;QAChD,IAAI,SAAS;QACb,IAAI,IAAI;QAER,MAAO,IAAI,KAAK,MAAM,CAAE;YACtB,SAAS;YACT,IAAI,IAAI,IAAI,KAAK,MAAM,EAAE;gBACvB,MAAM,UAAU,KAAK,SAAS,CAAC,GAAG,IAAI;gBACtC,IAAI;oBAAC;oBAAM;oBAAM;oBAAM;iBAAK,CAAC,QAAQ,CAAC,UAAU;oBAC9C;oBACA,KAAK;oBACL;gBACF;YACF;YAEA,SAAS;YACT;YACA;QACF;QAEA,OAAO;IACT;IAEA;;;GAGC,GACD,AAAQ,kBAAkB,IAAY,EAAU;QAC9C,MAAM,UAAkC;YACtC,KAAK;YACL,KAAK;YACL,KAAK;YACL,KAAK;YACL,KAAK;YACL,KAAK;YACL,MAAM;YACN,MAAM;YACN,MAAM;YACN,MAAM;QACR;QAEA,MAAM,QAAkB,EAAE;QAC1B,IAAI,IAAI;QAER,MAAO,IAAI,KAAK,MAAM,CAAE;YACtB,6BAA6B;YAC7B,IAAI,IAAI,IAAI,KAAK,MAAM,EAAE;gBACvB,MAAM,UAAU,KAAK,SAAS,CAAC,GAAG,IAAI;gBACtC,IAAI,OAAO,CAAC,QAAQ,EAAE;oBACpB,MAAM,IAAI,CAAC,OAAO,CAAC,QAAQ;oBAC3B,KAAK;oBACL;gBACF;YACF;YAEA,WAAW;YACX,MAAM,UAAU,IAAI,CAAC,EAAE;YACvB,IAAI,OAAO,CAAC,QAAQ,EAAE;gBACpB,MAAM,IAAI,CAAC,OAAO,CAAC,QAAQ;YAC7B;YACA;QACF;QAEA,OAAO,MAAM,IAAI,CAAC;IACpB;IAEA;;GAEC,GACD,AAAQ,mBAAmB,IAAY,EAAU;QAC/C,MAAM,UAAkC;YACtC,KAAK;YACL,KAAK;YACL,KAAK;YACL,KAAK;YACL,KAAK;YACL,KAAK;YACL,MAAM;YACN,MAAM;YACN,MAAM;YACN,MAAM;QACR;QAEA,IAAI,cAAc;QAClB,KAAK,MAAM,QAAQ,KAAM;YACvB,eAAe,OAAO,CAAC,KAAK,IAAI;QAClC;QAEA,OAAO,eAAe;IACxB;AACF"}}, + {"offset": {"line": 2678, "column": 0}, "map": {"version":3,"sources":["file:///Users/freedak/Documents/go-new/chinese-family-tree/hooks/use-relationship.ts"],"sourcesContent":["import { useState } from 'react'\nimport { useFamily } from '@/context/family-context'\nimport { RelationshipCalculator, type RelationshipDetail } from '@/lib/relationship-calculator'\n\n/**\n * 使用家族关系计算的Hook\n */\nexport function useRelationship() {\n const { treeData } = useFamily()\n const [loading, setLoading] = useState(false)\n\n /**\n * 计算两个成员之间的关系(客户端计算)\n */\n const calculateRelationship = (fromId: string, toId: string): RelationshipDetail => {\n const members = Object.values(treeData.members)\n const calculator = new RelationshipCalculator(members)\n return calculator.getRelationshipDetail(fromId, toId)\n }\n\n /**\n * 通过API计算关系(服务端计算)\n */\n const calculateRelationshipAPI = async (\n treeId: string,\n fromId: string,\n toId: string\n ): Promise => {\n setLoading(true)\n try {\n const response = await fetch(\n `/api/trees/${treeId}/relationship?from=${fromId}&to=${toId}`\n )\n \n if (!response.ok) {\n throw new Error('计算关系失败')\n }\n\n const data = await response.json()\n return {\n term: data.relationship,\n path: data.path,\n description: data.description,\n success: data.success\n }\n } catch (error) {\n console.error('计算关系失败:', error)\n return null\n } finally {\n setLoading(false)\n }\n }\n\n /**\n * 获取成员的所有直系亲属\n */\n const getDirectRelatives = (memberId: string) => {\n const member = treeData.members[memberId]\n if (!member) return null\n\n const relatives = {\n father: member.fatherId ? treeData.members[member.fatherId] : null,\n mother: member.motherId ? treeData.members[member.motherId] : null,\n spouses: member.spouseIds?.map(id => treeData.members[id]).filter(Boolean) || [],\n children: member.childrenIds?.map(id => treeData.members[id]).filter(Boolean) || []\n }\n\n return relatives\n }\n\n /**\n * 获取成员的所有兄弟姐妹\n */\n const getSiblings = (memberId: string) => {\n const member = treeData.members[memberId]\n if (!member) return []\n\n const siblings = new Set()\n\n // 通过父亲查找\n if (member.fatherId) {\n const father = treeData.members[member.fatherId]\n if (father?.childrenIds) {\n father.childrenIds.forEach(id => {\n if (id !== memberId) siblings.add(id)\n })\n }\n }\n\n // 通过母亲查找\n if (member.motherId) {\n const mother = treeData.members[member.motherId]\n if (mother?.childrenIds) {\n mother.childrenIds.forEach(id => {\n if (id !== memberId) siblings.add(id)\n })\n }\n }\n\n return Array.from(siblings).map(id => treeData.members[id]).filter(Boolean)\n }\n\n /**\n * 获取成员的所有祖先\n */\n const getAncestors = (memberId: string, maxGenerations: number = 10) => {\n const ancestors: any[] = []\n const visited = new Set()\n const queue = [{ id: memberId, generation: 0 }]\n\n while (queue.length > 0) {\n const { id, generation } = queue.shift()!\n\n if (generation >= maxGenerations || visited.has(id)) continue\n visited.add(id)\n\n const member = treeData.members[id]\n if (!member) continue\n\n if (generation > 0) {\n ancestors.push({ ...member, generationDiff: generation })\n }\n\n if (member.fatherId) {\n queue.push({ id: member.fatherId, generation: generation + 1 })\n }\n if (member.motherId) {\n queue.push({ id: member.motherId, generation: generation + 1 })\n }\n }\n\n return ancestors\n }\n\n /**\n * 获取成员的所有后代\n */\n const getDescendants = (memberId: string, maxGenerations: number = 10) => {\n const descendants: any[] = []\n const visited = new Set()\n const queue = [{ id: memberId, generation: 0 }]\n\n while (queue.length > 0) {\n const { id, generation } = queue.shift()!\n\n if (generation >= maxGenerations || visited.has(id)) continue\n visited.add(id)\n\n const member = treeData.members[id]\n if (!member) continue\n\n if (generation > 0) {\n descendants.push({ ...member, generationDiff: generation })\n }\n\n if (member.childrenIds) {\n member.childrenIds.forEach(childId => {\n queue.push({ id: childId, generation: generation + 1 })\n })\n }\n }\n\n return descendants\n }\n\n return {\n calculateRelationship,\n calculateRelationshipAPI,\n getDirectRelatives,\n getSiblings,\n getAncestors,\n getDescendants,\n loading\n }\n}\n"],"names":[],"mappings":"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"}}, + {"offset": {"line": 2846, "column": 0}, "map": {"version":3,"sources":["file:///Users/freedak/Documents/go-new/chinese-family-tree/components/ui/dialog.tsx"],"sourcesContent":["'use client'\n\nimport * as React from 'react'\nimport * as DialogPrimitive from '@radix-ui/react-dialog'\nimport { XIcon } from 'lucide-react'\n\nimport { cn } from '@/lib/utils'\n\nfunction Dialog({\n ...props\n}: React.ComponentProps) {\n return \n}\n\nfunction DialogTrigger({\n ...props\n}: React.ComponentProps) {\n return \n}\n\nfunction DialogPortal({\n ...props\n}: React.ComponentProps) {\n return \n}\n\nfunction DialogClose({\n ...props\n}: React.ComponentProps) {\n return \n}\n\nfunction DialogOverlay({\n className,\n ...props\n}: React.ComponentProps) {\n return (\n \n )\n}\n\nfunction DialogContent({\n className,\n children,\n showCloseButton = true,\n ...props\n}: React.ComponentProps & {\n showCloseButton?: boolean\n}) {\n return (\n \n \n \n {children}\n {showCloseButton && (\n \n \n Close\n \n )}\n \n \n )\n}\n\nfunction DialogHeader({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n \n )\n}\n\nfunction DialogFooter({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n \n )\n}\n\nfunction DialogTitle({\n className,\n ...props\n}: React.ComponentProps) {\n return (\n \n )\n}\n\nfunction DialogDescription({\n className,\n ...props\n}: React.ComponentProps) {\n return (\n \n )\n}\n\nexport {\n Dialog,\n DialogClose,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogOverlay,\n DialogPortal,\n DialogTitle,\n DialogTrigger,\n}\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AAGA;AACA;AAEA;AANA;;;;;AAQA,SAAS,OAAO,EACd,GAAG,OAC+C;IAClD,qBAAO,oaAAC,qbAAoB;QAAC,aAAU;QAAU,GAAG,KAAK;;;;;;AAC3D;AAEA,SAAS,cAAc,EACrB,GAAG,OACkD;IACrD,qBAAO,oaAAC,wbAAuB;QAAC,aAAU;QAAkB,GAAG,KAAK;;;;;;AACtE;AAEA,SAAS,aAAa,EACpB,GAAG,OACiD;IACpD,qBAAO,oaAAC,ubAAsB;QAAC,aAAU;QAAiB,GAAG,KAAK;;;;;;AACpE;AAEA,SAAS,YAAY,EACnB,GAAG,OACgD;IACnD,qBAAO,oaAAC,sbAAqB;QAAC,aAAU;QAAgB,GAAG,KAAK;;;;;;AAClE;AAEA,SAAS,cAAc,EACrB,SAAS,EACT,GAAG,OACkD;IACrD,qBACE,oaAAC,wbAAuB;QACtB,aAAU;QACV,WAAW,IAAA,yKAAE,EACX,0JACA;QAED,GAAG,KAAK;;;;;;AAGf;AAEA,SAAS,cAAc,EACrB,SAAS,EACT,QAAQ,EACR,kBAAkB,IAAI,EACtB,GAAG,OAGJ;IACC,qBACE,oaAAC;QAAa,aAAU;;0BACtB,oaAAC;;;;;0BACD,oaAAC,wbAAuB;gBACtB,aAAU;gBACV,WAAW,IAAA,yKAAE,EACX,+WACA;gBAED,GAAG,KAAK;;oBAER;oBACA,iCACC,oaAAC,sbAAqB;wBACpB,aAAU;wBACV,WAAU;;0CAEV,oaAAC,oVAAK;;;;;0CACN,oaAAC;gCAAK,WAAU;0CAAU;;;;;;;;;;;;;;;;;;;;;;;;AAMtC;AAEA,SAAS,aAAa,EAAE,SAAS,EAAE,GAAG,OAAoC;IACxE,qBACE,oaAAC;QACC,aAAU;QACV,WAAW,IAAA,yKAAE,EAAC,gDAAgD;QAC7D,GAAG,KAAK;;;;;;AAGf;AAEA,SAAS,aAAa,EAAE,SAAS,EAAE,GAAG,OAAoC;IACxE,qBACE,oaAAC;QACC,aAAU;QACV,WAAW,IAAA,yKAAE,EACX,0DACA;QAED,GAAG,KAAK;;;;;;AAGf;AAEA,SAAS,YAAY,EACnB,SAAS,EACT,GAAG,OACgD;IACnD,qBACE,oaAAC,sbAAqB;QACpB,aAAU;QACV,WAAW,IAAA,yKAAE,EAAC,sCAAsC;QACnD,GAAG,KAAK;;;;;;AAGf;AAEA,SAAS,kBAAkB,EACzB,SAAS,EACT,GAAG,OACsD;IACzD,qBACE,oaAAC,4bAA2B;QAC1B,aAAU;QACV,WAAW,IAAA,yKAAE,EAAC,iCAAiC;QAC9C,GAAG,KAAK;;;;;;AAGf"}}, + {"offset": {"line": 3028, "column": 0}, "map": {"version":3,"sources":["file:///Users/freedak/Documents/go-new/chinese-family-tree/components/ui/badge.tsx"],"sourcesContent":["import * as React from 'react'\nimport { Slot } from '@radix-ui/react-slot'\nimport { cva, type VariantProps } from 'class-variance-authority'\n\nimport { cn } from '@/lib/utils'\n\nconst badgeVariants = cva(\n 'inline-flex items-center justify-center rounded-md border px-2 py-0.5 text-xs font-medium w-fit whitespace-nowrap shrink-0 [&>svg]:size-3 gap-1 [&>svg]:pointer-events-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 transition-[color,box-shadow] overflow-hidden',\n {\n variants: {\n variant: {\n default:\n 'border-transparent bg-primary text-primary-foreground [a&]:hover:bg-primary/90',\n secondary:\n 'border-transparent bg-secondary text-secondary-foreground [a&]:hover:bg-secondary/90',\n destructive:\n 'border-transparent bg-destructive text-white [a&]:hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/60',\n outline:\n 'text-foreground [a&]:hover:bg-accent [a&]:hover:text-accent-foreground',\n },\n },\n defaultVariants: {\n variant: 'default',\n },\n },\n)\n\nfunction Badge({\n className,\n variant,\n asChild = false,\n ...props\n}: React.ComponentProps<'span'> &\n VariantProps & { asChild?: boolean }) {\n const Comp = asChild ? Slot : 'span'\n\n return (\n \n )\n}\n\nexport { Badge, badgeVariants }\n"],"names":[],"mappings":";;;;;;;AACA;AACA;AAEA;;;;;AAEA,MAAM,gBAAgB,IAAA,ySAAG,EACvB,kZACA;IACE,UAAU;QACR,SAAS;YACP,SACE;YACF,WACE;YACF,aACE;YACF,SACE;QACJ;IACF;IACA,iBAAiB;QACf,SAAS;IACX;AACF;AAGF,SAAS,MAAM,EACb,SAAS,EACT,OAAO,EACP,UAAU,KAAK,EACf,GAAG,OAEuD;IAC1D,MAAM,OAAO,UAAU,mWAAI,GAAG;IAE9B,qBACE,oaAAC;QACC,aAAU;QACV,WAAW,IAAA,yKAAE,EAAC,cAAc;YAAE;QAAQ,IAAI;QACzC,GAAG,KAAK;;;;;;AAGf"}}, + {"offset": {"line": 3074, "column": 0}, "map": {"version":3,"sources":["file:///Users/freedak/Documents/go-new/chinese-family-tree/app/tree/page.tsx"],"sourcesContent":["\"use client\"\n\nimport type React from \"react\"\n\nimport { SiteHeader } from \"@/components/site-header\"\nimport { TreeLayout } from \"@/components/tree/tree-layout\"\nimport { D3OrgChartFlow, type D3OrgChartRef } from \"@/components/tree/d3-org-chart-flow\"\nimport { useFamily } from \"@/context/family-context\"\nimport { useRelationship } from \"@/hooks/use-relationship\"\nimport { Button } from \"@/components/ui/button\"\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuTrigger,\n} from \"@/components/ui/dropdown-menu\"\nimport { Dialog, DialogContent, DialogHeader, DialogTitle } from \"@/components/ui/dialog\"\nimport { Badge } from \"@/components/ui/badge\"\nimport { ZoomIn, ZoomOut, Move, Download, LayoutGrid, ChevronDown, Users } from \"lucide-react\"\nimport { useState, useRef, useEffect, useCallback } from \"react\"\nimport { useRouter, useSearchParams } from \"next/navigation\"\n\ntype ViewMode = \"traditional\" | \"d3-org-chart\"\n\nexport default function TreePage() {\n const { treeData } = useFamily()\n const { calculateRelationship } = useRelationship()\n const router = useRouter()\n const searchParams = useSearchParams()\n const [viewMode, setViewMode] = useState(\"traditional\")\n \n // 关系查询模式\n const [relationMode, setRelationMode] = useState(false)\n const [selectedMembers, setSelectedMembers] = useState([])\n const [relationResult, setRelationResult] = useState(null)\n const [showRelationDialog, setShowRelationDialog] = useState(false)\n \n // 使用ref存储最新的relationMode值,避免回调重新创建\n const relationModeRef = useRef(relationMode)\n const selectedMembersRef = useRef(selectedMembers)\n \n useEffect(() => {\n relationModeRef.current = relationMode\n selectedMembersRef.current = selectedMembers\n }, [relationMode, selectedMembers])\n \n // 从 URL 参数读取视图模式\n useEffect(() => {\n const view = searchParams.get('view')\n if (view === 'd3-org-chart' || view === 'traditional') {\n setViewMode(view)\n }\n }, [searchParams])\n const [scale, setScale] = useState(1)\n const [position, setPosition] = useState({ x: 0, y: 0 })\n const [isDragging, setIsDragging] = useState(false)\n const [startPos, setStartPos] = useState({ x: 0, y: 0 })\n const [dragStartPos, setDragStartPos] = useState({ x: 0, y: 0 })\n const containerRef = useRef(null)\n const d3ChartRef = useRef(null)\n\n const handleMouseDown = (e: React.MouseEvent) => {\n // 如果点击的是节点卡片,不启动拖拽\n const target = e.target as HTMLElement\n if (target.closest('.family-node-card')) {\n return\n }\n \n setIsDragging(true)\n setStartPos({ x: e.clientX - position.x, y: e.clientY - position.y })\n setDragStartPos({ x: e.clientX, y: e.clientY })\n }\n\n const handleMouseMove = (e: React.MouseEvent) => {\n if (!isDragging) return\n \n // 只有移动超过5px才算拖拽,避免误触\n const deltaX = Math.abs(e.clientX - dragStartPos.x)\n const deltaY = Math.abs(e.clientY - dragStartPos.y)\n if (deltaX < 5 && deltaY < 5) return\n \n setPosition({\n x: e.clientX - startPos.x,\n y: e.clientY - startPos.y,\n })\n }\n\n const handleMouseUp = () => {\n setIsDragging(false)\n }\n\n // 处理成员选择(关系查询模式)\n const handleMemberClick = (memberId: string) => {\n if (selectedMembers.length === 0) {\n // 选择第一个成员\n setSelectedMembers([memberId])\n } else if (selectedMembers.length === 1) {\n // 选择第二个成员,计算关系\n const [firstId] = selectedMembers\n if (firstId === memberId) {\n // 点击同一个人,取消选择\n setSelectedMembers([])\n return\n }\n \n const result = calculateRelationship(firstId, memberId)\n const firstMember = treeData.members[firstId]\n const secondMember = treeData.members[memberId]\n \n setRelationResult({\n from: firstMember,\n to: secondMember,\n relationship: result\n })\n setShowRelationDialog(true)\n setSelectedMembers([])\n setRelationMode(false)\n }\n }\n \n // 切换关系查询模式\n const toggleRelationMode = () => {\n setRelationMode(!relationMode)\n setSelectedMembers([])\n setRelationResult(null)\n }\n \n // 处理对话框关闭\n const handleDialogClose = (open: boolean) => {\n setShowRelationDialog(open)\n if (!open && relationResult) {\n // 清除选中样式\n const clearNodeStyle = (nodeId: string) => {\n const chartContainer = document.querySelector('.w-full.h-full.bg-background.rounded-lg.border')\n const svg = chartContainer?.querySelector('svg')\n if (!svg) return\n \n const foreignObjects = svg.querySelectorAll('foreignObject')\n foreignObjects.forEach((fo: any) => {\n const nodeData = (fo.parentNode as any)?.__data__?.data\n if (nodeData?.id === nodeId) {\n const nameDiv = fo.querySelector('div[style*=\"font-size: 13px\"]') as HTMLElement\n if (nameDiv) {\n // 移除勾选图标\n const checkIcon = nameDiv.querySelector('svg')\n if (checkIcon) {\n checkIcon.remove()\n }\n }\n }\n })\n }\n \n clearNodeStyle(relationResult.from.id)\n clearNodeStyle(relationResult.to.id)\n }\n }\n \n // 使用useCallback创建稳定的回调,通过ref访问最新的relationMode\n const handleD3MemberClick = useCallback((id: string) => {\n console.log('D3 onMemberClick triggered:', id, 'relationMode:', relationModeRef.current)\n if (relationModeRef.current) {\n console.log('Calling handleMemberClick')\n \n // 更新节点样式的辅助函数\n const updateNodeStyle = (nodeId: string, isSelected: boolean) => {\n // 从DOM中查找D3图表容器\n const chartContainer = document.querySelector('.w-full.h-full.bg-background.rounded-lg.border')\n const svg = chartContainer?.querySelector('svg')\n if (!svg) return\n \n const foreignObjects = svg.querySelectorAll('foreignObject')\n foreignObjects.forEach((fo: any) => {\n const nodeData = (fo.parentNode as any)?.__data__?.data\n if (nodeData?.id === nodeId) {\n const nameDiv = fo.querySelector('div[style*=\"font-size: 13px\"]') as HTMLElement\n if (nameDiv) {\n if (isSelected) {\n // 添加勾选图标\n if (!nameDiv.querySelector('svg')) {\n const iconHTML = ``\n nameDiv.style.display = 'flex'\n nameDiv.style.alignItems = 'center'\n nameDiv.insertAdjacentHTML('beforeend', iconHTML)\n }\n } else {\n // 移除勾选图标\n const checkIcon = nameDiv.querySelector('svg')\n if (checkIcon) {\n checkIcon.remove()\n }\n }\n }\n }\n })\n }\n \n // 直接处理选择逻辑\n if (selectedMembersRef.current.length === 0) {\n updateNodeStyle(id, true)\n setSelectedMembers([id])\n } else if (selectedMembersRef.current.length === 1) {\n const [firstId] = selectedMembersRef.current\n if (firstId === id) {\n updateNodeStyle(id, false)\n setSelectedMembers([])\n return\n }\n \n updateNodeStyle(id, true)\n \n const result = calculateRelationship(firstId, id)\n const firstMember = treeData.members[firstId]\n const secondMember = treeData.members[id]\n \n setRelationResult({\n from: firstMember,\n to: secondMember,\n relationship: result\n })\n setShowRelationDialog(true)\n setSelectedMembers([])\n setRelationMode(false)\n // 选中样式会在对话框关闭时清除\n }\n } else {\n console.log('Navigating to member detail')\n router.push(`/members/${id}`)\n }\n }, [router, calculateRelationship, treeData.members])\n\n const handleExportImage = async () => {\n if (!containerRef.current) return\n\n try {\n // 临时重置位置和缩放以获取完整视图\n const originalPosition = { ...position }\n const originalScale = scale\n setPosition({ x: 0, y: 0 })\n setScale(1)\n\n // 等待 DOM 更新\n await new Promise(resolve => setTimeout(resolve, 800))\n\n // 找到实际的族谱容器(包含 TreeLayout 的 div)\n const treeContainer = containerRef.current.querySelector('div[style*=\"transform\"]') as HTMLElement\n if (!treeContainer) {\n throw new Error('找不到族谱容器')\n }\n\n // 查找所有连接线(使用更宽泛的选择器)\n const allDivs = treeContainer.querySelectorAll('div')\n const lineElements: HTMLElement[] = []\n \n allDivs.forEach(div => {\n const el = div as HTMLElement\n const classes = String(el.className || '')\n // 查找包含 bg-foreground 的元素(连接线)\n if (classes.includes('bg-foreground')) {\n lineElements.push(el)\n }\n })\n \n // 克隆容器用于导出\n const clonedContainer = treeContainer.cloneNode(true) as HTMLElement\n \n // 在克隆的容器中找到对应的连接线并设置样式\n const clonedDivs = clonedContainer.querySelectorAll('div')\n let lineIndex = 0\n clonedDivs.forEach(div => {\n const el = div as HTMLElement\n const classes = String(el.className || '')\n if (classes.includes('bg-foreground') && lineElements[lineIndex]) {\n const original = lineElements[lineIndex]\n const computed = window.getComputedStyle(original)\n \n // 直接设置内联样式\n el.style.backgroundColor = computed.backgroundColor\n el.style.width = computed.width\n el.style.height = computed.height\n el.style.position = 'absolute'\n el.style.left = computed.left\n el.style.top = computed.top\n \n lineIndex++\n }\n })\n \n // 移除卡片边框\n clonedContainer.querySelectorAll('*').forEach((child) => {\n const el = child as HTMLElement\n const classes = String(el.className || '')\n \n // 跳过连接线和连接线容器\n if (classes.includes('bg-foreground') || classes.includes('pointer-events-none')) {\n return\n }\n \n // 移除其他元素的边框\n el.style.border = 'none'\n el.style.outline = 'none'\n })\n \n // 临时添加到 DOM\n clonedContainer.style.position = 'fixed'\n clonedContainer.style.left = '-9999px'\n clonedContainer.style.top = '0'\n document.body.appendChild(clonedContainer)\n \n // 等待渲染\n await new Promise(resolve => setTimeout(resolve, 200))\n\n // 动态导入 dom-to-image-more(仅在客户端)\n const domtoimage = await import('dom-to-image-more')\n \n // 使用 toBlob 方法\n const blob = await domtoimage.default.toBlob(clonedContainer, {\n quality: 0.95,\n bgcolor: '#ffffff'\n })\n \n // 清理克隆的容器\n document.body.removeChild(clonedContainer)\n\n // 恢复原始位置和缩放\n setPosition(originalPosition)\n setScale(originalScale)\n\n // 创建下载链接\n const url = URL.createObjectURL(blob)\n const link = document.createElement('a')\n link.download = `family-tree-${new Date().toISOString().split('T')[0]}.png`\n link.href = url\n link.click()\n \n // 清理\n setTimeout(() => URL.revokeObjectURL(url), 100)\n } catch (error) {\n console.error('导出图片失败:', error)\n }\n }\n\n // Handle root not found\n if (!treeData.rootId) {\n return (\n
\n \n
暂无家族树数据
\n
\n )\n }\n\n return (\n
\n \n\n {/* 视图切换和关系查询按钮 */}\n
\n {/* 关系查询按钮 */}\n \n \n \n \n \n \n \n {\n const params = new URLSearchParams(searchParams.toString())\n params.set('view', 'traditional')\n router.push(`/tree?${params.toString()}`)\n }}\n className={viewMode === 'traditional' ? 'bg-accent' : ''}\n >\n
\n 传统家谱视图\n {viewMode === 'traditional' && }\n
\n
\n {\n const params = new URLSearchParams(searchParams.toString())\n params.set('view', 'd3-org-chart')\n router.push(`/tree?${params.toString()}`)\n }}\n className={viewMode === 'd3-org-chart' ? 'bg-accent' : ''}\n >\n
\n D3 家谱图\n {viewMode === 'd3-org-chart' && }\n
\n
\n
\n
\n
\n\n {viewMode === 'traditional' ? (\n
\n {/* Toolbar */}\n
\n \n \n \n
\n \n
\n\n {/* Tree Canvas */}\n \n \n \n
\n
\n
\n ) : (\n
\n {/* 统一的控制按钮 */}\n
\n \n \n \n
\n \n
\n \n
\n \n
\n
\n )}\n \n {/* 关系查询结果对话框 */}\n \n \n \n 关系查询结果\n \n \n {relationResult && (\n
\n {/* 成员信息 */}\n
\n
\n
\n {relationResult.from.fullName}\n
\n
\n 第{relationResult.from.generation}世\n
\n
\n\n
\n \n {relationResult.relationship.term}\n \n
\n\n
\n
\n {relationResult.to.fullName}\n
\n
\n 第{relationResult.to.generation}世\n
\n
\n
\n\n {/* 关系说明 */}\n
\n
关系说明:
\n
\n {relationResult.from.fullName}{relationResult.to.fullName}{relationResult.relationship.term}\n
\n
\n\n {/* 关系路径 */}\n {relationResult.relationship.path && (\n
\n
关系路径:
\n
\n {relationResult.relationship.path}\n
\n
\n )}\n
\n )}\n
\n
\n
\n )\n}\n"],"names":[],"mappings":"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"}}] } \ No newline at end of file diff --git a/.next/dev/server/chunks/ssr/[root-of-the-server]__ebcf4d5f._.js b/.next/dev/server/chunks/ssr/[root-of-the-server]__ebcf4d5f._.js new file mode 100644 index 00000000..fd7f7665 --- /dev/null +++ b/.next/dev/server/chunks/ssr/[root-of-the-server]__ebcf4d5f._.js @@ -0,0 +1,62 @@ +module.exports = [ +"[externals]/next/dist/shared/lib/no-fallback-error.external.js [external] (next/dist/shared/lib/no-fallback-error.external.js, cjs)", ((__turbopack_context__, module, exports) => { + +const mod = __turbopack_context__.x("next/dist/shared/lib/no-fallback-error.external.js", () => require("next/dist/shared/lib/no-fallback-error.external.js")); + +module.exports = mod; +}), +"[project]/Documents/go-new/chinese-family-tree/app/layout.tsx [app-rsc] (ecmascript, Next.js Server Component)", ((__turbopack_context__) => { + +__turbopack_context__.n(__turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/app/layout.tsx [app-rsc] (ecmascript)")); +}), +"[project]/Documents/go-new/chinese-family-tree/app/loading.tsx [app-rsc] (ecmascript, Next.js Server Component)", ((__turbopack_context__) => { + +__turbopack_context__.n(__turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/app/loading.tsx [app-rsc] (ecmascript)")); +}), +"[project]/Documents/go-new/chinese-family-tree/app/members/loading.tsx [app-rsc] (ecmascript, Next.js Server Component)", ((__turbopack_context__) => { + +__turbopack_context__.n(__turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/app/members/loading.tsx [app-rsc] (ecmascript)")); +}), +"[project]/Documents/go-new/chinese-family-tree/app/members/new/page.tsx [app-rsc] (client reference proxy) ", ((__turbopack_context__) => { +"use strict"; + +// This file is generated by next-core EcmascriptClientReferenceModule. +__turbopack_context__.s([ + "default", + ()=>__TURBOPACK__default__export__ +]); +var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$rsc$2f$react$2d$server$2d$dom$2d$turbopack$2d$server$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/server/route-modules/app-page/vendored/rsc/react-server-dom-turbopack-server.js [app-rsc] (ecmascript)"); +; +const __TURBOPACK__default__export__ = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$rsc$2f$react$2d$server$2d$dom$2d$turbopack$2d$server$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["registerClientReference"])(function() { + throw new Error("Attempted to call the default export of [project]/Documents/go-new/chinese-family-tree/app/members/new/page.tsx from the server, but it's on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component."); +}, "[project]/Documents/go-new/chinese-family-tree/app/members/new/page.tsx ", "default"); +}), +"[project]/Documents/go-new/chinese-family-tree/app/members/new/page.tsx [app-rsc] (client reference proxy)", ((__turbopack_context__) => { +"use strict"; + +// This file is generated by next-core EcmascriptClientReferenceModule. +__turbopack_context__.s([ + "default", + ()=>__TURBOPACK__default__export__ +]); +var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$rsc$2f$react$2d$server$2d$dom$2d$turbopack$2d$server$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/server/route-modules/app-page/vendored/rsc/react-server-dom-turbopack-server.js [app-rsc] (ecmascript)"); +; +const __TURBOPACK__default__export__ = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$rsc$2f$react$2d$server$2d$dom$2d$turbopack$2d$server$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["registerClientReference"])(function() { + throw new Error("Attempted to call the default export of [project]/Documents/go-new/chinese-family-tree/app/members/new/page.tsx from the server, but it's on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component."); +}, "[project]/Documents/go-new/chinese-family-tree/app/members/new/page.tsx", "default"); +}), +"[project]/Documents/go-new/chinese-family-tree/app/members/new/page.tsx [app-rsc] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$app$2f$members$2f$new$2f$page$2e$tsx__$5b$app$2d$rsc$5d$__$28$client__reference__proxy$29$__$3c$module__evaluation$3e$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/app/members/new/page.tsx [app-rsc] (client reference proxy) "); +var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$app$2f$members$2f$new$2f$page$2e$tsx__$5b$app$2d$rsc$5d$__$28$client__reference__proxy$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/app/members/new/page.tsx [app-rsc] (client reference proxy)"); +; +__turbopack_context__.n(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$app$2f$members$2f$new$2f$page$2e$tsx__$5b$app$2d$rsc$5d$__$28$client__reference__proxy$29$__); +}), +"[project]/Documents/go-new/chinese-family-tree/app/members/new/page.tsx [app-rsc] (ecmascript, Next.js Server Component)", ((__turbopack_context__) => { + +__turbopack_context__.n(__turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/app/members/new/page.tsx [app-rsc] (ecmascript)")); +}), +]; + +//# sourceMappingURL=%5Broot-of-the-server%5D__ebcf4d5f._.js.map \ No newline at end of file diff --git a/.next/dev/server/chunks/ssr/[root-of-the-server]__ebcf4d5f._.js.map b/.next/dev/server/chunks/ssr/[root-of-the-server]__ebcf4d5f._.js.map new file mode 100644 index 00000000..221749f5 --- /dev/null +++ b/.next/dev/server/chunks/ssr/[root-of-the-server]__ebcf4d5f._.js.map @@ -0,0 +1,8 @@ +{ + "version": 3, + "sources": [], + "sections": [ + {"offset": {"line": 22, "column": 0}, "map": {"version":3,"sources":["file:///Users/freedak/Documents/go-new/chinese-family-tree/app/members/new/page.tsx/__nextjs-internal-proxy.mjs"],"sourcesContent":["// This file is generated by next-core EcmascriptClientReferenceModule.\nimport { registerClientReference } from \"react-server-dom-turbopack/server\";\nexport default registerClientReference(\n function() { throw new Error(\"Attempted to call the default export of [project]/Documents/go-new/chinese-family-tree/app/members/new/page.tsx from the server, but it's on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.\"); },\n \"[project]/Documents/go-new/chinese-family-tree/app/members/new/page.tsx \",\n \"default\",\n);\n"],"names":[],"mappings":"AAAA,uEAAuE;;;;;AACvE;;uCACe,IAAA,8bAAuB,EAClC;IAAa,MAAM,IAAI,MAAM;AAAiU,GAC9V,+FACA","ignoreList":[0]}}, + {"offset": {"line": 36, "column": 0}, "map": {"version":3,"sources":["file:///Users/freedak/Documents/go-new/chinese-family-tree/app/members/new/page.tsx/__nextjs-internal-proxy.mjs"],"sourcesContent":["// This file is generated by next-core EcmascriptClientReferenceModule.\nimport { registerClientReference } from \"react-server-dom-turbopack/server\";\nexport default registerClientReference(\n function() { throw new Error(\"Attempted to call the default export of [project]/Documents/go-new/chinese-family-tree/app/members/new/page.tsx from the server, but it's on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.\"); },\n \"[project]/Documents/go-new/chinese-family-tree/app/members/new/page.tsx\",\n \"default\",\n);\n"],"names":[],"mappings":"AAAA,uEAAuE;;;;;AACvE;;uCACe,IAAA,8bAAuB,EAClC;IAAa,MAAM,IAAI,MAAM;AAA6S,GAC1U,2EACA","ignoreList":[0]}}, + {"offset": {"line": 50, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}] +} \ No newline at end of file diff --git a/.next/dev/server/chunks/ssr/a0629__pnpm_47f654a9._.js b/.next/dev/server/chunks/ssr/a0629__pnpm_47f654a9._.js new file mode 100644 index 00000000..62e2ab37 --- /dev/null +++ b/.next/dev/server/chunks/ssr/a0629__pnpm_47f654a9._.js @@ -0,0 +1,6250 @@ +module.exports = [ +"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/lucide-react@0.454.0_react@19.2.0/node_modules/lucide-react/dist/esm/icons/book-open.js [app-ssr] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +/** + * @license lucide-react v0.454.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */ __turbopack_context__.s([ + "default", + ()=>BookOpen +]); +var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$lucide$2d$react$40$0$2e$454$2e$0_react$40$19$2e$2$2e$0$2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$createLucideIcon$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/lucide-react@0.454.0_react@19.2.0/node_modules/lucide-react/dist/esm/createLucideIcon.js [app-ssr] (ecmascript)"); +; +const BookOpen = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$lucide$2d$react$40$0$2e$454$2e$0_react$40$19$2e$2$2e$0$2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$createLucideIcon$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["default"])("BookOpen", [ + [ + "path", + { + d: "M12 7v14", + key: "1akyts" + } + ], + [ + "path", + { + d: "M3 18a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1h5a4 4 0 0 1 4 4 4 4 0 0 1 4-4h5a1 1 0 0 1 1 1v13a1 1 0 0 1-1 1h-6a3 3 0 0 0-3 3 3 3 0 0 0-3-3z", + key: "ruj8y" + } + ] +]); +; + //# sourceMappingURL=book-open.js.map +}), +"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/lucide-react@0.454.0_react@19.2.0/node_modules/lucide-react/dist/esm/icons/book-open.js [app-ssr] (ecmascript) ", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "BookOpen", + ()=>__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$lucide$2d$react$40$0$2e$454$2e$0_react$40$19$2e$2$2e$0$2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$book$2d$open$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["default"] +]); +var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$lucide$2d$react$40$0$2e$454$2e$0_react$40$19$2e$2$2e$0$2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$book$2d$open$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/lucide-react@0.454.0_react@19.2.0/node_modules/lucide-react/dist/esm/icons/book-open.js [app-ssr] (ecmascript)"); +}), +"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/lucide-react@0.454.0_react@19.2.0/node_modules/lucide-react/dist/esm/icons/search.js [app-ssr] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +/** + * @license lucide-react v0.454.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */ __turbopack_context__.s([ + "default", + ()=>Search +]); +var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$lucide$2d$react$40$0$2e$454$2e$0_react$40$19$2e$2$2e$0$2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$createLucideIcon$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/lucide-react@0.454.0_react@19.2.0/node_modules/lucide-react/dist/esm/createLucideIcon.js [app-ssr] (ecmascript)"); +; +const Search = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$lucide$2d$react$40$0$2e$454$2e$0_react$40$19$2e$2$2e$0$2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$createLucideIcon$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["default"])("Search", [ + [ + "circle", + { + cx: "11", + cy: "11", + r: "8", + key: "4ej97u" + } + ], + [ + "path", + { + d: "m21 21-4.3-4.3", + key: "1qie3q" + } + ] +]); +; + //# sourceMappingURL=search.js.map +}), +"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/lucide-react@0.454.0_react@19.2.0/node_modules/lucide-react/dist/esm/icons/search.js [app-ssr] (ecmascript) ", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "Search", + ()=>__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$lucide$2d$react$40$0$2e$454$2e$0_react$40$19$2e$2$2e$0$2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$search$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["default"] +]); +var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$lucide$2d$react$40$0$2e$454$2e$0_react$40$19$2e$2$2e$0$2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$search$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/lucide-react@0.454.0_react@19.2.0/node_modules/lucide-react/dist/esm/icons/search.js [app-ssr] (ecmascript)"); +}), +"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/lucide-react@0.454.0_react@19.2.0/node_modules/lucide-react/dist/esm/icons/bell.js [app-ssr] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +/** + * @license lucide-react v0.454.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */ __turbopack_context__.s([ + "default", + ()=>Bell +]); +var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$lucide$2d$react$40$0$2e$454$2e$0_react$40$19$2e$2$2e$0$2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$createLucideIcon$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/lucide-react@0.454.0_react@19.2.0/node_modules/lucide-react/dist/esm/createLucideIcon.js [app-ssr] (ecmascript)"); +; +const Bell = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$lucide$2d$react$40$0$2e$454$2e$0_react$40$19$2e$2$2e$0$2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$createLucideIcon$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["default"])("Bell", [ + [ + "path", + { + d: "M6 8a6 6 0 0 1 12 0c0 7 3 9 3 9H3s3-2 3-9", + key: "1qo2s2" + } + ], + [ + "path", + { + d: "M10.3 21a1.94 1.94 0 0 0 3.4 0", + key: "qgo35s" + } + ] +]); +; + //# sourceMappingURL=bell.js.map +}), +"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/lucide-react@0.454.0_react@19.2.0/node_modules/lucide-react/dist/esm/icons/bell.js [app-ssr] (ecmascript) ", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "Bell", + ()=>__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$lucide$2d$react$40$0$2e$454$2e$0_react$40$19$2e$2$2e$0$2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$bell$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["default"] +]); +var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$lucide$2d$react$40$0$2e$454$2e$0_react$40$19$2e$2$2e$0$2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$bell$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/lucide-react@0.454.0_react@19.2.0/node_modules/lucide-react/dist/esm/icons/bell.js [app-ssr] (ecmascript)"); +}), +"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/lucide-react@0.454.0_react@19.2.0/node_modules/lucide-react/dist/esm/icons/settings.js [app-ssr] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +/** + * @license lucide-react v0.454.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */ __turbopack_context__.s([ + "default", + ()=>Settings +]); +var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$lucide$2d$react$40$0$2e$454$2e$0_react$40$19$2e$2$2e$0$2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$createLucideIcon$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/lucide-react@0.454.0_react@19.2.0/node_modules/lucide-react/dist/esm/createLucideIcon.js [app-ssr] (ecmascript)"); +; +const Settings = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$lucide$2d$react$40$0$2e$454$2e$0_react$40$19$2e$2$2e$0$2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$createLucideIcon$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["default"])("Settings", [ + [ + "path", + { + d: "M12.22 2h-.44a2 2 0 0 0-2 2v.18a2 2 0 0 1-1 1.73l-.43.25a2 2 0 0 1-2 0l-.15-.08a2 2 0 0 0-2.73.73l-.22.38a2 2 0 0 0 .73 2.73l.15.1a2 2 0 0 1 1 1.72v.51a2 2 0 0 1-1 1.74l-.15.09a2 2 0 0 0-.73 2.73l.22.38a2 2 0 0 0 2.73.73l.15-.08a2 2 0 0 1 2 0l.43.25a2 2 0 0 1 1 1.73V20a2 2 0 0 0 2 2h.44a2 2 0 0 0 2-2v-.18a2 2 0 0 1 1-1.73l.43-.25a2 2 0 0 1 2 0l.15.08a2 2 0 0 0 2.73-.73l.22-.39a2 2 0 0 0-.73-2.73l-.15-.08a2 2 0 0 1-1-1.74v-.5a2 2 0 0 1 1-1.74l.15-.09a2 2 0 0 0 .73-2.73l-.22-.38a2 2 0 0 0-2.73-.73l-.15.08a2 2 0 0 1-2 0l-.43-.25a2 2 0 0 1-1-1.73V4a2 2 0 0 0-2-2z", + key: "1qme2f" + } + ], + [ + "circle", + { + cx: "12", + cy: "12", + r: "3", + key: "1v7zrd" + } + ] +]); +; + //# sourceMappingURL=settings.js.map +}), +"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/lucide-react@0.454.0_react@19.2.0/node_modules/lucide-react/dist/esm/icons/settings.js [app-ssr] (ecmascript) ", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "Settings", + ()=>__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$lucide$2d$react$40$0$2e$454$2e$0_react$40$19$2e$2$2e$0$2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$settings$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["default"] +]); +var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$lucide$2d$react$40$0$2e$454$2e$0_react$40$19$2e$2$2e$0$2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$settings$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/lucide-react@0.454.0_react@19.2.0/node_modules/lucide-react/dist/esm/icons/settings.js [app-ssr] (ecmascript)"); +}), +"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/lucide-react@0.454.0_react@19.2.0/node_modules/lucide-react/dist/esm/icons/log-out.js [app-ssr] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +/** + * @license lucide-react v0.454.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */ __turbopack_context__.s([ + "default", + ()=>LogOut +]); +var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$lucide$2d$react$40$0$2e$454$2e$0_react$40$19$2e$2$2e$0$2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$createLucideIcon$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/lucide-react@0.454.0_react@19.2.0/node_modules/lucide-react/dist/esm/createLucideIcon.js [app-ssr] (ecmascript)"); +; +const LogOut = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$lucide$2d$react$40$0$2e$454$2e$0_react$40$19$2e$2$2e$0$2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$createLucideIcon$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["default"])("LogOut", [ + [ + "path", + { + d: "M9 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h4", + key: "1uf3rs" + } + ], + [ + "polyline", + { + points: "16 17 21 12 16 7", + key: "1gabdz" + } + ], + [ + "line", + { + x1: "21", + x2: "9", + y1: "12", + y2: "12", + key: "1uyos4" + } + ] +]); +; + //# sourceMappingURL=log-out.js.map +}), +"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/lucide-react@0.454.0_react@19.2.0/node_modules/lucide-react/dist/esm/icons/log-out.js [app-ssr] (ecmascript) ", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "LogOut", + ()=>__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$lucide$2d$react$40$0$2e$454$2e$0_react$40$19$2e$2$2e$0$2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$log$2d$out$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["default"] +]); +var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$lucide$2d$react$40$0$2e$454$2e$0_react$40$19$2e$2$2e$0$2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$log$2d$out$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/lucide-react@0.454.0_react@19.2.0/node_modules/lucide-react/dist/esm/icons/log-out.js [app-ssr] (ecmascript)"); +}), +"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/lucide-react@0.454.0_react@19.2.0/node_modules/lucide-react/dist/esm/icons/chevron-down.js [app-ssr] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +/** + * @license lucide-react v0.454.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */ __turbopack_context__.s([ + "default", + ()=>ChevronDown +]); +var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$lucide$2d$react$40$0$2e$454$2e$0_react$40$19$2e$2$2e$0$2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$createLucideIcon$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/lucide-react@0.454.0_react@19.2.0/node_modules/lucide-react/dist/esm/createLucideIcon.js [app-ssr] (ecmascript)"); +; +const ChevronDown = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$lucide$2d$react$40$0$2e$454$2e$0_react$40$19$2e$2$2e$0$2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$createLucideIcon$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["default"])("ChevronDown", [ + [ + "path", + { + d: "m6 9 6 6 6-6", + key: "qrunsl" + } + ] +]); +; + //# sourceMappingURL=chevron-down.js.map +}), +"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/lucide-react@0.454.0_react@19.2.0/node_modules/lucide-react/dist/esm/icons/chevron-down.js [app-ssr] (ecmascript) ", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "ChevronDown", + ()=>__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$lucide$2d$react$40$0$2e$454$2e$0_react$40$19$2e$2$2e$0$2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$chevron$2d$down$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["default"] +]); +var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$lucide$2d$react$40$0$2e$454$2e$0_react$40$19$2e$2$2e$0$2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$chevron$2d$down$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/lucide-react@0.454.0_react@19.2.0/node_modules/lucide-react/dist/esm/icons/chevron-down.js [app-ssr] (ecmascript)"); +}), +"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/lucide-react@0.454.0_react@19.2.0/node_modules/lucide-react/dist/esm/icons/plus.js [app-ssr] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +/** + * @license lucide-react v0.454.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */ __turbopack_context__.s([ + "default", + ()=>Plus +]); +var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$lucide$2d$react$40$0$2e$454$2e$0_react$40$19$2e$2$2e$0$2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$createLucideIcon$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/lucide-react@0.454.0_react@19.2.0/node_modules/lucide-react/dist/esm/createLucideIcon.js [app-ssr] (ecmascript)"); +; +const Plus = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$lucide$2d$react$40$0$2e$454$2e$0_react$40$19$2e$2$2e$0$2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$createLucideIcon$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["default"])("Plus", [ + [ + "path", + { + d: "M5 12h14", + key: "1ays0h" + } + ], + [ + "path", + { + d: "M12 5v14", + key: "s699le" + } + ] +]); +; + //# sourceMappingURL=plus.js.map +}), +"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/lucide-react@0.454.0_react@19.2.0/node_modules/lucide-react/dist/esm/icons/plus.js [app-ssr] (ecmascript) ", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "Plus", + ()=>__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$lucide$2d$react$40$0$2e$454$2e$0_react$40$19$2e$2$2e$0$2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$plus$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["default"] +]); +var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$lucide$2d$react$40$0$2e$454$2e$0_react$40$19$2e$2$2e$0$2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$plus$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/lucide-react@0.454.0_react@19.2.0/node_modules/lucide-react/dist/esm/icons/plus.js [app-ssr] (ecmascript)"); +}), +"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/lucide-react@0.454.0_react@19.2.0/node_modules/lucide-react/dist/esm/icons/trash-2.js [app-ssr] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +/** + * @license lucide-react v0.454.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */ __turbopack_context__.s([ + "default", + ()=>Trash2 +]); +var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$lucide$2d$react$40$0$2e$454$2e$0_react$40$19$2e$2$2e$0$2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$createLucideIcon$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/lucide-react@0.454.0_react@19.2.0/node_modules/lucide-react/dist/esm/createLucideIcon.js [app-ssr] (ecmascript)"); +; +const Trash2 = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$lucide$2d$react$40$0$2e$454$2e$0_react$40$19$2e$2$2e$0$2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$createLucideIcon$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["default"])("Trash2", [ + [ + "path", + { + d: "M3 6h18", + key: "d0wm0j" + } + ], + [ + "path", + { + d: "M19 6v14c0 1-1 2-2 2H7c-1 0-2-1-2-2V6", + key: "4alrt4" + } + ], + [ + "path", + { + d: "M8 6V4c0-1 1-2 2-2h4c1 0 2 1 2 2v2", + key: "v07s0e" + } + ], + [ + "line", + { + x1: "10", + x2: "10", + y1: "11", + y2: "17", + key: "1uufr5" + } + ], + [ + "line", + { + x1: "14", + x2: "14", + y1: "11", + y2: "17", + key: "xtxkd" + } + ] +]); +; + //# sourceMappingURL=trash-2.js.map +}), +"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/lucide-react@0.454.0_react@19.2.0/node_modules/lucide-react/dist/esm/icons/trash-2.js [app-ssr] (ecmascript) ", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "Trash2", + ()=>__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$lucide$2d$react$40$0$2e$454$2e$0_react$40$19$2e$2$2e$0$2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$trash$2d$2$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["default"] +]); +var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$lucide$2d$react$40$0$2e$454$2e$0_react$40$19$2e$2$2e$0$2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$trash$2d$2$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/lucide-react@0.454.0_react@19.2.0/node_modules/lucide-react/dist/esm/icons/trash-2.js [app-ssr] (ecmascript)"); +}), +"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/lucide-react@0.454.0_react@19.2.0/node_modules/lucide-react/dist/esm/icons/calculator.js [app-ssr] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +/** + * @license lucide-react v0.454.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */ __turbopack_context__.s([ + "default", + ()=>Calculator +]); +var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$lucide$2d$react$40$0$2e$454$2e$0_react$40$19$2e$2$2e$0$2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$createLucideIcon$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/lucide-react@0.454.0_react@19.2.0/node_modules/lucide-react/dist/esm/createLucideIcon.js [app-ssr] (ecmascript)"); +; +const Calculator = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$lucide$2d$react$40$0$2e$454$2e$0_react$40$19$2e$2$2e$0$2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$createLucideIcon$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["default"])("Calculator", [ + [ + "rect", + { + width: "16", + height: "20", + x: "4", + y: "2", + rx: "2", + key: "1nb95v" + } + ], + [ + "line", + { + x1: "8", + x2: "16", + y1: "6", + y2: "6", + key: "x4nwl0" + } + ], + [ + "line", + { + x1: "16", + x2: "16", + y1: "14", + y2: "18", + key: "wjye3r" + } + ], + [ + "path", + { + d: "M16 10h.01", + key: "1m94wz" + } + ], + [ + "path", + { + d: "M12 10h.01", + key: "1nrarc" + } + ], + [ + "path", + { + d: "M8 10h.01", + key: "19clt8" + } + ], + [ + "path", + { + d: "M12 14h.01", + key: "1etili" + } + ], + [ + "path", + { + d: "M8 14h.01", + key: "6423bh" + } + ], + [ + "path", + { + d: "M12 18h.01", + key: "mhygvu" + } + ], + [ + "path", + { + d: "M8 18h.01", + key: "lrp35t" + } + ] +]); +; + //# sourceMappingURL=calculator.js.map +}), +"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/lucide-react@0.454.0_react@19.2.0/node_modules/lucide-react/dist/esm/icons/calculator.js [app-ssr] (ecmascript) ", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "Calculator", + ()=>__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$lucide$2d$react$40$0$2e$454$2e$0_react$40$19$2e$2$2e$0$2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$calculator$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["default"] +]); +var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$lucide$2d$react$40$0$2e$454$2e$0_react$40$19$2e$2$2e$0$2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$calculator$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/lucide-react@0.454.0_react@19.2.0/node_modules/lucide-react/dist/esm/icons/calculator.js [app-ssr] (ecmascript)"); +}), +"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/lucide-react@0.454.0_react@19.2.0/node_modules/lucide-react/dist/esm/icons/check.js [app-ssr] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +/** + * @license lucide-react v0.454.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */ __turbopack_context__.s([ + "default", + ()=>Check +]); +var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$lucide$2d$react$40$0$2e$454$2e$0_react$40$19$2e$2$2e$0$2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$createLucideIcon$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/lucide-react@0.454.0_react@19.2.0/node_modules/lucide-react/dist/esm/createLucideIcon.js [app-ssr] (ecmascript)"); +; +const Check = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$lucide$2d$react$40$0$2e$454$2e$0_react$40$19$2e$2$2e$0$2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$createLucideIcon$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["default"])("Check", [ + [ + "path", + { + d: "M20 6 9 17l-5-5", + key: "1gmf2c" + } + ] +]); +; + //# sourceMappingURL=check.js.map +}), +"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/lucide-react@0.454.0_react@19.2.0/node_modules/lucide-react/dist/esm/icons/check.js [app-ssr] (ecmascript) ", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "CheckIcon", + ()=>__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$lucide$2d$react$40$0$2e$454$2e$0_react$40$19$2e$2$2e$0$2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$check$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["default"] +]); +var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$lucide$2d$react$40$0$2e$454$2e$0_react$40$19$2e$2$2e$0$2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$check$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/lucide-react@0.454.0_react@19.2.0/node_modules/lucide-react/dist/esm/icons/check.js [app-ssr] (ecmascript)"); +}), +"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/lucide-react@0.454.0_react@19.2.0/node_modules/lucide-react/dist/esm/icons/chevron-right.js [app-ssr] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +/** + * @license lucide-react v0.454.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */ __turbopack_context__.s([ + "default", + ()=>ChevronRight +]); +var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$lucide$2d$react$40$0$2e$454$2e$0_react$40$19$2e$2$2e$0$2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$createLucideIcon$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/lucide-react@0.454.0_react@19.2.0/node_modules/lucide-react/dist/esm/createLucideIcon.js [app-ssr] (ecmascript)"); +; +const ChevronRight = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$lucide$2d$react$40$0$2e$454$2e$0_react$40$19$2e$2$2e$0$2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$createLucideIcon$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["default"])("ChevronRight", [ + [ + "path", + { + d: "m9 18 6-6-6-6", + key: "mthhwq" + } + ] +]); +; + //# sourceMappingURL=chevron-right.js.map +}), +"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/lucide-react@0.454.0_react@19.2.0/node_modules/lucide-react/dist/esm/icons/chevron-right.js [app-ssr] (ecmascript) ", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "ChevronRightIcon", + ()=>__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$lucide$2d$react$40$0$2e$454$2e$0_react$40$19$2e$2$2e$0$2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$chevron$2d$right$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["default"] +]); +var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$lucide$2d$react$40$0$2e$454$2e$0_react$40$19$2e$2$2e$0$2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$chevron$2d$right$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/lucide-react@0.454.0_react@19.2.0/node_modules/lucide-react/dist/esm/icons/chevron-right.js [app-ssr] (ecmascript)"); +}), +"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/lucide-react@0.454.0_react@19.2.0/node_modules/lucide-react/dist/esm/icons/circle.js [app-ssr] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +/** + * @license lucide-react v0.454.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */ __turbopack_context__.s([ + "default", + ()=>Circle +]); +var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$lucide$2d$react$40$0$2e$454$2e$0_react$40$19$2e$2$2e$0$2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$createLucideIcon$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/lucide-react@0.454.0_react@19.2.0/node_modules/lucide-react/dist/esm/createLucideIcon.js [app-ssr] (ecmascript)"); +; +const Circle = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$lucide$2d$react$40$0$2e$454$2e$0_react$40$19$2e$2$2e$0$2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$createLucideIcon$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["default"])("Circle", [ + [ + "circle", + { + cx: "12", + cy: "12", + r: "10", + key: "1mglay" + } + ] +]); +; + //# sourceMappingURL=circle.js.map +}), +"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/lucide-react@0.454.0_react@19.2.0/node_modules/lucide-react/dist/esm/icons/circle.js [app-ssr] (ecmascript) ", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "CircleIcon", + ()=>__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$lucide$2d$react$40$0$2e$454$2e$0_react$40$19$2e$2$2e$0$2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$circle$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["default"] +]); +var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$lucide$2d$react$40$0$2e$454$2e$0_react$40$19$2e$2$2e$0$2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$circle$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/lucide-react@0.454.0_react@19.2.0/node_modules/lucide-react/dist/esm/icons/circle.js [app-ssr] (ecmascript)"); +}), +"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/lucide-react@0.454.0_react@19.2.0/node_modules/lucide-react/dist/esm/icons/filter.js [app-ssr] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +/** + * @license lucide-react v0.454.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */ __turbopack_context__.s([ + "default", + ()=>Filter +]); +var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$lucide$2d$react$40$0$2e$454$2e$0_react$40$19$2e$2$2e$0$2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$createLucideIcon$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/lucide-react@0.454.0_react@19.2.0/node_modules/lucide-react/dist/esm/createLucideIcon.js [app-ssr] (ecmascript)"); +; +const Filter = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$lucide$2d$react$40$0$2e$454$2e$0_react$40$19$2e$2$2e$0$2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$createLucideIcon$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["default"])("Filter", [ + [ + "polygon", + { + points: "22 3 2 3 10 12.46 10 19 14 21 14 12.46 22 3", + key: "1yg77f" + } + ] +]); +; + //# sourceMappingURL=filter.js.map +}), +"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/lucide-react@0.454.0_react@19.2.0/node_modules/lucide-react/dist/esm/icons/filter.js [app-ssr] (ecmascript) ", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "Filter", + ()=>__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$lucide$2d$react$40$0$2e$454$2e$0_react$40$19$2e$2$2e$0$2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$filter$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["default"] +]); +var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$lucide$2d$react$40$0$2e$454$2e$0_react$40$19$2e$2$2e$0$2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$filter$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/lucide-react@0.454.0_react@19.2.0/node_modules/lucide-react/dist/esm/icons/filter.js [app-ssr] (ecmascript)"); +}), +"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/lucide-react@0.454.0_react@19.2.0/node_modules/lucide-react/dist/esm/icons/circle-user.js [app-ssr] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +/** + * @license lucide-react v0.454.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */ __turbopack_context__.s([ + "default", + ()=>CircleUser +]); +var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$lucide$2d$react$40$0$2e$454$2e$0_react$40$19$2e$2$2e$0$2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$createLucideIcon$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/lucide-react@0.454.0_react@19.2.0/node_modules/lucide-react/dist/esm/createLucideIcon.js [app-ssr] (ecmascript)"); +; +const CircleUser = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$lucide$2d$react$40$0$2e$454$2e$0_react$40$19$2e$2$2e$0$2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$createLucideIcon$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["default"])("CircleUser", [ + [ + "circle", + { + cx: "12", + cy: "12", + r: "10", + key: "1mglay" + } + ], + [ + "circle", + { + cx: "12", + cy: "10", + r: "3", + key: "ilqhr7" + } + ], + [ + "path", + { + d: "M7 20.662V19a2 2 0 0 1 2-2h6a2 2 0 0 1 2 2v1.662", + key: "154egf" + } + ] +]); +; + //# sourceMappingURL=circle-user.js.map +}), +"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/lucide-react@0.454.0_react@19.2.0/node_modules/lucide-react/dist/esm/icons/circle-user.js [app-ssr] (ecmascript) ", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "CircleUser", + ()=>__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$lucide$2d$react$40$0$2e$454$2e$0_react$40$19$2e$2$2e$0$2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$circle$2d$user$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["default"] +]); +var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$lucide$2d$react$40$0$2e$454$2e$0_react$40$19$2e$2$2e$0$2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$circle$2d$user$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/lucide-react@0.454.0_react@19.2.0/node_modules/lucide-react/dist/esm/icons/circle-user.js [app-ssr] (ecmascript)"); +}), +"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/lucide-react@0.454.0_react@19.2.0/node_modules/lucide-react/dist/esm/icons/circle-user-round.js [app-ssr] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +/** + * @license lucide-react v0.454.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */ __turbopack_context__.s([ + "default", + ()=>CircleUserRound +]); +var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$lucide$2d$react$40$0$2e$454$2e$0_react$40$19$2e$2$2e$0$2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$createLucideIcon$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/lucide-react@0.454.0_react@19.2.0/node_modules/lucide-react/dist/esm/createLucideIcon.js [app-ssr] (ecmascript)"); +; +const CircleUserRound = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$lucide$2d$react$40$0$2e$454$2e$0_react$40$19$2e$2$2e$0$2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$createLucideIcon$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["default"])("CircleUserRound", [ + [ + "path", + { + d: "M18 20a6 6 0 0 0-12 0", + key: "1qehca" + } + ], + [ + "circle", + { + cx: "12", + cy: "10", + r: "4", + key: "1h16sb" + } + ], + [ + "circle", + { + cx: "12", + cy: "12", + r: "10", + key: "1mglay" + } + ] +]); +; + //# sourceMappingURL=circle-user-round.js.map +}), +"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/lucide-react@0.454.0_react@19.2.0/node_modules/lucide-react/dist/esm/icons/circle-user-round.js [app-ssr] (ecmascript) ", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "CircleUserRound", + ()=>__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$lucide$2d$react$40$0$2e$454$2e$0_react$40$19$2e$2$2e$0$2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$circle$2d$user$2d$round$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["default"] +]); +var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$lucide$2d$react$40$0$2e$454$2e$0_react$40$19$2e$2$2e$0$2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$circle$2d$user$2d$round$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/lucide-react@0.454.0_react@19.2.0/node_modules/lucide-react/dist/esm/icons/circle-user-round.js [app-ssr] (ecmascript)"); +}), +"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/lucide-react@0.454.0_react@19.2.0/node_modules/lucide-react/dist/esm/icons/chevron-down.js [app-ssr] (ecmascript) ", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "ChevronDownIcon", + ()=>__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$lucide$2d$react$40$0$2e$454$2e$0_react$40$19$2e$2$2e$0$2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$chevron$2d$down$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["default"] +]); +var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$lucide$2d$react$40$0$2e$454$2e$0_react$40$19$2e$2$2e$0$2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$chevron$2d$down$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/lucide-react@0.454.0_react@19.2.0/node_modules/lucide-react/dist/esm/icons/chevron-down.js [app-ssr] (ecmascript)"); +}), +"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/lucide-react@0.454.0_react@19.2.0/node_modules/lucide-react/dist/esm/icons/chevron-up.js [app-ssr] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +/** + * @license lucide-react v0.454.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */ __turbopack_context__.s([ + "default", + ()=>ChevronUp +]); +var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$lucide$2d$react$40$0$2e$454$2e$0_react$40$19$2e$2$2e$0$2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$createLucideIcon$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/lucide-react@0.454.0_react@19.2.0/node_modules/lucide-react/dist/esm/createLucideIcon.js [app-ssr] (ecmascript)"); +; +const ChevronUp = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$lucide$2d$react$40$0$2e$454$2e$0_react$40$19$2e$2$2e$0$2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$createLucideIcon$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["default"])("ChevronUp", [ + [ + "path", + { + d: "m18 15-6-6-6 6", + key: "153udz" + } + ] +]); +; + //# sourceMappingURL=chevron-up.js.map +}), +"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/lucide-react@0.454.0_react@19.2.0/node_modules/lucide-react/dist/esm/icons/chevron-up.js [app-ssr] (ecmascript) ", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "ChevronUpIcon", + ()=>__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$lucide$2d$react$40$0$2e$454$2e$0_react$40$19$2e$2$2e$0$2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$chevron$2d$up$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["default"] +]); +var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$lucide$2d$react$40$0$2e$454$2e$0_react$40$19$2e$2$2e$0$2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$chevron$2d$up$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/lucide-react@0.454.0_react@19.2.0/node_modules/lucide-react/dist/esm/icons/chevron-up.js [app-ssr] (ecmascript)"); +}), +"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/@radix-ui+react-avatar@1.1.2_@types+react-dom@19.2.3_@types+react@19.2.6__@types+react@_3ee3dafa662d71951c1a3d5b289c96d1/node_modules/@radix-ui/react-avatar/dist/index.mjs [app-ssr] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "Avatar", + ()=>Avatar, + "AvatarFallback", + ()=>AvatarFallback, + "AvatarImage", + ()=>AvatarImage, + "Fallback", + ()=>Fallback, + "Image", + ()=>Image, + "Root", + ()=>Root, + "createAvatarScope", + ()=>createAvatarScope +]); +// packages/react/avatar/src/Avatar.tsx +var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/server/route-modules/app-page/vendored/ssr/react.js [app-ssr] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$react$2d$context$40$1$2e$1$2e$1_$40$types$2b$react$40$19$2e$2$2e$6_react$40$19$2e$2$2e$0$2f$node_modules$2f40$radix$2d$ui$2f$react$2d$context$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/@radix-ui+react-context@1.1.1_@types+react@19.2.6_react@19.2.0/node_modules/@radix-ui/react-context/dist/index.mjs [app-ssr] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$react$2d$use$2d$callback$2d$ref$40$1$2e$1$2e$0_$40$types$2b$react$40$19$2e$2$2e$6_react$40$19$2e$2$2e$0$2f$node_modules$2f40$radix$2d$ui$2f$react$2d$use$2d$callback$2d$ref$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/@radix-ui+react-use-callback-ref@1.1.0_@types+react@19.2.6_react@19.2.0/node_modules/@radix-ui/react-use-callback-ref/dist/index.mjs [app-ssr] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$react$2d$use$2d$layout$2d$effect$40$1$2e$1$2e$0_$40$types$2b$react$40$19$2e$2$2e$6_react$40$19$2e$2$2e$0$2f$node_modules$2f40$radix$2d$ui$2f$react$2d$use$2d$layout$2d$effect$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/@radix-ui+react-use-layout-effect@1.1.0_@types+react@19.2.6_react@19.2.0/node_modules/@radix-ui/react-use-layout-effect/dist/index.mjs [app-ssr] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$react$2d$primitive$40$2$2e$0$2e$1_$40$types$2b$react$2d$dom$40$19$2e$2$2e$3_$40$types$2b$react$40$19$2e$2$2e$6_$5f40$types$2b$rea_4f53963f71a6eb8b0116fe0dd1078946$2f$node_modules$2f40$radix$2d$ui$2f$react$2d$primitive$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/@radix-ui+react-primitive@2.0.1_@types+react-dom@19.2.3_@types+react@19.2.6__@types+rea_4f53963f71a6eb8b0116fe0dd1078946/node_modules/@radix-ui/react-primitive/dist/index.mjs [app-ssr] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/server/route-modules/app-page/vendored/ssr/react-jsx-runtime.js [app-ssr] (ecmascript)"); +"use client"; +; +; +; +; +; +; +var AVATAR_NAME = "Avatar"; +var [createAvatarContext, createAvatarScope] = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$react$2d$context$40$1$2e$1$2e$1_$40$types$2b$react$40$19$2e$2$2e$6_react$40$19$2e$2$2e$0$2f$node_modules$2f40$radix$2d$ui$2f$react$2d$context$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["createContextScope"])(AVATAR_NAME); +var [AvatarProvider, useAvatarContext] = createAvatarContext(AVATAR_NAME); +var Avatar = __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["forwardRef"]((props, forwardedRef)=>{ + const { __scopeAvatar, ...avatarProps } = props; + const [imageLoadingStatus, setImageLoadingStatus] = __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["useState"]("idle"); + return /* @__PURE__ */ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsx"])(AvatarProvider, { + scope: __scopeAvatar, + imageLoadingStatus, + onImageLoadingStatusChange: setImageLoadingStatus, + children: /* @__PURE__ */ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsx"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$react$2d$primitive$40$2$2e$0$2e$1_$40$types$2b$react$2d$dom$40$19$2e$2$2e$3_$40$types$2b$react$40$19$2e$2$2e$6_$5f40$types$2b$rea_4f53963f71a6eb8b0116fe0dd1078946$2f$node_modules$2f40$radix$2d$ui$2f$react$2d$primitive$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["Primitive"].span, { + ...avatarProps, + ref: forwardedRef + }) + }); +}); +Avatar.displayName = AVATAR_NAME; +var IMAGE_NAME = "AvatarImage"; +var AvatarImage = __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["forwardRef"]((props, forwardedRef)=>{ + const { __scopeAvatar, src, onLoadingStatusChange = ()=>{}, ...imageProps } = props; + const context = useAvatarContext(IMAGE_NAME, __scopeAvatar); + const imageLoadingStatus = useImageLoadingStatus(src, imageProps.referrerPolicy); + const handleLoadingStatusChange = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$react$2d$use$2d$callback$2d$ref$40$1$2e$1$2e$0_$40$types$2b$react$40$19$2e$2$2e$6_react$40$19$2e$2$2e$0$2f$node_modules$2f40$radix$2d$ui$2f$react$2d$use$2d$callback$2d$ref$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["useCallbackRef"])((status)=>{ + onLoadingStatusChange(status); + context.onImageLoadingStatusChange(status); + }); + (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$react$2d$use$2d$layout$2d$effect$40$1$2e$1$2e$0_$40$types$2b$react$40$19$2e$2$2e$6_react$40$19$2e$2$2e$0$2f$node_modules$2f40$radix$2d$ui$2f$react$2d$use$2d$layout$2d$effect$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["useLayoutEffect"])(()=>{ + if (imageLoadingStatus !== "idle") { + handleLoadingStatusChange(imageLoadingStatus); + } + }, [ + imageLoadingStatus, + handleLoadingStatusChange + ]); + return imageLoadingStatus === "loaded" ? /* @__PURE__ */ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsx"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$react$2d$primitive$40$2$2e$0$2e$1_$40$types$2b$react$2d$dom$40$19$2e$2$2e$3_$40$types$2b$react$40$19$2e$2$2e$6_$5f40$types$2b$rea_4f53963f71a6eb8b0116fe0dd1078946$2f$node_modules$2f40$radix$2d$ui$2f$react$2d$primitive$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["Primitive"].img, { + ...imageProps, + ref: forwardedRef, + src + }) : null; +}); +AvatarImage.displayName = IMAGE_NAME; +var FALLBACK_NAME = "AvatarFallback"; +var AvatarFallback = __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["forwardRef"]((props, forwardedRef)=>{ + const { __scopeAvatar, delayMs, ...fallbackProps } = props; + const context = useAvatarContext(FALLBACK_NAME, __scopeAvatar); + const [canRender, setCanRender] = __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["useState"](delayMs === void 0); + __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["useEffect"](()=>{ + if (delayMs !== void 0) { + const timerId = window.setTimeout(()=>setCanRender(true), delayMs); + return ()=>window.clearTimeout(timerId); + } + }, [ + delayMs + ]); + return canRender && context.imageLoadingStatus !== "loaded" ? /* @__PURE__ */ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsx"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$react$2d$primitive$40$2$2e$0$2e$1_$40$types$2b$react$2d$dom$40$19$2e$2$2e$3_$40$types$2b$react$40$19$2e$2$2e$6_$5f40$types$2b$rea_4f53963f71a6eb8b0116fe0dd1078946$2f$node_modules$2f40$radix$2d$ui$2f$react$2d$primitive$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["Primitive"].span, { + ...fallbackProps, + ref: forwardedRef + }) : null; +}); +AvatarFallback.displayName = FALLBACK_NAME; +function useImageLoadingStatus(src, referrerPolicy) { + const [loadingStatus, setLoadingStatus] = __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["useState"]("idle"); + (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$react$2d$use$2d$layout$2d$effect$40$1$2e$1$2e$0_$40$types$2b$react$40$19$2e$2$2e$6_react$40$19$2e$2$2e$0$2f$node_modules$2f40$radix$2d$ui$2f$react$2d$use$2d$layout$2d$effect$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["useLayoutEffect"])(()=>{ + if (!src) { + setLoadingStatus("error"); + return; + } + let isMounted = true; + const image = new window.Image(); + const updateStatus = (status)=>()=>{ + if (!isMounted) return; + setLoadingStatus(status); + }; + setLoadingStatus("loading"); + image.onload = updateStatus("loaded"); + image.onerror = updateStatus("error"); + image.src = src; + if (referrerPolicy) { + image.referrerPolicy = referrerPolicy; + } + return ()=>{ + isMounted = false; + }; + }, [ + src, + referrerPolicy + ]); + return loadingStatus; +} +var Root = Avatar; +var Image = AvatarImage; +var Fallback = AvatarFallback; +; + //# sourceMappingURL=index.mjs.map +}), +"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/@radix-ui+react-collection@1.1.1_@types+react-dom@19.2.3_@types+react@19.2.6__@types+re_1ad17166111274b6b451c5ad4817bfc8/node_modules/@radix-ui/react-collection/dist/index.mjs [app-ssr] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "createCollection", + ()=>createCollection +]); +// packages/react/collection/src/Collection.tsx +var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/server/route-modules/app-page/vendored/ssr/react.js [app-ssr] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$react$2d$context$40$1$2e$1$2e$1_$40$types$2b$react$40$19$2e$2$2e$6_react$40$19$2e$2$2e$0$2f$node_modules$2f40$radix$2d$ui$2f$react$2d$context$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/@radix-ui+react-context@1.1.1_@types+react@19.2.6_react@19.2.0/node_modules/@radix-ui/react-context/dist/index.mjs [app-ssr] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$react$2d$compose$2d$refs$40$1$2e$1$2e$1_$40$types$2b$react$40$19$2e$2$2e$6_react$40$19$2e$2$2e$0$2f$node_modules$2f40$radix$2d$ui$2f$react$2d$compose$2d$refs$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/@radix-ui+react-compose-refs@1.1.1_@types+react@19.2.6_react@19.2.0/node_modules/@radix-ui/react-compose-refs/dist/index.mjs [app-ssr] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$react$2d$slot$40$1$2e$1$2e$1_$40$types$2b$react$40$19$2e$2$2e$6_react$40$19$2e$2$2e$0$2f$node_modules$2f40$radix$2d$ui$2f$react$2d$slot$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/@radix-ui+react-slot@1.1.1_@types+react@19.2.6_react@19.2.0/node_modules/@radix-ui/react-slot/dist/index.mjs [app-ssr] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/server/route-modules/app-page/vendored/ssr/react-jsx-runtime.js [app-ssr] (ecmascript)"); +"use client"; +; +; +; +; +; +function createCollection(name) { + const PROVIDER_NAME = name + "CollectionProvider"; + const [createCollectionContext, createCollectionScope] = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$react$2d$context$40$1$2e$1$2e$1_$40$types$2b$react$40$19$2e$2$2e$6_react$40$19$2e$2$2e$0$2f$node_modules$2f40$radix$2d$ui$2f$react$2d$context$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["createContextScope"])(PROVIDER_NAME); + const [CollectionProviderImpl, useCollectionContext] = createCollectionContext(PROVIDER_NAME, { + collectionRef: { + current: null + }, + itemMap: /* @__PURE__ */ new Map() + }); + const CollectionProvider = (props)=>{ + const { scope, children } = props; + const ref = __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["default"].useRef(null); + const itemMap = __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["default"].useRef(/* @__PURE__ */ new Map()).current; + return /* @__PURE__ */ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsx"])(CollectionProviderImpl, { + scope, + itemMap, + collectionRef: ref, + children + }); + }; + CollectionProvider.displayName = PROVIDER_NAME; + const COLLECTION_SLOT_NAME = name + "CollectionSlot"; + const CollectionSlot = __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["default"].forwardRef((props, forwardedRef)=>{ + const { scope, children } = props; + const context = useCollectionContext(COLLECTION_SLOT_NAME, scope); + const composedRefs = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$react$2d$compose$2d$refs$40$1$2e$1$2e$1_$40$types$2b$react$40$19$2e$2$2e$6_react$40$19$2e$2$2e$0$2f$node_modules$2f40$radix$2d$ui$2f$react$2d$compose$2d$refs$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["useComposedRefs"])(forwardedRef, context.collectionRef); + return /* @__PURE__ */ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsx"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$react$2d$slot$40$1$2e$1$2e$1_$40$types$2b$react$40$19$2e$2$2e$6_react$40$19$2e$2$2e$0$2f$node_modules$2f40$radix$2d$ui$2f$react$2d$slot$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["Slot"], { + ref: composedRefs, + children + }); + }); + CollectionSlot.displayName = COLLECTION_SLOT_NAME; + const ITEM_SLOT_NAME = name + "CollectionItemSlot"; + const ITEM_DATA_ATTR = "data-radix-collection-item"; + const CollectionItemSlot = __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["default"].forwardRef((props, forwardedRef)=>{ + const { scope, children, ...itemData } = props; + const ref = __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["default"].useRef(null); + const composedRefs = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$react$2d$compose$2d$refs$40$1$2e$1$2e$1_$40$types$2b$react$40$19$2e$2$2e$6_react$40$19$2e$2$2e$0$2f$node_modules$2f40$radix$2d$ui$2f$react$2d$compose$2d$refs$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["useComposedRefs"])(forwardedRef, ref); + const context = useCollectionContext(ITEM_SLOT_NAME, scope); + __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["default"].useEffect(()=>{ + context.itemMap.set(ref, { + ref, + ...itemData + }); + return ()=>void context.itemMap.delete(ref); + }); + return /* @__PURE__ */ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsx"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$react$2d$slot$40$1$2e$1$2e$1_$40$types$2b$react$40$19$2e$2$2e$6_react$40$19$2e$2$2e$0$2f$node_modules$2f40$radix$2d$ui$2f$react$2d$slot$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["Slot"], { + ...{ + [ITEM_DATA_ATTR]: "" + }, + ref: composedRefs, + children + }); + }); + CollectionItemSlot.displayName = ITEM_SLOT_NAME; + function useCollection(scope) { + const context = useCollectionContext(name + "CollectionConsumer", scope); + const getItems = __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["default"].useCallback(()=>{ + const collectionNode = context.collectionRef.current; + if (!collectionNode) return []; + const orderedNodes = Array.from(collectionNode.querySelectorAll(`[${ITEM_DATA_ATTR}]`)); + const items = Array.from(context.itemMap.values()); + const orderedItems = items.sort((a, b)=>orderedNodes.indexOf(a.ref.current) - orderedNodes.indexOf(b.ref.current)); + return orderedItems; + }, [ + context.collectionRef, + context.itemMap + ]); + return getItems; + } + return [ + { + Provider: CollectionProvider, + Slot: CollectionSlot, + ItemSlot: CollectionItemSlot + }, + useCollection, + createCollectionScope + ]; +} +; + //# sourceMappingURL=index.mjs.map +}), +"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/@radix-ui+react-direction@1.1.0_@types+react@19.2.6_react@19.2.0/node_modules/@radix-ui/react-direction/dist/index.mjs [app-ssr] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +// packages/react/direction/src/Direction.tsx +__turbopack_context__.s([ + "DirectionProvider", + ()=>DirectionProvider, + "Provider", + ()=>Provider, + "useDirection", + ()=>useDirection +]); +var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/server/route-modules/app-page/vendored/ssr/react.js [app-ssr] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/server/route-modules/app-page/vendored/ssr/react-jsx-runtime.js [app-ssr] (ecmascript)"); +; +; +var DirectionContext = __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["createContext"](void 0); +var DirectionProvider = (props)=>{ + const { dir, children } = props; + return /* @__PURE__ */ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsx"])(DirectionContext.Provider, { + value: dir, + children + }); +}; +function useDirection(localDir) { + const globalDir = __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["useContext"](DirectionContext); + return localDir || globalDir || "ltr"; +} +var Provider = DirectionProvider; +; + //# sourceMappingURL=index.mjs.map +}), +"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/@floating-ui+utils@0.2.10/node_modules/@floating-ui/utils/dist/floating-ui.utils.mjs [app-ssr] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +/** + * Custom positioning reference element. + * @see https://floating-ui.com/docs/virtual-elements + */ __turbopack_context__.s([ + "alignments", + ()=>alignments, + "clamp", + ()=>clamp, + "createCoords", + ()=>createCoords, + "evaluate", + ()=>evaluate, + "expandPaddingObject", + ()=>expandPaddingObject, + "floor", + ()=>floor, + "getAlignment", + ()=>getAlignment, + "getAlignmentAxis", + ()=>getAlignmentAxis, + "getAlignmentSides", + ()=>getAlignmentSides, + "getAxisLength", + ()=>getAxisLength, + "getExpandedPlacements", + ()=>getExpandedPlacements, + "getOppositeAlignmentPlacement", + ()=>getOppositeAlignmentPlacement, + "getOppositeAxis", + ()=>getOppositeAxis, + "getOppositeAxisPlacements", + ()=>getOppositeAxisPlacements, + "getOppositePlacement", + ()=>getOppositePlacement, + "getPaddingObject", + ()=>getPaddingObject, + "getSide", + ()=>getSide, + "getSideAxis", + ()=>getSideAxis, + "max", + ()=>max, + "min", + ()=>min, + "placements", + ()=>placements, + "rectToClientRect", + ()=>rectToClientRect, + "round", + ()=>round, + "sides", + ()=>sides +]); +const sides = [ + 'top', + 'right', + 'bottom', + 'left' +]; +const alignments = [ + 'start', + 'end' +]; +const placements = /*#__PURE__*/ sides.reduce((acc, side)=>acc.concat(side, side + "-" + alignments[0], side + "-" + alignments[1]), []); +const min = Math.min; +const max = Math.max; +const round = Math.round; +const floor = Math.floor; +const createCoords = (v)=>({ + x: v, + y: v + }); +const oppositeSideMap = { + left: 'right', + right: 'left', + bottom: 'top', + top: 'bottom' +}; +const oppositeAlignmentMap = { + start: 'end', + end: 'start' +}; +function clamp(start, value, end) { + return max(start, min(value, end)); +} +function evaluate(value, param) { + return typeof value === 'function' ? value(param) : value; +} +function getSide(placement) { + return placement.split('-')[0]; +} +function getAlignment(placement) { + return placement.split('-')[1]; +} +function getOppositeAxis(axis) { + return axis === 'x' ? 'y' : 'x'; +} +function getAxisLength(axis) { + return axis === 'y' ? 'height' : 'width'; +} +const yAxisSides = /*#__PURE__*/ new Set([ + 'top', + 'bottom' +]); +function getSideAxis(placement) { + return yAxisSides.has(getSide(placement)) ? 'y' : 'x'; +} +function getAlignmentAxis(placement) { + return getOppositeAxis(getSideAxis(placement)); +} +function getAlignmentSides(placement, rects, rtl) { + if (rtl === void 0) { + rtl = false; + } + const alignment = getAlignment(placement); + const alignmentAxis = getAlignmentAxis(placement); + const length = getAxisLength(alignmentAxis); + let mainAlignmentSide = alignmentAxis === 'x' ? alignment === (rtl ? 'end' : 'start') ? 'right' : 'left' : alignment === 'start' ? 'bottom' : 'top'; + if (rects.reference[length] > rects.floating[length]) { + mainAlignmentSide = getOppositePlacement(mainAlignmentSide); + } + return [ + mainAlignmentSide, + getOppositePlacement(mainAlignmentSide) + ]; +} +function getExpandedPlacements(placement) { + const oppositePlacement = getOppositePlacement(placement); + return [ + getOppositeAlignmentPlacement(placement), + oppositePlacement, + getOppositeAlignmentPlacement(oppositePlacement) + ]; +} +function getOppositeAlignmentPlacement(placement) { + return placement.replace(/start|end/g, (alignment)=>oppositeAlignmentMap[alignment]); +} +const lrPlacement = [ + 'left', + 'right' +]; +const rlPlacement = [ + 'right', + 'left' +]; +const tbPlacement = [ + 'top', + 'bottom' +]; +const btPlacement = [ + 'bottom', + 'top' +]; +function getSideList(side, isStart, rtl) { + switch(side){ + case 'top': + case 'bottom': + if (rtl) return isStart ? rlPlacement : lrPlacement; + return isStart ? lrPlacement : rlPlacement; + case 'left': + case 'right': + return isStart ? tbPlacement : btPlacement; + default: + return []; + } +} +function getOppositeAxisPlacements(placement, flipAlignment, direction, rtl) { + const alignment = getAlignment(placement); + let list = getSideList(getSide(placement), direction === 'start', rtl); + if (alignment) { + list = list.map((side)=>side + "-" + alignment); + if (flipAlignment) { + list = list.concat(list.map(getOppositeAlignmentPlacement)); + } + } + return list; +} +function getOppositePlacement(placement) { + return placement.replace(/left|right|bottom|top/g, (side)=>oppositeSideMap[side]); +} +function expandPaddingObject(padding) { + return { + top: 0, + right: 0, + bottom: 0, + left: 0, + ...padding + }; +} +function getPaddingObject(padding) { + return typeof padding !== 'number' ? expandPaddingObject(padding) : { + top: padding, + right: padding, + bottom: padding, + left: padding + }; +} +function rectToClientRect(rect) { + const { x, y, width, height } = rect; + return { + width, + height, + top: y, + left: x, + right: x + width, + bottom: y + height, + x, + y + }; +} +; +}), +"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/@floating-ui+utils@0.2.10/node_modules/@floating-ui/utils/dist/floating-ui.utils.dom.mjs [app-ssr] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "getComputedStyle", + ()=>getComputedStyle, + "getContainingBlock", + ()=>getContainingBlock, + "getDocumentElement", + ()=>getDocumentElement, + "getFrameElement", + ()=>getFrameElement, + "getNearestOverflowAncestor", + ()=>getNearestOverflowAncestor, + "getNodeName", + ()=>getNodeName, + "getNodeScroll", + ()=>getNodeScroll, + "getOverflowAncestors", + ()=>getOverflowAncestors, + "getParentNode", + ()=>getParentNode, + "getWindow", + ()=>getWindow, + "isContainingBlock", + ()=>isContainingBlock, + "isElement", + ()=>isElement, + "isHTMLElement", + ()=>isHTMLElement, + "isLastTraversableNode", + ()=>isLastTraversableNode, + "isNode", + ()=>isNode, + "isOverflowElement", + ()=>isOverflowElement, + "isShadowRoot", + ()=>isShadowRoot, + "isTableElement", + ()=>isTableElement, + "isTopLayer", + ()=>isTopLayer, + "isWebKit", + ()=>isWebKit +]); +function hasWindow() { + return ("TURBOPACK compile-time value", "undefined") !== 'undefined'; +} +function getNodeName(node) { + if (isNode(node)) { + return (node.nodeName || '').toLowerCase(); + } + // Mocked nodes in testing environments may not be instances of Node. By + // returning `#document` an infinite loop won't occur. + // https://github.com/floating-ui/floating-ui/issues/2317 + return '#document'; +} +function getWindow(node) { + var _node$ownerDocument; + return (node == null || (_node$ownerDocument = node.ownerDocument) == null ? void 0 : _node$ownerDocument.defaultView) || window; +} +function getDocumentElement(node) { + var _ref; + return (_ref = (isNode(node) ? node.ownerDocument : node.document) || window.document) == null ? void 0 : _ref.documentElement; +} +function isNode(value) { + if (!hasWindow()) { + return false; + } + //TURBOPACK unreachable + ; +} +function isElement(value) { + if (!hasWindow()) { + return false; + } + //TURBOPACK unreachable + ; +} +function isHTMLElement(value) { + if (!hasWindow()) { + return false; + } + //TURBOPACK unreachable + ; +} +function isShadowRoot(value) { + if (!hasWindow() || typeof ShadowRoot === 'undefined') { + return false; + } + //TURBOPACK unreachable + ; +} +const invalidOverflowDisplayValues = /*#__PURE__*/ new Set([ + 'inline', + 'contents' +]); +function isOverflowElement(element) { + const { overflow, overflowX, overflowY, display } = getComputedStyle(element); + return /auto|scroll|overlay|hidden|clip/.test(overflow + overflowY + overflowX) && !invalidOverflowDisplayValues.has(display); +} +const tableElements = /*#__PURE__*/ new Set([ + 'table', + 'td', + 'th' +]); +function isTableElement(element) { + return tableElements.has(getNodeName(element)); +} +const topLayerSelectors = [ + ':popover-open', + ':modal' +]; +function isTopLayer(element) { + return topLayerSelectors.some((selector)=>{ + try { + return element.matches(selector); + } catch (_e) { + return false; + } + }); +} +const transformProperties = [ + 'transform', + 'translate', + 'scale', + 'rotate', + 'perspective' +]; +const willChangeValues = [ + 'transform', + 'translate', + 'scale', + 'rotate', + 'perspective', + 'filter' +]; +const containValues = [ + 'paint', + 'layout', + 'strict', + 'content' +]; +function isContainingBlock(elementOrCss) { + const webkit = isWebKit(); + const css = isElement(elementOrCss) ? getComputedStyle(elementOrCss) : elementOrCss; + // https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block#identifying_the_containing_block + // https://drafts.csswg.org/css-transforms-2/#individual-transforms + return transformProperties.some((value)=>css[value] ? css[value] !== 'none' : false) || (css.containerType ? css.containerType !== 'normal' : false) || !webkit && (css.backdropFilter ? css.backdropFilter !== 'none' : false) || !webkit && (css.filter ? css.filter !== 'none' : false) || willChangeValues.some((value)=>(css.willChange || '').includes(value)) || containValues.some((value)=>(css.contain || '').includes(value)); +} +function getContainingBlock(element) { + let currentNode = getParentNode(element); + while(isHTMLElement(currentNode) && !isLastTraversableNode(currentNode)){ + if (isContainingBlock(currentNode)) { + return currentNode; + } else if (isTopLayer(currentNode)) { + return null; + } + currentNode = getParentNode(currentNode); + } + return null; +} +function isWebKit() { + if (typeof CSS === 'undefined' || !CSS.supports) return false; + return CSS.supports('-webkit-backdrop-filter', 'none'); +} +const lastTraversableNodeNames = /*#__PURE__*/ new Set([ + 'html', + 'body', + '#document' +]); +function isLastTraversableNode(node) { + return lastTraversableNodeNames.has(getNodeName(node)); +} +function getComputedStyle(element) { + return getWindow(element).getComputedStyle(element); +} +function getNodeScroll(element) { + if (isElement(element)) { + return { + scrollLeft: element.scrollLeft, + scrollTop: element.scrollTop + }; + } + return { + scrollLeft: element.scrollX, + scrollTop: element.scrollY + }; +} +function getParentNode(node) { + if (getNodeName(node) === 'html') { + return node; + } + const result = // Step into the shadow DOM of the parent of a slotted node. + node.assignedSlot || // DOM Element detected. + node.parentNode || // ShadowRoot detected. + isShadowRoot(node) && node.host || // Fallback. + getDocumentElement(node); + return isShadowRoot(result) ? result.host : result; +} +function getNearestOverflowAncestor(node) { + const parentNode = getParentNode(node); + if (isLastTraversableNode(parentNode)) { + return node.ownerDocument ? node.ownerDocument.body : node.body; + } + if (isHTMLElement(parentNode) && isOverflowElement(parentNode)) { + return parentNode; + } + return getNearestOverflowAncestor(parentNode); +} +function getOverflowAncestors(node, list, traverseIframes) { + var _node$ownerDocument2; + if (list === void 0) { + list = []; + } + if (traverseIframes === void 0) { + traverseIframes = true; + } + const scrollableAncestor = getNearestOverflowAncestor(node); + const isBody = scrollableAncestor === ((_node$ownerDocument2 = node.ownerDocument) == null ? void 0 : _node$ownerDocument2.body); + const win = getWindow(scrollableAncestor); + if (isBody) { + const frameElement = getFrameElement(win); + return list.concat(win, win.visualViewport || [], isOverflowElement(scrollableAncestor) ? scrollableAncestor : [], frameElement && traverseIframes ? getOverflowAncestors(frameElement) : []); + } + return list.concat(scrollableAncestor, getOverflowAncestors(scrollableAncestor, [], traverseIframes)); +} +function getFrameElement(win) { + return win.parent && Object.getPrototypeOf(win.parent) ? win.frameElement : null; +} +; +}), +"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/@floating-ui+core@1.7.3/node_modules/@floating-ui/core/dist/floating-ui.core.mjs [app-ssr] (ecmascript) ", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "arrow", + ()=>arrow, + "autoPlacement", + ()=>autoPlacement, + "computePosition", + ()=>computePosition, + "detectOverflow", + ()=>detectOverflow, + "flip", + ()=>flip, + "hide", + ()=>hide, + "inline", + ()=>inline, + "limitShift", + ()=>limitShift, + "offset", + ()=>offset, + "shift", + ()=>shift, + "size", + ()=>size +]); +var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/@floating-ui+utils@0.2.10/node_modules/@floating-ui/utils/dist/floating-ui.utils.mjs [app-ssr] (ecmascript)"); +; +; +function computeCoordsFromPlacement(_ref, placement, rtl) { + let { reference, floating } = _ref; + const sideAxis = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["getSideAxis"])(placement); + const alignmentAxis = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["getAlignmentAxis"])(placement); + const alignLength = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["getAxisLength"])(alignmentAxis); + const side = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["getSide"])(placement); + const isVertical = sideAxis === 'y'; + const commonX = reference.x + reference.width / 2 - floating.width / 2; + const commonY = reference.y + reference.height / 2 - floating.height / 2; + const commonAlign = reference[alignLength] / 2 - floating[alignLength] / 2; + let coords; + switch(side){ + case 'top': + coords = { + x: commonX, + y: reference.y - floating.height + }; + break; + case 'bottom': + coords = { + x: commonX, + y: reference.y + reference.height + }; + break; + case 'right': + coords = { + x: reference.x + reference.width, + y: commonY + }; + break; + case 'left': + coords = { + x: reference.x - floating.width, + y: commonY + }; + break; + default: + coords = { + x: reference.x, + y: reference.y + }; + } + switch((0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["getAlignment"])(placement)){ + case 'start': + coords[alignmentAxis] -= commonAlign * (rtl && isVertical ? -1 : 1); + break; + case 'end': + coords[alignmentAxis] += commonAlign * (rtl && isVertical ? -1 : 1); + break; + } + return coords; +} +/** + * Computes the `x` and `y` coordinates that will place the floating element + * next to a given reference element. + * + * This export does not have any `platform` interface logic. You will need to + * write one for the platform you are using Floating UI with. + */ const computePosition = async (reference, floating, config)=>{ + const { placement = 'bottom', strategy = 'absolute', middleware = [], platform } = config; + const validMiddleware = middleware.filter(Boolean); + const rtl = await (platform.isRTL == null ? void 0 : platform.isRTL(floating)); + let rects = await platform.getElementRects({ + reference, + floating, + strategy + }); + let { x, y } = computeCoordsFromPlacement(rects, placement, rtl); + let statefulPlacement = placement; + let middlewareData = {}; + let resetCount = 0; + for(let i = 0; i < validMiddleware.length; i++){ + const { name, fn } = validMiddleware[i]; + const { x: nextX, y: nextY, data, reset } = await fn({ + x, + y, + initialPlacement: placement, + placement: statefulPlacement, + strategy, + middlewareData, + rects, + platform, + elements: { + reference, + floating + } + }); + x = nextX != null ? nextX : x; + y = nextY != null ? nextY : y; + middlewareData = { + ...middlewareData, + [name]: { + ...middlewareData[name], + ...data + } + }; + if (reset && resetCount <= 50) { + resetCount++; + if (typeof reset === 'object') { + if (reset.placement) { + statefulPlacement = reset.placement; + } + if (reset.rects) { + rects = reset.rects === true ? await platform.getElementRects({ + reference, + floating, + strategy + }) : reset.rects; + } + ({ x, y } = computeCoordsFromPlacement(rects, statefulPlacement, rtl)); + } + i = -1; + } + } + return { + x, + y, + placement: statefulPlacement, + strategy, + middlewareData + }; +}; +/** + * Resolves with an object of overflow side offsets that determine how much the + * element is overflowing a given clipping boundary on each side. + * - positive = overflowing the boundary by that number of pixels + * - negative = how many pixels left before it will overflow + * - 0 = lies flush with the boundary + * @see https://floating-ui.com/docs/detectOverflow + */ async function detectOverflow(state, options) { + var _await$platform$isEle; + if (options === void 0) { + options = {}; + } + const { x, y, platform, rects, elements, strategy } = state; + const { boundary = 'clippingAncestors', rootBoundary = 'viewport', elementContext = 'floating', altBoundary = false, padding = 0 } = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["evaluate"])(options, state); + const paddingObject = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["getPaddingObject"])(padding); + const altContext = elementContext === 'floating' ? 'reference' : 'floating'; + const element = elements[altBoundary ? altContext : elementContext]; + const clippingClientRect = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["rectToClientRect"])(await platform.getClippingRect({ + element: ((_await$platform$isEle = await (platform.isElement == null ? void 0 : platform.isElement(element))) != null ? _await$platform$isEle : true) ? element : element.contextElement || await (platform.getDocumentElement == null ? void 0 : platform.getDocumentElement(elements.floating)), + boundary, + rootBoundary, + strategy + })); + const rect = elementContext === 'floating' ? { + x, + y, + width: rects.floating.width, + height: rects.floating.height + } : rects.reference; + const offsetParent = await (platform.getOffsetParent == null ? void 0 : platform.getOffsetParent(elements.floating)); + const offsetScale = await (platform.isElement == null ? void 0 : platform.isElement(offsetParent)) ? await (platform.getScale == null ? void 0 : platform.getScale(offsetParent)) || { + x: 1, + y: 1 + } : { + x: 1, + y: 1 + }; + const elementClientRect = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["rectToClientRect"])(platform.convertOffsetParentRelativeRectToViewportRelativeRect ? await platform.convertOffsetParentRelativeRectToViewportRelativeRect({ + elements, + rect, + offsetParent, + strategy + }) : rect); + return { + top: (clippingClientRect.top - elementClientRect.top + paddingObject.top) / offsetScale.y, + bottom: (elementClientRect.bottom - clippingClientRect.bottom + paddingObject.bottom) / offsetScale.y, + left: (clippingClientRect.left - elementClientRect.left + paddingObject.left) / offsetScale.x, + right: (elementClientRect.right - clippingClientRect.right + paddingObject.right) / offsetScale.x + }; +} +/** + * Provides data to position an inner element of the floating element so that it + * appears centered to the reference element. + * @see https://floating-ui.com/docs/arrow + */ const arrow = (options)=>({ + name: 'arrow', + options, + async fn (state) { + const { x, y, placement, rects, platform, elements, middlewareData } = state; + // Since `element` is required, we don't Partial<> the type. + const { element, padding = 0 } = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["evaluate"])(options, state) || {}; + if (element == null) { + return {}; + } + const paddingObject = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["getPaddingObject"])(padding); + const coords = { + x, + y + }; + const axis = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["getAlignmentAxis"])(placement); + const length = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["getAxisLength"])(axis); + const arrowDimensions = await platform.getDimensions(element); + const isYAxis = axis === 'y'; + const minProp = isYAxis ? 'top' : 'left'; + const maxProp = isYAxis ? 'bottom' : 'right'; + const clientProp = isYAxis ? 'clientHeight' : 'clientWidth'; + const endDiff = rects.reference[length] + rects.reference[axis] - coords[axis] - rects.floating[length]; + const startDiff = coords[axis] - rects.reference[axis]; + const arrowOffsetParent = await (platform.getOffsetParent == null ? void 0 : platform.getOffsetParent(element)); + let clientSize = arrowOffsetParent ? arrowOffsetParent[clientProp] : 0; + // DOM platform can return `window` as the `offsetParent`. + if (!clientSize || !await (platform.isElement == null ? void 0 : platform.isElement(arrowOffsetParent))) { + clientSize = elements.floating[clientProp] || rects.floating[length]; + } + const centerToReference = endDiff / 2 - startDiff / 2; + // If the padding is large enough that it causes the arrow to no longer be + // centered, modify the padding so that it is centered. + const largestPossiblePadding = clientSize / 2 - arrowDimensions[length] / 2 - 1; + const minPadding = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["min"])(paddingObject[minProp], largestPossiblePadding); + const maxPadding = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["min"])(paddingObject[maxProp], largestPossiblePadding); + // Make sure the arrow doesn't overflow the floating element if the center + // point is outside the floating element's bounds. + const min$1 = minPadding; + const max = clientSize - arrowDimensions[length] - maxPadding; + const center = clientSize / 2 - arrowDimensions[length] / 2 + centerToReference; + const offset = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["clamp"])(min$1, center, max); + // If the reference is small enough that the arrow's padding causes it to + // to point to nothing for an aligned placement, adjust the offset of the + // floating element itself. To ensure `shift()` continues to take action, + // a single reset is performed when this is true. + const shouldAddOffset = !middlewareData.arrow && (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["getAlignment"])(placement) != null && center !== offset && rects.reference[length] / 2 - (center < min$1 ? minPadding : maxPadding) - arrowDimensions[length] / 2 < 0; + const alignmentOffset = shouldAddOffset ? center < min$1 ? center - min$1 : center - max : 0; + return { + [axis]: coords[axis] + alignmentOffset, + data: { + [axis]: offset, + centerOffset: center - offset - alignmentOffset, + ...shouldAddOffset && { + alignmentOffset + } + }, + reset: shouldAddOffset + }; + } + }); +function getPlacementList(alignment, autoAlignment, allowedPlacements) { + const allowedPlacementsSortedByAlignment = alignment ? [ + ...allowedPlacements.filter((placement)=>(0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["getAlignment"])(placement) === alignment), + ...allowedPlacements.filter((placement)=>(0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["getAlignment"])(placement) !== alignment) + ] : allowedPlacements.filter((placement)=>(0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["getSide"])(placement) === placement); + return allowedPlacementsSortedByAlignment.filter((placement)=>{ + if (alignment) { + return (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["getAlignment"])(placement) === alignment || (autoAlignment ? (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["getOppositeAlignmentPlacement"])(placement) !== placement : false); + } + return true; + }); +} +/** + * Optimizes the visibility of the floating element by choosing the placement + * that has the most space available automatically, without needing to specify a + * preferred placement. Alternative to `flip`. + * @see https://floating-ui.com/docs/autoPlacement + */ const autoPlacement = function(options) { + if (options === void 0) { + options = {}; + } + return { + name: 'autoPlacement', + options, + async fn (state) { + var _middlewareData$autoP, _middlewareData$autoP2, _placementsThatFitOnE; + const { rects, middlewareData, placement, platform, elements } = state; + const { crossAxis = false, alignment, allowedPlacements = __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["placements"], autoAlignment = true, ...detectOverflowOptions } = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["evaluate"])(options, state); + const placements$1 = alignment !== undefined || allowedPlacements === __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["placements"] ? getPlacementList(alignment || null, autoAlignment, allowedPlacements) : allowedPlacements; + const overflow = await detectOverflow(state, detectOverflowOptions); + const currentIndex = ((_middlewareData$autoP = middlewareData.autoPlacement) == null ? void 0 : _middlewareData$autoP.index) || 0; + const currentPlacement = placements$1[currentIndex]; + if (currentPlacement == null) { + return {}; + } + const alignmentSides = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["getAlignmentSides"])(currentPlacement, rects, await (platform.isRTL == null ? void 0 : platform.isRTL(elements.floating))); + // Make `computeCoords` start from the right place. + if (placement !== currentPlacement) { + return { + reset: { + placement: placements$1[0] + } + }; + } + const currentOverflows = [ + overflow[(0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["getSide"])(currentPlacement)], + overflow[alignmentSides[0]], + overflow[alignmentSides[1]] + ]; + const allOverflows = [ + ...((_middlewareData$autoP2 = middlewareData.autoPlacement) == null ? void 0 : _middlewareData$autoP2.overflows) || [], + { + placement: currentPlacement, + overflows: currentOverflows + } + ]; + const nextPlacement = placements$1[currentIndex + 1]; + // There are more placements to check. + if (nextPlacement) { + return { + data: { + index: currentIndex + 1, + overflows: allOverflows + }, + reset: { + placement: nextPlacement + } + }; + } + const placementsSortedByMostSpace = allOverflows.map((d)=>{ + const alignment = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["getAlignment"])(d.placement); + return [ + d.placement, + alignment && crossAxis ? // Check along the mainAxis and main crossAxis side. + d.overflows.slice(0, 2).reduce((acc, v)=>acc + v, 0) : // Check only the mainAxis. + d.overflows[0], + d.overflows + ]; + }).sort((a, b)=>a[1] - b[1]); + const placementsThatFitOnEachSide = placementsSortedByMostSpace.filter((d)=>d[2].slice(0, // Aligned placements should not check their opposite crossAxis + // side. + (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["getAlignment"])(d[0]) ? 2 : 3).every((v)=>v <= 0)); + const resetPlacement = ((_placementsThatFitOnE = placementsThatFitOnEachSide[0]) == null ? void 0 : _placementsThatFitOnE[0]) || placementsSortedByMostSpace[0][0]; + if (resetPlacement !== placement) { + return { + data: { + index: currentIndex + 1, + overflows: allOverflows + }, + reset: { + placement: resetPlacement + } + }; + } + return {}; + } + }; +}; +/** + * Optimizes the visibility of the floating element by flipping the `placement` + * in order to keep it in view when the preferred placement(s) will overflow the + * clipping boundary. Alternative to `autoPlacement`. + * @see https://floating-ui.com/docs/flip + */ const flip = function(options) { + if (options === void 0) { + options = {}; + } + return { + name: 'flip', + options, + async fn (state) { + var _middlewareData$arrow, _middlewareData$flip; + const { placement, middlewareData, rects, initialPlacement, platform, elements } = state; + const { mainAxis: checkMainAxis = true, crossAxis: checkCrossAxis = true, fallbackPlacements: specifiedFallbackPlacements, fallbackStrategy = 'bestFit', fallbackAxisSideDirection = 'none', flipAlignment = true, ...detectOverflowOptions } = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["evaluate"])(options, state); + // If a reset by the arrow was caused due to an alignment offset being + // added, we should skip any logic now since `flip()` has already done its + // work. + // https://github.com/floating-ui/floating-ui/issues/2549#issuecomment-1719601643 + if ((_middlewareData$arrow = middlewareData.arrow) != null && _middlewareData$arrow.alignmentOffset) { + return {}; + } + const side = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["getSide"])(placement); + const initialSideAxis = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["getSideAxis"])(initialPlacement); + const isBasePlacement = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["getSide"])(initialPlacement) === initialPlacement; + const rtl = await (platform.isRTL == null ? void 0 : platform.isRTL(elements.floating)); + const fallbackPlacements = specifiedFallbackPlacements || (isBasePlacement || !flipAlignment ? [ + (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["getOppositePlacement"])(initialPlacement) + ] : (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["getExpandedPlacements"])(initialPlacement)); + const hasFallbackAxisSideDirection = fallbackAxisSideDirection !== 'none'; + if (!specifiedFallbackPlacements && hasFallbackAxisSideDirection) { + fallbackPlacements.push(...(0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["getOppositeAxisPlacements"])(initialPlacement, flipAlignment, fallbackAxisSideDirection, rtl)); + } + const placements = [ + initialPlacement, + ...fallbackPlacements + ]; + const overflow = await detectOverflow(state, detectOverflowOptions); + const overflows = []; + let overflowsData = ((_middlewareData$flip = middlewareData.flip) == null ? void 0 : _middlewareData$flip.overflows) || []; + if (checkMainAxis) { + overflows.push(overflow[side]); + } + if (checkCrossAxis) { + const sides = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["getAlignmentSides"])(placement, rects, rtl); + overflows.push(overflow[sides[0]], overflow[sides[1]]); + } + overflowsData = [ + ...overflowsData, + { + placement, + overflows + } + ]; + // One or more sides is overflowing. + if (!overflows.every((side)=>side <= 0)) { + var _middlewareData$flip2, _overflowsData$filter; + const nextIndex = (((_middlewareData$flip2 = middlewareData.flip) == null ? void 0 : _middlewareData$flip2.index) || 0) + 1; + const nextPlacement = placements[nextIndex]; + if (nextPlacement) { + const ignoreCrossAxisOverflow = checkCrossAxis === 'alignment' ? initialSideAxis !== (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["getSideAxis"])(nextPlacement) : false; + if (!ignoreCrossAxisOverflow || // We leave the current main axis only if every placement on that axis + // overflows the main axis. + overflowsData.every((d)=>(0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["getSideAxis"])(d.placement) === initialSideAxis ? d.overflows[0] > 0 : true)) { + // Try next placement and re-run the lifecycle. + return { + data: { + index: nextIndex, + overflows: overflowsData + }, + reset: { + placement: nextPlacement + } + }; + } + } + // First, find the candidates that fit on the mainAxis side of overflow, + // then find the placement that fits the best on the main crossAxis side. + let resetPlacement = (_overflowsData$filter = overflowsData.filter((d)=>d.overflows[0] <= 0).sort((a, b)=>a.overflows[1] - b.overflows[1])[0]) == null ? void 0 : _overflowsData$filter.placement; + // Otherwise fallback. + if (!resetPlacement) { + switch(fallbackStrategy){ + case 'bestFit': + { + var _overflowsData$filter2; + const placement = (_overflowsData$filter2 = overflowsData.filter((d)=>{ + if (hasFallbackAxisSideDirection) { + const currentSideAxis = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["getSideAxis"])(d.placement); + return currentSideAxis === initialSideAxis || // Create a bias to the `y` side axis due to horizontal + // reading directions favoring greater width. + currentSideAxis === 'y'; + } + return true; + }).map((d)=>[ + d.placement, + d.overflows.filter((overflow)=>overflow > 0).reduce((acc, overflow)=>acc + overflow, 0) + ]).sort((a, b)=>a[1] - b[1])[0]) == null ? void 0 : _overflowsData$filter2[0]; + if (placement) { + resetPlacement = placement; + } + break; + } + case 'initialPlacement': + resetPlacement = initialPlacement; + break; + } + } + if (placement !== resetPlacement) { + return { + reset: { + placement: resetPlacement + } + }; + } + } + return {}; + } + }; +}; +function getSideOffsets(overflow, rect) { + return { + top: overflow.top - rect.height, + right: overflow.right - rect.width, + bottom: overflow.bottom - rect.height, + left: overflow.left - rect.width + }; +} +function isAnySideFullyClipped(overflow) { + return __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["sides"].some((side)=>overflow[side] >= 0); +} +/** + * Provides data to hide the floating element in applicable situations, such as + * when it is not in the same clipping context as the reference element. + * @see https://floating-ui.com/docs/hide + */ const hide = function(options) { + if (options === void 0) { + options = {}; + } + return { + name: 'hide', + options, + async fn (state) { + const { rects } = state; + const { strategy = 'referenceHidden', ...detectOverflowOptions } = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["evaluate"])(options, state); + switch(strategy){ + case 'referenceHidden': + { + const overflow = await detectOverflow(state, { + ...detectOverflowOptions, + elementContext: 'reference' + }); + const offsets = getSideOffsets(overflow, rects.reference); + return { + data: { + referenceHiddenOffsets: offsets, + referenceHidden: isAnySideFullyClipped(offsets) + } + }; + } + case 'escaped': + { + const overflow = await detectOverflow(state, { + ...detectOverflowOptions, + altBoundary: true + }); + const offsets = getSideOffsets(overflow, rects.floating); + return { + data: { + escapedOffsets: offsets, + escaped: isAnySideFullyClipped(offsets) + } + }; + } + default: + { + return {}; + } + } + } + }; +}; +function getBoundingRect(rects) { + const minX = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["min"])(...rects.map((rect)=>rect.left)); + const minY = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["min"])(...rects.map((rect)=>rect.top)); + const maxX = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["max"])(...rects.map((rect)=>rect.right)); + const maxY = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["max"])(...rects.map((rect)=>rect.bottom)); + return { + x: minX, + y: minY, + width: maxX - minX, + height: maxY - minY + }; +} +function getRectsByLine(rects) { + const sortedRects = rects.slice().sort((a, b)=>a.y - b.y); + const groups = []; + let prevRect = null; + for(let i = 0; i < sortedRects.length; i++){ + const rect = sortedRects[i]; + if (!prevRect || rect.y - prevRect.y > prevRect.height / 2) { + groups.push([ + rect + ]); + } else { + groups[groups.length - 1].push(rect); + } + prevRect = rect; + } + return groups.map((rect)=>(0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["rectToClientRect"])(getBoundingRect(rect))); +} +/** + * Provides improved positioning for inline reference elements that can span + * over multiple lines, such as hyperlinks or range selections. + * @see https://floating-ui.com/docs/inline + */ const inline = function(options) { + if (options === void 0) { + options = {}; + } + return { + name: 'inline', + options, + async fn (state) { + const { placement, elements, rects, platform, strategy } = state; + // A MouseEvent's client{X,Y} coords can be up to 2 pixels off a + // ClientRect's bounds, despite the event listener being triggered. A + // padding of 2 seems to handle this issue. + const { padding = 2, x, y } = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["evaluate"])(options, state); + const nativeClientRects = Array.from(await (platform.getClientRects == null ? void 0 : platform.getClientRects(elements.reference)) || []); + const clientRects = getRectsByLine(nativeClientRects); + const fallback = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["rectToClientRect"])(getBoundingRect(nativeClientRects)); + const paddingObject = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["getPaddingObject"])(padding); + function getBoundingClientRect() { + // There are two rects and they are disjoined. + if (clientRects.length === 2 && clientRects[0].left > clientRects[1].right && x != null && y != null) { + // Find the first rect in which the point is fully inside. + return clientRects.find((rect)=>x > rect.left - paddingObject.left && x < rect.right + paddingObject.right && y > rect.top - paddingObject.top && y < rect.bottom + paddingObject.bottom) || fallback; + } + // There are 2 or more connected rects. + if (clientRects.length >= 2) { + if ((0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["getSideAxis"])(placement) === 'y') { + const firstRect = clientRects[0]; + const lastRect = clientRects[clientRects.length - 1]; + const isTop = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["getSide"])(placement) === 'top'; + const top = firstRect.top; + const bottom = lastRect.bottom; + const left = isTop ? firstRect.left : lastRect.left; + const right = isTop ? firstRect.right : lastRect.right; + const width = right - left; + const height = bottom - top; + return { + top, + bottom, + left, + right, + width, + height, + x: left, + y: top + }; + } + const isLeftSide = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["getSide"])(placement) === 'left'; + const maxRight = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["max"])(...clientRects.map((rect)=>rect.right)); + const minLeft = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["min"])(...clientRects.map((rect)=>rect.left)); + const measureRects = clientRects.filter((rect)=>isLeftSide ? rect.left === minLeft : rect.right === maxRight); + const top = measureRects[0].top; + const bottom = measureRects[measureRects.length - 1].bottom; + const left = minLeft; + const right = maxRight; + const width = right - left; + const height = bottom - top; + return { + top, + bottom, + left, + right, + width, + height, + x: left, + y: top + }; + } + return fallback; + } + const resetRects = await platform.getElementRects({ + reference: { + getBoundingClientRect + }, + floating: elements.floating, + strategy + }); + if (rects.reference.x !== resetRects.reference.x || rects.reference.y !== resetRects.reference.y || rects.reference.width !== resetRects.reference.width || rects.reference.height !== resetRects.reference.height) { + return { + reset: { + rects: resetRects + } + }; + } + return {}; + } + }; +}; +const originSides = /*#__PURE__*/ new Set([ + 'left', + 'top' +]); +// For type backwards-compatibility, the `OffsetOptions` type was also +// Derivable. +async function convertValueToCoords(state, options) { + const { placement, platform, elements } = state; + const rtl = await (platform.isRTL == null ? void 0 : platform.isRTL(elements.floating)); + const side = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["getSide"])(placement); + const alignment = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["getAlignment"])(placement); + const isVertical = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["getSideAxis"])(placement) === 'y'; + const mainAxisMulti = originSides.has(side) ? -1 : 1; + const crossAxisMulti = rtl && isVertical ? -1 : 1; + const rawValue = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["evaluate"])(options, state); + // eslint-disable-next-line prefer-const + let { mainAxis, crossAxis, alignmentAxis } = typeof rawValue === 'number' ? { + mainAxis: rawValue, + crossAxis: 0, + alignmentAxis: null + } : { + mainAxis: rawValue.mainAxis || 0, + crossAxis: rawValue.crossAxis || 0, + alignmentAxis: rawValue.alignmentAxis + }; + if (alignment && typeof alignmentAxis === 'number') { + crossAxis = alignment === 'end' ? alignmentAxis * -1 : alignmentAxis; + } + return isVertical ? { + x: crossAxis * crossAxisMulti, + y: mainAxis * mainAxisMulti + } : { + x: mainAxis * mainAxisMulti, + y: crossAxis * crossAxisMulti + }; +} +/** + * Modifies the placement by translating the floating element along the + * specified axes. + * A number (shorthand for `mainAxis` or distance), or an axes configuration + * object may be passed. + * @see https://floating-ui.com/docs/offset + */ const offset = function(options) { + if (options === void 0) { + options = 0; + } + return { + name: 'offset', + options, + async fn (state) { + var _middlewareData$offse, _middlewareData$arrow; + const { x, y, placement, middlewareData } = state; + const diffCoords = await convertValueToCoords(state, options); + // If the placement is the same and the arrow caused an alignment offset + // then we don't need to change the positioning coordinates. + if (placement === ((_middlewareData$offse = middlewareData.offset) == null ? void 0 : _middlewareData$offse.placement) && (_middlewareData$arrow = middlewareData.arrow) != null && _middlewareData$arrow.alignmentOffset) { + return {}; + } + return { + x: x + diffCoords.x, + y: y + diffCoords.y, + data: { + ...diffCoords, + placement + } + }; + } + }; +}; +/** + * Optimizes the visibility of the floating element by shifting it in order to + * keep it in view when it will overflow the clipping boundary. + * @see https://floating-ui.com/docs/shift + */ const shift = function(options) { + if (options === void 0) { + options = {}; + } + return { + name: 'shift', + options, + async fn (state) { + const { x, y, placement } = state; + const { mainAxis: checkMainAxis = true, crossAxis: checkCrossAxis = false, limiter = { + fn: (_ref)=>{ + let { x, y } = _ref; + return { + x, + y + }; + } + }, ...detectOverflowOptions } = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["evaluate"])(options, state); + const coords = { + x, + y + }; + const overflow = await detectOverflow(state, detectOverflowOptions); + const crossAxis = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["getSideAxis"])((0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["getSide"])(placement)); + const mainAxis = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["getOppositeAxis"])(crossAxis); + let mainAxisCoord = coords[mainAxis]; + let crossAxisCoord = coords[crossAxis]; + if (checkMainAxis) { + const minSide = mainAxis === 'y' ? 'top' : 'left'; + const maxSide = mainAxis === 'y' ? 'bottom' : 'right'; + const min = mainAxisCoord + overflow[minSide]; + const max = mainAxisCoord - overflow[maxSide]; + mainAxisCoord = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["clamp"])(min, mainAxisCoord, max); + } + if (checkCrossAxis) { + const minSide = crossAxis === 'y' ? 'top' : 'left'; + const maxSide = crossAxis === 'y' ? 'bottom' : 'right'; + const min = crossAxisCoord + overflow[minSide]; + const max = crossAxisCoord - overflow[maxSide]; + crossAxisCoord = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["clamp"])(min, crossAxisCoord, max); + } + const limitedCoords = limiter.fn({ + ...state, + [mainAxis]: mainAxisCoord, + [crossAxis]: crossAxisCoord + }); + return { + ...limitedCoords, + data: { + x: limitedCoords.x - x, + y: limitedCoords.y - y, + enabled: { + [mainAxis]: checkMainAxis, + [crossAxis]: checkCrossAxis + } + } + }; + } + }; +}; +/** + * Built-in `limiter` that will stop `shift()` at a certain point. + */ const limitShift = function(options) { + if (options === void 0) { + options = {}; + } + return { + options, + fn (state) { + const { x, y, placement, rects, middlewareData } = state; + const { offset = 0, mainAxis: checkMainAxis = true, crossAxis: checkCrossAxis = true } = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["evaluate"])(options, state); + const coords = { + x, + y + }; + const crossAxis = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["getSideAxis"])(placement); + const mainAxis = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["getOppositeAxis"])(crossAxis); + let mainAxisCoord = coords[mainAxis]; + let crossAxisCoord = coords[crossAxis]; + const rawOffset = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["evaluate"])(offset, state); + const computedOffset = typeof rawOffset === 'number' ? { + mainAxis: rawOffset, + crossAxis: 0 + } : { + mainAxis: 0, + crossAxis: 0, + ...rawOffset + }; + if (checkMainAxis) { + const len = mainAxis === 'y' ? 'height' : 'width'; + const limitMin = rects.reference[mainAxis] - rects.floating[len] + computedOffset.mainAxis; + const limitMax = rects.reference[mainAxis] + rects.reference[len] - computedOffset.mainAxis; + if (mainAxisCoord < limitMin) { + mainAxisCoord = limitMin; + } else if (mainAxisCoord > limitMax) { + mainAxisCoord = limitMax; + } + } + if (checkCrossAxis) { + var _middlewareData$offse, _middlewareData$offse2; + const len = mainAxis === 'y' ? 'width' : 'height'; + const isOriginSide = originSides.has((0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["getSide"])(placement)); + const limitMin = rects.reference[crossAxis] - rects.floating[len] + (isOriginSide ? ((_middlewareData$offse = middlewareData.offset) == null ? void 0 : _middlewareData$offse[crossAxis]) || 0 : 0) + (isOriginSide ? 0 : computedOffset.crossAxis); + const limitMax = rects.reference[crossAxis] + rects.reference[len] + (isOriginSide ? 0 : ((_middlewareData$offse2 = middlewareData.offset) == null ? void 0 : _middlewareData$offse2[crossAxis]) || 0) - (isOriginSide ? computedOffset.crossAxis : 0); + if (crossAxisCoord < limitMin) { + crossAxisCoord = limitMin; + } else if (crossAxisCoord > limitMax) { + crossAxisCoord = limitMax; + } + } + return { + [mainAxis]: mainAxisCoord, + [crossAxis]: crossAxisCoord + }; + } + }; +}; +/** + * Provides data that allows you to change the size of the floating element — + * for instance, prevent it from overflowing the clipping boundary or match the + * width of the reference element. + * @see https://floating-ui.com/docs/size + */ const size = function(options) { + if (options === void 0) { + options = {}; + } + return { + name: 'size', + options, + async fn (state) { + var _state$middlewareData, _state$middlewareData2; + const { placement, rects, platform, elements } = state; + const { apply = ()=>{}, ...detectOverflowOptions } = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["evaluate"])(options, state); + const overflow = await detectOverflow(state, detectOverflowOptions); + const side = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["getSide"])(placement); + const alignment = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["getAlignment"])(placement); + const isYAxis = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["getSideAxis"])(placement) === 'y'; + const { width, height } = rects.floating; + let heightSide; + let widthSide; + if (side === 'top' || side === 'bottom') { + heightSide = side; + widthSide = alignment === (await (platform.isRTL == null ? void 0 : platform.isRTL(elements.floating)) ? 'start' : 'end') ? 'left' : 'right'; + } else { + widthSide = side; + heightSide = alignment === 'end' ? 'top' : 'bottom'; + } + const maximumClippingHeight = height - overflow.top - overflow.bottom; + const maximumClippingWidth = width - overflow.left - overflow.right; + const overflowAvailableHeight = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["min"])(height - overflow[heightSide], maximumClippingHeight); + const overflowAvailableWidth = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["min"])(width - overflow[widthSide], maximumClippingWidth); + const noShift = !state.middlewareData.shift; + let availableHeight = overflowAvailableHeight; + let availableWidth = overflowAvailableWidth; + if ((_state$middlewareData = state.middlewareData.shift) != null && _state$middlewareData.enabled.x) { + availableWidth = maximumClippingWidth; + } + if ((_state$middlewareData2 = state.middlewareData.shift) != null && _state$middlewareData2.enabled.y) { + availableHeight = maximumClippingHeight; + } + if (noShift && !alignment) { + const xMin = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["max"])(overflow.left, 0); + const xMax = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["max"])(overflow.right, 0); + const yMin = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["max"])(overflow.top, 0); + const yMax = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["max"])(overflow.bottom, 0); + if (isYAxis) { + availableWidth = width - 2 * (xMin !== 0 || xMax !== 0 ? xMin + xMax : (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["max"])(overflow.left, overflow.right)); + } else { + availableHeight = height - 2 * (yMin !== 0 || yMax !== 0 ? yMin + yMax : (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["max"])(overflow.top, overflow.bottom)); + } + } + await apply({ + ...state, + availableWidth, + availableHeight + }); + const nextDimensions = await platform.getDimensions(elements.floating); + if (width !== nextDimensions.width || height !== nextDimensions.height) { + return { + reset: { + rects: true + } + }; + } + return {}; + } + }; +}; +; +}), +"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/@floating-ui+dom@1.7.4/node_modules/@floating-ui/dom/dist/floating-ui.dom.mjs [app-ssr] (ecmascript) ", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "arrow", + ()=>arrow, + "autoPlacement", + ()=>autoPlacement, + "autoUpdate", + ()=>autoUpdate, + "computePosition", + ()=>computePosition, + "detectOverflow", + ()=>detectOverflow, + "flip", + ()=>flip, + "hide", + ()=>hide, + "inline", + ()=>inline, + "limitShift", + ()=>limitShift, + "offset", + ()=>offset, + "platform", + ()=>platform, + "shift", + ()=>shift, + "size", + ()=>size +]); +var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/@floating-ui+utils@0.2.10/node_modules/@floating-ui/utils/dist/floating-ui.utils.mjs [app-ssr] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$core$40$1$2e$7$2e$3$2f$node_modules$2f40$floating$2d$ui$2f$core$2f$dist$2f$floating$2d$ui$2e$core$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__$3c$locals$3e$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/@floating-ui+core@1.7.3/node_modules/@floating-ui/core/dist/floating-ui.core.mjs [app-ssr] (ecmascript) "); +var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$dom$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/@floating-ui+utils@0.2.10/node_modules/@floating-ui/utils/dist/floating-ui.utils.dom.mjs [app-ssr] (ecmascript)"); +; +; +; +; +function getCssDimensions(element) { + const css = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$dom$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["getComputedStyle"])(element); + // In testing environments, the `width` and `height` properties are empty + // strings for SVG elements, returning NaN. Fallback to `0` in this case. + let width = parseFloat(css.width) || 0; + let height = parseFloat(css.height) || 0; + const hasOffset = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$dom$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["isHTMLElement"])(element); + const offsetWidth = hasOffset ? element.offsetWidth : width; + const offsetHeight = hasOffset ? element.offsetHeight : height; + const shouldFallback = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["round"])(width) !== offsetWidth || (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["round"])(height) !== offsetHeight; + if (shouldFallback) { + width = offsetWidth; + height = offsetHeight; + } + return { + width, + height, + $: shouldFallback + }; +} +function unwrapElement(element) { + return !(0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$dom$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["isElement"])(element) ? element.contextElement : element; +} +function getScale(element) { + const domElement = unwrapElement(element); + if (!(0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$dom$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["isHTMLElement"])(domElement)) { + return (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["createCoords"])(1); + } + const rect = domElement.getBoundingClientRect(); + const { width, height, $ } = getCssDimensions(domElement); + let x = ($ ? (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["round"])(rect.width) : rect.width) / width; + let y = ($ ? (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["round"])(rect.height) : rect.height) / height; + // 0, NaN, or Infinity should always fallback to 1. + if (!x || !Number.isFinite(x)) { + x = 1; + } + if (!y || !Number.isFinite(y)) { + y = 1; + } + return { + x, + y + }; +} +const noOffsets = /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["createCoords"])(0); +function getVisualOffsets(element) { + const win = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$dom$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["getWindow"])(element); + if (!(0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$dom$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["isWebKit"])() || !win.visualViewport) { + return noOffsets; + } + return { + x: win.visualViewport.offsetLeft, + y: win.visualViewport.offsetTop + }; +} +function shouldAddVisualOffsets(element, isFixed, floatingOffsetParent) { + if (isFixed === void 0) { + isFixed = false; + } + if (!floatingOffsetParent || isFixed && floatingOffsetParent !== (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$dom$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["getWindow"])(element)) { + return false; + } + return isFixed; +} +function getBoundingClientRect(element, includeScale, isFixedStrategy, offsetParent) { + if (includeScale === void 0) { + includeScale = false; + } + if (isFixedStrategy === void 0) { + isFixedStrategy = false; + } + const clientRect = element.getBoundingClientRect(); + const domElement = unwrapElement(element); + let scale = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["createCoords"])(1); + if (includeScale) { + if (offsetParent) { + if ((0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$dom$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["isElement"])(offsetParent)) { + scale = getScale(offsetParent); + } + } else { + scale = getScale(element); + } + } + const visualOffsets = shouldAddVisualOffsets(domElement, isFixedStrategy, offsetParent) ? getVisualOffsets(domElement) : (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["createCoords"])(0); + let x = (clientRect.left + visualOffsets.x) / scale.x; + let y = (clientRect.top + visualOffsets.y) / scale.y; + let width = clientRect.width / scale.x; + let height = clientRect.height / scale.y; + if (domElement) { + const win = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$dom$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["getWindow"])(domElement); + const offsetWin = offsetParent && (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$dom$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["isElement"])(offsetParent) ? (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$dom$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["getWindow"])(offsetParent) : offsetParent; + let currentWin = win; + let currentIFrame = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$dom$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["getFrameElement"])(currentWin); + while(currentIFrame && offsetParent && offsetWin !== currentWin){ + const iframeScale = getScale(currentIFrame); + const iframeRect = currentIFrame.getBoundingClientRect(); + const css = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$dom$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["getComputedStyle"])(currentIFrame); + const left = iframeRect.left + (currentIFrame.clientLeft + parseFloat(css.paddingLeft)) * iframeScale.x; + const top = iframeRect.top + (currentIFrame.clientTop + parseFloat(css.paddingTop)) * iframeScale.y; + x *= iframeScale.x; + y *= iframeScale.y; + width *= iframeScale.x; + height *= iframeScale.y; + x += left; + y += top; + currentWin = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$dom$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["getWindow"])(currentIFrame); + currentIFrame = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$dom$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["getFrameElement"])(currentWin); + } + } + return (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["rectToClientRect"])({ + width, + height, + x, + y + }); +} +// If has a CSS width greater than the viewport, then this will be +// incorrect for RTL. +function getWindowScrollBarX(element, rect) { + const leftScroll = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$dom$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["getNodeScroll"])(element).scrollLeft; + if (!rect) { + return getBoundingClientRect((0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$dom$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["getDocumentElement"])(element)).left + leftScroll; + } + return rect.left + leftScroll; +} +function getHTMLOffset(documentElement, scroll) { + const htmlRect = documentElement.getBoundingClientRect(); + const x = htmlRect.left + scroll.scrollLeft - getWindowScrollBarX(documentElement, htmlRect); + const y = htmlRect.top + scroll.scrollTop; + return { + x, + y + }; +} +function convertOffsetParentRelativeRectToViewportRelativeRect(_ref) { + let { elements, rect, offsetParent, strategy } = _ref; + const isFixed = strategy === 'fixed'; + const documentElement = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$dom$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["getDocumentElement"])(offsetParent); + const topLayer = elements ? (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$dom$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["isTopLayer"])(elements.floating) : false; + if (offsetParent === documentElement || topLayer && isFixed) { + return rect; + } + let scroll = { + scrollLeft: 0, + scrollTop: 0 + }; + let scale = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["createCoords"])(1); + const offsets = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["createCoords"])(0); + const isOffsetParentAnElement = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$dom$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["isHTMLElement"])(offsetParent); + if (isOffsetParentAnElement || !isOffsetParentAnElement && !isFixed) { + if ((0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$dom$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["getNodeName"])(offsetParent) !== 'body' || (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$dom$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["isOverflowElement"])(documentElement)) { + scroll = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$dom$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["getNodeScroll"])(offsetParent); + } + if ((0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$dom$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["isHTMLElement"])(offsetParent)) { + const offsetRect = getBoundingClientRect(offsetParent); + scale = getScale(offsetParent); + offsets.x = offsetRect.x + offsetParent.clientLeft; + offsets.y = offsetRect.y + offsetParent.clientTop; + } + } + const htmlOffset = documentElement && !isOffsetParentAnElement && !isFixed ? getHTMLOffset(documentElement, scroll) : (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["createCoords"])(0); + return { + width: rect.width * scale.x, + height: rect.height * scale.y, + x: rect.x * scale.x - scroll.scrollLeft * scale.x + offsets.x + htmlOffset.x, + y: rect.y * scale.y - scroll.scrollTop * scale.y + offsets.y + htmlOffset.y + }; +} +function getClientRects(element) { + return Array.from(element.getClientRects()); +} +// Gets the entire size of the scrollable document area, even extending outside +// of the `` and `` rect bounds if horizontally scrollable. +function getDocumentRect(element) { + const html = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$dom$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["getDocumentElement"])(element); + const scroll = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$dom$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["getNodeScroll"])(element); + const body = element.ownerDocument.body; + const width = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["max"])(html.scrollWidth, html.clientWidth, body.scrollWidth, body.clientWidth); + const height = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["max"])(html.scrollHeight, html.clientHeight, body.scrollHeight, body.clientHeight); + let x = -scroll.scrollLeft + getWindowScrollBarX(element); + const y = -scroll.scrollTop; + if ((0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$dom$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["getComputedStyle"])(body).direction === 'rtl') { + x += (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["max"])(html.clientWidth, body.clientWidth) - width; + } + return { + width, + height, + x, + y + }; +} +// Safety check: ensure the scrollbar space is reasonable in case this +// calculation is affected by unusual styles. +// Most scrollbars leave 15-18px of space. +const SCROLLBAR_MAX = 25; +function getViewportRect(element, strategy) { + const win = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$dom$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["getWindow"])(element); + const html = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$dom$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["getDocumentElement"])(element); + const visualViewport = win.visualViewport; + let width = html.clientWidth; + let height = html.clientHeight; + let x = 0; + let y = 0; + if (visualViewport) { + width = visualViewport.width; + height = visualViewport.height; + const visualViewportBased = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$dom$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["isWebKit"])(); + if (!visualViewportBased || visualViewportBased && strategy === 'fixed') { + x = visualViewport.offsetLeft; + y = visualViewport.offsetTop; + } + } + const windowScrollbarX = getWindowScrollBarX(html); + // `overflow: hidden` + `scrollbar-gutter: stable` reduces the + // visual width of the but this is not considered in the size + // of `html.clientWidth`. + if (windowScrollbarX <= 0) { + const doc = html.ownerDocument; + const body = doc.body; + const bodyStyles = getComputedStyle(body); + const bodyMarginInline = doc.compatMode === 'CSS1Compat' ? parseFloat(bodyStyles.marginLeft) + parseFloat(bodyStyles.marginRight) || 0 : 0; + const clippingStableScrollbarWidth = Math.abs(html.clientWidth - body.clientWidth - bodyMarginInline); + if (clippingStableScrollbarWidth <= SCROLLBAR_MAX) { + width -= clippingStableScrollbarWidth; + } + } else if (windowScrollbarX <= SCROLLBAR_MAX) { + // If the scrollbar is on the left, the width needs to be extended + // by the scrollbar amount so there isn't extra space on the right. + width += windowScrollbarX; + } + return { + width, + height, + x, + y + }; +} +const absoluteOrFixed = /*#__PURE__*/ new Set([ + 'absolute', + 'fixed' +]); +// Returns the inner client rect, subtracting scrollbars if present. +function getInnerBoundingClientRect(element, strategy) { + const clientRect = getBoundingClientRect(element, true, strategy === 'fixed'); + const top = clientRect.top + element.clientTop; + const left = clientRect.left + element.clientLeft; + const scale = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$dom$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["isHTMLElement"])(element) ? getScale(element) : (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["createCoords"])(1); + const width = element.clientWidth * scale.x; + const height = element.clientHeight * scale.y; + const x = left * scale.x; + const y = top * scale.y; + return { + width, + height, + x, + y + }; +} +function getClientRectFromClippingAncestor(element, clippingAncestor, strategy) { + let rect; + if (clippingAncestor === 'viewport') { + rect = getViewportRect(element, strategy); + } else if (clippingAncestor === 'document') { + rect = getDocumentRect((0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$dom$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["getDocumentElement"])(element)); + } else if ((0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$dom$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["isElement"])(clippingAncestor)) { + rect = getInnerBoundingClientRect(clippingAncestor, strategy); + } else { + const visualOffsets = getVisualOffsets(element); + rect = { + x: clippingAncestor.x - visualOffsets.x, + y: clippingAncestor.y - visualOffsets.y, + width: clippingAncestor.width, + height: clippingAncestor.height + }; + } + return (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["rectToClientRect"])(rect); +} +function hasFixedPositionAncestor(element, stopNode) { + const parentNode = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$dom$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["getParentNode"])(element); + if (parentNode === stopNode || !(0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$dom$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["isElement"])(parentNode) || (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$dom$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["isLastTraversableNode"])(parentNode)) { + return false; + } + return (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$dom$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["getComputedStyle"])(parentNode).position === 'fixed' || hasFixedPositionAncestor(parentNode, stopNode); +} +// A "clipping ancestor" is an `overflow` element with the characteristic of +// clipping (or hiding) child elements. This returns all clipping ancestors +// of the given element up the tree. +function getClippingElementAncestors(element, cache) { + const cachedResult = cache.get(element); + if (cachedResult) { + return cachedResult; + } + let result = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$dom$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["getOverflowAncestors"])(element, [], false).filter((el)=>(0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$dom$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["isElement"])(el) && (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$dom$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["getNodeName"])(el) !== 'body'); + let currentContainingBlockComputedStyle = null; + const elementIsFixed = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$dom$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["getComputedStyle"])(element).position === 'fixed'; + let currentNode = elementIsFixed ? (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$dom$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["getParentNode"])(element) : element; + // https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block#identifying_the_containing_block + while((0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$dom$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["isElement"])(currentNode) && !(0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$dom$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["isLastTraversableNode"])(currentNode)){ + const computedStyle = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$dom$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["getComputedStyle"])(currentNode); + const currentNodeIsContaining = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$dom$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["isContainingBlock"])(currentNode); + if (!currentNodeIsContaining && computedStyle.position === 'fixed') { + currentContainingBlockComputedStyle = null; + } + const shouldDropCurrentNode = elementIsFixed ? !currentNodeIsContaining && !currentContainingBlockComputedStyle : !currentNodeIsContaining && computedStyle.position === 'static' && !!currentContainingBlockComputedStyle && absoluteOrFixed.has(currentContainingBlockComputedStyle.position) || (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$dom$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["isOverflowElement"])(currentNode) && !currentNodeIsContaining && hasFixedPositionAncestor(element, currentNode); + if (shouldDropCurrentNode) { + // Drop non-containing blocks. + result = result.filter((ancestor)=>ancestor !== currentNode); + } else { + // Record last containing block for next iteration. + currentContainingBlockComputedStyle = computedStyle; + } + currentNode = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$dom$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["getParentNode"])(currentNode); + } + cache.set(element, result); + return result; +} +// Gets the maximum area that the element is visible in due to any number of +// clipping ancestors. +function getClippingRect(_ref) { + let { element, boundary, rootBoundary, strategy } = _ref; + const elementClippingAncestors = boundary === 'clippingAncestors' ? (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$dom$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["isTopLayer"])(element) ? [] : getClippingElementAncestors(element, this._c) : [].concat(boundary); + const clippingAncestors = [ + ...elementClippingAncestors, + rootBoundary + ]; + const firstClippingAncestor = clippingAncestors[0]; + const clippingRect = clippingAncestors.reduce((accRect, clippingAncestor)=>{ + const rect = getClientRectFromClippingAncestor(element, clippingAncestor, strategy); + accRect.top = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["max"])(rect.top, accRect.top); + accRect.right = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["min"])(rect.right, accRect.right); + accRect.bottom = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["min"])(rect.bottom, accRect.bottom); + accRect.left = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["max"])(rect.left, accRect.left); + return accRect; + }, getClientRectFromClippingAncestor(element, firstClippingAncestor, strategy)); + return { + width: clippingRect.right - clippingRect.left, + height: clippingRect.bottom - clippingRect.top, + x: clippingRect.left, + y: clippingRect.top + }; +} +function getDimensions(element) { + const { width, height } = getCssDimensions(element); + return { + width, + height + }; +} +function getRectRelativeToOffsetParent(element, offsetParent, strategy) { + const isOffsetParentAnElement = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$dom$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["isHTMLElement"])(offsetParent); + const documentElement = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$dom$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["getDocumentElement"])(offsetParent); + const isFixed = strategy === 'fixed'; + const rect = getBoundingClientRect(element, true, isFixed, offsetParent); + let scroll = { + scrollLeft: 0, + scrollTop: 0 + }; + const offsets = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["createCoords"])(0); + // If the scrollbar appears on the left (e.g. RTL systems). Use + // Firefox with layout.scrollbar.side = 3 in about:config to test this. + function setLeftRTLScrollbarOffset() { + offsets.x = getWindowScrollBarX(documentElement); + } + if (isOffsetParentAnElement || !isOffsetParentAnElement && !isFixed) { + if ((0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$dom$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["getNodeName"])(offsetParent) !== 'body' || (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$dom$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["isOverflowElement"])(documentElement)) { + scroll = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$dom$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["getNodeScroll"])(offsetParent); + } + if (isOffsetParentAnElement) { + const offsetRect = getBoundingClientRect(offsetParent, true, isFixed, offsetParent); + offsets.x = offsetRect.x + offsetParent.clientLeft; + offsets.y = offsetRect.y + offsetParent.clientTop; + } else if (documentElement) { + setLeftRTLScrollbarOffset(); + } + } + if (isFixed && !isOffsetParentAnElement && documentElement) { + setLeftRTLScrollbarOffset(); + } + const htmlOffset = documentElement && !isOffsetParentAnElement && !isFixed ? getHTMLOffset(documentElement, scroll) : (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["createCoords"])(0); + const x = rect.left + scroll.scrollLeft - offsets.x - htmlOffset.x; + const y = rect.top + scroll.scrollTop - offsets.y - htmlOffset.y; + return { + x, + y, + width: rect.width, + height: rect.height + }; +} +function isStaticPositioned(element) { + return (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$dom$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["getComputedStyle"])(element).position === 'static'; +} +function getTrueOffsetParent(element, polyfill) { + if (!(0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$dom$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["isHTMLElement"])(element) || (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$dom$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["getComputedStyle"])(element).position === 'fixed') { + return null; + } + if (polyfill) { + return polyfill(element); + } + let rawOffsetParent = element.offsetParent; + // Firefox returns the element as the offsetParent if it's non-static, + // while Chrome and Safari return the element. The element must + // be used to perform the correct calculations even if the element is + // non-static. + if ((0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$dom$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["getDocumentElement"])(element) === rawOffsetParent) { + rawOffsetParent = rawOffsetParent.ownerDocument.body; + } + return rawOffsetParent; +} +// Gets the closest ancestor positioned element. Handles some edge cases, +// such as table ancestors and cross browser bugs. +function getOffsetParent(element, polyfill) { + const win = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$dom$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["getWindow"])(element); + if ((0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$dom$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["isTopLayer"])(element)) { + return win; + } + if (!(0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$dom$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["isHTMLElement"])(element)) { + let svgOffsetParent = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$dom$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["getParentNode"])(element); + while(svgOffsetParent && !(0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$dom$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["isLastTraversableNode"])(svgOffsetParent)){ + if ((0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$dom$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["isElement"])(svgOffsetParent) && !isStaticPositioned(svgOffsetParent)) { + return svgOffsetParent; + } + svgOffsetParent = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$dom$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["getParentNode"])(svgOffsetParent); + } + return win; + } + let offsetParent = getTrueOffsetParent(element, polyfill); + while(offsetParent && (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$dom$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["isTableElement"])(offsetParent) && isStaticPositioned(offsetParent)){ + offsetParent = getTrueOffsetParent(offsetParent, polyfill); + } + if (offsetParent && (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$dom$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["isLastTraversableNode"])(offsetParent) && isStaticPositioned(offsetParent) && !(0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$dom$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["isContainingBlock"])(offsetParent)) { + return win; + } + return offsetParent || (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$dom$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["getContainingBlock"])(element) || win; +} +const getElementRects = async function(data) { + const getOffsetParentFn = this.getOffsetParent || getOffsetParent; + const getDimensionsFn = this.getDimensions; + const floatingDimensions = await getDimensionsFn(data.floating); + return { + reference: getRectRelativeToOffsetParent(data.reference, await getOffsetParentFn(data.floating), data.strategy), + floating: { + x: 0, + y: 0, + width: floatingDimensions.width, + height: floatingDimensions.height + } + }; +}; +function isRTL(element) { + return (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$dom$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["getComputedStyle"])(element).direction === 'rtl'; +} +const platform = { + convertOffsetParentRelativeRectToViewportRelativeRect, + getDocumentElement: __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$dom$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["getDocumentElement"], + getClippingRect, + getOffsetParent, + getElementRects, + getClientRects, + getDimensions, + getScale, + isElement: __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$dom$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["isElement"], + isRTL +}; +function rectsAreEqual(a, b) { + return a.x === b.x && a.y === b.y && a.width === b.width && a.height === b.height; +} +// https://samthor.au/2021/observing-dom/ +function observeMove(element, onMove) { + let io = null; + let timeoutId; + const root = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$dom$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["getDocumentElement"])(element); + function cleanup() { + var _io; + clearTimeout(timeoutId); + (_io = io) == null || _io.disconnect(); + io = null; + } + function refresh(skip, threshold) { + if (skip === void 0) { + skip = false; + } + if (threshold === void 0) { + threshold = 1; + } + cleanup(); + const elementRectForRootMargin = element.getBoundingClientRect(); + const { left, top, width, height } = elementRectForRootMargin; + if (!skip) { + onMove(); + } + if (!width || !height) { + return; + } + const insetTop = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["floor"])(top); + const insetRight = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["floor"])(root.clientWidth - (left + width)); + const insetBottom = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["floor"])(root.clientHeight - (top + height)); + const insetLeft = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["floor"])(left); + const rootMargin = -insetTop + "px " + -insetRight + "px " + -insetBottom + "px " + -insetLeft + "px"; + const options = { + rootMargin, + threshold: (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["max"])(0, (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["min"])(1, threshold)) || 1 + }; + let isFirstUpdate = true; + function handleObserve(entries) { + const ratio = entries[0].intersectionRatio; + if (ratio !== threshold) { + if (!isFirstUpdate) { + return refresh(); + } + if (!ratio) { + // If the reference is clipped, the ratio is 0. Throttle the refresh + // to prevent an infinite loop of updates. + timeoutId = setTimeout(()=>{ + refresh(false, 1e-7); + }, 1000); + } else { + refresh(false, ratio); + } + } + if (ratio === 1 && !rectsAreEqual(elementRectForRootMargin, element.getBoundingClientRect())) { + // It's possible that even though the ratio is reported as 1, the + // element is not actually fully within the IntersectionObserver's root + // area anymore. This can happen under performance constraints. This may + // be a bug in the browser's IntersectionObserver implementation. To + // work around this, we compare the element's bounding rect now with + // what it was at the time we created the IntersectionObserver. If they + // are not equal then the element moved, so we refresh. + refresh(); + } + isFirstUpdate = false; + } + // Older browsers don't support a `document` as the root and will throw an + // error. + try { + io = new IntersectionObserver(handleObserve, { + ...options, + // Handle