@openephemeris/mcp-server 4.15.0 → 4.15.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +11 -0
- package/README.md +18 -1
- package/dist/index.js +3 -12
- package/dist/server-sse.js +3 -12
- package/dist/tools/apps/bazi-app.js +1 -1
- package/dist/tools/apps/bodygraph-app.js +2 -2
- package/dist/tools/apps/chart-wheel-app.js +1 -1
- package/dist/tools/apps/moon-phase-app.js +1 -1
- package/dist/tools/apps/transit-timeline-app.js +1 -1
- package/dist/tools/apps/vedic-chart-app.js +1 -1
- package/dist/tools/specialized/bi_wheel.js +1 -1
- package/dist/tools/specialized/chart_wheel.js +1 -1
- package/dist/tools/specialized/ephemeris_core.js +3 -0
- package/dist/tools/specialized/hd_bodygraph.js +2 -2
- package/dist/tools/ui-meta.d.ts +39 -0
- package/dist/tools/ui-meta.js +48 -0
- package/dist/ui/bazi.html +6 -1
- package/dist/ui/bi-wheel.html +201 -174
- package/dist/ui/bodygraph.html +176 -150
- package/dist/ui/chart-wheel.html +164 -135
- package/dist/ui/moon-phase.html +1 -1
- package/dist/ui/transit-timeline.html +2 -2
- package/dist/ui/vedic-chart.html +82 -56
- package/package.json +7 -3
- package/smithery.yaml +3 -1
package/dist/ui/bi-wheel.html
CHANGED
|
@@ -33,7 +33,7 @@
|
|
|
33
33
|
<div id="tooltip" class="tooltip" aria-live="polite"></div>
|
|
34
34
|
<div id="aspect-filter" hidden></div>
|
|
35
35
|
<div id="param-controls-container" hidden></div>
|
|
36
|
-
<div id="chart-hint" class="chart-hint">Click any planet or cross-aspect to explore · Ask
|
|
36
|
+
<div id="chart-hint" class="chart-hint">Click any planet or cross-aspect to explore · Ask for a deep interpretation</div>
|
|
37
37
|
</div>
|
|
38
38
|
<script type="module">var e = Object.defineProperty, t = (t2, n2) => {
|
|
39
39
|
let r2 = {};
|
|
@@ -6814,15 +6814,15 @@ function hv(e5, t2, n2, r2, i2) {
|
|
|
6814
6814
|
var a2, o2;
|
|
6815
6815
|
let s2 = bv(), c2 = mv[t2];
|
|
6816
6816
|
if (!c2) return;
|
|
6817
|
-
let l2 = J_(n2), u2 = Math.floor((n2 % 360 + 360) % 360 / 30), d2 = H_[u2], f2 = U_[u2], p2 = F_[u2], m2 = G_(u2), h2 = i2 ? "".concat(i2, " \xB7 Natal") : "Inner \xB7 Natal", g2 = rv ? '<button class="ask-claude-btn" id="bi-ask-claude-angle-btn">\u2728
|
|
6817
|
+
let l2 = J_(n2), u2 = Math.floor((n2 % 360 + 360) % 360 / 30), d2 = H_[u2], f2 = U_[u2], p2 = F_[u2], m2 = G_(u2), h2 = i2 ? "".concat(i2, " \xB7 Natal") : "Inner \xB7 Natal", g2 = rv ? '<button class="ask-claude-btn" id="bi-ask-claude-angle-btn">\u2728 Interpret this</button>' : "";
|
|
6818
6818
|
s2.innerHTML = '\n <div class="info-header">\n <span class="info-glyph" style="color:#7060b8;font-family:system-ui;font-weight:700;font-size:14px">'.concat(Q(c2.symbol), '</span>\n <div class="info-title">\n <div style="display:flex;align-items:center;gap:6px;flex-wrap:wrap;">\n <strong>').concat(Q(c2.title), '</strong>\n <span class="wheel-badge inner">').concat(Q(h2), '</span>\n </div>\n <div class="info-subtitle">').concat(Q(p2), " ").concat(Q(l2), '</div>\n </div>\n <button class="info-close" id="bi-info-close-btn">\u2715</button>\n </div>\n <div style="font-size:11px;color:var(--text-secondary,#888);margin:6px 0 4px">\n <span style="color:').concat(m2, ';margin-right:4px">').concat(Q(p2), "</span>\n <em>").concat(Q(d2), " \xB7 ").concat(Q(f2), '</em>\n </div>\n <div style="font-size:12px;line-height:1.55;margin-bottom:8px">').concat(Q(c2.meaning), '</div>\n <div class="aspects-title">').concat(Q(c2.keyword), '</div>\n <div class="aspects-list">\n ').concat(c2.themes.map((e6) => '<div class="aspect-row"><span class="aspect-other">'.concat(Q(e6), "</span></div>")).join(""), "\n </div>\n ").concat(g2, "\n "), s2.classList.add("open"), s2.scrollIntoView({ behavior: "smooth", block: "nearest" }), (a2 = document.getElementById("bi-info-close-btn")) == null || a2.addEventListener("click", () => {
|
|
6819
6819
|
xv(), Ov();
|
|
6820
6820
|
}), (o2 = document.getElementById("bi-ask-claude-angle-btn")) == null || o2.addEventListener("click", () => {
|
|
6821
6821
|
if (!rv) return;
|
|
6822
6822
|
let e6 = document.getElementById("bi-ask-claude-angle-btn");
|
|
6823
6823
|
!e6 || e6.disabled || (e6.disabled = true, e6.textContent = "\u23F3 Sending\u2026", e6.classList.add("sending"), rv({ type: "angle_interpretation", data: { angle: c2.title, longitude: n2, sign: I_[u2], position: l2, element: d2, modality: f2, mode: r2 } }).then(() => {
|
|
6824
|
-
e6.textContent = "\u2713 Sent
|
|
6825
|
-
e6.textContent = "\u2728
|
|
6824
|
+
e6.textContent = "\u2713 Sent", e6.classList.remove("sending"), e6.classList.add("sent"), setTimeout(() => {
|
|
6825
|
+
e6.textContent = "\u2728 Interpret this", e6.classList.remove("sent"), e6.disabled = false;
|
|
6826
6826
|
}, 2500);
|
|
6827
6827
|
}).catch(() => {
|
|
6828
6828
|
e6.textContent = "\u26A0 Failed \u2014 tap to retry", e6.classList.remove("sending"), e6.classList.add("error"), e6.disabled = false;
|
|
@@ -6842,7 +6842,7 @@ function vv(e5, t2, n2, r2, i2, a2, o2, s2) {
|
|
|
6842
6842
|
let p2 = bv(), m2 = Math.floor((t2.cusp_lon % 360 + 360) % 360 / 30), h2 = (c2 = (l2 = t2.sign) == null ? I_[m2] : l2) == null ? "" : c2, g2 = (u2 = F_[m2]) == null ? "" : u2, _2 = _v(o2, t2.cusp_lon, n2.cusp_lon), v2 = _v(s2, t2.cusp_lon, n2.cusp_lon), y2 = i2 || "Natal", b2 = r2 === "synastry" ? a2 == null ? "Synastry" : a2 : "Transit", x2 = (e6, t3) => e6.length === 0 ? '<div class="no-aspects">\u2014</div>' : e6.map((e7) => {
|
|
6843
6843
|
let n3 = J_(e7.longitude), r3 = e7.retrograde ? " \u211E" : "";
|
|
6844
6844
|
return '<div class="aspect-row">\n <span class="wheel-badge '.concat(t3, '" style="font-size:9px">').concat(Q(t3 === "inner" ? y2 : b2), '</span>\n <span class="aspect-other">').concat(Q(Z(e7.name))).concat(r3, '</span>\n <span class="aspect-meta">').concat(Q(n3), "</span>\n </div>");
|
|
6845
|
-
}).join(""), S2 = rv ? '<button class="ask-claude-btn" id="bi-ask-claude-house-btn">\u2728
|
|
6845
|
+
}).join(""), S2 = rv ? '<button class="ask-claude-btn" id="bi-ask-claude-house-btn">\u2728 Interpret this</button>' : "";
|
|
6846
6846
|
p2.innerHTML = '\n <div class="info-header">\n <span class="info-glyph" style="color:#7060b8;font-family:system-ui;font-weight:700;font-size:14px">'.concat(t2.number, '</span>\n <div class="info-title">\n <div><strong>House ').concat(t2.number, '</strong></div>\n <div class="info-subtitle">').concat(Q(g2), " ").concat(Q(h2), " on cusp").concat(t2.ruler ? " \xB7 ruled by ".concat(Q(Z(t2.ruler))) : "", '</div>\n </div>\n <button class="info-close" id="bi-info-close-btn">\u2715</button>\n </div>\n <div class="aspects-title" style="margin-top:6px">').concat(Q(y2), ' planets</div>\n <div class="aspects-list">').concat(x2(_2, "inner"), '</div>\n <div class="aspects-title" style="margin-top:8px">').concat(Q(b2), ' planets currently here</div>\n <div class="aspects-list">').concat(x2(v2, "outer"), "</div>\n ").concat(S2, "\n "), p2.classList.add("open"), p2.scrollIntoView({ behavior: "smooth", block: "nearest" }), (d2 = document.getElementById("bi-info-close-btn")) == null || d2.addEventListener("click", () => {
|
|
6847
6847
|
xv(), Ov();
|
|
6848
6848
|
}), (f2 = document.getElementById("bi-ask-claude-house-btn")) == null || f2.addEventListener("click", () => {
|
|
@@ -6856,8 +6856,8 @@ function vv(e5, t2, n2, r2, i2, a2, o2, s2) {
|
|
|
6856
6856
|
var t3;
|
|
6857
6857
|
return { name: e7.name, position: J_(e7.longitude), retrograde: (t3 = e7.retrograde) == null ? false : t3 };
|
|
6858
6858
|
}) } }).then(() => {
|
|
6859
|
-
n3.textContent = "\u2713 Sent
|
|
6860
|
-
n3.textContent = "\u2728
|
|
6859
|
+
n3.textContent = "\u2713 Sent", n3.classList.remove("sending"), n3.classList.add("sent"), setTimeout(() => {
|
|
6860
|
+
n3.textContent = "\u2728 Interpret this", n3.classList.remove("sent"), n3.disabled = false;
|
|
6861
6861
|
}, 2500);
|
|
6862
6862
|
}).catch(() => {
|
|
6863
6863
|
n3.textContent = "\u26A0 Failed \u2014 tap to retry", n3.classList.remove("sending"), n3.classList.add("error"), n3.disabled = false;
|
|
@@ -6869,7 +6869,7 @@ function yv(e5, t2, n2, r2, i2, a2, o2) {
|
|
|
6869
6869
|
let l2 = bv(), u2 = I_[t2], d2 = F_[t2], f2 = H_[t2], p2 = U_[t2], m2 = (e6) => Math.floor((e6.longitude % 360 + 360) % 360 / 30) === t2, h2 = a2.filter(m2), g2 = o2.filter(m2), _2 = r2 || "Natal", v2 = n2 === "synastry" ? i2 == null ? "Synastry" : i2 : "Transit", y2 = (e6, t3) => e6.length === 0 ? '<div class="no-aspects">\u2014</div>' : e6.map((e7) => {
|
|
6870
6870
|
let n3 = J_(e7.longitude), r3 = e7.retrograde ? " \u211E" : "";
|
|
6871
6871
|
return '<div class="aspect-row">\n <span class="wheel-badge '.concat(t3, '" style="font-size:9px">').concat(Q(t3 === "inner" ? _2 : v2), '</span>\n <span class="aspect-other">').concat(Q(Z(e7.name))).concat(r3, '</span>\n <span class="aspect-meta">').concat(Q(n3), "</span>\n </div>");
|
|
6872
|
-
}).join(""), b2 = rv ? '<button class="ask-claude-btn" id="bi-ask-claude-sign-btn">\u2728
|
|
6872
|
+
}).join(""), b2 = rv ? '<button class="ask-claude-btn" id="bi-ask-claude-sign-btn">\u2728 Interpret this</button>' : "";
|
|
6873
6873
|
l2.innerHTML = '\n <div class="info-header">\n <span class="info-glyph" style="color:'.concat(G_(t2), ';font-family:serif;font-weight:700;font-size:16px">').concat(Q(d2), '</span>\n <div class="info-title">\n <div><strong>').concat(Q(u2), '</strong></div>\n <div class="info-subtitle"><em>').concat(Q(Z(f2)), " \xB7 ").concat(Q(Z(p2)), '</em></div>\n </div>\n <button class="info-close" id="bi-info-close-btn">\u2715</button>\n </div>\n <div class="aspects-title" style="margin-top:6px">').concat(Q(_2), " planets in ").concat(Q(u2), '</div>\n <div class="aspects-list">').concat(y2(h2, "inner"), '</div>\n <div class="aspects-title" style="margin-top:8px">').concat(Q(v2), " planets currently in ").concat(Q(u2), '</div>\n <div class="aspects-list">').concat(y2(g2, "outer"), "</div>\n ").concat(b2, "\n "), l2.classList.add("open"), l2.scrollIntoView({ behavior: "smooth", block: "nearest" }), (s2 = document.getElementById("bi-info-close-btn")) == null || s2.addEventListener("click", () => {
|
|
6874
6874
|
xv(), Ov();
|
|
6875
6875
|
}), (c2 = document.getElementById("bi-ask-claude-sign-btn")) == null || c2.addEventListener("click", () => {
|
|
@@ -6882,8 +6882,8 @@ function yv(e5, t2, n2, r2, i2, a2, o2) {
|
|
|
6882
6882
|
var t3;
|
|
6883
6883
|
return { name: e7.name, position: J_(e7.longitude), retrograde: (t3 = e7.retrograde) == null ? false : t3 };
|
|
6884
6884
|
}) } }).then(() => {
|
|
6885
|
-
e6.textContent = "\u2713 Sent
|
|
6886
|
-
e6.textContent = "\u2728
|
|
6885
|
+
e6.textContent = "\u2713 Sent", e6.classList.remove("sending"), e6.classList.add("sent"), setTimeout(() => {
|
|
6886
|
+
e6.textContent = "\u2728 Interpret this", e6.classList.remove("sent"), e6.disabled = false;
|
|
6887
6887
|
}, 2500);
|
|
6888
6888
|
}).catch(() => {
|
|
6889
6889
|
e6.textContent = "\u26A0 Failed \u2014 tap to retry", e6.classList.remove("sending"), e6.classList.add("error"), e6.disabled = false;
|
|
@@ -6920,7 +6920,7 @@ function Sv(e5, t2, n2, r2, i2, a2, o2) {
|
|
|
6920
6920
|
var t3, r3, a3, o3, s3, c3, l3;
|
|
6921
6921
|
let u3 = n2 === "inner" ? e6.planet2 : e6.planet1, d3 = (t3 = P_[u3.toLowerCase()]) == null ? u3 : t3, f3 = (r3 = (a3 = L_[(o3 = (s3 = e6.type) == null ? void 0 : s3.toLowerCase()) == null ? "" : o3]) == null ? e6.type : a3) == null ? "\u2014" : r3, p3 = R_((c3 = (l3 = e6.type) == null ? void 0 : l3.toLowerCase()) == null ? "" : c3), m3 = "".concat(e6.orb.toFixed(1), "\xB0"), h3 = i2 === "transit" ? e6.applying ? "\u2197" : "\u2198" : e6.orb <= 1 ? "exact" : e6.orb <= 3 ? "tight" : "wide";
|
|
6922
6922
|
return '<div class="aspect-row">\n <span class="aspect-dot" style="background:'.concat(p3, '"></span>\n <span class="aspect-sym" style="color:').concat(p3, '">').concat(f3, '</span>\n <span class="aspect-other">').concat(Q(d3), " ").concat(Q(Z(u3)), '</span>\n <span class="aspect-meta">').concat(m3, " ").concat(h3, "</span>\n </div>");
|
|
6923
|
-
}).join("") : '<div class="no-aspects">No cross-aspects within orb</div>', b2 = (l2 = I_[Math.floor((t2.longitude % 360 + 360) % 360 / 30)]) == null ? "Unknown" : l2, x2 = rv ? '<button class="ask-claude-btn" id="bi-ask-claude-planet-btn">\u2728
|
|
6923
|
+
}).join("") : '<div class="no-aspects">No cross-aspects within orb</div>', b2 = (l2 = I_[Math.floor((t2.longitude % 360 + 360) % 360 / 30)]) == null ? "Unknown" : l2, x2 = rv ? '<button class="ask-claude-btn" id="bi-ask-claude-planet-btn">\u2728 Interpret this</button>' : "";
|
|
6924
6924
|
f2.innerHTML = '\n <div class="info-header">\n <span class="info-glyph">'.concat(Q(p2), '</span>\n <div class="info-title">\n <div style="display:flex;align-items:center;gap:6px;flex-wrap:wrap;">\n <strong>').concat(Q(Z(t2.name)), "</strong>\n ").concat(t2.retrograde ? "<span style='color:#e05252'>\u211E</span>" : "", "\n ").concat(h2 ? '<span class="dignity-badge '.concat(h2.cssClass, '">').concat(h2.emoji, " ").concat(Q(h2.label), "</span>") : "", '\n <span class="wheel-badge ').concat(_2, '">').concat(Q(g2), '</span>\n </div>\n <div class="info-subtitle">').concat(Q(m2), " ").concat(Q(J_(t2.longitude))).concat(t2.house ? " \xB7 House ".concat(t2.house) : "", '</div>\n </div>\n <button class="info-close" id="bi-info-close-btn">\u2715</button>\n </div>\n <div class="aspects-title">Cross-Aspects</div>\n <div class="aspects-list">').concat(y2, "</div>\n ").concat(x2, "\n "), f2.classList.add("open"), f2.scrollIntoView({ behavior: "smooth", block: "nearest" }), (u2 = document.getElementById("bi-info-close-btn")) == null || u2.addEventListener("click", () => {
|
|
6925
6925
|
xv(), Ov();
|
|
6926
6926
|
}), (d2 = document.getElementById("bi-ask-claude-planet-btn")) == null || d2.addEventListener("click", () => {
|
|
@@ -6928,8 +6928,8 @@ function Sv(e5, t2, n2, r2, i2, a2, o2) {
|
|
|
6928
6928
|
if (!rv) return;
|
|
6929
6929
|
let a3 = document.getElementById("bi-ask-claude-planet-btn");
|
|
6930
6930
|
!a3 || a3.disabled || (a3.disabled = true, a3.textContent = "\u23F3 Sending\u2026", a3.classList.add("sending"), rv({ type: "planet", data: { planet_name: t2.name, wheel: n2, longitude: t2.longitude, sign: b2, position: "".concat(Math.floor(t2.longitude % 30), "\xB0 ").concat(b2), house: (e6 = t2.house) == null ? null : e6, retrograde: (r3 = t2.retrograde) == null ? false : r3, mode: i2, cross_aspects: v2.map((e7) => ({ type: e7.type, partner: n2 === "inner" ? e7.planet2 : e7.planet1, orb: e7.orb, applying: e7.applying, orb_label: i2 === "transit" ? e7.applying ? "applying" : "separating" : e7.orb <= 1 ? "exact" : e7.orb <= 3 ? "tight" : "wide" })) } }).then(() => {
|
|
6931
|
-
a3.textContent = "\u2713 Sent
|
|
6932
|
-
a3.textContent = "\u2728
|
|
6931
|
+
a3.textContent = "\u2713 Sent", a3.classList.remove("sending"), a3.classList.add("sent"), setTimeout(() => {
|
|
6932
|
+
a3.textContent = "\u2728 Interpret this", a3.classList.remove("sent"), a3.disabled = false;
|
|
6933
6933
|
}, 2500);
|
|
6934
6934
|
}).catch(() => {
|
|
6935
6935
|
a3.textContent = "\u26A0 Failed \u2014 tap to retry", a3.classList.remove("sending"), a3.classList.add("error"), a3.disabled = false;
|
|
@@ -6938,15 +6938,15 @@ function Sv(e5, t2, n2, r2, i2, a2, o2) {
|
|
|
6938
6938
|
}
|
|
6939
6939
|
function Cv(e5, t2, n2, r2, i2) {
|
|
6940
6940
|
var a2, o2, s2, c2, l2, u2, d2, f2, p2;
|
|
6941
|
-
let m2 = bv(), h2 = (a2 = P_[t2.planet1.toLowerCase()]) == null ? "\u2605" : a2, g2 = (o2 = P_[t2.planet2.toLowerCase()]) == null ? "\u2605" : o2, _2 = (s2 = L_[(c2 = (l2 = t2.type) == null ? void 0 : l2.toLowerCase()) == null ? "" : c2]) == null ? t2.type : s2, v2 = R_((u2 = (d2 = t2.type) == null ? void 0 : d2.toLowerCase()) == null ? "" : u2), y2 = r2 ? "".concat(r2, "'s ").concat(Z(t2.planet1)) : Z(t2.planet1), b2 = n2 === "transit" ? "Tr. ".concat(Z(t2.planet2)) : i2 ? "".concat(i2, "'s ").concat(Z(t2.planet2)) : Z(t2.planet2), x2 = n2 === "transit" ? t2.applying ? "\u2197 Applying" : "\u2198 Separating" : t2.orb <= 1 ? "Exact" : t2.orb <= 3 ? "Tight" : "Wide", S2 = rv ? '<button class="ask-claude-btn" id="bi-ask-claude-asp-btn">\u2728
|
|
6941
|
+
let m2 = bv(), h2 = (a2 = P_[t2.planet1.toLowerCase()]) == null ? "\u2605" : a2, g2 = (o2 = P_[t2.planet2.toLowerCase()]) == null ? "\u2605" : o2, _2 = (s2 = L_[(c2 = (l2 = t2.type) == null ? void 0 : l2.toLowerCase()) == null ? "" : c2]) == null ? t2.type : s2, v2 = R_((u2 = (d2 = t2.type) == null ? void 0 : d2.toLowerCase()) == null ? "" : u2), y2 = r2 ? "".concat(r2, "'s ").concat(Z(t2.planet1)) : Z(t2.planet1), b2 = n2 === "transit" ? "Tr. ".concat(Z(t2.planet2)) : i2 ? "".concat(i2, "'s ").concat(Z(t2.planet2)) : Z(t2.planet2), x2 = n2 === "transit" ? t2.applying ? "\u2197 Applying" : "\u2198 Separating" : t2.orb <= 1 ? "Exact" : t2.orb <= 3 ? "Tight" : "Wide", S2 = rv ? '<button class="ask-claude-btn" id="bi-ask-claude-asp-btn">\u2728 Interpret this</button>' : "";
|
|
6942
6942
|
m2.innerHTML = '\n <div class="info-header">\n <span class="info-glyph" style="color:'.concat(v2, '">').concat(Q(String(_2)), '</span>\n <div class="info-title">\n <div style="display:flex;align-items:center;gap:5px;flex-wrap:wrap;">\n <strong>').concat(Q(h2), " ").concat(Q(y2), '</strong>\n <span style="color:').concat(v2, '">').concat(Q(String(_2)), "</span>\n <strong>").concat(Q(g2), " ").concat(Q(b2), '</strong>\n </div>\n <div class="info-subtitle">').concat(t2.orb.toFixed(1), "\xB0 orb \xB7 ").concat(Q(x2), '</div>\n </div>\n <button class="info-close" id="bi-info-close-btn">\u2715</button>\n </div>\n <div style="display:flex;gap:6px;margin-bottom:10px;">\n <span class="wheel-badge inner">Inner \xB7 ').concat(Q(y2), '</span>\n <span class="wheel-badge outer">Outer \xB7 ').concat(Q(b2), "</span>\n </div>\n ").concat(S2, "\n "), m2.classList.add("open"), m2.scrollIntoView({ behavior: "smooth", block: "nearest" }), (f2 = document.getElementById("bi-info-close-btn")) == null || f2.addEventListener("click", () => {
|
|
6943
6943
|
xv(), Ov();
|
|
6944
6944
|
}), (p2 = document.getElementById("bi-ask-claude-asp-btn")) == null || p2.addEventListener("click", () => {
|
|
6945
6945
|
if (!rv) return;
|
|
6946
6946
|
let e6 = document.getElementById("bi-ask-claude-asp-btn");
|
|
6947
6947
|
!e6 || e6.disabled || (e6.disabled = true, e6.textContent = "\u23F3 Sending\u2026", e6.classList.add("sending"), rv({ type: "cross_aspect", data: { planet1: t2.planet1, wheel1: t2.wheel1, planet2: t2.planet2, wheel2: t2.wheel2, aspect_type: t2.type, orb: t2.orb, applying: t2.applying, mode: n2 } }).then(() => {
|
|
6948
|
-
e6.textContent = "\u2713 Sent
|
|
6949
|
-
e6.textContent = "\u2728
|
|
6948
|
+
e6.textContent = "\u2713 Sent", e6.classList.remove("sending"), e6.classList.add("sent"), setTimeout(() => {
|
|
6949
|
+
e6.textContent = "\u2728 Interpret this", e6.classList.remove("sent"), e6.disabled = false;
|
|
6950
6950
|
}, 2500);
|
|
6951
6951
|
}).catch(() => {
|
|
6952
6952
|
e6.textContent = "\u26A0 Failed \u2014 tap to retry", e6.classList.remove("sending"), e6.classList.add("error"), e6.disabled = false;
|
|
@@ -7349,7 +7349,28 @@ function Wv(e5) {
|
|
|
7349
7349
|
let t2 = e5.filter((e6) => e6.items.length > 0).map((e6) => '<div class="legend-group"><span class="legend-group-title">'.concat(Hv(e6.title), "</span>") + e6.items.map((e7) => '<span class="legend-item"><span class="legend-glyph">'.concat(Hv(e7.glyph), "</span>").concat(Hv(e7.label), "</span>")).join("") + "</div>").join("");
|
|
7350
7350
|
return t2 ? '<details class="glyph-legend"><summary><span class="legend-spark">\u2726</span> Legend</summary><div class="legend-body">'.concat(t2, "</div></details>") : "";
|
|
7351
7351
|
}
|
|
7352
|
-
var Gv =
|
|
7352
|
+
var Gv = /^(\d{4})-(\d{2})-(\d{2})[T ](\d{2}):(\d{2})(?::(\d{2}))?(?:\.\d+)?$/;
|
|
7353
|
+
function Kv(e5, t2) {
|
|
7354
|
+
if (!e5) return null;
|
|
7355
|
+
let n2 = Gv.exec(e5.trim());
|
|
7356
|
+
if (n2) {
|
|
7357
|
+
let [, e6, t3, r3, i2, a2, o2] = n2, s2 = new Date(Date.UTC(+e6, t3 - 1, +r3, +i2, +a2, o2 ? +o2 : 0));
|
|
7358
|
+
return isNaN(s2.getTime()) ? null : { date: s2, timeZone: "UTC" };
|
|
7359
|
+
}
|
|
7360
|
+
let r2 = new Date(e5);
|
|
7361
|
+
return isNaN(r2.getTime()) ? null : { date: r2, timeZone: t2 || "UTC" };
|
|
7362
|
+
}
|
|
7363
|
+
function qv(e5) {
|
|
7364
|
+
var t2;
|
|
7365
|
+
if (!e5) return "";
|
|
7366
|
+
let n2 = [], r2 = (t2 = e5.location) == null ? void 0 : t2.trim();
|
|
7367
|
+
if (r2 ? n2.push(r2) : typeof e5.latitude == "number" && typeof e5.longitude == "number" && n2.push("".concat(e5.latitude.toFixed(2), ", ").concat(e5.longitude.toFixed(2))), e5.datetime) {
|
|
7368
|
+
let t3 = /^\d{4}-\d{2}-\d{2}/.test(e5.datetime.trim()) ? Kv(e5.datetime, e5.timezone) : null;
|
|
7369
|
+
t3 ? n2.push(t3.date.toLocaleString("en-US", { timeZone: t3.timeZone, day: "numeric", month: "short", year: "numeric", hour: "numeric", minute: "2-digit" })) : n2.push(e5.datetime);
|
|
7370
|
+
}
|
|
7371
|
+
return n2.join(" \xB7 ");
|
|
7372
|
+
}
|
|
7373
|
+
var Jv = class e4 {
|
|
7353
7374
|
constructor(t2) {
|
|
7354
7375
|
var n2, r2, i2, a2, s2, c2;
|
|
7355
7376
|
o(this, "config", void 0), o(this, "params", void 0), o(this, "dateInput", void 0), o(this, "timeInput", void 0), o(this, "refreshBtn", void 0), o(this, "locInput", void 0), o(this, "locDropdown", void 0), o(this, "summaryBar", void 0), o(this, "extraToggleInput", void 0), o(this, "searchTimeout", null), o(this, "searchVersion", 0), o(this, "isSearching", false), o(this, "suggestions", []), o(this, "activeIndex", -1), o(this, "selecting", false), o(this, "listboxId", "loc-listbox-".concat(e4.comboSeq++)), this.config = t2, this.params = { date: ((n2 = t2.initialParams) == null ? void 0 : n2.date) || this.getTodayDate(), time: ((r2 = t2.initialParams) == null ? void 0 : r2.time) || "12:00", latitude: ((i2 = t2.initialParams) == null ? void 0 : i2.latitude) || null, longitude: ((a2 = t2.initialParams) == null ? void 0 : a2.longitude) || null, timezone: ((s2 = t2.initialParams) == null ? void 0 : s2.timezone) || null, locationName: ((c2 = t2.initialParams) == null ? void 0 : c2.locationName) || null }, this.render();
|
|
@@ -7529,14 +7550,14 @@ var Gv = class e4 {
|
|
|
7529
7550
|
return e5.replace(/&/g, "&").replace(/</g, "<").replace(/>/g, ">").replace(/"/g, """);
|
|
7530
7551
|
}
|
|
7531
7552
|
};
|
|
7532
|
-
o(
|
|
7533
|
-
var
|
|
7534
|
-
function
|
|
7553
|
+
o(Jv, "comboSeq", 0);
|
|
7554
|
+
var Yv = { "chart-wheel": { stripIcon: "\u2726", stripTitle: "About the Natal Chart", stripHints: ["Click any <strong>planet</strong> for a deep placement reading", "Click any <strong>aspect line</strong> for its dynamic interpretation", "Click any <strong>house cusp</strong> for house themes", "Use the <strong>date controls</strong> to move through time"], modalText: "This wheel is an exact celestial snapshot of the sky at a given moment and place \u2014 every planet, house, and aspect line is clickable." }, "bi-wheel": { stripIcon: "\u2295", stripTitle: "About the Bi-Wheel", stripHints: ["Click any <strong>inner planet</strong> for natal placement depth", "Click any <strong>outer planet</strong> for transit or synastry meaning", "Click a <strong>cross-aspect line</strong> for inter-chart dynamics", "Use the <strong>date controls</strong> to advance transits"], modalText: "Two charts are layered here \u2014 the inner wheel is the natal chart; the outer ring shows the second chart (transits or another person's planets)." }, bodygraph: { stripIcon: "\u25C8", stripTitle: "About the Bodygraph", stripHints: ["Click any <strong>center</strong> (defined or undefined) for its meaning", "Click any <strong>channel</strong> to explore its life theme", "Click any <strong>gate number</strong> for its I Ching hexagram reading", "Click a <strong>planet row</strong> in the sidebar for its HD role"], modalText: "The bodygraph is a living map of the energy centres, channels, and gates that define a Human Design chart." }, "vedic-chart": { stripIcon: "\u{1F549}", stripTitle: "About the Jyotish Chart", stripHints: ["Click any <strong>rashi cell</strong> for its themes and any planets placed there", "The <strong>diagonal mark</strong> shows the Lagna (Ascendant) rashi", "Use the <strong>action bar</strong> for a full chart interpretation", "Click <strong>Moon & Nakshatra</strong> for lunar mansion detail"], modalText: "This is a Vedic birth chart rendered as a South Indian Rashi grid \u2014 sidereal planetary placements by fixed sign." }, "transit-timeline": { stripIcon: "\u2604", stripTitle: "About the Transit Timeline", stripHints: ["Each entry is an <strong>exact transit hit</strong> \u2014 a transiting planet contacting a natal point", "Events are <strong>grouped by month</strong> in chronological order", "The <strong>\u211E marker</strong> flags a retrograde crossing", "Click any transit for a focused <strong>interpretation</strong>"], modalText: "This timeline lists upcoming transits to the natal chart \u2014 the exact dates outer-planet energies activate each placement." }, "moon-phase": { stripIcon: "\u263E", stripTitle: "About the Moon Phase Dial", stripHints: ["Click the <strong>Moon</strong> for its phase interpretation", "Click the <strong>Void-of-Course</strong> card when the Moon is VOC", "Use the <strong>date control</strong> to move the sky to any moment"], modalText: "The dial shows the Moon's live illumination, phase, sign, and void-of-course status for the selected moment." }, bazi: { stripIcon: "\u56DB", stripTitle: "About the BaZi Chart", stripHints: ["Click any <strong>pillar</strong> (Year, Month, Day, Hour) for its interpretation", "The <strong>Day Master</strong> is the core identity element", "The <strong>Wu Xing bar</strong> shows the Five Element balance"], modalText: "This BaZi (Four Pillars of Destiny) chart maps the Heavenly Stems and Earthly Branches present at a given moment of birth." } }, Xv = '\n .oe-welcome-backdrop {\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background: oklch(0% 0 0 / 0.55);\n backdrop-filter: blur(8px);\n -webkit-backdrop-filter: blur(8px);\n z-index: 9999;\n display: flex;\n align-items: center;\n justify-content: center;\n animation: oe-fade-in 0.4s ease both;\n font-family: system-ui, sans-serif;\n }\n\n .oe-welcome-modal {\n /* Themed, not hardcoded: the title/text/hints below all resolve through\n var(--text\u2026), so a fixed dark surface here meant that once the light\n palette became reachable the modal rendered near-black text on a\n near-black card \u2014 1.09:1, effectively invisible. The fallback is the\n previous literal, and every app\'s dark --surface is oklch(11-12%), so\n dark rendering is unchanged. */\n background: var(--surface, oklch(11% 0.010 265));\n border: 1px solid var(--gold-glow, oklch(72% 0.12 80 / 0.20));\n border-radius: 16px;\n padding: 32px;\n width: 90%;\n max-width: 440px;\n box-shadow: 0 20px 40px oklch(0% 0 0 / 0.55), inset 0 1px 0 oklch(100% 0 0 / 0.06);\n animation: oe-modal-in 0.5s cubic-bezier(0.22, 1, 0.36, 1) both;\n display: flex;\n flex-direction: column;\n gap: 20px;\n }\n\n @keyframes oe-fade-in {\n from { opacity: 0; }\n to { opacity: 1; }\n }\n\n @keyframes oe-modal-in {\n from { opacity: 0; transform: scale(0.95) translateY(10px); }\n to { opacity: 1; transform: scale(1) translateY(0); }\n }\n\n .oe-welcome-header {\n display: flex;\n align-items: center;\n gap: 12px;\n margin-bottom: 4px;\n }\n\n .oe-welcome-icon {\n font-size: 28px;\n color: var(--gold, oklch(72% 0.12 80));\n line-height: 1;\n text-shadow: 0 0 10px var(--gold-glow, oklch(72% 0.12 80 / 0.30));\n }\n\n .oe-welcome-title {\n font-size: 20px;\n font-weight: 600;\n color: var(--text, oklch(92% 0.006 265));\n margin: 0;\n letter-spacing: 0.02em;\n }\n\n .oe-welcome-text {\n font-size: 14.5px;\n line-height: 1.5;\n color: var(--text-secondary, oklch(68% 0.008 265));\n margin: 0;\n }\n\n .oe-welcome-hints {\n display: flex;\n flex-direction: column;\n gap: 12px;\n margin: 8px 0 12px 0;\n padding: 0;\n list-style: none;\n }\n\n .oe-welcome-hints li {\n font-size: 13.5px;\n line-height: 1.4;\n color: var(--text-secondary, oklch(68% 0.008 265));\n display: flex;\n align-items: flex-start;\n gap: 10px;\n opacity: 0;\n animation: oe-fade-in 0.4s ease forwards;\n }\n\n /* Stagger the hints */\n .oe-welcome-hints li:nth-child(1) { animation-delay: 0.15s; }\n .oe-welcome-hints li:nth-child(2) { animation-delay: 0.25s; }\n .oe-welcome-hints li:nth-child(3) { animation-delay: 0.35s; }\n .oe-welcome-hints li:nth-child(4) { animation-delay: 0.45s; }\n\n .oe-welcome-hints li::before {\n content: "\u2726";\n color: var(--gold-dim, oklch(52% 0.06 80));\n font-size: 12px;\n padding-top: 2px;\n }\n\n .oe-welcome-hints strong {\n color: var(--text, oklch(92% 0.006 265));\n font-weight: 600;\n }\n\n .oe-welcome-button {\n align-self: flex-end;\n background: var(--gold-subtle, oklch(72% 0.12 80 / 0.10));\n color: var(--gold, oklch(72% 0.12 80));\n border: 1px solid var(--gold-glow, oklch(72% 0.12 80 / 0.20));\n padding: 10px 24px;\n border-radius: 8px;\n font-size: 14px;\n font-weight: 600;\n cursor: pointer;\n transition: background 0.2s ease, border-color 0.2s ease;\n margin-top: 4px;\n }\n\n .oe-welcome-button:hover {\n background: oklch(72% 0.12 80 / 0.18);\n border-color: oklch(72% 0.12 80 / 0.40);\n }\n\n .oe-welcome-button:focus-visible {\n outline: 2px solid var(--gold, oklch(72% 0.12 80));\n outline-offset: 2px;\n }\n\n .oe-welcome-backdrop.is-dismissing {\n animation: oe-fade-out 0.3s ease forwards;\n }\n\n .oe-welcome-backdrop.is-dismissing .oe-welcome-modal {\n animation: oe-modal-out 0.3s cubic-bezier(0.22, 1, 0.36, 1) forwards;\n }\n\n @keyframes oe-fade-out {\n to { opacity: 0; }\n }\n\n @keyframes oe-modal-out {\n to { opacity: 0; transform: scale(0.95) translateY(10px); }\n }\n';
|
|
7555
|
+
function Zv() {
|
|
7535
7556
|
if (document.getElementById("oe-first-run-styles")) return;
|
|
7536
7557
|
let e5 = document.createElement("style");
|
|
7537
|
-
e5.id = "oe-first-run-styles", e5.textContent =
|
|
7558
|
+
e5.id = "oe-first-run-styles", e5.textContent = Xv, document.head.appendChild(e5);
|
|
7538
7559
|
}
|
|
7539
|
-
function
|
|
7560
|
+
function Qv(e5) {
|
|
7540
7561
|
let t2 = document.activeElement, n2 = document.createElement("div");
|
|
7541
7562
|
n2.className = "oe-welcome-backdrop";
|
|
7542
7563
|
let r2 = document.createElement("div");
|
|
@@ -7554,34 +7575,34 @@ function Yv(e5) {
|
|
|
7554
7575
|
e6.key === "Escape" && (e6.preventDefault(), o2()), e6.key === "Tab" && (e6.preventDefault(), a2.focus());
|
|
7555
7576
|
}), requestAnimationFrame(() => a2.focus()), n2;
|
|
7556
7577
|
}
|
|
7557
|
-
function
|
|
7558
|
-
|
|
7559
|
-
let t2 = Yv
|
|
7578
|
+
function $v(e5) {
|
|
7579
|
+
Zv();
|
|
7580
|
+
let t2 = Qv(Yv[e5]);
|
|
7560
7581
|
document.body.appendChild(t2);
|
|
7561
7582
|
}
|
|
7562
|
-
var
|
|
7563
|
-
function
|
|
7583
|
+
var ey = "\n .oe-info-button {\n position: fixed;\n top: 12px;\n right: 12px;\n width: 30px;\n height: 30px;\n border-radius: 50%;\n background: var(--surface-2, oklch(16% 0.010 265));\n border: 1px solid var(--border-strong, oklch(30% 0.010 265));\n color: var(--text-secondary, oklch(68% 0.008 265));\n font: 600 14px/1 Georgia, serif;\n font-style: italic;\n display: flex;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n z-index: 9998;\n transition: all 150ms ease;\n }\n\n .oe-info-button:hover {\n background: var(--surface, oklch(11% 0.010 265));\n border-color: var(--gold-dim, oklch(52% 0.06 80));\n color: var(--gold, oklch(72% 0.12 80));\n }\n\n .oe-info-button:focus-visible {\n outline: 2px solid var(--gold, oklch(72% 0.12 80));\n outline-offset: 2px;\n }\n";
|
|
7584
|
+
function ty() {
|
|
7564
7585
|
if (document.getElementById("oe-info-button-styles")) return;
|
|
7565
7586
|
let e5 = document.createElement("style");
|
|
7566
|
-
e5.id = "oe-info-button-styles", e5.textContent =
|
|
7587
|
+
e5.id = "oe-info-button-styles", e5.textContent = ey, document.head.appendChild(e5);
|
|
7567
7588
|
}
|
|
7568
|
-
function
|
|
7589
|
+
function ny(e5) {
|
|
7569
7590
|
if (document.getElementById("oe-info-button")) return;
|
|
7570
|
-
|
|
7591
|
+
ty();
|
|
7571
7592
|
let t2 = document.createElement("button");
|
|
7572
|
-
t2.id = "oe-info-button", t2.className = "oe-info-button", t2.setAttribute("aria-label", "About this chart"), t2.title = "About this chart", t2.textContent = "i", t2.addEventListener("click", () =>
|
|
7593
|
+
t2.id = "oe-info-button", t2.className = "oe-info-button", t2.setAttribute("aria-label", "About this chart"), t2.title = "About this chart", t2.textContent = "i", t2.addEventListener("click", () => $v(e5)), document.body.appendChild(t2);
|
|
7573
7594
|
}
|
|
7574
|
-
function
|
|
7595
|
+
function ry(e5) {
|
|
7575
7596
|
return e5.replace(/&/g, "&").replace(/</g, "<").replace(/>/g, ">").replace(/"/g, """);
|
|
7576
7597
|
}
|
|
7577
|
-
function
|
|
7578
|
-
let { container: t2, message: n2, onRetry: r2, retryLabel: i2 = "\u21BA Try again" } = e5, a2 = r2 ? '<button class="error-retry-btn" type="button">'.concat(
|
|
7579
|
-
if (t2.innerHTML = '<div class="error-state" role="alert"><div class="error-icon" aria-hidden="true">\u26A0\uFE0F</div><p class="error-msg">'.concat(
|
|
7598
|
+
function iy(e5) {
|
|
7599
|
+
let { container: t2, message: n2, onRetry: r2, retryLabel: i2 = "\u21BA Try again" } = e5, a2 = r2 ? '<button class="error-retry-btn" type="button">'.concat(ry(i2), "</button>") : "";
|
|
7600
|
+
if (t2.innerHTML = '<div class="error-state" role="alert"><div class="error-icon" aria-hidden="true">\u26A0\uFE0F</div><p class="error-msg">'.concat(ry(n2), "</p>") + a2 + "</div>", t2.removeAttribute("hidden"), r2) {
|
|
7580
7601
|
var o2;
|
|
7581
7602
|
(o2 = t2.querySelector(".error-retry-btn")) == null || o2.addEventListener("click", r2);
|
|
7582
7603
|
}
|
|
7583
7604
|
}
|
|
7584
|
-
function
|
|
7605
|
+
function ay(e5) {
|
|
7585
7606
|
var t2;
|
|
7586
7607
|
if (!e5) return null;
|
|
7587
7608
|
if (e5.structuredContent != null && typeof e5.structuredContent == "object") return e5.structuredContent;
|
|
@@ -7594,7 +7615,7 @@ function ny(e5) {
|
|
|
7594
7615
|
}
|
|
7595
7616
|
return null;
|
|
7596
7617
|
}
|
|
7597
|
-
function
|
|
7618
|
+
function oy(e5, t2, n2 = []) {
|
|
7598
7619
|
var r2, i2;
|
|
7599
7620
|
if (!t2 || t2.querySelector("#btn-fullscreen")) return;
|
|
7600
7621
|
let a2 = document.createElement("button");
|
|
@@ -7670,21 +7691,21 @@ function ry(e5, t2, n2 = []) {
|
|
|
7670
7691
|
let e6 = document.getElementById("fs-hint-banner");
|
|
7671
7692
|
e6 && e6.remove();
|
|
7672
7693
|
let t3 = document.createElement("div");
|
|
7673
|
-
t3.id = "fs-hint-banner", Object.assign(t3.style, { position: "fixed", top: "12px", left: "50%", transform: "translateX(-50%)", background: "oklch(14% 0.012 265 / 0.90)", backdropFilter: "blur(12px)", WebkitBackdropFilter: "blur(12px)", border: "1px solid oklch(72% 0.12 80 / 0.3)", borderRadius: "20px", padding: "6px 16px", fontSize: "11px", fontWeight: "600", color: "oklch(80% 0.08 80)", letterSpacing: "0.04em", zIndex: "9999", pointerEvents: "none", opacity: "0", transition: "opacity 300ms ease", whiteSpace: "nowrap" }), t3.textContent = "Esc \u2014 exit fullscreen & return to
|
|
7694
|
+
t3.id = "fs-hint-banner", Object.assign(t3.style, { position: "fixed", top: "12px", left: "50%", transform: "translateX(-50%)", background: "oklch(14% 0.012 265 / 0.90)", backdropFilter: "blur(12px)", WebkitBackdropFilter: "blur(12px)", border: "1px solid oklch(72% 0.12 80 / 0.3)", borderRadius: "20px", padding: "6px 16px", fontSize: "11px", fontWeight: "600", color: "oklch(80% 0.08 80)", letterSpacing: "0.04em", zIndex: "9999", pointerEvents: "none", opacity: "0", transition: "opacity 300ms ease", whiteSpace: "nowrap" }), t3.textContent = "Esc \u2014 exit fullscreen & return to chat", document.body.appendChild(t3), requestAnimationFrame(() => {
|
|
7674
7695
|
t3.style.opacity = "1";
|
|
7675
7696
|
}), setTimeout(() => {
|
|
7676
7697
|
t3.style.opacity = "0", setTimeout(() => t3.remove(), 350);
|
|
7677
7698
|
}, 4e3);
|
|
7678
7699
|
}
|
|
7679
7700
|
}
|
|
7680
|
-
function
|
|
7701
|
+
function sy(e5, t2) {
|
|
7681
7702
|
e5.ontoolcancelled = (e6) => {
|
|
7682
7703
|
var n2, r2, i2;
|
|
7683
7704
|
let a2 = (n2 = e6.reason) == null ? "Tool call was cancelled" : n2;
|
|
7684
|
-
console.warn("[AppChrome] Tool cancelled:", a2), (r2 = t2.statusFn) == null || r2.call(t2, null), !t2.loadingEl.hidden && t2.loadingEl.getAttribute("hidden") === null && (t2.loadingEl.setAttribute("hidden", ""), t2.contentEl.removeAttribute("hidden")), (i2 = t2.paramControls) == null || (i2 = i2.call(t2)) == null || i2.setBusy(false),
|
|
7705
|
+
console.warn("[AppChrome] Tool cancelled:", a2), (r2 = t2.statusFn) == null || r2.call(t2, null), !t2.loadingEl.hidden && t2.loadingEl.getAttribute("hidden") === null && (t2.loadingEl.setAttribute("hidden", ""), t2.contentEl.removeAttribute("hidden")), (i2 = t2.paramControls) == null || (i2 = i2.call(t2)) == null || i2.setBusy(false), cy(a2);
|
|
7685
7706
|
};
|
|
7686
7707
|
}
|
|
7687
|
-
function
|
|
7708
|
+
function cy(e5) {
|
|
7688
7709
|
var t2;
|
|
7689
7710
|
(t2 = document.getElementById("cancel-toast")) == null || t2.remove();
|
|
7690
7711
|
let n2 = document.createElement("div");
|
|
@@ -7692,7 +7713,7 @@ function ay(e5) {
|
|
|
7692
7713
|
n2.classList.remove("visible"), setTimeout(() => n2.remove(), 300);
|
|
7693
7714
|
}, 3e3);
|
|
7694
7715
|
}
|
|
7695
|
-
function
|
|
7716
|
+
function ly(e5) {
|
|
7696
7717
|
var t2;
|
|
7697
7718
|
function n2(e6) {
|
|
7698
7719
|
if (!e6) return;
|
|
@@ -7705,67 +7726,67 @@ function oy(e5) {
|
|
|
7705
7726
|
n2(e6);
|
|
7706
7727
|
});
|
|
7707
7728
|
}
|
|
7708
|
-
var
|
|
7729
|
+
var uy = document.getElementById("chart-container"), dy = document.getElementById("loading-state"), fy = document.getElementById("mode-badge"), py = document.getElementById("chart-status"), my = document.getElementById("aspect-filter"), hy = document.getElementById("chart-provenance"), gy = document.getElementById("bi-patterns-strip"), _y = document.getElementById("param-controls-container"), vy = new r_({ name: "Bi-Wheel Chart Explorer", version: "1.0.0" }), $ = null, yy = null, by = false, xy = false, Sy = "placidus";
|
|
7709
7730
|
m_(() => {
|
|
7710
|
-
$ &&
|
|
7731
|
+
$ && Zy($);
|
|
7711
7732
|
});
|
|
7712
|
-
var
|
|
7713
|
-
function
|
|
7714
|
-
if (
|
|
7733
|
+
var Cy = "true";
|
|
7734
|
+
function wy(e5) {
|
|
7735
|
+
if (py) {
|
|
7715
7736
|
if (!e5) {
|
|
7716
|
-
|
|
7737
|
+
py.classList.remove("visible");
|
|
7717
7738
|
return;
|
|
7718
7739
|
}
|
|
7719
|
-
|
|
7740
|
+
py.textContent = "\xB7 ".concat(e5), py.classList.add("visible");
|
|
7720
7741
|
}
|
|
7721
7742
|
}
|
|
7722
|
-
nv(
|
|
7723
|
-
function
|
|
7724
|
-
|
|
7743
|
+
nv(wy);
|
|
7744
|
+
function Ty() {
|
|
7745
|
+
dy.hidden = false, uy.hidden = true, fy.hidden = true, hy && (hy.hidden = true), gy && (gy.hidden = true, gy.innerHTML = "");
|
|
7725
7746
|
}
|
|
7726
|
-
function
|
|
7727
|
-
|
|
7747
|
+
function Ey() {
|
|
7748
|
+
dy.hidden = true, uy.hidden = false, uy.classList.remove("refreshing"), fy.hidden = false, hy && (hy.hidden = false);
|
|
7728
7749
|
}
|
|
7729
|
-
function
|
|
7730
|
-
if (!$ ||
|
|
7731
|
-
|
|
7750
|
+
function Dy() {
|
|
7751
|
+
if (!$ || uy.hidden) {
|
|
7752
|
+
Ty();
|
|
7732
7753
|
return;
|
|
7733
7754
|
}
|
|
7734
|
-
|
|
7755
|
+
uy.classList.add("refreshing");
|
|
7735
7756
|
}
|
|
7736
|
-
function
|
|
7737
|
-
|
|
7757
|
+
function Oy() {
|
|
7758
|
+
uy.classList.remove("refreshing"), uy.classList.remove("chart-rendered"), uy.offsetWidth, uy.classList.add("chart-rendered");
|
|
7738
7759
|
}
|
|
7739
|
-
function
|
|
7740
|
-
|
|
7760
|
+
function ky(e5, t2) {
|
|
7761
|
+
dy.hidden = true, hy && (hy.hidden = true), iy({ container: uy, message: e5, onRetry: t2 });
|
|
7741
7762
|
}
|
|
7742
|
-
function
|
|
7763
|
+
function Ay(e5) {
|
|
7743
7764
|
return e5.replace(/&/g, "&").replace(/</g, "<").replace(/>/g, ">");
|
|
7744
7765
|
}
|
|
7745
|
-
async function
|
|
7766
|
+
async function jy(e5) {
|
|
7746
7767
|
try {
|
|
7747
|
-
(await
|
|
7768
|
+
(await vy.sendMessage({ role: "user", content: [{ type: "text", text: e5 }] })).isError && console.error("[BiWheel] Host rejected sendMessage");
|
|
7748
7769
|
} catch (e6) {
|
|
7749
7770
|
console.error("[BiWheel] sendMessage failed:", e6);
|
|
7750
7771
|
}
|
|
7751
7772
|
}
|
|
7752
|
-
function
|
|
7753
|
-
let t2 =
|
|
7773
|
+
function My(e5) {
|
|
7774
|
+
let t2 = ay(e5);
|
|
7754
7775
|
return t2 && "inner" in t2 && "outer" in t2 ? t2 : null;
|
|
7755
7776
|
}
|
|
7756
|
-
var
|
|
7757
|
-
function
|
|
7777
|
+
var Ny = [{ label: "Tight", mult: 0.55 }, { label: "Standard", mult: 1 }, { label: "Wide", mult: 1.6 }], Py = true, Fy = 1;
|
|
7778
|
+
function Iy() {
|
|
7758
7779
|
var e5, t2, n2;
|
|
7759
|
-
if (!
|
|
7780
|
+
if (!my) return;
|
|
7760
7781
|
let r2 = (t2 = { synastry: "Synastry \u2192 Natal", transit: "Transit \u2192 Natal", progressed: "Progressions \u2192 Natal", solar_return: "Solar Return \u2192 Natal", lunar_return: "Lunar Return \u2192 Natal", solar_arc: "Solar Arc \u2192 Natal" }[(e5 = $ == null ? void 0 : $.mode) == null ? "synastry" : e5]) == null ? "Cross-Wheel" : t2, i2 = [{ key: "placidus", label: "Placidus" }, { key: "whole_sign", label: "Whole Sign" }, { key: "equal", label: "Equal" }, { key: "koch", label: "Koch" }, { key: "regiomontanus", label: "Regio." }], a2 = (() => {
|
|
7761
7782
|
var e6, t3;
|
|
7762
7783
|
let n3 = /* @__PURE__ */ new Set();
|
|
7763
7784
|
for (let r3 of [...(e6 = $ == null ? void 0 : $.inner) == null ? [] : e6, ...(t3 = $ == null ? void 0 : $.outer) == null ? [] : t3]) r3 && typeof r3 == "object" && "name" in r3 && n3.add(String(r3.name).toLowerCase());
|
|
7764
7785
|
return n3.has("north_node") && n3.has("true_node");
|
|
7765
7786
|
})();
|
|
7766
|
-
X_(
|
|
7767
|
-
let o2 = a2 ? '\n <div class="asp-section">\n <span class="asp-section-label">Nodes</span>\n <button class="orb-preset-btn node-btn'.concat(
|
|
7768
|
-
|
|
7787
|
+
X_(Cy);
|
|
7788
|
+
let o2 = a2 ? '\n <div class="asp-section">\n <span class="asp-section-label">Nodes</span>\n <button class="orb-preset-btn node-btn'.concat(Cy === "mean" ? " active" : "", '" data-node="mean" title="Mean lunar node (averaged orbit)">Mean</button>\n <button class="orb-preset-btn node-btn').concat(Cy === "true" ? " active" : "", '" data-node="true" title="True (osculating) lunar node">True</button>\n </div>') : "";
|
|
7789
|
+
Py = true, my.innerHTML = '\n <div class="asp-panel">\n <div class="asp-section">\n <span class="asp-section-label">Aspects</span>\n <button class="aspect-toggle-btn active" id="aspect-vis-toggle"\n title="Toggle all aspect lines & symbols">\n <span class="toggle-icon">\u2295</span> '.concat(r2, '\n </button>\n </div>\n <div class="asp-section">\n <span class="asp-section-label">Orb</span>\n ').concat(Ny.map((e6) => '<button class="orb-preset-btn'.concat(e6.mult === Fy ? " active" : "", '" data-mult="').concat(e6.mult, '" title="').concat(e6.label, ' orbs">').concat(e6.label, "</button>")).join(""), '\n </div>\n <div class="asp-section">\n <span class="asp-section-label">Houses</span>\n ').concat(i2.map((e6) => '<button class="orb-preset-btn house-btn'.concat(e6.key === Sy ? " active" : "", '" data-hs="').concat(e6.key, '" title="').concat(e6.label, ' houses">').concat(e6.label, "</button>")).join(""), "\n </div>").concat(o2, "\n </div>\n ");
|
|
7769
7790
|
let s2 = [...Q_($ == null ? void 0 : $.inner), ...Q_($ == null ? void 0 : $.outer)], c2 = /* @__PURE__ */ new Set(), l2 = [];
|
|
7770
7791
|
for (let e6 of s2) {
|
|
7771
7792
|
let t3 = e6.name.toLowerCase();
|
|
@@ -7781,96 +7802,96 @@ function Ny() {
|
|
|
7781
7802
|
var t3;
|
|
7782
7803
|
return { glyph: (t3 = L_[e6]) == null ? "" : t3, label: Uv(e6) };
|
|
7783
7804
|
}).filter((e6) => e6.glyph);
|
|
7784
|
-
|
|
7805
|
+
my.insertAdjacentHTML("beforeend", Wv([{ title: "Bodies", items: l2 }, { title: "Aspects", items: u2 }])), my.removeAttribute("hidden");
|
|
7785
7806
|
let d2 = document.getElementById("aspect-vis-toggle");
|
|
7786
7807
|
d2 == null || d2.addEventListener("click", () => {
|
|
7787
|
-
|
|
7788
|
-
}),
|
|
7808
|
+
Py = !Py, kv(Py), d2.classList.toggle("active", Py), d2.querySelector(".toggle-icon").textContent = Py ? "\u2295" : "\u2296";
|
|
7809
|
+
}), my.querySelectorAll(".orb-preset-btn[data-mult]").forEach((e6) => {
|
|
7789
7810
|
e6.addEventListener("click", () => {
|
|
7790
7811
|
var t3;
|
|
7791
7812
|
let n3 = parseFloat((t3 = e6.dataset.mult) == null ? "1" : t3);
|
|
7792
|
-
n3 !==
|
|
7813
|
+
n3 !== Fy && (Fy = n3, my.querySelectorAll(".orb-preset-btn[data-mult]").forEach((e7) => e7.classList.toggle("active", e7.dataset.mult === String(n3))), $ && Ly($, n3));
|
|
7793
7814
|
});
|
|
7794
|
-
}),
|
|
7815
|
+
}), my.querySelectorAll(".house-btn").forEach((e6) => {
|
|
7795
7816
|
e6.addEventListener("click", () => {
|
|
7796
7817
|
var t3;
|
|
7797
7818
|
let n3 = (t3 = e6.dataset.hs) == null ? "placidus" : t3;
|
|
7798
|
-
n3 ===
|
|
7819
|
+
n3 === Sy || !$ || (Sy = n3, my.querySelectorAll(".house-btn").forEach((e7) => e7.classList.toggle("active", e7.dataset.hs === n3)), tb(n3));
|
|
7799
7820
|
});
|
|
7800
|
-
}),
|
|
7821
|
+
}), my.querySelectorAll(".node-btn").forEach((e6) => {
|
|
7801
7822
|
e6.addEventListener("click", () => {
|
|
7802
7823
|
let t3 = e6.dataset.node === "mean" ? "mean" : "true";
|
|
7803
|
-
t3 ===
|
|
7824
|
+
t3 === Cy || !$ || (Cy = t3, X_(t3), my.querySelectorAll(".node-btn").forEach((e7) => e7.classList.toggle("active", e7.dataset.node === t3)), Ly($, Fy));
|
|
7804
7825
|
});
|
|
7805
7826
|
});
|
|
7806
7827
|
}
|
|
7807
|
-
function
|
|
7828
|
+
function Ly(e5, t2) {
|
|
7808
7829
|
var n2, r2, i2, a2;
|
|
7809
7830
|
let o2 = Q_(e5.inner), s2 = Q_(e5.outer), c2 = ev(o2, s2, t2), l2 = { ...e5, cross_aspects: c2 };
|
|
7810
|
-
zv(
|
|
7831
|
+
zv(uy, l2, nb, rb, Ky, Xy()), Py || kv(false);
|
|
7811
7832
|
let u2 = (r2 = (i2 = (a2 = ((n2 = l2.inner_houses) == null ? [] : n2)[0]) == null ? void 0 : a2.cusp_lon) == null ? l2.ascendant : i2) == null ? 0 : r2;
|
|
7812
|
-
|
|
7833
|
+
eb(Nv(c2), o2, s2, u2);
|
|
7813
7834
|
}
|
|
7814
|
-
var
|
|
7815
|
-
function
|
|
7816
|
-
|
|
7835
|
+
var Ry = null;
|
|
7836
|
+
function zy(e5) {
|
|
7837
|
+
Ry = e5, e5 ? uy.setAttribute("data-focus", e5) : uy.removeAttribute("data-focus"), fy.querySelectorAll(".mode-badge-name").forEach((t2) => {
|
|
7817
7838
|
let n2 = t2.dataset.focus;
|
|
7818
7839
|
t2.classList.toggle("focused", n2 === e5);
|
|
7819
|
-
}), $ &&
|
|
7840
|
+
}), $ && Gy($, e5);
|
|
7820
7841
|
}
|
|
7821
|
-
function
|
|
7842
|
+
function By(e5) {
|
|
7822
7843
|
var t2, n2, r2, i2, a2, o2, s2;
|
|
7823
7844
|
let c2 = (t2 = e5.mode) == null ? "synastry" : t2, l2 = (n2 = (r2 = e5._birth_params_inner) == null ? void 0 : r2.location) == null ? "Person 1" : n2, u2 = (i2 = (a2 = e5._birth_params_outer) == null ? void 0 : a2.location) == null ? c2 === "transit" ? "Transits" : "Person 2" : i2;
|
|
7824
|
-
|
|
7845
|
+
Ry = null, uy.removeAttribute("data-focus");
|
|
7825
7846
|
let d2 = "";
|
|
7826
7847
|
if (c2 === "transit" && (o2 = e5._birth_params_outer) != null && o2.datetime) try {
|
|
7827
|
-
let t3 =
|
|
7828
|
-
|
|
7848
|
+
let t3 = Kv(e5._birth_params_outer.datetime, e5._birth_params_outer.timezone);
|
|
7849
|
+
t3 && (d2 = '<span class="mode-badge-date">'.concat(Ay(t3.date.toLocaleDateString("en-US", { month: "short", day: "numeric", year: "numeric", timeZone: t3.timeZone })), "</span>"));
|
|
7829
7850
|
} catch (e6) {
|
|
7830
7851
|
}
|
|
7831
|
-
|
|
7852
|
+
fy.innerHTML = '\n <button class="mode-badge-name inner-name" data-focus="inner" title="Click to focus inner (natal) wheel">\n <span class="mode-badge-dot-inner"></span>'.concat(Ay(l2), '\n </button>\n <button class="mode-badge-swap" title="Toggle focus">\u21C4</button>\n <button class="mode-badge-name outer-name" data-focus="outer" title="Click to focus outer (').concat(c2, ') wheel">\n <span class="mode-badge-dot-outer"></span>').concat(Ay(u2), "\n </button>\n ").concat(d2), fy.querySelectorAll(".mode-badge-name").forEach((e6) => {
|
|
7832
7853
|
e6.addEventListener("click", () => {
|
|
7833
7854
|
let t3 = e6.dataset.focus;
|
|
7834
|
-
|
|
7855
|
+
zy(Ry === t3 ? null : t3);
|
|
7835
7856
|
});
|
|
7836
|
-
}), (s2 =
|
|
7837
|
-
|
|
7857
|
+
}), (s2 = fy.querySelector(".mode-badge-swap")) == null || s2.addEventListener("click", () => {
|
|
7858
|
+
zy(Ry === "inner" ? "outer" : "inner");
|
|
7838
7859
|
});
|
|
7839
7860
|
}
|
|
7840
|
-
var
|
|
7841
|
-
function
|
|
7861
|
+
var Vy = ["Aries", "Taurus", "Gemini", "Cancer", "Leo", "Virgo", "Libra", "Scorpio", "Sagittarius", "Capricorn", "Aquarius", "Pisces"], Hy = { sun: "\u2609", moon: "\u263D", mercury: "\u263F", venus: "\u2640", mars: "\u2642", jupiter: "\u2643", saturn: "\u2644", uranus: "\u2645", neptune: "\u2646", pluto: "\u2647", asc: "AC", mc: "MC" };
|
|
7862
|
+
function Uy(e5, t2) {
|
|
7842
7863
|
var n2, r2;
|
|
7843
7864
|
let i2 = e5.find((e6) => e6.name.toLowerCase() === t2);
|
|
7844
7865
|
if (!i2) return "\u2014";
|
|
7845
7866
|
let a2 = Math.floor((i2.longitude % 360 + 360) % 360 / 30), o2 = Math.floor(i2.longitude % 30);
|
|
7846
|
-
return "".concat((n2 =
|
|
7867
|
+
return "".concat((n2 = Hy[t2]) == null ? t2 : n2, " ").concat(o2, "\xB0 ").concat((r2 = Vy[a2]) == null ? "" : r2);
|
|
7847
7868
|
}
|
|
7848
|
-
function
|
|
7869
|
+
function Wy(e5, t2) {
|
|
7849
7870
|
try {
|
|
7850
|
-
let n2 =
|
|
7851
|
-
if (
|
|
7852
|
-
let
|
|
7853
|
-
return
|
|
7871
|
+
let n2 = Kv(e5, t2);
|
|
7872
|
+
if (!n2) return e5;
|
|
7873
|
+
let { date: r2, timeZone: i2 } = n2;
|
|
7874
|
+
return r2.toLocaleDateString("en-US", { month: "short", day: "numeric", year: "numeric", timeZone: i2 }) + " \xB7 " + r2.toLocaleTimeString("en-US", { hour: "numeric", minute: "2-digit", hour12: true, timeZone: i2 });
|
|
7854
7875
|
} catch (t3) {
|
|
7855
7876
|
return e5;
|
|
7856
7877
|
}
|
|
7857
7878
|
}
|
|
7858
|
-
function
|
|
7879
|
+
function Gy(e5, t2) {
|
|
7859
7880
|
var n2, r2, i2, a2, o2;
|
|
7860
|
-
if (!
|
|
7861
|
-
let s2 = t2 == null ? "inner" : t2, c2 = s2 === "inner" ? e5.inner : e5.outer, l2 = s2 === "inner" ? e5._birth_params_inner : e5._birth_params_outer, u2 = (n2 = e5.mode) == null ? "synastry" : n2, d2 = (r2 = l2 == null ? void 0 : l2.location) == null ? s2 === "inner" ? "Inner chart" : u2 === "transit" ? "Transits" : "Outer chart" : r2, f2 = (i2 = l2 == null ? void 0 : l2.timezone) == null ? null : i2, p2 = l2 != null && l2.datetime ?
|
|
7881
|
+
if (!hy) return;
|
|
7882
|
+
let s2 = t2 == null ? "inner" : t2, c2 = s2 === "inner" ? e5.inner : e5.outer, l2 = s2 === "inner" ? e5._birth_params_inner : e5._birth_params_outer, u2 = (n2 = e5.mode) == null ? "synastry" : n2, d2 = (r2 = l2 == null ? void 0 : l2.location) == null ? s2 === "inner" ? "Inner chart" : u2 === "transit" ? "Transits" : "Outer chart" : r2, f2 = (i2 = l2 == null ? void 0 : l2.timezone) == null ? null : i2, p2 = l2 != null && l2.datetime ? Wy(l2.datetime, f2) : null, m2 = s2 === "inner" ? e5.inner_houses : (a2 = e5.outer_houses) == null ? [] : a2, h2 = (o2 = e5.house_system) == null ? m2.length > 0 ? "Placidus" : null : o2, g2 = Uy(c2, "sun"), _2 = Uy(c2, "moon"), v2 = Uy(c2, "asc");
|
|
7862
7883
|
if (v2 === "AC \u2014" && m2.length > 0) {
|
|
7863
7884
|
let e6 = m2.find((e7) => e7.number === 1);
|
|
7864
7885
|
if (e6) {
|
|
7865
7886
|
var y2;
|
|
7866
7887
|
let t3 = Math.floor((e6.cusp_lon % 360 + 360) % 360 / 30);
|
|
7867
|
-
v2 = "AC ".concat(Math.floor(e6.cusp_lon % 30), "\xB0 ").concat((y2 =
|
|
7888
|
+
v2 = "AC ".concat(Math.floor(e6.cusp_lon % 30), "\xB0 ").concat((y2 = Vy[t3]) == null ? "" : y2);
|
|
7868
7889
|
}
|
|
7869
7890
|
}
|
|
7870
7891
|
let b2 = s2 === "outer" && u2 === "transit" ? "Transit" : s2 === "outer" ? "Synastry" : "Natal";
|
|
7871
|
-
|
|
7892
|
+
hy.innerHTML = '\n <div class="prov-name">'.concat(Ay(d2), '\n <span class="prov-mode-tag">').concat(Ay(b2), '</span>\n </div>\n <div class="prov-trio">\n <span class="prov-planet">').concat(Ay(g2), '</span>\n <span class="prov-sep">\xB7</span>\n <span class="prov-planet">').concat(Ay(_2), '</span>\n <span class="prov-sep">\xB7</span>\n <span class="prov-planet">').concat(Ay(v2), "</span>\n </div>\n ").concat(p2 ? '<div class="prov-meta">'.concat(Ay(p2)).concat(f2 ? ' <span class="prov-tz">'.concat(Ay(f2), "</span>") : "", "</div>") : "", "\n ").concat(h2 ? '<div class="prov-meta">'.concat(Ay(h2), " houses</div>") : "", "\n "), hy.hidden = false;
|
|
7872
7893
|
}
|
|
7873
|
-
async function
|
|
7894
|
+
async function Ky(e5) {
|
|
7874
7895
|
var t2;
|
|
7875
7896
|
let n2 = (t2 = $ == null ? void 0 : $.mode) == null ? "synastry" : t2, r2 = "";
|
|
7876
7897
|
if (e5.type === "planet") {
|
|
@@ -7896,31 +7917,37 @@ async function Uy(e5) {
|
|
|
7896
7917
|
let t3 = e5.data, i3 = (m2 = t3.planets) == null ? [] : m2, a3 = n2 === "transit" ? "natal" : "inner", o3 = n2 === "transit" ? "transit" : "outer", s3 = i3.length > 0 ? i3.map((e6) => "".concat(e6.name, " (").concat(e6.wheel === "inner" ? a3 : o3, ")")).join(", ") : "the involved planets";
|
|
7897
7918
|
r2 = "Interpret the ".concat(String(t3.name), " forming in this ").concat(n2, " bi-wheel involving ").concat(s3, ". ") + (t3.description ? "".concat(String(t3.description), ". ") : "") + "This is a cross-chart pattern \u2014 it spans both wheels, so the meaning lives in the interaction between the ".concat(a3, " foundation and the ").concat(o3, " activation. Give a rich interpretation covering: (1) the core dynamic this pattern creates, (2) how the ").concat(a3, " planets set the stage, (3) what the ").concat(o3, " planets activate or challenge, (4) the psychological theme and practical expression").concat(n2 === "transit" ? ", and (5) timing \u2014 what to do with this energy now" : "", ".");
|
|
7898
7919
|
}
|
|
7899
|
-
|
|
7920
|
+
if (!r2) return;
|
|
7921
|
+
let h2 = qv($ == null ? void 0 : $._birth_params_inner), g2 = qv($ == null ? void 0 : $._birth_params_outer);
|
|
7922
|
+
if (h2 || g2) {
|
|
7923
|
+
let e6 = n2 === "transit" ? "Natal" : "Inner wheel", t3 = n2 === "transit" ? "Transits" : "Outer wheel";
|
|
7924
|
+
r2 = "".concat([h2 ? "".concat(e6, ": ").concat(h2) : "", g2 ? "".concat(t3, ": ").concat(g2) : ""].filter(Boolean).join("\n"), "\n\n").concat(r2);
|
|
7925
|
+
}
|
|
7926
|
+
await jy(r2);
|
|
7900
7927
|
}
|
|
7901
|
-
async function
|
|
7928
|
+
async function qy() {
|
|
7902
7929
|
var e5, t2, n2, r2, i2, a2, o2, s2;
|
|
7903
7930
|
if (!$) return;
|
|
7904
7931
|
let c2 = $, l2 = (e5 = c2.mode) == null ? "synastry" : e5, u2 = String((t2 = (n2 = c2._birth_params_inner) == null ? void 0 : n2.location) == null ? "Person 1" : t2), d2 = l2 === "transit" ? "transits (".concat(String((r2 = (i2 = c2._birth_params_outer) == null ? void 0 : i2.location) == null ? "today" : r2), ")") : String((a2 = (o2 = c2._birth_params_outer) == null ? void 0 : o2.location) == null ? "Person 2" : a2), f2 = ((s2 = c2.cross_aspects) == null ? [] : s2).slice(0, 8).map((e6) => " \u2022 ".concat(e6.planet1, " ").concat(e6.type, " ").concat(e6.planet2, " (").concat(e6.orb.toFixed(1), "\xB0").concat(e6.applying === void 0 ? "" : ", ".concat(e6.applying ? "applying" : "separating"), ")")).join("\n") || " \u2022 No cross-aspects within orb";
|
|
7905
|
-
await
|
|
7932
|
+
await jy(l2 === "transit" ? "Please interpret this transit chart for ".concat(u2, ".\n\nKey transit cross-aspects:\n").concat(f2, "\n\nCover: (1) The most significant active transits and their themes, (2) Timing \u2014 what's applying vs separating, (3) Practical guidance \u2014 what to focus on now, (4) The overall energetic signature of this moment in time.") : "Please interpret this synastry bi-wheel between ".concat(u2, " and ").concat(d2, ".\n\nTop cross-wheel aspects:\n").concat(f2, "\n\nCover: (1) The core relational dynamic and overall compatibility theme, (2) The most significant planet-to-planet contacts and their meaning, (3) Areas of natural ease vs creative tension, (4) How each person experiences the other energetically."));
|
|
7906
7933
|
}
|
|
7907
|
-
async function
|
|
7934
|
+
async function Jy() {
|
|
7908
7935
|
var e5, t2, n2, r2, i2, a2;
|
|
7909
7936
|
if (!$) return;
|
|
7910
7937
|
let o2 = $, s2 = (e5 = o2.mode) == null ? "synastry" : e5, c2 = String((t2 = (n2 = o2._birth_params_inner) == null ? void 0 : n2.location) == null ? "Person 1" : t2), l2 = s2 === "transit" ? "today's transits" : String((r2 = (i2 = o2._birth_params_outer) == null ? void 0 : i2.location) == null ? "Person 2" : r2), u2 = ((a2 = o2.cross_aspects) == null ? [] : a2).slice(0, 6).map((e6) => "".concat(e6.planet1, " ").concat(e6.type, " ").concat(e6.planet2, " (").concat(e6.orb.toFixed(1), "\xB0)")).join(", ") || "none detected";
|
|
7911
|
-
await
|
|
7938
|
+
await jy(s2 === "transit" ? "I'm exploring a transit chart for ".concat(c2, ". The active cross-aspects include: ").concat(u2, ".\n\nBased on these transits, please suggest 3-4 specific, insightful questions I could ask to understand this moment \u2014 such as what each transit means for different life areas, timing, or how to work with the energy consciously. Present each as a tappable question I can ask you.") : "I'm exploring a synastry chart between ".concat(c2, " and ").concat(l2, ". The key cross-wheel contacts include: ").concat(u2, ".\n\nBased on these connections, please suggest 3-4 specific, insightful questions I could ask to understand this relationship dynamic \u2014 such as what specific aspects mean, areas of natural ease or tension, or how these two charts interact. Present each as a tappable question I can ask you."));
|
|
7912
7939
|
}
|
|
7913
|
-
async function
|
|
7914
|
-
if (
|
|
7940
|
+
async function Yy(e5) {
|
|
7941
|
+
if (by) try {
|
|
7915
7942
|
var t2;
|
|
7916
|
-
await
|
|
7943
|
+
await vy.updateModelContext({ content: [{ type: "text", text: "User selected ".concat(e5.type, ": ").concat(JSON.stringify(e5.data, null, 2), "\nMode: ").concat((t2 = $ == null ? void 0 : $.mode) == null ? "synastry" : t2) }] });
|
|
7917
7944
|
} catch (e6) {
|
|
7918
7945
|
}
|
|
7919
7946
|
}
|
|
7920
|
-
function
|
|
7921
|
-
if (
|
|
7947
|
+
function Xy() {
|
|
7948
|
+
if (xy) return async (e5) => {
|
|
7922
7949
|
var t2;
|
|
7923
|
-
let n2 = await
|
|
7950
|
+
let n2 = await vy.createSamplingMessage({ maxTokens: 150, systemPrompt: "You are an expert astrologer interpreting a ".concat(($ == null ? void 0 : $.mode) === "synastry" ? "synastry (relationship)" : "".concat((t2 = $ == null ? void 0 : $.mode) == null ? "transit" : t2, " (planetary weather)"), " chart. Give a focused, mode-appropriate interpretation. Insightful and concise."), messages: [{ role: "user", content: { type: "text", text: e5 } }] });
|
|
7924
7951
|
if (n2.isError) {
|
|
7925
7952
|
var r2, i2;
|
|
7926
7953
|
throw Error((r2 = (i2 = n2.error) == null ? void 0 : i2.message) == null ? "Sampling failed" : r2);
|
|
@@ -7930,133 +7957,133 @@ function qy() {
|
|
|
7930
7957
|
throw Error("Unexpected sampling response format");
|
|
7931
7958
|
};
|
|
7932
7959
|
}
|
|
7933
|
-
function
|
|
7960
|
+
function Zy(e5) {
|
|
7934
7961
|
var t2, n2, r2, i2, a2, o2, s2;
|
|
7935
|
-
$ = e5, clearTimeout(
|
|
7962
|
+
$ = e5, clearTimeout(ab), By(e5), zv(uy, e5, nb, rb, Ky, Xy()), Iy(), Gy(e5, Ry);
|
|
7936
7963
|
let c2 = Q_(e5.inner), l2 = Q_(e5.outer), u2 = (n2 = (r2 = (i2 = ((t2 = e5.inner_houses) == null ? [] : t2)[0]) == null ? void 0 : i2.cusp_lon) == null ? e5.ascendant : r2) == null ? 0 : n2;
|
|
7937
|
-
|
|
7964
|
+
eb(Nv((a2 = e5.cross_aspects) == null ? [] : a2), c2, l2, u2), e5.house_system && (Sy = e5.house_system);
|
|
7938
7965
|
let d2 = document.getElementById("bi-action-bar");
|
|
7939
7966
|
if (!d2) {
|
|
7940
7967
|
d2 = document.createElement("div"), d2.id = "bi-action-bar", d2.className = "hd-action-bar";
|
|
7941
7968
|
let e6 = document.querySelector("#fs-bottom-bar [data-column='right']");
|
|
7942
7969
|
if (e6) e6.appendChild(d2);
|
|
7943
7970
|
else {
|
|
7944
|
-
let e7 = document.getElementById("app"), t3 =
|
|
7971
|
+
let e7 = document.getElementById("app"), t3 = fy.parentElement === e7 ? fy : null;
|
|
7945
7972
|
e7 == null || e7.insertBefore(d2, t3);
|
|
7946
7973
|
}
|
|
7947
7974
|
}
|
|
7948
|
-
d2.innerHTML = '\n <button class="action-btn action-btn--primary" id="bi-interpret-btn">\u2728 Interpret this chart</button>\n <button class="action-btn" id="bi-questions-btn">\u{1F52E} What should I ask?</button>\n ', (o2 = d2.querySelector("#bi-interpret-btn")) == null || o2.addEventListener("click", () => void
|
|
7975
|
+
d2.innerHTML = '\n <button class="action-btn action-btn--primary" id="bi-interpret-btn">\u2728 Interpret this chart</button>\n <button class="action-btn" id="bi-questions-btn">\u{1F52E} What should I ask?</button>\n ', (o2 = d2.querySelector("#bi-interpret-btn")) == null || o2.addEventListener("click", () => void qy()), (s2 = d2.querySelector("#bi-questions-btn")) == null || s2.addEventListener("click", () => void Jy()), Ey(), Oy(), ny("bi-wheel");
|
|
7949
7976
|
}
|
|
7950
|
-
var
|
|
7951
|
-
function
|
|
7952
|
-
if (!
|
|
7977
|
+
var Qy = null, $y = { "Cross Trine": "#52a8e0", "Cross T-Square": "#e08a52", "Cross Stellium": "#9a7fd4" };
|
|
7978
|
+
function eb(e5, t2, n2, r2) {
|
|
7979
|
+
if (!gy) return;
|
|
7953
7980
|
if (e5.length === 0) {
|
|
7954
|
-
|
|
7981
|
+
gy.hidden = true, gy.innerHTML = "";
|
|
7955
7982
|
return;
|
|
7956
7983
|
}
|
|
7957
|
-
|
|
7984
|
+
Qy = null, gy.innerHTML = '\n <span class="patterns-label">Cross-Patterns:</span>\n '.concat(e5.map((e6, t3) => {
|
|
7958
7985
|
var n3;
|
|
7959
|
-
let r3 = (n3 =
|
|
7986
|
+
let r3 = (n3 = $y[e6.name]) == null ? "#888" : n3;
|
|
7960
7987
|
return '<button class="pattern-pill"\n data-idx="'.concat(t3, '"\n data-color="').concat(r3, '"\n style="color:').concat(r3, ";border-color:").concat(r3, '"\n title="').concat(e6.description, '">\n ').concat(e6.name, '\n <span class="pattern-pill-detail">').concat(e6.description, "</span>\n </button>");
|
|
7961
|
-
}).join(""), "\n "),
|
|
7988
|
+
}).join(""), "\n "), gy.removeAttribute("hidden");
|
|
7962
7989
|
let i2 = document.createElement("button");
|
|
7963
|
-
i2.className = "pattern-ask-claude-btn", i2.textContent = "\u2728
|
|
7990
|
+
i2.className = "pattern-ask-claude-btn", i2.textContent = "\u2728 Interpret", i2.style.display = "none", gy.appendChild(i2), i2.addEventListener("click", () => {
|
|
7964
7991
|
var t3;
|
|
7965
|
-
let n3 =
|
|
7992
|
+
let n3 = Qy;
|
|
7966
7993
|
if (n3 === null) return;
|
|
7967
7994
|
let r3 = e5[n3];
|
|
7968
|
-
r3 && (i2.disabled = true, i2.textContent = "\u23F3 Sending\u2026",
|
|
7995
|
+
r3 && (i2.disabled = true, i2.textContent = "\u23F3 Sending\u2026", Ky({ type: "pattern", data: { name: r3.name, planets: r3.planets, description: (t3 = r3.description) == null ? "" : t3 } }).then(() => {
|
|
7969
7996
|
i2.textContent = "\u2713 Sent", setTimeout(() => {
|
|
7970
|
-
i2.textContent = "\u2728
|
|
7997
|
+
i2.textContent = "\u2728 Interpret", i2.disabled = false;
|
|
7971
7998
|
}, 2500);
|
|
7972
7999
|
}).catch(() => {
|
|
7973
8000
|
i2.textContent = "\u26A0 Failed", i2.disabled = false;
|
|
7974
8001
|
}));
|
|
7975
|
-
}),
|
|
8002
|
+
}), gy.querySelectorAll(".pattern-pill").forEach((a2) => {
|
|
7976
8003
|
a2.addEventListener("click", () => {
|
|
7977
8004
|
var o2, s2;
|
|
7978
8005
|
let c2 = parseInt((o2 = a2.dataset.idx) == null ? "-1" : o2, 10), l2 = e5[c2];
|
|
7979
8006
|
if (!l2) return;
|
|
7980
8007
|
let u2 = (s2 = a2.dataset.color) == null ? "#888" : s2;
|
|
7981
|
-
if (
|
|
7982
|
-
|
|
8008
|
+
if (Qy === c2) {
|
|
8009
|
+
Qy = null, a2.classList.remove("active"), a2.style.background = "transparent", a2.style.color = u2, a2.style.borderColor = u2, Ov(), Lv(), i2.style.display = "none";
|
|
7983
8010
|
return;
|
|
7984
8011
|
}
|
|
7985
|
-
|
|
8012
|
+
Qy = c2, gy.querySelectorAll(".pattern-pill").forEach((e6) => {
|
|
7986
8013
|
var t3;
|
|
7987
8014
|
e6.classList.remove("active");
|
|
7988
8015
|
let n3 = (t3 = e6.dataset.color) == null ? "#888" : t3;
|
|
7989
8016
|
e6.style.color = n3, e6.style.borderColor = n3, e6.style.background = "transparent";
|
|
7990
|
-
}), a2.classList.add("active"), a2.style.background = u2, a2.style.color = "#fff", a2.style.borderColor = u2, Rv(l2), Lv(), Iv(l2, t2, n2, r2), i2.style.display = "", i2.textContent = "\u2728
|
|
8017
|
+
}), a2.classList.add("active"), a2.style.background = u2, a2.style.color = "#fff", a2.style.borderColor = u2, Rv(l2), Lv(), Iv(l2, t2, n2, r2), i2.style.display = "", i2.textContent = "\u2728 Interpret", i2.disabled = false;
|
|
7991
8018
|
});
|
|
7992
8019
|
});
|
|
7993
8020
|
}
|
|
7994
|
-
async function
|
|
8021
|
+
async function tb(e5) {
|
|
7995
8022
|
if (!$) return;
|
|
7996
8023
|
let t2 = $;
|
|
7997
|
-
|
|
8024
|
+
Dy();
|
|
7998
8025
|
try {
|
|
7999
8026
|
var n2, r2, i2, a2, o2, s2, c2, l2, u2, d2;
|
|
8000
|
-
let f2 = new Promise((e6, t3) => setTimeout(() => t3(Error("House system recalculate timed out")), 3e4)), p2 =
|
|
8001
|
-
p2 ?
|
|
8027
|
+
let f2 = new Promise((e6, t3) => setTimeout(() => t3(Error("House system recalculate timed out")), 3e4)), p2 = My(await Promise.race([vy.callServerTool({ name: "bi_wheel_recalculate", arguments: { mode: t2.mode, person1_datetime: (n2 = t2._birth_params_inner) == null ? void 0 : n2.datetime, person1_latitude: (r2 = t2._birth_params_inner) == null ? void 0 : r2.latitude, person1_longitude: (i2 = t2._birth_params_inner) == null ? void 0 : i2.longitude, person1_timezone: (a2 = t2._birth_params_inner) == null ? void 0 : a2.timezone, person1_name: (o2 = t2._birth_params_inner) == null ? void 0 : o2.location, person2_datetime: (s2 = t2._birth_params_outer) == null ? void 0 : s2.datetime, person2_latitude: (c2 = t2._birth_params_outer) == null ? void 0 : c2.latitude, person2_longitude: (l2 = t2._birth_params_outer) == null ? void 0 : l2.longitude, person2_timezone: (u2 = t2._birth_params_outer) == null ? void 0 : u2.timezone, person2_name: (d2 = t2._birth_params_outer) == null ? void 0 : d2.location, house_system: e5 } }), f2]));
|
|
8028
|
+
p2 ? Zy(p2) : $ && Ey();
|
|
8002
8029
|
} catch (e6) {
|
|
8003
|
-
console.error("[BiWheel] House system recalculate failed:", e6), $ &&
|
|
8030
|
+
console.error("[BiWheel] House system recalculate failed:", e6), $ && Ey();
|
|
8004
8031
|
}
|
|
8005
8032
|
}
|
|
8006
|
-
function
|
|
8033
|
+
function nb(e5, t2, n2) {
|
|
8007
8034
|
var r2, i2, a2, o2, s2;
|
|
8008
8035
|
let c2 = Math.floor((e5.longitude % 360 + 360) % 360 / 30), l2 = (r2 = (i2 = e5.sign) == null ? ["Aries", "Taurus", "Gemini", "Cancer", "Leo", "Virgo", "Libra", "Scorpio", "Sagittarius", "Capricorn", "Aquarius", "Pisces"][c2] : i2) == null ? "Unknown" : r2;
|
|
8009
|
-
|
|
8036
|
+
Yy({ type: "planet", data: { planet_name: e5.name, wheel: t2, longitude: e5.longitude, sign: l2, position: "".concat(Math.floor(e5.longitude % 30), "\xB0 ").concat(l2), house: (a2 = e5.house) == null ? null : a2, retrograde: (o2 = e5.retrograde) == null ? false : o2, mode: (s2 = $ == null ? void 0 : $.mode) == null ? "synastry" : s2, cross_aspects: n2.filter((n3) => t2 === "inner" && n3.planet1 === e5.name || t2 === "outer" && n3.planet2 === e5.name).slice(0, 5).map((e6) => ({ type: e6.type, partner: t2 === "inner" ? e6.planet2 : e6.planet1, orb: e6.orb, applying: e6.applying, orb_label: e6.orb <= 1 ? "exact" : e6.orb <= 3 ? "tight" : "wide" })) } });
|
|
8010
8037
|
}
|
|
8011
|
-
function
|
|
8038
|
+
function rb(e5) {
|
|
8012
8039
|
var t2;
|
|
8013
8040
|
let n2 = $ == null ? void 0 : $.inner.find((t3) => t3.name === e5.planet1), r2 = $ == null ? void 0 : $.outer.find((t3) => t3.name === e5.planet2), i2 = n2 ? Math.floor((n2.longitude % 360 + 360) % 360 / 30) : NaN, a2 = r2 ? Math.floor((r2.longitude % 360 + 360) % 360 / 30) : NaN, o2 = ["Aries", "Taurus", "Gemini", "Cancer", "Leo", "Virgo", "Libra", "Scorpio", "Sagittarius", "Capricorn", "Aquarius", "Pisces"];
|
|
8014
|
-
|
|
8041
|
+
Yy({ type: "cross_aspect", data: { planet1: e5.planet1, wheel1: e5.wheel1, planet2: e5.planet2, wheel2: e5.wheel2, aspect_type: e5.type, orb: e5.orb, applying: e5.applying, planet1_sign: isNaN(i2) ? null : o2[i2], planet2_sign: isNaN(a2) ? null : o2[a2], mode: (t2 = $ == null ? void 0 : $.mode) == null ? "synastry" : t2 } });
|
|
8015
8042
|
}
|
|
8016
|
-
|
|
8017
|
-
clearTimeout(
|
|
8018
|
-
let t2 =
|
|
8043
|
+
vy.ontoolresult = (e5) => {
|
|
8044
|
+
clearTimeout(ab);
|
|
8045
|
+
let t2 = My(e5);
|
|
8019
8046
|
if (!t2) {
|
|
8020
|
-
|
|
8047
|
+
ky("The chart didn't load. Tap to try again.", ib);
|
|
8021
8048
|
return;
|
|
8022
8049
|
}
|
|
8023
|
-
if (!
|
|
8050
|
+
if (!yy) {
|
|
8024
8051
|
var n2, r2, i2, a2;
|
|
8025
8052
|
let e6 = (n2 = t2._birth_params_outer) == null ? {} : n2, o2 = (r2 = e6.datetime) == null ? "" : r2, s2 = (i2 = e6.location) == null ? "" : i2, c2 = (a2 = e6.timezone) == null ? "" : a2, l2 = e6.latitude, u2 = e6.longitude, d2 = "", f2 = "12:00";
|
|
8026
8053
|
if (o2 && o2.includes("T")) {
|
|
8027
8054
|
let e7 = o2.split("T");
|
|
8028
8055
|
d2 = e7[0], f2 = e7[1].substring(0, 5);
|
|
8029
8056
|
}
|
|
8030
|
-
|
|
8031
|
-
|
|
8057
|
+
yy = new Jv({ app: vy, container: _y, initialParams: { date: d2, time: f2, locationName: s2, timezone: c2, latitude: typeof l2 == "number" ? l2 : null, longitude: typeof u2 == "number" ? u2 : null }, showStepControls: t2.mode === "transit", costHint: "~2 credits", onRefresh: async (e7) => {
|
|
8058
|
+
yy == null || yy.setBusy(true), Dy(), _y.setAttribute("hidden", "");
|
|
8032
8059
|
try {
|
|
8033
8060
|
var n3, r3, i3, a3, o3;
|
|
8034
|
-
let s3 = "".concat(e7.date, "T").concat(e7.time, ":00"), c3 = new Promise((e8, t3) => setTimeout(() => t3(Error("Bi-wheel recalculate timed out after 30s")), 3e4)), l3 =
|
|
8035
|
-
l3 ?
|
|
8061
|
+
let s3 = "".concat(e7.date, "T").concat(e7.time, ":00"), c3 = new Promise((e8, t3) => setTimeout(() => t3(Error("Bi-wheel recalculate timed out after 30s")), 3e4)), l3 = My(await Promise.race([vy.callServerTool({ name: "bi_wheel_recalculate", arguments: { mode: t2.mode, person1_datetime: (n3 = t2._birth_params_inner) == null ? void 0 : n3.datetime, person1_latitude: (r3 = t2._birth_params_inner) == null ? void 0 : r3.latitude, person1_longitude: (i3 = t2._birth_params_inner) == null ? void 0 : i3.longitude, person1_timezone: (a3 = t2._birth_params_inner) == null ? void 0 : a3.timezone, person1_name: (o3 = t2._birth_params_inner) == null ? void 0 : o3.location, person2_datetime: "".concat(s3).concat(e7.timezone ? "" : "Z"), person2_latitude: e7.latitude, person2_longitude: e7.longitude, person2_timezone: e7.timezone, person2_name: e7.locationName } }), c3]));
|
|
8062
|
+
l3 ? Zy(l3) : $ && Ey();
|
|
8036
8063
|
} catch (e8) {
|
|
8037
|
-
console.error("[BiWheel] Recalculate failed or timed out:", e8), $ &&
|
|
8064
|
+
console.error("[BiWheel] Recalculate failed or timed out:", e8), $ && Ey();
|
|
8038
8065
|
} finally {
|
|
8039
|
-
|
|
8066
|
+
yy == null || yy.setBusy(false), _y.removeAttribute("hidden");
|
|
8040
8067
|
}
|
|
8041
8068
|
} });
|
|
8042
8069
|
}
|
|
8043
|
-
|
|
8070
|
+
Zy(t2), _y.removeAttribute("hidden");
|
|
8044
8071
|
};
|
|
8045
|
-
function
|
|
8046
|
-
clearTimeout(
|
|
8047
|
-
|
|
8048
|
-
}, 3e4),
|
|
8072
|
+
function ib() {
|
|
8073
|
+
clearTimeout(ab), Ty(), ab = setTimeout(() => {
|
|
8074
|
+
uy.hidden && ky("The chart didn't load. Tap to try again.", ib);
|
|
8075
|
+
}, 3e4), vy.sendMessage({ role: "user", content: [{ type: "text", text: "Please regenerate the bi-wheel chart." }] }).catch(() => {
|
|
8049
8076
|
});
|
|
8050
8077
|
}
|
|
8051
|
-
var
|
|
8052
|
-
|
|
8078
|
+
var ab = setTimeout(() => {
|
|
8079
|
+
uy.hidden && ky("Chart data is taking longer than expected.", ib);
|
|
8053
8080
|
}, 3e4);
|
|
8054
|
-
|
|
8081
|
+
Ty(), sy(vy, { loadingEl: dy, contentEl: uy, statusFn: wy, paramControls: () => yy }), (async () => {
|
|
8055
8082
|
try {
|
|
8056
|
-
await
|
|
8057
|
-
let e5 =
|
|
8058
|
-
|
|
8059
|
-
$ &&
|
|
8083
|
+
await vy.connect();
|
|
8084
|
+
let e5 = vy.getHostCapabilities();
|
|
8085
|
+
by = !!(e5 != null && e5.modelContext), xy = !!(e5 != null && e5.sampling), oy(vy, document.getElementById("pan-zoom-controls"), ["mode-badge", "aspect-filter", "param-controls-container", "chart-provenance", "bi-patterns-strip", "bi-action-bar"]), ly(vy), h_(vy, () => {
|
|
8086
|
+
$ && Zy($);
|
|
8060
8087
|
});
|
|
8061
8088
|
} catch (e5) {
|
|
8062
8089
|
console.error("[BiWheel] connect() failed:", e5);
|