Skip to content

Commit 88f48fc

Browse files
committed
feat(ephemeris-table,i18n): the monthly ephemeris rendered as a collapsed 31 Rows disclosure, because no component was bound to it
A site owner who placed the monthly ephemeris got Year, Month and a disclosure reading 31 Rows. The operation was not in the component map, so it fell through to the generic renderer, which cannot present days[].positions[]. The API was never the problem: it already returns planetLocalized and signLocalized, so the reading was there and nothing drew it. <roxy-ephemeris-table> is bound to both monthly operations, which return an identical shape (14 tropical bodies, 9 Navagraha sidereal). Layout follows published ephemerides rather than developer instinct: days down the rows, bodies across glyph-headed columns, positions as 9 Leo 16 rather than a decimal longitude, retrograde marked in the cell, and sign changes and retrograde windows listed above the grid the way a printed ephemeris lists ingresses and stations beside it. Every ingress reconciles against an independently computed calendar once the noon UTC sampling is accounted for. Translated in all seven locales from named astrology references in each language, with rejected candidates recorded. Two traps closed: the German article is dropped so a weak-noun sign stays uninflected, and the Turkish dative lands on burc rather than the sign name, so both placeholders substitute bare and correct. Empty states and captions are marked composed, because no astrology site publishes either. Also fixes a stale e2e fixture: transit-aspects now returns houses and ascendant, so four specs asserted a no-cusps state the live response no longer produces. They now assert the drawn ring and reach the degraded branch by stripping the fields from the real payload.
1 parent d3a3687 commit 88f48fc

43 files changed

Lines changed: 7675 additions & 258 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

AGENTS.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,7 @@ Use the table below for the formal endpoint to component mapping.
6666
| `<roxy-local-space-compass>` | Western | POST /astrology/local-space | Compass dial of planetary azimuth lines from the birthplace, dimmed below the horizon |
6767
| `<roxy-relocation-wheel>` | Western | POST /astrology/relocation-chart | Relocated chart wheel plus the move geometry, angular planets, and planets that change house |
6868
| `<roxy-positions-table>` | Western | POST /astrology/asteroids, /astrology/lilith, /astrology/progressions, /astrology/solar-arc, /astrology/arabic-lots | Body, sign, degree, and per-shape columns (house, motion, formula, or natal arc) plus each reading |
69+
| `<roxy-ephemeris-table>` | Cross | POST /astrology/planets/monthly, /vedic-astrology/planetary-positions/monthly | Per-body sign changes and retrograde windows for the month, over the full daily position grid |
6970
| `<roxy-fixed-stars>` | Western | POST /astrology/fixed-stars | Star to natal point conjunctions with readings, plus a catalog of position, magnitude, nature, and keywords |
7071
| `<roxy-profection-card>` | Western | POST /astrology/profections | Profected house and sign for the year, the lord of the year, its natal placement, and the reading |
7172
| `<roxy-compatibility-card>` | Cross | POST /astrology/compatibility-score, /numerology/compatibility, /biorhythm/compatibility | Score card with category breakdown |
@@ -555,7 +556,7 @@ The language comes from `lang` on the element, else the nearest ancestor carryin
555556

556557
English is the default and needs no catalogue. Load only the languages your site serves; one catalogue covers every Roxy component on the page.
557558

558-
A catalogue ships for every language the API serves: `de`, `es`, `fr`, `hi`, `pt`, `ru`, `tr`. Each covers `<roxy-natal-chart>`, `<roxy-transit-wheel>`, `<roxy-data>`, `<roxy-bodygraph>`, `<roxy-hd-type-card>`, `<roxy-hd-variables>`, `<roxy-reference-card>` and the shared labels every component inherits; the remaining components write English labels until their entries land. Every term is sourced from named astrology references in that language rather than translated word for word. **The values the API returns are never rewritten**: a planet, sign, aspect or house-system name renders exactly as the response carries it, so the words on the chart and the words in the response can never disagree. Ask for a language and the response carries the reader-facing name beside the English one, so the chart prints the translated name while the English one stays available to compare against in your own code.
559+
A catalogue ships for every language the API serves: `de`, `es`, `fr`, `hi`, `pt`, `ru`, `tr`. Each covers `<roxy-natal-chart>`, `<roxy-transit-wheel>`, `<roxy-ephemeris-table>`, `<roxy-data>`, `<roxy-bodygraph>`, `<roxy-hd-type-card>`, `<roxy-hd-variables>`, `<roxy-reference-card>` and the shared labels every component inherits; the remaining components write English labels until their entries land. Every term is sourced from named astrology references in that language rather than translated word for word. **The values the API returns are never rewritten**: a planet, sign, aspect or house-system name renders exactly as the response carries it, so the words on the chart and the words in the response can never disagree. Ask for a language and the response carries the reader-facing name beside the English one, so the chart prints the translated name while the English one stays available to compare against in your own code.
559560

560561
Dates, times and numbers need no catalogue at all. They follow the same page language and are written the way that language writes them, hour cycle included, so a German page reads `15. Jan. 1990, 14:30` and an Argentine one `15 de ene de 1990, 2:30 p. m.`.
561562

README.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -635,6 +635,7 @@ The self-fetch form renders spec-driven inputs (a zodiac tile picker, a boolean
635635
| `<roxy-local-space-compass>` | Western | POST /astrology/local-space | Compass dial of planetary azimuth lines from the birthplace, dimmed below the horizon |
636636
| `<roxy-relocation-wheel>` | Western | POST /astrology/relocation-chart | Relocated chart wheel plus the move geometry, angular planets, and planets that change house |
637637
| `<roxy-positions-table>` | Western | POST /astrology/asteroids, /astrology/lilith, /astrology/progressions, /astrology/solar-arc, /astrology/arabic-lots | Body, sign, degree, and per-shape columns (house, motion, formula, or natal arc) plus each reading |
638+
| `<roxy-ephemeris-table>` | Cross | POST /astrology/planets/monthly, /vedic-astrology/planetary-positions/monthly | Per-body sign changes and retrograde windows for the month, over the full daily position grid |
638639
| `<roxy-fixed-stars>` | Western | POST /astrology/fixed-stars | Star to natal point conjunctions with readings, plus a catalog of position, magnitude, nature, and keywords |
639640
| `<roxy-profection-card>` | Western | POST /astrology/profections | Profected house and sign for the year, the lord of the year, its natal placement, and the reading |
640641
| `<roxy-compatibility-card>` | Cross | POST /astrology/compatibility-score, /numerology/compatibility, /biorhythm/compatibility | Score card with category breakdown |
@@ -796,7 +797,7 @@ Two things are separate on purpose. The catalogue is the wording this library wr
796797

797798
Dates, times and numbers follow the page as well, in the conventions that language actually uses: a Spanish page reads `15 ene 1990`, an Argentine one `15 de ene de 1990`, a German one `15. Jan. 1990, 14:30`. The hour cycle comes from the language, not from us, so nobody gets a 12-hour clock on a page that writes 24. This needs no catalogue and no attribute: it follows the same `lang` your page already declares.
798799

799-
A catalogue ships for every language the API serves: `de`, `es`, `fr`, `hi`, `pt`, `ru`, `tr`. Each covers `<roxy-natal-chart>`, `<roxy-transit-wheel>`, `<roxy-data>`, `<roxy-bodygraph>`, `<roxy-hd-type-card>`, `<roxy-hd-variables>`, `<roxy-reference-card>` and the shared chrome every component inherits; the remaining components render English labels until their catalogue entries land. Every term in every catalogue is sourced from named astrology references in that language rather than translated word for word, because the words a practitioner reads are the product.
800+
A catalogue ships for every language the API serves: `de`, `es`, `fr`, `hi`, `pt`, `ru`, `tr`. Each covers `<roxy-natal-chart>`, `<roxy-transit-wheel>`, `<roxy-ephemeris-table>`, `<roxy-data>`, `<roxy-bodygraph>`, `<roxy-hd-type-card>`, `<roxy-hd-variables>`, `<roxy-reference-card>` and the shared chrome every component inherits; the remaining components render English labels until their catalogue entries land. Every term in every catalogue is sourced from named astrology references in that language rather than translated word for word, because the words a practitioner reads are the product.
800801

801802
## Reliability
802803

apps/docs/components-manifest.js

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,16 @@ const DASHA_BODY = {
3434
significators: true,
3535
};
3636

37+
/**
38+
* The month both ephemeris cards request. Fixed rather than "the month in progress"
39+
* (which the API defaults to when year and month are omitted) so the demo, the
40+
* captured sample and the preview image all describe the same 31 days: this month
41+
* carries a solar ingress, two Mercury ingresses, a mid-month Chiron station and
42+
* four bodies retrograde throughout, so every render branch on the card has data.
43+
* Keep in sync with scripts/refresh-samples.ts.
44+
*/
45+
const EPHEMERIS_MONTH = { year: 2026, month: 8 };
46+
3747
const REGISTRY_BASE = 'https://cdn.jsdelivr.net/gh/RoxyAPI/ui@main/registry';
3848
const UI_CDN = 'https://cdn.jsdelivr.net/npm/@roxyapi/ui@latest/dist/cdn';
3949
// Must match PK_PLACEHOLDER in scripts/widget-snippets.ts, which produces the snippets.
@@ -261,6 +271,29 @@ window.ROXY_UI_DEMOS = [
261271
seoLine: 'The seven Hermetic lots with their sect-aware formulas',
262272
sdkCall: ` const { data } = await roxy.astrology.calculateArabicLots({
263273
body: ${JSON.stringify(PERSON1, null, 2).replace(/\n/g, '\n ')},
274+
});`,
275+
}),
276+
entry({
277+
id: 'ephemeris',
278+
tag: 'roxy-ephemeris-table',
279+
heading: 'Ephemeris',
280+
topic: 'Astrology',
281+
seoLine: 'Monthly ephemeris: daily tropical positions with sign changes and retrogrades',
282+
sdkCall: ` const { data } = await roxy.astrology.getMonthlyTropicalEphemeris({
283+
body: ${JSON.stringify(EPHEMERIS_MONTH, null, 2).replace(/\n/g, '\n ')},
284+
});`,
285+
}),
286+
// The second shape the one table renders: nine Navagraha instead of fourteen
287+
// Western bodies, Rahu and Ketu instead of the lunar nodes. Without this card
288+
// the sidereal roster is never rendered on the showcase or walked by the audit.
289+
entry({
290+
id: 'ephemeris-vedic',
291+
tag: 'roxy-ephemeris-table',
292+
heading: 'Ephemeris (Navagraha)',
293+
topic: 'Astrology',
294+
seoLine: 'Monthly Navagraha ephemeris: daily sidereal positions with sign changes and retrogrades',
295+
sdkCall: ` const { data } = await roxy.vedicAstrology.getMonthlyEphemeris({
296+
body: ${JSON.stringify(EPHEMERIS_MONTH, null, 2).replace(/\n/g, '\n ')},
264297
});`,
265298
}),
266299
entry({

apps/docs/manifest.js

Lines changed: 27 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)