dsh-metaphysics 0.61.2 → 0.62.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (61) hide show
  1. package/CHANGELOG.md +74 -1
  2. package/README.md +3 -3
  3. package/client.almanac.js +74 -69
  4. package/client.bazi.js +129 -124
  5. package/client.chenggu.js +75 -70
  6. package/client.convert.js +66 -61
  7. package/client.daliuren.js +129 -124
  8. package/client.fengshui.js +57 -52
  9. package/client.hepan.js +128 -123
  10. package/client.js +2 -2
  11. package/client.liuyao.js +127 -122
  12. package/client.mbti.js +66 -61
  13. package/client.name.js +73 -68
  14. package/client.numerology.js +72 -67
  15. package/client.qimen.js +125 -120
  16. package/client.star.js +72 -67
  17. package/client.tarot.js +123 -118
  18. package/client.trend.js +119 -114
  19. package/client.xiaoliuren.js +84 -79
  20. package/client.zeri.js +66 -61
  21. package/client.ziwei.js +129 -124
  22. package/engine/bazi-words.js +3 -0
  23. package/engine/bazi.js +29 -12
  24. package/engine/calendar.js +22 -1
  25. package/engine/chenggu.js +20 -6
  26. package/engine/convert.js +18 -9
  27. package/engine/daliuren.js +87 -18
  28. package/engine/datetime.js +73 -0
  29. package/engine/diff.js +1 -1
  30. package/engine/dst.js +0 -7
  31. package/engine/fengshui.js +19 -3
  32. package/engine/fingerprint.js +2 -1
  33. package/engine/followup.js +33 -3
  34. package/engine/geo.js +58 -12
  35. package/engine/handle.js +53 -1
  36. package/engine/index.js +135 -66
  37. package/engine/interpret-knowledge.js +3 -3
  38. package/engine/liuyao.js +27 -4
  39. package/engine/lunar.js +0 -7
  40. package/engine/mbti.js +1 -0
  41. package/engine/meihua.js +27 -16
  42. package/engine/name.js +15 -6
  43. package/engine/numerology.js +4 -3
  44. package/engine/qimen-interpret.js +28 -3
  45. package/engine/qimen-prompt.js +23 -17
  46. package/engine/qimen.js +32 -13
  47. package/engine/rectify.js +47 -6
  48. package/engine/star.js +5 -4
  49. package/engine/tarot.js +24 -6
  50. package/engine/tiaohou.js +17 -10
  51. package/engine/trend.js +14 -2
  52. package/engine/validate.js +30 -0
  53. package/engine/xiaoliuren.js +28 -7
  54. package/engine/yingqi.js +4 -9
  55. package/engine/zeri.js +19 -21
  56. package/engine/ziwei-hepan.js +3 -1
  57. package/engine/ziwei-words.js +2 -1
  58. package/engine/ziwei.js +15 -10
  59. package/index.js +99 -10
  60. package/package.json +1 -1
  61. package//345/221/275/347/220/206/346/216/222/347/233/230.html +11787 -11141
package/client.js CHANGED
@@ -1,4 +1,4 @@
1
- window.__ModuleLoader__.load({id:"dsh-metaphysics",version:"0.61.2",factory(Fa){const ya=(function(){try{return Fa("react")}catch{return globalThis.React}})();if(!ya)return{inject:[],apply(){}};const p=ya.createElement,Mt={bazi:"client.bazi.js",ziwei:"client.ziwei.js",hepan:"client.hepan.js",trend:"client.trend.js",name:"client.name.js",fengshui:"client.fengshui.js",liuyao:"client.liuyao.js",meihua:"client.liuyao.js",qimen:"client.qimen.js",daliuren:"client.daliuren.js",tarot:"client.tarot.js",almanac:"client.almanac.js",convert:"client.convert.js",zeri:"client.zeri.js",chenggu:"client.chenggu.js",xiaoliuren:"client.xiaoliuren.js",star:"client.star.js",numerology:"client.numerology.js",mbti:"client.mbti.js"},Nt=[{key:"general",label:"综合",dim:null,focus:""},{key:"wealth",label:"财运",dim:"work",focus:"钱财进出的落点主要看「工作与职业选择」与「事业发展」这两条。"},{key:"career",label:"事业",dim:"career",focus:"事业发展这条与你的问题最直接。"},{key:"love",label:"感情",dim:"love",focus:"感情这条与你的问题最直接。"},{key:"health",label:"健康",dim:"health",focus:"健康这条与你的问题最直接;下面只作提醒,不作任何诊断。"},{key:"study",label:"学业",dim:"career",focus:"学业与考试更贴近「事业发展」这条,讲的是长期积累与阶段进展。"},{key:"travel",label:"出行",dim:"overall",focus:"出行与迁动更贴近「整体运势」这条,看的是当下这一段的大环境。"}];window.__MP_VER="0.61.2",window.__MPGroups=[{title:"问一件事",hint:"心里有一件具体的事,起一卦再决定",items:[{k:"liuyao",label:"六爻",tip:"摇六次,问一件事"},{k:"meihua",label:"梅花",tip:"见闻起卦,看当下"},{k:"tarot",label:"塔罗",tip:"抽牌,看关系与选择"},{k:"qimen",label:"奇门",tip:"看方位、时机与取舍"},{k:"daliuren",label:"六壬",tip:"占事,断来意与结果"},{k:"xiaoliuren",label:"小六壬",tip:"掐指一算,快速断"}]},{title:"看一个人",hint:"看自己或身边人的性情、格局与运程",items:[{k:"bazi",label:"八字",tip:"四柱看一生格局"},{k:"ziwei",label:"紫微",tip:"十二宫细看"},{k:"hepan",label:"合盘",tip:"两个人合不合"},{k:"mbti",label:"人格",tip:"16 型性格问卷"},{k:"chenggu",label:"称骨",tip:"按生辰称命重"},{k:"numerology",label:"数字",tip:"生日数字看性格"},{k:"trend",label:"人生K",tip:"一生高低走势",wide:!0}]},{title:"查日子",hint:"挑时间、换农历,顺带看看家里和名字",items:[{k:"almanac",label:"黄历",tip:"今天宜忌、时辰吉凶"},{k:"zeri",label:"择日",tip:"挑个办事的好日子"},{k:"convert",label:"农历",tip:"公历农历互转"},{k:"star",label:"星座",tip:"星座性格与今日运"},{k:"fengshui",label:"风水",tip:"房屋朝向与布置"},{k:"name",label:"起名",tip:"按八字选字"}]}],window.__MP_UNRELEASED=[];const K={};K.DIRECTIONS=Nt,K.compute=()=>{throw new Error("命理引擎尚未加载")};const At=Object.create(null),dt=Object.create(null);function Ni(s){return Mt[s]||Mt.bazi||"client.bazi.js"}const Lt=()=>typeof performance<"u"&&performance.now?performance.now():Date.now();async function Ai(s){const n=Ni(s);let k=At[n];const I=!!k,X=Lt();if(!k){if(!Fa||typeof Fa.async!="function")throw new Error("当前宿主不支持客户端分块加载(require.async 缺失),请升级 DeepSeek Harness");let te=dt[n];te||(te=Fa.async(`./${n}`).then(re=>{const se=re&&(re.Engine||re.default);if(!se||typeof se.compute!="function")throw new Error(`命理引擎分块 ${n} 未返回 Engine`);return At[n]=se,se}),dt[n]=te,te.catch(()=>{}).then(()=>{delete dt[n]})),k=await te}for(const te of Object.keys(k))k[te]!==void 0&&(K[te]=k[te]);return Array.isArray(K.DIRECTIONS)||(K.DIRECTIONS=Nt),window.Engine=K,window.__MP_ENGINE_READY__=!0,window.__MP_LAST_LOAD={tab:s,chunk:n,cached:I,ms:Math.round((Lt()-X)*10)/10},K}window.__mpEnsureEngine=Ai,window.Engine=K,(function(){const s={liuyao:!0,meihua:!0,daliuren:!0,tarot:!0},n=Q=>!!s[Q],k={general:"other",wealth:"business",career:"career",love:"love",health:"other",study:"career",travel:"action"},I=Q=>k[Q]||"other",X="#ffffff",te="#1c1a15";function re(Q){const ee=String(Q??"").match(/rgba?\(([^)]+)\)/i);if(!ee)return null;const G=ee[1].split(/[,\s/]+/).filter(Boolean).map(Number);return G.length<3||G.slice(0,3).some(B=>!Number.isFinite(B))||G.length>3&&Number.isFinite(G[3])&&G[3]<.95?null:[G[0],G[1],G[2]]}function se(Q){const ee=String(Q||"").replace("#",""),G=ee.length===3?ee.split("").map(B=>B+B).join(""):ee;return/^[0-9a-f]{6}$/i.test(G)?[0,2,4].map(B=>parseInt(G.slice(B,B+2),16)):null}function t(Q){const ee=G=>{const B=G/255;return B<=.03928?B/12.92:Math.pow((B+.055)/1.055,2.4)};return .2126*ee(Q[0])+.7152*ee(Q[1])+.0722*ee(Q[2])}function ce(Q,ee){const G=t(Q),B=t(ee),he=Math.max(G,B),ca=Math.min(G,B);return(he+.05)/(ca+.05)}function Z(Q){const ee=typeof Q=="string"?re(Q):Q;return ee?ce(ee,se(X))>=ce(ee,se(te))?X:te:""}function le(Q){const ee=String(Q??"").trim();if(!ee)return{lines:null,warning:""};const G=ee.split(/[^0-9]+/).filter(Boolean).map(Number),B=G.filter(he=>![6,7,8,9].includes(he));return G.length===6&&B.length===0?{lines:G,warning:""}:{lines:null,warning:G.length!==6?`爻值需要正好 6 个数字(当前 ${G.length} 个),本次按随机摇卦。`:`爻值只能是 6/7/8/9(收到 ${B.join("/")}),本次按随机摇卦。`}}function ge(Q){const ee=String(Q??"").trim();if(!ee)return null;const G=Number(ee);return Number.isFinite(G)?G:null}function ve(Q){const ee=Q instanceof Date?Q:new Date,G=B=>String(B).padStart(2,"0");return`${ee.getFullYear()}-${G(ee.getMonth()+1)}-${G(ee.getDate())}`}window.__MPCore={NEED_ASK:s,needAsk:n,parseLines:le,toNumber:ge,parseRGB:re,hexToRGB:se,luminance:t,contrastRatio:ce,pickOnColor:Z,ON_DARK:X,ON_LIGHT:te,kindOfDirection:I,todayStamp:ve}})(),(function(){const s=`
1
+ window.__ModuleLoader__.load({id:"dsh-metaphysics",version:"0.62.1",factory(Fa){const ya=(function(){try{return Fa("react")}catch{return globalThis.React}})();if(!ya)return{inject:[],apply(){}};const p=ya.createElement,Mt={bazi:"client.bazi.js",ziwei:"client.ziwei.js",hepan:"client.hepan.js",trend:"client.trend.js",name:"client.name.js",fengshui:"client.fengshui.js",liuyao:"client.liuyao.js",meihua:"client.liuyao.js",qimen:"client.qimen.js",daliuren:"client.daliuren.js",tarot:"client.tarot.js",almanac:"client.almanac.js",convert:"client.convert.js",zeri:"client.zeri.js",chenggu:"client.chenggu.js",xiaoliuren:"client.xiaoliuren.js",star:"client.star.js",numerology:"client.numerology.js",mbti:"client.mbti.js"},Nt=[{key:"general",label:"综合",dim:null,focus:""},{key:"wealth",label:"财运",dim:"work",focus:"钱财进出的落点主要看「工作与职业选择」与「事业发展」这两条。"},{key:"career",label:"事业",dim:"career",focus:"事业发展这条与你的问题最直接。"},{key:"love",label:"感情",dim:"love",focus:"感情这条与你的问题最直接。"},{key:"health",label:"健康",dim:"health",focus:"健康这条与你的问题最直接;下面只作提醒,不作任何诊断。"},{key:"study",label:"学业",dim:"career",focus:"学业与考试更贴近「事业发展」这条,讲的是长期积累与阶段进展。"},{key:"travel",label:"出行",dim:"overall",focus:"出行与迁动更贴近「整体运势」这条,看的是当下这一段的大环境。"}];window.__MP_VER="0.62.1",window.__MPGroups=[{title:"问一件事",hint:"心里有一件具体的事,起一卦再决定",items:[{k:"liuyao",label:"六爻",tip:"摇六次,问一件事"},{k:"meihua",label:"梅花",tip:"见闻起卦,看当下"},{k:"tarot",label:"塔罗",tip:"抽牌,看关系与选择"},{k:"qimen",label:"奇门",tip:"看方位、时机与取舍"},{k:"daliuren",label:"六壬",tip:"占事,断来意与结果"},{k:"xiaoliuren",label:"小六壬",tip:"掐指一算,快速断"}]},{title:"看一个人",hint:"看自己或身边人的性情、格局与运程",items:[{k:"bazi",label:"八字",tip:"四柱看一生格局"},{k:"ziwei",label:"紫微",tip:"十二宫细看"},{k:"hepan",label:"合盘",tip:"两个人合不合"},{k:"mbti",label:"人格",tip:"16 型性格问卷"},{k:"chenggu",label:"称骨",tip:"按生辰称命重"},{k:"numerology",label:"数字",tip:"生日数字看性格"},{k:"trend",label:"人生K",tip:"一生高低走势",wide:!0}]},{title:"查日子",hint:"挑时间、换农历,顺带看看家里和名字",items:[{k:"almanac",label:"黄历",tip:"今天宜忌、时辰吉凶"},{k:"zeri",label:"择日",tip:"挑个办事的好日子"},{k:"convert",label:"农历",tip:"公历农历互转"},{k:"star",label:"星座",tip:"星座性格与今日运"},{k:"fengshui",label:"风水",tip:"房屋朝向与布置"},{k:"name",label:"起名",tip:"按八字选字"}]}],window.__MP_UNRELEASED=[];const K={};K.DIRECTIONS=Nt,K.compute=()=>{throw new Error("命理引擎尚未加载")};const At=Object.create(null),dt=Object.create(null);function Ni(s){return Mt[s]||Mt.bazi||"client.bazi.js"}const Lt=()=>typeof performance<"u"&&performance.now?performance.now():Date.now();async function Ai(s){const n=Ni(s);let k=At[n];const I=!!k,X=Lt();if(!k){if(!Fa||typeof Fa.async!="function")throw new Error("当前宿主不支持客户端分块加载(require.async 缺失),请升级 DeepSeek Harness");let te=dt[n];te||(te=Fa.async(`./${n}`).then(re=>{const se=re&&(re.Engine||re.default);if(!se||typeof se.compute!="function")throw new Error(`命理引擎分块 ${n} 未返回 Engine`);return At[n]=se,se}),dt[n]=te,te.catch(()=>{}).then(()=>{delete dt[n]})),k=await te}for(const te of Object.keys(k))k[te]!==void 0&&(K[te]=k[te]);return Array.isArray(K.DIRECTIONS)||(K.DIRECTIONS=Nt),window.Engine=K,window.__MP_ENGINE_READY__=!0,window.__MP_LAST_LOAD={tab:s,chunk:n,cached:I,ms:Math.round((Lt()-X)*10)/10},K}window.__mpEnsureEngine=Ai,window.Engine=K,(function(){const s={liuyao:!0,meihua:!0,daliuren:!0,tarot:!0},n=Q=>!!s[Q],k={general:"other",wealth:"business",career:"career",love:"love",health:"other",study:"career",travel:"action"},I=Q=>k[Q]||"other",X="#ffffff",te="#1c1a15";function re(Q){const ee=String(Q??"").match(/rgba?\(([^)]+)\)/i);if(!ee)return null;const G=ee[1].split(/[,\s/]+/).filter(Boolean).map(Number);return G.length<3||G.slice(0,3).some(B=>!Number.isFinite(B))||G.length>3&&Number.isFinite(G[3])&&G[3]<.95?null:[G[0],G[1],G[2]]}function se(Q){const ee=String(Q||"").replace("#",""),G=ee.length===3?ee.split("").map(B=>B+B).join(""):ee;return/^[0-9a-f]{6}$/i.test(G)?[0,2,4].map(B=>parseInt(G.slice(B,B+2),16)):null}function t(Q){const ee=G=>{const B=G/255;return B<=.03928?B/12.92:Math.pow((B+.055)/1.055,2.4)};return .2126*ee(Q[0])+.7152*ee(Q[1])+.0722*ee(Q[2])}function ce(Q,ee){const G=t(Q),B=t(ee),he=Math.max(G,B),ca=Math.min(G,B);return(he+.05)/(ca+.05)}function Z(Q){const ee=typeof Q=="string"?re(Q):Q;return ee?ce(ee,se(X))>=ce(ee,se(te))?X:te:""}function le(Q){const ee=String(Q??"").trim();if(!ee)return{lines:null,warning:""};const G=ee.split(/[^0-9]+/).filter(Boolean).map(Number),B=G.filter(he=>![6,7,8,9].includes(he));return G.length===6&&B.length===0?{lines:G,warning:""}:{lines:null,warning:G.length!==6?`爻值需要正好 6 个数字(当前 ${G.length} 个),本次按随机摇卦。`:`爻值只能是 6/7/8/9(收到 ${B.join("/")}),本次按随机摇卦。`}}function ge(Q){const ee=String(Q??"").trim();if(!ee)return null;const G=Number(ee);return Number.isFinite(G)?G:null}function ve(Q){const ee=Q instanceof Date?Q:new Date,G=B=>String(B).padStart(2,"0");return`${ee.getFullYear()}-${G(ee.getMonth()+1)}-${G(ee.getDate())}`}window.__MPCore={NEED_ASK:s,needAsk:n,parseLines:le,toNumber:ge,parseRGB:re,hexToRGB:se,luminance:t,contrastRatio:ce,pickOnColor:Z,ON_DARK:X,ON_LIGHT:te,kindOfDirection:I,todayStamp:ve}})(),(function(){const s=`
2
2
  .pp,.mp-it,.mp-al,.mp-cg,.mp-cl,.mp-cli,.mp-kline,.mp-mb,.mp-mb-paper,.mp-nm,.mp-quick,.mp-cdiff,.mp-shadow,.mp-trace-card,.mp-trace-layer,.mp-prof{--ink:#1b1b1b;--ink2:#3f3a33;--muted:#6f6a60;--label:#8a8378;--faint:#a9a296;
3
3
  --line:#c8c1b2;--dimline:#b9b2a4;--hair:#e9e2d3;
4
4
  /* 底色略沉作「桌面」,--card 跳到近白:原先 bg 与 card 只差 1/255,卡片感等于零。
@@ -1775,7 +1775,7 @@ window.__ModuleLoader__.load({id:"dsh-metaphysics",version:"0.61.2",factory(Fa){
1775
1775
  ${l.map(c=>`<div class="mp-shadow-warn">⚠ ${c}</div>`).join("")}
1776
1776
  ${o}
1777
1777
  ${d}
1778
- </section>`},n.shadowTrack=function(e){const i=window.Engine||window.__PP&&window.__PP.Engine;if(!i||!i.shadowSnapshot||!i.shadowDiff)return null;let r=null;try{r=i.shadowSnapshot(e)}catch{return null}if(!r||!r.shadow||!r.shadow.baseId)return null;const l="mp-shadow-v1";let o={};try{const c=window.localStorage?window.localStorage.getItem(l):null,g=c?JSON.parse(c):{};g&&typeof g=="object"&&!Array.isArray(g)&&(o=g)}catch{o={}}const m=o[r.shadow.baseId];let d=null;if(m)try{d=i.shadowDiff(m,r)}catch{d=null}r.at=Date.now(),o[r.shadow.baseId]=r;try{const c=Object.keys(o);if(c.length>24){c.sort((g,x)=>(Number(o[g]&&o[g].at)||0)-(Number(o[x]&&o[x].at)||0));for(const g of c.slice(0,c.length-24))delete o[g]}window.localStorage&&window.localStorage.setItem(l,JSON.stringify(o))}catch{}return d};const Ke="dsh-metaphysics/profiles-v1",Oe=24,Ye=16,Ma=40,Ba=60,Na=["bazi","ziwei","liuyao","tarot","meihua","daliuren","hepan","qimen","almanac","zeri","chenggu","xiaoliuren","star","numerology","mbti","trend","fengshui","name","convert"];n.PROF_KEY=Ke,n.PROF_MAX=Oe,n.PROF_KINDS=Na;const ht={bazi:"八字",ziwei:"紫微",liuyao:"六爻",tarot:"塔罗",meihua:"梅花",daliuren:"六壬",hepan:"合盘",qimen:"奇门",almanac:"黄历",zeri:"择日",chenggu:"称骨",xiaoliuren:"小六壬",star:"星座",numerology:"生命数字",mbti:"人格",trend:"人生K线",fengshui:"风水",name:"起名",convert:"农历"};n.profKindLabel=e=>ht[e]||String(e||"");const je=e=>typeof e=="string";function ga(e){if(!e||typeof e!="object"||Array.isArray(e)||!je(e.id)||!e.id||e.id.length>40||!je(e.kind)||Na.indexOf(e.kind)<0)return null;const i=/^(\d{4})-(\d{2})-(\d{2})$/.exec(String(e.date||""));if(!i)return null;const r=Number(i[1]),l=Number(i[2]),o=Number(i[3]);if(l<1||l>12||o<1||o>new Date(r,l,0).getDate())return null;const m=je(e.time)&&/^([01]?\d|2[0-3]):[0-5]\d$/.test(e.time)?e.time:"";return{id:e.id,kind:e.kind,label:je(e.label)?e.label.slice(0,Ye):"",date:e.date,time:e.hourUnknown===!0?"":m,hourUnknown:e.hourUnknown===!0,gender:e.gender==="male"||e.gender==="female"?e.gender:"",address:je(e.address)?e.address.slice(0,Ma):"",note:je(e.note)?e.note.slice(0,Ba):"",pinned:e.pinned===!0,createdAt:Number(e.createdAt)||0,lastUsedAt:Number(e.lastUsedAt)||0,uses:Number(e.uses)||0}}function Za(){try{const e=window.localStorage?window.localStorage.getItem(Ke):null,i=e?JSON.parse(e):[];return Array.isArray(i)?i:[]}catch{return[]}}function be(e){return e.slice().sort((i,r)=>(r.pinned?1:0)-(i.pinned?1:0)||(r.lastUsedAt||r.createdAt||0)-(i.lastUsedAt||i.createdAt||0)||(r.createdAt||0)-(i.createdAt||0))}n.profilesLoad=function(){const e=[],i=Object.create(null);for(const r of Za()){const l=ga(r);l&&!i[l.id]&&(i[l.id]=1,e.push(l))}return be(e)},n.profilesSave=function(e){const i=be(Array.isArray(e)?e.slice(0,Oe):[]);try{return window.localStorage?(window.localStorage.setItem(Ke,JSON.stringify(i)),!0):!1}catch{return!1}};let Ua=0;n.profilesNewId=function(){const e=Object.create(null);for(const r of n.profilesLoad())e[r.id]=1;let i;do i=`p${Date.now().toString(36)}${(Ua++).toString(36)}`;while(e[i]);return i},n.profilesPut=function(e){const i=ga(Object.assign({id:n.profilesNewId(),createdAt:Date.now(),lastUsedAt:Date.now()},e));if(!i)return{ok:!1,list:n.profilesLoad()};const r=n.profilesLoad(),l=r.findIndex(o=>o.id===i.id);if(l>=0){const o=r[l];i.createdAt=o.createdAt||i.createdAt,i.lastUsedAt=o.lastUsedAt,i.uses=o.uses,i.pinned=o.pinned,r.splice(l,1,i)}else r.push(i);if(r.length>Oe){const o=r.slice().sort((c,g)=>(c.lastUsedAt||c.createdAt)-(g.lastUsedAt||g.createdAt)),m=o.find(c=>c.id!==i.id)||o[0],d=r.indexOf(m);d>=0&&r.splice(d,1)}return n.profilesSave(r)?{ok:!0,list:be(r),item:i}:{ok:!1,list:n.profilesLoad()}},n.profilesRemove=function(e){const i=n.profilesLoad().filter(r=>r.id!==e);return n.profilesSave(i)?i:n.profilesLoad()},n.profilesPin=function(e){const i=n.profilesLoad().map(r=>r.id===e?Object.assign({},r,{pinned:!r.pinned}):r);return n.profilesSave(i)?be(i):n.profilesLoad()},n.profilesTouch=function(e){let i=!1;const r=n.profilesLoad().map(l=>l.id!==e?l:(i=!0,Object.assign({},l,{lastUsedAt:Date.now(),uses:(l.uses||0)+1})));return i?n.profilesSave(r)?be(r):n.profilesLoad():r};const Aa=864e5;function fa(e){const i=Number(e)||0;if(!i)return"未排过";const r=Math.floor((Date.now()-i)/Aa);if(r<=0)return"今天排过";if(r===1)return"昨天排过";if(r<30)return`${r} 天前排过`;const l=new Date(i);return`${l.getFullYear()}-${String(l.getMonth()+1).padStart(2,"0")}-${String(l.getDate()).padStart(2,"0")} 排过`}n.profilesAgo=fa;const Ka={male:"♂",female:"♀"};n.profilesHTML=function(e,i){const r=i||{},l=(Array.isArray(e)?e:[]).map(m=>{const d=ga(m);if(!d)return"";const c=[d.date,d.hourUnknown?"时辰未知":d.time,d.address].filter(Boolean).join(" "),g=r.editingId&&d.id===r.editingId,x=r.armedDel&&d.id===r.armedDel;return`<div class="mp-prof-card${d.pinned?" pinned":""}${g?" editing":""}" data-id="${t(d.id)}">
1778
+ </section>`},n.shadowTrack=function(e){const i=window.Engine||window.__PP&&window.__PP.Engine;if(!i||!i.shadowSnapshot||!i.shadowDiff)return null;let r=null;try{r=i.shadowSnapshot(e)}catch{return null}if(!r||!r.shadow||!r.shadow.baseId)return null;const l="mp-shadow-v1";let o={};try{const c=window.localStorage?window.localStorage.getItem(l):null,g=c?JSON.parse(c):{};g&&typeof g=="object"&&!Array.isArray(g)&&(o=g)}catch{o={}}const m=o[r.shadow.baseId];let d=null;if(m)try{d=i.shadowDiff(m,r)}catch{d=null}r.at=Date.now(),o[r.shadow.baseId]=r;try{const c=Object.keys(o);if(c.length>24){c.sort((g,x)=>(Number(o[g]&&o[g].at)||0)-(Number(o[x]&&o[x].at)||0));for(const g of c.slice(0,c.length-24))delete o[g]}window.localStorage&&window.localStorage.setItem(l,JSON.stringify(o))}catch{}return d};const Ke="dsh-metaphysics/profiles-v1",Oe=24,Ye=16,Ma=40,Ba=60,Na=["bazi","ziwei","liuyao","tarot","meihua","daliuren","hepan","qimen","almanac","zeri","chenggu","xiaoliuren","star","numerology","mbti","trend","fengshui","name","convert"];n.PROF_KEY=Ke,n.PROF_MAX=Oe,n.PROF_KINDS=Na;const ht={bazi:"八字",ziwei:"紫微",liuyao:"六爻",tarot:"塔罗",meihua:"梅花",daliuren:"六壬",hepan:"合盘",qimen:"奇门",almanac:"黄历",zeri:"择日",chenggu:"称骨",xiaoliuren:"小六壬",star:"星座",numerology:"生命数字",mbti:"人格",trend:"人生K线",fengshui:"风水",name:"起名",convert:"农历"};n.profKindLabel=e=>ht[e]||String(e||"");const je=e=>typeof e=="string";function ga(e){if(!e||typeof e!="object"||Array.isArray(e)||!je(e.id)||!e.id||e.id.length>40||!je(e.kind)||Na.indexOf(e.kind)<0)return null;const i=/^(\d{4})-(\d{2})-(\d{2})$/.exec(String(e.date||""));if(!i)return null;const r=Number(i[1]),l=Number(i[2]),o=Number(i[3]);if(l<1||l>12||o<1||o>new Date(r,l,0).getDate())return null;const m=je(e.time)&&/^([01]?\d|2[0-3]):[0-5]\d$/.test(e.time)?e.time:"";return{id:e.id,kind:e.kind,label:je(e.label)?e.label.slice(0,Ye):"",date:e.date,time:e.hourUnknown===!0?"":m,hourUnknown:e.hourUnknown===!0,trueSolar:e.trueSolar!==!1,lateZi:e.lateZi!==!1,gender:e.gender==="male"||e.gender==="female"?e.gender:"",address:je(e.address)?e.address.slice(0,Ma):"",note:je(e.note)?e.note.slice(0,Ba):"",pinned:e.pinned===!0,createdAt:Number(e.createdAt)||0,lastUsedAt:Number(e.lastUsedAt)||0,uses:Number(e.uses)||0}}function Za(){try{const e=window.localStorage?window.localStorage.getItem(Ke):null,i=e?JSON.parse(e):[];return Array.isArray(i)?i:[]}catch{return[]}}function be(e){return e.slice().sort((i,r)=>(r.pinned?1:0)-(i.pinned?1:0)||(r.lastUsedAt||r.createdAt||0)-(i.lastUsedAt||i.createdAt||0)||(r.createdAt||0)-(i.createdAt||0))}n.profilesLoad=function(){const e=[],i=Object.create(null);for(const r of Za()){const l=ga(r);l&&!i[l.id]&&(i[l.id]=1,e.push(l))}return be(e)},n.profilesSave=function(e){const i=be(Array.isArray(e)?e.slice(0,Oe):[]);try{return window.localStorage?(window.localStorage.setItem(Ke,JSON.stringify(i)),!0):!1}catch{return!1}};let Ua=0;n.profilesNewId=function(){const e=Object.create(null);for(const r of n.profilesLoad())e[r.id]=1;let i;do i=`p${Date.now().toString(36)}${(Ua++).toString(36)}`;while(e[i]);return i},n.profilesPut=function(e){const i=ga(Object.assign({id:n.profilesNewId(),createdAt:Date.now(),lastUsedAt:Date.now()},e));if(!i)return{ok:!1,list:n.profilesLoad()};const r=n.profilesLoad(),l=r.findIndex(o=>o.id===i.id);if(l>=0){const o=r[l];i.createdAt=o.createdAt||i.createdAt,i.lastUsedAt=o.lastUsedAt,i.uses=o.uses,i.pinned=o.pinned,r.splice(l,1,i)}else r.push(i);if(r.length>Oe){const o=r.slice().sort((c,g)=>(c.lastUsedAt||c.createdAt)-(g.lastUsedAt||g.createdAt)),m=o.find(c=>c.id!==i.id)||o[0],d=r.indexOf(m);d>=0&&r.splice(d,1)}return n.profilesSave(r)?{ok:!0,list:be(r),item:i}:{ok:!1,list:n.profilesLoad()}},n.profilesRemove=function(e){const i=n.profilesLoad().filter(r=>r.id!==e);return n.profilesSave(i)?i:n.profilesLoad()},n.profilesPin=function(e){const i=n.profilesLoad().map(r=>r.id===e?Object.assign({},r,{pinned:!r.pinned}):r);return n.profilesSave(i)?be(i):n.profilesLoad()},n.profilesTouch=function(e){let i=!1;const r=n.profilesLoad().map(l=>l.id!==e?l:(i=!0,Object.assign({},l,{lastUsedAt:Date.now(),uses:(l.uses||0)+1})));return i?n.profilesSave(r)?be(r):n.profilesLoad():r};const Aa=864e5;function fa(e){const i=Number(e)||0;if(!i)return"未排过";const r=Math.floor((Date.now()-i)/Aa);if(r<=0)return"今天排过";if(r===1)return"昨天排过";if(r<30)return`${r} 天前排过`;const l=new Date(i);return`${l.getFullYear()}-${String(l.getMonth()+1).padStart(2,"0")}-${String(l.getDate()).padStart(2,"0")} 排过`}n.profilesAgo=fa;const Ka={male:"♂",female:"♀"};n.profilesHTML=function(e,i){const r=i||{},l=(Array.isArray(e)?e:[]).map(m=>{const d=ga(m);if(!d)return"";const c=[d.date,d.hourUnknown?"时辰未知":d.time,d.address].filter(Boolean).join(" "),g=r.editingId&&d.id===r.editingId,x=r.armedDel&&d.id===r.armedDel;return`<div class="mp-prof-card${d.pinned?" pinned":""}${g?" editing":""}" data-id="${t(d.id)}">
1779
1779
  <button type="button" class="mp-prof-use" data-mp-prof="use" data-id="${t(d.id)}"
1780
1780
  title="${t(`用「${d.label||d.kind}」的出生信息直接排盘`)}">
1781
1781
  <span class="mp-prof-nm">${t(d.label||"未命名")}${d.gender?`<i class="sx">${Ka[d.gender]||""}</i>`:""}</span>