dsh-metaphysics 0.72.2 → 0.73.0
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.
- package/CHANGELOG.md +10 -0
- package/README.md +1 -1
- package/client.js +48 -48
- package/package.json +5 -5
- package//345/221/275/347/220/206/346/216/222/347/233/230.html +4 -4
package/client.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
window.__ModuleLoader__.load({id:"dsh-metaphysics",version:"0.
|
|
1
|
+
window.__ModuleLoader__.load({id:"dsh-metaphysics",version:"0.73.0",factory(dt){const Ja=(function(){try{return dt("react")}catch{return globalThis.React}})();if(!Ja)return{inject:[],apply(){}};const r=Ja.createElement,ii={bazi:"client.chart.js",ziwei:"client.chart.js",hepan:"client.chart.js",trend:"client.chart.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",constitution:"client.constitution.js",wuyunliuqi:"client.wuyunliuqi.js",taiyi:"client.taiyi.js"},ni=[{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.73.0",window.__MPGroups=[{title:"问一件事",hint:"心里有一件具体的事,起一卦再决定",items:[{k:"liuyao",label:"六爻",tip:"摇六次问事"},{k:"tarot",label:"塔罗",tip:"抽牌看选择"},{k:"meihua",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:"constitution",label:"体质",tip:"九种体质"},{k:"chenggu",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:"wuyunliuqi",label:"运气",tip:"一年大势"},{k:"taiyi",label:"太乙",tip:"积年推局"},{k:"fengshui",label:"风水",tip:"房屋朝向"},{k:"name",label:"起名",tip:"八字选字"}]}],window.__MP_UNRELEASED=[];const X={};X.DIRECTIONS=ni,X.compute=()=>{throw new Error("命理引擎尚未加载")};const si=Object.create(null),Et=Object.create(null);function on(n){return ii[n]||ii.bazi||"client.chart.js"}const oi=()=>typeof performance<"u"&&performance.now?performance.now():Date.now();async function pn(n){const s=on(n);let S=si[s];const F=!!S,ee=oi();if(!S){if(!dt||typeof dt.async!="function")throw new Error("当前宿主不支持客户端分块加载(require.async 缺失),请升级 DeepSeek Harness");let se=Et[s];se||(se=dt.async(`./${s}`).then(le=>{const re=le&&(le.Engine||le.default);if(!re||typeof re.compute!="function")throw new Error(`命理引擎分块 ${s} 未返回 Engine`);return si[s]=re,re}),Et[s]=se,se.catch(()=>{}).then(()=>{delete Et[s]})),S=await se}for(const se of Object.keys(S))S[se]!==void 0&&(X[se]=S[se]);return Array.isArray(X.DIRECTIONS)||(X.DIRECTIONS=ni),window.Engine=X,window.__MP_ENGINE_READY__=!0,window.__MP_LAST_LOAD={tab:n,chunk:s,cached:F,ms:Math.round((oi()-ee)*10)/10},X}window.__mpEnsureEngine=pn,window.Engine=X,(function(){const n={liuyao:!0,meihua:!0,daliuren:!0,tarot:!0},s=Z=>!!n[Z],S={general:"other",wealth:"business",career:"career",love:"love",health:"other",study:"career",travel:"action"},F=Z=>S[Z]||"other",ee="#ffffff",se="#1c1a15";function le(Z){const K=String(Z??"").match(/rgba?\(([^)]+)\)/i);if(!K)return null;const V=K[1].split(/[,\s/]+/).filter(Boolean).map(Number);return V.length<3||V.slice(0,3).some(G=>!Number.isFinite(G))||V.length>3&&Number.isFinite(V[3])&&V[3]<.95?null:[V[0],V[1],V[2]]}function re(Z){const K=String(Z||"").replace("#",""),V=K.length===3?K.split("").map(G=>G+G).join(""):K;return/^[0-9a-f]{6}$/i.test(V)?[0,2,4].map(G=>parseInt(V.slice(G,G+2),16)):null}function ve(Z){const K=V=>{const G=V/255;return G<=.03928?G/12.92:Math.pow((G+.055)/1.055,2.4)};return .2126*K(Z[0])+.7152*K(Z[1])+.0722*K(Z[2])}function t(Z,K){const V=ve(Z),G=ve(K),te=Math.max(V,G),Me=Math.min(V,G);return(te+.05)/(Me+.05)}function $e(Z){const K=typeof Z=="string"?le(Z):Z;return K?t(K,re(ee))>=t(K,re(se))?ee:se:""}function I(Z){const K=String(Z??"").trim();if(!K)return{lines:null,warning:""};const V=K.split(/[^0-9]+/).filter(Boolean).map(Number),G=V.filter(te=>![6,7,8,9].includes(te));return V.length===6&&G.length===0?{lines:V,warning:""}:{lines:null,warning:V.length!==6?`爻值需要正好 6 个数字(当前 ${V.length} 个),本次按随机摇卦。`:`爻值只能是 6/7/8/9(收到 ${G.join("/")}),本次按随机摇卦。`}}function xe(Z){const K=String(Z??"").trim();if(!K)return null;const V=Number(K);return Number.isFinite(V)?V:null}function we(Z){const K=Z instanceof Date?Z:new Date,V=G=>String(G).padStart(2,"0");return`${K.getFullYear()}-${V(K.getMonth()+1)}-${V(K.getDate())}`}window.__MPCore={NEED_ASK:n,needAsk:s,parseLines:I,toNumber:xe,parseRGB:le,hexToRGB:re,luminance:ve,contrastRatio:t,pickOnColor:$e,ON_DARK:ee,ON_LIGHT:se,kindOfDirection:F,todayStamp:we}})(),(function(){const n=`
|
|
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,卡片感等于零。
|
|
@@ -1573,12 +1573,12 @@ window.__ModuleLoader__.load({id:"dsh-metaphysics",version:"0.72.2",factory(mt){
|
|
|
1573
1573
|
#ppm-d-bad-ink:checked~.pp-body .pp-st.bad{color:var(--ink)}
|
|
1574
1574
|
#ppm-d-bad-ink:checked~.pp-body .pp-st.bad::before{content:none}
|
|
1575
1575
|
#ppm-d-bold:checked~.pp-body .pp-st.main,#ppm-d-bold:checked~.pp-body .pp-st.good{font-weight:700}
|
|
1576
|
-
`,s=window.__PP=window.__PP||{};s.CSS=n;const S={主星:"main",吉星:"good",煞星:"bad",辅星:"aux",杂曜:"aux"},F={禄:"lu",权:"quan",科:"ke",忌:"ji"},ee=new Set(["三台","八座","恩光","天贵"]),se={庙:"good",旺:"good",得:"mid",利:"mid",平:"mid",不:"bad",陷:"bad"},le={巳:[1,1],午:[1,2],未:[1,3],申:[1,4],辰:[2,1],酉:[2,4],卯:[3,1],戌:[3,4],寅:[4,1],丑:[4,2],子:[4,3],亥:[4,4]},re={乾:[1,1,1],兑:[1,1,0],离:[1,0,1],震:[1,0,0],巽:[0,1,1],坎:[0,1,0],艮:[0,0,1],坤:[0,0,0]},
|
|
1577
|
-
<div class="pp-stars">${Z(e.stars,p,
|
|
1576
|
+
`,s=window.__PP=window.__PP||{};s.CSS=n;const S={主星:"main",吉星:"good",煞星:"bad",辅星:"aux",杂曜:"aux"},F={禄:"lu",权:"quan",科:"ke",忌:"ji"},ee=new Set(["三台","八座","恩光","天贵"]),se={庙:"good",旺:"good",得:"mid",利:"mid",平:"mid",不:"bad",陷:"bad"},le={巳:[1,1],午:[1,2],未:[1,3],申:[1,4],辰:[2,1],酉:[2,4],卯:[3,1],戌:[3,4],寅:[4,1],丑:[4,2],子:[4,3],亥:[4,4]},re={乾:[1,1,1],兑:[1,1,0],离:[1,0,1],震:[1,0,0],巽:[0,1,1],坎:[0,1,0],艮:[0,0,1],坤:[0,0,0]},ve=["初爻","二爻","三爻","四爻","五爻","上爻"],t=e=>String(e??"").replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""").replace(/'/g,"'"),$e=(e,i,o)=>{const f=Math.round(43),b=e?`<rect x="0" y="${2.5}" width="104" height="7" rx="${1.6}" fill="currentColor"/>`:`<rect x="0" y="${2.5}" width="${f}" height="7" rx="${1.6}" fill="currentColor"/><rect x="${f+18}" y="${2.5}" width="${104-f-18}" height="7" rx="${1.6}" fill="currentColor"/>`;return`<svg class="mp-hex${i?" hex-on":""}${o?" "+o:""}" viewBox="0 0 104 12" preserveAspectRatio="none" aria-hidden="true" focusable="false">${b}</svg>`},I={木:"M6 1.6V10.8M6 5.2 2.6 2.2M6 7.4 9.4 4.4",火:"M6 1.4C7.6 3.6 9.2 5.4 9.2 7.6A3.2 3.2 0 0 1 2.8 7.6C2.8 5.4 4.4 3.6 6 1.4Z",土:"M1.6 9.6h8.8M6 2.4v7.2M3.4 5.6h5.2",金:"M6 1.2 10.6 6 6 10.8 1.4 6Z",水:"M1.4 7.2C2.9 4.2 4.5 10.2 6 7.2 7.5 4.2 9.1 10.2 10.6 7.2"},xe=e=>{const i=I[e];return i?`<svg class="mp-wxi" viewBox="0 0 12 12" aria-hidden="true" focusable="false"><path d="${i}" fill="none" stroke="currentColor" stroke-width="1.3" stroke-linecap="round" stroke-linejoin="round"/></svg>`:""},we=e=>`<svg class="mp-trig" viewBox="0 0 14 10" aria-hidden="true" focusable="false">${(re[e]||[0,0,0]).slice().reverse().map((l,p)=>{const c=p*4;return l?`<rect x="0" y="${c}" width="14" height="2" rx="0.6" fill="currentColor"/>`:`<rect x="0" y="${c}" width="5.6" height="2" rx="0.6" fill="currentColor"/><rect x="8.4" y="${c}" width="5.6" height="2" rx="0.6" fill="currentColor"/>`}).join("")}</svg>`;s._hexBar=$e,s._wxIcon=xe,s._triGlyph=we;function Z(e,i,o){return!e||!e.length?"":e.map(l=>{const p=S[l.type]||"aux",c=l.mutagen?`<i class="pp-m ${F[l.mutagen]}">${l.mutagen}</i>`:"",d=i&&i[l.name],u=d?`<i class="pp-m view ${F[d]}">${d}</i>`:"",m=l.brightness?`<em class="pp-b ${se[l.brightness]||"mid"}">${l.brightness}</em>`:"",f=l.inTemple?'<em class="pp-b good">庙</em>':"",b=o&&o[l.name]?ga(o[l.name],l.name):"",w=ee.has(l.name)?" st-sbg":"";return`<span class="pp-st ${p}${w}">${b}${l.name}${m}${f}${c}${u}</span>`}).join("")}function K(e){const i=[];for(let o=0;o<6;o++)i.push(e+o*12);return i.join(",")}const V=["命宫","兄弟","夫妻","子女","财帛","疾厄","迁移","交友","官禄","田宅","福德","父母"],G=["子","丑","寅","卯","辰","巳","午","未","申","酉","戌","亥"],te=e=>(e%12+12)%12,Me=(e,i)=>e!==i&&[te(i+4),te(i+8),te(i+6)].includes(e);function Le(e,i,o,l,p,c,d,u){const m=le[e.branch]||[1,1],f=G.indexOf(e.branch),b=["pp-cell"];f===i?b.push("pp-soul"):Me(f,i)&&b.push("pp-tri"),e.isBody&&b.push("pp-shen"),u&&e.branch===u&&b.push("pp-laiyin"),m[0]===4&&b.push("pp-lastrow"),m[1]===4&&b.push("pp-lastcol");const w=e.shensha||{},$=V[te(i-f)];let A="";if(f===i&&l){const L=_=>(S[_.type]||"")==="main";if(!(e.stars||[]).some(L)){const _=l.find(D=>G.indexOf(D.branch)===te(f+6)),Q=_?(_.stars||[]).filter(L):[];Q.length&&(A=`<div class="pp-borrow" title="命宫无主星,借对宫(迁移宫)主星">借 ${Q.map(D=>D.name).join(" ")}</div>`)}}return`<div class="${b.join(" ")}" data-pi="${f}" data-view="${o}" role="button" tabindex="0" aria-expanded="false" style="grid-row:${m[0]};grid-column:${m[1]}">
|
|
1577
|
+
<div class="pp-stars">${Z(e.stars,p,Ze(e))}</div>
|
|
1578
1578
|
${A}
|
|
1579
1579
|
<div class="pp-ages">${K(e.xiaoxian.age)}</div>
|
|
1580
|
-
${
|
|
1581
|
-
${
|
|
1580
|
+
${ht(e,c)}
|
|
1581
|
+
${La(e,d)}
|
|
1582
1582
|
<div class="pp-foot">
|
|
1583
1583
|
<div class="ft-l">
|
|
1584
1584
|
<span class="ft-dx"><span class="pp-ss-txt">${w.boshi}</span> ${e.daxian.start}-${e.daxian.end}</span>
|
|
@@ -1591,14 +1591,14 @@ window.__ModuleLoader__.load({id:"dsh-metaphysics",version:"0.72.2",factory(mt){
|
|
|
1591
1591
|
<span class="ft-pn">${$}</span>
|
|
1592
1592
|
</div>
|
|
1593
1593
|
</div>
|
|
1594
|
-
</div>`}function
|
|
1594
|
+
</div>`}function ga(e,i){return`<span class="pp-zha ${F[e]}" title="自化${t(e)}:${t(i)}·宫干化回本宫"><svg class="z-a" viewBox="0 0 22 9" role="img" aria-label="自化${t(e)}">
|
|
1595
1595
|
<path class="z-shaft" d="M1 7C6.6 7 11.4 5.6 17.2 3.2"/>
|
|
1596
1596
|
<path class="z-head" d="M20.2 2 17.8 4.9 16.6 1.9Z"/>
|
|
1597
|
-
</svg></span>`}s._zhaMark=
|
|
1597
|
+
</svg></span>`}s._zhaMark=ga;function Ze(e){const i={};for(const o of e.selfHua||[])!o||!o.star||!F[o.type]||i[o.star]||(i[o.star]=o.type);return i}function ht(e,i){const o=i&&i[e.branch]||[];if(!o.length)return"";const l=o.map(p=>`<i class="${F[p.type]||""}" title="${t(p.star)}化${t(p.type)}">${t(p.type)}<em>→${t(p.palace||"未上盘")}</em></i>`).join("");return`<div class="pp-fx">${t(e.ganzhi)}宫干 ${l}</div>`}function La(e,i){const o=i&&i[e.branch]||null;return o?`<div class="pp-hs">${Object.entries(o).map(([p,c])=>`<i>${t(p)}<em>${t(c)}</em></i>`).join("")}</div>`:""}function Va(e){try{const i=window.Engine||window.__PP&&window.__PP.Engine;if(!i||!i.buildBazi||!e.input)return"";const o=i.buildBazi({year:e.input.year,month:e.input.month,day:e.input.day,hour:e.input.hour,minute:e.input.minute,gender:e.input.gender,trueSolar:!1});return["year","month","day","hour"].map(l=>o.pillars[l].ganzhi).join(" ")}catch{return""}}function Ta(e){try{const i=window.Engine||window.__PP&&window.__PP.Engine;return!i||!i.buildBazi||!e.input?null:i.buildBazi({year:e.input.year,month:e.input.month,day:e.input.day,hour:e.input.hour,minute:e.input.minute,gender:e.input.gender,trueSolar:!1}).pillars.day.stem}catch{return null}}s.ziweiHTML=function(e){const i=G.indexOf(e.soul.branch),o=e.liunian&&e.liunian[0]||null,l=o?o.age:1,p=e.palaces.find(k=>l>=k.daxian.start&&l<=k.daxian.end)||e.palaces[0],c=G.indexOf(p.branch),d=o?G.indexOf(o.lifePalace.branch):i,u=k=>{const C={};for(const O of k||[])O&&O.star&&(C[O.star]=O.type);return C},m=(e.daxianList||[]).find(k=>k.branch===p.branch)||null,f={da:u(m&&m.mutagenHits),ln:u(o&&o.mutagenHits)},b={};for(const k of e.daxianList||[])b[k.branch]=k.mutagenHits||[];const w=(()=>{const k=Ta(e);if(!k)return null;const C=(e.daxianList||[]).find(oe=>oe.stem===k);if(!C)return null;const O={};for(const oe of e.palaces)for(const ge of oe.stars||[])ge.name in O||(O[ge.name]=oe.branch);return{stem:k,items:(C.mutagenHits||[]).map(oe=>({type:oe.type,star:oe.star,branch:O[oe.star]||null,palace:O[oe.star]?(e.palaces.find(ge=>ge.branch===O[oe.star])||{}).palace:null}))}})();let $=null;if(o){$={};for(const[k,C]of Object.entries(o))/^(流|年解)/.test(k)&&typeof C=="string"&&G.includes(C)&&($[C]=$[C]||{},$[C][k]=C)}const A={da:m&&m.yunStars?(()=>{const k={};for(const[C,O]of Object.entries(m.yunStars))(k[O]=k[O]||{})[C]=O;if(m.yunSuiqi)for(const[C,O]of Object.entries(m.yunSuiqi))(k[O]=k[O]||{})[C]=O;if(m.yunJiangqian)for(const[C,O]of Object.entries(m.yunJiangqian))(k[O]=k[O]||{})[C]=O;return k})():null,ln:$};if(e.liunian&&e.liunian.length){const k=e.liunian.find(C=>C.ganzhi===(e._lnSel||e.liunian[0].ganzhi))||e.liunian[0];if(k.lnSuiqi)for(const[C,O]of Object.entries(k.lnSuiqi))($[O]=$[O]||{})[C]=O;if(k.lnJiangqian)for(const[C,O]of Object.entries(k.lnJiangqian))($[O]=$[O]||{})[C]=O}const L=(k,C)=>e.palaces.map(O=>Le(O,k,C,e.palaces,f[C]||null,b,A[C]||null,e.laiyin&&e.laiyin.branch)).join(""),_=(k,C)=>`<div class="pp-center">
|
|
1598
1598
|
${C==="da"?`<div class="ct-t1">大限 ${p.ganzhi} ${p.daxian.start}-${p.daxian.end}岁</div>`:C==="ln"&&o?`<div class="ct-t1">流年 ${o.ganzhi} ${o.age}岁</div>`:`<div class="ct-t1">${e.daxian.rule.slice(0,2)} ${e.bureau.name}</div>`}
|
|
1599
1599
|
<div class="ct-t2">公历 ${e.input.year}-${String(e.input.month).padStart(2,"0")}-${String(e.input.day).padStart(2,"0")} ${String(e.input.hour).padStart(2,"0")}:${String(e.input.minute).padStart(2,"0")}</div>
|
|
1600
1600
|
<div class="ct-t2">农历 ${e.lunar.year}年${e.lunar.isLeap?`闰${e.lunar.monthRaw||e.lunar.month}`:e.lunar.month}月${e.lunar.day}日${e.hourBranch}时${e.lunar.isLeap&&e.lunar.monthRaw&&e.lunar.month!==e.lunar.monthRaw?`(按${e.lunar.month}月起盘)`:""}</div>
|
|
1601
|
-
${
|
|
1601
|
+
${Va(e)?`<div class="ct-t3">${Va(e)}</div>`:""}
|
|
1602
1602
|
${e.nonJieqi?`<div class="ct-t3 ct-t3nj" title="${t(e.nonJieqi.note)}">${e.nonJieqi.year} ${e.nonJieqi.month} ${e.nonJieqi.day} ${e.nonJieqi.hour}<em class="nj-tag">非节气</em></div>`:""}
|
|
1603
1603
|
<div class="ct-t4">命主 ${e.lifeMaster}${e.lifeMasterNote?`<span class="pp-dim" title="${t(e.lifeMasterNote)}">*</span>`:""} 身主 ${e.bodyMaster}${e.bodyMasterNote?`<span class="pp-dim" title="${t(e.bodyMasterNote)}">*</span>`:""}</div>
|
|
1604
1604
|
<div class="ct-t4">命宫 ${e.soul.branch} 身宫 ${e.body.branch} 五行局 ${e.bureau.name}</div>
|
|
@@ -1686,7 +1686,7 @@ window.__ModuleLoader__.load({id:"dsh-metaphysics",version:"0.72.2",factory(mt){
|
|
|
1686
1686
|
${(()=>{if(!w)return"";const k={禄:"rl",权:"rq",科:"rk",忌:"rj"},C=w.items.map(O=>`<i><em class="${k[O.type]||""}">${O.type}</em>${t(O.star)}<em>${t(O.branch||"?")}${O.palace?`·${t(O.palace)}`:""}</em></i>`).join("");return`<div class="pp-rigan"><b>日干${t(w.stem)}四化</b>${C}</div>`})()} ${(()=>{if(!w)return"";const k={禄:"rl",权:"rq",科:"rk",忌:"rj"},C=w.items.map(O=>`<i><em class="${k[O.type]||""}">${O.type}</em>${t(O.star)}<em>${t(O.branch||"?")}${O.palace?`·${t(O.palace)}`:""}</em></i>`).join("");return`<div class="pp-rigan"><b>日干${t(w.stem)}四化</b>${C}</div>`})()}
|
|
1687
1687
|
<div class="pp-zhlegend">自化图示 <span class="z-lu">${s._zhaMark("禄","本宫")}禄</span><span class="z-quan">${s._zhaMark("权","本宫")}权</span><span class="z-ke">${s._zhaMark("科","本宫")}科</span><span class="z-ji">${s._zhaMark("忌","本宫")}忌</span></div>
|
|
1688
1688
|
<div class="pp-flywrap">${he}${W}</div>
|
|
1689
|
-
</div>${j}${T}${H}${pe}${M}${y}`};function
|
|
1689
|
+
</div>${j}${T}${H}${pe}${M}${y}`};function fa(e){return e.length?e.map(i=>{const o=S[i.type]||"aux",l=i.brightness?`<em class="dt-br ${se[i.brightness]||"mid"}">${i.brightness}</em>`:"",p=i.inTemple?'<em class="dt-br good">庙</em>':"",c=i.mutagen?`<i class="pp-m ${F[i.mutagen]}">${i.mutagen}</i>`:"";return`<span class="dt-st ${o}">${i.name}${l}${p}${c}</span>`}).join(""):'<span class="dt-empty">无</span>'}function ha(e,i){const o=s._zw;if(!o)return"";const l=M=>o.palaces.find(B=>G.indexOf(B.branch)===M),p=l(e)||o.palaces.find(M=>G.indexOf(M.branch)===e);if(!p)return"";const c=G.indexOf(p.branch),d=V[te(i-c)],u=p.shensha||{},m=p.stars.filter(M=>M.type==="主星"),f=p.stars.filter(M=>M.type==="吉星"||M.type==="辅星"),b=p.stars.filter(M=>M.type==="煞星"),w=p.stars.filter(M=>!["主星","吉星","辅星","煞星"].includes(M.type)),$=(p.selfHua||[]).length?p.selfHua.map(M=>`<span class="dt-self">${ga(M.type,M.star||"本宫")}${t(M.star||"")}</span>`).join(""):'<span class="dt-empty">无</span>',A=[te(c+4),te(c+8),te(c+6)].map(M=>{const B=l(M),y=V[te(i-M)],he=B?B.stars.filter(ie=>ie.type==="主星").map(ie=>ie.name).join("、"):"",W=M===te(c+6)?"对宫":"三合";return`<span class="dt-st">${y}[${G[M]}]<b>${he||"无主星"}</b><em>${W}</em></span>`}).join(""),L=l(te(c+6)),_=L?L.stars.filter(M=>M.type==="主星"):[],Q=m.length?fa(m):`<span class="dt-empty">无主星</span><span class="dt-tri"> 借对宫 <b>${_.length?_.map(M=>M.name).join("、"):"亦无主星"}</b></span>`,D=(M,B)=>`<div class="dt-dr"><span class="dt-k">${M}</span><div class="dt-v">${B}</div></div>`,T=V.length,H=te(i-c),pe=V.map((M,B)=>{const y=te(c+(B-H+T)%T);return`<span class="dt-st">${V[B]}[${G[y]}]</span>`}).join("");return`<div class="dt-dh">
|
|
1690
1690
|
<b>${d}</b><span>${p.branch}宫 · ${p.ganzhi}</span>
|
|
1691
1691
|
<span>大限 ${p.daxian.start}-${p.daxian.end}</span>
|
|
1692
1692
|
<span>小限起 ${p.xiaoxian.age} 岁</span>
|
|
@@ -1694,26 +1694,26 @@ window.__ModuleLoader__.load({id:"dsh-metaphysics",version:"0.72.2",factory(mt){
|
|
|
1694
1694
|
<span class="dt-x" data-pp-close="1">收起</span>
|
|
1695
1695
|
</div>
|
|
1696
1696
|
${D("主星",Q)}
|
|
1697
|
-
${D("吉辅",
|
|
1698
|
-
${b.length?D("煞星",
|
|
1699
|
-
${w.length?D("杂曜",
|
|
1697
|
+
${D("吉辅",fa(f))}
|
|
1698
|
+
${b.length?D("煞星",fa(b)):""}
|
|
1699
|
+
${w.length?D("杂曜",fa(w)):""}
|
|
1700
1700
|
${D("宫干四化",$)}
|
|
1701
1701
|
${D("十二神",`<span class="dt-tri">长生 ${u.changsheng||"—"} 博士 ${u.boshi||"—"} 将前 ${u.jiangqian||"—"} 岁前 ${u.suiqi||"—"}</span>`)}
|
|
1702
1702
|
${D("三方四正",`<span class="dt-tri">${A}</span>`)}
|
|
1703
1703
|
${D("太极转换",`<span class="dt-tri dt-taiji">以${d}[${p.branch}]立太极${pe}</span>`)}
|
|
1704
|
-
<div class="hint">三方四正在盘上已同步标出(浅红描边)。再点一次本宫可收起。</div>`}function
|
|
1705
|
-
<span class="mp-hy-nm">${p.name||
|
|
1704
|
+
<div class="hint">三方四正在盘上已同步标出(浅红描边)。再点一次本宫可收起。</div>`}function Ea(e){e.querySelectorAll(".pp-cell.pp-sel,.pp-cell.pp-link").forEach(i=>{i.classList.remove("pp-sel"),i.classList.remove("pp-link")}),e.querySelectorAll('.pp-cell[aria-expanded="true"]').forEach(i=>i.setAttribute("aria-expanded","false"))}const _a={};function bt(e,i){pa(e);const o=e.querySelector(".pp-grid");if(!o)return;const l=[i,(i+6)%12,(i+4)%12,(i+8)%12],p=m=>{const f=e.querySelector('.pp-cell[data-pi="'+m+'"]');if(!f)return null;const b=Number(f.style.gridRow),w=Number(f.style.gridColumn),$=Math.min(75,Math.max(25,(b-.5)*25));return w===1?[25,$]:[75,$]},c=l.map(p);if(c.some(m=>!m))return;const d=document.createElementNS("http://www.w3.org/2000/svg","svg");d.setAttribute("class","pp-sf"),d.setAttribute("viewBox","0 0 100 100"),d.setAttribute("preserveAspectRatio","none");const u=(m,f,b,w)=>{const $=document.createElementNS("http://www.w3.org/2000/svg","line");$.setAttribute("x1",m),$.setAttribute("y1",f),$.setAttribute("x2",b),$.setAttribute("y2",w),d.appendChild($)};u(c[0][0],c[0][1],c[1][0],c[1][1]),u(c[1][0],c[1][1],c[2][0],c[2][1]),u(c[2][0],c[2][1],c[3][0],c[3][1]),u(c[3][0],c[3][1],c[0][0],c[0][1]);for(let m=0;m<4;m++){const f=document.createElementNS("http://www.w3.org/2000/svg","circle");f.setAttribute("cx",c[m][0]),f.setAttribute("cy",c[m][1]),f.setAttribute("r",m===0?.9:.7),m===0&&f.setAttribute("style","fill:var(--red);opacity:.85"),d.appendChild(f)}o.style.position="relative",o.appendChild(d)}function pa(e){const i=e.querySelector("svg.pp-sf");i&&i.remove()}function ba(){if(ba.done||typeof document>"u"||!document.addEventListener)return;ba.done=!0;const e=i=>{const o=i.closest(".pp-body");if(!o)return;const l=o.querySelector(".pp-detail");if(!l)return;if(i.classList.contains("pp-sel")){Ea(o),pa(o),l.classList.remove("open"),l.innerHTML="";return}Ea(o);const p=Number(i.dataset.pi),c=Number(o.dataset.soul);bt(o,p),o.querySelectorAll(".pp-cell").forEach(u=>{const m=Number(u.dataset.pi);(m===te(p+4)||m===te(p+8)||m===te(p+6))&&u.classList.add("pp-link")}),i.classList.add("pp-sel"),i.setAttribute("aria-expanded","true"),l.innerHTML=ha(p,c),l.classList.add("open")};document.addEventListener("click",i=>{const o=i.target;if(o&&o.closest&&o.closest("[data-pp-close]")){const p=o.closest(".pp-body");if(p){Ea(p),pa(p);const c=p.querySelector(".pp-detail");c&&(c.classList.remove("open"),c.innerHTML="");return}}const l=o&&o.closest?o.closest(".pp-cell[data-pi]"):null;l&&e(l)}),document.addEventListener("keydown",i=>{if(i.key!=="Enter"&&i.key!==" ")return;const o=i.target&&i.target.closest?i.target.closest(".pp-cell[data-pi]"):null;o&&(i.preventDefault(),e(o))})}s.bindZiwei=ba,s._palaceDetailHTML=ha,ba();function Ye(e,i){const o=i||{},l=e.slice().sort((p,c)=>c.position-p.position);return o.plain?l.map(p=>`<div class="mp-hy-row hy-plain">
|
|
1705
|
+
<span class="mp-hy-nm">${p.name||ve[p.position-1]}</span>
|
|
1706
1706
|
${$e(p.yinYang==="阳",p.moving)}
|
|
1707
1707
|
</div>`).join(""):l.map(p=>{const c=p.yinYang==="阳",d=o.shiYing?p.position===o.shi?'<span class="mp-hy-sy">世</span>':p.position===o.ying?'<span class="mp-hy-sy">应</span>':"<span></span>":"<span></span>",u=p.moving?`<i class="mp-hy-mv" title="动爻">${c?"○":"×"}</i>`:'<i class="mp-hy-mv"></i>';return`<div class="mp-hy-row">
|
|
1708
1708
|
${d}
|
|
1709
|
-
<span class="mp-hy-nm">${p.name||
|
|
1709
|
+
<span class="mp-hy-nm">${p.name||ve[p.position-1]}</span>
|
|
1710
1710
|
<span class="mp-hy-ln">${$e(c,p.moving)}${u}</span>
|
|
1711
1711
|
<span class="mp-hy-gz">${t(p.ganzhi||"")}</span>
|
|
1712
1712
|
<span class="mp-hy-lq">${t(p.liuqin||"")}</span>
|
|
1713
1713
|
<span class="mp-hy-ls">${t(p.liushen||"")}</span>
|
|
1714
1714
|
</div>`}).join("")}s.liuyaoHTML=function(e){const i=(T,H,pe,M)=>`<div class="mp-hy-box">
|
|
1715
1715
|
<div class="mp-hy-h"><b>${T}</b><span>${H}</span></div>
|
|
1716
|
-
<div class="mp-hy">${
|
|
1716
|
+
<div class="mp-hy">${Ye(M,{shiYing:!0,shi:pe.shi,ying:pe.ying})}</div>
|
|
1717
1717
|
</div>`,o=i(`本卦 ${e.ben.name}`,`${e.ben.palace} · ${e.ben.palaceElement}`,e.ben,e.ben.lines),l=e.bian?i(`变卦 ${e.bian.name}`,`${e.bian.palace} · ${e.bian.palaceElement}`,e.bian,e.bian.lines):`<div class="mp-hy-box"><div class="mp-hy-h"><b>六爻安静</b><span>无动爻,不取变卦</span></div>
|
|
1718
1718
|
<div class="pp-dim" style="font-size:12px;line-height:1.9">断卦以本卦卦辞与世应生克为主。</div></div>`,p=e.body&&Array.isArray(e.body.labels)?e.body.labels:[],c=p.length?`<div class="pp-chips">${p.map(T=>`<span class="pp-chip ${/伏吟/.test(T)||/反吟/.test(T)||/化退神/.test(T)?"warn":/六冲|散/.test(T)?"":"ok"}">${t(T)}</span>`).join("")}</div>`:'<div class="pp-chips"><span class="pp-chip">卦体无六冲、六合、伏吟、反吟</span></div>',d=e.useGod&&e.useGod.liuqin?e.useGod:null,u=d?`<div class="pp-chips">${d.labels.map(T=>`<span class="pp-chip ${/空亡|退神|受克|泄气|不上卦/.test(T)?"warn":/持世|化进|六合|得飞神生/.test(T)?"ok":""}">${t(T)}</span>`).join("")}</div>`:'<div class="pp-chips"><span class="pp-chip">用神未取(未指明所问之事)</span></div>',m=e.useGodStrength&&Array.isArray(e.useGodStrength.labels)?e.useGodStrength:null,f=m&&m.labels.length?`<div class="pp-chips">${m.labels.map(T=>`<span class="pp-chip ${/死|囚|月破|受日辰克|泄|耗/.test(T)?"warn":/旺|相|得日辰生|比和/.test(T)?"ok":""}">${t(T)}</span>`).join("")}</div>`:"",b=e.fushenAccess&&Array.isArray(e.fushenAccess.labels)?e.fushenAccess:null,w=b&&b.labels.length?`<div class="pp-chips">${b.labels.map(T=>`<span class="pp-chip ${/可出/.test(T)?"ok":/受压难出|有助有压/.test(T)?"warn":""}">伏神${t(T)}</span>`).join("")}</div>`:"",$=e.yingqi&&Array.isArray(e.yingqi.labels)?e.yingqi:null,A=$&&$.labels.length?`<div class="pp-chips">${$.labels.map(T=>`<span class="pp-chip ${/应期偏速/.test(T)?"ok":/应期待解/.test(T)?"warn":""}" title="只列地支,不出日期">${t(T)}</span>`).join("")}</div>`:"",L=e.jinTuiPower&&Array.isArray(e.jinTuiPower.labels)?e.jinTuiPower:null,_=L&&L.labels.length?`<div class="pp-chips">${L.labels.map(T=>`<span class="pp-chip ${/后劲足|退得缓/.test(T)?"ok":/有限|进得虚|退得实|月破|未定/.test(T)?"warn":""}">${t(T)}</span>`).join("")}</div>`:"",Q=e.hexStrength&&Array.isArray(e.hexStrength.labels)?e.hexStrength:null,D=Q&&Q.labels.length?`<div class="pp-chips">${Q.labels.map(T=>`<span class="pp-chip ${/死|囚|月破|冲空/.test(T)?"warn":/旺|相/.test(T)?"ok":""}">${t(T)}</span>`).join("")}</div>`:"";return s.briefHTML(e)+`<div class="pp" style="padding:14px">
|
|
1719
1719
|
<div class="mp-mh-head">起卦 ${e.cast.notation.join("、")}(自下而上) 日辰 ${e.dayGanZhi.name}</div>
|
|
@@ -1731,8 +1731,8 @@ window.__ModuleLoader__.load({id:"dsh-metaphysics",version:"0.72.2",factory(mt){
|
|
|
1731
1731
|
<div class="mp-mh-mini">${H}</div>
|
|
1732
1732
|
<div class="hb-s">${D||`上${_} 下${Q}`}</div>
|
|
1733
1733
|
</div>`},o=e.lines.slice().sort((A,L)=>L.position-A.position),l=o.slice(0,3),p=o.slice(3),c=e.moving>=4,d=(A,L,_,Q)=>`<div class="mp-trib">
|
|
1734
|
-
<div class="mp-trib-h">${A} ${we(L)}${L}${
|
|
1735
|
-
<div class="mp-hy" style="gap:5px">${
|
|
1734
|
+
<div class="mp-trib-h">${A} ${we(L)}${L}${Ha(L)}<span class="mp-tritag ${Q?"tritag-ti":"tritag-yong"}">${Q?"体":"用"}</span></div>
|
|
1735
|
+
<div class="mp-hy" style="gap:5px">${Ye(_,{plain:!0})}</div>
|
|
1736
1736
|
</div>`,u=`<div class="mp-hexbox">
|
|
1737
1737
|
<div class="hb-h"><span>本卦</span><span>动 ${e.movingName}</span></div>
|
|
1738
1738
|
<div class="hb-n">${e.ben.name}</div>
|
|
@@ -1742,7 +1742,7 @@ window.__ModuleLoader__.load({id:"dsh-metaphysics",version:"0.72.2",factory(mt){
|
|
|
1742
1742
|
</div>`,m=e.bodyUse.level,f=m.includes("凶")?"bad":m.includes("吉")?"good":"flat",b=`<div class="mp-mh-rel">
|
|
1743
1743
|
<div><b>体</b>${e.bodyUse.body.trigram}(${e.bodyUse.body.element}) <b>用</b>${e.bodyUse.use.trigram}(${e.bodyUse.use.element})</div>
|
|
1744
1744
|
<div><span class="mh-lv ${f}">${m}</span> ${e.bodyUse.relation}</div>
|
|
1745
|
-
</div>`,w=
|
|
1745
|
+
</div>`,w=Pa(e.cuo.name)||["",""],$=Pa(e.zong.name)||["",""];return s.briefHTML(e)+`<div class="pp mp-mh">
|
|
1746
1746
|
<div class="mp-mh-main">
|
|
1747
1747
|
${u}
|
|
1748
1748
|
${i("互卦",e.hu.name,e.hu.upper,e.hu.lower,"中藏之象")}
|
|
@@ -1751,7 +1751,7 @@ window.__ModuleLoader__.load({id:"dsh-metaphysics",version:"0.72.2",factory(mt){
|
|
|
1751
1751
|
${i("综卦",e.zong.name,$[0],$[1],"整卦倒转")}
|
|
1752
1752
|
</div>
|
|
1753
1753
|
${b}
|
|
1754
|
-
</div>`};const
|
|
1754
|
+
</div>`};const Oa={乾为天:["乾","乾"],天风姤:["乾","巽"],天山遁:["乾","艮"],天地否:["乾","坤"],风地观:["巽","坤"],山地剥:["艮","坤"],火地晋:["离","坤"],火天大有:["离","乾"],坎为水:["坎","坎"],水泽节:["坎","兑"],水雷屯:["坎","震"],水火既济:["坎","离"],泽火革:["兑","离"],雷火丰:["震","离"],地火明夷:["坤","离"],地水师:["坤","坎"],艮为山:["艮","艮"],山火贲:["艮","离"],山天大畜:["艮","乾"],山泽损:["艮","兑"],火泽睽:["离","兑"],天泽履:["乾","兑"],风泽中孚:["巽","兑"],风山渐:["巽","艮"],震为雷:["震","震"],雷地豫:["震","坤"],雷水解:["震","坎"],雷风恒:["震","巽"],地风升:["坤","巽"],水风井:["坎","巽"],泽风大过:["兑","巽"],泽雷随:["兑","震"],巽为风:["巽","巽"],风天小畜:["巽","乾"],风火家人:["巽","离"],风雷益:["巽","震"],天雷无妄:["乾","震"],火雷噬嗑:["离","震"],山雷颐:["艮","震"],山风蛊:["艮","巽"],离为火:["离","离"],火山旅:["离","艮"],火风鼎:["离","巽"],火水未济:["离","坎"],山水蒙:["艮","坎"],风水涣:["巽","坎"],天水讼:["乾","坎"],天火同人:["乾","离"],坤为地:["坤","坤"],地雷复:["坤","震"],地泽临:["坤","兑"],地天泰:["坤","乾"],雷天大壮:["震","乾"],泽天夬:["兑","乾"],水天需:["坎","乾"],水地比:["坎","坤"],兑为泽:["兑","兑"],泽水困:["兑","坎"],泽地萃:["兑","坤"],泽山咸:["兑","艮"],水山蹇:["坎","艮"],地山谦:["坤","艮"],雷山小过:["震","艮"],雷泽归妹:["震","兑"]},ra={乾:"金",兑:"金",离:"火",震:"木",巽:"木",坎:"水",艮:"土",坤:"土"},Ha=e=>ra[e]?` ${ra[e]}`:"",Pa=e=>Oa[e]||null;s.daliurenHTML=function(e){const i=e.sanChuan,o=(u,m)=>`<div class="mp-dl-sc-c">
|
|
1755
1755
|
<div class="mp-dl-sc-k">${m}</div>
|
|
1756
1756
|
<div class="mp-dl-sc-z">${u.zhi}</div>
|
|
1757
1757
|
<div class="mp-dl-sc-j">${u.jiangFull||u.jiang}</div>
|
|
@@ -1801,7 +1801,7 @@ window.__ModuleLoader__.load({id:"dsh-metaphysics",version:"0.72.2",factory(mt){
|
|
|
1801
1801
|
</div>
|
|
1802
1802
|
${e.systemNote?`<div class="mp-tt-tip">${e.systemNote}</div>`:""}
|
|
1803
1803
|
<div class="mp-tt-tip">塔罗用于自我觉察与娱乐,不作确定性预言。</div>
|
|
1804
|
-
</div>`};const
|
|
1804
|
+
</div>`};const Wa=e=>{if(!e||!Array.isArray(e.pairs)||!e.pairs.length)return"";const o='<tr><th scope="col">一对</th><th scope="col">契合度</th>'+(e.pairs[0].dimensions||[]).map(d=>`<th scope="col">${t(d.label)}</th>`).join("")+"</tr>",l=e.pairs.map(d=>`<tr><th scope="row">${t(d.a)} × ${t(d.b)}</th><td>${d.total==null?"—":`${t(d.total)}/100`}<span class="mp-hp-lv">${t(d.level||"")}</span></td>`+(d.dimensions||[]).map(u=>`<td>${u.score>=0?"+":""}${t(u.score)}</td>`).join("")+"</tr>").join(""),p=e.spread>=3&&e.best?`最顺:<b>${t(e.best.a)} × ${t(e.best.b)}</b>(${t(e.best.total)}/100)`+(e.hardest?`;最需磨合:<b>${t(e.hardest.a)} × ${t(e.hardest.b)}</b>(${t(e.hardest.total)}/100)`:""):`三对分数接近(相差 ${t(e.spread)} 分),不排名`,c=e.focus&&e.focus.spread>=3?`<p>差异最大的一维:<b>${t(e.focus.label)}</b>(三对相差 ${t(e.focus.spread)} 分)</p>`:"";return`<div class="mp-hp-triple">
|
|
1805
1805
|
<div class="mp-hp-ith">三方合盘 · 三对并列</div>
|
|
1806
1806
|
<table><thead>${o}</thead><tbody>${l}</tbody></table>
|
|
1807
1807
|
<p>${p}</p>${c}
|
|
@@ -1820,9 +1820,9 @@ window.__ModuleLoader__.load({id:"dsh-metaphysics",version:"0.72.2",factory(mt){
|
|
|
1820
1820
|
<div class="mp-hp-head"><b>${e.score.level}</b><span>${e.score.total}/100</span></div>
|
|
1821
1821
|
<div class="mp-hp-sides">${i(e.a,"你")}${i(e.b,"对方")}</div>
|
|
1822
1822
|
<div class="mp-hp-dims">${o}</div>
|
|
1823
|
-
${
|
|
1823
|
+
${Wa(e.triple)}
|
|
1824
1824
|
<div class="mp-hp-notes">${e.notes.map(l=>`<p>${l}</p>`).join("")}</div>
|
|
1825
|
-
</div>`},s.qimenFactsHTML=function(e){if(!e||!e.palaces)return"";const i=(p,c)=>`<div class="relation__row"><dt>${t(p)}</dt><dd>${t(c)}</dd></div>`,o=p=>p&&["旺","相","休","囚","死"].filter(d=>Array.isArray(p[d])&&p[d].length).map(d=>`${d} ${p[d].join("、")}`).join(";")||"—";return`<dl class="relation mp-qm-facts" aria-label="奇门盘面事实">${[["局数",`${e.ju}${e.yuan?`(${e.yuan})`:""}`],["节气",`${e.jieqi||"—"}${e.jieqiTime?`(${e.jieqiTime})`:""}`],["四柱",`${e.siZhu?`${e.siZhu.year} ${e.siZhu.month} ${e.siZhu.day} ${e.siZhu.time}`:"—"}`],["值符",e.zhiFu?`${e.zhiFu.star} · ${e.zhiFu.gong}宫`:"—"],["值使",e.zhiShi?`${e.zhiShi.gate} · ${e.zhiShi.gong}宫`:"—"],["旬首",e.xunshou||"—"],["空亡",(e.kongWang||[]).join("")||"—"],["驿马",e.ma&&e.ma.zhi?`${e.ma.zhi}${e.ma.gong?`(${e.ma.gong}宫)`:""}`:"—"],["换局规则",e.juMethodNote||e.juMethod||"—"],["晚子时",e.lateZiHourMode==="next-day"?"23:00 后归次日":"23:00 后仍归当日"],["击刑",e.conditions&&e.conditions.jiXing&&e.conditions.jiXing.length?e.conditions.jiXing.map(p=>`${p.palace}宫${p.stem}`).join("、"):"本盘无"],["三奇入墓",e.conditions&&e.conditions.ruMu&&e.conditions.ruMu.length?e.conditions.ruMu.map(p=>`${p.palace}宫${p.stem}`).join("、"):"本盘无"],["六仪入墓",e.conditions&&e.conditions.liuYiRuMu&&e.conditions.liuYiRuMu.length?e.conditions.liuYiRuMu.map(p=>`${p.palace}宫${p.stem}`).join("、"):"本盘无"],["十干克应",[...e.palaces||[],e.centerPalace].filter(c=>c&&c.ganYing).map(c=>`${c.palace}宫 ${c.ganYing.tian}加${c.ganYing.di}「${c.ganYing.name}」`).join(";")||"—"],["月令",e.month&&e.month.branch?`${e.month.branch}(${e.month.element})`:"—"],["门旺衰",o(e.states&&e.states.gate)],["星旺衰",o(e.states&&e.states.star)],["干旺衰",o(e.states&&e.states.stem)],["干宫生克",(()=>{const p=["干克宫","宫克干","干生宫","宫生干","比和"],c={};for(const d of e.palaces||[]){const u=d.stemRelation||null;!u||u.type==="unknown"||!d.tianPan||(c[u.type]=c[u.type]||[]).push(d.tianPan)}return p.filter(d=>c[d]).map(d=>d+" "+c[d].join("、")).join(";")||"—"})()]].map(([p,c])=>i(p,c)).join("")}</dl>`};const
|
|
1825
|
+
</div>`},s.qimenFactsHTML=function(e){if(!e||!e.palaces)return"";const i=(p,c)=>`<div class="relation__row"><dt>${t(p)}</dt><dd>${t(c)}</dd></div>`,o=p=>p&&["旺","相","休","囚","死"].filter(d=>Array.isArray(p[d])&&p[d].length).map(d=>`${d} ${p[d].join("、")}`).join(";")||"—";return`<dl class="relation mp-qm-facts" aria-label="奇门盘面事实">${[["局数",`${e.ju}${e.yuan?`(${e.yuan})`:""}`],["节气",`${e.jieqi||"—"}${e.jieqiTime?`(${e.jieqiTime})`:""}`],["四柱",`${e.siZhu?`${e.siZhu.year} ${e.siZhu.month} ${e.siZhu.day} ${e.siZhu.time}`:"—"}`],["值符",e.zhiFu?`${e.zhiFu.star} · ${e.zhiFu.gong}宫`:"—"],["值使",e.zhiShi?`${e.zhiShi.gate} · ${e.zhiShi.gong}宫`:"—"],["旬首",e.xunshou||"—"],["空亡",(e.kongWang||[]).join("")||"—"],["驿马",e.ma&&e.ma.zhi?`${e.ma.zhi}${e.ma.gong?`(${e.ma.gong}宫)`:""}`:"—"],["换局规则",e.juMethodNote||e.juMethod||"—"],["晚子时",e.lateZiHourMode==="next-day"?"23:00 后归次日":"23:00 后仍归当日"],["击刑",e.conditions&&e.conditions.jiXing&&e.conditions.jiXing.length?e.conditions.jiXing.map(p=>`${p.palace}宫${p.stem}`).join("、"):"本盘无"],["三奇入墓",e.conditions&&e.conditions.ruMu&&e.conditions.ruMu.length?e.conditions.ruMu.map(p=>`${p.palace}宫${p.stem}`).join("、"):"本盘无"],["六仪入墓",e.conditions&&e.conditions.liuYiRuMu&&e.conditions.liuYiRuMu.length?e.conditions.liuYiRuMu.map(p=>`${p.palace}宫${p.stem}`).join("、"):"本盘无"],["十干克应",[...e.palaces||[],e.centerPalace].filter(c=>c&&c.ganYing).map(c=>`${c.palace}宫 ${c.ganYing.tian}加${c.ganYing.di}「${c.ganYing.name}」`).join(";")||"—"],["月令",e.month&&e.month.branch?`${e.month.branch}(${e.month.element})`:"—"],["门旺衰",o(e.states&&e.states.gate)],["星旺衰",o(e.states&&e.states.star)],["干旺衰",o(e.states&&e.states.stem)],["干宫生克",(()=>{const p=["干克宫","宫克干","干生宫","宫生干","比和"],c={};for(const d of e.palaces||[]){const u=d.stemRelation||null;!u||u.type==="unknown"||!d.tianPan||(c[u.type]=c[u.type]||[]).push(d.tianPan)}return p.filter(d=>c[d]).map(d=>d+" "+c[d].join("、")).join(";")||"—"})()]].map(([p,c])=>i(p,c)).join("")}</dl>`};const Qa=[["4","9","2"],["3","5","7"],["8","1","6"]];s.qimenHTML=function(e){const i={};for(const l of e.palaces)i[l.palace]=l;const o=l=>{if(l==="5")return`<div class="pp-qm-cell center">
|
|
1826
1826
|
<div class="pp-qm-ju">${e.ju}</div>
|
|
1827
1827
|
<div class="pp-qm-kv">${e.siZhu.year} ${e.siZhu.month}</div>
|
|
1828
1828
|
<div class="pp-qm-kv">${e.siZhu.day} ${e.siZhu.time}</div>
|
|
@@ -1842,7 +1842,7 @@ window.__ModuleLoader__.load({id:"dsh-metaphysics",version:"0.72.2",factory(mt){
|
|
|
1842
1842
|
<span>值符 ${e.zhiFu.star}(${e.zhiFu.gong}宫) 值使 ${e.zhiShi.gate}(${e.zhiShi.gong}宫)</span>
|
|
1843
1843
|
<span>旬首 ${e.xunshou} 空亡 ${e.kongWang.join("")||"—"} 驿马 ${e.ma.zhi||"—"}</span>
|
|
1844
1844
|
</div>
|
|
1845
|
-
<div class="mp-qm-grid">${
|
|
1845
|
+
<div class="mp-qm-grid">${Qa.map(l=>l.map(o).join("")).join("")}</div>
|
|
1846
1846
|
<div class="mp-qm-legend">上=九星 中=天盘干/八门 下=地盘干/宫号 角落=八神</div>
|
|
1847
1847
|
<div class="mp-qm-rules">${e.rules.map(l=>`<p>${l}</p>`).join("")}</div>
|
|
1848
1848
|
</div>`},s.ziweiHepanHTML=function(e){const i=(p,c)=>`<div class="mp-hp-side">
|
|
@@ -1864,9 +1864,9 @@ window.__ModuleLoader__.load({id:"dsh-metaphysics",version:"0.72.2",factory(mt){
|
|
|
1864
1864
|
<div><div class="mp-hp-ith">你的四化 落在对方</div><ul>${l("你")||"<li>无</li>"}</ul></div>
|
|
1865
1865
|
<div><div class="mp-hp-ith">对方的四化 落在你</div><ul>${l("对方")||"<li>无</li>"}</ul></div>
|
|
1866
1866
|
</div>
|
|
1867
|
-
${
|
|
1867
|
+
${Wa(e.triple)}
|
|
1868
1868
|
<div class="mp-hp-notes">${e.notes.map(p=>`<p>${p}</p>`).join("")}</div>
|
|
1869
|
-
</div>`},s.curveHTML=function(e){const i=e&&e.dayun&&Array.isArray(e.dayun.list)?e.dayun.list:[],o=e&&Array.isArray(e.liunian)?e.liunian:[];if(i.length<2)return"";const l=v=>typeof v=="number"&&isFinite(v)?v:0,p=v=>v.luck?l(v.luck.score):0,c=4.2,d=-2.2,u=l(e.dayun.startAge&&e.dayun.startAge.years),m=i.length?i[i.length-1].startAge+10:u+80,f=o.map(v=>l(v.age)).filter(v=>v>0),b=Math.min(u,...f.length?f:[u]),w=Math.max(m,...f.length?f:[m]),$=Math.max(1,w-b),A=640,L=190,_={t:14,r:16,b:26,l:30},Q=A-_.l-_.r,D=L-_.t-_.b,T=v=>_.l+(v-b)/$*Q,H=v=>_.t+D-(Math.max(d,Math.min(c,v))-d)/(c-d)*D,M=[{from:1.2,to:c,cls:"b-good"},{from:.55,to:1.2,cls:"b-good"},{from:-.8,to:.55,cls:"b-flat"},{from:-1.45,to:-.8,cls:"b-bad"},{from:d,to:-1.45,cls:"b-bad"}].map(v=>`<rect class="cv-band ${v.cls}" x="${_.l}" y="${H(v.to).toFixed(1)}" width="${Q}" height="${(H(v.from)-H(v.to)).toFixed(1)}"/>`).join(""),B=10/$*Q,y=[];i.forEach((v,ce)=>{const me=l(v.startAge),Ce=p(v),
|
|
1869
|
+
</div>`},s.curveHTML=function(e){const i=e&&e.dayun&&Array.isArray(e.dayun.list)?e.dayun.list:[],o=e&&Array.isArray(e.liunian)?e.liunian:[];if(i.length<2)return"";const l=v=>typeof v=="number"&&isFinite(v)?v:0,p=v=>v.luck?l(v.luck.score):0,c=4.2,d=-2.2,u=l(e.dayun.startAge&&e.dayun.startAge.years),m=i.length?i[i.length-1].startAge+10:u+80,f=o.map(v=>l(v.age)).filter(v=>v>0),b=Math.min(u,...f.length?f:[u]),w=Math.max(m,...f.length?f:[m]),$=Math.max(1,w-b),A=640,L=190,_={t:14,r:16,b:26,l:30},Q=A-_.l-_.r,D=L-_.t-_.b,T=v=>_.l+(v-b)/$*Q,H=v=>_.t+D-(Math.max(d,Math.min(c,v))-d)/(c-d)*D,M=[{from:1.2,to:c,cls:"b-good"},{from:.55,to:1.2,cls:"b-good"},{from:-.8,to:.55,cls:"b-flat"},{from:-1.45,to:-.8,cls:"b-bad"},{from:d,to:-1.45,cls:"b-bad"}].map(v=>`<rect class="cv-band ${v.cls}" x="${_.l}" y="${H(v.to).toFixed(1)}" width="${Q}" height="${(H(v.from)-H(v.to)).toFixed(1)}"/>`).join(""),B=10/$*Q,y=[];i.forEach((v,ce)=>{const me=l(v.startAge),Ce=p(v),Se=Math.max(_.l,T(me)),ze=Math.min(_.l+Q,T(me+10));y.push(`${Se.toFixed(1)},${H(Ce).toFixed(1)}`),y.push(`${ze.toFixed(1)},${H(Ce).toFixed(1)}`)});const he=y.length?`<polyline class="cv-dy" points="${y.join(" ")}"/>`:"",W=y.length?`<polygon class="cv-dyfill" points="${_.l},${(_.t+D).toFixed(1)} ${y.join(" ")} ${(_.l+Q).toFixed(1)},${(_.t+D).toFixed(1)}"/>`:"",ie=o.filter(v=>v.luck&&typeof v.luck.score=="number").map(v=>({x:T(l(v.age)),y:H(l(v.luck.score)),y0:l(v.year),gz:v.ganzhi,tier:v.luck.tier,v:l(v.luck.score),age:l(v.age)})),j=ie.length>1?`<polyline class="cv-ln" points="${ie.map(v=>`${v.x.toFixed(1)},${v.y.toFixed(1)}`).join(" ")}"/>`:"",k={大吉:"var(--lu)",吉:"var(--lu)",平:"var(--muted)",忌:"var(--red)",大忌:"var(--red)"},C=ie.length?Math.min(...ie.map(v=>v.y0)):null,O=ie.map(v=>`<circle class="cv-dot${v.y0===C?" now":""}" cx="${v.x.toFixed(1)}" cy="${v.y.toFixed(1)}" fill="${k[v.tier]||"var(--muted)"}"><title>${t(`${v.y0}年(${v.age}岁)${v.gz} ${v.tier} ${v.v}`)}</title></circle>`).join(""),oe=`<line class="cv-ax zero" x1="${_.l}" y1="${H(0).toFixed(1)}" x2="${_.l+Q}" y2="${H(0).toFixed(1)}"/><line class="cv-ax" x1="${_.l}" y1="${_.t}" x2="${_.l}" y2="${_.t+D}"/>`,ge=$>60?10:5,de=[];for(let v=Math.ceil(b/ge)*ge;v<=w;v+=ge)de.push(`<text class="cv-lbl age" x="${T(v).toFixed(1)}" y="${(_.t+D+13).toFixed(1)}" text-anchor="middle">${v}岁</text>`);const ke=`<text class="cv-lbl" x="${(_.l-5).toFixed(1)}" y="${(H(2.4)+3).toFixed(1)}" text-anchor="end">吉</text><text class="cv-lbl" x="${(_.l-5).toFixed(1)}" y="${(H(0)+3).toFixed(1)}" text-anchor="end">平</text><text class="cv-lbl" x="${(_.l-5).toFixed(1)}" y="${(H(-1.8)+3).toFixed(1)}" text-anchor="end">忌</text>`,ye=i.slice().sort((v,ce)=>p(ce)-p(v)),P=ye[0],U=ye[ye.length-1],J=P&&p(P)>.55?`<text class="cv-lbl" x="${T(l(P.startAge)+5).toFixed(1)}" y="${(H(p(P))-5).toFixed(1)}" text-anchor="middle">▲${P.startAge}岁 ${P.luck.tier}</text>`:"",fe=U&&p(U)<-.8?`<text class="cv-lbl" x="${T(l(U.startAge)+5).toFixed(1)}" y="${(H(p(U))+11).toFixed(1)}" text-anchor="middle">▼${U.startAge}岁 ${U.luck.tier}</text>`:"",be=`<div class="cv-legend">
|
|
1870
1870
|
<span><i style="background:var(--quan)"></i>大运(阶梯,一步十年)</span>
|
|
1871
1871
|
<span><i style="background:var(--ke)"></i>流年(逐年折线)</span>
|
|
1872
1872
|
<span>绿带=吉 灰带=平 红带=忌</span>
|
|
@@ -1876,7 +1876,7 @@ window.__ModuleLoader__.load({id:"dsh-metaphysics",version:"0.72.2",factory(mt){
|
|
|
1876
1876
|
${M}${oe}${W}${he}${j}${O}${de.join("")}${ke}${J}${fe}
|
|
1877
1877
|
</svg>
|
|
1878
1878
|
${be}${x}
|
|
1879
|
-
</div>`},s.trendChart=function(e){const i=e&&Array.isArray(e.points)?e.points:[];if(i.length<2)return"";const o=e&&Array.isArray(e.segments)?e.segments:[],l=P=>typeof P=="number"&&isFinite(P)?P:0,p=720,c=322,d={t:34,r:46,b:66,l:36},u=p-d.l-d.r,m=c-d.t-d.b,f=i.length,b=u/f,w=P=>d.l+(P+.5)*b,$=P=>d.t+m-Math.max(0,Math.min(100,P))/100*m,A=Math.max(1.1,Math.min(10,b*.62)),L=P=>l(P.score),_=d.t+m,Q=_+20,D=22,H=`klclip${(()=>{let P=2166136261;const U=J=>{const fe=String(J??"");for(let be=0;be<fe.length;be++)P^=fe.charCodeAt(be),P=Math.imul(P,16777619)};U(f),U(i[0]&&i[0].age),U(i[f-1]&&i[f-1].age);for(const J of i)U(J&&J.score);return(P>>>0).toString(36)})()}`,pe=o.map((P,U)=>{const J=Math.max(0,P.startAge-1),fe=Math.min(f-1,P.endAge-1);if(fe<J)return"";const be=d.l+J*b,x=Math.max(.6,(fe-J+1)*b),ce=U%2===1?`<rect class="kl-band" x="${be.toFixed(1)}" y="${d.t}" width="${x.toFixed(1)}" height="${m}"/><rect class="kl-stripband" x="${be.toFixed(1)}" y="${Q}" width="${x.toFixed(1)}" height="${D}"/>`:"",me=U===0?"":`<line class="kl-segline" x1="${be.toFixed(1)}" y1="${d.t}" x2="${be.toFixed(1)}" y2="${_}"/>`,Ce=Math.min(Math.max(d.l+(J+fe+1)/2*b,d.l+22),d.l+u-22);return ce+me+`<text class="kl-seg" x="${Ce.toFixed(1)}" y="${(Q+15).toFixed(1)}" text-anchor="middle">${t(P.ganZhi)}</text>`}).join(""),M=[0,25,50,75,100].map(P=>`<line class="kl-grid${P===50?" mid":""}" x1="${d.l}" y1="${$(P).toFixed(1)}" x2="${d.l+u}" y2="${$(P).toFixed(1)}"/><text class="kl-lbl" x="${d.l-6}" y="${($(P)+3).toFixed(1)}" text-anchor="end">${P}</text>`).join(""),B=i.map((P,U)=>{const J=P.kline||{},fe=l(J.open),be=l(J.close),x=Math.min(100,l(J.high)),v=Math.max(0,l(J.low)),ce=be>=fe,me=$(fe),Ce=$(be),
|
|
1879
|
+
</div>`},s.trendChart=function(e){const i=e&&Array.isArray(e.points)?e.points:[];if(i.length<2)return"";const o=e&&Array.isArray(e.segments)?e.segments:[],l=P=>typeof P=="number"&&isFinite(P)?P:0,p=720,c=322,d={t:34,r:46,b:66,l:36},u=p-d.l-d.r,m=c-d.t-d.b,f=i.length,b=u/f,w=P=>d.l+(P+.5)*b,$=P=>d.t+m-Math.max(0,Math.min(100,P))/100*m,A=Math.max(1.1,Math.min(10,b*.62)),L=P=>l(P.score),_=d.t+m,Q=_+20,D=22,H=`klclip${(()=>{let P=2166136261;const U=J=>{const fe=String(J??"");for(let be=0;be<fe.length;be++)P^=fe.charCodeAt(be),P=Math.imul(P,16777619)};U(f),U(i[0]&&i[0].age),U(i[f-1]&&i[f-1].age);for(const J of i)U(J&&J.score);return(P>>>0).toString(36)})()}`,pe=o.map((P,U)=>{const J=Math.max(0,P.startAge-1),fe=Math.min(f-1,P.endAge-1);if(fe<J)return"";const be=d.l+J*b,x=Math.max(.6,(fe-J+1)*b),ce=U%2===1?`<rect class="kl-band" x="${be.toFixed(1)}" y="${d.t}" width="${x.toFixed(1)}" height="${m}"/><rect class="kl-stripband" x="${be.toFixed(1)}" y="${Q}" width="${x.toFixed(1)}" height="${D}"/>`:"",me=U===0?"":`<line class="kl-segline" x1="${be.toFixed(1)}" y1="${d.t}" x2="${be.toFixed(1)}" y2="${_}"/>`,Ce=Math.min(Math.max(d.l+(J+fe+1)/2*b,d.l+22),d.l+u-22);return ce+me+`<text class="kl-seg" x="${Ce.toFixed(1)}" y="${(Q+15).toFixed(1)}" text-anchor="middle">${t(P.ganZhi)}</text>`}).join(""),M=[0,25,50,75,100].map(P=>`<line class="kl-grid${P===50?" mid":""}" x1="${d.l}" y1="${$(P).toFixed(1)}" x2="${d.l+u}" y2="${$(P).toFixed(1)}"/><text class="kl-lbl" x="${d.l-6}" y="${($(P)+3).toFixed(1)}" text-anchor="end">${P}</text>`).join(""),B=i.map((P,U)=>{const J=P.kline||{},fe=l(J.open),be=l(J.close),x=Math.min(100,l(J.high)),v=Math.max(0,l(J.low)),ce=be>=fe,me=$(fe),Ce=$(be),Se=Math.min(me,Ce),ze=Math.max(.8,Math.abs(me-Ce)),Je=w(U),ma=`${P.age}岁(${P.year}年 ${P.ganZhi})${be}分${P.dayunGanZhi?` · ${P.dayunGanZhi}运`:""}`;return`<g class="kl-c${ce?" up":" down"}"><title>${t(ma)}</title><line x1="${Je.toFixed(2)}" y1="${$(x).toFixed(1)}" x2="${Je.toFixed(2)}" y2="${$(v).toFixed(1)}"/><rect x="${(Je-A/2).toFixed(2)}" y="${Se.toFixed(1)}" width="${A.toFixed(2)}" height="${ze.toFixed(1)}" rx="0.7"/></g>`}).join(""),y=P=>{const U=[];for(let J=0;J<f;J++){if(J+1<P)continue;let fe=0;for(let be=J+1-P;be<=J;be++)fe+=L(i[be]);U.push({i:J,v:fe/P})}return U},he=P=>y(P).map((U,J)=>`${J?"L":"M"}${w(U.i).toFixed(1)} ${$(U.v).toFixed(1)}`).join(" "),W=(P,U)=>{const J=y(P);if(!J.length)return"";const fe=J[J.length-1];return{cls:U,y:$(fe.v),text:`<text class="kl-ma-lbl ${U}" x="${d.l+u+5}" y="${$(fe.v).toFixed(1)}" text-anchor="start">${fe.v.toFixed(0)}</text>`}},ie=W(10,"m10"),j=W(5,"m5"),k=(()=>{if(!j||!ie)return`${ie?ie.text:""}${j?j.text:""}`;let P=j.y,U=ie.y;if(Math.abs(P-U)<10){const J=Math.min(P,U),fe=Math.max(P,U);P=J-6,U=fe+6}return`<text class="kl-ma-lbl m10" x="${d.l+u+5}" y="${U.toFixed(1)}" text-anchor="start">${y(10).slice(-1)[0].v.toFixed(0)}</text><text class="kl-ma-lbl m5" x="${d.l+u+5}" y="${P.toFixed(1)}" text-anchor="start">${y(5).slice(-1)[0].v.toFixed(0)}</text>`})();let C=i[0],O=i[0];for(const P of i)L(P)>L(C)&&(C=P),L(P)<L(O)&&(O=P);const oe=(P,U,J)=>{const fe=i.indexOf(P),be=w(fe),x=$(L(P)),v=Math.min(Math.max(be,d.l+26),d.l+u-26),ce=U==="hi"?x-8<d.t+6?14:J:x+12>d.t+m-2?-8:J;return`<g class="kl-mark ${U}"><circle cx="${be.toFixed(1)}" cy="${x.toFixed(1)}" r="2"/><circle class="ring" cx="${be.toFixed(1)}" cy="${x.toFixed(1)}" r="4.6"/><text x="${v.toFixed(1)}" y="${(x+ce).toFixed(1)}" text-anchor="middle">${P.age}岁 ${L(P)}</text></g>`},ge=f>60?10:5,de=i.filter(P=>P.age%ge===0).map(P=>`<text class="kl-lbl age" x="${w(i.indexOf(P)).toFixed(1)}" y="${(_+14).toFixed(1)}" text-anchor="middle">${P.age}</text>`).join(""),ke=`<text class="kl-lbl axis" x="${d.l}" y="${(c-6).toFixed(1)}">年龄(岁)</text><text class="kl-lbl axis" x="${d.l+u}" y="${(c-6).toFixed(1)}" text-anchor="end">每岁一分 · 满分 100</text>`;return`<div class="mp-kline-fig">
|
|
1880
1880
|
<svg viewBox="0 0 ${p} ${c}" role="img" aria-label="人生K线:1 到 ${f} 岁的逐年评分蜡烛图">
|
|
1881
1881
|
<defs><clipPath id="${H}"><rect x="${d.l}" y="${d.t}" width="${u}" height="${m}"/></clipPath></defs>
|
|
1882
1882
|
${pe}${M}
|
|
@@ -1937,18 +1937,18 @@ window.__ModuleLoader__.load({id:"dsh-metaphysics",version:"0.72.2",factory(mt){
|
|
|
1937
1937
|
<div class="pp-tl">喜 ${H.yongshen.favor.map(d).join("")} 忌 ${H.yongshen.avoid.map(d).join("")} <span class="pp-dim">${t(H.yongshen.method)}</span></div>
|
|
1938
1938
|
<div class="pp-chips">${H.yongshen.favorTenGods.map(x=>`<span class="pp-chip ok">${t(x)}</span>`).join("")}${y}</div>
|
|
1939
1939
|
${(H.yongshen.disputed||[]).length?`<div class="pp-tl pp-dim">有争议:${H.yongshen.disputed.map(x=>`${t(x.element)}(扶抑为${t(x.favorRole)}·${t(x.favorVerb)},${t(x.climate)}盘调候忌${t(x.element)})`).join("、")} 保留在喜用,不列入忌</div>`:""}
|
|
1940
|
-
<div class="pp-tl pp-dim">${t(H.yongshen.detail)}</div>`:"",W=e.climate||H.yongshen&&H.yongshen.climate||null,ie=W?(()=>{const x=Math.max(2,Math.min(98,Math.round(((Number(W.temp)||0)+3)/6*100))),v=W.need?`<em>调候取</em><b>${t(W.need.stem+W.need.element)}</b>`:"<em>气候平和</em>",ce=!!(H.yongshen&&Array.isArray(H.yongshen.disputed))&&H.yongshen.disputed.some(
|
|
1940
|
+
<div class="pp-tl pp-dim">${t(H.yongshen.detail)}</div>`:"",W=e.climate||H.yongshen&&H.yongshen.climate||null,ie=W?(()=>{const x=Math.max(2,Math.min(98,Math.round(((Number(W.temp)||0)+3)/6*100))),v=W.need?`<em>调候取</em><b>${t(W.need.stem+W.need.element)}</b>`:"<em>气候平和</em>",ce=!!(H.yongshen&&Array.isArray(H.yongshen.disputed))&&H.yongshen.disputed.some(ma=>ma.element===W.avoidElement),me=W.need?`<em>忌</em><b>${t(W.avoidElement)}</b>${ce?'<span class="pp-dim">(有争议)</span>':""}`:"",Ce=(W.evidence||[]).length?`<em>依据</em><span>${t(W.evidence.join("、"))}</span>`:"",Se=W.priority==="调候优先"?'<span class="mp-cli-p">调候优先</span>':'<span class="mp-cli-p">扶抑为主</span>',ze=e.frame&&e.frame.yongshen&&e.frame.yongshen.qt,Je=ze?`<div class="mp-qt">
|
|
1941
1941
|
<div class="mp-qt-h"><b>穷通宝鉴</b><span>${t(ze.label)}</span></div>
|
|
1942
|
-
<div class="mp-qt-y"><em>用神</em>${ze.yong.map((
|
|
1942
|
+
<div class="mp-qt-y"><em>用神</em>${ze.yong.map((ma,kt)=>`<b class="${kt===0?"first":""}">${t(ma)}</b>`).join("")}<em>首取 ${t(ze.primary)}</em></div>
|
|
1943
1943
|
<div class="mp-qt-q" title="${t(ze.quote)}">「${t(ze.quote)}」<span>第 ${ze.chapter} 章${ze.truncated?" · 首段更长,摘句下略":""}${ze.note?" · "+t(ze.note):""}</span></div>
|
|
1944
1944
|
</div>`:"";return`<section class="mp-cli" aria-label="寒暖燥湿">
|
|
1945
|
-
<div class="mp-cli-h"><b>寒暖燥湿</b><span class="mp-cli-k">${t(W.label||"")}</span>${
|
|
1945
|
+
<div class="mp-cli-h"><b>寒暖燥湿</b><span class="mp-cli-k">${t(W.label||"")}</span>${Se}</div>
|
|
1946
1946
|
<div class="mp-cli-bar" title="寒 ← → 热"><i style="left:${x}%"></i></div>
|
|
1947
1947
|
<div class="mp-cli-axis"><span>寒</span><span>平</span><span>热</span></div>
|
|
1948
1948
|
<div class="mp-cli-row">${v}${me}${Ce}</div>
|
|
1949
1949
|
<div class="mp-cli-narr">${t(W.narration||"")}</div>
|
|
1950
|
-
${
|
|
1951
|
-
</section>`})():"",j=H.godStats?`<div class="pp-chips">${Object.entries(H.godStats.groups).map(([x,v])=>`<span class="pp-chip">${x} ${v}</span>`).join("")}</div>`:"",k=e.dayun.list.map(x=>{const v=x.luck||null;return`<span class="pp-chip ${v?pe(v.tier):""}" title="${t(`${x.fromDate?`${x.fromDate} 交运;`:""}${v?`${v.tier} ${v.score}|${(v.reasons||[]).join(";")}`:""}`)}">${x.startAge} ${x.ganzhi}${x.relations&&x.relations.length?` <i class="pp-drel">${x.relations.join("")}</i>`:""}${v?` ${v.tier}`:""}</span>`}).join(""),C=e.liunian&&e.liunian.length?`<div class="pp-chips">${e.liunian.slice(0,8).map(x=>{const v=x.luck||null,ce=x.suiyun&&Array.isArray(x.suiyun.signals)?x.suiyun.signals:[],me=ce.length?`|${ce.map(Ce=>Ce.detail).join(";")}`:"";return`<span class="pp-chip ${v?pe(v.tier):""}" title="${t(v?`${v.tier} ${v.score}|${(v.reasons||[]).join(";")}${me}`:me.replace(/^|/,""))}">${x.year} ${x.ganzhi}${v?` ${v.tier}`:""}</span>`}).join("")}</div>`:"",O=(e.liunian||[]).filter(x=>x.suiyun&&Array.isArray(x.suiyun.signals)&&x.suiyun.signals.length),oe=e.suiyunClassic,ge=oe?`<div class="pp-dim pp-sy-src" title="${t(oe.plain||"")}">《${t(oe.bookName||"")}·${t(oe.chapter||"")}》「${t(oe.quote||"")}」</div>`:"",de=O.length?`<div class="pp-tl pp-dim">岁运提示(只标干支变动,不判吉凶)</div><div class="pp-chips">${O.map(x=>`<span class="pp-chip" title="${t(`${x.suiyun.signals.map(v=>v.detail).join(";")}|${x.suiyun.note||""}`)}">${x.year} ${t(x.suiyun.signals.map(v=>`${v.type}${(v.type.startsWith("流年")||v.type.startsWith("大运"))&&v.target?`·${v.target}`:""}`).join("/"))}</span>`).join("")}</div>${ge}`:"",ke=e.strength?`<div class="pp-str">日主强弱:<b>${e.strength.level}</b>${e.strength.score} <span class="pp-dim">${e.strength.detail}</span></div>`:"",
|
|
1950
|
+
${Je}
|
|
1951
|
+
</section>`})():"",j=H.godStats?`<div class="pp-chips">${Object.entries(H.godStats.groups).map(([x,v])=>`<span class="pp-chip">${x} ${v}</span>`).join("")}</div>`:"",k=e.dayun.list.map(x=>{const v=x.luck||null;return`<span class="pp-chip ${v?pe(v.tier):""}" title="${t(`${x.fromDate?`${x.fromDate} 交运;`:""}${v?`${v.tier} ${v.score}|${(v.reasons||[]).join(";")}`:""}`)}">${x.startAge} ${x.ganzhi}${x.relations&&x.relations.length?` <i class="pp-drel">${x.relations.join("")}</i>`:""}${v?` ${v.tier}`:""}</span>`}).join(""),C=e.liunian&&e.liunian.length?`<div class="pp-chips">${e.liunian.slice(0,8).map(x=>{const v=x.luck||null,ce=x.suiyun&&Array.isArray(x.suiyun.signals)?x.suiyun.signals:[],me=ce.length?`|${ce.map(Ce=>Ce.detail).join(";")}`:"";return`<span class="pp-chip ${v?pe(v.tier):""}" title="${t(v?`${v.tier} ${v.score}|${(v.reasons||[]).join(";")}${me}`:me.replace(/^|/,""))}">${x.year} ${x.ganzhi}${v?` ${v.tier}`:""}</span>`}).join("")}</div>`:"",O=(e.liunian||[]).filter(x=>x.suiyun&&Array.isArray(x.suiyun.signals)&&x.suiyun.signals.length),oe=e.suiyunClassic,ge=oe?`<div class="pp-dim pp-sy-src" title="${t(oe.plain||"")}">《${t(oe.bookName||"")}·${t(oe.chapter||"")}》「${t(oe.quote||"")}」</div>`:"",de=O.length?`<div class="pp-tl pp-dim">岁运提示(只标干支变动,不判吉凶)</div><div class="pp-chips">${O.map(x=>`<span class="pp-chip" title="${t(`${x.suiyun.signals.map(v=>v.detail).join(";")}|${x.suiyun.note||""}`)}">${x.year} ${t(x.suiyun.signals.map(v=>`${v.type}${(v.type.startsWith("流年")||v.type.startsWith("大运"))&&v.target?`·${v.target}`:""}`).join("/"))}</span>`).join("")}</div>${ge}`:"",ke=e.strength?`<div class="pp-str">日主强弱:<b>${e.strength.level}</b>${e.strength.score} <span class="pp-dim">${e.strength.detail}</span></div>`:"",ye=e.strength&&e.strength.branchStructure,P=ye?(()=>{const x=ye.branches.map(Se=>`${t(Se.label)}${t(Se.branch)}<i class="pp-drel">·${t(Se.camp)}</i>${ye.placeholderHour&&Se.key==="hour"?'<span class="pp-dim">占位</span>':""}`).join(" "),v=ye.odd&&ye.odd.length?`<span class="pp-st-odd">异类 ${ye.odd.map(Se=>`${t(Se.label)}${t(Se.branch)}(${Se.weight}分)`).join("、")}</span>`:'<span class="pp-st-odd">无异类</span>',ce=ye.congProb!=null?` 从格 ${t(ye.congRange)}`:" 不套从格概率",me=ye.balance||{},Ce=me.branch?` 支 ${me.branch.A}:${me.branch.B} 合干 ${me.total?`${me.total.A}:${me.total.B}`:"—"}`:"";return`<div class="pp-struct" title="${t(`${ye.method};${ye.note}`)}"><span class="pp-st-code">${t(ye.code)}</span>${x} ${v}${ce}${Ce}<span class="pp-dim"> 静态结构,只作标注,不改上面的旺衰评分</span></div>`})():"",U=e.relations&&Array.isArray(e.relations.anhe)?e.relations.anhe:[],J=U.length?`<div class="pp-anhe" title="${t(e.relations.anheNote||"")}"><b>暗合</b>${U.map(x=>t(x)).join(" ")}<span class="pp-dim"> 另列,不并入上面的合冲刑害;${U.length===1?"只一对,按口径可忽略":`共 ${U.length} 对`}</span></div>`:"",fe=e.shensha&&e.shensha.groups||[],be=fe.length?`
|
|
1952
1952
|
<div class="pp-ssx">
|
|
1953
1953
|
<div class="ssx-h"><b>神煞全览</b><span>共 ${e.shensha.count} 见 · ${fe.length} 类 · 悬停看查法</span></div>
|
|
1954
1954
|
${fe.map(x=>`<div class="pp-ssg"><span class="ssg-gt">${x.cat}</span><span class="ssg-gi">${x.items.map(v=>`<span class="pp-ssi ${v.luck||"neutral"}" title="${t(`${v.via}查${v.target} | ${v.rule}`)}">${v.name}<em>${v.pillars.map(ce=>o[ce]||"").join("")}</em></span>`).join("")}</span></div>`).join("")}
|
|
@@ -1984,7 +1984,7 @@ window.__ModuleLoader__.load({id:"dsh-metaphysics",version:"0.72.2",factory(mt){
|
|
|
1984
1984
|
</div>`):""}
|
|
1985
1985
|
${be}
|
|
1986
1986
|
<div style="margin-top:8px;font-size:12px;color:var(--muted)">上一节 ${e.jieqi.previous.name} ${e.jieqi.previous.time} 下一节 ${e.jieqi.next.name} ${e.jieqi.next.time} ${e.dayun.rule},${e.dayun.startAge.years}岁起运${e.dayun.jiao&&e.dayun.jiao.at?`(交运 ${e.dayun.jiao.at},${e.dayun.jiao.frame})`:""}${e.dayun.startAgeExact&&Number.isInteger(e.dayun.startAgeExact.years)?` 精确 ${e.dayun.startAgeExact.years}年${e.dayun.startAgeExact.months}月${e.dayun.startAgeExact.days}天${e.dayun.startAgeExact.hours}时(截断到日时;上面是四舍五入到月)`:""}</div>
|
|
1987
|
-
</div>`};const
|
|
1987
|
+
</div>`};const It={natal:"命盘解析",divination:"卦象解析",card:"牌阵解析"},la={同向:"good",有张力:"watch",互补:"alt"},Bt=e=>`<div class="mp-cross">${e.map(i=>{const o=la[i.stance]||"plain";return`<div class="mp-cross-row">
|
|
1988
1988
|
<div class="mp-cross-h"><span class="mp-cross-l">${t(i.label)}</span><span class="mp-cross-tag t-${o}">${t(i.stance||"—")}</span></div>
|
|
1989
1989
|
<div class="mp-cross-b">
|
|
1990
1990
|
<div class="mp-cross-cell"><b>八字</b><span>${t(i.bazi||"—")}</span></div>
|
|
@@ -2007,8 +2007,8 @@ window.__ModuleLoader__.load({id:"dsh-metaphysics",version:"0.72.2",factory(mt){
|
|
|
2007
2007
|
</div>`).join("")}</div>`:"",f=y=>String(y||"").split(`
|
|
2008
2008
|
`).map(he=>`<div class="mp-it-p">${t(he).replace(/\*\*([^*]+)\*\*/g,"<b>$1</b>")}</div>`).join(""),b=e.sections&&e.sections.length?`<div class="mp-it-secs">${e.sections.map(y=>`<div class="mp-it-sec${y.tone?` tone-${t(y.tone)}`:""}" id="mp-sec-${t(y.key)}">
|
|
2009
2009
|
<div class="mp-it-sh">${t(y.label)}</div>
|
|
2010
|
-
<div class="mp-it-stext">${Array.isArray(y.items)&&y.items.length?
|
|
2011
|
-
</div>`).join("")}</div>`:"",w=[e.systemLabel,
|
|
2010
|
+
<div class="mp-it-stext">${Array.isArray(y.items)&&y.items.length?Bt(y.items):f(y.text)}</div>
|
|
2011
|
+
</div>`).join("")}</div>`:"",w=[e.systemLabel,It[e.moduleType]||e.moduleType].filter(Boolean),$=e.ask,A=$&&$.question?t($.question):"",L=$&&(A||$.direction&&$.direction!=="general")?`<div class="mp-it-ask">${A?`<span class="ask-q">问题:${A}</span><span class="ask-sep">|</span>`:""}<span class="ask-d">询问方向:${t($.directionLabel||"综合")}</span></div>`:"",_=e.answer?`<div class="mp-it-ans"><b>${A?"先答所问":"先看结论"}</b>${t(e.answer)}</div>`:"",Q=e.plain?`<div class="mp-it-plain"><b>说人话</b>${t(e.plain)}</div>`:"",D=e.followups&&e.followups.length?`<div class="mp-it-fu"><b>还可以这样追问</b><ul>${e.followups.map(y=>`<li>${t(y)}</li>`).join("")}</ul></div>`:"",T=e.glossary&&e.glossary.length?`<details class="mp-it-gloss"><summary>名词解释(${e.glossary.length} 条)</summary>${e.glossary.map(y=>`<div><span>${t(y.term)}</span>${t(y.plain)}</div>`).join("")}</details>`:"",H=e.limits&&e.limits.length?`<details class="mp-it-limits"><summary>本插件不回答什么(${e.limits.length} 条)</summary>${e.limits.map(y=>`<div><b>${t(y.title)}</b>${t(y.text)}</div>`).join("")}</details>`:"",M=e.system&&/^(liuyao|meihua|daliuren|qimen|tarot|xiaoliuren)$/.test(e.system)?`<div class="mp-askcopy-row"><button type="button" class="mp-askcopy" data-mp-askcopy="${t(e.system)}">复制问事提示</button><span class="mp-askcopy-hint">把这张盘和你的问题打包成一段提示,粘到任何对话里都能用</span></div>`:"",B=e.guide?`<details class="mp-guide">
|
|
2012
2012
|
<summary><b>${t(e.guide.title)}</b><span class="mp-guide-sub">数 / 象 / 辞</span></summary>
|
|
2013
2013
|
<div class="mp-guide-body">
|
|
2014
2014
|
<p class="mp-guide-lead">${t(e.guide.lead)}</p>
|
|
@@ -2069,14 +2069,14 @@ window.__ModuleLoader__.load({id:"dsh-metaphysics",version:"0.72.2",factory(mt){
|
|
|
2069
2069
|
${l.map(u=>`<div class="mp-shadow-warn">⚠ ${u}</div>`).join("")}
|
|
2070
2070
|
${p}
|
|
2071
2071
|
${d}
|
|
2072
|
-
</section>`},s.shadowTrack=function(e){const i=window.Engine||window.__PP&&window.__PP.Engine;if(!i||!i.shadowSnapshot||!i.shadowDiff)return null;let o=null;try{o=i.shadowSnapshot(e)}catch{return null}if(!o||!o.shadow||!o.shadow.baseId)return null;const l="mp-shadow-v1";let p={};try{const u=window.localStorage?window.localStorage.getItem(l):null,m=u?JSON.parse(u):{};m&&typeof m=="object"&&!Array.isArray(m)&&(p=m)}catch{p={}}const c=p[o.shadow.baseId];let d=null;if(c)try{d=i.shadowDiff(c,o)}catch{d=null}o.at=Date.now(),p[o.shadow.baseId]=o;try{const u=Object.keys(p);if(u.length>24){u.sort((m,f)=>(Number(p[m]&&p[m].at)||0)-(Number(p[f]&&p[f].at)||0));for(const m of u.slice(0,u.length-24))delete p[m]}window.localStorage&&window.localStorage.setItem(l,JSON.stringify(p))}catch{}return d};const
|
|
2073
|
-
`)},s.casesMigrate=function(e){const i=Array.isArray(e)?e:[];if(!i.length)return{added:0,list:s.casesLoad()};const o=Oe().map(
|
|
2072
|
+
</section>`},s.shadowTrack=function(e){const i=window.Engine||window.__PP&&window.__PP.Engine;if(!i||!i.shadowSnapshot||!i.shadowDiff)return null;let o=null;try{o=i.shadowSnapshot(e)}catch{return null}if(!o||!o.shadow||!o.shadow.baseId)return null;const l="mp-shadow-v1";let p={};try{const u=window.localStorage?window.localStorage.getItem(l):null,m=u?JSON.parse(u):{};m&&typeof m=="object"&&!Array.isArray(m)&&(p=m)}catch{p={}}const c=p[o.shadow.baseId];let d=null;if(c)try{d=i.shadowDiff(c,o)}catch{d=null}o.at=Date.now(),p[o.shadow.baseId]=o;try{const u=Object.keys(p);if(u.length>24){u.sort((m,f)=>(Number(p[m]&&p[m].at)||0)-(Number(p[f]&&p[f].at)||0));for(const m of u.slice(0,u.length-24))delete p[m]}window.localStorage&&window.localStorage.setItem(l,JSON.stringify(p))}catch{}return d};const Fa="dsh-metaphysics/profiles-v1",Te=24,Da=16,et=40,at=60,Ra=["bazi","ziwei","liuyao","tarot","meihua","daliuren","hepan","qimen","almanac","zeri","chenggu","xiaoliuren","star","numerology","mbti","trend","fengshui","name","convert"];s.PROF_KEY=Fa,s.PROF_MAX=Te,s.PROF_KINDS=Ra;const xa={bazi:"八字",ziwei:"紫微",liuyao:"六爻",tarot:"塔罗",meihua:"梅花",daliuren:"六壬",hepan:"合盘",qimen:"奇门",almanac:"黄历",zeri:"择日",chenggu:"称骨",xiaoliuren:"小六壬",star:"星座",numerology:"生命数字",mbti:"人格",trend:"人生K线",fengshui:"风水",name:"起名",convert:"农历"};s.profKindLabel=e=>xa[e]||String(e||"");const qe=e=>typeof e=="string";function Qe(e){if(!e||typeof e!="object"||Array.isArray(e)||!qe(e.id)||!e.id||e.id.length>40||!qe(e.kind)||Ra.indexOf(e.kind)<0)return null;const i=/^(\d{4})-(\d{2})-(\d{2})$/.exec(String(e.date||""));if(!i)return null;const o=Number(i[1]),l=Number(i[2]),p=Number(i[3]);if(l<1||l>12||p<1||p>new Date(o,l,0).getDate())return null;const c=qe(e.time)&&/^([01]?\d|2[0-3]):[0-5]\d$/.test(e.time)?e.time:"";return{id:e.id,kind:e.kind,label:qe(e.label)?e.label.slice(0,Da):"",date:e.date,time:e.hourUnknown===!0?"":c,hourUnknown:e.hourUnknown===!0,trueSolar:e.trueSolar!==!1,lateZi:e.lateZi!==!1,gender:e.gender==="male"||e.gender==="female"?e.gender:"",address:qe(e.address)?e.address.slice(0,et):"",note:qe(e.note)?e.note.slice(0,at):"",pinned:e.pinned===!0,createdAt:Number(e.createdAt)||0,lastUsedAt:Number(e.lastUsedAt)||0,uses:Number(e.uses)||0}}function xt(){try{const e=window.localStorage?window.localStorage.getItem(Fa):null,i=e?JSON.parse(e):[];return Array.isArray(i)?i:[]}catch{return[]}}function Fe(e){return e.slice().sort((i,o)=>(o.pinned?1:0)-(i.pinned?1:0)||(o.lastUsedAt||o.createdAt||0)-(i.lastUsedAt||i.createdAt||0)||(o.createdAt||0)-(i.createdAt||0))}s.profilesLoad=function(){const e=[],i=Object.create(null);for(const o of xt()){const l=Qe(o);l&&!i[l.id]&&(i[l.id]=1,e.push(l))}return Fe(e)},s.profilesSave=function(e){const i=Fe(Array.isArray(e)?e.slice(0,Te):[]);try{return window.localStorage?(window.localStorage.setItem(Fa,JSON.stringify(i)),!0):!1}catch{return!1}};let tt=0;s.profilesNewId=function(){const e=Object.create(null);for(const o of s.profilesLoad())e[o.id]=1;let i;do i=`p${Date.now().toString(36)}${(tt++).toString(36)}`;while(e[i]);return i},s.profilesPut=function(e){const i=Qe(Object.assign({id:s.profilesNewId(),createdAt:Date.now(),lastUsedAt:Date.now()},e));if(!i)return{ok:!1,list:s.profilesLoad()};const o=s.profilesLoad(),l=o.findIndex(p=>p.id===i.id);if(l>=0){const p=o[l];i.createdAt=p.createdAt||i.createdAt,i.lastUsedAt=p.lastUsedAt,i.uses=p.uses,i.pinned=p.pinned,o.splice(l,1,i)}else o.push(i);if(o.length>Te){const p=o.slice().sort((u,m)=>(u.lastUsedAt||u.createdAt)-(m.lastUsedAt||m.createdAt)),c=p.find(u=>u.id!==i.id)||p[0],d=o.indexOf(c);d>=0&&o.splice(d,1)}return s.profilesSave(o)?{ok:!0,list:Fe(o),item:i}:{ok:!1,list:s.profilesLoad()}},s.profilesRemove=function(e){const i=s.profilesLoad().filter(o=>o.id!==e);return s.profilesSave(i)?i:s.profilesLoad()},s.profilesPin=function(e){const i=s.profilesLoad().map(o=>o.id===e?Object.assign({},o,{pinned:!o.pinned}):o);return s.profilesSave(i)?Fe(i):s.profilesLoad()},s.profilesTouch=function(e){let i=!1;const o=s.profilesLoad().map(l=>l.id!==e?l:(i=!0,Object.assign({},l,{lastUsedAt:Date.now(),uses:(l.uses||0)+1})));return i?s.profilesSave(o)?Fe(o):s.profilesLoad():o};const Ia=864e5;function it(e){const i=Number(e)||0;if(!i)return"未排过";const o=Math.floor((Date.now()-i)/Ia);if(o<=0)return"今天排过";if(o===1)return"昨天排过";if(o<30)return`${o} 天前排过`;const l=new Date(i);return`${l.getFullYear()}-${String(l.getMonth()+1).padStart(2,"0")}-${String(l.getDate()).padStart(2,"0")} 排过`}s.profilesAgo=it;const da="dsh-metaphysics/cases-v1",Ba=480,Ke=["pending","hit","miss","void"],nt={pending:"待验",hit:"应验",miss:"未应",void:"作废"},va=120;s.CASE_KEY=da,s.CASE_MAX=Ba,s.CASE_STATUS=Ke,s.caseStatusLabel=e=>nt[e]||nt.pending;function ea(e){if(!e||typeof e!="object"||Array.isArray(e)||!qe(e.id)||!e.id||e.id.length>64)return null;const i=e.entry;if(!i||typeof i!="object"||Array.isArray(i)||!qe(i.kind)||Ra.indexOf(i.kind)<0||!qe(i.date)&&!qe(i.time)&&!qe(i.question))return null;const o=Number(e.at||i.at)||0;return o?{id:e.id,at:o,status:Ke.indexOf(e.status)>=0?e.status:"pending",note:qe(e.note)?e.note.slice(0,va):"",question:qe(i.question)?i.question.slice(0,80):"",entry:i}:null}function Oe(){try{const e=window.localStorage?window.localStorage.getItem(da):null,i=e?JSON.parse(e):[];return Array.isArray(i)?i:[]}catch{return[]}}function aa(e){if(!window.localStorage)return!1;try{return window.localStorage.setItem(da,JSON.stringify(e.slice(0,Ba))),!0}catch{return!1}}s.casesSave=aa,s.casesLoad=function(){return Oe().map(ea).filter(Boolean).sort((e,i)=>i.at-e.at||(e.id<i.id?1:-1))},s.casesNewId=function(){const e={};Oe().forEach(o=>{o&&o.id&&(e[o.id]=1)});let i="";for(let o=0;o<8&&(i="c"+Date.now().toString(36)+Math.floor(Math.random()*1296).toString(36),!!e[i]);o+=1);return i},s.casesAdd=function(e,i){const o=i||{};if(!e||typeof e!="object"||Array.isArray(e))return{ok:!1,list:s.casesLoad()};const l=s.casesLoad(),p=Number(e.at)||Date.now();if(l.some(m=>m.at>p-6e4&&m.entry.kind===e.kind&&m.entry.date===e.date&&m.entry.time===e.time&&(m.entry.question||"")===(e.question||"")&&(m.entry.lines||"")===(e.lines||"")))return{ok:!0,dup:!0,list:s.casesLoad()};const d=ea({id:s.casesNewId(),at:p,status:o.status||"pending",note:o.note||"",entry:e});if(!d)return{ok:!1,list:s.casesLoad()};const u=[d].concat(l.filter(m=>m.id!==d.id)).slice(0,Ba);return aa(u)?{ok:!0,item:d,list:u}:{ok:!1,list:s.casesLoad()}},s.casesSetStatus=function(e,i){if(Ke.indexOf(i)<0)return s.casesLoad();const o=Oe().map(ea).filter(Boolean).map(l=>l.id===e?Object.assign({},l,{status:i}):l);return aa(o)?o:s.casesLoad()},s.casesRemove=function(e){const i=Oe().map(ea).filter(Boolean).filter(o=>o.id!==e);return aa(i)?i:s.casesLoad()},s.casesExport=function(e){return(Array.isArray(e)?e:s.casesLoad()).map(o=>JSON.stringify({id:o.id,at:o.at,atISO:new Date(o.at).toISOString(),kind:o.entry.kind,label:qe(o.entry.label)?o.entry.label:"",question:o.question,status:o.status,note:o.note,params:o.entry})).join(`
|
|
2073
|
+
`)},s.casesMigrate=function(e){const i=Array.isArray(e)?e:[];if(!i.length)return{added:0,list:s.casesLoad()};const o=Oe().map(ea).filter(Boolean),l={};o.forEach(c=>{l[c.id]=1});let p=0;for(let c=0;c<i.length;c+=1){const d=i[c];if(!d||typeof d!="object"||!qe(d.kind))continue;const u=Number(d.at)||0,m=`h-${u||"0"}-${c}-${d.kind}`;if(l[m])continue;const f=ea({id:m,at:u||Date.now(),status:"pending",entry:d});f&&(l[m]=1,o.push(f),p+=1)}return p&&aa(o.sort((c,d)=>d.at-c.at)),{added:p,list:s.casesLoad()}};const ya={male:"♂",female:"♀"};s.profilesHTML=function(e,i){const o=i||{},l=(Array.isArray(e)?e:[]).map(c=>{const d=Qe(c);if(!d)return"";const u=[d.date,d.hourUnknown?"时辰未知":d.time,d.address].filter(Boolean).join(" "),m=o.editingId&&d.id===o.editingId,f=o.armedDel&&d.id===o.armedDel;return`<div class="mp-prof-card${d.pinned?" pinned":""}${m?" editing":""}" data-id="${t(d.id)}">
|
|
2074
2074
|
<button type="button" class="mp-prof-use" data-mp-prof="use" data-id="${t(d.id)}"
|
|
2075
2075
|
title="${t(`用「${d.label||d.kind}」的出生信息直接排盘`)}">
|
|
2076
|
-
<span class="mp-prof-nm">${t(d.label||"未命名")}${d.gender?`<i class="sx">${
|
|
2076
|
+
<span class="mp-prof-nm">${t(d.label||"未命名")}${d.gender?`<i class="sx">${ya[d.gender]||""}</i>`:""}</span>
|
|
2077
2077
|
<span class="mp-prof-sys">${t(s.profKindLabel?s.profKindLabel(d.kind):d.kind)}</span>
|
|
2078
2078
|
<span class="mp-prof-bd">${t(u)}</span>
|
|
2079
|
-
<span class="mp-prof-at">${t(
|
|
2079
|
+
<span class="mp-prof-at">${t(it(d.lastUsedAt||d.createdAt))}${d.uses?` · ${d.uses} 次`:""}${d.pinned?" · 置顶":""}</span>
|
|
2080
2080
|
</button>
|
|
2081
2081
|
<span class="mp-prof-ops">
|
|
2082
2082
|
<button type="button" data-mp-prof="pin" data-id="${t(d.id)}" class="${d.pinned?"on":""}"
|
|
@@ -2090,11 +2090,11 @@ window.__ModuleLoader__.load({id:"dsh-metaphysics",version:"0.72.2",factory(mt){
|
|
|
2090
2090
|
${p}
|
|
2091
2091
|
${o.bar||""}
|
|
2092
2092
|
</section>`},s.profilesBarHTML=function(e){const i=e||{};return`<div class="mp-prof-bar">
|
|
2093
|
-
<input class="mp-prof-name" type="text" maxlength="${
|
|
2093
|
+
<input class="mp-prof-name" type="text" maxlength="${Da}" placeholder="称呼,如「我」「妈妈」" aria-label="档案称呼" value="${t(i.name||"")}">
|
|
2094
2094
|
<button type="button" data-mp-prof="put"${i.canAdd===!1?" disabled":""}>${t(i.editingId?"更新这张档案":"存为我的命盘")}</button>
|
|
2095
2095
|
${i.editingId?'<button type="button" class="ghost" data-mp-prof="cancel">取消改名</button>':""}
|
|
2096
2096
|
<span class="mp-prof-tip">${t(i.tip||(i.editingId?"改完出生信息或称呼,点「更新这张档案」覆盖原档。":"存的是出生时间与出生地这些输入,不是结果。"))}</span>
|
|
2097
|
-
</div>`},s.profEvent=function(e){let i=e&&e.closest?e.closest("[data-mp-prof]"):null;if(!i)return null;const o=i.getAttribute("data-mp-prof");return i.tagName==="BUTTON"&&i.disabled?null:{action:o,id:i.getAttribute("data-id")||"",name:i}};const
|
|
2097
|
+
</div>`},s.profEvent=function(e){let i=e&&e.closest?e.closest("[data-mp-prof]"):null;if(!i)return null;const o=i.getAttribute("data-mp-prof");return i.tagName==="BUTTON"&&i.disabled?null:{action:o,id:i.getAttribute("data-id")||"",name:i}};const vt=["bazi","trend"],Ga=["bazi","ziwei","liuyao","meihua","daliuren","qimen","hepan","chenggu","trend","fengshui","name","xiaoliuren"];s.profUsable=function(e){return!e||typeof e!="object"?!1:e.hourUnknown===!0||e.time?!0:Ga.indexOf(String(e.kind||""))<0},s.profFromForm=function(e,i,o){const l=e||{},p=l.hourUnknown===!0&&vt.indexOf(String(l.kind||""))>=0;return!p&&!/^([01]?\d|2[0-3]):[0-5]\d$/.test(String(l.time||"").trim())?null:Qe(Object.assign({id:o||s.profilesNewId(),kind:String(l.kind||""),label:String(i||"").trim().slice(0,Da)||(s.profKindLabel?s.profKindLabel(l.kind):String(l.kind||"")),date:String(l.date||""),time:String(l.time||""),hourUnknown:p,gender:String(l.gender||""),address:String(l.address||""),trueSolar:l.trueSolar!==!1,lateZi:l.lateZi!==!1,pinned:!1,createdAt:Date.now(),lastUsedAt:0,uses:0}))},s.traceHTML=function(e,i,o){if(!Array.isArray(e)||!e.length)return"";const l={liuyao:"六爻",bazi:"八字",ziwei:"紫微",qimen:"奇门",daliuren:"大六壬"}[i]||"命盘",p=e.map(m=>m&&m.field).filter(Boolean).join(" → "),c=typeof o=="string"?o:"",d=(m,f)=>{const b=String(m??"");return b.length>f?`${b.slice(0,f)}…`:b},u=e.map((m,f)=>{const b=Array.isArray(m.inputs)?m.inputs:[];return`<details class="mp-trace-step"${f===0?" open":""}>
|
|
2098
2098
|
<summary><span class="mp-trace-no">${f+1}</span><span class="mp-trace-field">${t(m.field)}</span><span class="mp-trace-res">${t(d(m.result,44))}</span></summary>
|
|
2099
2099
|
<div class="mp-trace-detail">
|
|
2100
2100
|
<div class="mp-trace-rule"><b>规则</b>${t(m.rule)}</div>
|
|
@@ -2129,7 +2129,7 @@ window.__ModuleLoader__.load({id:"dsh-metaphysics",version:"0.72.2",factory(mt){
|
|
|
2129
2129
|
<div class="mp-al-row"><em>吉配生肖</em><div class="mp-al-chips">${w.liuhe?`<span class="mp-al-chip">六合·${t(w.liuhe)}</span>`:""}${l(w.sanhe||[])}</div></div>
|
|
2130
2130
|
${e.dailyHexagram?`<div class="mp-al-hex">每日一卦:<b>${t(e.dailyHexagram.name)}</b> ${t(e.dailyHexagram.meaning||"")}</div>`:""}
|
|
2131
2131
|
<div class="mp-al-note">${t(e.meta&&e.meta.scope||"")}</div>
|
|
2132
|
-
</section>`};const
|
|
2132
|
+
</section>`};const yt=" liuyao tarot meihua daliuren qimen xiaoliuren ",De=" almanac zeri convert star numerology wuyunliuqi ",wa={cast:"先看卦名或牌名——事情此刻的样子;再看动爻、正逆位,变化在那里。",person:"先找「你」那一格(日主、命宫或主质);再看被强调的字或星。",day:"先看今天值什么,再看宜忌那几栏。"};s.plainHTML=function(e){if(!e||e.system==="taiyi")return"";const i=e.brief&&e.brief.lead||"";if(!i)return"";const o=" "+String(e.system||"")+" ",l=yt.indexOf(o)>=0?wa.cast:De.indexOf(o)>=0?wa.day:wa.person;return'<div class="mp-pl"><p class="mp-pl-lead">'+t(i)+'</p><p class="mp-pl-how">'+t(l)+"</p></div>"},s.taiyiHTML=function(e){if(!e||!e.taiyi||!e.meta)return"";const i=e.taiyi,o=e.wenchang||{},l=e.shiji||{},p=e.jishen||{},c=e.suan||{},d=e.jiang||{},u=e.geju||{},f=[[9,"巽"],[2,"离"],[7,"坤"],[4,"震"],[5,"中"],[6,"兑"],[3,"艮"],[8,"坎"],[1,"乾"]].map(U=>{const J=U[0],fe=U[1],be=i.palace===J,x=o.num===J,v=l.palace===J,ce=(be?'<i class="mp-ty-mark">太乙</i>':"")+(v?'<i class="mp-ty-mark s">始击</i>':"")+(x?'<i class="mp-ty-mark w">文昌</i>':"");return`<div class="mp-ty-cell${be?" on":""}${fe==="中"?" mid":""}"><b>${t(fe)}</b><em>${J}</em>${ce}</div>`}).join(""),b=e.scope&&e.scope.notCovered||[],w=e.month||{},$=e.day||{},A=e.hour||{},L=w.taiyi&&w.taiyi.palaceName||"",_=String(w.taiyi&&w.taiyi.unitInPalace||""),Q=w.mu?w.mu.pos+"("+w.mu.god+")":"",D=w.jishen&&w.jishen.branch||"",T=$.taiyi&&$.taiyi.palaceName||"",H=String($.taiyi&&$.taiyi.unitInPalace||""),pe=$.mu?$.mu.pos+"("+$.mu.god+")":"",M=$.jishen&&$.jishen.branch||"",B=A.taiyi&&A.taiyi.palaceName||"",y=String(A.taiyi&&A.taiyi.unitInPalace||""),he=A.jishen&&A.jishen.branch||"",W=e.jixiong||{},ie=e.verdict||{},j=ie.grade||W.grade||"xiong",k=ie.label||W.label||"凶",C=e.shenjiang||{},O=C.rows?`${C.stem}日、${C.day?"昼贵":"夜贵"}起${C.startBranch}${C.dir>0?"顺":"逆"}行;吉神下:${(C.goods||[]).join("、")||"无"};凶神下:${(C.bads||[]).join("、")||"无"}`:"未排",oe=W.grade||"xiong",ge=W.label||"凶",de=e.gate&&e.gate.gate||"",ke={掩:"客方的目和太乙挤在同一格",击:"始击挨在太乙左右",格:"太乙和始击隔一格正面对上",对:"文昌从对面顶过来",提:"客大将和文昌挤在一格",迫:"有将贴得太近,就在太乙前后一格",囚:"有将被关在太乙那一格里",关:"主客两边的人撞在一处"},ye=(u.list||[]).map(U=>{const J=String(U).charAt(0);return ke[J]?J+"——"+ke[J]:String(U)}),P=oe==="xiong"?`太乙站在${i.palaceName}宫(${i.dir}),值${de}门,判凶:主客两边有几样撞到了一起。`:oe==="daji"?`太乙站在${i.palaceName}宫(${i.dir}),值${de}门,判大吉:位置和数都顺,门也在吉道上。`:oe==="buhe"?`太乙站在${i.palaceName}宫(${i.dir}),值${de}门,判不和:位置不冲突,但数上不合。`:`太乙站在${i.palaceName}宫(${i.dir}),值${de}门,判吉:位置不冲突。`;return`<section class="mp-ty" aria-label="太乙神数">
|
|
2133
2133
|
<div class="mp-ty-h">
|
|
2134
2134
|
<span class="mp-ty-y">${t(String(e.meta.year))} 年</span>
|
|
2135
2135
|
<span class="mp-ty-j">${t(e.meta.dunText||"")}${t(String(e.meta.ju))}局</span>
|
|
@@ -2141,7 +2141,7 @@ window.__ModuleLoader__.load({id:"dsh-metaphysics",version:"0.72.2",factory(mt){
|
|
|
2141
2141
|
<p class="mp-ty-lead">${t(P)}</p>
|
|
2142
2142
|
<p>先看太乙落在哪一格——那是「主」这一年的位置,整张盘围着它转。</p>
|
|
2143
2143
|
<p>${t(de)}门一值三十年,管的是这三十年的大环境,不是今年单一年的事。</p>
|
|
2144
|
-
<p>判${t(ge)},是因为${t(
|
|
2144
|
+
<p>判${t(ge)},是因为${t(ye.length?ye.join(";"):"八种位置关系一个都没犯")}。</p>
|
|
2145
2145
|
<p class="mp-ty-close">这一层只摆位置和数,不回答事情成不成;想看每一步怎么来的,展开下面的细目。</p>
|
|
2146
2146
|
</div>
|
|
2147
2147
|
<details class="mp-ty-det">
|
|
@@ -2231,7 +2231,7 @@ window.__ModuleLoader__.load({id:"dsh-metaphysics",version:"0.72.2",factory(mt){
|
|
|
2231
2231
|
<div class="mp-mb-sec"><em>课题</em>${t(o.growth||"")}</div>
|
|
2232
2232
|
</div>
|
|
2233
2233
|
<div class="mp-mb-note">${t(e.note||"")}</div>
|
|
2234
|
-
</section>`};const
|
|
2234
|
+
</section>`};const $a=[["巽","离","坤"],["震","中","兑"],["艮","坎","乾"]],wt={坎:"正北",艮:"东北",震:"正东",巽:"东南",离:"正南",坤:"西南",兑:"正西",乾:"西北",中:"中宫"},Ua=["生气","延年","天医","伏位"],He=(e,i)=>`<span class="mp-fs-chip${i?" "+i:""}">${t(e)}</span>`,ta=(e,i,o)=>`<div class="mp-fs-cell${e==="中"?" center":""}"><div class="mp-fs-top"><span class="mp-fs-gua">${t(e)}</span><span class="mp-fs-dir">${t(wt[e]||"")}</span>${i||""}</div>`+(o||"")+"</div>",Za=e=>e.length?`<dl class="mp-fs-facts">${e.map(([i,o])=>`<div class="mp-fs-row"><dt>${t(i)}</dt><dd>${t(o)}</dd></div>`).join("")}</dl>`:"",ca=(e,i,o,l,p,c)=>`<section class="mp-quick mp-fs" aria-label="风水结果"><div class="mp-quick-h"><b>${t(e)}</b>${i?`<span class="mp-fs-sub">${t(i)}</span>`:""}</div>`+(o.length?`<div class="mp-fs-chips">${o.join("")}</div>`:"")+l+p+c.filter(Boolean).map(d=>`<div class="mp-fs-note">${t(d)}</div>`).join("")+"</section>",st=(e,i)=>`<div class="mp-fs-grid" role="group" aria-label="${t(i)}">`+$a.map(o=>o.map(l=>{const p=e.find(u=>u&&u.palace===l);if(!p)return ta(l,"","");const c=Ua.includes(p.star),d=`<span class="mp-fs-star"${p.role?` title="${t(p.role)}"`:""}>${t(p.star)}<em class="${c?"ok":"bad"}">${c?"吉":"凶"}</em></span>`;return ta(l,d,"")}).join("")).join("")+"</div>";function Gt(e,i){const o=i.period,l={};for(const $ of e.palaces||[])l[$.palace]=$;const p=`<div class="mp-fs-key">每宫依次为 <b>运</b>/<b>山</b>/<b>向</b> 三星;底色高亮=当运(${t(o)}运)</div><div class="mp-fs-grid" role="group" aria-label="玄空九宫(运/山/向)">`+$a.map($=>$.map(A=>{const L=l[A];if(!L)return ta(A,"","");const _=[["运",L.yun],["山",L.shan],["向",L.xiang]].map(([Q,D])=>`<span class="${D===o?"on":""}" title="${t(Q)}星 ${t(D)}">${t(D)}</span>`).join("");return ta(A,"",`<div class="mp-fs-nums">${_}</div>`)}).join("")).join("")+"</div>",c=e.wangShanWangXiang||{},d=i.jianXiang||{},u=e.timeFlying||null,m=[He(d.active?`兼${d.jian} ${d.offset}° · 替卦`:"正向 · 下卦",d.active?"ok":""),He(`山盘 ${i.shanCenter.star}${i.shanCenter.name} · ${i.shanCenter.fly}`),He(`向盘 ${i.xiangCenter.star}${i.xiangCenter.name} · ${i.xiangCenter.fly}`),He(c.byChart?"盘面:到山到向":"盘面:未到山到向",c.byChart?"ok":""),He(c.byTable===null?"表法:替卦不套":c.byTable?"表法:在列":"表法:未列",c.byTable?"ok":"")],f=($,A)=>`${A} ${$.star}${$.name}(${$.fly},${$.basis}${$.mode==="替卦"?`;原运星 ${$.original}${$.replaced?",已替":",用替而未替"}`:""})`,b=u?[["year","年"],["month","月"],["day","日"],["hour","时"]].filter(([$])=>u[$]).map(([$,A])=>`${A}${u[$].centerName}(${u[$].fly})`).join(" "):"",w=Za([...d.active?[["替卦",`${d.note}${c.byTable===null?" 正向旺山旺向表不适用于替卦。":""}`]]:[],["入中",`${f(i.shanCenter,"山盘")};${f(i.xiangCenter,"向盘")}`],["当运",`山星${o}落 ${e.dangYun.shan.text};向星${o}落 ${e.dangYun.xiang.text}`],["合十",`山星:${(e.heshi.shan||[]).join("、")||"无"};向星:${(e.heshi.xiang||[]).join("、")||"无"}`],["表法",`${c.note||""}${(c.table||[]).length?` 本运所列:${c.table.join("、")}。`:" 本运表法无局。"}`],...b?[["年月日时",`${b}${u.meta&&u.meta.note?` ${u.meta.note}`:""}`]]:[]]);return ca(d.active?"玄空替卦":"玄空下卦",`${i.periodLabel} · 坐${i.sitting} · 向${i.facing}`,m,p,w,[i.note,e.disclaimer])}function $t(e,i){const o=e.mingGua||{},l=st([...e.luckyDirections||[],...e.unluckyDirections||[]],"八宅八向(吉凶)"),p=[He(o.compatible||"—"),He(`${i.gender}命 · ${i.guaYear} 年立春界`)],c=[];if(e.yearlyFlying){const d=e.yearlyFlying;c.push(["年紫白",`${d.centerName}入中;${d.palaces.filter(u=>u.palace!=="中").map(u=>`${u.palace}${u.name}`).join("、")}`])}return ca("八宅命卦",`${o.num}${o.gua}(${o.group})· ${o.direction}`,p,l,Za(c),[i.note,e.disclaimer])}function ka(e,i){const o=e.layout||{},l=st(e.houseStars||[],"宅卦八向(吉凶)"),p=[He(`${i.houseGua}宅 · ${i.houseGroup}`),He(`坐${i.sitting}`),He(`向${i.facing}`)],c=[["门",o.door],["灶",o.stove],["床",o.bed],["厕",o.toilet]];return e.mingMatch&&c.push(["命宅配",e.mingMatch.text]),ca("门主灶",`${i.houseGua}宅 · 坐${i.sitting} · 向${i.facing}`,p,l,Za(c),[i.birthNote,e.disclaimer])}s.fengshuiHTML=function(e){if(!e||e.system!=="fengshui")return s.quickHTML(e);const i=e.meta||{};return i.action==="xuankong"?Gt(e,i):i.action==="advise"?ka(e,i):$t(e,i)},s.perfHTML=function(e){if(!e)return"";const i=u=>typeof u=="number"&&isFinite(u)?`${Math.max(0,Math.round(u))}ms`:"",o=e.cached===!0?"(已缓存)":e.cached===!1?"(首次加载)":"",l=[];i(e.engineMs)&&l.push(`引擎 ${i(e.engineMs)}${o}`),i(e.computeMs)&&l.push(`排盘 ${i(e.computeMs)}`),i(e.renderMs)&&l.push(`渲染 ${i(e.renderMs)}`);const p=i(e.totalMs);if(!l.length&&!p)return"";const c=p?`首屏 ${p}`:"耗时";return`<div class="mp-perf" title="本机这一次的实测耗时,不含网络与服务端;换机器、首次加载与已缓存会不同">${l.length?`${c}|${l.join(" · ")}`:c}</div>`},s.zeriHTML=function(e){if(!e||!e.compare||e.compare.mode!=="candidates"||!Array.isArray(e.days))return s.quickHTML(e);const i=e.meta||{},o=e.shenshaRef||{},l=e.compare.best?e.compare.best.date:"",p=e.days.map(u=>{const m=u.date===l,f=u.excluded||u.verdict==="回避"?"bad":u.verdict==="推荐"?"good":"",b=u.grade||{},w=b.label?`<b>${t(b.label)}</b><em>吉${t(b.ji)} / 凶${t(b.xiong)} ${t(b.decision||"")}</em>`:"—";return`<tr class="mp-zr-row${m?" top":""}${u.excluded?" off":""}">
|
|
2235
2235
|
<th scope="row"><b>${t(u.date)}</b>${m?'<i class="mp-zr-best">最优</i>':""}
|
|
2236
2236
|
<em>${t(u.weekday)} ${t(u.lunar)}</em></th>
|
|
2237
2237
|
<td><b>${t(u.dayGanZhi)}</b><em>${t(u.zhiXing)}日</em></td>
|
|
@@ -2257,7 +2257,7 @@ window.__ModuleLoader__.load({id:"dsh-metaphysics",version:"0.72.2",factory(mt){
|
|
|
2257
2257
|
</section>`},s.quickHTML=function(e){if(!e)return"";const o={almanac:"黄历",zeri:"择日",chenggu:"称骨",xiaoliuren:"小六壬",star:"星座",numerology:"生命数字",trend:"人生 K 线",fengshui:"风水",name:"起名",convert:"公农历转换",mbti:"十六型人格"}[e.system]||"速查",l=e.summary||"",p=l?`<pre class="mp-quick-pre">${t(l)}</pre>`:"";return`<section class="mp-quick" aria-label="${t(o)}结果">
|
|
2258
2258
|
<div class="mp-quick-h"><b>${t(o)}</b></div>
|
|
2259
2259
|
${p}
|
|
2260
|
-
</section>`},s.summaryCardPNG=function(e,i){try{if(typeof document>"u"||!document.createElement)return"";const o=i&&i.outline||[],l=(i&&i.tables||[]).filter(pe=>Array.isArray(pe.rows)&&pe.rows.length),p=i&&i.systemLabel||e&&e.system||"命理报告",c=900,d=44,u=26,m=(pe,M)=>`${M?"600 ":""}${pe}px "PingFang SC","Microsoft YaHei","Noto Sans CJK SC",sans-serif`,f=document.createElement("canvas"),b=f.getContext?f.getContext("2d"):null;if(!b)return"";const w=(pe,M)=>{const B=[];let y="";for(const he of String(pe)){const W=y+he;b.measureText(W).width>M&&y?(B.push(y),y=he):y=W}return y&&B.push(y),B.length?B:[""]};b.font=m(15);let $=0;const A=o.map(pe=>{const M=w(pe.text,c-d*2-70);return $+=Math.min(M.length,2)*u+10,{o:pe,lines:M.slice(0,2)}}),L=l[0]||null,_=L?L.rows.slice(0,6):[],Q=L?54+_.length*34:0,D=150+$+(A.length?34:0)+Q+120;f.width=c,f.height=D,b.fillStyle="rgb(255,255,255)",b.fillRect(0,0,c,D),b.fillStyle="rgb(31,111,63)",b.fillRect(0,0,c,8);let T=52;b.fillStyle="rgb(27,27,27)",b.font=m(28,!0),b.fillText(`${p} · 摘要`,d,T),T+=30,b.fillStyle="rgb(111,106,96)",b.font=m(14);const H=[e&&e.input&&e.input.datetime?`出生/起局:${e.input.datetime}`:"","本地计算 · 可复现"].filter(Boolean).join(" ");if(b.fillText(H,d,T),T+=34,A.length){b.fillStyle="rgb(31,111,63)",b.font=m(16,!0),b.fillText("一页读懂",d,T),T+=26;for(const{o:pe,lines:M}of A)b.fillStyle="rgb(138,131,120)",b.font=m(14,!0),b.fillText(pe.label,d,T),b.fillStyle="rgb(63,58,51)",b.font=m(15),M.forEach((B,y)=>b.fillText(B,d+70,T+y*u)),T+=M.length*u+10;T+=8}if(L){b.fillStyle="rgb(31,111,63)",b.font=m(16,!0),b.fillText(L.title,d,T),T+=24,b.fillStyle="rgb(138,131,120)",b.font=m(13),b.fillText(L.columns.join(" · "),d,T),T+=8,b.strokeStyle="rgb(229,225,216)",b.beginPath(),b.moveTo(d,T),b.lineTo(c-d,T),b.stroke(),T+=22,b.fillStyle="rgb(63,58,51)",b.font=m(14);for(const pe of _){const M=pe.filter(Boolean).join(" · "),B=w(M,c-d*2)[0];b.fillText(B,d,T),T+=34}}return T=D-62,b.strokeStyle="rgb(229,225,216)",b.beginPath(),b.moveTo(d,T-18),b.lineTo(c-d,T-18),b.stroke(),b.fillStyle="rgb(138,131,120)",b.font=m(12),b.fillText("内容用于传统文化学习与自我探索,不构成医疗、投资、法律或人事决策依据。",d,T+6),b.fillText("dsh-metaphysics · 本机计算,未上传任何数据",d,T+26),f.toDataURL?f.toDataURL("image/png"):""}catch{return""}}})();const
|
|
2260
|
+
</section>`},s.summaryCardPNG=function(e,i){try{if(typeof document>"u"||!document.createElement)return"";const o=i&&i.outline||[],l=(i&&i.tables||[]).filter(pe=>Array.isArray(pe.rows)&&pe.rows.length),p=i&&i.systemLabel||e&&e.system||"命理报告",c=900,d=44,u=26,m=(pe,M)=>`${M?"600 ":""}${pe}px "PingFang SC","Microsoft YaHei","Noto Sans CJK SC",sans-serif`,f=document.createElement("canvas"),b=f.getContext?f.getContext("2d"):null;if(!b)return"";const w=(pe,M)=>{const B=[];let y="";for(const he of String(pe)){const W=y+he;b.measureText(W).width>M&&y?(B.push(y),y=he):y=W}return y&&B.push(y),B.length?B:[""]};b.font=m(15);let $=0;const A=o.map(pe=>{const M=w(pe.text,c-d*2-70);return $+=Math.min(M.length,2)*u+10,{o:pe,lines:M.slice(0,2)}}),L=l[0]||null,_=L?L.rows.slice(0,6):[],Q=L?54+_.length*34:0,D=150+$+(A.length?34:0)+Q+120;f.width=c,f.height=D,b.fillStyle="rgb(255,255,255)",b.fillRect(0,0,c,D),b.fillStyle="rgb(31,111,63)",b.fillRect(0,0,c,8);let T=52;b.fillStyle="rgb(27,27,27)",b.font=m(28,!0),b.fillText(`${p} · 摘要`,d,T),T+=30,b.fillStyle="rgb(111,106,96)",b.font=m(14);const H=[e&&e.input&&e.input.datetime?`出生/起局:${e.input.datetime}`:"","本地计算 · 可复现"].filter(Boolean).join(" ");if(b.fillText(H,d,T),T+=34,A.length){b.fillStyle="rgb(31,111,63)",b.font=m(16,!0),b.fillText("一页读懂",d,T),T+=26;for(const{o:pe,lines:M}of A)b.fillStyle="rgb(138,131,120)",b.font=m(14,!0),b.fillText(pe.label,d,T),b.fillStyle="rgb(63,58,51)",b.font=m(15),M.forEach((B,y)=>b.fillText(B,d+70,T+y*u)),T+=M.length*u+10;T+=8}if(L){b.fillStyle="rgb(31,111,63)",b.font=m(16,!0),b.fillText(L.title,d,T),T+=24,b.fillStyle="rgb(138,131,120)",b.font=m(13),b.fillText(L.columns.join(" · "),d,T),T+=8,b.strokeStyle="rgb(229,225,216)",b.beginPath(),b.moveTo(d,T),b.lineTo(c-d,T),b.stroke(),T+=22,b.fillStyle="rgb(63,58,51)",b.font=m(14);for(const pe of _){const M=pe.filter(Boolean).join(" · "),B=w(M,c-d*2)[0];b.fillText(B,d,T),T+=34}}return T=D-62,b.strokeStyle="rgb(229,225,216)",b.beginPath(),b.moveTo(d,T-18),b.lineTo(c-d,T-18),b.stroke(),b.fillStyle="rgb(138,131,120)",b.font=m(12),b.fillText("内容用于传统文化学习与自我探索,不构成医疗、投资、法律或人事决策依据。",d,T+6),b.fillText("dsh-metaphysics · 本机计算,未上传任何数据",d,T+26),f.toDataURL?f.toDataURL("image/png"):""}catch{return""}}})();const pi="dsh-metaphysics/history-v1";function rn(){try{const n=window.localStorage&&window.localStorage.getItem(pi),s=n?JSON.parse(n):[];return Array.isArray(s)?s.filter(S=>S&&typeof S=="object"&&typeof S.kind=="string").slice(0,20):[]}catch{return[]}}function ri(n){try{window.localStorage&&window.localStorage.setItem(pi,JSON.stringify(n.slice(0,20)))}catch{}}const ln=(n,s)=>n.kind===s.kind&&n.date===s.date&&n.time===s.time&&n.gender===s.gender&&!!n.hourUnknown==!!s.hourUnknown&&n.trueSolar!==!1==(s.trueSolar!==!1)&&n.lateZi!==!1==(s.lateZi!==!1)&&n.address===s.address&&n.lines===s.lines&&n.question===s.question&&n.mhMode===s.mhMode&&n.upper===s.upper&&n.lower===s.lower&&n.direction===s.direction&&n.spread===s.spread&&n.changing===s.changing&&(n.kind!=="qimen"||n.qimenRule===s.qimenRule&&n.qLateZi===s.qLateZi)&&(n.kind!=="zeri"||n.task===s.task&&n.days===s.days&&n.shengXiao===s.shengXiao&&n.zCand===s.zCand)&&(n.kind!=="xiaoliuren"||n.xlrMode===s.xlrMode&&n.num1===s.num1&&n.num2===s.num2&&n.num3===s.num3)&&(n.kind!=="trend"||n.toAge===s.toAge)&&(n.kind!=="fengshui"||n.fsMode===s.fsMode&&n.fsPeriod===s.fsPeriod&&n.sitting===s.sitting&&n.facing===s.facing)&&(n.kind!=="name"||n.nnMode===s.nnMode&&n.surname===s.surname&&n.givenName===s.givenName&&n.limitN===s.limitN)&&(n.kind!=="convert"||n.convMode===s.convMode&&n.lunarDate===s.lunarDate&&!!n.leapMonth==!!s.leapMonth)&&(n.kind!=="hepan"||n.hpChart===s.hpChart&&n.partnerDate===s.partnerDate&&n.partnerTime===s.partnerTime&&n.partnerGender===s.partnerGender&&n.partnerAddress===s.partnerAddress&&!!n.thirdOn==!!s.thirdOn&&n.p2Date===s.p2Date&&n.p2Time===s.p2Time&&n.p2Gender===s.p2Gender&&n.p2Address===s.p2Address);function dn(n,s){if(n==="bazi"){const F=["year","month","day","hour"].map(ee=>s.pillars&&s.pillars[ee]).filter(Boolean).map(ee=>ee.ganzhi).join(" ");return s.hourUnknown||s.pillars&&!s.pillars.hour?`${F}(时柱暂缺)`:F}return n==="ziwei"?`${s.soul?s.soul.branch:""}宫 ${s.bureau?s.bureau.name:""} ${s.lunar?s.lunar.year+"年":""}`.trim():n==="liuyao"?s.ben&&s.ben.name?s.ben.name:"":n==="meihua"?s.ben&&s.ben.name?`${s.ben.name} 动${s.moving}`:"":n==="daliuren"?`${s.dayGanZhi||""} ${s.geJu?s.geJu.name:""}`:""}const R=window.__PP,Xa=()=>typeof performance<"u"&&performance.now?performance.now():Date.now();let _e=0;const ct=typeof window.__mpEnsureEngine=="function"?window.__mpEnsureEngine:async()=>window.Engine,cn=`
|
|
2261
2261
|
/* 整个侧栏面板铺宣纸:暖白渐变为底 + feTurbulence 纤维噪点平铺。
|
|
2262
2262
|
background-attachment:local 让纹理跟着滚动内容走,长页面不会下半截露白。
|
|
2263
2263
|
噪点用 colorMatrix 压到很低的 alpha(0.09),只做纸感不糊字。 */
|
|
@@ -2602,11 +2602,11 @@ window.__ModuleLoader__.load({id:"dsh-metaphysics",version:"0.72.2",factory(mt){
|
|
|
2602
2602
|
@media (prefers-reduced-motion:reduce){
|
|
2603
2603
|
*,*::before,*::after{transition-duration:.001ms!important;animation-duration:.001ms!important}
|
|
2604
2604
|
}
|
|
2605
|
-
`,{useState:
|
|
2605
|
+
`,{useState:q,useEffect:Ma,useRef:mn}=Ja,li=n=>String(n).padStart(2,"0");function un(n){const s=/^(\d{4})-(\d{2})-(\d{2})$/.exec(String(n||""));if(!s)return!1;const S=Number(s[1]),F=Number(s[2]),ee=Number(s[3]);if(F<1||F>12||ee<1)return!1;const le=[31,S%4===0&&S%100!==0||S%400===0?29:28,31,30,31,30,31,31,30,31,30,31];return ee<=le[F-1]}function di(n){const s=/^(\d{4})\s*[年./-]\s*(\d{1,2})\s*[月./-]\s*(\d{1,2})\s*日?$/.exec(String(n||"").trim());if(!s)return"";const S=`${s[1]}-${li(s[2])}-${li(s[3])}`;return un(S)?S:""}function gn(n){const s=String(n||"").trim();if(/^\d{0,4}(-\d{0,2}){0,2}$/.test(s))return s;if(/[年月日/.]/.test(s)){const F=di(s);if(F)return F}const S=s.replace(/\D/g,"").slice(0,8);return S.length<=4?S:S.length<=6?`${S.slice(0,4)}-${S.slice(4)}`:`${S.slice(0,4)}-${S.slice(4,6)}-${S.slice(6)}`}function _t(n){const s=n.value||"",[S,F]=q(s),ee=mn(s);Ma(()=>{ee.current=s,F(s)},[s]);const se=()=>{const le=S.trim();if(!le){F(ee.current),n.onInvalid&&n.onInvalid("");return}const re=di(le);if(re){ee.current=re,F(re),re!==s&&n.onChange(re);return}F(ee.current),n.onInvalid&&n.onInvalid(le)};return r("input",{className:"mp-input",type:"text",inputMode:"numeric",autoComplete:"off",placeholder:"年-月-日,如 1990-05-12",value:S,onChange:le=>{F(gn(le.target.value))},onBlur:se,onKeyDown:le=>{le.key==="Enter"&&(le.preventDefault(),se())}})}const mt=4,na=12,ut=5,sa=27,Ot=45;let gt=null;function ft(){if(gt)return gt;let n=null;try{n=X.compute({system:"mbti"})}catch{n=null}const s=n&&n.questions||[];return s.length?(gt={total:n&&n.total||s.length,questions:s,scale:n&&n.scale||{}},gt):{total:0,questions:[],scale:{}}}function fn(n){const{answers:s,page:S,onPick:F,onPage:ee,onSubmit:se,onClear:le}=n,re=ft(),ve=Math.max(1,Math.ceil(re.total/mt)),t=S*mt,$e=re.questions.slice(t,t+mt),I=s.filter(K=>K!=null).length,xe=re.total?Math.round(I/re.total*100):0,we=S>=ve-1,Z=I>=na;return r("div",{className:"mp-quiz"},r("div",{className:"mp-quiz-top"},r("div",{className:"mp-quiz-bar","aria-hidden":"true"},r("i",{style:{width:xe+"%"}})),r("span",{className:"mp-quiz-count"},`第 ${S+1} / ${ve} 页 · 已答 ${I} / ${re.total}`)),r("div",{className:"mp-quiz-list"},$e.map((K,V)=>{const G=t+V;return r("div",{key:K.id||G,className:"mp-quiz-q"},r("div",{className:"mp-quiz-qt"},r("b",null,String(G+1).padStart(2,"0")),r("span",null,K.text)),r("div",{className:"mp-quiz-opts",role:"radiogroup","aria-label":`第 ${G+1} 题`},[1,2,3,4,5].map(te=>r("label",{key:te,className:"mp-quiz-o"+(s[G]===te?" on":"")},r("input",{type:"radio",name:`mpmbq${G}`,value:String(te),checked:s[G]===te,onChange:()=>F(G,te)}),r("b",null,String(te)),r("span",null,re.scale[te]||"")))))})),r("div",{className:"mp-quiz-nav"},r("button",{className:"mp-quiz-btn",disabled:S<=0,onClick:()=>ee(-1)},"上一页"),we?null:r("button",{className:"mp-quiz-btn",onClick:()=>ee(1)},"下一页"),r("button",{className:"mp-quiz-btn primary",disabled:!Z,onClick:se},"看结果"),r("button",{className:"mp-quiz-btn",onClick:le},"清空"),r("span",{className:"mp-quiz-hint"},Z?`已够 ${na} 题,可以看结果;答完 ${re.total} 题会更准。`:`答满 ${na} 题可先看结果(还差 ${na-I} 题)。`)))}function hn(n){const{paper:s,answers:S,page:F,onPick:ee,onPage:se,onSubmit:le,onClear:re}=n;if(!s||!Array.isArray(s.questions))return r("div",{className:"mp-quiz"},r("div",{className:"mp-quiz-hint"},"正在加载问卷题面…"));const ve=s.questions.length,t=Math.max(1,Math.ceil(ve/ut)),$e=F*ut,I=s.questions.slice($e,$e+ut),xe=S.filter(G=>G!=null).length,we=ve?Math.round(xe/ve*100):0,Z=F>=t-1,K=xe>=sa,V=G=>{const te=(s.scale||[]).filter(Me=>Me&&Me.v===G)[0];return te?te.label:String(G)};return r("div",{className:"mp-quiz"},r("div",{className:"mp-quiz-top"},r("div",{className:"mp-quiz-bar","aria-hidden":"true"},r("i",{style:{width:we+"%"}})),r("span",{className:"mp-quiz-count"},`第 ${F+1} / ${t} 页 · 已答 ${xe} / ${ve}`)),r("div",{className:"mp-quiz-list"},I.map((G,te)=>{const Me=$e+te;return r("div",{key:G.no||Me,className:"mp-quiz-q"},r("div",{className:"mp-quiz-qt"},r("b",null,String(Me+1).padStart(2,"0")),r("span",null,G.text)),r("div",{className:"mp-quiz-opts",role:"radiogroup","aria-label":`第 ${Me+1} 题`},[1,2,3,4,5].map(Le=>r("label",{key:Le,className:"mp-quiz-o"+(S[Me]===Le?" on":"")},r("input",{type:"radio",name:`mpcsq${Me}`,value:String(Le),checked:S[Me]===Le,onChange:()=>ee(Me,Le)}),r("b",null,String(Le)),r("span",null,V(Le))))))})),r("div",{className:"mp-quiz-nav"},r("button",{className:"mp-quiz-btn",disabled:F<=0,onClick:()=>se(-1)},"上一页"),Z?null:r("button",{className:"mp-quiz-btn",onClick:()=>se(1)},"下一页"),r("button",{className:"mp-quiz-btn primary",disabled:!K,onClick:le},"看结果"),r("button",{className:"mp-quiz-btn",onClick:re},"清空"),r("span",{className:"mp-quiz-hint"},K?`已够 ${sa} 题,可以看结果;答完 ${ve} 题会更准。`:`答满 ${sa} 题可先看结果(还差 ${sa-xe} 题)。`)))}class bn extends(Ja.Component||Object){constructor(s){super(s),this.state={err:null}}static getDerivedStateFromError(s){return{err:s}}componentDidCatch(s,S){console.error("[metaphysics] 面板渲染异常",s,S)}render(){if(!this.state.err)return this.props.children;const s=this.state.err,S=String(s&&s.stack||"").split(`
|
|
2606
2606
|
`).slice(0,14).join(`
|
|
2607
2607
|
`);return r("div",{className:"mp-wrap"},r("div",{className:"mp-panel"},r("div",{className:"mp-lbl"},"命理面板渲染出错——把下面这段发给我"),r("pre",{style:{whiteSpace:"pre-wrap",fontSize:12,lineHeight:1.5,maxHeight:320,overflow:"auto",margin:"8px 0"}},String(s&&s.message||s)+`
|
|
2608
2608
|
|
|
2609
|
-
`+S),r("div",{className:"mp-lbl"},"环境:__PP "+typeof R+" · Engine "+typeof window.Engine+" · React "+typeof Xa+" · 版本 "+(typeof R=="object"&&R&&(window.__MP_VER||"?"))+((window.__MP_UNRELEASED||[]).length?" · 未发版改动 "+window.__MP_UNRELEASED.length+" 项":""))))}}function xn(n){const s=n&&n.size?n.size:20,S=n&&n.active;return r("svg",{width:s,height:s,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:1.6,strokeLinecap:"round","aria-hidden":!0,style:{opacity:S?1:.72}},r("circle",{cx:12,cy:12,r:8.2}),r("path",{d:"M12 3.8a4.1 4.1 0 0 1 0 8.2 4.1 4.1 0 0 0 0 8.2"}),r("circle",{cx:12,cy:8,r:1.1,fill:"currentColor",stroke:"none"}),r("circle",{cx:12,cy:16,r:1.1,fill:"currentColor",stroke:"none"}))}const Ge=[{k:"ziwei",label:"紫微",timeLabel:"出生时刻",hint:"紫微斗数需要出生日期、时刻与性别;出生地只影响真太阳时修正。"},{k:"bazi",label:"八字",timeLabel:"出生时刻",hint:"四柱八字按节气与真太阳时定时柱,出生地越准,时柱越稳。"},{k:"liuyao",label:"六爻",timeLabel:"起卦时刻",hint:"六爻不需要出生时间:只用起卦当下的日辰定六神、月建定旺衰,卦由摇出。"},{k:"meihua",label:"梅花",timeLabel:"起卦时刻",hint:"梅花用起卦时刻的年月日时数成卦,也可直接给两个数字起卦;与出生时间无关。"},{k:"daliuren",label:"六壬",timeLabel:"起卦时刻",hint:"大六壬用起卦时刻的日干支、时支与月将起天地盘;同样与出生时间无关。"},{k:"qimen",label:"奇门",timeLabel:"起局时刻",hint:"奇门时家转盘:用起局时刻定节气、三元与局数;换局规则决定符头与节气如何对齐。"},{k:"hepan",label:"合盘",timeLabel:"你的出生时刻",hint:"合盘按「日主 + 夫妻宫 + 五行互补」看两个人的相处与互补,需要双方出生信息。"},{k:"tarot",label:"塔罗",timeLabel:"",hint:"塔罗不看时间,只记录抽牌时刻与你的提问。"},{k:"almanac",label:"黄历",timeLabel:"",hint:"黄历按公历日期查农历、干支、宜忌、时辰吉凶、二十八宿与吉神方位;只做本地计算。"},{k:"convert",label:"农历",timeLabel:"",hint:"公农历互转:公历生日可反查农历;只知道农历生日时,可转成公历再排盘。"},{k:"zeri",label:"择日",timeLabel:"",hint:"择日把区间内每天的建除宜忌与事项适配打分排序,并按属相排除冲煞日。"},{k:"chenggu",label:"称骨",timeLabel:"出生时刻",hint:"称骨按农历年、月、日、时的骨重求和;时辰必填。"},{k:"xiaoliuren",label:"小六壬",timeLabel:"起课时刻",hint:"小六壬用农历月/日/时掐指,也可用三个随机数起课。"},{k:"star",label:"星座",timeLabel:"",hint:"星座按公历日期给出太阳星座与当日基调;同日同星座结果固定。"},{k:"numerology",label:"生命数字",timeLabel:"",hint:"生命数字按公历生日归约出生命路径数、生日数与态度数。"},{k:"mbti",label:"人格",timeLabel:"",hint:"十六型人格是 24 道自我报告题的 MBTI 风格测算:4 题一页,按 1–5 打分,答满 12 题即可看结果;只作自我参照,不是官方量表。"},{k:"constitution",label:"体质",timeLabel:"",hint:"中医体质是九种体质各 5 题的自评问卷(共 45 题,1 没有 / 5 总是),按转化分判主次体质并给调养方向;不是医学诊断。"},{k:"wuyunliuqi",label:"运气",timeLabel:"",hint:"五运六气按大寒分年:中运、司天在泉、六步。"},{k:"taiyi",label:"太乙",timeLabel:"",hint:"太乙神数按积年推局:太乙落宫、八门、文昌、计神、始击、主客算与四将。"},{k:"trend",label:"人生K线",timeLabel:"出生时刻",hint:"人生 K 线按大运与流年十神给逐年运势分,画成走势图。"},{k:"fengshui",label:"风水",timeLabel:"",hint:"风水看八宅命卦、大游年四吉四凶与流年九宫飞星;也可按坐向看门主灶倾向,或按运与坐向排玄空下卦盘。"},{k:"name",label:"起名",timeLabel:"",hint:"起名按八字喜用匹配字库五行,可评估现有名字或生成候选名。"}];function Aa(n){return String(n).padStart(2,"0")}const Pt=["almanac","convert","zeri","chenggu","xiaoliuren","star","numerology","trend","fengshui","name","constitution","wuyunliuqi","taiyi"],mi=[{sys:"liuyao",label:"六爻",tip:"摇一卦:只用起卦当下定六神旺衰,所问之事写下面(必填)"},{sys:"meihua",label:"梅花",tip:"梅花易数:按起卦时刻的年月日时成卦,也可改成两个数字起卦"},{sys:"daliuren",label:"六壬",tip:"大六壬:按起卦时刻的日干支、时支与月将起天地盘"},{sys:"qimen",label:"奇门",tip:"奇门遁甲:时家转盘,默认拆补取局,可换超神接气/置闰"},{sys:"tarot",label:"塔罗",tip:"塔罗:不看时间,点一下就抽牌;牌阵在下面选"},{sys:"xiaoliuren",label:"小六壬",tip:"小六壬:按起课时刻推算,也可切报数起课"}],ui="mp.cast.open",vn=Array.isArray(window.__MPGroups)?window.__MPGroups:[],gi="mp.recent.tabs",fi="mp.first.view",hi=3;function Ft(n){try{return JSON.parse(window.localStorage.getItem(n)||"null")}catch{return null}}function Dt(n,s){try{window.localStorage.setItem(n,JSON.stringify(s))}catch{}}function yn(n){const s=new Date(n);if(Number.isNaN(s.getTime()))return"";const S=ee=>new Date(ee.getFullYear(),ee.getMonth(),ee.getDate()).getTime(),F=Math.round((S(new Date)-S(s))/864e5);return F<=0?"今天":F===1?"昨天":`${Aa(s.getMonth()+1)}-${Aa(s.getDate())}`}function Rt(){const n=new Date;return{date:`${n.getFullYear()}-${Aa(n.getMonth()+1)}-${Aa(n.getDate())}`,time:`${Aa(n.getHours())}:${Aa(n.getMinutes())}`}}const wn={ziwei:"birth",bazi:"birth",hepan:"birth",liuyao:"cast",meihua:"cast",daliuren:"cast",qimen:"cast",tarot:"none",almanac:"date",zeri:"date",star:"date",numerology:"date",convert:"date",chenggu:"birth",trend:"birth",fengshui:"birth",name:"birth",xiaoliuren:"cast",mbti:"none",constitution:"none",wuyunliuqi:"date",taiyi:"date"},bi={date:"1990-05-12",time:"14:30"},La=n=>wn[n]||"none",Pe=window.__MPCore||{},Ve=Pe.needAsk||(n=>!1),ae={ref:null,seats:[],seatOk:{},seatDisposers:[],contribution:"",keys:"",injectType:"",spec:"",errs:[],regs:0,mounted:0},fa={r:null,q:"",it:null};let sa="";function xi(){const n=[];return n.push("inputActions "+(ae.ref?"已拿到":"未拿到")),n.push("渲染 "+ae.mounted+" 次"),n.push("注册 "+ae.regs+" 次"),n.push("inject "+(ae.injectType||"?")),n.push("槽位 "+(ae.spec||"?")),ae.contribution&&n.push("贡献 "+ae.contribution),ae.errs.length&&n.push("错误:"+ae.errs.join(" / ")),"桥自检:"+n.join(";")}function vi(n){if(ae.errs.length>=3)return;const s=n&&n.message?String(n.message):String(n);ae.errs.push(s.slice(0,90))}function $n(n){if(!n)return null;const s=n.inputActions;if(s&&typeof s.setDraft=="function"&&typeof s.submit=="function")return s;const S=n.actions&&n.actions.input;return S&&typeof S.setDraft=="function"&&typeof S.submit=="function"?S:null}function yi(n,s){const S=$n(n);return ga(()=>{if(ae.seats.indexOf(s)<0&&ae.seats.push(s),ae.keys=n?Object.keys(n).join(","):"",S){ae.ref=S;try{window.__MPComposer=S}catch{}}return()=>{ae.ref===S&&(ae.ref=null)}},[S,s]),S}function kn(){const n=fa.r;if(!n)return"";try{const s=X.askPrompt?X.askPrompt(n,{question:fa.q,interpret:fa.it}):null;return s&&s.text||String(n.summary||"")}catch{return String(n.summary||"")}}function wi(n){return ae.mounted+=1,yi(n,"input.right")?r("button",{type:"button",className:"mp-chip ok",title:fa.r?"把上一张盘的摘要和问题发进对话窗":"先在侧栏「命理」里排一张盘",onClick:()=>{const S=kn();S&&ki(S)}},"命理·问"):r("span",{className:"mp-chip warn",title:"命理:已占住输入框槽位,但没拿到 inputActions;把这句话告诉作者"},"命理·未就绪")}function $i(n){return ae.mounted+=1,yi(n,"composer.dock"),null}function ki(n){let s=ae.ref;if(!s)try{s=window.__MPComposer||null}catch{s=null}return!s||typeof s.setDraft!="function"||typeof s.submit!="function"?!1:(s.setDraft(n),s.submit(),!0)}function zn(n){const s=n.kind==="ziwei"?R.ziweiHTML(n.r):n.kind==="bazi"?R.baziHTML(n.r)+(n.trend?R.trendHTML(n.trend,{brief:!1}):""):n.kind==="meihua"?R.meihuaHTML(n.r):n.kind==="daliuren"?R.daliurenHTML(n.r):n.kind==="qimen"?R.qimenHTML(n.r)+R.qimenFactsHTML(n.r):n.kind==="hepan"?n.r.chart==="ziwei"?R.ziweiHepanHTML(n.r):R.hepanHTML(n.r):n.kind==="tarot"?R.tarotHTML(n.r):n.kind==="liuyao"?R.liuyaoHTML(n.r):n.kind==="chenggu"?R.chengguHTML(n.r):n.kind==="almanac"?R.almanacHTML(n.r):n.kind==="zeri"?R.zeriHTML(n.r):n.kind==="trend"?R.trendHTML(n.r):n.kind==="name"?R.nameHTML(n.r):n.kind==="mbti"?R.mbtiHTML(n.r):n.kind==="constitution"?R.constitutionHTML(n.r):n.kind==="wuyunliuqi"?R.wuyunliuqiHTML(n.r):n.kind==="taiyi"?R.taiyiHTML(n.r):n.kind==="fengshui"?R.fengshuiHTML(n.r):R.quickHTML(n.r),S=s.startsWith('<section class="mp-br"')?s.indexOf("</section>"):-1,F=S<0?s:s.slice(S+10),ee=S<0?"":s.slice(0,S+10);return F+R.plainHTML(n.r)+ee}function jn(n){const s=!!n.open,S=r("button",{type:"button",className:"mp-castrow-h","aria-expanded":s?"true":"false","aria-controls":"mp-castlist",onClick:n.onToggle,title:"展开六个占卜体系的起卦入口:点一个就切过去,并用当前时刻起卦"},r("span",{className:"mp-castrow-t"},"起卦"),r("span",{className:"mp-castrow-l"},s?"六个占卜体系,点一下就起":mi.map(F=>F.label).join(" · ")),r("i",{className:"mp-castrow-i","aria-hidden":"true"},s?"▴":"▾"));return s?r("div",{key:"cast",className:"mp-castrow open"},S,r("div",{key:"list",id:"mp-castlist",className:"mp-castlist"},mi.map(F=>r("button",{key:F.sys,type:"button",className:"mp-castchip"+(n.tab===F.sys?" on":""),"data-cast":F.sys,"aria-pressed":n.tab===F.sys?"true":"false",title:F.tip,onClick:()=>n.onCast(F.sys)},F.label))),n.hasResult?r("div",{key:"ask",className:"mp-castask"},r("button",{type:"button",className:"mp-castgo",onClick:n.onAsk,title:"把这张盘和所问之事发进 DSH 对话窗(与下面的「问进对话」同一个通路)"},"把这张盘问进对话")):null):r("div",{key:"cast",className:"mp-castrow"},S)}function Sn(){const[n,s]=N("ziwei"),[S,F]=N("1990-05-12"),[ee,se]=N("14:30"),[le,re]=N(!1),[ye,t]=N("female"),[$e,I]=N(""),[xe,we]=N("1992-08-15"),[Z,K]=N("10:00"),[V,G]=N("female"),[te,Ne]=N(""),[Le,ha]=N("bazi"),[Ue,xt]=N(!1),[Ta,Wa]=N("1990-01-01"),[Ea,ba]=N("12:00"),[xa,_a]=N("male"),[Oa,vt]=N(""),[oa,va]=N("chaibu"),[Ze,Ha]=N(!0),[pa,Pa]=N(!0),[Fa,Qa]=N("same-day"),[et,Bt]=N(!1),[ra,Gt]=N(""),[Da,Te]=N(""),[Ra,at]=N(null),[tt,Ia]=N({}),[ya,Se]=N(null),[We,yt]=N([{year:"2019",kind:"career"},{year:"2022",kind:"love"}]),[Fe,it]=N(null),[Ba,nt]=N("开业"),[la,Ga]=N("30"),[Ye,st]=N(""),[wa,Qe]=N(""),[Oe,ea]=N("solar2lunar"),[$a,wt]=N(""),[Ua,$t]=N(!1),[De,ka]=N("time"),[za,kt]=N(""),[Za,He]=N(""),[aa,Ya]=N(""),[da,ot]=N(()=>new Array(bt().total).fill(null)),[Ut,zt]=N(0),[ja,e]=N(null),[i,o]=N(()=>new Array(Ht).fill(null)),[l,p]=N(0),[c,d]=N("60"),[u,m]=N("natal"),[f,b]=N("9"),[w,$]=N("子"),[A,L]=N("午"),[_,Q]=N("assess"),[D,T]=N("李"),[H,pe]=N(""),[M,B]=N("6"),[y,he]=N(!1),[W,ie]=N(""),[j,k]=N(null),[C,O]=N(""),[oe,ge]=N(""),[de,ke]=N(null),[ve,P]=N(()=>rn()),[U,J]=N(()=>Ft(fi)==="flat"?"flat":"group"),[fe,be]=N(()=>{const a=Ft(gi);return Array.isArray(a)?a:[]}),[x,v]=N({}),[ce,me]=N(null),[Ce,je]=N(()=>R.profilesLoad()),[ze,Ke]=N(null),[ca,jt]=N(""),[Sa,Je]=N(""),[ji,Me]=N(""),[Cn,Ka]=N(!1),[Zt,Si]=N("three"),[ma,Yt]=N(""),[Re,qi]=N("general");function Kt(){return ra.trim()||(j&&Ve(j.kind)?String(ma||"").trim():"")}ga(()=>{j&&j.r&&(fa.r=j.r,fa.q=Kt(),fa.it=j.it||null)},[j,ra,ma]);const[Ni,An]=N(null),[Mi,Ln]=N(Ft(ui)===!0),[Tn,St]=N(!1),[qa,Ci]=N("time"),[qt,Ai]=N(""),[Nt,Li]=N(""),[Mt,Ti]=N(""),[En,Na]=N(""),[Jt,Ct]=N({birth:null,cast:null}),_n=Ge.find(a=>a.k===n)||Ge[0],pt=n==="bazi"||n==="ziwei"||n==="hepan"||n==="chenggu"||n==="trend"||n==="fengshui"||n==="name",Ie=La(n),Ei=!(n==="meihua"&&qa==="number"),_i=n!=="tarot"&&n!=="mbti"&&n!=="constitution"&&Ei,Oi=_i&&Ie!=="date",Ss=Oi,Ae=async(a,g,z,q)=>{const h=a||n,ue=z||qa,qe=h==="bazi"||h==="trend",ta=q&&typeof q.hourUnknown=="boolean"?q.hourUnknown:le,Ee=g||(qe&&ta?{date:S,time:"12:00"}:{date:S,time:ee}),Be=q&&q.gender?q.gender:ye,Ma=q&&typeof q.address=="string"?q.address:$e,lt=q&&typeof q.trueSolar=="boolean"?q.trueSolar:Ze,dt=q&&typeof q.lateZi=="boolean"?q.lateZi:pa,Vi=q&&typeof q.lines=="string"?q.lines:W,Tt=q&&typeof q.question=="string"?q.question:ma,Wi=Va(),Qi=++_e,ct=()=>Qi!==_e;ke(null),Me("");try{let Ca=0,en=null;Ka(!0);try{await ut(h);const Y=window.__MP_LAST_LOAD;Ca=Y&&typeof Y.ms=="number"?Y.ms:Va()-Wi,en=Y&&typeof Y.cached=="boolean"?Y.cached:null}catch(Y){if(ct())return;Je(Y&&Y.message?Y.message:String(Y)),k(null);return}finally{ct()||Ka(!1)}if(ct())return;const an=`${Ee.date}T${Ee.time}`,E={system:h};if(E.shadow=h!=="mbti"&&h!=="constitution",E.trace=h==="liuyao"||h==="bazi"||h==="ziwei"||h==="qimen"||h==="daliuren",h!=="tarot"&&(E.datetime=an),h==="bazi"||h==="ziwei"||h==="hepan"||h==="trend"){if(E.gender=Be,E.trueSolar=lt,Ma.trim()){E.address=Ma.trim();try{const Y=await X.geocodeAddress(E.address,{online:y});Y&&typeof Y.lon=="number"&&(E.longitude=Y.lon,E.geo=Y)}catch(Y){console.error("[metaphysics] 地址解析失败,退回内置表",Y)}if(ct())return}(h==="bazi"||h==="ziwei")&&(E.cross=et),E.lateZi=dt,qe&&ta&&(E.hourUnknown=!0)}if(h==="liuyao"){const Y=Pe.parseLines(Vi);Y.lines?E.lines=Y.lines:Y.warning&&Me(Y.warning)}if(h==="qimen"&&(E.juMethod=oa,E.lateZiHourMode=Fa,E.direction=Re),h==="bazi"&&(E.verifyPast=6),h==="zeri"){E.startDate=Ee.date,E.task=Ba,E.days=Number(la)||30,Ye&&(E.shengXiao=Ye);const Y=wa.split(/[,,、\s]+/).filter(Boolean);Y.length&&(E.candidates=Y)}if(h==="xiaoliuren")if(E.mode=De,De==="number")E.num1=Number(za)||void 0,E.num2=Number(Za)||void 0,E.num3=Number(aa)||void 0;else{E.date=Ee.date;const Y=Number(String(Ee.time).split(":")[0]);E.hour=Number.isFinite(Y)?Y:12}if(h==="mbti"){delete E.datetime;const Y=da.slice();for(;Y.length&&Y[Y.length-1]==null;)Y.pop();Y.length&&(E.answers=Y)}if(h==="constitution"&&(delete E.datetime,E.answers=i.slice()),h==="trend"&&qe&&ta&&(E.hourUnknown=!0),h==="trend"&&(E.toAge=Number(c)||60),h==="fengshui"&&(E.action=u,u==="natal"?E.gender=Be:(E.sitting=w,E.facing=A,delete E.datetime,u==="xuankong"&&(E.period=Number(f)||9))),h==="name"&&(E.action=_,E.surname=D.trim(),_==="generate"?(E.gender=Be,E.limit=Number(M)||6,E.trueSolar=lt,E.lateZi=dt):(E.givenName=H.trim(),(!Ee.date||!Ee.time)&&delete E.datetime)),h==="convert")if(E.system="convert",Oe==="lunar2solar"){const Y=/^(\d{4})-(\d{1,2})-(\d{1,2})$/.exec(String($a).trim());if(!Y){Je("农历转公历请按「农历年-月-日」填写,例如 2026-9-17;闰月单独勾选。");return}E.mode="lunar2solar",E.lunarYear=Number(Y[1]),E.lunarMonth=Number(Y[2]),E.lunarDay=Number(Y[3]),E.isLeapMonth=Ua,delete E.datetime}else E.mode="solar2lunar";if(h==="tarot"&&(E.spread=Zt),h==="hepan"&&(E.chart=Le,E.partner={datetime:`${xe}T${Z}`,gender:V,address:te.trim()||void 0,trueSolar:Ze},Ue&&(E.partner2={datetime:`${Ta}T${Ea}`,gender:xa,address:Oa.trim()||void 0,trueSolar:Ze})),Ve(h)){if(!Tt.trim()){Je("请先填写「所问之事」——一句话即可,例如:今年是否适合换工作?"),St(!0),k(null);return}St(!1),E.question=Tt.trim(),h==="liuyao"&&(E.direction=Re)}if(h==="meihua"&&(E.mode=ue,ue==="number")){if(qt.trim()===""||Nt.trim()===""){Je("数字起卦需要填两个数(第一个数定上卦、第二个数定下卦)。"),k(null);return}if(E.upper=Number(qt),E.lower=Number(Nt),!Number.isFinite(E.upper)||!Number.isFinite(E.lower)){Je("两个数都要是数字,例如 17 和 29。"),k(null);return}Mt!==""&&(E.changing=Number(Mt))}const ws=Va();h==="trend"&&!E.asOf&&Pe.todayStamp&&(E.asOf=Pe.todayStamp());const Ja=X.compute(E),$s=Va()-ws;let ei=null;try{ei=R.shadowTrack?R.shadowTrack(Ja):null}catch{ei=null}let ai=null;if(h==="bazi")try{ai=X.compute({system:"trend",datetime:an,gender:Be,toAge:100,trueSolar:lt,lateZi:dt,...Pe.todayStamp?{asOf:E.asOf||Pe.todayStamp()}:{},...E.dst!==void 0?{dst:E.dst}:{},...E.address?{address:E.address}:{},...typeof E.longitude=="number"?{longitude:E.longitude}:{},...E.geo?{geo:E.geo}:{}})}catch{ai=null}let ti=null;if(X.caliberCompare)try{ti=X.caliberCompare(E)}catch{ti=null}const ks=Ve(h)||h==="qimen"?{question:Ve(h)?Tt.trim():"",direction:Re}:void 0,Et=X.interpret?X.interpret(Ja,ks):null;Et&&Ja.cross&&X.crossSection&&(Et.sections=[...Et.sections||[],X.crossSection(Ja.cross)]);const zs=La(h)==="cast"&&(h!=="meihua"||ue==="time");k({kind:h,r:Ja,it:Et,at:Ee,timed:zs,trend:ai,caliber:ti,shadowDiff:ei,gender:Be,address:Ma,trueSolar:lt,lateZi:dt});const tn=Y=>{typeof requestAnimationFrame=="function"?requestAnimationFrame(()=>Y>1?tn(Y-1):nn()):setTimeout(nn,0)},nn=()=>{Qi===_e&&ke({engineMs:Ca,computeMs:$s,cached:en,totalMs:Va()-Wi,renderMs:null})};if(tn(2),at(null),Se(null),Ia({}),it(null),Je(""),Na(""),h!=="tarot"&&h!=="mbti"&&h!=="constitution"){const Y=!!(qe&&ta),ii={kind:h,date:Ee.date,time:Y?"":Ee.time,hourUnknown:Y,gender:Be,address:Ma,trueSolar:lt,lateZi:dt,lines:h==="liuyao"?Vi:"",question:Ve(h)?Tt.trim():"",direction:Re,spread:Zt,mhMode:ue,upper:qt,lower:Nt,changing:Mt,...h==="qimen"?{qimenRule:oa,qLateZi:Fa}:{},...h==="zeri"?{task:Ba,days:la,shengXiao:Ye,zCand:wa}:{},...h==="xiaoliuren"?{xlrMode:De,num1:za,num2:Za,num3:aa}:{},...h==="trend"?{toAge:c}:{},...h==="fengshui"?{fsMode:u,fsPeriod:f,sitting:w,facing:A}:{},...h==="name"?{nnMode:_,surname:D,givenName:H,limitN:M}:{},...h==="convert"?{convMode:Oe,lunarDate:$a,leapMonth:Ua}:{},...h==="hepan"?{hpChart:Le,partnerDate:xe,partnerTime:Z,partnerGender:V,partnerAddress:te,thirdOn:Ue,p2Date:Ta,p2Time:Ea,p2Gender:xa,p2Address:Oa}:{},label:dn(h,Ja),at:Date.now()};P(ua=>{const sn=[ii,...ua.filter(js=>!ln(js,ii))].slice(0,20);return li(sn),sn});try{const ua=R.casesAdd(ii);ua&&ua.ok&&!ua.dup&&ua.list&&rt(ua.list)}catch{}}}catch(Ca){if(ct())return;Je(Ca&&Ca.message?Ca.message:String(Ca)),k(null)}},On=async a=>{const g=La(a),z=++_e;if(Je(""),a==="mbti"){Me(""),Ka(!0);try{await ut(a)}catch(h){z===_e&&Je(h&&h.message?h.message:String(h))}finally{z===_e&&Ka(!1)}if(z!==_e)return;s(a),da.filter(h=>h!=null).length>=ia?Ae(a):k(null);return}if(a==="constitution"){Me(""),Ka(!0);try{if(await ut(a),z===_e&&!ja){const h=X.compute({system:"constitution"});h&&h.paper&&e(h)}}catch(h){z===_e&&Je(h&&h.message?h.message:String(h))}finally{z===_e&&Ka(!1)}if(z!==_e)return;s(a),i.filter(h=>h!=null).length>=na?Ae(a):k(null);return}if(s(a),g==="none"){Ae(a);return}const q=Jt[g]||(g==="cast"||g==="date"?Rt():{date:bi.date,time:bi.time});F(q.date),se(q.time),Ae(a,q)},Hn=a=>{Ge.some(g=>g.k===a)&&be(g=>{const z=(g||[]).filter(h=>h&&h.tab&&h.tab!==a),q=[{tab:a,at:Date.now()}].concat(z).slice(0,hi);return Dt(gi,q),q})},Hi=a=>{const g=a==="flat"?"flat":"group";J(g),Dt(fi,g)},At=a=>{Hn(a),On(a)},Pn=()=>{const a=!Mi;Ln(a),Dt(ui,a)},Fn=a=>{At(a)},Dn=a=>{F(a),Ie!=="none"&&Ct(g=>Object.assign({},g,{[Ie]:{date:a,time:ee}}))},Rn=a=>{se(a),Ie!=="none"&&Ct(g=>Object.assign({},g,{[Ie]:{date:S,time:a}}))},qs=()=>{const a=Rt();F(a.date),se(a.time),Ie!=="none"&&Ct(g=>Object.assign({},g,{[Ie]:null})),Ae(n,a)},Xt=()=>{if(n==="mbti"){const a=da.filter(g=>g!=null).length;if(a<ia){Me(`先答满 ${ia} 题再看结果(现答 ${a} 题,还差 ${ia-a} 题)。`);return}Ae(n);return}if(n==="constitution"){const a=i.filter(g=>g!=null).length;if(a<na){Me(`先答满 ${na} 题再看结果(现答 ${a} 题,还差 ${na-a} 题)。`);return}Ae(n);return}if(Ie!=="none"&&!Jt[Ie]){const a=Rt();F(a.date),se(a.time),Ae(n,a);return}Ae(n)},In=()=>{const a={date:"1990-05-12",time:"14:30"};s("bazi"),t("male"),I("河北石家庄"),Ct(g=>Object.assign({},g,{birth:a})),F(a.date),se(a.time),Ae("bazi",a,null,{gender:"male",address:"河北石家庄"})},Pi=a=>{Ci(a),Ae(n,{date:S,time:ee},a)},Bn=()=>!!(window.matchMedia&&window.matchMedia("(max-width: 640px)").matches),Gn=()=>Ni===null?Bn():Ni,Lt=(a,g,z)=>{if(!g)return;const q=ue=>{a.textContent=ue?"已复制":"复制失败",setTimeout(()=>{a.textContent=z},1400)},h=()=>{try{const ue=document.createElement("textarea");ue.value=g,ue.setAttribute("readonly",""),ue.style.position="fixed",ue.style.opacity="0",document.body.appendChild(ue),ue.select();const qe=!!(document.execCommand&&document.execCommand("copy"));return document.body.removeChild(ue),qe}catch{return!1}};try{if(navigator.clipboard&&navigator.clipboard.writeText){navigator.clipboard.writeText(g).then(()=>q(!0),()=>q(h()));return}}catch{}q(h())},Un=a=>Lt(a,a.getAttribute("data-shadow-copy")||"","复制 ID"),Zn=a=>Lt(a,a.getAttribute("data-handle-copy")||"","复制句柄"),Yn=a=>{const g=a.closest(".mp-trace-layer")||document.getElementById("mp-trace-layer"),z=g&&g.querySelector("[data-trace-md]");Lt(a,z?z.value:"","复制 Markdown")},Kn=()=>{try{return String(location.href).split("#")[0]}catch{return""}},Jn=()=>{if(!j||!j.r)return null;try{return X.askPackages?X.askPackages(j.r,{question:Kt(),interpret:j.it,base:Kn()}):null}catch{return null}},Fi=[["full","复制提问","完整提问:盘面摘要 + 阅读层次 + 回答骨架,粘进任何对话窗都能用"],["brief","复制精简","一句话版:体系 + 排盘句柄 + 你的问题,够助手认出是哪张盘"],["structured","复制参数","结构化参数(JSON):助手可直接照 args 调 compute,不必解析自然语言"],["link","复制深链","深链:把这张盘的参数编进链接,打开即还原同一张盘(换台机器、发给朋友都行)"]],Xn=(a,g)=>{const z=Jn();if(!z){Te("还没有可以复制的盘:先排一张。");return}const q=a==="link"?z.link:z[a];if(!q){Te(a==="link"?"这张盘没拿到句柄(随机抽牌只复现参数、不复现牌面),深链做不出来;用「复制提问」那一档。":"这一档暂时是空的,换一档试试。");return}Lt(g,q,Fi.find(h=>h[0]===a)[1]),a==="link"&&Te("深链已复制:打开就还原这张盘,也可以直接发给别人。链接里是编码不是加密,别公开贴。")},Vn=()=>{const a=document.getElementById("mp-trace-layer");if(!a)return;a.classList.add("open"),a.setAttribute("aria-hidden","false");const g=a.querySelector("[data-trace-close]");g&&g.focus&&g.focus()},Di=()=>{const a=document.getElementById("mp-trace-layer");if(!a)return;a.classList.remove("open"),a.setAttribute("aria-hidden","true");const g=document.querySelector("[data-trace-open]");g&&g.focus&&g.focus()},Wn=a=>{const g=a.target&&a.target.closest?a.target.closest("[data-shadow-copy]"):null;if(g){Un(g);return}const z=a.target&&a.target.closest?a.target.closest("[data-handle-copy]"):null;if(z){Zn(z);return}if(a.target&&a.target.closest?a.target.closest("[data-trace-open]"):null){Vn();return}const h=a.target&&a.target.closest?a.target.closest("[data-trace-copy]"):null;if(h){Yn(h);return}if(a.target&&a.target.closest?a.target.closest("[data-mp-askcopy]"):null){as();return}if(a.target&&a.target.closest?a.target.closest("[data-trace-close]"):null){Di();return}const ta=a.target&&a.target.closest?a.target.closest(".mp-it-head"):null;if(!ta)return;const Ee=ta.closest(".mp-it");if(!Ee)return;const Be=!Ee.classList.contains("folded");Ee.classList.toggle("folded",Be),ta.setAttribute("aria-expanded",Be?"false":"true");const Ma=ta.querySelector(".mp-it-hint");Ma&&(Ma.textContent=Be?"点击展开":"点击收起"),An(Be)},Ri=(a,g)=>{if(!j||!(Ve(n)||n==="qimen"))return;const z={question:Ve(n)?(g===void 0?ma:g).trim():"",direction:a===void 0?Re:a},q=X.interpret?X.interpret(j.r,z):null;let h=j.r;if((n==="liuyao"||n==="qimen")&&h&&h.trace&&X.buildTrace)try{const ue=n==="liuyao"?X.buildTrace(h,{direction:z.direction,gender:h.useGod&&h.useGod.gender||"male",refresh:!0}):X.buildTrace(h,{direction:z.direction});ue&&(h=Object.assign({},h,{trace:ue}))}catch{}k(Object.assign({},j,{r:h,it:q}))},Qn=a=>!a||!a.timed||!a.at?"":`<div class="mp-cast">起卦时刻:<b>${a.at.date} ${a.at.time}</b> (来自你的本机时间,点「此刻」可重新取当下)</div>`,es=()=>{try{const a=j&&j.r&&j.r.summary?j.r.summary:"";if(!a)return;navigator.clipboard.writeText(a).then(()=>Na("已复制"),()=>Na("复制失败"))}catch{Na("复制失败")}},as=()=>{if(!j||!j.r||!window.Engine||!window.Engine.buildEventPrompt)return;const a=Pe&&Pe.kindOfDirection?Pe.kindOfDirection(Re):"other";let g;try{g=window.Engine.buildEventPrompt(j.r,{question:(ma||"").trim(),kind:a,gender:ye,timeKnown:!0})}catch{g=null}g&&g.text&&navigator.clipboard.writeText(g.text).then(()=>Na("已复制问事提示"),()=>Na("复制失败"))},Ii=()=>{if(!(!j||!j.r||!ra.trim()))try{at(X.followup?X.followup(j.r,ra.trim()):null)}catch(a){at({question:ra.trim(),ok:!1,answer:"追问失败:"+(a&&a.message?a.message:a),evidence:[],confidence:"弱"})}},Bi=()=>{if(!(!j||!j.r))try{const a=X.askPrompt?X.askPrompt(j.r,{question:Kt(),interpret:j.it}):null,g=a&&a.text?a.text:String(j.r.summary||"");if(ki(g)){Te("已发到对话窗,往下看回复。");return}const z="("+xi()+")";navigator.clipboard&&navigator.clipboard.writeText?navigator.clipboard.writeText(g).then(()=>Te("对话输入框还没就绪"+z+",已复制提问;粘进对话窗回车即可。"),()=>Te("对话输入框还没就绪"+z+",复制也没成功;先点「复制文字结果」再贴。")):Te("对话输入框还没就绪"+z+";先点「复制文字结果」再贴进对话窗。")}catch(a){Te("发到对话窗失败:"+(a&&a.message?a.message:a))}},ts=()=>{const a=[],g=window.__MP_VER||"未知";a.push("# 命理插件反馈"),a.push(""),a.push("## 我遇到的情况"),a.push(""),a.push("(在这里写一句就好:哪里不对 / 读不懂哪一段 / 算得和别人不一样 / 想加什么。下面这些是自动带的复现信息,不用改。)"),a.push(""),a.push("## 复现信息"),a.push(""),a.push("- 插件版本:v"+g);{const h=Array.isArray(window.__MP_UNRELEASED)?window.__MP_UNRELEASED:[];h.length&&a.push("- 未发版改动:"+h.length+" 项(版本号未变,说明这份产物比 v"+g+" 新)")}const z=Ge.find(h=>h.k===n)?.label||n;if(a.push("- 体系:"+z+(z===n?"":"("+n+")")),ma&&a.push("- 所问之事:"+ma),Re&&Re!=="general"){const h=(Array.isArray(X.DIRECTIONS)?X.DIRECTIONS:[]).find(ue=>ue.key===Re);a.push("- 询问方向:"+(h?h.label:Re))}a.push(""),a.push("### 输入"),a.push(""),a.push("```"),(La(n)==="time"||La(n)==="date")&&(a.push(`日期:${S}`),La(n)==="time"&&a.push(`时刻:${le?"(未知,按三柱排)":ee}`),a.push(`性别:${ye==="male"?"男":"女"}`),$e&&a.push(`出生地:${$e}`),a.push(`真太阳时:${Ze?"开":"关"} 晚子时换日:${pa?"开":"关"}`),n==="qimen"&&a.push(`奇门取局:${oa}`),et&&a.push("交叉验证:开"));const q={合盘:()=>{a.push(`对方:${xe} ${Z} ${V==="male"?"男":"女"}${te?" "+te:""}(${Le} 盘)`),Ue&&a.push(`第三方:${Ta} ${Ea} ${xa==="male"?"男":"女"}${Oa?" "+Oa:""}`)},择日:()=>{a.push(`事项:${Ba} 起算:${S} 天数:${la}${Ye?" 属相:"+Ye:""}${wa?" 候选日:"+wa:""}`)},起名:()=>{a.push(`姓:${D||"(未填)"} 名:${H||"(未填)"} 模式:${_}${_==="generate"?" 候选数:"+(M||"默认"):""}`)},公农历:()=>{a.push(`模式:${Oe}${$a?" 农历输入:"+$a:""}${Ua?"(闰月)":""}`)},小六壬:()=>{a.push(`模式:${De}${De==="number"?` 报数:${za}/${Za}/${aa}`:""}`)},风水:()=>{a.push(`动作:${u}${u==="natal"?"":` 坐:${w} 向:${A}`}${u==="xuankong"?` 运:${f}`:""}`)}};if(q[z]&&q[z](),a.push("```"),a.push(""),Sa&&(a.push("### 报错原文"),a.push(""),a.push("```"),a.push(String(Sa)),a.push("```"),a.push("")),j&&j.r){a.push("### 结果摘要(引擎原文,前 40 行)"),a.push(""),a.push("```");const h=String(j.r.summary||(X.renderText?X.renderText(j.r):"")||"");a.push(h.split(`
|
|
2609
|
+
`+S),r("div",{className:"mp-lbl"},"环境:__PP "+typeof R+" · Engine "+typeof window.Engine+" · React "+typeof Ja+" · 版本 "+(typeof R=="object"&&R&&(window.__MP_VER||"?"))+((window.__MP_UNRELEASED||[]).length?" · 未发版改动 "+window.__MP_UNRELEASED.length+" 项":""))))}}function xn(n){const s=n&&n.size?n.size:20,S=n&&n.active;return r("svg",{width:s,height:s,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:1.6,strokeLinecap:"round","aria-hidden":!0,style:{opacity:S?1:.72}},r("circle",{cx:12,cy:12,r:8.2}),r("path",{d:"M12 3.8a4.1 4.1 0 0 1 0 8.2 4.1 4.1 0 0 0 0 8.2"}),r("circle",{cx:12,cy:8,r:1.1,fill:"currentColor",stroke:"none"}),r("circle",{cx:12,cy:16,r:1.1,fill:"currentColor",stroke:"none"}))}const Ge=[{k:"ziwei",label:"紫微",timeLabel:"出生时刻",hint:"紫微斗数需要出生日期、时刻与性别;出生地只影响真太阳时修正。"},{k:"bazi",label:"八字",timeLabel:"出生时刻",hint:"四柱八字按节气与真太阳时定时柱,出生地越准,时柱越稳。"},{k:"liuyao",label:"六爻",timeLabel:"起卦时刻",hint:"六爻不需要出生时间:只用起卦当下的日辰定六神、月建定旺衰,卦由摇出。"},{k:"meihua",label:"梅花",timeLabel:"起卦时刻",hint:"梅花用起卦时刻的年月日时数成卦,也可直接给两个数字起卦;与出生时间无关。"},{k:"daliuren",label:"六壬",timeLabel:"起卦时刻",hint:"大六壬用起卦时刻的日干支、时支与月将起天地盘;同样与出生时间无关。"},{k:"qimen",label:"奇门",timeLabel:"起局时刻",hint:"奇门时家转盘:用起局时刻定节气、三元与局数;换局规则决定符头与节气如何对齐。"},{k:"hepan",label:"合盘",timeLabel:"你的出生时刻",hint:"合盘按「日主 + 夫妻宫 + 五行互补」看两个人的相处与互补,需要双方出生信息。"},{k:"tarot",label:"塔罗",timeLabel:"",hint:"塔罗不看时间,只记录抽牌时刻与你的提问。"},{k:"almanac",label:"黄历",timeLabel:"",hint:"黄历按公历日期查农历、干支、宜忌、时辰吉凶、二十八宿与吉神方位;只做本地计算。"},{k:"convert",label:"农历",timeLabel:"",hint:"公农历互转:公历生日可反查农历;只知道农历生日时,可转成公历再排盘。"},{k:"zeri",label:"择日",timeLabel:"",hint:"择日把区间内每天的建除宜忌与事项适配打分排序,并按属相排除冲煞日。"},{k:"chenggu",label:"称骨",timeLabel:"出生时刻",hint:"称骨按农历年、月、日、时的骨重求和;时辰必填。"},{k:"xiaoliuren",label:"小六壬",timeLabel:"起课时刻",hint:"小六壬用农历月/日/时掐指,也可用三个随机数起课。"},{k:"star",label:"星座",timeLabel:"",hint:"星座按公历日期给出太阳星座与当日基调;同日同星座结果固定。"},{k:"numerology",label:"生命数字",timeLabel:"",hint:"生命数字按公历生日归约出生命路径数、生日数与态度数。"},{k:"mbti",label:"人格",timeLabel:"",hint:"十六型人格是 24 道自我报告题的 MBTI 风格测算:4 题一页,按 1–5 打分,答满 12 题即可看结果;只作自我参照,不是官方量表。"},{k:"constitution",label:"体质",timeLabel:"",hint:"中医体质是九种体质各 5 题的自评问卷(共 45 题,1 没有 / 5 总是),按转化分判主次体质并给调养方向;不是医学诊断。"},{k:"wuyunliuqi",label:"运气",timeLabel:"",hint:"五运六气按大寒分年:中运、司天在泉、六步。"},{k:"taiyi",label:"太乙",timeLabel:"",hint:"太乙神数按积年推局:太乙落宫、八门、文昌、计神、始击、主客算与四将。"},{k:"trend",label:"人生K线",timeLabel:"出生时刻",hint:"人生 K 线按大运与流年十神给逐年运势分,画成走势图。"},{k:"fengshui",label:"风水",timeLabel:"",hint:"风水看八宅命卦、大游年四吉四凶与流年九宫飞星;也可按坐向看门主灶倾向,或按运与坐向排玄空下卦盘。"},{k:"name",label:"起名",timeLabel:"",hint:"起名按八字喜用匹配字库五行,可评估现有名字或生成候选名。"}];function Ca(n){return String(n).padStart(2,"0")}const Ht=["almanac","convert","zeri","chenggu","xiaoliuren","star","numerology","trend","fengshui","name","constitution","wuyunliuqi","taiyi"],ci=[{sys:"liuyao",label:"六爻",tip:"摇一卦:只用起卦当下定六神旺衰,所问之事写下面(必填)"},{sys:"meihua",label:"梅花",tip:"梅花易数:按起卦时刻的年月日时成卦,也可改成两个数字起卦"},{sys:"daliuren",label:"六壬",tip:"大六壬:按起卦时刻的日干支、时支与月将起天地盘"},{sys:"qimen",label:"奇门",tip:"奇门遁甲:时家转盘,默认拆补取局,可换超神接气/置闰"},{sys:"tarot",label:"塔罗",tip:"塔罗:不看时间,点一下就抽牌;牌阵在下面选"},{sys:"xiaoliuren",label:"小六壬",tip:"小六壬:按起课时刻推算,也可切报数起课"}],mi="mp.cast.open",vn=Array.isArray(window.__MPGroups)?window.__MPGroups:[],ui="mp.recent.tabs",gi="mp.first.view",fi=3;function Pt(n){try{return JSON.parse(window.localStorage.getItem(n)||"null")}catch{return null}}function Ft(n,s){try{window.localStorage.setItem(n,JSON.stringify(s))}catch{}}function yn(n){const s=new Date(n);if(Number.isNaN(s.getTime()))return"";const S=ee=>new Date(ee.getFullYear(),ee.getMonth(),ee.getDate()).getTime(),F=Math.round((S(new Date)-S(s))/864e5);return F<=0?"今天":F===1?"昨天":`${Ca(s.getMonth()+1)}-${Ca(s.getDate())}`}function Dt(){const n=new Date;return{date:`${n.getFullYear()}-${Ca(n.getMonth()+1)}-${Ca(n.getDate())}`,time:`${Ca(n.getHours())}:${Ca(n.getMinutes())}`}}const wn={ziwei:"birth",bazi:"birth",hepan:"birth",liuyao:"cast",meihua:"cast",daliuren:"cast",qimen:"cast",tarot:"none",almanac:"date",zeri:"date",star:"date",numerology:"date",convert:"date",chenggu:"birth",trend:"birth",fengshui:"birth",name:"birth",xiaoliuren:"cast",mbti:"none",constitution:"none",wuyunliuqi:"date",taiyi:"date"},hi={date:"1990-05-12",time:"14:30"},Aa=n=>wn[n]||"none",Pe=window.__MPCore||{},We=Pe.needAsk||(n=>!1),ae={ref:null,seats:[],seatOk:{},seatDisposers:[],contribution:"",keys:"",injectType:"",spec:"",errs:[],regs:0,mounted:0},Ue={r:null,q:"",it:null,entry:null};let oa="";function bi(){const n=[];return n.push("inputActions "+(ae.ref?"已拿到":"未拿到")),n.push("渲染 "+ae.mounted+" 次"),n.push("注册 "+ae.regs+" 次"),n.push("inject "+(ae.injectType||"?")),n.push("槽位 "+(ae.spec||"?")),ae.contribution&&n.push("贡献 "+ae.contribution),ae.errs.length&&n.push("错误:"+ae.errs.join(" / ")),"桥自检:"+n.join(";")}function xi(n){if(ae.errs.length>=3)return;const s=n&&n.message?String(n.message):String(n);ae.errs.push(s.slice(0,90))}function $n(n){if(!n)return null;const s=n.inputActions;if(s&&typeof s.setDraft=="function"&&typeof s.submit=="function")return s;const S=n.actions&&n.actions.input;return S&&typeof S.setDraft=="function"&&typeof S.submit=="function"?S:null}function vi(n,s){const S=$n(n);return Ma(()=>{if(ae.seats.indexOf(s)<0&&ae.seats.push(s),ae.keys=n?Object.keys(n).join(","):"",S){ae.ref=S;try{window.__MPComposer=S}catch{}}return()=>{ae.ref===S&&(ae.ref=null)}},[S,s]),S}function kn(){const n=Ue.r;if(!n)return"";try{const s=X.askPrompt?X.askPrompt(n,{question:Ue.q,interpret:Ue.it}):null;return s&&s.text||String(n.summary||"")}catch{return String(n.summary||"")}}function yi(n){return ae.mounted+=1,vi(n,"input.right")?r("button",{type:"button",className:"mp-chip ok",title:Ue.r?"把上一张盘的摘要和问题发进对话窗":"先在侧栏「烛微命盘」里排一张盘",onClick:()=>{const S=kn();S&&$i(S)}},"命理·问"):r("span",{className:"mp-chip warn",title:"命理:已占住输入框槽位,但没拿到 inputActions;把这句话告诉作者"},"命理·未就绪")}function wi(n){return ae.mounted+=1,vi(n,"composer.dock"),null}function $i(n){let s=ae.ref;if(!s)try{s=window.__MPComposer||null}catch{s=null}return!s||typeof s.setDraft!="function"||typeof s.submit!="function"?!1:(s.setDraft(n),s.submit(),!0)}function zn(n){const s=n.kind==="ziwei"?R.ziweiHTML(n.r):n.kind==="bazi"?R.baziHTML(n.r)+(n.trend?R.trendHTML(n.trend,{brief:!1}):""):n.kind==="meihua"?R.meihuaHTML(n.r):n.kind==="daliuren"?R.daliurenHTML(n.r):n.kind==="qimen"?R.qimenHTML(n.r)+R.qimenFactsHTML(n.r):n.kind==="hepan"?n.r.chart==="ziwei"?R.ziweiHepanHTML(n.r):R.hepanHTML(n.r):n.kind==="tarot"?R.tarotHTML(n.r):n.kind==="liuyao"?R.liuyaoHTML(n.r):n.kind==="chenggu"?R.chengguHTML(n.r):n.kind==="almanac"?R.almanacHTML(n.r):n.kind==="zeri"?R.zeriHTML(n.r):n.kind==="trend"?R.trendHTML(n.r):n.kind==="name"?R.nameHTML(n.r):n.kind==="mbti"?R.mbtiHTML(n.r):n.kind==="constitution"?R.constitutionHTML(n.r):n.kind==="wuyunliuqi"?R.wuyunliuqiHTML(n.r):n.kind==="taiyi"?R.taiyiHTML(n.r):n.kind==="fengshui"?R.fengshuiHTML(n.r):R.quickHTML(n.r),S=s.startsWith('<section class="mp-br"')?s.indexOf("</section>"):-1,F=S<0?s:s.slice(S+10),ee=S<0?"":s.slice(0,S+10);return F+R.plainHTML(n.r)+ee}function jn(n){const s=!!n.open,S=r("button",{type:"button",className:"mp-castrow-h","aria-expanded":s?"true":"false","aria-controls":"mp-castlist",onClick:n.onToggle,title:"展开六个占卜体系的起卦入口:点一个就切过去,并用当前时刻起卦"},r("span",{className:"mp-castrow-t"},"起卦"),r("span",{className:"mp-castrow-l"},s?"六个占卜体系,点一下就起":ci.map(F=>F.label).join(" · ")),r("i",{className:"mp-castrow-i","aria-hidden":"true"},s?"▴":"▾"));return s?r("div",{key:"cast",className:"mp-castrow open"},S,r("div",{key:"list",id:"mp-castlist",className:"mp-castlist"},ci.map(F=>r("button",{key:F.sys,type:"button",className:"mp-castchip"+(n.tab===F.sys?" on":""),"data-cast":F.sys,"aria-pressed":n.tab===F.sys?"true":"false",title:F.tip,onClick:()=>n.onCast(F.sys)},F.label))),n.hasResult?r("div",{key:"ask",className:"mp-castask"},r("button",{type:"button",className:"mp-castgo",onClick:n.onAsk,title:"把这张盘和所问之事发进 DSH 对话窗(与下面的「问进对话」同一个通路)"},"把这张盘问进对话")):null):r("div",{key:"cast",className:"mp-castrow"},S)}function Sn(){const[n,s]=q("ziwei"),[S,F]=q("1990-05-12"),[ee,se]=q("14:30"),[le,re]=q(!1),[ve,t]=q("female"),[$e,I]=q(""),[xe,we]=q("1992-08-15"),[Z,K]=q("10:00"),[V,G]=q("female"),[te,Me]=q(""),[Le,ga]=q("bazi"),[Ze,ht]=q(!1),[La,Va]=q("1990-01-01"),[Ta,fa]=q("12:00"),[ha,Ea]=q("male"),[_a,bt]=q(""),[pa,ba]=q("chaibu"),[Ye,Oa]=q(!0),[ra,Ha]=q(!0),[Pa,Wa]=q("same-day"),[Qa,It]=q(!1),[la,Bt]=q(""),[Fa,Te]=q(""),[Da,et]=q(null),[at,Ra]=q({}),[xa,qe]=q(null),[Qe,xt]=q([{year:"2019",kind:"career"},{year:"2022",kind:"love"}]),[Fe,tt]=q(null),[Ia,it]=q("开业"),[da,Ba]=q("30"),[Ke,nt]=q(""),[va,ea]=q(""),[Oe,aa]=q("solar2lunar"),[ya,vt]=q(""),[Ga,yt]=q(!1),[De,wa]=q("time"),[$a,wt]=q(""),[Ua,He]=q(""),[ta,Za]=q(""),[ca,st]=q(()=>new Array(ft().total).fill(null)),[Gt,$t]=q(0),[ka,e]=q(null),[i,o]=q(()=>new Array(Ot).fill(null)),[l,p]=q(0),[c,d]=q("60"),[u,m]=q("natal"),[f,b]=q("9"),[w,$]=q("子"),[A,L]=q("午"),[_,Q]=q("assess"),[D,T]=q("李"),[H,pe]=q(""),[M,B]=q("6"),[y,he]=q(!1),[W,ie]=q(""),[j,k]=q(null),[C,O]=q(""),[oe,ge]=q(""),[de,ke]=q(null),[ye,P]=q(()=>rn()),[U,J]=q(()=>Pt(gi)==="flat"?"flat":"group"),[fe,be]=q(()=>{const a=Pt(ui);return Array.isArray(a)?a:[]}),[x,v]=q({}),[ce,me]=q(null),[Ce,Se]=q(()=>R.profilesLoad()),[ze,Je]=q(null),[ma,kt]=q(""),[za,Xe]=q(""),[zi,je]=q(""),[Cn,Ya]=q(!1),[Ut,ji]=q("three"),[ua,Zt]=q(""),[Re,Si]=q("general");function Yt(){return la.trim()||(j&&We(j.kind)?String(ua||"").trim():"")}Ma(()=>{j&&j.r&&(Ue.r=j.r,Ue.q=Yt(),Ue.it=j.it||null)},[j,la,ua]);const[qi,An]=q(null),[Ni,Ln]=q(Pt(mi)===!0),[Tn,zt]=q(!1),[ja,Mi]=q("time"),[jt,Ci]=q(""),[St,Ai]=q(""),[qt,Li]=q(""),[En,Sa]=q(""),[Kt,Nt]=q({birth:null,cast:null}),_n=Ge.find(a=>a.k===n)||Ge[0],ot=n==="bazi"||n==="ziwei"||n==="hepan"||n==="chenggu"||n==="trend"||n==="fengshui"||n==="name",Ie=Aa(n),Ti=!(n==="meihua"&&ja==="number"),Ei=n!=="tarot"&&n!=="mbti"&&n!=="constitution"&&Ti,_i=Ei&&Ie!=="date",Ms=_i,Ae=async(a,g,z,N)=>{const h=a||n,ue=z||ja,Ne=h==="bazi"||h==="trend",ia=N&&typeof N.hourUnknown=="boolean"?N.hourUnknown:le,Ee=g||(Ne&&ia?{date:S,time:"12:00"}:{date:S,time:ee}),Be=N&&N.gender?N.gender:ve,qa=N&&typeof N.address=="string"?N.address:$e,pt=N&&typeof N.trueSolar=="boolean"?N.trueSolar:Ye,rt=N&&typeof N.lateZi=="boolean"?N.lateZi:ra,Vi=N&&typeof N.lines=="string"?N.lines:W,Lt=N&&typeof N.question=="string"?N.question:ua,Wi=Xa(),Qi=++_e,lt=()=>Qi!==_e;ke(null),je("");try{let Na=0,en=null;Ya(!0);try{await ct(h);const Y=window.__MP_LAST_LOAD;Na=Y&&typeof Y.ms=="number"?Y.ms:Xa()-Wi,en=Y&&typeof Y.cached=="boolean"?Y.cached:null}catch(Y){if(lt())return;Xe(Y&&Y.message?Y.message:String(Y)),k(null);return}finally{lt()||Ya(!1)}if(lt())return;const an=`${Ee.date}T${Ee.time}`,E={system:h};if(E.shadow=h!=="mbti"&&h!=="constitution",E.trace=h==="liuyao"||h==="bazi"||h==="ziwei"||h==="qimen"||h==="daliuren",h!=="tarot"&&(E.datetime=an),h==="bazi"||h==="ziwei"||h==="hepan"||h==="trend"){if(E.gender=Be,E.trueSolar=pt,qa.trim()){E.address=qa.trim();try{const Y=await X.geocodeAddress(E.address,{online:y});Y&&typeof Y.lon=="number"&&(E.longitude=Y.lon,E.geo=Y)}catch(Y){console.error("[metaphysics] 地址解析失败,退回内置表",Y)}if(lt())return}(h==="bazi"||h==="ziwei")&&(E.cross=Qa),E.lateZi=rt,Ne&&ia&&(E.hourUnknown=!0)}if(h==="liuyao"){const Y=Pe.parseLines(Vi);Y.lines?E.lines=Y.lines:Y.warning&&je(Y.warning)}if(h==="qimen"&&(E.juMethod=pa,E.lateZiHourMode=Pa,E.direction=Re),h==="bazi"&&(E.verifyPast=6),h==="zeri"){E.startDate=Ee.date,E.task=Ia,E.days=Number(da)||30,Ke&&(E.shengXiao=Ke);const Y=va.split(/[,,、\s]+/).filter(Boolean);Y.length&&(E.candidates=Y)}if(h==="xiaoliuren")if(E.mode=De,De==="number")E.num1=Number($a)||void 0,E.num2=Number(Ua)||void 0,E.num3=Number(ta)||void 0;else{E.date=Ee.date;const Y=Number(String(Ee.time).split(":")[0]);E.hour=Number.isFinite(Y)?Y:12}if(h==="mbti"){delete E.datetime;const Y=ca.slice();for(;Y.length&&Y[Y.length-1]==null;)Y.pop();Y.length&&(E.answers=Y)}if(h==="constitution"&&(delete E.datetime,E.answers=i.slice()),h==="trend"&&Ne&&ia&&(E.hourUnknown=!0),h==="trend"&&(E.toAge=Number(c)||60),h==="fengshui"&&(E.action=u,u==="natal"?E.gender=Be:(E.sitting=w,E.facing=A,delete E.datetime,u==="xuankong"&&(E.period=Number(f)||9))),h==="name"&&(E.action=_,E.surname=D.trim(),_==="generate"?(E.gender=Be,E.limit=Number(M)||6,E.trueSolar=pt,E.lateZi=rt):(E.givenName=H.trim(),(!Ee.date||!Ee.time)&&delete E.datetime)),h==="convert")if(E.system="convert",Oe==="lunar2solar"){const Y=/^(\d{4})-(\d{1,2})-(\d{1,2})$/.exec(String(ya).trim());if(!Y){Xe("农历转公历请按「农历年-月-日」填写,例如 2026-9-17;闰月单独勾选。");return}E.mode="lunar2solar",E.lunarYear=Number(Y[1]),E.lunarMonth=Number(Y[2]),E.lunarDay=Number(Y[3]),E.isLeapMonth=Ga,delete E.datetime}else E.mode="solar2lunar";if(h==="tarot"&&(E.spread=Ut),h==="hepan"&&(E.chart=Le,E.partner={datetime:`${xe}T${Z}`,gender:V,address:te.trim()||void 0,trueSolar:Ye},Ze&&(E.partner2={datetime:`${La}T${Ta}`,gender:ha,address:_a.trim()||void 0,trueSolar:Ye})),We(h)){if(!Lt.trim()){Xe("请先填写「所问之事」——一句话即可,例如:今年是否适合换工作?"),zt(!0),k(null);return}zt(!1),E.question=Lt.trim(),h==="liuyao"&&(E.direction=Re)}if(h==="meihua"&&(E.mode=ue,ue==="number")){if(jt.trim()===""||St.trim()===""){Xe("数字起卦需要填两个数(第一个数定上卦、第二个数定下卦)。"),k(null);return}if(E.upper=Number(jt),E.lower=Number(St),!Number.isFinite(E.upper)||!Number.isFinite(E.lower)){Xe("两个数都要是数字,例如 17 和 29。"),k(null);return}qt!==""&&(E.changing=Number(qt))}const ks=Xa();h==="trend"&&!E.asOf&&Pe.todayStamp&&(E.asOf=Pe.todayStamp());const Ka=X.compute(E),zs=Xa()-ks;let Qt=null;try{Qt=R.shadowTrack?R.shadowTrack(Ka):null}catch{Qt=null}let ei=null;if(h==="bazi")try{ei=X.compute({system:"trend",datetime:an,gender:Be,toAge:100,trueSolar:pt,lateZi:rt,...Pe.todayStamp?{asOf:E.asOf||Pe.todayStamp()}:{},...E.dst!==void 0?{dst:E.dst}:{},...E.address?{address:E.address}:{},...typeof E.longitude=="number"?{longitude:E.longitude}:{},...E.geo?{geo:E.geo}:{}})}catch{ei=null}let ai=null;if(X.caliberCompare)try{ai=X.caliberCompare(E)}catch{ai=null}const js=We(h)||h==="qimen"?{question:We(h)?Lt.trim():"",direction:Re}:void 0,Tt=X.interpret?X.interpret(Ka,js):null;Tt&&Ka.cross&&X.crossSection&&(Tt.sections=[...Tt.sections||[],X.crossSection(Ka.cross)]);const Ss=Aa(h)==="cast"&&(h!=="meihua"||ue==="time");k({kind:h,r:Ka,it:Tt,at:Ee,timed:Ss,trend:ei,caliber:ai,shadowDiff:Qt,gender:Be,address:qa,trueSolar:pt,lateZi:rt});const tn=Y=>{typeof requestAnimationFrame=="function"?requestAnimationFrame(()=>Y>1?tn(Y-1):nn()):setTimeout(nn,0)},nn=()=>{Qi===_e&&ke({engineMs:Na,computeMs:zs,cached:en,totalMs:Xa()-Wi,renderMs:null})};if(tn(2),et(null),qe(null),Ra({}),tt(null),Xe(""),Sa(""),h!=="tarot"&&h!=="mbti"&&h!=="constitution"){const Y=!!(Ne&&ia),ti={kind:h,date:Ee.date,time:Y?"":Ee.time,hourUnknown:Y,gender:Be,address:qa,trueSolar:pt,lateZi:rt,lines:h==="liuyao"?Vi:"",question:We(h)?Lt.trim():"",direction:Re,spread:Ut,mhMode:ue,upper:jt,lower:St,changing:qt,...h==="qimen"?{qimenRule:pa,qLateZi:Pa}:{},...h==="zeri"?{task:Ia,days:da,shengXiao:Ke,zCand:va}:{},...h==="xiaoliuren"?{xlrMode:De,num1:$a,num2:Ua,num3:ta}:{},...h==="trend"?{toAge:c}:{},...h==="fengshui"?{fsMode:u,fsPeriod:f,sitting:w,facing:A}:{},...h==="name"?{nnMode:_,surname:D,givenName:H,limitN:M}:{},...h==="convert"?{convMode:Oe,lunarDate:ya,leapMonth:Ga}:{},...h==="hepan"?{hpChart:Le,partnerDate:xe,partnerTime:Z,partnerGender:V,partnerAddress:te,thirdOn:Ze,p2Date:La,p2Time:Ta,p2Gender:ha,p2Address:_a}:{},label:dn(h,Ka),at:Date.now()};P(qs=>{const sn=[ti,...qs.filter(Ns=>!ln(Ns,ti))].slice(0,20);return ri(sn),sn}),h!=="tarot"&&h!=="mbti"&&h!=="constitution"&&(Ue.entry=ti),Ki(!1)}}catch(Na){if(lt())return;Xe(Na&&Na.message?Na.message:String(Na)),k(null)}},On=async a=>{const g=Aa(a),z=++_e;if(Xe(""),a==="mbti"){je(""),Ya(!0);try{await ct(a)}catch(h){z===_e&&Xe(h&&h.message?h.message:String(h))}finally{z===_e&&Ya(!1)}if(z!==_e)return;s(a),ca.filter(h=>h!=null).length>=na?Ae(a):k(null);return}if(a==="constitution"){je(""),Ya(!0);try{if(await ct(a),z===_e&&!ka){const h=X.compute({system:"constitution"});h&&h.paper&&e(h)}}catch(h){z===_e&&Xe(h&&h.message?h.message:String(h))}finally{z===_e&&Ya(!1)}if(z!==_e)return;s(a),i.filter(h=>h!=null).length>=sa?Ae(a):k(null);return}if(s(a),g==="none"){Ae(a);return}const N=Kt[g]||(g==="cast"||g==="date"?Dt():{date:hi.date,time:hi.time});F(N.date),se(N.time),Ae(a,N)},Hn=a=>{Ge.some(g=>g.k===a)&&be(g=>{const z=(g||[]).filter(h=>h&&h.tab&&h.tab!==a),N=[{tab:a,at:Date.now()}].concat(z).slice(0,fi);return Ft(ui,N),N})},Oi=a=>{const g=a==="flat"?"flat":"group";J(g),Ft(gi,g)},Mt=a=>{Hn(a),On(a)},Pn=()=>{const a=!Ni;Ln(a),Ft(mi,a)},Fn=a=>{Mt(a)},Dn=a=>{F(a),Ie!=="none"&&Nt(g=>Object.assign({},g,{[Ie]:{date:a,time:ee}}))},Rn=a=>{se(a),Ie!=="none"&&Nt(g=>Object.assign({},g,{[Ie]:{date:S,time:a}}))},Cs=()=>{const a=Dt();F(a.date),se(a.time),Ie!=="none"&&Nt(g=>Object.assign({},g,{[Ie]:null})),Ae(n,a)},Jt=()=>{if(n==="mbti"){const a=ca.filter(g=>g!=null).length;if(a<na){je(`先答满 ${na} 题再看结果(现答 ${a} 题,还差 ${na-a} 题)。`);return}Ae(n);return}if(n==="constitution"){const a=i.filter(g=>g!=null).length;if(a<sa){je(`先答满 ${sa} 题再看结果(现答 ${a} 题,还差 ${sa-a} 题)。`);return}Ae(n);return}if(Ie!=="none"&&!Kt[Ie]){const a=Dt();F(a.date),se(a.time),Ae(n,a);return}Ae(n)},In=()=>{const a={date:"1990-05-12",time:"14:30"};s("bazi"),t("male"),I("河北石家庄"),Nt(g=>Object.assign({},g,{birth:a})),F(a.date),se(a.time),Ae("bazi",a,null,{gender:"male",address:"河北石家庄"})},Hi=a=>{Mi(a),Ae(n,{date:S,time:ee},a)},Bn=()=>!!(window.matchMedia&&window.matchMedia("(max-width: 640px)").matches),Gn=()=>qi===null?Bn():qi,Ct=(a,g,z)=>{if(!g)return;const N=ue=>{a.textContent=ue?"已复制":"复制失败",setTimeout(()=>{a.textContent=z},1400)},h=()=>{try{const ue=document.createElement("textarea");ue.value=g,ue.setAttribute("readonly",""),ue.style.position="fixed",ue.style.opacity="0",document.body.appendChild(ue),ue.select();const Ne=!!(document.execCommand&&document.execCommand("copy"));return document.body.removeChild(ue),Ne}catch{return!1}};try{if(navigator.clipboard&&navigator.clipboard.writeText){navigator.clipboard.writeText(g).then(()=>N(!0),()=>N(h()));return}}catch{}N(h())},Un=a=>Ct(a,a.getAttribute("data-shadow-copy")||"","复制 ID"),Zn=a=>Ct(a,a.getAttribute("data-handle-copy")||"","复制句柄"),Yn=a=>{const g=a.closest(".mp-trace-layer")||document.getElementById("mp-trace-layer"),z=g&&g.querySelector("[data-trace-md]");Ct(a,z?z.value:"","复制 Markdown")},Kn=()=>{try{return String(location.href).split("#")[0]}catch{return""}},Jn=()=>{if(!j||!j.r)return null;try{return X.askPackages?X.askPackages(j.r,{question:Yt(),interpret:j.it,base:Kn()}):null}catch{return null}},Pi=[["full","复制提问","完整提问:盘面摘要 + 阅读层次 + 回答骨架,粘进任何对话窗都能用"],["brief","复制精简","一句话版:体系 + 排盘句柄 + 你的问题,够助手认出是哪张盘"],["structured","复制参数","结构化参数(JSON):助手可直接照 args 调 compute,不必解析自然语言"],["link","复制深链","深链:把这张盘的参数编进链接,打开即还原同一张盘(换台机器、发给朋友都行)"]],Xn=(a,g)=>{const z=Jn();if(!z){Te("还没有可以复制的盘:先排一张。");return}const N=a==="link"?z.link:z[a];if(!N){Te(a==="link"?"这张盘没拿到句柄(随机抽牌只复现参数、不复现牌面),深链做不出来;用「复制提问」那一档。":"这一档暂时是空的,换一档试试。");return}Ct(g,N,Pi.find(h=>h[0]===a)[1]),a==="link"&&Te("深链已复制:打开就还原这张盘,也可以直接发给别人。链接里是编码不是加密,别公开贴。")},Vn=()=>{const a=document.getElementById("mp-trace-layer");if(!a)return;a.classList.add("open"),a.setAttribute("aria-hidden","false");const g=a.querySelector("[data-trace-close]");g&&g.focus&&g.focus()},Fi=()=>{const a=document.getElementById("mp-trace-layer");if(!a)return;a.classList.remove("open"),a.setAttribute("aria-hidden","true");const g=document.querySelector("[data-trace-open]");g&&g.focus&&g.focus()},Wn=a=>{const g=a.target&&a.target.closest?a.target.closest("[data-shadow-copy]"):null;if(g){Un(g);return}const z=a.target&&a.target.closest?a.target.closest("[data-handle-copy]"):null;if(z){Zn(z);return}if(a.target&&a.target.closest?a.target.closest("[data-trace-open]"):null){Vn();return}const h=a.target&&a.target.closest?a.target.closest("[data-trace-copy]"):null;if(h){Yn(h);return}if(a.target&&a.target.closest?a.target.closest("[data-mp-askcopy]"):null){as();return}if(a.target&&a.target.closest?a.target.closest("[data-trace-close]"):null){Fi();return}const ia=a.target&&a.target.closest?a.target.closest(".mp-it-head"):null;if(!ia)return;const Ee=ia.closest(".mp-it");if(!Ee)return;const Be=!Ee.classList.contains("folded");Ee.classList.toggle("folded",Be),ia.setAttribute("aria-expanded",Be?"false":"true");const qa=ia.querySelector(".mp-it-hint");qa&&(qa.textContent=Be?"点击展开":"点击收起"),An(Be)},Di=(a,g)=>{if(!j||!(We(n)||n==="qimen"))return;const z={question:We(n)?(g===void 0?ua:g).trim():"",direction:a===void 0?Re:a},N=X.interpret?X.interpret(j.r,z):null;let h=j.r;if((n==="liuyao"||n==="qimen")&&h&&h.trace&&X.buildTrace)try{const ue=n==="liuyao"?X.buildTrace(h,{direction:z.direction,gender:h.useGod&&h.useGod.gender||"male",refresh:!0}):X.buildTrace(h,{direction:z.direction});ue&&(h=Object.assign({},h,{trace:ue}))}catch{}k(Object.assign({},j,{r:h,it:N}))},Qn=a=>!a||!a.timed||!a.at?"":`<div class="mp-cast">起卦时刻:<b>${a.at.date} ${a.at.time}</b> (来自你的本机时间,点「此刻」可重新取当下)</div>`,es=()=>{try{const a=j&&j.r&&j.r.summary?j.r.summary:"";if(!a)return;navigator.clipboard.writeText(a).then(()=>Sa("已复制"),()=>Sa("复制失败"))}catch{Sa("复制失败")}},as=()=>{if(!j||!j.r||!window.Engine||!window.Engine.buildEventPrompt)return;const a=Pe&&Pe.kindOfDirection?Pe.kindOfDirection(Re):"other";let g;try{g=window.Engine.buildEventPrompt(j.r,{question:(ua||"").trim(),kind:a,gender:ve,timeKnown:!0})}catch{g=null}g&&g.text&&navigator.clipboard.writeText(g.text).then(()=>Sa("已复制问事提示"),()=>Sa("复制失败"))},Ri=()=>{if(!(!j||!j.r||!la.trim()))try{et(X.followup?X.followup(j.r,la.trim()):null)}catch(a){et({question:la.trim(),ok:!1,answer:"追问失败:"+(a&&a.message?a.message:a),evidence:[],confidence:"弱"})}},Ii=()=>{if(!(!j||!j.r))try{const a=X.askPrompt?X.askPrompt(j.r,{question:Yt(),interpret:j.it}):null,g=a&&a.text?a.text:String(j.r.summary||"");if($i(g)){Te("已发到对话窗,往下看回复。");return}const z="("+bi()+")";navigator.clipboard&&navigator.clipboard.writeText?navigator.clipboard.writeText(g).then(()=>Te("对话输入框还没就绪"+z+",已复制提问;粘进对话窗回车即可。"),()=>Te("对话输入框还没就绪"+z+",复制也没成功;先点「复制文字结果」再贴。")):Te("对话输入框还没就绪"+z+";先点「复制文字结果」再贴进对话窗。")}catch(a){Te("发到对话窗失败:"+(a&&a.message?a.message:a))}},ts=()=>{const a=[],g=window.__MP_VER||"未知";a.push("# 命理插件反馈"),a.push(""),a.push("## 我遇到的情况"),a.push(""),a.push("(在这里写一句就好:哪里不对 / 读不懂哪一段 / 算得和别人不一样 / 想加什么。下面这些是自动带的复现信息,不用改。)"),a.push(""),a.push("## 复现信息"),a.push(""),a.push("- 插件版本:v"+g);{const h=Array.isArray(window.__MP_UNRELEASED)?window.__MP_UNRELEASED:[];h.length&&a.push("- 未发版改动:"+h.length+" 项(版本号未变,说明这份产物比 v"+g+" 新)")}const z=Ge.find(h=>h.k===n)?.label||n;if(a.push("- 体系:"+z+(z===n?"":"("+n+")")),ua&&a.push("- 所问之事:"+ua),Re&&Re!=="general"){const h=(Array.isArray(X.DIRECTIONS)?X.DIRECTIONS:[]).find(ue=>ue.key===Re);a.push("- 询问方向:"+(h?h.label:Re))}a.push(""),a.push("### 输入"),a.push(""),a.push("```"),(Aa(n)==="time"||Aa(n)==="date")&&(a.push(`日期:${S}`),Aa(n)==="time"&&a.push(`时刻:${le?"(未知,按三柱排)":ee}`),a.push(`性别:${ve==="male"?"男":"女"}`),$e&&a.push(`出生地:${$e}`),a.push(`真太阳时:${Ye?"开":"关"} 晚子时换日:${ra?"开":"关"}`),n==="qimen"&&a.push(`奇门取局:${pa}`),Qa&&a.push("交叉验证:开"));const N={合盘:()=>{a.push(`对方:${xe} ${Z} ${V==="male"?"男":"女"}${te?" "+te:""}(${Le} 盘)`),Ze&&a.push(`第三方:${La} ${Ta} ${ha==="male"?"男":"女"}${_a?" "+_a:""}`)},择日:()=>{a.push(`事项:${Ia} 起算:${S} 天数:${da}${Ke?" 属相:"+Ke:""}${va?" 候选日:"+va:""}`)},起名:()=>{a.push(`姓:${D||"(未填)"} 名:${H||"(未填)"} 模式:${_}${_==="generate"?" 候选数:"+(M||"默认"):""}`)},公农历:()=>{a.push(`模式:${Oe}${ya?" 农历输入:"+ya:""}${Ga?"(闰月)":""}`)},小六壬:()=>{a.push(`模式:${De}${De==="number"?` 报数:${$a}/${Ua}/${ta}`:""}`)},风水:()=>{a.push(`动作:${u}${u==="natal"?"":` 坐:${w} 向:${A}`}${u==="xuankong"?` 运:${f}`:""}`)}};if(N[z]&&N[z](),a.push("```"),a.push(""),za&&(a.push("### 报错原文"),a.push(""),a.push("```"),a.push(String(za)),a.push("```"),a.push("")),j&&j.r){a.push("### 结果摘要(引擎原文,前 40 行)"),a.push(""),a.push("```");const h=String(j.r.summary||(X.renderText?X.renderText(j.r):"")||"");a.push(h.split(`
|
|
2610
2610
|
`).slice(0,40).join(`
|
|
2611
2611
|
`)),a.push("```"),j.r.handle&&(a.push(""),a.push("排盘句柄(开发者可据此复现同一张盘):`"+j.r.handle+"`"))}else a.push("### 结果摘要"),a.push(""),a.push("(这次没有生成盘面——如果是在排盘过程中出错,上面的「报错原文」就是关键。)");return a.push(""),a.push("## 联系渠道"),a.push(""),a.push("- GitHub issue:https://github.com/xuanfu-web/dsh-metaphysics/issues"),a.push("- 邮件:1129440028@qq.com"),a.push("- 微信群:dsh-metaphysics"),a.join(`
|
|
2612
|
-
`)},Gi=()=>{const a=ts();try{if(navigator.clipboard&&navigator.clipboard.writeText)navigator.clipboard.writeText(a).then(()=>{O("已复制"),ge("粘到 issue / 邮件 / 群里即可")}).catch(()=>{O("复制失败"),ge("可改用「导出 .md」或手动选中")});else{const g=document.createElement("textarea");g.value=a,g.style.cssText="position:fixed;left:-9999px;top:0",document.body.appendChild(g),g.select();const z=document.execCommand&&document.execCommand("copy");g.remove(),O(z?"已复制":"复制失败"),ge(z?"粘到 issue / 邮件 / 群里即可":"可改用「导出 .md」或手动选中")}}catch{O("复制失败"),ge("可改用「导出 .md」")}setTimeout(()=>{O(""),ge("")},4e3)},is=()=>{try{Gi()}catch{}const a=encodeURIComponent("[反馈] "+(Ge.find(g=>g.k===n)?.label||n)+(Sa?":报错":":使用问题"));try{window.open("https://github.com/xuanfu-web/dsh-metaphysics/issues/new?title="+a,"_blank","noopener")}catch{ge("浏览器拦了弹窗,请手动打开 GitHub issues")}},ns=()=>{if(!(!j||!j.r))try{const a=X.renderText?X.renderText(j.r):j.r.summary||"",g=new Blob([a],{type:"text/markdown;charset=utf-8"}),z=document.createElement("a");z.href=URL.createObjectURL(g),z.download=`命理报告-${j.r.system}.md`,document.body.appendChild(z),z.click(),z.remove(),setTimeout(()=>URL.revokeObjectURL(z.href),2e3)}catch(a){console.error("[metaphysics] 导出失败",a)}},ss=()=>{if(!(!j||!j.r))try{const a=R.summaryCardPNG?R.summaryCardPNG(j.r,j.it):"";if(!a){Na("当前环境不支持 Canvas 导出");return}const g=document.createElement("a");g.href=a,g.download=`命理摘要-${j.r.system}.png`,document.body.appendChild(g),g.click(),g.remove()}catch(a){console.error("[metaphysics] 长图导出失败",a)}},Ui={fontSize:12,padding:"5px 12px"},os=()=>{!j||!j.r||!j.r.past||Se(X.verifyFit?X.verifyFit(j.r.past.rows,tt):null)},ps=()=>{if(!(!j||j.kind!=="bazi"))try{const a=j.at||{date:S,time:ee},[g,z,q]=String(a.date).split("-").map(Number),[,h]=String(a.time).split(":").map(Number),ue=We.filter(qe=>Number(qe.year)).map(qe=>({year:Number(qe.year),kind:qe.kind}));it(X.rectifyBirth?X.rectifyBirth({base:{year:g,month:z,day:q,minute:Number.isFinite(h)?h:0},gender:j.gender||ye,events:ue,lateZi:typeof j.lateZi=="boolean"?j.lateZi:pa,trueSolar:typeof j.trueSolar=="boolean"?j.trueSolar:Ze,address:String(j.address||"").trim()||void 0}):{error:"当前客户端未加载生时校正模块"})}catch(a){it({error:a&&a.message?a.message:String(a)})}},ne=(a,g)=>r("label",{className:"mp-field"},r("span",{className:"mp-lbl"},a),g),Zi=a=>{s(a.kind),a.date&&F(a.date),a.time&&se(a.time),re(!!a.hourUnknown),a.gender&&t(a.gender),I(a.address||""),typeof a.trueSolar=="boolean"&&Ha(a.trueSolar),typeof a.lateZi=="boolean"&&Pa(a.lateZi),ie(a.lines||""),Yt(a.question||""),qi(a.direction||"general"),Si(a.spread||{1:"one",3:"three",5:"five"}[a.count]||"three"),Ci(a.mhMode||"time"),Ai(a.upper||""),Li(a.lower||""),Ti(a.changing||""),a.kind==="qimen"&&(typeof a.qimenRule=="string"&&va(a.qimenRule),typeof a.qLateZi=="string"&&Qa(a.qLateZi)),a.kind==="zeri"&&(typeof a.task=="string"&&nt(a.task),a.days!=null&&Ga(String(a.days)),typeof a.shengXiao=="string"&&st(a.shengXiao),typeof a.zCand=="string"&&Qe(a.zCand)),a.kind==="xiaoliuren"&&(ka(a.xlrMode==="number"?"number":"time"),a.num1!=null&&kt(String(a.num1)),a.num2!=null&&He(String(a.num2)),a.num3!=null&&Ya(String(a.num3))),a.kind==="trend"&&a.toAge!=null&&d(String(a.toAge)),a.kind==="fengshui"&&(typeof a.fsMode=="string"&&m(a.fsMode),a.fsPeriod!=null&&b(String(a.fsPeriod)),typeof a.sitting=="string"&&$(a.sitting),typeof a.facing=="string"&&L(a.facing)),a.kind==="name"&&(typeof a.nnMode=="string"&&Q(a.nnMode),typeof a.surname=="string"&&T(a.surname),typeof a.givenName=="string"&&pe(a.givenName),a.limitN!=null&&B(String(a.limitN))),a.kind==="convert"&&(typeof a.convMode=="string"&&ea(a.convMode),typeof a.lunarDate=="string"&&wt(a.lunarDate),typeof a.leapMonth=="boolean"&&$t(a.leapMonth)),a.kind==="hepan"&&(a.hpChart&&ha(a.hpChart),typeof a.partnerDate=="string"&&we(a.partnerDate),typeof a.partnerTime=="string"&&K(a.partnerTime),typeof a.partnerGender=="string"&&G(a.partnerGender),typeof a.partnerAddress=="string"&&Ne(a.partnerAddress),typeof a.thirdOn=="boolean"&&xt(a.thirdOn),typeof a.p2Date=="string"&&Wa(a.p2Date),typeof a.p2Time=="string"&&ba(a.p2Time),typeof a.p2Gender=="string"&&_a(a.p2Gender),typeof a.p2Address=="string"&&vt(a.p2Address)),St(!1),me(a)},rs=()=>{P([]),li([])},[Xe,rt]=N(()=>{try{return R.casesLoad()}catch{return[]}}),[ls,Yi]=N(!1),[Vt,Ki]=N("all"),ds=()=>{try{rt(R.casesLoad())}catch{}Ki("all"),Yi(!0)},Wt=()=>Yi(!1),cs=a=>a==="all"?Xe.length:Xe.filter(g=>g.status===a).length,Qt=Vt==="all"?Xe:Xe.filter(a=>a.status===Vt),ms=()=>{const a=R.casesExport(Xe);if(!a){Me("还没有可导出的卦例");return}try{const g=new Blob([a],{type:"application/x-ndjson;charset=utf-8"}),z=URL.createObjectURL(g),q=document.createElement("a");q.href=z,q.download=`metaphysics-cases-${new Date().toISOString().slice(0,10)}.jsonl`,document.body.appendChild(q),q.click(),q.remove(),setTimeout(()=>{try{URL.revokeObjectURL(z)}catch{}},1e3),Me(`已导出 ${Xe.length} 条卦例(JSONL)`)}catch(g){Me("导出失败:"+(g&&g.message?g.message:"当前环境不支持下载"))}};ga(()=>{try{const a=R.casesMigrate(ve);a&&a.added&&rt(a.list)}catch{}},[]);const us=a=>{const g=a.entry||{},z=new Date(a.at),q=h=>String(h).padStart(2,"0");return r("div",{key:a.id,className:"mp-case"},r("button",{className:"mp-case-main",onClick:()=>{Zi(Object.assign({},g)),Wt()},title:[g.date,g.hourUnknown?"时辰未知":g.time,g.address].filter(Boolean).join(" ")||"点一下回填这组参数并重排"},r("b",null,R.profKindLabel(g.kind)),r("span",null,g.label||a.question||"—"),r("i",null,`${q(z.getMonth()+1)}-${q(z.getDate())} ${q(z.getHours())}:${q(z.getMinutes())}`)),r("select",{className:"mp-case-sel",value:a.status,title:"标应验状态",onChange:h=>rt(R.casesSetStatus(a.id,h.target.value))},R.CASE_STATUS.map(h=>r("option",{key:h,value:h},R.caseStatusLabel(h)))),r("button",{className:"mp-case-del",title:"删除这条",onClick:()=>rt(R.casesRemove(a.id))},"删"))},gs=["bazi","ziwei","trend","chenggu"],Ji=a=>{s(a.kind),F(a.date),a.time&&se(a.time),re(!!a.hourUnknown),a.gender&&t(a.gender),I(a.address||""),Ha(a.trueSolar!==!1),Pa(a.lateZi!==!1)},fs=a=>{const g=R.profEvent(a.target);if(!g)return;const z=h=>Ce.find(ue=>ue.id===h),q=a.currentTarget.querySelector(".mp-prof-name");if(jt(""),g.action==="use"){const h=z(g.id);if(!h)return;if(!R.profUsable(h)){Me("这张档案没有出生时刻,先补上时刻再存一次。");return}sa="",je(R.profilesTouch(h.id)),Ji(h),Ae(h.kind,{date:h.date,time:h.hourUnknown?"12:00":h.time},void 0,{gender:h.gender||void 0,address:h.address||"",hourUnknown:!!h.hourUnknown,trueSolar:h.trueSolar!==!1,lateZi:h.lateZi!==!1});return}if(g.action==="edit"){const h=z(g.id);if(!h)return;Ji(h),sa=h.label,Ke(h.id);return}if(g.action==="cancel"){sa="",Ke(null);return}if(g.action==="pin"){je(R.profilesPin(g.id));return}if(g.action==="del"){if(ca!==g.id){jt(g.id);return}je(R.profilesRemove(g.id)),ze===g.id&&(sa="",Ke(null)),Me("已从本机删除这张档案卡(不影响已经排出来的盘)。");return}if(g.action==="put"){const h=ze,ue=R.profFromForm({kind:n,date:S,time:ee,hourUnknown:le,gender:ye,address:$e,trueSolar:Ze,lateZi:pa},q?q.value:sa,ze||void 0);if(!ue){Me("先填好出生日期(和时刻),再存档案。");return}const qe=R.profilesPut(ue);if(!qe.ok){Me("档案没能存进本机(存储被禁用或已满),排盘不受影响。");return}je(qe.list),sa="",Ke(null),q&&(q.value=""),Me(`${h?"已更新档案":"已存入我的命盘"}「${qe.item.label}」。`)}},hs=a=>{const g=a.target&&a.target.closest?a.target.closest(".mp-prof-name"):null;g&&(sa=g.value)},bs=a=>{const g=X.formOf?X.formOf(a):null;if(!g){Ae("ziwei");return}const z=Ge.some(qe=>qe.k===g.tab)?g.tab:"ziwei",q={date:g.date||S,time:g.time||ee},h=g.lines===void 0?void 0:Array.isArray(g.lines)?g.lines.join(" "):String(g.lines);g.date&&F(g.date),g.time&&se(g.time),g.gender&&t(g.gender),typeof g.address=="string"&&I(g.address),typeof g.trueSolar=="boolean"&&Ha(g.trueSolar),typeof g.lateZi=="boolean"&&Pa(g.lateZi),h!==void 0&&ie(h),g.question&&Yt(g.question),s(z);const ue=X.restNote?X.restNote(g):"";Te(`已按深链还原:${a.label}${g.question?`|${g.question}`:""}${ue?` ${ue}`:""}`),Ae(z,q,void 0,{gender:g.gender,address:g.address,trueSolar:g.trueSolar,lateZi:g.lateZi,lines:h,question:g.question})};ga(()=>{let a=!1;const g=_e;return(async()=>{let z=null;try{await ut(n);const q=typeof location<"u"?String(location.href):"";q&&q.indexOf("mp=")>=0&&window.Engine&&window.Engine.parseAskLink&&(z=window.Engine.parseAskLink(q))}catch{z=null}if(!(a||_e!==g)){if(z&&z.ok)try{bs(z);return}catch{}Ae("ziwei")}})(),()=>{a=!0}},[]),ga(()=>{if(!ce)return;const a=ce.kind;me(null),Ae(a)},[ce]),ga(()=>{const a=g=>{if(g.key!=="Escape")return;const z=document.getElementById("mp-trace-layer");z&&z.classList.contains("open")&&Di()};return document.addEventListener("keydown",a),()=>document.removeEventListener("keydown",a)},[]);const Xi=(fe||[]).filter(a=>a&&Ge.some(g=>g.k===a.tab)).slice(0,hi),xs=a=>(Ge.find(g=>g.k===a)||{}).label||a,vs=({k:a,label:g,tip:z,wide:q})=>r("button",{key:a,type:"button",title:z,className:"mp-tool"+(q?" wide":"")+(n===a?" on":""),"data-tab":a,onClick:()=>At(a)},r("b",null,g),r("span",null,z)),ys=[r("div",{key:"profiles",className:"mp-profwrap",onClick:fs,onInput:hs,dangerouslySetInnerHTML:{__html:R.profilesHTML(Ce,{editingId:ze,armedDel:ca,bar:gs.indexOf(n)>=0?R.profilesBarHTML({editingId:ze,name:sa}):""})}}),r("section",{key:"start",className:"mp-start","aria-label":"选择要算的事"},r("div",{className:"mp-start-top"},r("div",{className:"mp-recent",hidden:Xi.length===0},r("span",{className:"mp-recent-lbl"},"最近用过"),r("span",{className:"mp-recent-list"},Xi.map(a=>r("button",{key:a.tab,type:"button",className:"mp-rc",onClick:()=>At(a.tab)},xs(a.tab),r("i",null,yn(a.at)))))),r("div",{className:"mp-viewsw",role:"group","aria-label":"首屏视图"},r("button",{type:"button",className:U==="group"?"on":"","aria-pressed":U==="group"?"true":"false",onClick:()=>Hi("group")},"分组"),r("button",{type:"button",className:U==="flat"?"on":"","aria-pressed":U==="flat"?"true":"false",onClick:()=>Hi("flat")},"平铺"))),U==="group"?r("div",{className:"mp-groups"},vn.map(a=>{const g=!!x[a.title],z=Math.max(0,a.items.length-4);return r("section",{key:a.title,className:"mp-tgroup"+(g?" open":"")},r("div",{className:"mp-tgroup-head"},r("h2",null,a.title),r("p",null,a.hint)),r("div",{className:"mp-ttools"},a.items.map(vs),z>0?r("button",{key:"more",type:"button",className:"mp-tmore","aria-expanded":g?"true":"false",onClick:()=>v(q=>Object.assign({},q,{[a.title]:!g}))},g?"收起":`还有 ${z} 个`):null))})):null),r("div",{key:"tabs",className:"mp-tabs"+(U==="flat"?"":" hide"),role:"tablist","aria-label":"命理体系"},Ge.map(a=>r("button",{key:a.k,role:"tab","aria-selected":n===a.k?"true":"false",tabIndex:n===a.k?0:-1,className:"mp-tab"+(n===a.k?" on":""),onClick:()=>At(a.k)},a.label))),r("div",{key:"head",className:"mp-panel"},jn({tab:n,open:Mi,onToggle:Pn,onCast:Fn,onAsk:Bi,hasResult:!!j}),r("div",{className:"mp-row"},_i?ne(pt?"出生日期(公历)":Ie==="date"?"日期(公历)":"起卦日期(公历)",r(Ot,{value:S,onChange:Dn,onInvalid:()=>Me("日期请按「年-月-日」填写,例如 1990-05-12。")})):null,Oi?ne(pt?"出生时刻":"起卦时刻",r("input",{className:"mp-input",type:"time",value:ee,disabled:le&&(n==="bazi"||n==="trend"),onChange:a=>Rn(a.target.value)})):null,n==="bazi"||n==="trend"?r("label",{className:"mp-chk",title:"不知道出生时辰时勾这里:不排时柱,起运按日估算,结果首行会写明"},r("input",{type:"checkbox",checked:le,onChange:a=>re(a.target.checked)})," 时辰未知"):null,pt?ne("性别",r("select",{className:"mp-input",value:ye,onChange:a=>t(a.target.value)},r("option",{value:"female"},"女"),r("option",{value:"male"},"男"))):null,pt?ne("出生地(省/市即可)",r("input",{className:"mp-input",placeholder:"如 河北石家庄 / 成都",value:$e,onChange:a=>I(a.target.value)})):null,n==="bazi"||n==="ziwei"?r("label",{className:"mp-field mp-checks"},r("input",{type:"checkbox",checked:et,onChange:a=>Bt(a.target.checked)}),r("span",{className:"mp-lbl"},"八字 × 紫微 交叉验证")):null,n==="hepan"?ne("对方出生日期",r(Ot,{value:xe,onChange:we,onInvalid:()=>Me("对方出生日期请按「年-月-日」填写,例如 1992-08-15。")})):null,n==="hepan"?ne("对方出生时刻",r("input",{className:"mp-input",type:"time",value:Z,onChange:a=>K(a.target.value)})):null,n==="hepan"?ne("对方性别",r("select",{className:"mp-input",value:V,onChange:a=>G(a.target.value)},r("option",{value:"female"},"女"),r("option",{value:"male"},"男"))):null,n==="hepan"?ne("合盘方式",r("div",{className:"mp-seg"},r("button",{className:Le==="bazi"?"on":"",onClick:()=>ha("bazi")},"八字"),r("button",{className:Le==="ziwei"?"on":"",onClick:()=>ha("ziwei")},"紫微"))):null,n==="hepan"?ne("对方出生地(可空)",r("input",{className:"mp-input",placeholder:"如 四川成都",value:te,onChange:a=>Ne(a.target.value)})):null,n==="hepan"?r("label",{className:"mp-field mp-checks"},r("input",{type:"checkbox",checked:Ue,onChange:a=>xt(a.target.checked)}),r("span",{className:"mp-lbl"},"三方合盘(加入第三人)")):null,n==="hepan"&&Ue?ne("第三方出生日期",r(Ot,{value:Ta,onChange:Wa,onInvalid:()=>Me("第三方出生日期请按「年-月-日」填写,例如 1990-01-01。")})):null,n==="hepan"&&Ue?ne("第三方出生时刻",r("input",{className:"mp-input",type:"time",value:Ea,onChange:a=>ba(a.target.value)})):null,n==="hepan"&&Ue?ne("第三方性别",r("select",{className:"mp-input",value:xa,onChange:a=>_a(a.target.value)},r("option",{value:"female"},"女"),r("option",{value:"male"},"男"))):null,n==="hepan"&&Ue?ne("第三方出生地(可空)",r("input",{className:"mp-input",placeholder:"如 广东广州",value:Oa,onChange:a=>vt(a.target.value)})):null,n==="qimen"?r("fieldset",{key:"qmr",className:"mp-qmrule"},r("legend",{className:"mp-lbl"},"换局规则"),r("div",{className:"mp-qmopts",role:"radiogroup","aria-label":"奇门换局规则"},[["chaibu","拆补"],["chaoshen","超神接气"],["zhirun","置闰"]].map(([a,g])=>r("label",{key:a,className:"mp-qmopt"},r("input",{type:"radio",name:"qimen_rule",value:a,checked:oa===a,onChange:()=>va(a)}),r("span",null,g)))),r("div",{className:"mp-field"},r("span",{className:"mp-lbl"},"晚子时"),r("select",{className:"mp-input",value:Fa,onChange:a=>Qa(a.target.value)},r("option",{value:"same-day"},"23:00 后归当日"),r("option",{value:"next-day"},"23:00 后归次日"))),r("details",{className:"mp-qmhelp"},r("summary",null,"三种规则有什么区别?"),r("p",null,"决定符头与节气如何对齐、是否插入闰局;同一个时刻在不同规则下可能得到不同局数。默认「拆补」与工具层一致。"))):null,Ve(n)||n==="qimen"?ne(n==="qimen"?"询问方向(定用神)":"询问方向",r("select",{className:"mp-input",value:Re,onChange:a=>{qi(a.target.value),Ri(a.target.value)}},(X.DIRECTIONS||[]).map(a=>r("option",{key:a.key,value:a.key},a.label)))):null,n==="tarot"?ne("牌阵",r("select",{className:"mp-input",value:Zt,onChange:a=>Si(a.target.value)},r("option",{value:"one"},"1 张 · 单张指引"),r("option",{value:"three"},"3 张 · 过去现在未来"),r("option",{value:"five"},"5 张 · 五张局势"),r("option",{value:"celtic"},"10 张 · 凯尔特十字"),r("option",{value:"either"},"5 张 · 二选一"),r("option",{value:"relation"},"7 张 · 关系阵"),r("option",{value:"timeflow"},"3 张 · 时间流"))):null,n==="liuyao"?ne("六爻(可空)",r("input",{className:"mp-input",placeholder:"空则随机,如 9 7 8 8 7 6",value:W,onChange:a=>ie(a.target.value)})):null,n==="meihua"?ne("起卦方式",r("div",{className:"mp-seg"},r("button",{className:qa==="time"?"on":"",onClick:()=>Pi("time")},"时间"),r("button",{className:qa==="number"?"on":"",onClick:()=>Pi("number")},"数字"))):null,n==="meihua"&&qa==="number"?ne("第一个数",r("input",{className:"mp-input",value:qt,placeholder:"如 17",onChange:a=>Ai(a.target.value)})):null,n==="meihua"&&qa==="number"?ne("第二个数",r("input",{className:"mp-input",value:Nt,placeholder:"如 29",onChange:a=>Li(a.target.value)})):null,n==="meihua"&&qa==="number"?ne("动爻(可空)",r("input",{className:"mp-input",value:Mt,placeholder:"1-6",onChange:a=>Ti(a.target.value)})):null,n==="zeri"?ne("所办事项",r("select",{className:"mp-input",value:Ba,onChange:a=>nt(a.target.value)},[["常用",["嫁娶","搬家入宅","出行","开业","签订合同","祭祀"]],["婚嫁",["嫁娶","订婚","领证","提亲","收送聘金","满月酒"]],["生活",["搬家","入宅","旅行","访亲友","入学","求医","祭祀"]],["建造",["动土","装修","装修建造","安葬","试车买车"]],["工商",["开业","交易","投资","签订合同","签约","纳财","赴任"]]].map(([a,g])=>r("optgroup",{key:a,label:a},g.map(z=>r("option",{key:`${a}-${z}`,value:z},z)))))):null,n==="convert"?ne("转换方向",r("div",{className:"mp-seg"},r("button",{className:Oe==="solar2lunar"?"on":"",onClick:()=>ea("solar2lunar")},"公历 → 农历"),r("button",{className:Oe==="lunar2solar"?"on":"",onClick:()=>ea("lunar2solar")},"农历 → 公历"))):null,n==="convert"&&Oe==="lunar2solar"?ne("农历日期",r("input",{className:"mp-input",value:$a,placeholder:"如 2026-9-17",onChange:a=>wt(a.target.value)})):null,n==="convert"&&Oe==="lunar2solar"?r("label",{className:"mp-check"},r("input",{type:"checkbox",checked:Ua,onChange:a=>$t(a.target.checked)})," 闰月"):null,n==="zeri"?ne("看多少天",r("input",{className:"mp-input",type:"number",min:1,max:60,value:la,onChange:a=>Ga(a.target.value)})):null,n==="zeri"?ne("候选日(可空,只比这几天)",r("input",{className:"mp-input",placeholder:"如 2026-12-01, 2026-12-08, 2026-12-15",value:wa,onChange:a=>Qe(a.target.value)})):null,n==="zeri"?ne("当事人属相(可空)",r("select",{className:"mp-input",value:Ye,onChange:a=>st(a.target.value)},r("option",{value:""},"不排除"),["鼠","牛","虎","兔","龙","蛇","马","羊","猴","鸡","狗","猪"].map(a=>r("option",{key:a,value:a},a)))):null,n==="xiaoliuren"?ne("起课方式",r("div",{className:"mp-seg"},r("button",{className:De==="time"?"on":"",onClick:()=>ka("time")},"时间"),r("button",{className:De==="number"?"on":"",onClick:()=>ka("number")},"报数"))):null,n==="xiaoliuren"&&De==="number"?ne("第一个数",r("input",{className:"mp-input",type:"number",min:1,max:99,value:za,onChange:a=>kt(a.target.value)})):null,n==="xiaoliuren"&&De==="number"?ne("第二个数",r("input",{className:"mp-input",type:"number",min:1,max:99,value:Za,onChange:a=>He(a.target.value)})):null,n==="xiaoliuren"&&De==="number"?ne("第三个数",r("input",{className:"mp-input",type:"number",min:1,max:99,value:aa,onChange:a=>Ya(a.target.value)})):null,n==="mbti"?r("div",{className:"mp-quiz-wrap"},r("div",{className:"mp-lbl"},"十六型人格问卷 · 4 题一页,按 1(完全不像)到 5(很像我)打分"),r(fn,{answers:da,page:Ut,onPick:(a,g)=>ot(z=>{const q=z.slice();return q[a]=g,q}),onPage:a=>zt(g=>Math.max(0,Math.min(g+a,Math.max(0,Math.ceil(bt().total/gt)-1)))),onSubmit:Xt,onClear:()=>{ot(new Array(bt().total).fill(null)),zt(0),k(null)}})):null,n==="constitution"?r("div",{className:"mp-quiz-wrap"},r("div",{className:"mp-lbl"},"中医体质问卷 · 9 种体质各 5 题,共 45 题 · 5 题一页,按 1(没有)到 5(总是)打分"),r(hn,{paper:ja,answers:i,page:l,onPick:(a,g)=>o(z=>{const q=z.slice();return q[a]=g,q}),onPage:a=>p(g=>Math.max(0,Math.min(g+a,Math.max(0,Math.ceil((ja&&ja.questions?ja.questions.length:Ht)/ft)-1)))),onSubmit:Xt,onClear:()=>{o(new Array(Ht).fill(null)),p(0),k(null)}})):null,n==="trend"?ne("算到几岁",r("input",{className:"mp-input",type:"number",min:10,max:100,value:c,onChange:a=>d(a.target.value)})):null,n==="fengshui"?ne("看什么",r("div",{className:"mp-seg"},r("button",{className:u==="natal"?"on":"",onClick:()=>m("natal")},"命卦"),r("button",{className:u==="advise"?"on":"",onClick:()=>m("advise")},"门主灶"),r("button",{className:u==="xuankong"?"on":"",onClick:()=>m("xuankong")},"玄空"))):null,n==="fengshui"&&u!=="natal"?ne("坐山(24 山)",r("input",{className:"mp-input",value:w,placeholder:"如 子 / 乾",onChange:a=>$(a.target.value)})):null,n==="fengshui"&&u!=="natal"?ne("朝向(24 山)",r("input",{className:"mp-input",value:A,placeholder:"如 午 / 巽",onChange:a=>L(a.target.value)})):null,n==="fengshui"&&u==="xuankong"?ne("运(1–9)",r("input",{className:"mp-input",type:"number",min:1,max:9,value:f,onChange:a=>b(a.target.value)})):null,n==="name"?ne("看什么",r("div",{className:"mp-seg"},r("button",{className:_==="assess"?"on":"",onClick:()=>Q("assess")},"评名字"),r("button",{className:_==="generate"?"on":"",onClick:()=>Q("generate")},"生成候选"))):null,n==="name"?ne("姓",r("input",{className:"mp-input",value:D,placeholder:"如 李",onChange:a=>T(a.target.value)})):null,n==="name"&&_==="assess"?ne("名字",r("input",{className:"mp-input",value:H,placeholder:"如 沐宸",onChange:a=>pe(a.target.value)})):null,n==="name"&&_==="generate"?ne("候选个数",r("input",{className:"mp-input",type:"number",min:1,max:20,value:M,onChange:a=>B(a.target.value)})):null),pt?r("div",{className:"mp-checks"},r("label",{title:"按出生地经度把钟表时间换算成真太阳时"},r("input",{type:"checkbox",checked:Ze,onChange:a=>Ha(a.target.checked)}),"真太阳时"),r("label",{title:"23:00–23:59 出生时:勾选=按次日日柱起时柱;不勾=仍用当日日柱"},r("input",{type:"checkbox",checked:pa,onChange:a=>Pa(a.target.checked)}),"晚子时换日"),r("label",{title:"开启后会请求 OpenStreetMap,把区县/村落到更精确的坐标"},r("input",{type:"checkbox",checked:y,onChange:a=>he(a.target.checked)}),"联网精确到区县")):null,Ve(n)?r("div",{className:"mp-askblock"},r("span",{className:"mp-lbl"},"所问之事(必填)"),r("textarea",{className:"mp-textarea"+(Tn?" invalid":""),rows:2,value:ma,placeholder:"用一句话描述所问之事,例如:今年是否适合换工作?",onChange:a=>{Yt(a.target.value),St(!1)},onBlur:a=>Ri(void 0,a.target.value)})):null,n==="mbti"||n==="constitution"?null:r("div",{key:"actions",className:"mp-actions"},r("button",{className:"mp-btn ghost",style:{fontSize:12,padding:"5px 12px",marginRight:8},onClick:In,title:"用固定示例盘看完整报告(不改动你已填的数据)"},"看示例"),r("button",{className:"mp-btn",onClick:Xt,title:"时间仍为自动时,点它会取当下再起卦"},n==="tarot"?"抽牌":n==="bazi"||n==="ziwei"?"排盘":n==="hepan"?"合盘":n==="qimen"?"起局":Pt.indexOf(n)>=0?"看结果":"起卦"))),r("div",{key:"hint",className:"mp-hint"},_n.hint),ve.length||Xe.length?r("div",{key:"hist",className:"mp-hist"},r("div",{className:"mp-hist-h"},r("span",null,ve.length?"最近排过":"卦例库"),r("span",{className:"mp-hist-acts"},ve.length?r("button",{className:"mp-hist-clear",onClick:rs},"清空"):null,r("button",{className:"mp-hist-clear mp-hist-more",onClick:ds},Xe.length?`卦例库 ${Xe.length}`:"卦例库"))),r("div",{className:"mp-hist-list"},ve.map((a,g)=>r("button",{key:g,className:"mp-hist-item",title:`${String(a.date||"")} ${a.hourUnknown?"时辰未知":String(a.time||"")}`,onClick:()=>Zi(a)},r("b",null,(Ge.find(z=>z.k===a.kind)||{}).label||a.kind),r("span",null,a.label||"—"),r("i",null,`${String(a.date||"").slice(5)} ${a.hourUnknown?"时辰未知":String(a.time||"")}`))))):null,Ie==="cast"&&Ei?r("div",{key:"auto",className:"mp-auto"},Jt.cast?`起卦时刻用的是你手动填的(${ee});想跟随当下,把时间改回或清空即可。`:`起卦时刻已自动取本机时间(${ee}),每次点起卦都会重新取当下;想固定时刻就在上面改。`):null,Sa?r("div",{key:"err",className:"mp-err",role:"alert"},Sa):null,ji?r("div",{key:"ntc",className:"mp-note",role:"status"},ji):null,Cn?r("div",{key:"load",className:"mp-note",role:"status"},"正在加载本页需要的引擎…"):null,!j&&!Sa?r("div",{key:"empty",className:"mp-empty"},r("b",null,n==="ziwei"||n==="bazi"?"填好出生信息,点「排盘」":n==="tarot"?"写下想问的事,点「抽牌」":n==="mbti"?"按 1–5 给题目打分,答满 12 题就能看结果":n==="constitution"?"按 1–5 给题目打分,答满 27 题就能看结果":Pt.indexOf(n)>=0?"填好参数,点「看结果」":"写下所问之事,点「起卦」"),n==="ziwei"||n==="bazi"?"出生日期、时刻与性别即可;出生地只影响真太阳时。":n==="mbti"?"4 题一页,答案只在本地参与计算,不会上传。":n==="constitution"?"5 题一页,答案只在本地参与计算,不会上传;这是自评问卷,不是医学诊断。":Pt.indexOf(n)>=0?"按上面的选项填好参数即可;全部在本机计算,不上传。":"起卦时刻已自动取当下,也可以手动改。"):null,j?r("div",{key:"card",className:"mp-card mp-flat",role:"region","aria-label":"排盘结果","aria-live":"polite",onClick:Wn,dangerouslySetInnerHTML:{__html:zn(j)+Qn(j)+R.resultWithInterpret("",j.it,{folded:Gn()})+R.perfHTML(de)+R.revisionHTML(j.r.revision)+R.handleHTML(j.r.handle)+R.shadowHTML(j.r.shadow,j.shadowDiff)+R.traceHTML(j.r.trace,j.r.system,j.r.traceText)+R.caliberHTML(j.caliber)}}):null,j?r("div",{key:"bar",className:"mp-bar"},r("button",{className:"mp-btn ghost",style:{fontSize:12,padding:"5px 12px"},onClick:es},En||"复制文字结果"),r("button",{className:"mp-btn ghost",style:{fontSize:12,padding:"5px 12px",marginLeft:8},onClick:ns,title:"导出盘面 + 解析(含一页读懂、三张表)为 Markdown"},"导出 .md"),r("button",{className:"mp-btn ghost",style:{fontSize:12,padding:"5px 12px",marginLeft:8},onClick:ss,title:"生成 PNG 摘要卡(一页读懂 + 首张表),适合直接分享"},"存为摘要长图")):null,j?r("div",{key:"ask",className:"mp-askbox",style:{flexWrap:"wrap"}},r("input",{className:"mp-input",value:ra,maxLength:120,placeholder:"追问:如 2027 年事业怎么样(回车提交)",onChange:a=>Gt(a.target.value),onKeyDown:a=>{a.key==="Enter"&&Ii()}}),r("button",{className:"mp-btn ghost",style:{fontSize:12,padding:"5px 12px"},onClick:Ii},"追问"),r("button",{className:"mp-btn ghost",style:{fontSize:12,padding:"5px 12px",marginLeft:8},onClick:Bi,title:"把这张盘的摘要和你的问题一起发进 DSH 对话窗,由对话里的模型接着答"},"问进对话"),ae.ref?null:r("div",{key:"bridgediag",className:"mp-note",style:{marginTop:6,fontSize:11,flexBasis:"100%"}},xi()),Da?r("div",{key:"chatnote",className:"mp-note",style:{marginTop:6,fontSize:12,flexBasis:"100%"}},Da):null):null,j?r("div",{key:"bridge",className:"mp-bridge"},r("span",{className:"mp-bridge-lbl"},ae.ref?"桥可用;也可以:":"桥未就绪,改走这几档:"),Fi.map(([a,g,z])=>r("button",{key:a,type:"button",className:"mp-chip","data-bridge-copy":a,title:z,onClick:q=>Xn(a,q.currentTarget)},g))):null,Ra?r("div",{key:"fx",className:"mp-fx",dangerouslySetInnerHTML:{__html:R.followupHTML(Ra)}}):null,j&&j.kind==="bazi"&&j.r.past?r("div",{key:"verify",className:"mp-verify"},r("div",{className:"mp-verify-h"},"验前事 · 过去几年的信号(只读,不改盘)"),j.r.past.rows.map(a=>r("div",{key:a.year,className:"mp-verify-row"},r("span",{className:"mp-verify-txt"},`${a.year} ${a.ganzhi} · ${a.theme}`),r("span",{className:"mp-verify-btns"},["yes","no","unsure"].map(g=>r("button",{key:g,className:"mp-chip"+(tt[a.year]===g?" on":""),onClick:()=>Ia(Object.assign({},tt,{[a.year]:g}))},g==="yes"?"准":g==="no"?"不准":"不确定"))))),r("div",{className:"mp-verify-foot"},r("button",{className:"mp-btn ghost",style:Ui,onClick:os},"算贴合度"),ya?r("span",{className:"mp-verify-fit"},`命中 ${ya.yes}/${ya.answered}(${ya.level}):${ya.advice}`):null)):null,j&&j.kind==="bazi"?r("div",{key:"rect",className:"mp-rect"},r("div",{className:"mp-verify-h"},"生时校正 · 用过去的事反推时辰"),We.map((a,g)=>r("div",{key:g,className:"mp-rect-row"},r("input",{className:"mp-input",type:"number",min:1900,max:2100,value:a.year,onChange:z=>yt(We.map((q,h)=>h===g?Object.assign({},q,{year:z.target.value}):q))}),r("select",{className:"mp-input",value:a.kind,onChange:z=>yt(We.map((q,h)=>h===g?Object.assign({},q,{kind:z.target.value}):q))},[["career","事业变动"],["wealth","财运"],["love","感情"],["move","搬迁/出行"],["health","健康"],["other","其他"]].map(([z,q])=>r("option",{key:z,value:z},q))))),r("button",{className:"mp-btn ghost",style:Ui,onClick:ps},"计算候选时辰"),Fe?Fe.error?r("div",{className:"mp-rect-err"},Fe.error):r("div",{className:"mp-rect-out"},r("div",{className:"mp-verify-fit"},Fe.note),Fe.candidates.slice(0,6).map(a=>r("div",{key:a.hour,className:"mp-rect-cand"+(a===Fe.best?" best":"")},`${a.label} · 时柱 ${a.hourGanzhi} · 日柱 ${a.dayGanzhi} · 命中 ${a.hits}/${a.total}`))):null):null,!j&&!Sa?r("div",{key:"ph",className:"mp-dim",style:{marginTop:24,fontSize:12}},"选择体系后点「排盘」。所有计算在本机完成,不上传任何数据。"):null,r("div",{key:"fb",className:"mp-fb"},r("div",{className:"mp-fb-h"},r("span",{className:"mp-fb-t"},"用得不对、读不懂、或算得跟别家不一样?"),r("button",{className:"mp-btn ghost",style:{fontSize:12,padding:"4px 10px"},onClick:Gi,title:"生成一份含输入、版本、环境与结果摘要的报告,粘贴到 issue / 邮件 / 群聊即可"},C||"复制反馈报告"),r("button",{className:"mp-btn ghost",style:{fontSize:12,padding:"4px 10px",marginLeft:6},onClick:()=>is(),title:"在浏览器打开 GitHub issue(报告已复制到剪贴板,粘进去即可)"},"开 issue")),r("div",{className:"mp-fb-b"},"邮件 1129440028@qq.com · GitHub issues · 微信群 dsh-metaphysics",oe?r("span",{className:"mp-fb-note"}," "+oe):null)),ls?r("div",{key:"cases",className:"mp-cases-layer",role:"dialog","aria-modal":"true","aria-label":"卦例库",onClick:a=>{a.target===a.currentTarget&&Wt()}},r("div",{className:"mp-cases-box"},r("div",{className:"mp-cases-h"},r("b",null,`卦例库 · ${Qt.length}/${Xe.length}`),r("button",{className:"mp-cases-x",onClick:Wt,"aria-label":"关闭"},"✕")),r("div",{className:"mp-cases-tabs"},[["all","全部"]].concat(R.CASE_STATUS.map(a=>[a,R.caseStatusLabel(a)])).map(a=>r("button",{key:a[0],className:"mp-chip"+(Vt===a[0]?" on":""),onClick:()=>Ki(a[0])},`${a[1]} ${cs(a[0])}`))),r("div",{className:"mp-cases-list"},Qt.length?Qt.map(a=>us(a)):r("div",{className:"mp-empty"},"这一栏还空着。排一次盘或起一卦就会自动记一条;过些天回来标应验。")),r("div",{className:"mp-cases-f"},r("button",{className:"mp-btn ghost",style:{fontSize:12,padding:"4px 10px"},onClick:ms},"导出 JSONL"),r("span",{className:"mp-cases-tip"},"只存参数与一句摘要,不存盘面;点条目回填重排。")))):null];return r("div",{className:"mp-wrap"},ys)}function qn(n){try{if(typeof styles<"u"&&styles&&typeof styles.insert=="function")return styles.insert(n)}catch(s){console.error("[metaphysics] styles.insert 不可用,改用 DOM 注入",s)}try{const s=document.createElement("style");return s.setAttribute("data-plugin","@local/metaphysics"),s.textContent=n,document.head.appendChild(s),()=>s.remove()}catch(s){return console.error("[metaphysics] DOM 注入样式也失败",s),()=>{}}}let zi=!1;function It(){try{const n=document.documentElement;if(!n||!document.body)return;const s=document.createElement("span");s.setAttribute("aria-hidden","true"),s.style.cssText="position:absolute;left:-9999px;top:0;width:0;height:0;pointer-events:none;background:var(--dsw-alias-brand-primary)",document.body.appendChild(s);const S=getComputedStyle(s).backgroundColor;s.remove();const F=Pe&&typeof Pe.pickOnColor=="function"?Pe.pickOnColor(S):"";F&&n.style&&n.style.getPropertyValue("--mp-on-brand")!==F&&n.style.setProperty("--mp-on-brand",F)}catch{}}function Nn(){if(!zi){zi=!0,It();try{const n=window.matchMedia&&window.matchMedia("(prefers-color-scheme: dark)");n&&typeof n.addEventListener=="function"&&n.addEventListener("change",It)}catch{}try{typeof MutationObserver=="function"&&document.documentElement&&new MutationObserver(It).observe(document.documentElement,{attributes:!0,attributeFilter:["class","data-theme"]})}catch{}}}function Mn(n){try{const I=qn(cn+(R&&R.CSS?R.CSS:""));typeof n.effect=="function"&&typeof I=="function"&&n.effect(()=>I)}catch(I){console.error("[metaphysics] 样式注入失败",I)}try{Nn()}catch(I){console.error("[metaphysics] 字色同步失败",I)}let s=null;try{s=n&&n.slots||(n&&typeof n.get=="function"?n.get("slots"):null)}catch(I){console.error("[metaphysics] 取 slots 服务失败",I)}if(!s||typeof s.register!="function"){console.error("[metaphysics] slots 服务不可用,面板未注册");return}try{ae.injectType=typeof s.inject;const I=typeof s.spec=="function"?s.spec("conversation.input.right"):null;ae.spec=I?I.kind+"/"+I.scope:"未声明"}catch(I){ae.spec="取声明失败",vi(I)}const S=I=>{if(typeof I=="function")return I;if(I&&typeof I=="object"){for(const xe of["dispose","off","cancel","unregister"])if(typeof I[xe]=="function")return()=>{try{I[xe]()}catch{}}}return()=>{}},F=(I,xe)=>{try{const we=s.register(I,xe);return ae.regs+=1,ae.seatOk[I.name]=!0,S(we)}catch(we){return vi(we),()=>{}}},ee=(I,xe)=>{const we=()=>{const Z=xe();return ae.contribution=(ae.contribution?ae.contribution+",":"")+(I+(typeof Z=="function"?" 已挂上":" 未挂上")),Z};try{typeof s.inject=="function"?s.inject(I,we):we()}catch(Z){console.error("[metaphysics] 等待槽位失败:"+I,Z);try{we()}catch(K){console.error("[metaphysics] 直接注册也失败:"+I,K)}}};ee("sidebar.panellist",()=>F({name:"sidebar.panellist",id:"metaphysics",order:20,label:()=>"命理 v"+(window.__MP_VER||"")},xn)),ee("main",()=>F({name:"main",key:"metaphysics"},I=>r(bn,null,r(Sn,I))));const se=(I,xe)=>{const we=()=>{try{const K=s.inject(I,xe);return ae.contribution=(ae.contribution?ae.contribution+",":"")+(I.replace("conversation.","")+(typeof K=="function"?" 已挂上":" 未挂上")),K}catch(K){console.error("[metaphysics] 槽位注册失败:"+I,K);try{return xe()}catch(V){console.error("[metaphysics] 直接注册也失败:"+I,V);return}}};let Z;try{typeof n.effect=="function"?Z=n.effect(we,"metaphysics: "+I):Z=we()}catch(K){console.error("[metaphysics] effect 包裹失败:"+I,K),Z=we()}typeof Z=="function"&&ae.seatDisposers.push(Z)};se("conversation.input.right",()=>F({name:"conversation.input.right",id:"metaphysics-ask",order:40},wi)),se("conversation.composer.dock",()=>F({name:"conversation.composer.dock",id:"metaphysics-dock",order:60},$i));let le=!1;const re=()=>{ae.ref||le||(le=!0,ae.seatOk["conversation.input.right"]||F({name:"conversation.input.right",id:"metaphysics-ask",order:40},wi),ae.seatOk["conversation.composer.dock"]||F({name:"conversation.composer.dock",id:"metaphysics-dock",order:60},$i))};let ye=20;const t=()=>!!(ae.seatOk["conversation.input.right"]&&ae.seatOk["conversation.composer.dock"]),$e=()=>{ae.ref||ye<=0||t()||(ye-=1,re(),!t()&&setTimeout($e,700))};try{setTimeout($e,700)}catch{}try{document.addEventListener("pointerdown",()=>{le=!1,re()},{once:!0,capture:!0})}catch{}}return{inject:["slots"],apply(n){try{Mn(n)}catch(s){console.error("[metaphysics] apply 异常",s)}}}}});
|
|
2612
|
+
`)},Bi=()=>{const a=ts();try{if(navigator.clipboard&&navigator.clipboard.writeText)navigator.clipboard.writeText(a).then(()=>{O("已复制"),ge("粘到 issue / 邮件 / 群里即可")}).catch(()=>{O("复制失败"),ge("可改用「导出 .md」或手动选中")});else{const g=document.createElement("textarea");g.value=a,g.style.cssText="position:fixed;left:-9999px;top:0",document.body.appendChild(g),g.select();const z=document.execCommand&&document.execCommand("copy");g.remove(),O(z?"已复制":"复制失败"),ge(z?"粘到 issue / 邮件 / 群里即可":"可改用「导出 .md」或手动选中")}}catch{O("复制失败"),ge("可改用「导出 .md」")}setTimeout(()=>{O(""),ge("")},4e3)},is=()=>{try{Bi()}catch{}const a=encodeURIComponent("[反馈] "+(Ge.find(g=>g.k===n)?.label||n)+(za?":报错":":使用问题"));try{window.open("https://github.com/xuanfu-web/dsh-metaphysics/issues/new?title="+a,"_blank","noopener")}catch{ge("浏览器拦了弹窗,请手动打开 GitHub issues")}},ns=()=>{if(!(!j||!j.r))try{const a=X.renderText?X.renderText(j.r):j.r.summary||"",g=new Blob([a],{type:"text/markdown;charset=utf-8"}),z=document.createElement("a");z.href=URL.createObjectURL(g),z.download=`烛微命盘报告-${j.r.system}.md`,document.body.appendChild(z),z.click(),z.remove(),setTimeout(()=>URL.revokeObjectURL(z.href),2e3)}catch(a){console.error("[metaphysics] 导出失败",a)}},ss=()=>{if(!(!j||!j.r))try{const a=R.summaryCardPNG?R.summaryCardPNG(j.r,j.it):"";if(!a){Sa("当前环境不支持 Canvas 导出");return}const g=document.createElement("a");g.href=a,g.download=`烛微命盘摘要-${j.r.system}.png`,document.body.appendChild(g),g.click(),g.remove()}catch(a){console.error("[metaphysics] 长图导出失败",a)}},Gi={fontSize:12,padding:"5px 12px"},os=()=>{!j||!j.r||!j.r.past||qe(X.verifyFit?X.verifyFit(j.r.past.rows,at):null)},ps=()=>{if(!(!j||j.kind!=="bazi"))try{const a=j.at||{date:S,time:ee},[g,z,N]=String(a.date).split("-").map(Number),[,h]=String(a.time).split(":").map(Number),ue=Qe.filter(Ne=>Number(Ne.year)).map(Ne=>({year:Number(Ne.year),kind:Ne.kind}));tt(X.rectifyBirth?X.rectifyBirth({base:{year:g,month:z,day:N,minute:Number.isFinite(h)?h:0},gender:j.gender||ve,events:ue,lateZi:typeof j.lateZi=="boolean"?j.lateZi:ra,trueSolar:typeof j.trueSolar=="boolean"?j.trueSolar:Ye,address:String(j.address||"").trim()||void 0}):{error:"当前客户端未加载生时校正模块"})}catch(a){tt({error:a&&a.message?a.message:String(a)})}},ne=(a,g)=>r("label",{className:"mp-field"},r("span",{className:"mp-lbl"},a),g),Ui=a=>{s(a.kind),a.date&&F(a.date),a.time&&se(a.time),re(!!a.hourUnknown),a.gender&&t(a.gender),I(a.address||""),typeof a.trueSolar=="boolean"&&Oa(a.trueSolar),typeof a.lateZi=="boolean"&&Ha(a.lateZi),ie(a.lines||""),Zt(a.question||""),Si(a.direction||"general"),ji(a.spread||{1:"one",3:"three",5:"five"}[a.count]||"three"),Mi(a.mhMode||"time"),Ci(a.upper||""),Ai(a.lower||""),Li(a.changing||""),a.kind==="qimen"&&(typeof a.qimenRule=="string"&&ba(a.qimenRule),typeof a.qLateZi=="string"&&Wa(a.qLateZi)),a.kind==="zeri"&&(typeof a.task=="string"&&it(a.task),a.days!=null&&Ba(String(a.days)),typeof a.shengXiao=="string"&&nt(a.shengXiao),typeof a.zCand=="string"&&ea(a.zCand)),a.kind==="xiaoliuren"&&(wa(a.xlrMode==="number"?"number":"time"),a.num1!=null&&wt(String(a.num1)),a.num2!=null&&He(String(a.num2)),a.num3!=null&&Za(String(a.num3))),a.kind==="trend"&&a.toAge!=null&&d(String(a.toAge)),a.kind==="fengshui"&&(typeof a.fsMode=="string"&&m(a.fsMode),a.fsPeriod!=null&&b(String(a.fsPeriod)),typeof a.sitting=="string"&&$(a.sitting),typeof a.facing=="string"&&L(a.facing)),a.kind==="name"&&(typeof a.nnMode=="string"&&Q(a.nnMode),typeof a.surname=="string"&&T(a.surname),typeof a.givenName=="string"&&pe(a.givenName),a.limitN!=null&&B(String(a.limitN))),a.kind==="convert"&&(typeof a.convMode=="string"&&aa(a.convMode),typeof a.lunarDate=="string"&&vt(a.lunarDate),typeof a.leapMonth=="boolean"&&yt(a.leapMonth)),a.kind==="hepan"&&(a.hpChart&&ga(a.hpChart),typeof a.partnerDate=="string"&&we(a.partnerDate),typeof a.partnerTime=="string"&&K(a.partnerTime),typeof a.partnerGender=="string"&&G(a.partnerGender),typeof a.partnerAddress=="string"&&Me(a.partnerAddress),typeof a.thirdOn=="boolean"&&ht(a.thirdOn),typeof a.p2Date=="string"&&Va(a.p2Date),typeof a.p2Time=="string"&&fa(a.p2Time),typeof a.p2Gender=="string"&&Ea(a.p2Gender),typeof a.p2Address=="string"&&bt(a.p2Address)),zt(!1),me(a)},rs=()=>{P([]),ri([])},[Ve,At]=q(()=>{try{return R.casesLoad()}catch{return[]}}),[ls,Zi]=q(!1),[Xt,Yi]=q("all"),[ds,Ki]=q(!1),cs=()=>{try{At(R.casesLoad())}catch{}Yi("all"),Zi(!0)},Vt=()=>Zi(!1),ms=a=>a==="all"?Ve.length:Ve.filter(g=>g.status===a).length,Wt=Xt==="all"?Ve:Ve.filter(a=>a.status===Xt),us=()=>{if(!Ue.entry){je("这张盘没有可存的参数,重排一次再存。");return}try{const a=R.casesAdd(Ue.entry);a&&a.ok?(At(a.list),Ki(!0)):je("卦例没能存进本机(存储被禁用或已满),排盘不受影响。")}catch{je("卦例没能存进本机(存储被禁用或已满),排盘不受影响。")}},gs=()=>{const a=R.casesExport(Ve);if(!a){je("还没有可导出的卦例");return}try{const g=new Blob([a],{type:"application/x-ndjson;charset=utf-8"}),z=URL.createObjectURL(g),N=document.createElement("a");N.href=z,N.download=`metaphysics-cases-${new Date().toISOString().slice(0,10)}.jsonl`,document.body.appendChild(N),N.click(),N.remove(),setTimeout(()=>{try{URL.revokeObjectURL(z)}catch{}},1e3),je(`已导出 ${Ve.length} 条卦例(JSONL)`)}catch(g){je("导出失败:"+(g&&g.message?g.message:"当前环境不支持下载"))}},fs=a=>{const g=a.entry||{},z=new Date(a.at),N=h=>String(h).padStart(2,"0");return r("div",{key:a.id,className:"mp-case"},r("button",{className:"mp-case-main",onClick:()=>{Ui(Object.assign({},g)),Vt()},title:[g.date,g.hourUnknown?"时辰未知":g.time,g.address].filter(Boolean).join(" ")||"点一下回填这组参数并重排"},r("b",null,R.profKindLabel(g.kind)),r("span",null,g.label||a.question||"—"),r("i",null,`${N(z.getMonth()+1)}-${N(z.getDate())} ${N(z.getHours())}:${N(z.getMinutes())}`)),r("select",{className:"mp-case-sel",value:a.status,title:"标应验状态",onChange:h=>At(R.casesSetStatus(a.id,h.target.value))},R.CASE_STATUS.map(h=>r("option",{key:h,value:h},R.caseStatusLabel(h)))),r("button",{className:"mp-case-del",title:"删除这条",onClick:()=>At(R.casesRemove(a.id))},"删"))},hs=["bazi","ziwei","trend","chenggu"],Ji=a=>{s(a.kind),F(a.date),a.time&&se(a.time),re(!!a.hourUnknown),a.gender&&t(a.gender),I(a.address||""),Oa(a.trueSolar!==!1),Ha(a.lateZi!==!1)},bs=a=>{const g=R.profEvent(a.target);if(!g)return;const z=h=>Ce.find(ue=>ue.id===h),N=a.currentTarget.querySelector(".mp-prof-name");if(kt(""),g.action==="use"){const h=z(g.id);if(!h)return;if(!R.profUsable(h)){je("这张档案没有出生时刻,先补上时刻再存一次。");return}oa="",Se(R.profilesTouch(h.id)),Ji(h),Ae(h.kind,{date:h.date,time:h.hourUnknown?"12:00":h.time},void 0,{gender:h.gender||void 0,address:h.address||"",hourUnknown:!!h.hourUnknown,trueSolar:h.trueSolar!==!1,lateZi:h.lateZi!==!1});return}if(g.action==="edit"){const h=z(g.id);if(!h)return;Ji(h),oa=h.label,Je(h.id);return}if(g.action==="cancel"){oa="",Je(null);return}if(g.action==="pin"){Se(R.profilesPin(g.id));return}if(g.action==="del"){if(ma!==g.id){kt(g.id);return}Se(R.profilesRemove(g.id)),ze===g.id&&(oa="",Je(null)),je("已从本机删除这张档案卡(不影响已经排出来的盘)。");return}if(g.action==="put"){const h=ze,ue=R.profFromForm({kind:n,date:S,time:ee,hourUnknown:le,gender:ve,address:$e,trueSolar:Ye,lateZi:ra},N?N.value:oa,ze||void 0);if(!ue){je("先填好出生日期(和时刻),再存档案。");return}const Ne=R.profilesPut(ue);if(!Ne.ok){je("档案没能存进本机(存储被禁用或已满),排盘不受影响。");return}Se(Ne.list),oa="",Je(null),N&&(N.value=""),je(`${h?"已更新档案":"已存入我的命盘"}「${Ne.item.label}」。`)}},xs=a=>{const g=a.target&&a.target.closest?a.target.closest(".mp-prof-name"):null;g&&(oa=g.value)},vs=a=>{const g=X.formOf?X.formOf(a):null;if(!g){Ae("ziwei");return}const z=Ge.some(Ne=>Ne.k===g.tab)?g.tab:"ziwei",N={date:g.date||S,time:g.time||ee},h=g.lines===void 0?void 0:Array.isArray(g.lines)?g.lines.join(" "):String(g.lines);g.date&&F(g.date),g.time&&se(g.time),g.gender&&t(g.gender),typeof g.address=="string"&&I(g.address),typeof g.trueSolar=="boolean"&&Oa(g.trueSolar),typeof g.lateZi=="boolean"&&Ha(g.lateZi),h!==void 0&&ie(h),g.question&&Zt(g.question),s(z);const ue=X.restNote?X.restNote(g):"";Te(`已按深链还原:${a.label}${g.question?`|${g.question}`:""}${ue?` ${ue}`:""}`),Ae(z,N,void 0,{gender:g.gender,address:g.address,trueSolar:g.trueSolar,lateZi:g.lateZi,lines:h,question:g.question})};Ma(()=>{let a=!1;const g=_e;return(async()=>{let z=null;try{await ct(n);const N=typeof location<"u"?String(location.href):"";N&&N.indexOf("mp=")>=0&&window.Engine&&window.Engine.parseAskLink&&(z=window.Engine.parseAskLink(N))}catch{z=null}if(!(a||_e!==g)){if(z&&z.ok)try{vs(z);return}catch{}Ae("ziwei")}})(),()=>{a=!0}},[]),Ma(()=>{if(!ce)return;const a=ce.kind;me(null),Ae(a)},[ce]),Ma(()=>{const a=g=>{if(g.key!=="Escape")return;const z=document.getElementById("mp-trace-layer");z&&z.classList.contains("open")&&Fi()};return document.addEventListener("keydown",a),()=>document.removeEventListener("keydown",a)},[]);const Xi=(fe||[]).filter(a=>a&&Ge.some(g=>g.k===a.tab)).slice(0,fi),ys=a=>(Ge.find(g=>g.k===a)||{}).label||a,ws=({k:a,label:g,tip:z,wide:N})=>r("button",{key:a,type:"button",title:z,className:"mp-tool"+(N?" wide":"")+(n===a?" on":""),"data-tab":a,onClick:()=>Mt(a)},r("b",null,g),r("span",null,z)),$s=[r("div",{key:"profiles",className:"mp-profwrap",onClick:bs,onInput:xs,dangerouslySetInnerHTML:{__html:R.profilesHTML(Ce,{editingId:ze,armedDel:ma,bar:hs.indexOf(n)>=0?R.profilesBarHTML({editingId:ze,name:oa}):""})}}),r("section",{key:"start",className:"mp-start","aria-label":"选择要算的事"},r("div",{className:"mp-start-top"},r("div",{className:"mp-recent",hidden:Xi.length===0},r("span",{className:"mp-recent-lbl"},"最近用过"),r("span",{className:"mp-recent-list"},Xi.map(a=>r("button",{key:a.tab,type:"button",className:"mp-rc",onClick:()=>Mt(a.tab)},ys(a.tab),r("i",null,yn(a.at)))))),r("div",{className:"mp-viewsw",role:"group","aria-label":"首屏视图"},r("button",{type:"button",className:U==="group"?"on":"","aria-pressed":U==="group"?"true":"false",onClick:()=>Oi("group")},"分组"),r("button",{type:"button",className:U==="flat"?"on":"","aria-pressed":U==="flat"?"true":"false",onClick:()=>Oi("flat")},"平铺"))),U==="group"?r("div",{className:"mp-groups"},vn.map(a=>{const g=!!x[a.title],z=Math.max(0,a.items.length-4);return r("section",{key:a.title,className:"mp-tgroup"+(g?" open":"")},r("div",{className:"mp-tgroup-head"},r("h2",null,a.title),r("p",null,a.hint)),r("div",{className:"mp-ttools"},a.items.map(ws),z>0?r("button",{key:"more",type:"button",className:"mp-tmore","aria-expanded":g?"true":"false",onClick:()=>v(N=>Object.assign({},N,{[a.title]:!g}))},g?"收起":`还有 ${z} 个`):null))})):null),r("div",{key:"tabs",className:"mp-tabs"+(U==="flat"?"":" hide"),role:"tablist","aria-label":"命理体系"},Ge.map(a=>r("button",{key:a.k,role:"tab","aria-selected":n===a.k?"true":"false",tabIndex:n===a.k?0:-1,className:"mp-tab"+(n===a.k?" on":""),onClick:()=>Mt(a.k)},a.label))),r("div",{key:"head",className:"mp-panel"},jn({tab:n,open:Ni,onToggle:Pn,onCast:Fn,onAsk:Ii,hasResult:!!j}),r("div",{className:"mp-row"},Ei?ne(ot?"出生日期(公历)":Ie==="date"?"日期(公历)":"起卦日期(公历)",r(_t,{value:S,onChange:Dn,onInvalid:()=>je("日期请按「年-月-日」填写,例如 1990-05-12。")})):null,_i?ne(ot?"出生时刻":"起卦时刻",r("input",{className:"mp-input",type:"time",value:ee,disabled:le&&(n==="bazi"||n==="trend"),onChange:a=>Rn(a.target.value)})):null,n==="bazi"||n==="trend"?r("label",{className:"mp-chk",title:"不知道出生时辰时勾这里:不排时柱,起运按日估算,结果首行会写明"},r("input",{type:"checkbox",checked:le,onChange:a=>re(a.target.checked)})," 时辰未知"):null,ot?ne("性别",r("select",{className:"mp-input",value:ve,onChange:a=>t(a.target.value)},r("option",{value:"female"},"女"),r("option",{value:"male"},"男"))):null,ot?ne("出生地(省/市即可)",r("input",{className:"mp-input",placeholder:"如 河北石家庄 / 成都",value:$e,onChange:a=>I(a.target.value)})):null,n==="bazi"||n==="ziwei"?r("label",{className:"mp-field mp-checks"},r("input",{type:"checkbox",checked:Qa,onChange:a=>It(a.target.checked)}),r("span",{className:"mp-lbl"},"八字 × 紫微 交叉验证")):null,n==="hepan"?ne("对方出生日期",r(_t,{value:xe,onChange:we,onInvalid:()=>je("对方出生日期请按「年-月-日」填写,例如 1992-08-15。")})):null,n==="hepan"?ne("对方出生时刻",r("input",{className:"mp-input",type:"time",value:Z,onChange:a=>K(a.target.value)})):null,n==="hepan"?ne("对方性别",r("select",{className:"mp-input",value:V,onChange:a=>G(a.target.value)},r("option",{value:"female"},"女"),r("option",{value:"male"},"男"))):null,n==="hepan"?ne("合盘方式",r("div",{className:"mp-seg"},r("button",{className:Le==="bazi"?"on":"",onClick:()=>ga("bazi")},"八字"),r("button",{className:Le==="ziwei"?"on":"",onClick:()=>ga("ziwei")},"紫微"))):null,n==="hepan"?ne("对方出生地(可空)",r("input",{className:"mp-input",placeholder:"如 四川成都",value:te,onChange:a=>Me(a.target.value)})):null,n==="hepan"?r("label",{className:"mp-field mp-checks"},r("input",{type:"checkbox",checked:Ze,onChange:a=>ht(a.target.checked)}),r("span",{className:"mp-lbl"},"三方合盘(加入第三人)")):null,n==="hepan"&&Ze?ne("第三方出生日期",r(_t,{value:La,onChange:Va,onInvalid:()=>je("第三方出生日期请按「年-月-日」填写,例如 1990-01-01。")})):null,n==="hepan"&&Ze?ne("第三方出生时刻",r("input",{className:"mp-input",type:"time",value:Ta,onChange:a=>fa(a.target.value)})):null,n==="hepan"&&Ze?ne("第三方性别",r("select",{className:"mp-input",value:ha,onChange:a=>Ea(a.target.value)},r("option",{value:"female"},"女"),r("option",{value:"male"},"男"))):null,n==="hepan"&&Ze?ne("第三方出生地(可空)",r("input",{className:"mp-input",placeholder:"如 广东广州",value:_a,onChange:a=>bt(a.target.value)})):null,n==="qimen"?r("fieldset",{key:"qmr",className:"mp-qmrule"},r("legend",{className:"mp-lbl"},"换局规则"),r("div",{className:"mp-qmopts",role:"radiogroup","aria-label":"奇门换局规则"},[["chaibu","拆补"],["chaoshen","超神接气"],["zhirun","置闰"]].map(([a,g])=>r("label",{key:a,className:"mp-qmopt"},r("input",{type:"radio",name:"qimen_rule",value:a,checked:pa===a,onChange:()=>ba(a)}),r("span",null,g)))),r("div",{className:"mp-field"},r("span",{className:"mp-lbl"},"晚子时"),r("select",{className:"mp-input",value:Pa,onChange:a=>Wa(a.target.value)},r("option",{value:"same-day"},"23:00 后归当日"),r("option",{value:"next-day"},"23:00 后归次日"))),r("details",{className:"mp-qmhelp"},r("summary",null,"三种规则有什么区别?"),r("p",null,"决定符头与节气如何对齐、是否插入闰局;同一个时刻在不同规则下可能得到不同局数。默认「拆补」与工具层一致。"))):null,We(n)||n==="qimen"?ne(n==="qimen"?"询问方向(定用神)":"询问方向",r("select",{className:"mp-input",value:Re,onChange:a=>{Si(a.target.value),Di(a.target.value)}},(X.DIRECTIONS||[]).map(a=>r("option",{key:a.key,value:a.key},a.label)))):null,n==="tarot"?ne("牌阵",r("select",{className:"mp-input",value:Ut,onChange:a=>ji(a.target.value)},r("option",{value:"one"},"1 张 · 单张指引"),r("option",{value:"three"},"3 张 · 过去现在未来"),r("option",{value:"five"},"5 张 · 五张局势"),r("option",{value:"celtic"},"10 张 · 凯尔特十字"),r("option",{value:"either"},"5 张 · 二选一"),r("option",{value:"relation"},"7 张 · 关系阵"),r("option",{value:"timeflow"},"3 张 · 时间流"))):null,n==="liuyao"?ne("六爻(可空)",r("input",{className:"mp-input",placeholder:"空则随机,如 9 7 8 8 7 6",value:W,onChange:a=>ie(a.target.value)})):null,n==="meihua"?ne("起卦方式",r("div",{className:"mp-seg"},r("button",{className:ja==="time"?"on":"",onClick:()=>Hi("time")},"时间"),r("button",{className:ja==="number"?"on":"",onClick:()=>Hi("number")},"数字"))):null,n==="meihua"&&ja==="number"?ne("第一个数",r("input",{className:"mp-input",value:jt,placeholder:"如 17",onChange:a=>Ci(a.target.value)})):null,n==="meihua"&&ja==="number"?ne("第二个数",r("input",{className:"mp-input",value:St,placeholder:"如 29",onChange:a=>Ai(a.target.value)})):null,n==="meihua"&&ja==="number"?ne("动爻(可空)",r("input",{className:"mp-input",value:qt,placeholder:"1-6",onChange:a=>Li(a.target.value)})):null,n==="zeri"?ne("所办事项",r("select",{className:"mp-input",value:Ia,onChange:a=>it(a.target.value)},[["常用",["嫁娶","搬家入宅","出行","开业","签订合同","祭祀"]],["婚嫁",["嫁娶","订婚","领证","提亲","收送聘金","满月酒"]],["生活",["搬家","入宅","旅行","访亲友","入学","求医","祭祀"]],["建造",["动土","装修","装修建造","安葬","试车买车"]],["工商",["开业","交易","投资","签订合同","签约","纳财","赴任"]]].map(([a,g])=>r("optgroup",{key:a,label:a},g.map(z=>r("option",{key:`${a}-${z}`,value:z},z)))))):null,n==="convert"?ne("转换方向",r("div",{className:"mp-seg"},r("button",{className:Oe==="solar2lunar"?"on":"",onClick:()=>aa("solar2lunar")},"公历 → 农历"),r("button",{className:Oe==="lunar2solar"?"on":"",onClick:()=>aa("lunar2solar")},"农历 → 公历"))):null,n==="convert"&&Oe==="lunar2solar"?ne("农历日期",r("input",{className:"mp-input",value:ya,placeholder:"如 2026-9-17",onChange:a=>vt(a.target.value)})):null,n==="convert"&&Oe==="lunar2solar"?r("label",{className:"mp-check"},r("input",{type:"checkbox",checked:Ga,onChange:a=>yt(a.target.checked)})," 闰月"):null,n==="zeri"?ne("看多少天",r("input",{className:"mp-input",type:"number",min:1,max:60,value:da,onChange:a=>Ba(a.target.value)})):null,n==="zeri"?ne("候选日(可空,只比这几天)",r("input",{className:"mp-input",placeholder:"如 2026-12-01, 2026-12-08, 2026-12-15",value:va,onChange:a=>ea(a.target.value)})):null,n==="zeri"?ne("当事人属相(可空)",r("select",{className:"mp-input",value:Ke,onChange:a=>nt(a.target.value)},r("option",{value:""},"不排除"),["鼠","牛","虎","兔","龙","蛇","马","羊","猴","鸡","狗","猪"].map(a=>r("option",{key:a,value:a},a)))):null,n==="xiaoliuren"?ne("起课方式",r("div",{className:"mp-seg"},r("button",{className:De==="time"?"on":"",onClick:()=>wa("time")},"时间"),r("button",{className:De==="number"?"on":"",onClick:()=>wa("number")},"报数"))):null,n==="xiaoliuren"&&De==="number"?ne("第一个数",r("input",{className:"mp-input",type:"number",min:1,max:99,value:$a,onChange:a=>wt(a.target.value)})):null,n==="xiaoliuren"&&De==="number"?ne("第二个数",r("input",{className:"mp-input",type:"number",min:1,max:99,value:Ua,onChange:a=>He(a.target.value)})):null,n==="xiaoliuren"&&De==="number"?ne("第三个数",r("input",{className:"mp-input",type:"number",min:1,max:99,value:ta,onChange:a=>Za(a.target.value)})):null,n==="mbti"?r("div",{className:"mp-quiz-wrap"},r("div",{className:"mp-lbl"},"十六型人格问卷 · 4 题一页,按 1(完全不像)到 5(很像我)打分"),r(fn,{answers:ca,page:Gt,onPick:(a,g)=>st(z=>{const N=z.slice();return N[a]=g,N}),onPage:a=>$t(g=>Math.max(0,Math.min(g+a,Math.max(0,Math.ceil(ft().total/mt)-1)))),onSubmit:Jt,onClear:()=>{st(new Array(ft().total).fill(null)),$t(0),k(null)}})):null,n==="constitution"?r("div",{className:"mp-quiz-wrap"},r("div",{className:"mp-lbl"},"中医体质问卷 · 9 种体质各 5 题,共 45 题 · 5 题一页,按 1(没有)到 5(总是)打分"),r(hn,{paper:ka,answers:i,page:l,onPick:(a,g)=>o(z=>{const N=z.slice();return N[a]=g,N}),onPage:a=>p(g=>Math.max(0,Math.min(g+a,Math.max(0,Math.ceil((ka&&ka.questions?ka.questions.length:Ot)/ut)-1)))),onSubmit:Jt,onClear:()=>{o(new Array(Ot).fill(null)),p(0),k(null)}})):null,n==="trend"?ne("算到几岁",r("input",{className:"mp-input",type:"number",min:10,max:100,value:c,onChange:a=>d(a.target.value)})):null,n==="fengshui"?ne("看什么",r("div",{className:"mp-seg"},r("button",{className:u==="natal"?"on":"",onClick:()=>m("natal")},"命卦"),r("button",{className:u==="advise"?"on":"",onClick:()=>m("advise")},"门主灶"),r("button",{className:u==="xuankong"?"on":"",onClick:()=>m("xuankong")},"玄空"))):null,n==="fengshui"&&u!=="natal"?ne("坐山(24 山)",r("input",{className:"mp-input",value:w,placeholder:"如 子 / 乾",onChange:a=>$(a.target.value)})):null,n==="fengshui"&&u!=="natal"?ne("朝向(24 山)",r("input",{className:"mp-input",value:A,placeholder:"如 午 / 巽",onChange:a=>L(a.target.value)})):null,n==="fengshui"&&u==="xuankong"?ne("运(1–9)",r("input",{className:"mp-input",type:"number",min:1,max:9,value:f,onChange:a=>b(a.target.value)})):null,n==="name"?ne("看什么",r("div",{className:"mp-seg"},r("button",{className:_==="assess"?"on":"",onClick:()=>Q("assess")},"评名字"),r("button",{className:_==="generate"?"on":"",onClick:()=>Q("generate")},"生成候选"))):null,n==="name"?ne("姓",r("input",{className:"mp-input",value:D,placeholder:"如 李",onChange:a=>T(a.target.value)})):null,n==="name"&&_==="assess"?ne("名字",r("input",{className:"mp-input",value:H,placeholder:"如 沐宸",onChange:a=>pe(a.target.value)})):null,n==="name"&&_==="generate"?ne("候选个数",r("input",{className:"mp-input",type:"number",min:1,max:20,value:M,onChange:a=>B(a.target.value)})):null),ot?r("div",{className:"mp-checks"},r("label",{title:"按出生地经度把钟表时间换算成真太阳时"},r("input",{type:"checkbox",checked:Ye,onChange:a=>Oa(a.target.checked)}),"真太阳时"),r("label",{title:"23:00–23:59 出生时:勾选=按次日日柱起时柱;不勾=仍用当日日柱"},r("input",{type:"checkbox",checked:ra,onChange:a=>Ha(a.target.checked)}),"晚子时换日"),r("label",{title:"开启后会请求 OpenStreetMap,把区县/村落到更精确的坐标"},r("input",{type:"checkbox",checked:y,onChange:a=>he(a.target.checked)}),"联网精确到区县")):null,We(n)?r("div",{className:"mp-askblock"},r("span",{className:"mp-lbl"},"所问之事(必填)"),r("textarea",{className:"mp-textarea"+(Tn?" invalid":""),rows:2,value:ua,placeholder:"用一句话描述所问之事,例如:今年是否适合换工作?",onChange:a=>{Zt(a.target.value),zt(!1)},onBlur:a=>Di(void 0,a.target.value)})):null,n==="mbti"||n==="constitution"?null:r("div",{key:"actions",className:"mp-actions"},r("button",{className:"mp-btn ghost",style:{fontSize:12,padding:"5px 12px",marginRight:8},onClick:In,title:"用固定示例盘看完整报告(不改动你已填的数据)"},"看示例"),r("button",{className:"mp-btn",onClick:Jt,title:"时间仍为自动时,点它会取当下再起卦"},n==="tarot"?"抽牌":n==="bazi"||n==="ziwei"?"排盘":n==="hepan"?"合盘":n==="qimen"?"起局":Ht.indexOf(n)>=0?"看结果":"起卦"))),r("div",{key:"hint",className:"mp-hint"},_n.hint),ye.length||Ve.length?r("div",{key:"hist",className:"mp-hist"},r("div",{className:"mp-hist-h"},r("span",null,ye.length?"最近排过":"卦例库"),r("span",{className:"mp-hist-acts"},ye.length?r("button",{className:"mp-hist-clear",onClick:rs},"清空"):null,r("button",{className:"mp-hist-clear mp-hist-more",onClick:cs},Ve.length?`卦例库 ${Ve.length}`:"卦例库"))),r("div",{className:"mp-hist-list"},ye.map((a,g)=>r("button",{key:g,className:"mp-hist-item",title:`${String(a.date||"")} ${a.hourUnknown?"时辰未知":String(a.time||"")}`,onClick:()=>Ui(a)},r("b",null,(Ge.find(z=>z.k===a.kind)||{}).label||a.kind),r("span",null,a.label||"—"),r("i",null,`${String(a.date||"").slice(5)} ${a.hourUnknown?"时辰未知":String(a.time||"")}`))))):null,Ie==="cast"&&Ti?r("div",{key:"auto",className:"mp-auto"},Kt.cast?`起卦时刻用的是你手动填的(${ee});想跟随当下,把时间改回或清空即可。`:`起卦时刻已自动取本机时间(${ee}),每次点起卦都会重新取当下;想固定时刻就在上面改。`):null,za?r("div",{key:"err",className:"mp-err",role:"alert"},za):null,zi?r("div",{key:"ntc",className:"mp-note",role:"status"},zi):null,Cn?r("div",{key:"load",className:"mp-note",role:"status"},"正在加载本页需要的引擎…"):null,!j&&!za?r("div",{key:"empty",className:"mp-empty"},r("b",null,n==="ziwei"||n==="bazi"?"填好出生信息,点「排盘」":n==="tarot"?"写下想问的事,点「抽牌」":n==="mbti"?"按 1–5 给题目打分,答满 12 题就能看结果":n==="constitution"?"按 1–5 给题目打分,答满 27 题就能看结果":Ht.indexOf(n)>=0?"填好参数,点「看结果」":"写下所问之事,点「起卦」"),n==="ziwei"||n==="bazi"?"出生日期、时刻与性别即可;出生地只影响真太阳时。":n==="mbti"?"4 题一页,答案只在本地参与计算,不会上传。":n==="constitution"?"5 题一页,答案只在本地参与计算,不会上传;这是自评问卷,不是医学诊断。":Ht.indexOf(n)>=0?"按上面的选项填好参数即可;全部在本机计算,不上传。":"起卦时刻已自动取当下,也可以手动改。"):null,j?r("div",{key:"card",className:"mp-card mp-flat",role:"region","aria-label":"排盘结果","aria-live":"polite",onClick:Wn,dangerouslySetInnerHTML:{__html:zn(j)+Qn(j)+R.resultWithInterpret("",j.it,{folded:Gn()})+R.perfHTML(de)+R.revisionHTML(j.r.revision)+R.handleHTML(j.r.handle)+R.shadowHTML(j.r.shadow,j.shadowDiff)+R.traceHTML(j.r.trace,j.r.system,j.r.traceText)+R.caliberHTML(j.caliber)}}):null,j?r("div",{key:"bar",className:"mp-bar"},r("button",{className:"mp-btn ghost",style:{fontSize:12,padding:"5px 12px"},onClick:es},En||"复制文字结果"),r("button",{className:"mp-btn ghost",style:{fontSize:12,padding:"5px 12px",marginLeft:8},onClick:ns,title:"导出盘面 + 解析(含一页读懂、三张表)为 Markdown"},"导出 .md"),r("button",{className:"mp-btn ghost",style:{fontSize:12,padding:"5px 12px",marginLeft:8},onClick:ss,title:"生成 PNG 摘要卡(一页读懂 + 首张表),适合直接分享"},"存为摘要长图"),r("button",{className:"mp-btn ghost",style:{fontSize:12,padding:"5px 12px",marginLeft:8},onClick:us,title:"把这张盘的参数存进卦例库,日后可回填重排、标应验"},ds?"已存入卦例库":"存入卦例库")):null,j?r("div",{key:"ask",className:"mp-askbox",style:{flexWrap:"wrap"}},r("input",{className:"mp-input",value:la,maxLength:120,placeholder:"追问:如 2027 年事业怎么样(回车提交)",onChange:a=>Bt(a.target.value),onKeyDown:a=>{a.key==="Enter"&&Ri()}}),r("button",{className:"mp-btn ghost",style:{fontSize:12,padding:"5px 12px"},onClick:Ri},"追问"),r("button",{className:"mp-btn ghost",style:{fontSize:12,padding:"5px 12px",marginLeft:8},onClick:Ii,title:"把这张盘的摘要和你的问题一起发进 DSH 对话窗,由对话里的模型接着答"},"问进对话"),ae.ref?null:r("div",{key:"bridgediag",className:"mp-note",style:{marginTop:6,fontSize:11,flexBasis:"100%"}},bi()),Fa?r("div",{key:"chatnote",className:"mp-note",style:{marginTop:6,fontSize:12,flexBasis:"100%"}},Fa):null):null,j?r("div",{key:"bridge",className:"mp-bridge"},r("span",{className:"mp-bridge-lbl"},ae.ref?"桥可用;也可以:":"桥未就绪,改走这几档:"),Pi.map(([a,g,z])=>r("button",{key:a,type:"button",className:"mp-chip","data-bridge-copy":a,title:z,onClick:N=>Xn(a,N.currentTarget)},g))):null,Da?r("div",{key:"fx",className:"mp-fx",dangerouslySetInnerHTML:{__html:R.followupHTML(Da)}}):null,j&&j.kind==="bazi"&&j.r.past?r("div",{key:"verify",className:"mp-verify"},r("div",{className:"mp-verify-h"},"验前事 · 过去几年的信号(只读,不改盘)"),j.r.past.rows.map(a=>r("div",{key:a.year,className:"mp-verify-row"},r("span",{className:"mp-verify-txt"},`${a.year} ${a.ganzhi} · ${a.theme}`),r("span",{className:"mp-verify-btns"},["yes","no","unsure"].map(g=>r("button",{key:g,className:"mp-chip"+(at[a.year]===g?" on":""),onClick:()=>Ra(Object.assign({},at,{[a.year]:g}))},g==="yes"?"准":g==="no"?"不准":"不确定"))))),r("div",{className:"mp-verify-foot"},r("button",{className:"mp-btn ghost",style:Gi,onClick:os},"算贴合度"),xa?r("span",{className:"mp-verify-fit"},`命中 ${xa.yes}/${xa.answered}(${xa.level}):${xa.advice}`):null)):null,j&&j.kind==="bazi"?r("div",{key:"rect",className:"mp-rect"},r("div",{className:"mp-verify-h"},"生时校正 · 用过去的事反推时辰"),Qe.map((a,g)=>r("div",{key:g,className:"mp-rect-row"},r("input",{className:"mp-input",type:"number",min:1900,max:2100,value:a.year,onChange:z=>xt(Qe.map((N,h)=>h===g?Object.assign({},N,{year:z.target.value}):N))}),r("select",{className:"mp-input",value:a.kind,onChange:z=>xt(Qe.map((N,h)=>h===g?Object.assign({},N,{kind:z.target.value}):N))},[["career","事业变动"],["wealth","财运"],["love","感情"],["move","搬迁/出行"],["health","健康"],["other","其他"]].map(([z,N])=>r("option",{key:z,value:z},N))))),r("button",{className:"mp-btn ghost",style:Gi,onClick:ps},"计算候选时辰"),Fe?Fe.error?r("div",{className:"mp-rect-err"},Fe.error):r("div",{className:"mp-rect-out"},r("div",{className:"mp-verify-fit"},Fe.note),Fe.candidates.slice(0,6).map(a=>r("div",{key:a.hour,className:"mp-rect-cand"+(a===Fe.best?" best":"")},`${a.label} · 时柱 ${a.hourGanzhi} · 日柱 ${a.dayGanzhi} · 命中 ${a.hits}/${a.total}`))):null):null,!j&&!za?r("div",{key:"ph",className:"mp-dim",style:{marginTop:24,fontSize:12}},"选择体系后点「排盘」。所有计算在本机完成,不上传任何数据。"):null,r("div",{key:"fb",className:"mp-fb"},r("div",{className:"mp-fb-h"},r("span",{className:"mp-fb-t"},"用得不对、读不懂、或算得跟别家不一样?"),r("button",{className:"mp-btn ghost",style:{fontSize:12,padding:"4px 10px"},onClick:Bi,title:"生成一份含输入、版本、环境与结果摘要的报告,粘贴到 issue / 邮件 / 群聊即可"},C||"复制反馈报告"),r("button",{className:"mp-btn ghost",style:{fontSize:12,padding:"4px 10px",marginLeft:6},onClick:()=>is(),title:"在浏览器打开 GitHub issue(报告已复制到剪贴板,粘进去即可)"},"开 issue")),r("div",{className:"mp-fb-b"},"邮件 1129440028@qq.com · GitHub issues · 微信群 dsh-metaphysics",oe?r("span",{className:"mp-fb-note"}," "+oe):null)),ls?r("div",{key:"cases",className:"mp-cases-layer",role:"dialog","aria-modal":"true","aria-label":"卦例库",onClick:a=>{a.target===a.currentTarget&&Vt()}},r("div",{className:"mp-cases-box"},r("div",{className:"mp-cases-h"},r("b",null,`卦例库 · ${Wt.length}/${Ve.length}`),r("button",{className:"mp-cases-x",onClick:Vt,"aria-label":"关闭"},"✕")),r("div",{className:"mp-cases-tabs"},[["all","全部"]].concat(R.CASE_STATUS.map(a=>[a,R.caseStatusLabel(a)])).map(a=>r("button",{key:a[0],className:"mp-chip"+(Xt===a[0]?" on":""),onClick:()=>Yi(a[0])},`${a[1]} ${ms(a[0])}`))),r("div",{className:"mp-cases-list"},Wt.length?Wt.map(a=>fs(a)):r("div",{className:"mp-empty"},"这一栏还空着。看结果时点「存入卦例库」,想要的盘才会记进来;过些天回来标应验。")),r("div",{className:"mp-cases-f"},r("button",{className:"mp-btn ghost",style:{fontSize:12,padding:"4px 10px"},onClick:gs},"导出 JSONL"),r("span",{className:"mp-cases-tip"},"只存参数与一句摘要,不存盘面;点条目回填重排。")))):null];return r("div",{className:"mp-wrap"},$s)}function qn(n){try{if(typeof styles<"u"&&styles&&typeof styles.insert=="function")return styles.insert(n)}catch(s){console.error("[metaphysics] styles.insert 不可用,改用 DOM 注入",s)}try{const s=document.createElement("style");return s.setAttribute("data-plugin","@local/metaphysics"),s.textContent=n,document.head.appendChild(s),()=>s.remove()}catch(s){return console.error("[metaphysics] DOM 注入样式也失败",s),()=>{}}}let ki=!1;function Rt(){try{const n=document.documentElement;if(!n||!document.body)return;const s=document.createElement("span");s.setAttribute("aria-hidden","true"),s.style.cssText="position:absolute;left:-9999px;top:0;width:0;height:0;pointer-events:none;background:var(--dsw-alias-brand-primary)",document.body.appendChild(s);const S=getComputedStyle(s).backgroundColor;s.remove();const F=Pe&&typeof Pe.pickOnColor=="function"?Pe.pickOnColor(S):"";F&&n.style&&n.style.getPropertyValue("--mp-on-brand")!==F&&n.style.setProperty("--mp-on-brand",F)}catch{}}function Nn(){if(!ki){ki=!0,Rt();try{const n=window.matchMedia&&window.matchMedia("(prefers-color-scheme: dark)");n&&typeof n.addEventListener=="function"&&n.addEventListener("change",Rt)}catch{}try{typeof MutationObserver=="function"&&document.documentElement&&new MutationObserver(Rt).observe(document.documentElement,{attributes:!0,attributeFilter:["class","data-theme"]})}catch{}}}function Mn(n){try{const I=qn(cn+(R&&R.CSS?R.CSS:""));typeof n.effect=="function"&&typeof I=="function"&&n.effect(()=>I)}catch(I){console.error("[metaphysics] 样式注入失败",I)}try{Nn()}catch(I){console.error("[metaphysics] 字色同步失败",I)}let s=null;try{s=n&&n.slots||(n&&typeof n.get=="function"?n.get("slots"):null)}catch(I){console.error("[metaphysics] 取 slots 服务失败",I)}if(!s||typeof s.register!="function"){console.error("[metaphysics] slots 服务不可用,面板未注册");return}try{ae.injectType=typeof s.inject;const I=typeof s.spec=="function"?s.spec("conversation.input.right"):null;ae.spec=I?I.kind+"/"+I.scope:"未声明"}catch(I){ae.spec="取声明失败",xi(I)}const S=I=>{if(typeof I=="function")return I;if(I&&typeof I=="object"){for(const xe of["dispose","off","cancel","unregister"])if(typeof I[xe]=="function")return()=>{try{I[xe]()}catch{}}}return()=>{}},F=(I,xe)=>{try{const we=s.register(I,xe);return ae.regs+=1,ae.seatOk[I.name]=!0,S(we)}catch(we){return xi(we),()=>{}}},ee=(I,xe)=>{const we=()=>{const Z=xe();return ae.contribution=(ae.contribution?ae.contribution+",":"")+(I+(typeof Z=="function"?" 已挂上":" 未挂上")),Z};try{typeof s.inject=="function"?s.inject(I,we):we()}catch(Z){console.error("[metaphysics] 等待槽位失败:"+I,Z);try{we()}catch(K){console.error("[metaphysics] 直接注册也失败:"+I,K)}}};ee("sidebar.panellist",()=>F({name:"sidebar.panellist",id:"metaphysics",order:20,label:()=>"烛微命盘 v"+(window.__MP_VER||"")},xn)),ee("main",()=>F({name:"main",key:"metaphysics"},I=>r(bn,null,r(Sn,I))));const se=(I,xe)=>{const we=()=>{try{const K=s.inject(I,xe);return ae.contribution=(ae.contribution?ae.contribution+",":"")+(I.replace("conversation.","")+(typeof K=="function"?" 已挂上":" 未挂上")),K}catch(K){console.error("[metaphysics] 槽位注册失败:"+I,K);try{return xe()}catch(V){console.error("[metaphysics] 直接注册也失败:"+I,V);return}}};let Z;try{typeof n.effect=="function"?Z=n.effect(we,"metaphysics: "+I):Z=we()}catch(K){console.error("[metaphysics] effect 包裹失败:"+I,K),Z=we()}typeof Z=="function"&&ae.seatDisposers.push(Z)};se("conversation.input.right",()=>F({name:"conversation.input.right",id:"metaphysics-ask",order:40},yi)),se("conversation.composer.dock",()=>F({name:"conversation.composer.dock",id:"metaphysics-dock",order:60},wi));let le=!1;const re=()=>{ae.ref||le||(le=!0,ae.seatOk["conversation.input.right"]||F({name:"conversation.input.right",id:"metaphysics-ask",order:40},yi),ae.seatOk["conversation.composer.dock"]||F({name:"conversation.composer.dock",id:"metaphysics-dock",order:60},wi))};let ve=20;const t=()=>!!(ae.seatOk["conversation.input.right"]&&ae.seatOk["conversation.composer.dock"]),$e=()=>{ae.ref||ve<=0||t()||(ve-=1,re(),!t()&&setTimeout($e,700))};try{setTimeout($e,700)}catch{}try{document.addEventListener("pointerdown",()=>{le=!1,re()},{once:!0,capture:!0})}catch{}}return{inject:["slots"],apply(n){try{Mn(n)}catch(s){console.error("[metaphysics] apply 异常",s)}}}}});
|