update to frame and tarot times

This commit is contained in:
2026-04-02 22:06:19 -07:00
parent e5d041101f
commit cac243f2cf
9 changed files with 394 additions and 44 deletions

View File

@@ -212,6 +212,10 @@
const windowDecans = windowDecanIds
.map((decanId) => decanById.get(decanId) || null)
.filter(Boolean);
const windowSignIds = tarotDb.courtSignWindows?.[cardName] || [];
const windowSigns = windowSignIds
.map((signId) => signById[signId] || null)
.filter(Boolean);
const explicitWindowRange = buildTokenDateRange(
tarotDb.courtDateRanges?.[cardName]?.start,
tarotDb.courtDateRanges?.[cardName]?.end
@@ -240,6 +244,24 @@
)
);
if (meta?.decan?.tarotMinorArcana) {
dynamicRelations.push(
createRelation(
"tarotCard",
`${meta.signId}-${meta.index}-${rankKey}-${suitKey}-decan-card`,
`Decan card: ${meta.decan.tarotMinorArcana} (${meta.signName} decan ${meta.index})`,
{
cardName: meta.decan.tarotMinorArcana,
decanId: meta.decan.id || `${meta.signId}-${meta.index}`,
signId: meta.signId,
signName: meta.signName,
decanIndex: meta.index,
dateRange: meta.dateRange?.label || null
}
)
);
}
const ruler = planets?.[meta?.decan?.rulerPlanetId] || null;
if (ruler) {
dynamicRelations.push(
@@ -290,9 +312,87 @@
}
});
if (windowDecans.length) {
const firstRange = windowDecans[0].dateRange;
const lastRange = windowDecans[windowDecans.length - 1].dateRange;
windowSigns.forEach((sign) => {
const signDateRange = buildTokenDateRange(sign?.start, sign?.end);
const signName = sign?.name || sign?.id || "";
const signSymbol = sign?.symbol || "";
const relatedDecans = Array.isArray(decansBySign?.[sign.id]) ? decansBySign[sign.id] : [];
dynamicRelations.push(
createRelation(
"signWindow",
`${sign.id}-${rankKey}-${suitKey}`,
`Sign window: ${signSymbol} ${signName} (0°30°)${signDateRange ? ` · ${signDateRange.label}` : ""}`.trim(),
{
signId: sign.id,
signName,
signSymbol,
startDegree: 0,
endDegree: 30,
dateStart: signDateRange?.startToken || null,
dateEnd: signDateRange?.endToken || null,
dateRange: signDateRange?.label || null
}
)
);
relatedDecans.forEach((decan) => {
if (!decan?.tarotMinorArcana) {
return;
}
dynamicRelations.push(
createRelation(
"tarotCard",
`${sign.id}-${decan.id || decan.tarotMinorArcana}-${rankKey}-${suitKey}-sign-card`,
`Sign card: ${decan.tarotMinorArcana} (${signName})`,
{
cardName: decan.tarotMinorArcana,
decanId: decan.id || null,
signId: sign.id,
signName,
signSymbol,
dateRange: signDateRange?.label || null
}
)
);
});
if (signDateRange?.start && signDateRange?.end) {
const monthNumbers = listMonthNumbersBetween(signDateRange.start, signDateRange.end);
monthNumbers.forEach((monthNo) => {
const monthId = monthIdByNumber[monthNo];
const monthName = monthNameByNumber[monthNo] || `Month ${monthNo}`;
const monthKey = `${monthId}:${sign.id}:sign-window`;
if (!monthId || monthKeys.has(monthKey)) {
return;
}
monthKeys.add(monthKey);
dynamicRelations.push(
createRelation(
"calendarMonth",
`${monthId}-${sign.id}-${rankKey}-${suitKey}-sign-window`,
`Calendar month: ${monthName} (${signName} sign window)`,
{
monthId,
name: monthName,
monthOrder: monthNo,
signId: sign.id,
signName,
dateRange: signDateRange?.label || null
}
)
);
});
}
});
if (windowDecans.length || windowSigns.length) {
const firstRange = windowDecans.length ? windowDecans[0].dateRange : null;
const lastRange = windowDecans.length ? windowDecans[windowDecans.length - 1].dateRange : null;
const firstSignRange = windowSigns.length ? buildTokenDateRange(windowSigns[0]?.start, windowSigns[0]?.end) : null;
const lastSignRange = windowSigns.length ? buildTokenDateRange(windowSigns[windowSigns.length - 1]?.start, windowSigns[windowSigns.length - 1]?.end) : null;
const fallbackWindowRange = firstRange && lastRange
? {
start: firstRange.start,
@@ -301,7 +401,15 @@
endToken: lastRange.endToken,
label: `${formatMonthDayLabel(firstRange.start)}${formatMonthDayLabel(lastRange.end)}`
}
: null;
: (firstSignRange && lastSignRange
? {
start: firstSignRange.start,
end: lastSignRange.end,
startToken: firstSignRange.startToken,
endToken: lastSignRange.endToken,
label: `${formatMonthDayLabel(firstSignRange.start)}${formatMonthDayLabel(lastSignRange.end)}`
}
: null);
const windowRange = explicitWindowRange || fallbackWindowRange;
const windowLabel = windowRange?.label || "--";
@@ -314,7 +422,8 @@
dateStart: windowRange?.startToken || null,
dateEnd: windowRange?.endToken || null,
dateRange: windowLabel,
decanIds: windowDecanIds
decanIds: windowDecanIds,
signIds: windowSignIds
}
)
);