1"use strict";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[5084],{7786:(t,e,r)=>{r.d(e,{s:()=>i});var a=r(76458),o=r(24571);let i={async saveMandate(t,e){if(!a.db)throw Error("Firestore æªåå§å");let r=o.Timestamp.now(),i=(0,o.doc)((0,o.rJ)(a.db,"guardianshipMandates")),n={id:i.id,userId:t,answers:e,createdAt:r,updatedAt:r};return await (0,o.setDoc)(i,n),i.id},async updateMandate(t,e){if(!a.db)throw Error("Firestore æªåå§å");let r=(0,o.doc)(a.db,"guardianshipMandates",t),i=o.Timestamp.now();await (0,o.mZ)(r,{answers:e,updatedAt:i})},async getMandate(t){if(!a.db)throw Error("Firestore æªåå§å");let e=(0,o.P)((0,o.rJ)(a.db,"guardianshipMandates"),(0,o._M)("userId","==",t)),r=await (0,o.GG)(e);if(r.empty)return null;let i=r.docs.sort((t,e)=>{let r=t.data();return e.data().updatedAt.toDate().getTime()-r.updatedAt.toDate().getTime()});return{...i[0].data(),id:i[0].id}},async deleteMandate(t){if(!a.db)throw Error("Firestore æªåå§å");let e=(0,o.doc)(a.db,"guardianshipMandates",t);await (0,o.kd)(e)},async hasMandate(t){if(!a.db)throw Error("Firestore æªåå§å");let e=(0,o.P)((0,o.rJ)(a.db,"guardianshipMandates"),(0,o._M)("userId","==",t));return!(await (0,o.GG)(e)).empty}}},8058:(t,e,r)=>{r.d(e,{s:()=>c});var a=r(24571),o=r(76458),i=r(18678),n=r(18654),d=r(44832);let s=()=>{if(!o.db)throw Error("Firestore å°æªåå§å");return o.db},l=t=>t?t instanceof a.Timestamp?t:t?.toDate?a.Timestamp.fromDate(t.toDate()):t?.seconds?a.Timestamp.fromMillis(1e3*t.seconds+(t.nanoseconds||0)/1e6):"string"==typeof t?a.Timestamp.fromDate(new Date(t)):null:null,c={async sendMessage(t,e,r,l,c){let u=s();if(c.length>500)throw Error("è¨æ¯å
§å®¹æå¤ 500 å");let m={senderId:e,senderType:r,senderName:l,content:c.trim(),createdAt:a.Timestamp.now(),readAt:null},p=i.H.parse(m),f=(0,a.rJ)(u,o.CHAT_ROOMS,t,"messages"),w=await (0,a.gS)(f,p);try{await d.M.updateChatRoomLastMessage(t,c,e)}catch(t){(0,n.vV)("æ´æ°è天室æå¾è¨æ¯å¤±æ:",t)}return{id:w.id,...p}},getMessages(t,e,r=100){let d=s(),c=(0,a.rJ)(d,o.CHAT_ROOMS,t,"messages"),u=(0,a.P)(c,(0,a.My)("createdAt","asc"),(0,a.AB)(r));return(0,a.aQ)(u,t=>{try{let r=t.docs.map(t=>{let e,r=((e={...t.data()}).createdAt?e.createdAt=l(e.createdAt)||a.Timestamp.now():e.createdAt=a.Timestamp.now(),e.readAt&&(e.readAt=l(e.readAt)),i.H.parse(e));return{id:t.id,...r}});e(r)}catch(t){(0,n.vV)("è§£æè¨æ¯è³æå¤±æ:",t),e([])}},r=>{(0,n.vV)("ç£è½è¨æ¯å¤±æ:",{code:r?.code,message:r?.message,chatRoomId:t}),e([])})},async markMessagesAsRead(t,e){let r=s(),i=(0,a.rJ)(r,o.CHAT_ROOMS,t,"messages"),n=(0,a.P)(i,(0,a._M)("readAt","==",null),(0,a.My)("createdAt","asc"),(0,a.AB)(100)),l=(await (0,a.GG)(n)).docs.filter(t=>t.data().senderId!==e);if(0===l.length)return void await d.M.markChatRoomAsRead(t,e);let c=(0,a.wP)(r),u=a.Timestamp.now();for(let e=0;e<Math.min(l.length,500);e++){let i=(0,a.doc)(r,o.CHAT_ROOMS,t,"messages",l[e].id);c.update(i,{readAt:u})}await c.commit(),await d.M.markChatRoomAsRead(t,e)}}},12217:(t,e,r)=>{r.d(e,{W:()=>l});var a=r(24571),o=r(76458),i=r(15418),n=r(96774);let d=i.Ik({userId:i.Yj().min(1,"userId ä¸è½çºç©º"),name:i.Yj().min(1,"帳æ¶å稱ä¸è½çºç©º").max(100,"帳æ¶å稱ä¸è½è¶
é 100 åå
"),type:n.Z,bank:i.Yj().min(1,"éè¡å稱ä¸è½çºç©º"),accountNumber:i.Yj().default(""),balance:i.ai(),currency:i.Yj().length(3,"å¹£å¥å¿
é æ¯ 3 ååå
"),category:i.Yj(),notes:i.Yj().default(""),interestRate:i.ai().positive().optional(),dueDate:i.Yj().optional(),creditLimit:i.ai().positive().optional(),isInvestmentAccount:i.zM().optional(),linkedInvestmentAccountId:i.Yj().optional(),createdAt:i.bz(),updatedAt:i.bz().optional()}),s=i.Ik({userId:i.Yj().min(1,"userId ä¸è½çºç©º"),name:i.Yj().min(1,"帳æ¶å稱ä¸è½çºç©º").max(100,"帳æ¶å稱ä¸è½è¶
é 100 åå
"),type:n.Z,bank:i.Yj().optional(),accountNumber:i.Yj().optional(),balance:i.ai(),currency:i.Yj().length(3,"å¹£å¥å¿
é æ¯ 3 ååå
"),category:i.Yj(),notes:i.Yj().default(""),interestRate:i.ai().positive().optional(),dueDate:i.Yj().optional(),creditLimit:i.ai().positive().optional(),isInvestmentAccount:i.zM().optional(),linkedInvestmentAccountId:i.Yj().optional(),createdAt:i.bz(),updatedAt:i.bz().optional()}),l={async addAccount(t,e,r=!1){if(!o.db)throw Error("Firestore å°æªåå§å");if(!t)throw Error("ç¨æ¶ ID æªæä¾");let i=r?s:d,n={...e,bank:r?e.bank||"other":e.bank,accountNumber:r?e.accountNumber||"":e.accountNumber,userId:t,createdAt:a.Timestamp.now()},l=Object.fromEntries(Object.entries(i.parse(n)).filter(([t,e])=>void 0!==e));
1return(await (0,a.gS)((0,a.rJ)(o.db,o.ACCOUNTS),l)).id},async updateAccount(t,e,r){if(!o.db)throw Error("Firestore å°æªåå§å");if(!t)throw Error("ç¨æ¶ ID æªæä¾");let i=(0,a.doc)(o.db,o.ACCOUNTS,e),n=await (0,a.getDoc)(i);if(!n.exists())throw Error("帳æ¶ä¸åå¨");if(n.data().userId!==t)throw Error("ç¡æ¬éä¿®æ¹æ¤å¸³æ¶");let s={...n.data(),...r,updatedAt:a.Timestamp.now()},l=Object.fromEntries(Object.entries(d.parse(s)).filter(([t,e])=>void 0!==e));await (0,a.mZ)(i,l)},async deleteAccount(t,e){if(!o.db)throw Error("Firestore å°æªåå§å");if(!t)throw Error("ç¨æ¶ ID æªæä¾");let r=(0,a.doc)(o.db,o.ACCOUNTS,e),i=await (0,a.getDoc)(r);if(!i.exists())throw Error("帳æ¶ä¸åå¨");if(i.data().userId!==t)throw Error("ç¡æ¬éåªé¤æ¤å¸³æ¶");await (0,a.kd)(r)},async getAllAccounts(t){if(!o.db)throw Error("Firestore å°æªåå§å");if(!t)throw Error("ç¨æ¶ ID æªæä¾");let e=(0,a.P)((0,a.rJ)(o.db,o.ACCOUNTS),(0,a._M)("userId","==",t));return(await (0,a.GG)(e)).docs.map(t=>({id:t.id,...t.data()}))}}},13130:(t,e,r)=>{r.d(e,{m:()=>n});var a=r(76458),o=r(18654),i=r(24571);let n={async saveAdvanceDirective(t,e){try{if(!a.db)throw Error("Firestore æªåå§å");let r=i.Timestamp.now(),o=(0,i.doc)((0,i.rJ)(a.db,"advanceDirectives")),n={id:o.id,userId:t,answers:e,createdAt:r,updatedAt:r};return await (0,i.setDoc)(o,n),o.id}catch(t){throw(0,o.vV)("å²åé ç«é«çæ±ºå®æ¸æç¼çé¯èª¤:",t),t}},async updateAdvanceDirective(t,e){try{if(!a.db)throw Error("Firestore æªåå§å");let r=(0,i.doc)(a.db,"advanceDirectives",t),o=i.Timestamp.now();await (0,i.mZ)(r,{answers:e,updatedAt:o})}catch(t){throw(0,o.vV)("æ´æ°é ç«é«çæ±ºå®æ¸æç¼çé¯èª¤:",t),t}},async getAdvanceDirective(t){try{if(!a.db)throw Error("Firestore æªåå§å");let e=(0,i.P)((0,i.rJ)(a.db,"advanceDirectives"),(0,i._M)("userId","==",t)),r=await (0,i.GG)(e);if(r.empty)return null;let o=r.docs.sort((t,e)=>{let r=t.data();return e.data().updatedAt.toDate().getTime()-r.updatedAt.toDate().getTime()});return{...o[0].data(),id:o[0].id}}catch(t){throw(0,o.vV)("ç²åé ç«é«çæ±ºå®æ¸æç¼çé¯èª¤:",t),t}},async deleteAdvanceDirective(t){try{if(!a.db)throw Error("Firestore æªåå§å");let e=(0,i.doc)(a.db,"advanceDirectives",t);await (0,i.kd)(e)}catch(t){throw(0,o.vV)("åªé¤é ç«é«çæ±ºå®æ¸æç¼çé¯èª¤:",t),t}},async hasAdvanceDirective(t){try{if(!a.db)throw Error("Firestore æªåå§å");let e=(0,i.P)((0,i.rJ)(a.db,"advanceDirectives"),(0,i._M)("userId","==",t));return!(await (0,i.GG)(e)).empty}catch(t){throw(0,o.vV)("檢æ¥é ç«é«çæ±ºå®æ¸æç¼çé¯èª¤:",t),t}}}},18678:(t,e,r)=>{r.d(e,{D:()=>o,H:()=>i});var a=r(15418);let o=a.Ik({userId:a.Yj().min(1,"ç¨æ¶ ID ä¸è½çºç©º"),advisorId:a.Yj().min(1,"é¡§å ID ä¸è½çºç©º"),advisorName:a.Yj().min(1,"é¡§åå稱ä¸è½çºç©º"),advisorAvatar:a.Yj().url("é¡§åé åå¿
é æ¯ææç URL").optional().nullable(),userDisplayName:a.Yj().min(1,"ç¨æ¶é¡¯ç¤ºå稱ä¸è½çºç©º"),userEmail:a.Yj().email("ç¨æ¶ Email æ ¼å¼ç¡æ").optional().nullable(),lastMessage:a.Yj().max(500).optional().nullable(),lastMessageAt:a.bz().optional().nullable(),unreadCountUser:a.ai().int().nonnegative().default(0),unreadCountAdvisor:a.ai().int().nonnegative().default(0),createdAt:a.bz(),updatedAt:a.bz()}),i=a.Ik({senderId:a.Yj().min(1,"ç¼éè
ID ä¸è½çºç©º"),senderType:a.k5(["user","advisor"]),senderName:a.Yj().min(1,"ç¼éè
å稱ä¸è½çºç©º"),content:a.Yj().min(1,"è¨æ¯å
§å®¹ä¸è½çºç©º").max(500,"è¨æ¯å
§å®¹æå¤ 500 å"),createdAt:a.bz(),readAt:a.bz().optional().nullable()})},34018:(t,e,r)=>{r.d(e,{TF:()=>n,iH:()=>o,vk:()=>i});var a=r(24571);function o(t){return t?"string"==typeof t?t:t instanceof a.Timestamp?t.toDate().toISOString():new Date().toISOString():new Date().toISOString()}function i(t){let e=new Date(t+"T00:00:00.000Z");if(isNaN(e.getTime()))throw Error(`ç¡æçæ¥æå串: ${t}`);return a.Timestamp.fromDate(e)}function n(t){let e=new Date(t+"T23:59:59.999Z");if(isNaN(e.getTime()))throw Error(`ç¡æçæ¥æå串: ${t}`);return a.Timestamp.fromDate(e)}},39102:(t,e,r)=>{r.d(e,{G:()=>d});var a=r(71931),o=r(76458),i=r(15418);let n=i.YO(i.Ik({date:i.Yj().regex(/^\d{4}-\d{2}-\d{2}$/,"æ¥ææ ¼å¼éçº YYYY-MM-DD"),times:i.YO(i.Yj())}));async function d(t){if(!t)return[];let e=(0,a.httpsCallable)(function(){if(!o.functions)throw Error("Firebase Functions å°æªåå§å");return o.functions}(),"getAdvisorAvailability"),{data:r}=await e({advisorId:t}),i=r.availability;if(!Array.isArray(i))return[];let d=n.safeParse(i);return d.success?d.data.map(t=>({date:t.date,times:Array.isArray(t.times)?t.times:[]})):[]}},44832:(t,e,r)=>{r.d(e,{M:()=>c});var a=r(24571),o=r(76458),i=r(18678),n=r(18654);let d=()=>
1{if(!o.db)throw Error("Firestore å°æªåå§å");return o.db},s=t=>t?t instanceof a.Timestamp?t:t?.toDate?a.Timestamp.fromDate(t.toDate()):t?.seconds?a.Timestamp.fromMillis(1e3*t.seconds+(t.nanoseconds||0)/1e6):"string"==typeof t?a.Timestamp.fromDate(new Date(t)):null:null,l=t=>{let e={...t};return e.createdAt?e.createdAt=s(e.createdAt)||a.Timestamp.now():e.createdAt=a.Timestamp.now(),e.updatedAt?e.updatedAt=s(e.updatedAt)||a.Timestamp.now():e.updatedAt=a.Timestamp.now(),e.lastMessageAt&&(e.lastMessageAt=s(e.lastMessageAt)),i.D.parse(e)},c={async createChatRoom(t,e,r,s,c,u){let m=d();try{let r=(0,a.P)((0,a.rJ)(m,o.CHAT_ROOMS),(0,a._M)("userId","==",t)),i=(await (0,a.GG)(r)).docs.find(t=>t.data().advisorId===e);if(i){let t=l(i.data());return{id:i.id,...t}}}catch(t){}let p=a.Timestamp.now(),f=i.D.parse({userId:t,advisorId:e,advisorName:r,advisorAvatar:s||null,userDisplayName:c||"ç¨æ¶",userEmail:u||null,lastMessage:null,lastMessageAt:null,unreadCountUser:0,unreadCountAdvisor:0,createdAt:p,updatedAt:p});try{return{id:(await (0,a.gS)((0,a.rJ)(m,o.CHAT_ROOMS),f)).id,...f}}catch(t){throw(0,n.vV)("建ç«è天室失æ:",t),t}},getUserChatRooms(t,e){let r=o.db??null;if(!r){try{e([])}catch(t){(0,n.vV)("åèª¿ç¨æ¶è天室失æï¼db æªåå§åï¼:",t)}return()=>{}}let i=(0,a.P)((0,a.rJ)(r,o.CHAT_ROOMS),(0,a._M)("userId","==",t));return(0,a.aQ)(i,t=>{try{let r=t.docs.map(t=>{let e=l(t.data());return{id:t.id,...e}});r.sort((t,e)=>{let r=t.lastMessageAt,a=e.lastMessageAt;return r||a?r?a?a.toMillis()-r.toMillis():-1:1:e.createdAt.toMillis()-t.createdAt.toMillis()}),e(r)}catch(t){(0,n.vV)("è§£æèå¤©å®¤è³æå¤±æ:",t),e([])}},r=>{(0,n.vV)("ç£è½ç¨æ¶è天室失æ:",{code:r?.code,message:r?.message,userId:t}),e([])})},getAdvisorChatRooms(t,e,r){let i=o.db??null;if(!i){try{r([])}catch(t){(0,n.vV)("å調顧åè天室失æï¼db æªåå§åï¼:",t)}return()=>{}}if(t){let d=(0,a.P)((0,a.rJ)(i,o.CHAT_ROOMS),(0,a._M)("advisorId","==",t));return(0,a.aQ)(d,t=>{try{let e=t.docs.map(t=>{let e=l(t.data());return{id:t.id,...e}});e.sort((t,e)=>{let r=t.lastMessageAt,a=e.lastMessageAt;return r||a?r?a?a.toMillis()-r.toMillis():-1:1:e.createdAt.toMillis()-t.createdAt.toMillis()}),r(e)}catch(t){(0,n.vV)("è§£æèå¤©å®¤è³æå¤±æ:",t),r([])}},a=>{(0,n.vV)("ç£è½é¡§åè天室失æ:",{code:a?.code,message:a?.message,advisorId:t,userId:e}),r([])})}if(e){let d=(0,a.P)((0,a.rJ)(i,o.ADVISORS),(0,a._M)("userId","==",e)),s=[],c=new Map,u=(0,a.aQ)(d,t=>{try{let e=t.docs.map(t=>t.id);if(s.forEach(t=>t()),s=[],c.clear(),0===e.length)return void r([]);e.forEach(t=>{let e=(0,a.P)((0,a.rJ)(i,o.CHAT_ROOMS),(0,a._M)("advisorId","==",t)),d=(0,a.aQ)(e,e=>{try{let a,o=[];c.forEach((e,r)=>{e.advisorId===t&&o.push(r)}),o.forEach(t=>c.delete(t)),e.docs.forEach(t=>{let e=l(t.data());c.set(t.id,{id:t.id,...e})}),(a=Array.from(c.values())).sort((t,e)=>{let r=t.lastMessageAt,a=e.lastMessageAt;return r||a?r?a?a.toMillis()-r.toMillis():-1:1:e.createdAt.toMillis()-t.createdAt.toMillis()}),r(a)}catch(t){(0,n.vV)("è§£æèå¤©å®¤è³æå¤±æ:",t)}},e=>{(0,n.vV)("ç£è½è天室失æ:",{code:e?.code,message:e?.message,advisorId:t})});s.push(d)})}catch(t){(0,n.vV)("èç advisors è®å失æ:",t),r([])}},a=>{(0,n.vV)("ç£è½ advisors 失æ:",{code:a?.code,message:a?.message,userId:e,advisorId:t}),r([])});return()=>{u(),s.forEach(t=>t())}}return r([]),()=>{}},async getChatRoom(t){let e=d(),r=(0,a.doc)(e,o.CHAT_ROOMS,t),i=await (0,a.getDoc)(r);if(!i.exists())return null;try{let t=l(i.data());return{id:i.id,...t}}catch(t){return(0,n.vV)("è§£æèå¤©å®¤è³æå¤±æ:",t),null}},async updateChatRoomLastMessage(t,e,r){let i=d(),n=(0,a.doc)(i,o.CHAT_ROOMS,t),s=await (0,a.getDoc)(n);if(!s.exists())throw Error("è天室ä¸åå¨");let l=s.data(),c=l.userId===r,u={lastMessage:e.substring(0,500),lastMessageAt:a.Timestamp.now(),updatedAt:a.Timestamp.now()};c?u.unreadCountAdvisor=(l.unreadCountAdvisor||0)+1:u.unreadCountUser=(l.unreadCountUser||0)+1,await (0,a.mZ)(n,u)},async markChatRoomAsRead(t,e){let r=d(),i=(0,a.doc)(r,o.CHAT_ROOMS,t),s=await (0,a.getDoc)(i);if(!s.exists())throw Error("è天室ä¸åå¨");let l=s.data().userId===e,c={updatedAt:a.Timestamp.now()};l?c.unreadCountUser=0:c.unreadCountAdvisor=0;try{await (0,a.mZ)(i,c)}catch(t){throw(0,n.vV)("æ¨è¨å·²è®å¤±æ:",t),t}}}},61325:(t,e,r)=>{r.d(e,{b:()=>u});var a=r(76458),o=r(18654),i=r(24571),n=r(15418);let d=n.Ik({name:n.Yj().min(1,"åç人å§åä¸è½çºç©º"),relationship:n.Yj().min(1,"éä¿ä¸è½çºç©º"),distributionRatio:n.ai().min(0,"åé
æ¯ä¾ä¸è½çºè² æ¸").max(100,"åé
æ¯ä¾ä¸è½è¶
é100")}),s=n.Ik({beneficiaries:n.YO(d).optional(),executor:n.Yj().optional(),notes:n.Yj().optional()}).optional(),l=n.k5(["traditional","holographic","notarized","custom"]),c=n.Ik({userId:n.Yj().min(1,"userId ä¸è½çºç©º"),type:l,title:n.Yj().min(1,"éºåæ¨é¡ä¸è½çºç©º"),content:n.Yj().min(100,"éºåå
§å®¹è³å°éè¦100å"),metadata:s,createdAt:n.bz(),updatedAt:n.bz()});n.Ik({type:l,userInfo:n.Ik({name:n.Yj().min(1,"å§åä¸è½çºç©º"),idNumber:n.Yj().optional(),address:n.Yj().optional()}
1),beneficiaries:n.YO(n.Ik({name:n.Yj().min(1),relationship:n.Yj(),distributionRatio:n.ai().min(0).max(100)})).optional(),executor:n.Yj().optional(),specialInstructions:n.Yj().optional()}),n.Ik({title:n.Yj().min(1,"éºåæ¨é¡ä¸è½çºç©º").optional(),content:n.Yj().min(100,"éºåå
§å®¹è³å°éè¦100å").optional(),metadata:s}).refine(t=>void 0!==t.title||void 0!==t.content||void 0!==t.metadata,{message:"è³å°éè¦æä¾ä¸åè¦æ´æ°çæ¬ä½"});let u={async saveWill(t,e){try{if(!a.db)throw Error("Firestore æªåå§å");let r=i.Timestamp.now(),o=(0,i.doc)((0,i.rJ)(a.db,"wills")),n={id:o.id,userId:t,type:e.type,title:e.title,content:e.content,createdAt:r,updatedAt:r};return null!=e.metadata&&Object.keys(e.metadata).length>0&&(n.metadata=e.metadata),c.parse({userId:t,type:n.type,title:n.title,content:n.content,metadata:n.metadata,createdAt:r,updatedAt:r}),await (0,i.setDoc)(o,n),o.id}catch(t){throw(0,o.vV)("å²åéºåæç¼çé¯èª¤:",t),t}},async updateWill(t,e){try{if(!a.db)throw Error("Firestore æªåå§å");let r=(0,i.doc)(a.db,"wills",t),o=i.Timestamp.now();if(e.title||e.content||e.metadata){let t=await (0,i.getDoc)(r);if(!t.exists())throw Error("éºåä¸åå¨");let a=t.data();c.partial().parse({title:e.title??a.title,content:e.content??a.content,metadata:e.metadata??a.metadata})}await (0,i.mZ)(r,{...e,updatedAt:o})}catch(t){throw(0,o.vV)("æ´æ°éºåæç¼çé¯èª¤:",t),t}},async getUserWills(t){try{if(!a.db)throw Error("Firestore æªåå§å");let e=(0,i.P)((0,i.rJ)(a.db,"wills"),(0,i._M)("userId","==",t)),r=await (0,i.GG)(e);if(r.empty)return[];return r.docs.map(t=>({...t.data(),id:t.id})).sort((t,e)=>e.updatedAt.toDate().getTime()-t.updatedAt.toDate().getTime())}catch(t){throw(0,o.vV)("ç²åéºåå表æç¼çé¯èª¤:",t),t}},async getWill(t){try{if(!a.db)throw Error("Firestore æªåå§å");let e=(0,i.doc)(a.db,"wills",t),r=await (0,i.getDoc)(e);if(!r.exists())return null;return{...r.data(),id:r.id}}catch(t){throw(0,o.vV)("ç²åéºåæç¼çé¯èª¤:",t),t}},async deleteWill(t){try{if(!a.db)throw Error("Firestore æªåå§å");let e=(0,i.doc)(a.db,"wills",t);await (0,i.kd)(e)}catch(t){throw(0,o.vV)("åªé¤éºåæç¼çé¯èª¤:",t),t}},async hasWill(t){try{if(!a.db)throw Error("Firestore æªåå§å");let e=(0,i.P)((0,i.rJ)(a.db,"wills"),(0,i._M)("userId","==",t));return!(await (0,i.GG)(e)).empty}catch(t){throw(0,o.vV)("檢æ¥éºåæç¼çé¯èª¤:",t),t}}}},73790:(t,e,r)=>{r.d(e,{N:()=>i});var a=r(24571),o=r(76458);let i={async commitMonthlyBalanceOps(t,e){if(!o.db)throw Error("Firestore å°æªåå§å");let r=o.db;if(!t)throw Error("ç¨æ¶ ID æªæä¾");if(!e.length)return;let i=t=>`${t.accountId}__${t.month}`,n=Array.from(new Set(e.map(i))),d=new Map;for(let{key:e,snapshot:o}of(await Promise.all(n.map(async e=>{let[o,i]=e.split("__"),n=(0,a.P)((0,a.rJ)(r,"account_monthly_balances"),(0,a._M)("userId","==",t),(0,a._M)("accountId","==",o),(0,a._M)("month","==",i));return{key:e,snapshot:await (0,a.GG)(n)}})))){if(o.empty)continue;let t=o.docs[0];d.set(e,{id:t.id,data:t.data()})}let s=(0,a.wP)(r),l=a.Timestamp.now();for(let o of e){let e=i(o),n=d.get(e);if("delete"===o.mode){if(!n)continue;if(n.data?.userId!==t)throw Error("æ¬éä¸è¶³ï¼ç¡æ³åªé¤æ¤æçµé¤é¡è¨é");s.delete((0,a.doc)(r,"account_monthly_balances",n.id)),d.delete(e);continue}if(n){let i=(0,a.doc)(r,"account_monthly_balances",n.id);if(n.data?.userId!==t)throw Error("æ¬éä¸è¶³ï¼ç¡æ³ä¿®æ¹æ¤æçµé¤é¡è¨é");let c=Number(n.data?.balance||0),u="increment"===o.mode?c+o.balance:o.balance,m={balance:u,updatedAt:l};"number"==typeof o.originalIncome&&(m.originalIncome=o.originalIncome),o.distributions&&(m.distributions="replace"===o.distributionsMode?o.distributions.filter(t=>t.amount>0):function(t,e){let r=new Map;for(let e of t||[])e&&"number"==typeof e.amount&&r.set(e.targetAccountId,(r.get(e.targetAccountId)||0)+e.amount);for(let t of e)t&&"number"==typeof t.amount&&r.set(t.targetAccountId,(r.get(t.targetAccountId)||0)+t.amount);return Array.from(r.entries()).filter(([,t])=>t>0).map(([t,e])=>({targetAccountId:t,amount:Math.round(100*e)/100}))}(n.data?.distributions,o.distributions)),s.update(i,m),d.set(e,{id:n.id,data:{...n.data,balance:u,...m.distributions?{distributions:m.distributions}:{}}});continue}let c=(0,a.doc)((0,a.rJ)(r,"account_monthly_balances")),u={userId:t,accountId:o.accountId,month:o.month,balance:o.balance,createdAt:l,updatedAt:l};"number"==typeof o.originalIncome&&(u.originalIncome=o.originalIncome),o.distributions&&(u.distributions=o.distributions.filter(t=>t.amount>0)),s.set(c,u),d.set(e,{id:c.id,data:u})}await s.commit()},async addOrUpdateMonthlyBalance(t,e,r=!1){if(!o.db)throw Error("Firestore å°æªåå§å");if(!t)throw Error("ç¨æ¶ ID æªæä¾");let i=(0,a.P)((0,a.rJ)(o.db,"account_monthly_balances"),(0,a._M)("userId","==",t),(0,a._M)("accountId","==",e.accountId),(0,a._M)("month","==",e.month)),n=await (0,a.GG)(i);if(!n.empty){let i=(0,a.doc)(o.db,"account_monthly_balances",n.docs[0].id);if(n.docs[0].data().userId!==t)throw Error("æ¬éä¸è¶³ï¼ç¡æ³ä¿®æ¹æ¤æçµé¤é¡è¨é");if(r){let t=n.docs[0].data().balance||0;await (0,a.mZ)(i,{balance:t+e.balance,updatedAt:a.Timestamp.now()})}else{let t={balance:e.balance,updatedAt:a.Timestamp.now()};"number"==typeof e.originalIncome&&(t.originalIncome=e.originalIncome),await (0,a.mZ)(i,t)}return i.id}return(await (0,a.gS)((0,a.rJ)(o.db,"account_monthly_balances"),{...e,userId:t,createdAt:a.Timestamp.now(),updatedAt:a.Timestamp.now()})).id},async getMonthlyBalances(t,e){if(!o.db)throw Error("Firestore å°æªåå§å");if(!t)throw Error("ç¨æ¶ ID æªæä¾");let r=(0,a.P)((0,a.rJ)(o.db,"account_monthly_balances"),(0,a._M)("userId","==",t));return e&&(r=(0,a.P)(r,(0,a._M)("accountId","==",e))),(await (0,a.GG)(r)).docs.map(t=>({id:t.id,...t.data()}))},async deleteMonthlyBalance(t){if(!o.db)throw Error("Firestore å°æªåå§å");await (0,a.kd)((0,a.doc)(o.db,"account_monthly_balances",t))}}},77617:(t,e,r)=>{r.d(e,{Ie:()=>d,PW:()=>n});var a=r(15418);let o=a.k5(["feature","improvement","bug"]),i=a.k5(["pending","planned","in_progress","done","rejected"]),n=a.Ik({title:a.Yj().min(1,"æ¨é¡ä¸è½çºç©º").max(200,"æ¨é¡éé·"),description:a.Yj().min(1,"æè¿°ä¸è½çºç©º").max(2e3,"æè¿°éé·"),author:a.Yj().min(1,"ä½è
ä¸è½çºç©º"),authorId:a.Yj().min(1,"authorId ä¸è½çºç©º"),type:o,status:i.default("pending"),tags:a.YO(a.Yj().min(1).max(24)).max(10).default([]),isAnonymous:a.zM().default(!1),authorPhotoURL:a.Yj().url().optional()}),d=a.Ik({title:a.Yj().min(1,"æ¨é¡ä¸è½çºç©º").max(200,"æ¨é¡éé·").optional(),description:a.Yj().min(1,"æè¿°ä¸è½çºç©º").max(2e3,"æè¿°éé·").optional(),type:o.optional()});n.extend({votes:a.ai().int().nonnegative().default(0),votedUserIds:a.YO(a.Yj()).default([]),createdAt:a.bz(),updatedAt:a.bz().optional()}),a.Ik({title:a.Yj().min(1,"æ¨é¡ä¸è½çºç©º"),description:a.Yj().min(1,"æè¿°ä¸è½çºç©º"),author:a.Yj().min(1,"ä½è
ä¸è½çºç©º"),date:a.Yj().optional(),votes:a.ai().int().nonnegative().default(0),type:o,status:a.Yj().optional(),syncedToNotion:a.zM().default(!1),notionProjectId:a.Yj().nullable().optional(),syncedAt:a.Yj().nullable().optional(),createdAt:a.bz(),lastUpdated:a.bz().optional()})},85084:(t,e,r)=>{r.d(e,{accountMonthlyBalanceOperations:()=>h.N,accountOperations:()=>u.W,mK:()=>y.m,advisorOperations:()=>o.n,MR:()=>E,c$:()=>l,yZ:()=>i.y,GB:()=>c.G,Cn:()=>a.functions,sE:()=>v.s,incomeDistributionRuleOperations:()=>A,monthlyUnallocatedOperations:()=>b,suggestionOperations:()=>w});var a=r(76458),o=r(775),i=r(45762),n=r(24571),d=r(4963);let s=()=>
1{if(!a.db)throw Error("Firestore å°æªåå§å");return a.db},l={async addConsent(t){let e=s(),r=d.NC.parse(t);return{id:(await (0,n.gS)((0,n.rJ)(e,a.BOOKING_CONSENTS),r)).id,...r}},async getConsent(t){let e=s(),r=(0,n.doc)(e,a.BOOKING_CONSENTS,t),o=await (0,n.getDoc)(r);return o.exists()?{id:o.id,...d.NC.parse(o.data())}:null}};var c=r(39102);r(34018);var u=r(12217),m=r(15418),p=r(96774);m.Ik({userId:m.Yj().min(1,"userId ä¸è½çºç©º"),type:p.Z,amount:m.ai().positive("éé¡å¿
é å¤§æ¼ 0"),category:m.Yj().min(1,"åé¡ä¸è½çºç©º"),date:m.KC([m.Yj().regex(/^\d{4}-\d{2}-\d{2}$/,"æ¥ææ ¼å¼å¿
é çº YYYY-MM-DD"),m.bz()]),accountId:m.Yj().min(1,"å¸³æ¶ ID ä¸è½çºç©º"),description:m.Yj().optional(),createdAt:m.bz(),updatedAt:m.bz()}),r(86422),r(94277);var f=r(77617);let w={async getSuggestionsOrdered(t,e="all",r=20,o){if(!a.db)throw Error("Firestore å°æªåå§å");let i=(0,n.rJ)(a.db,a.SUGGESTIONS),d="time"===t?"createdAt":"votes",s="all"===e?i:"pending"===e?(0,n.P)(i,(0,n._M)("status","in",["pending","in-review"])):"done"===e?(0,n.P)(i,(0,n._M)("status","in",["done","implemented"])):(0,n.P)(i,(0,n._M)("status","==",e)),l=o?(0,n.P)(s,(0,n.My)(d,"desc"),(0,n.AB)(r),(0,n.HM)(o)):(0,n.P)(s,(0,n.My)(d,"desc"),(0,n.AB)(r)),c=await (0,n.GG)(l);return{suggestions:c.docs.map(t=>{var e,r;let a,o,i,d,s,l;return e=t.id,a=(r=t.data()).createdAt,o=r.updatedAt,i=r.authorPhotoURL,d=r.status,s=r.tags,l=r.isAnonymous,{id:e,title:String(r.title??""),description:String(r.description??""),author:String(r.author??""),authorId:String(r.authorId??""),type:r.type||"feature",status:"pending"===d||"planned"===d||"in_progress"===d||"done"===d||"rejected"===d?d:"in-review"===d?"pending":"implemented"===d?"done":"pending",tags:Array.isArray(s)?s.map(t=>String(t)).filter(t=>t.trim().length>0):[],isAnonymous:!0===l,authorPhotoURL:"string"==typeof i?i:void 0,votes:Number(r.votes)||0,votedUserIds:Array.isArray(r.votedUserIds)?r.votedUserIds:[],createdAt:a instanceof n.Timestamp?a.toDate().toISOString():a,updatedAt:o instanceof n.Timestamp?o.toDate().toISOString():o}}),next:c.docs[c.docs.length-1]??null}},async addWishpoolSuggestion(t){if(!a.db)throw Error("Firestore å°æªåå§å");let e=f.PW.parse(t),r=n.Timestamp.now(),o=(0,n.P)((0,n.rJ)(a.db,a.SUGGESTIONS),(0,n._M)("authorId","==",e.authorId),(0,n.My)("createdAt","desc"),(0,n.AB)(1)),i=await (0,n.GG)(o),d=i.docs[0]?.data()?.createdAt,s=d instanceof n.Timestamp?d.toMillis():"string"==typeof d?new Date(d).getTime():NaN,l=r.toMillis();if(!Number.isNaN(s)&&l-s<3e5)throw Error("ç¼æéæ¼é »ç¹ï¼è«ç¨å¾å試");let c=Object.fromEntries(Object.entries({...e,votes:0,votedUserIds:[],createdAt:r,updatedAt:r}).filter(([,t])=>void 0!==t));return(await (0,n.gS)((0,n.rJ)(a.db,a.SUGGESTIONS),c)).id},async toggleVote(t,e){if(!a.db)throw Error("Firestore å°æªåå§å");let r=(0,n.doc)(a.db,a.SUGGESTIONS,t),o=await (0,n.getDoc)(r);if(!o.exists())throw Error("建è°ä¸åå¨");let i=o.data();(Array.isArray(i.votedUserIds)?i.votedUserIds:[]).includes(e)?await (0,n.mZ)(r,{votedUserIds:(0,n.C3)(e),votes:(0,n.GV)(-1),updatedAt:n.Timestamp.now()}):await (0,n.mZ)(r,{votedUserIds:(0,n.hq)(e),votes:(0,n.GV)(1),updatedAt:n.Timestamp.now()})},async deleteSuggestion(t){if(!a.db)throw Error("Firestore å°æªåå§å");await (0,n.kd)((0,n.doc)(a.db,a.SUGGESTIONS,t))},async updateWishpoolSuggestion(t,e){if(!a.db)throw Error("Firestore å°æªåå§å");let r=Object.fromEntries(Object.entries({...f.Ie.parse(e),updatedAt:n.Timestamp.now()}).filter(([,t])=>void 0!==t));await (0,n.mZ)((0,n.doc)(a.db,a.SUGGESTIONS,t),r)},async addSuggestion(t){if(!a.db)throw Error("Firestore å°æªåå§å");return(await (0,n.gS)((0,n.rJ)(a.db,a.SUGGESTIONS),{...t,createdAt:n.Timestamp.now(),syncedToNotion:!1,notionProjectId:null})).id},async getAllSuggestions(){if(!a.db)throw Error("Firestore å°æªåå§å");return(await (0,n.GG)((0,n.rJ)(a.db,a.SUGGESTIONS))).docs.map(t=>({id:t.id,...t.data()}))},async updateSuggestionStatus(t,e){if(!a.db)throw Error("Firestore å°æªåå§å");await (0,n.mZ)((0,n.doc)(a.db,a.SUGGESTIONS,t),{status:e,lastUpdated:n.Timestamp.now()})},async updateSuggestion(t,e){if(!a.db)throw Error("Firestore å°æªåå§å");await (0,n.mZ)((0,n.doc)(a.db,a.SUGGESTIONS,t),{...e,lastUpdated:n.Timestamp.now()})},async getUnprocessedSuggestions(){if(!a.db)throw Error("Firestore å°æªåå§å");return(await (0,n.GG)((0,n.rJ)(a.db,a.SUGGESTIONS))).docs.map(t=>({id:t.id,...t.data()})).filter(t=>!t.syncedToNotion).sort((t,e)=>(e.votes||0)-(t.votes||0))},async getSyncStatus(t){if(!a.db)throw Error("Firestore å°æªåå§å");let e=(await (0,n.GG)((0,n.rJ)(a.db,a.SUGGESTIONS))).docs.map(t=>({id:t.id,...t.data()})).find(e=>e.id===t);return e?{isSynced:e.syncedToNotion??!1,notionProjectId:e.notionProjectId??null,syncedAt:e.syncedAt??null,status:e.status??""}:null}};var h=r(73790);let b={async addOrUpdateMonthlyUnallocated(t,e){if(!a.db)throw Error("Firestore å°æªåå§å");if(!t)throw Error("ç¨æ¶ ID æªæä¾");let r=(0,n.P)((0,n.rJ)(a.db,"monthly_unallocated"),(0,n._M)("userId","==",t),(0,n._M)("month","==",e.month)),o=await (0,n.GG)(r);if(!o.empty){let r=(0,n.doc)(a.db,"monthly_unallocated",o.docs[0].id);if(o.docs[0].data().userId!==t)throw Error("æ¬éä¸è¶³ï¼ç¡æ³ä¿®æ¹æ¤æªåé
éé¡è¨é");return await (0,n.mZ)(r,{amount:e.amount,updatedAt:n.Timestamp.now()}),r.id}return(await (0,n.gS)((0,n.rJ)(a.db,"monthly_unallocated"),{...e,userId:t,createdAt:n.Timestamp.now(),updatedAt:n.Timestamp.now()})).id},async getMonthlyUnallocated(t,e){if(!a.db)throw Error("Firestore å°æªåå§å");if(!t)throw Error("ç¨æ¶ ID æªæä¾");let r=(0,n.P)((0,n.rJ)(a.db,"monthly_unallocated"),(0,n._M)("userId","==",t),(0,n._M)("month","==",e)),o=await (0,n.GG)(r);
1return o.empty?null:{id:o.docs[0].id,...o.docs[0].data()}},async deleteMonthlyUnallocated(t){if(!a.db)throw Error("Firestore å°æªåå§å");await (0,n.kd)((0,n.doc)(a.db,"monthly_unallocated",t))}},g="income_distribution_rules",A={async getRulesDocForSourceAccount(t,e){if(!a.db)throw Error("Firestore å°æªåå§å");if(!t||!e)return null;let r=(0,n.P)((0,n.rJ)(a.db,g),(0,n._M)("userId","==",t),(0,n._M)("sourceAccountId","==",e)),o=await (0,n.GG)(r);if(o.empty)return null;let i=o.docs[0];return{docId:i.id,...i.data()}},async getAllSourceAccountIdsWithRules(t){if(!a.db)throw Error("Firestore å°æªåå§å");if(!t)return[];let e=(0,n.P)((0,n.rJ)(a.db,g),(0,n._M)("userId","==",t)),r=await (0,n.GG)(e);if(r.empty)return[];let o=new Set;return r.docs.forEach(t=>{let e=t.data();e.sourceAccountId&&o.add(e.sourceAccountId)}),Array.from(o)},async saveRulesForSourceAccount(t,e,r){if(!a.db)throw Error("Firestore å°æªåå§å");if(!t||!e)throw Error("User ID and Source Account ID are required.");let o=await this.getRulesDocForSourceAccount(t,e);if(o){let t=(0,n.doc)(a.db,g,o.docId);await (0,n.mZ)(t,{rules:r})}else{let o=(0,n.doc)((0,n.rJ)(a.db,g));await (0,n.setDoc)(o,{userId:t,sourceAccountId:e,rules:r})}},async deleteRulesForSourceAccount(t,e){if(!a.db)throw Error("Firestore å°æªåå§å");if(!t||!e)return;let r=await this.getRulesDocForSourceAccount(t,e);if(r){let t=(0,n.doc)(a.db,g,r.docId);await (0,n.kd)(t)}},calculateRemainingPercentage:t=>Math.max(0,100-t.filter(t=>"percentage"===t.type).reduce((t,e)=>
1t+e.value,0)),validateRules(t){let e=[],r=t.map(t=>t.targetAccountId),a=r.filter((t,e)=>r.indexOf(t)!==e);a.length>0&&e.push(`ç¼ç¾éè¤çç®æ¨å¸³æ¶ï¼${a.join(", ")}`);let o=t.filter(t=>"percentage"===t.type).reduce((t,e)=>t+e.value,0);return o>100&&e.push(`總åé
æ¯ä¾ (${o}%) è¶
é 100%`),t.forEach((t,r)=>{"percentage"===t.type&&(t.value<=0||t.value>100)&&e.push(`è¦å ${r+1}ï¼ç¾åæ¯å¿
é å¨ 1-100 ä¹é`),"fixed"===t.type&&t.value<=0&&e.push(`è¦å ${r+1}ï¼åºå®éé¡å¿
é å¤§æ¼ 0`)}),{isValid:0===e.length,errors:e}},autoAdjustRuleLimits(t){if(100>=t.filter(t=>"percentage"===t.type).reduce((t,e)=>t+e.value,0))return t;let e=[...t].sort((t,e)=>t.priority-e.priority),r=100,a=[];for(let t of e)if("percentage"===t.type){let e=Math.min(t.value,r);a.push({...t,value:e,maxPercentage:e}),r-=e}else a.push(t);return a}};r(3379);var y=r(13130),v=r(7786);r(61325);var I=r(18654),M=r(98553);let E={async saveBeneficiaries(t,e){try{if(!a.db)throw Error("Firestore æªåå§å");let{list:r}=(0,M.o8)(e),o=n.Timestamp.now(),i=(0,n.doc)(a.db,"beneficiaries",t),d=M.Yx.parse({userId:t,beneficiaries:r,createdAt:o,updatedAt:o,createdAt:o,updatedAt:o});await (0,n.setDoc)(i,d),(0,I.fH)("åç人å表已å²å:",{userId:t,count:r.length})}catch(t){throw(0,I.vV)("å²ååç人å表æç¼çé¯èª¤:",t),t}},async getBeneficiaries(t){try{if(!a.db)throw Error("Firestore æªåå§å");let e=(0,n.doc)(a.db,"beneficiaries",t),r=await (0,n.getDoc)(e);if(!r.exists())return null;let o=r.data(),{list:i,changed:d}=(0,M.o8)(o.beneficiaries||[]);return d&&await this.updateBeneficiaries(t,i),i}catch(t){throw(0,I.vV)("ç²ååç人å表æç¼çé¯èª¤:",t),t}},async updateBeneficiaries(t,e){try{if(!a.db)throw Error("Firestore æªåå§å");let{list:r}=(0,M.o8)(e),o=(0,n.doc)(a.db,"beneficiaries",t),i=n.Timestamp.now(),d=M.Yx.parse({userId:t,beneficiaries:r,createdAt:i,updatedAt:i});await (0,n.setDoc)(o,{...d,updatedAt:i},{merge:!0}),(0,I.fH)("åç人åè¡¨å·²æ´æ°:",{userId:t,count:r.length})}catch(t){throw(0,I.vV)("æ´æ°åç人å表æç¼çé¯èª¤:",t),t}}};r(44832),r(8058)},86422:(t,e,r)=>{r.d(e,{Y:()=>i});var a=r(24571),o=r(76458);let i={async addGoal(t,e){if(!o.db)throw Error("Firestore å°æªåå§å");return(await (0,a.gS)((0,a.rJ)(o.db,o.GOALS),{...t,userId:e,createdAt:a.Timestamp.now()})).id},async updateGoal(t,e){if(!o.db)throw Error("Firestore å°æªåå§å");let r=(0,a.doc)(o.db,o.GOALS,t);await (0,a.mZ)(r,{...e,updatedAt:a.Timestamp.now()})},async deleteGoal(t){if(!o.db)throw Error("Firestore å°æªåå§å");await (0,a.kd)((0,a.doc)(o.db,o.GOALS,t))},async getUserGoals(t){if(!o.db)throw Error("Firestore å°æªåå§å");let e=(0,a.P)((0,a.rJ)(o.db,o.GOALS),(0,a._M)("userId","==",t),(0,a.My)("createdAt","desc"));return(await (0,a.GG)(e)).docs.map(t=>({id:t.id,...t.data()}))}}},93750:(t,e,r)=>{r.d(e,{Gt:()=>d,S9:()=>n});var a=r(15418);let o=a.k5(["å®¶æä¿¡è¨","ç¹å®ç®çä¿¡è¨","èªçä¿¡è¨","ä»çä¿¡è¨","å
¬çä¿¡è¨"]),i=a.k5(["active","pending","expired"]),n=a.Ik({name:a.Yj().min(1,"ä¿¡è¨å稱ä¸è½çºç©º"),type:o,description:a.Yj().optional(),settlor:a.Yj().optional(),trustee:a.Yj().optional(),supervisor:a.Yj().optional(),beneficiaries:a.YO(a.Yj()).default([]),assets:a.Yj().default(""),value:a.KC([a.ai(),a.Yj()]).transform(t=>"number"==typeof t?t:parseFloat(String(t).replace(/[^0-9.-]/g,""))||0),status:i.default("active"),accountId:a.Yj().optional(),otherTerms:a.Yj().optional()}),d=n.omit({value:!0}).extend({id:a.Yj().optional(),userId:a.Yj().min(1),value:a.KC([a.ai(),a.Yj()]).transform(t=>"number"==typeof t?t:parseFloat(String(t).replace(/[^0-9.-]/g,""))||0),createdAt:a.L5().optional(),updatedAt:a.L5().optional()})},94277:(t,e,r)=>{r.d(e,{IG:()=>l,Zg:()=>c,a8:()=>m,qx:()=>u});var a=r(24571),o=r(76458),i=r(93750),n=r(19548);let d=o.TRUSTS;function s(t){let e={...t};for(let t of Object.keys(e))void 0===e[t]&&delete e[t];return e}async function l(t){if(!o.db)return n.Cp(Error("db is null"),{level:"error",extra:{message:"Firestore å°æªåå§å",context:"listTrusts"},tags:{source:"listTrusts"}}),[];try{let e=(0,a.P)((0,a.rJ)(o.db,d),(0,a._M)("userId","==",t)),r=await (0,a.GG)(e),n=[];
1for(let t of r.docs){let e=t.data(),r=i.Gt.safeParse({id:t.id,...e});r.success&&n.push({...r.data,id:t.id})}return n.sort((t,e)=>{let r=null!=t.createdAt?"string"==typeof t.createdAt?new Date(t.createdAt).getTime():t.createdAt?.toMillis?.()??0:0;return(null!=e.createdAt?"string"==typeof e.createdAt?new Date(e.createdAt).getTime():e.createdAt?.toMillis?.()??0:0)-r}),n}catch(e){return n.Cp(e instanceof Error?e:Error(String(e)),{level:"error",extra:{message:"è®åä¿¡è¨å表失æ",userId:t,context:"listTrusts"},tags:{source:"listTrusts"}}),[]}}async function c(t,e){if(!o.db){let t=Error("Firestore å°æªåå§å");throw n.Cp(t,{level:"error",extra:{message:"Firestore å°æªåå§å",context:"createTrust"},tags:{source:"createTrust"}}),t}let r=i.S9.safeParse(e);if(!r.success)throw Error(r.error.issues.map(t=>t.message).join("; "));let l=s({...r.data,userId:t,beneficiaries:r.data.beneficiaries??[],assets:r.data.assets??"",status:r.data.status??"active",createdAt:(0,a.serverTimestamp)(),updatedAt:(0,a.serverTimestamp)()});return(await (0,a.gS)((0,a.rJ)(o.db,d),l)).id}async function u(t,e){if(!o.db){let t=Error("Firestore å°æªåå§å");throw n.Cp(t,{level:"error",extra:{message:"Firestore å°æªåå§å",context:"updateTrust"},tags:{source:"updateTrust"}}),t}let r=(0,a.doc)(o.db,d,t),i=s({...e,updatedAt:(0,a.serverTimestamp)()});await (0,a.mZ)(r,i)}async function m(t){if(!o.db){let t=Error("Firestore å°æªåå§å");throw n.Cp(t,{level:"error",extra:{message:"Firestore å°æªåå§å",context:"deleteTrust"},tags:{source:"deleteTrust"}}),t}await (0,a.kd)((0,a.doc)(o.db,d,t))}},96774:(t,e,r)=>{r.d(e,{Z:()=>a});let a=r(15418).k5(["income","expense"])},98553:(t,e,r)=>{r.d(e,{Yx:()=>s,o8:()=>l});var a=r(15418);let o=a.k5(["spouse","child","grandchild","parent","grandparent","sibling","legal","other"]),i=a.Ik({gender:a.k5(["male","female","unknown"]).optional(),parentIds:a.YO(a.Yj()).max(2).optional(),spouseId:a.Yj().nullable().optional(),generation:a.ai().int().optional(),chartOnly:a.zM().optional()}).optional(),n=a.Ik({id:a.Yj().min(1).optional(),name:a.Yj().min(1,"å§åä¸è½çºç©º"),type:o,relationship:a.Yj().optional(),distributionRatio:a.ai().min(0,"åé
æ¯ä¾ä¸è½çºè² æ¸").max(100,"åé
æ¯ä¾ä¸è½è¶
é 100%"),notes:a.Yj().optional(),pedigree:i}),d=a.YO(n).refine(t=>100>=t.reduce((t,e)=>t+e.distributionRatio,0),{message:"總åé
æ¯ä¾ä¸è½è¶
é 100%"}),s=a.Ik({userId:a.Yj().min(1,"userId ä¸è½çºç©º"),beneficiaries:d,createdAt:a.bz(),updatedAt:a.bz()});function l(t){let e=!1;return{list:t.map((t,r)=>{if(t.id&&t.id.trim())return t;e=!0;let a="u">typeof crypto&&"randomUUID"in crypto?crypto.randomUUID():`legacy-${r}-${Date.now()}`;return{...t,id:a}}),changed:e}}}}]);
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.