(function () { "use strict"; const PLANET_ID_TO_LABEL = { saturn: "Saturn", jupiter: "Jupiter", mars: "Mars", sol: "Sol", venus: "Venus", mercury: "Mercury", luna: "Luna" }; const MINOR_RANK_BY_PLURAL = { aces: "Ace", twos: "Two", threes: "Three", fours: "Four", fives: "Five", sixes: "Six", sevens: "Seven", eights: "Eight", nines: "Nine", tens: "Ten" }; const MINOR_SUITS = ["Wands", "Cups", "Swords", "Disks"]; const DEFAULT_FOUR_QABALISTIC_WORLD_LAYERS = [ { slot: "Yod", letterChar: "י", hebrewToken: "yod", world: "Atziluth", worldLayer: "Archetypal World (God’s Will)", worldDescription: "World of gods or specific facets or divine qualities.", soulLayer: "Chiah", soulTitle: "Life Force", soulDescription: "The Chiah is the Life Force itself and our true identity as reflection of Supreme Consciousness." }, { slot: "Heh", letterChar: "ה", hebrewToken: "he", world: "Briah", worldLayer: "Creative World (God’s Love)", worldDescription: "World of archangels, executors of divine qualities.", soulLayer: "Neshamah", soulTitle: "Soul-Intuition", soulDescription: "The Neshamah is the part of our soul that transcends the thinking process." }, { slot: "Vav", letterChar: "ו", hebrewToken: "vav", world: "Yetzirah", worldLayer: "Formative World (God’s Mind)", worldDescription: "World of angels who work under archangelic direction.", soulLayer: "Ruach", soulTitle: "Intellect", soulDescription: "The Ruach is the thinking mind that often dominates attention and identity." }, { slot: "Heh (final)", letterChar: "ה", hebrewToken: "he", world: "Assiah", worldLayer: "Material World (God’s Creation)", worldDescription: "World of spirits that infuse matter and energy through specialized duties.", soulLayer: "Nephesh", soulTitle: "Animal Soul", soulDescription: "The Nephesh is instinctive consciousness expressed through appetite, emotion, sex drive, and survival." } ]; function metaCard(label, value, wide) { const card = document.createElement("div"); card.className = wide ? "planet-meta-card kab-wide-card" : "planet-meta-card"; card.innerHTML = `${label}
${value || "—"}
`; return card; } function createNavButton(label, eventName, detail) { const btn = document.createElement("button"); btn.type = "button"; btn.className = "kab-god-link"; btn.textContent = `${label} ↗`; btn.addEventListener("click", () => { document.dispatchEvent(new CustomEvent(eventName, { detail })); }); return btn; } function appendLinkRow(card, buttons) { if (!buttons?.length) return; const row = document.createElement("div"); row.className = "kab-god-links"; buttons.forEach((button) => row.appendChild(button)); card.appendChild(row); } function buildPlanetLuminaryCard(planetValue, context) { const card = metaCard("Planet / Luminary", planetValue); const planetId = context.resolvePlanetId(planetValue); if (planetId) { appendLinkRow(card, [ createNavButton(`View ${PLANET_ID_TO_LABEL[planetId] || planetValue} in Planets`, "nav:planet", { planetId }) ]); return card; } const zodiacId = context.resolveZodiacId(planetValue); if (zodiacId) { appendLinkRow(card, [ createNavButton(`View ${zodiacId.charAt(0).toUpperCase() + zodiacId.slice(1)} in Zodiac`, "nav:zodiac", { signId: zodiacId }) ]); } return card; } function extractMinorRank(attribution) { const match = String(attribution || "").match(/\bthe\s+4\s+(aces|twos|threes|fours|fives|sixes|sevens|eights|nines|tens)\b/i); if (!match) return null; return MINOR_RANK_BY_PLURAL[(match[1] || "").toLowerCase()] || null; } function buildMinorTarotNames(attribution) { const rank = extractMinorRank(attribution); if (!rank) return []; return MINOR_SUITS.map((suit) => `${rank} of ${suit}`); } function buildTarotAttributionCard(attribution) { const card = metaCard("Tarot Attribution", attribution); const minorCards = buildMinorTarotNames(attribution); if (minorCards.length) { appendLinkRow(card, minorCards.map((cardName) => createNavButton(cardName, "nav:tarot-trump", { cardName }) )); } return card; } function buildAstrologyCard(astrology, context) { const astroText = astrology ? `${astrology.name} (${astrology.type})` : "—"; const card = metaCard("Astrology", astroText); if (astrology?.type === "planet") { const planetId = context.resolvePlanetId(astrology.name); if (planetId) { appendLinkRow(card, [ createNavButton(`View ${PLANET_ID_TO_LABEL[planetId] || astrology.name} in Planets`, "nav:planet", { planetId }) ]); } } else if (astrology?.type === "zodiac") { const signId = context.resolveZodiacId(astrology.name); if (signId) { appendLinkRow(card, [ createNavButton(`View ${signId.charAt(0).toUpperCase() + signId.slice(1)} in Zodiac`, "nav:zodiac", { signId }) ]); } } return card; } function buildConnectsCard(path, fromName, toName) { const card = metaCard("Connects", `${fromName} → ${toName}`); appendLinkRow(card, [ createNavButton(`View ${fromName}`, "nav:kabbalah-path", { pathNo: Number(path.connects.from) }), createNavButton(`View ${toName}`, "nav:kabbalah-path", { pathNo: Number(path.connects.to) }) ]); return card; } function buildHebrewLetterCard(letter, context) { const label = `${letter.char || ""} ${letter.transliteration || ""} — "${letter.meaning || ""}" (${letter.letterType || ""})`; const card = metaCard("Hebrew Letter", label); const hebrewLetterId = context.resolveHebrewLetterId(letter.transliteration || letter.char || ""); if (hebrewLetterId) { appendLinkRow(card, [ createNavButton(`View ${letter.transliteration || letter.char || "Letter"} in Alphabet`, "nav:alphabet", { alphabet: "hebrew", hebrewLetterId }) ]); } return card; } function buildFourWorldsCard(tree, activeHebrewToken, context) { const activeToken = String(activeHebrewToken || "").trim().toLowerCase(); const worldLayers = Array.isArray(context.fourWorldLayers) && context.fourWorldLayers.length ? context.fourWorldLayers : DEFAULT_FOUR_QABALISTIC_WORLD_LAYERS; const card = document.createElement("div"); card.className = "planet-meta-card kab-wide-card"; const title = document.createElement("strong"); title.textContent = "Four Qabalistic Worlds & Soul Layers"; card.appendChild(title); const stack = document.createElement("div"); stack.className = "cal-item-stack"; worldLayers.forEach((layer) => { const row = document.createElement("div"); row.className = "cal-item-row"; const isActive = Boolean(activeToken) && activeToken === String(layer.hebrewToken || "").trim().toLowerCase(); const head = document.createElement("div"); head.className = "cal-item-head"; head.innerHTML = ` ${layer.slot}: ${layer.letterChar} — ${layer.world} `; row.appendChild(head); const worldLine = document.createElement("div"); worldLine.className = "planet-text"; worldLine.textContent = `${layer.worldLayer} · ${layer.worldDescription}`; row.appendChild(worldLine); const soulLine = document.createElement("div"); soulLine.className = "planet-text"; soulLine.textContent = `${layer.soulLayer} — ${layer.soulTitle}: ${layer.soulDescription}`; row.appendChild(soulLine); const buttonRow = []; const hebrewLetterId = context.resolveHebrewLetterId(layer.hebrewToken); if (hebrewLetterId) { buttonRow.push( createNavButton(`View ${layer.letterChar} in Alphabet`, "nav:alphabet", { alphabet: "hebrew", hebrewLetterId }) ); } const linkedPath = context.findPathByHebrewToken(tree, layer.hebrewToken); if (linkedPath?.pathNumber != null) { buttonRow.push( createNavButton(`View Path ${linkedPath.pathNumber}`, "nav:kabbalah-path", { pathNo: Number(linkedPath.pathNumber) }) ); } appendLinkRow(row, buttonRow); if (isActive) { row.style.borderColor = "#818cf8"; } stack.appendChild(row); }); card.appendChild(stack); return card; } function splitCorrespondenceNames(value) { return String(value || "") .split(/,|;|·|\/|\bor\b|\band\b|\+/i) .map((item) => item.trim()) .filter(Boolean); } function uniqueNames(values) { const seen = new Set(); const output = []; values.forEach((name) => { const key = String(name || "").toLowerCase(); if (seen.has(key)) return; seen.add(key); output.push(name); }); return output; } function godLinksCard(label, names, pathNo, metaText) { const card = document.createElement("div"); card.className = "planet-meta-card"; const title = document.createElement("strong"); title.textContent = label; card.appendChild(title); if (metaText) { const meta = document.createElement("p"); meta.className = "planet-text kab-god-meta"; meta.textContent = metaText; card.appendChild(meta); } const row = document.createElement("div"); row.className = "kab-god-links"; names.forEach((name) => { const btn = document.createElement("button"); btn.type = "button"; btn.className = "kab-god-link"; btn.textContent = name; btn.addEventListener("click", () => { document.dispatchEvent(new CustomEvent("nav:gods", { detail: { godName: name, pathNo: Number(pathNo) } })); }); row.appendChild(btn); }); card.appendChild(row); return card; } function appendGodsCards(pathNo, elements, godsData) { const gd = godsData?.[String(pathNo)]; if (!gd) return; const hasAny = gd.greek || gd.roman || gd.egyptian || gd.egyptianPractical || gd.elohim || gd.archangel || gd.angelicOrder; if (!hasAny) return; const sep = document.createElement("div"); sep.className = "planet-meta-card kab-wide-card"; sep.innerHTML = `Divine Correspondences`; elements.detailBodyEl.appendChild(sep); const greekNames = uniqueNames(splitCorrespondenceNames(gd.greek)); const romanNames = uniqueNames(splitCorrespondenceNames(gd.roman)); const egyptNames = uniqueNames([ ...splitCorrespondenceNames(gd.egyptianPractical), ...splitCorrespondenceNames(gd.egyptian) ]); if (greekNames.length) { elements.detailBodyEl.appendChild(godLinksCard("Greek", greekNames, pathNo)); } if (romanNames.length) { elements.detailBodyEl.appendChild(godLinksCard("Roman", romanNames, pathNo)); } if (egyptNames.length) { elements.detailBodyEl.appendChild(godLinksCard("Egyptian", egyptNames, pathNo)); } if (gd.elohim) { const g = gd.elohim; const meta = `${g.hebrew}${g.meaning ? " — " + g.meaning : ""}`; elements.detailBodyEl.appendChild(godLinksCard( "God Name", uniqueNames(splitCorrespondenceNames(g.transliteration)), pathNo, meta )); } if (gd.archangel) { const a = gd.archangel; const meta = `${a.hebrew}`; elements.detailBodyEl.appendChild(godLinksCard( "Archangel", uniqueNames(splitCorrespondenceNames(a.transliteration)), pathNo, meta )); } if (gd.angelicOrder) { const o = gd.angelicOrder; elements.detailBodyEl.appendChild(metaCard( "Angelic Order", `${o.hebrew} ${o.transliteration}${o.meaning ? " — " + o.meaning : ""}` )); } } function renderSephiraDetail(context) { const { seph, tree, elements } = context; elements.detailNameEl.textContent = `${seph.number} · ${seph.name}`; elements.detailSubEl.textContent = [seph.nameHebrew, seph.translation, seph.planet].filter(Boolean).join(" · "); elements.detailBodyEl.innerHTML = ""; elements.detailBodyEl.appendChild(buildFourWorldsCard(tree, "", context)); elements.detailBodyEl.appendChild(buildPlanetLuminaryCard(seph.planet, context)); elements.detailBodyEl.appendChild(metaCard("Intelligence", seph.intelligence)); elements.detailBodyEl.appendChild(buildTarotAttributionCard(seph.tarot)); if (seph.description) { elements.detailBodyEl.appendChild( metaCard(seph.name, seph.description, true) ); } const connected = tree.paths.filter( (entry) => entry.connects.from === seph.number || entry.connects.to === seph.number ); if (connected.length) { const card = document.createElement("div"); card.className = "planet-meta-card kab-wide-card"; const chips = connected.map((entry) => `` + `${entry.hebrewLetter?.char || ""} ${entry.pathNumber}` + `` ).join(""); card.innerHTML = `Connected Paths${path.description.replace(/\n/g, "
")}
Each petal maps to one of the 22 Hebrew letter paths (11-32). Click any large Hebrew letter to view astrology, tarot, and path intelligence details.
"; roseElements.detailBodyEl.innerHTML = ""; roseElements.detailBodyEl.appendChild(introCard); } window.KabbalahDetailUi = { renderSephiraDetail, renderPathDetail, renderRoseLandingIntro }; })();