@roxyapi/ui 0.4.0 → 0.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/AGENTS.md +28 -6
- package/README.md +46 -12
- package/dist/cdn/components/ashtakavarga-grid.js +12 -12
- package/dist/cdn/components/ashtakavarga-grid.js.map +4 -4
- package/dist/cdn/components/biorhythm-chart.js +8 -8
- package/dist/cdn/components/biorhythm-chart.js.map +4 -4
- package/dist/cdn/components/choghadiya-grid.js +12 -12
- package/dist/cdn/components/choghadiya-grid.js.map +4 -4
- package/dist/cdn/components/compatibility-card.js +7 -7
- package/dist/cdn/components/compatibility-card.js.map +4 -4
- package/dist/cdn/components/dasha-timeline.js +8 -8
- package/dist/cdn/components/dasha-timeline.js.map +4 -4
- package/dist/cdn/components/data.js +14 -14
- package/dist/cdn/components/data.js.map +4 -4
- package/dist/cdn/components/divisional-chart.js +29 -29
- package/dist/cdn/components/divisional-chart.js.map +4 -4
- package/dist/cdn/components/dosha-card.js +6 -6
- package/dist/cdn/components/dosha-card.js.map +4 -4
- package/dist/cdn/components/guna-milan.js +11 -11
- package/dist/cdn/components/guna-milan.js.map +4 -4
- package/dist/cdn/components/hexagram.js +9 -9
- package/dist/cdn/components/hexagram.js.map +4 -4
- package/dist/cdn/components/horoscope-card.js +18 -18
- package/dist/cdn/components/horoscope-card.js.map +4 -4
- package/dist/cdn/components/kp-chart.js +40 -40
- package/dist/cdn/components/kp-chart.js.map +4 -4
- package/dist/cdn/components/kp-planets-table.js +7 -7
- package/dist/cdn/components/kp-planets-table.js.map +4 -4
- package/dist/cdn/components/kp-ruling-planets.js +13 -13
- package/dist/cdn/components/kp-ruling-planets.js.map +4 -4
- package/dist/cdn/components/moon-phase.js +11 -11
- package/dist/cdn/components/moon-phase.js.map +4 -4
- package/dist/cdn/components/nakshatra-card.js +16 -16
- package/dist/cdn/components/nakshatra-card.js.map +4 -4
- package/dist/cdn/components/natal-chart.js +14 -14
- package/dist/cdn/components/natal-chart.js.map +4 -4
- package/dist/cdn/components/numerology-card.js +8 -8
- package/dist/cdn/components/numerology-card.js.map +4 -4
- package/dist/cdn/components/panchang-table.js +9 -9
- package/dist/cdn/components/panchang-table.js.map +4 -4
- package/dist/cdn/components/shadbala-table.js +13 -13
- package/dist/cdn/components/shadbala-table.js.map +4 -4
- package/dist/cdn/components/synastry-chart.js +18 -18
- package/dist/cdn/components/synastry-chart.js.map +4 -4
- package/dist/cdn/components/tarot-card.js +21 -21
- package/dist/cdn/components/tarot-card.js.map +4 -4
- package/dist/cdn/components/tarot-spread.js +27 -27
- package/dist/cdn/components/tarot-spread.js.map +4 -4
- package/dist/cdn/components/transits-table.js +15 -15
- package/dist/cdn/components/transits-table.js.map +4 -4
- package/dist/cdn/components/vedic-kundli.js +36 -36
- package/dist/cdn/components/vedic-kundli.js.map +4 -4
- package/dist/cdn/components/vedic-planets-table.js +11 -11
- package/dist/cdn/components/vedic-planets-table.js.map +4 -4
- package/dist/cdn/components/western-planets-table.js +8 -8
- package/dist/cdn/components/western-planets-table.js.map +4 -4
- package/dist/cdn/components/yoga-list.js +6 -6
- package/dist/cdn/components/yoga-list.js.map +4 -4
- package/dist/cdn/roxy-ui.js +231 -231
- package/dist/cdn/roxy-ui.js.map +4 -4
- package/dist/components/ashtakavarga-grid.d.ts +1 -0
- package/dist/components/ashtakavarga-grid.d.ts.map +1 -1
- package/dist/components/ashtakavarga-grid.js +47 -1
- package/dist/components/ashtakavarga-grid.js.map +3 -3
- package/dist/components/biorhythm-chart.d.ts +1 -0
- package/dist/components/biorhythm-chart.d.ts.map +1 -1
- package/dist/components/biorhythm-chart.js +47 -1
- package/dist/components/biorhythm-chart.js.map +3 -3
- package/dist/components/choghadiya-grid.d.ts +1 -0
- package/dist/components/choghadiya-grid.d.ts.map +1 -1
- package/dist/components/choghadiya-grid.js +47 -1
- package/dist/components/choghadiya-grid.js.map +3 -3
- package/dist/components/compatibility-card.d.ts +1 -0
- package/dist/components/compatibility-card.d.ts.map +1 -1
- package/dist/components/compatibility-card.js +47 -1
- package/dist/components/compatibility-card.js.map +3 -3
- package/dist/components/dasha-timeline.d.ts +1 -0
- package/dist/components/dasha-timeline.d.ts.map +1 -1
- package/dist/components/dasha-timeline.js +47 -1
- package/dist/components/dasha-timeline.js.map +3 -3
- package/dist/components/data.d.ts +1 -0
- package/dist/components/data.d.ts.map +1 -1
- package/dist/components/data.js +47 -1
- package/dist/components/data.js.map +3 -3
- package/dist/components/divisional-chart.d.ts +1 -0
- package/dist/components/divisional-chart.d.ts.map +1 -1
- package/dist/components/divisional-chart.js +47 -1
- package/dist/components/divisional-chart.js.map +3 -3
- package/dist/components/dosha-card.d.ts +1 -0
- package/dist/components/dosha-card.d.ts.map +1 -1
- package/dist/components/dosha-card.js +47 -1
- package/dist/components/dosha-card.js.map +3 -3
- package/dist/components/guna-milan.d.ts +1 -0
- package/dist/components/guna-milan.d.ts.map +1 -1
- package/dist/components/guna-milan.js +47 -1
- package/dist/components/guna-milan.js.map +3 -3
- package/dist/components/hexagram.d.ts +1 -0
- package/dist/components/hexagram.d.ts.map +1 -1
- package/dist/components/hexagram.js +47 -1
- package/dist/components/hexagram.js.map +3 -3
- package/dist/components/horoscope-card.d.ts +1 -0
- package/dist/components/horoscope-card.d.ts.map +1 -1
- package/dist/components/horoscope-card.js +47 -1
- package/dist/components/horoscope-card.js.map +3 -3
- package/dist/components/kp-chart.d.ts +1 -0
- package/dist/components/kp-chart.d.ts.map +1 -1
- package/dist/components/kp-chart.js +47 -1
- package/dist/components/kp-chart.js.map +3 -3
- package/dist/components/kp-planets-table.d.ts +1 -0
- package/dist/components/kp-planets-table.d.ts.map +1 -1
- package/dist/components/kp-planets-table.js +47 -1
- package/dist/components/kp-planets-table.js.map +3 -3
- package/dist/components/kp-ruling-planets.d.ts +1 -0
- package/dist/components/kp-ruling-planets.d.ts.map +1 -1
- package/dist/components/kp-ruling-planets.js +47 -1
- package/dist/components/kp-ruling-planets.js.map +3 -3
- package/dist/components/moon-phase.d.ts +1 -0
- package/dist/components/moon-phase.d.ts.map +1 -1
- package/dist/components/moon-phase.js +47 -1
- package/dist/components/moon-phase.js.map +3 -3
- package/dist/components/nakshatra-card.d.ts +1 -0
- package/dist/components/nakshatra-card.d.ts.map +1 -1
- package/dist/components/nakshatra-card.js +47 -1
- package/dist/components/nakshatra-card.js.map +3 -3
- package/dist/components/natal-chart.d.ts +1 -0
- package/dist/components/natal-chart.d.ts.map +1 -1
- package/dist/components/natal-chart.js +47 -1
- package/dist/components/natal-chart.js.map +3 -3
- package/dist/components/numerology-card.d.ts +1 -0
- package/dist/components/numerology-card.d.ts.map +1 -1
- package/dist/components/numerology-card.js +47 -1
- package/dist/components/numerology-card.js.map +3 -3
- package/dist/components/panchang-table.d.ts +1 -0
- package/dist/components/panchang-table.d.ts.map +1 -1
- package/dist/components/panchang-table.js +47 -1
- package/dist/components/panchang-table.js.map +3 -3
- package/dist/components/shadbala-table.d.ts +1 -0
- package/dist/components/shadbala-table.d.ts.map +1 -1
- package/dist/components/shadbala-table.js +47 -1
- package/dist/components/shadbala-table.js.map +3 -3
- package/dist/components/synastry-chart.d.ts +1 -0
- package/dist/components/synastry-chart.d.ts.map +1 -1
- package/dist/components/synastry-chart.js +47 -1
- package/dist/components/synastry-chart.js.map +3 -3
- package/dist/components/tarot-card.d.ts +1 -0
- package/dist/components/tarot-card.d.ts.map +1 -1
- package/dist/components/tarot-card.js +47 -1
- package/dist/components/tarot-card.js.map +3 -3
- package/dist/components/tarot-spread.d.ts +1 -0
- package/dist/components/tarot-spread.d.ts.map +1 -1
- package/dist/components/tarot-spread.js +47 -1
- package/dist/components/tarot-spread.js.map +3 -3
- package/dist/components/transits-table.d.ts +1 -0
- package/dist/components/transits-table.d.ts.map +1 -1
- package/dist/components/transits-table.js +47 -1
- package/dist/components/transits-table.js.map +3 -3
- package/dist/components/vedic-kundli.d.ts +1 -0
- package/dist/components/vedic-kundli.d.ts.map +1 -1
- package/dist/components/vedic-kundli.js +47 -1
- package/dist/components/vedic-kundli.js.map +3 -3
- package/dist/components/vedic-planets-table.d.ts +1 -0
- package/dist/components/vedic-planets-table.d.ts.map +1 -1
- package/dist/components/vedic-planets-table.js +47 -1
- package/dist/components/vedic-planets-table.js.map +3 -3
- package/dist/components/western-planets-table.d.ts +1 -0
- package/dist/components/western-planets-table.d.ts.map +1 -1
- package/dist/components/western-planets-table.js +47 -1
- package/dist/components/western-planets-table.js.map +3 -3
- package/dist/components/yoga-list.d.ts +1 -0
- package/dist/components/yoga-list.d.ts.map +1 -1
- package/dist/components/yoga-list.js +47 -1
- package/dist/components/yoga-list.js.map +3 -3
- package/dist/index.cjs +102 -29
- package/dist/index.cjs.map +3 -3
- package/dist/index.js +102 -29
- package/dist/index.js.map +3 -3
- package/dist/types/index.d.ts +1 -1
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/types.gen.d.ts +590 -202
- package/dist/types/types.gen.d.ts.map +1 -1
- package/dist/utils/markup-data.d.ts +57 -0
- package/dist/utils/markup-data.d.ts.map +1 -0
- package/dist/version.d.ts +1 -1
- package/package.json +1 -1
- package/src/components/ashtakavarga-grid.ts +9 -0
- package/src/components/biorhythm-chart.ts +9 -0
- package/src/components/choghadiya-grid.ts +9 -0
- package/src/components/compatibility-card.ts +9 -0
- package/src/components/dasha-timeline.ts +9 -0
- package/src/components/data.ts +9 -0
- package/src/components/divisional-chart.ts +9 -0
- package/src/components/dosha-card.ts +9 -0
- package/src/components/guna-milan.ts +9 -0
- package/src/components/hexagram.ts +9 -0
- package/src/components/horoscope-card.ts +9 -0
- package/src/components/kp-chart.ts +9 -0
- package/src/components/kp-planets-table.ts +9 -0
- package/src/components/kp-ruling-planets.ts +9 -0
- package/src/components/moon-phase.ts +9 -0
- package/src/components/nakshatra-card.ts +9 -0
- package/src/components/natal-chart.ts +9 -0
- package/src/components/numerology-card.ts +9 -0
- package/src/components/panchang-table.ts +9 -0
- package/src/components/shadbala-table.ts +9 -0
- package/src/components/synastry-chart.ts +9 -0
- package/src/components/tarot-card.ts +9 -0
- package/src/components/tarot-spread.ts +9 -0
- package/src/components/transits-table.ts +9 -0
- package/src/components/vedic-kundli.ts +9 -0
- package/src/components/vedic-planets-table.ts +9 -0
- package/src/components/western-planets-table.ts +9 -0
- package/src/components/yoga-list.ts +9 -0
- package/src/types/index.ts +1 -1
- package/src/types/types.gen.ts +602 -200
- package/src/utils/markup-data.ts +115 -0
- package/src/version.ts +1 -1
package/AGENTS.md
CHANGED
|
@@ -4,7 +4,7 @@ This file teaches AI coding agents (Claude Code, Cursor, Copilot, Codex, Gemini
|
|
|
4
4
|
|
|
5
5
|
This file ships inside both `@roxyapi/ui` and `@roxyapi/ui-react` on npm. After install, read it at `node_modules/@roxyapi/ui/AGENTS.md`.
|
|
6
6
|
|
|
7
|
-
Live preview: <https://roxyapi.github.io/ui/>. Source of truth for component types: the OpenAPI spec at `roxyapi.com/openapi.json`, regenerated into `packages/ui/src/types/types.gen.ts`.
|
|
7
|
+
Live preview: <https://roxyapi.github.io/ui/>. Source of truth for component types: the combined OpenAPI spec at `https://roxyapi.com/api/v2/openapi.json`, regenerated into `packages/ui/src/types/types.gen.ts`. Per-product specs live at `https://roxyapi.com/api/v2/{slug}/openapi.json`.
|
|
8
8
|
|
|
9
9
|
## Identity
|
|
10
10
|
|
|
@@ -22,6 +22,7 @@ Map the natural-language request to a component first; fall back to the table be
|
|
|
22
22
|
| "birth chart", "natal chart", "Western chart", "show me my planets" | `<roxy-natal-chart>` |
|
|
23
23
|
| "match two birth charts", "compare us in Western astrology", "synastry" | `<roxy-synastry-chart>` |
|
|
24
24
|
| "kundli", "Vedic chart", "rashi chart", "South/North Indian chart" | `<roxy-vedic-kundli>` |
|
|
25
|
+
| "D9", "navamsa", "varga chart", "divisional chart", "D10 dasamsa", "D60 shashtiamsa" | `<roxy-divisional-chart>` (request body needs `division: integer`, supported 2,3,4,7,9,10,12,16,20,24,27,30,40,45,60) |
|
|
25
26
|
| "kundli matching", "Guna Milan", "match for marriage", "36-point compatibility" | `<roxy-guna-milan>` |
|
|
26
27
|
| "are we compatible", "compatibility score", "love score" (cross-domain) | `<roxy-compatibility-card>` |
|
|
27
28
|
| "panchang for today", "tithi", "nakshatra", "muhurta", "auspicious times" | `<roxy-panchang-table>` |
|
|
@@ -188,7 +189,7 @@ import type { NatalChartResponse } from '@roxyapi/sdk';
|
|
|
188
189
|
import { createRoxy } from 'https://cdn.jsdelivr.net/npm/@roxyapi/sdk@latest/dist/factory.js';
|
|
189
190
|
const roxy = createRoxy('pk_live_xxx');
|
|
190
191
|
const { data } = await roxy.astrology.generateNatalChart({
|
|
191
|
-
body: { date: '1990-01-15', time: '14:30:00', latitude:
|
|
192
|
+
body: { date: '1990-01-15', time: '14:30:00', latitude: 19.07, longitude: 72.88, timezone: 5.5 },
|
|
192
193
|
});
|
|
193
194
|
document.getElementById('chart').data = data;
|
|
194
195
|
</script>
|
|
@@ -268,8 +269,8 @@ Use a publishable key (`pk_live_*` or `pk_test_*`) for client-side embeds. Get o
|
|
|
268
269
|
data-publishable-key="pk_live_xxx"
|
|
269
270
|
data-date="1990-01-15"
|
|
270
271
|
data-time="14:30:00"
|
|
271
|
-
data-latitude="
|
|
272
|
-
data-longitude="
|
|
272
|
+
data-latitude="19.07"
|
|
273
|
+
data-longitude="72.88"
|
|
273
274
|
data-timezone="5.5"
|
|
274
275
|
></div>
|
|
275
276
|
```
|
|
@@ -283,7 +284,7 @@ A remote MCP server at `roxyapi.com/mcp/{domain}` exposes each RoxyAPI endpoint
|
|
|
283
284
|
```ts
|
|
284
285
|
// Pseudocode for any MCP-aware agent
|
|
285
286
|
const result = await mcp.call('roxyapi.astrology.generate_natal_chart', {
|
|
286
|
-
date: '1990-01-15', time: '14:30:00', latitude:
|
|
287
|
+
date: '1990-01-15', time: '14:30:00', latitude: 19.07, longitude: 72.88, timezone: 5.5,
|
|
287
288
|
});
|
|
288
289
|
document.querySelector('roxy-natal-chart').data = result;
|
|
289
290
|
```
|
|
@@ -303,7 +304,7 @@ const roxy = createRoxy(process.env.ROXY_API_KEY!);
|
|
|
303
304
|
|
|
304
305
|
export default async function Page() {
|
|
305
306
|
const { data } = await roxy.vedicAstrology.generateBirthChart({
|
|
306
|
-
body: { date: '1990-01-15', time: '14:30:00', latitude:
|
|
307
|
+
body: { date: '1990-01-15', time: '14:30:00', latitude: 19.07, longitude: 72.88, timezone: 5.5 },
|
|
307
308
|
});
|
|
308
309
|
return <BirthChartView data={data} />;
|
|
309
310
|
}
|
|
@@ -319,6 +320,27 @@ export default function BirthChartView({ data }: { data: unknown }) {
|
|
|
319
320
|
}
|
|
320
321
|
```
|
|
321
322
|
|
|
323
|
+
### Pattern 7: server-rendered markup (WordPress, JSX SSR, static HTML)
|
|
324
|
+
|
|
325
|
+
When the page is rendered on the server or served from cache, there may be no JavaScript to set the `data` property per element. Render the response into a child `<script type="application/json" class="roxy-data">` instead. The component reads the embedded JSON on load. No per-element script, no API key in the browser.
|
|
326
|
+
|
|
327
|
+
```html
|
|
328
|
+
<roxy-natal-chart>
|
|
329
|
+
<script type="application/json" class="roxy-data">
|
|
330
|
+
{ "planets": [ ], "houses": [ ], "aspects": [ ] }
|
|
331
|
+
</script>
|
|
332
|
+
</roxy-natal-chart>
|
|
333
|
+
```
|
|
334
|
+
|
|
335
|
+
Rules for this pattern:
|
|
336
|
+
|
|
337
|
+
- The JSON must be the unwrapped RoxyAPI response, the same shape you would assign to `element.data`. Do not embed the SDK envelope (`{ data, error, request, response }`); embed `data`.
|
|
338
|
+
- The script must be a direct child of the component and carry both `type="application/json"` and `class="roxy-data"`.
|
|
339
|
+
- The JavaScript property always wins. If you assign `element.data` in script, the markup is ignored. One component covers both server-rendered and dynamic pages with no branching.
|
|
340
|
+
- You can nest a server-rendered HTML fallback inside the same element for no-JavaScript and crawler views. The component reads only the marked script and leaves the fallback in place.
|
|
341
|
+
|
|
342
|
+
This is how the WordPress plugin renders: PHP fetches the response server-side, caches it, and writes the script into the page. The same shape works in any framework that emits HTML.
|
|
343
|
+
|
|
322
344
|
## Theming and dark mode
|
|
323
345
|
|
|
324
346
|
Components react to three signals in priority order. No events to dispatch. No JS bridge to write.
|
package/README.md
CHANGED
|
@@ -207,7 +207,7 @@ Vanilla HTML. No build step. Replace `YOUR_API_KEY` with a publishable key from
|
|
|
207
207
|
import { createRoxy } from 'https://cdn.jsdelivr.net/npm/@roxyapi/sdk@latest/dist/factory.js';
|
|
208
208
|
const roxy = createRoxy('YOUR_API_KEY');
|
|
209
209
|
const { data } = await roxy.astrology.generateNatalChart({
|
|
210
|
-
body: { date: '1990-01-15', time: '14:30:00', latitude:
|
|
210
|
+
body: { date: '1990-01-15', time: '14:30:00', latitude: 19.07, longitude: 72.88, timezone: 5.5 },
|
|
211
211
|
});
|
|
212
212
|
document.getElementById('chart').data = data;
|
|
213
213
|
</script>
|
|
@@ -281,6 +281,22 @@ Always call `/location/search` first. Every chart endpoint expects latitude, lon
|
|
|
281
281
|
|
|
282
282
|
> **Timezone format.** RoxyAPI accepts both forms: a decimal-hour offset (`5.5` for IST, `-5` for EST) or an IANA name (`'Asia/Kolkata'`, `'America/New_York'`). Pick one and stay consistent. The decimal form is shorter and what `/location/search` returns; examples on this page use it. The IANA form is correct over DST boundaries when historical accuracy matters.
|
|
283
283
|
|
|
284
|
+
## Server-rendered, no JavaScript wiring
|
|
285
|
+
|
|
286
|
+
Server-rendered and cached pages (WordPress, JSX SSR, static HTML) cannot always run JavaScript to set the `data` property per element. Render the response into a child `<script type="application/json" class="roxy-data">` on the server instead. The component reads it on load. No per-element script, no API key in the browser.
|
|
287
|
+
|
|
288
|
+
```html
|
|
289
|
+
<roxy-natal-chart>
|
|
290
|
+
<script type="application/json" class="roxy-data">
|
|
291
|
+
{ "planets": [ ... ], "houses": [ ... ], "aspects": [ ... ] }
|
|
292
|
+
</script>
|
|
293
|
+
</roxy-natal-chart>
|
|
294
|
+
```
|
|
295
|
+
|
|
296
|
+
The component picks up the embedded JSON when no `data` property has been set. The JavaScript property always wins: assign `element.data` and the markup is ignored, so dynamic pages and server-rendered pages share one component with no branching. You can nest a server-rendered HTML fallback inside the same element for no-JavaScript and crawler views; the component leaves it untouched and reads only the marked script.
|
|
297
|
+
|
|
298
|
+
This is how the WordPress plugin renders: PHP fetches the response server-side, caches it, and embeds it in the page. The same shape works in any framework that emits HTML.
|
|
299
|
+
|
|
284
300
|
## Most-used components per domain
|
|
285
301
|
|
|
286
302
|
The highest-demand components by domain, in the order you are most likely to ship them. Each pairing shows the SDK call that returns the response shape the component renders. Spec change in the API translates to typed change at the component boundary; the pairing below is derived from the live OpenAPI spec, not invented. Full catalog in the [Components](#components) table.
|
|
@@ -297,7 +313,7 @@ const roxy = createRoxy(process.env.ROXY_API_KEY!);
|
|
|
297
313
|
|
|
298
314
|
// 1. Natal chart. The #1 Western query, called on every onboarding.
|
|
299
315
|
const { data: natal } = await roxy.astrology.generateNatalChart({
|
|
300
|
-
body: { date: '1990-01-15', time: '14:30:00', latitude:
|
|
316
|
+
body: { date: '1990-01-15', time: '14:30:00', latitude: 19.07, longitude: 72.88, timezone: 5.5 },
|
|
301
317
|
});
|
|
302
318
|
<RoxyNatalChart data={natal} />
|
|
303
319
|
|
|
@@ -308,59 +324,67 @@ const { data: horoscope } = await roxy.astrology.getDailyHoroscope({ path: { sig
|
|
|
308
324
|
// 3. Synastry. The dating-app pro-tier feature, full inter-aspect analysis between two charts.
|
|
309
325
|
const { data: synastry } = await roxy.astrology.calculateSynastry({
|
|
310
326
|
body: {
|
|
311
|
-
person1: { date: '1990-01-15', time: '14:30:00', latitude:
|
|
327
|
+
person1: { date: '1990-01-15', time: '14:30:00', latitude: 19.07, longitude: 72.88, timezone: 5.5 },
|
|
312
328
|
person2: { date: '1992-07-22', time: '09:00:00', latitude: 19.07, longitude: 72.87, timezone: 5.5 },
|
|
313
329
|
},
|
|
314
330
|
});
|
|
315
331
|
<RoxySynastryChart data={synastry} />
|
|
316
332
|
```
|
|
317
333
|
|
|
318
|
-
### 2. Vedic astrology (kundli, panchang, dasha, dosha, KP, ashtakavarga)
|
|
334
|
+
### 2. Vedic astrology (kundli, panchang, dasha, dosha, KP, ashtakavarga, divisional)
|
|
319
335
|
|
|
320
|
-
The depth moat. India astrology market: $163M in 2024, projected $1.8B by 2030 (49% CAGR). Kundli, panchang, dasha, dosha,
|
|
336
|
+
The depth moat. India astrology market: $163M in 2024, projected $1.8B by 2030 (49% CAGR). Kundli, panchang, dasha, dosha, KP horary, and divisional charts (D9 Navamsa, D10 Dasamsa) are the highest-traffic Vedic queries for every matrimonial platform, kundli generator, muhurat app, and professional reader.
|
|
321
337
|
|
|
322
338
|
```tsx
|
|
323
339
|
import {
|
|
324
340
|
RoxyVedicKundli, RoxyVedicPlanetsTable, RoxyPanchangTable,
|
|
325
341
|
RoxyDashaTimeline, RoxyDoshaCard, RoxyKpChart, RoxyAshtakavargaGrid,
|
|
342
|
+
RoxyDivisionalChart,
|
|
326
343
|
} from '@roxyapi/ui-react';
|
|
327
344
|
|
|
328
345
|
// Kundli + positions table share a single API call (the same response renders both).
|
|
329
346
|
const { data: kundli } = await roxy.vedicAstrology.generateBirthChart({
|
|
330
|
-
body: { date: '1990-01-15', time: '14:30:00', latitude:
|
|
347
|
+
body: { date: '1990-01-15', time: '14:30:00', latitude: 19.07, longitude: 72.88, timezone: 5.5 },
|
|
331
348
|
});
|
|
332
349
|
<RoxyVedicKundli data={kundli} chart-style="south" />
|
|
333
350
|
<RoxyVedicPlanetsTable data={kundli} />
|
|
334
351
|
|
|
335
352
|
// Panchang. Tithi, nakshatra, yoga, karana, rahu kaal, abhijit muhurta in one call.
|
|
336
353
|
const { data: panchang } = await roxy.vedicAstrology.getDetailedPanchang({
|
|
337
|
-
body: { date: '2026-04-22', latitude:
|
|
354
|
+
body: { date: '2026-04-22', latitude: 19.07, longitude: 72.88 },
|
|
338
355
|
});
|
|
339
356
|
<RoxyPanchangTable data={panchang} />
|
|
340
357
|
|
|
341
358
|
// Vimshottari dasha. The 120-year planetary period timeline.
|
|
342
359
|
const { data: dasha } = await roxy.vedicAstrology.getMajorDashas({
|
|
343
|
-
body: { date: '1990-01-15', time: '14:30:00', latitude:
|
|
360
|
+
body: { date: '1990-01-15', time: '14:30:00', latitude: 19.07, longitude: 72.88, timezone: 5.5 },
|
|
344
361
|
});
|
|
345
362
|
<RoxyDashaTimeline data={dasha} period="major" />
|
|
346
363
|
|
|
347
364
|
// Mangal Dosha. Most-asked matrimonial question in India.
|
|
348
365
|
const { data: dosha } = await roxy.vedicAstrology.checkManglikDosha({
|
|
349
|
-
body: { date: '1990-01-15', time: '14:30:00', latitude:
|
|
366
|
+
body: { date: '1990-01-15', time: '14:30:00', latitude: 19.07, longitude: 72.88, timezone: 5.5 },
|
|
350
367
|
});
|
|
351
368
|
<RoxyDoshaCard data={dosha} />
|
|
352
369
|
|
|
353
370
|
// KP chart. The horary timing tool, sub-lord stellar hierarchy on every cusp.
|
|
354
371
|
const { data: kp } = await roxy.vedicAstrology.generateKpChart({
|
|
355
|
-
body: { date: '1990-01-15', time: '14:30:00', latitude:
|
|
372
|
+
body: { date: '1990-01-15', time: '14:30:00', latitude: 19.07, longitude: 72.88, timezone: 5.5 },
|
|
356
373
|
});
|
|
357
374
|
<RoxyKpChart data={kp} />
|
|
358
375
|
|
|
359
376
|
// Ashtakavarga. Bindu strength heatmap with Sarva, Bhinna, Shodhya Pinda views.
|
|
360
377
|
const { data: ashtaka } = await roxy.vedicAstrology.calculateAshtakavarga({
|
|
361
|
-
body: { date: '1990-01-15', time: '14:30:00', latitude:
|
|
378
|
+
body: { date: '1990-01-15', time: '14:30:00', latitude: 19.07, longitude: 72.88, timezone: 5.5 },
|
|
362
379
|
});
|
|
363
380
|
<RoxyAshtakavargaGrid data={ashtaka} />
|
|
381
|
+
|
|
382
|
+
// Divisional chart (D9 Navamsa shown). `division` is the integer 9 — not "D9".
|
|
383
|
+
// Supported: 2, 3, 4, 7, 9, 10, 12, 16, 20, 24, 27, 30, 40, 45, 60.
|
|
384
|
+
const { data: d9 } = await roxy.vedicAstrology.generateDivisionalChart({
|
|
385
|
+
body: { date: '1990-01-15', time: '14:30:00', latitude: 19.07, longitude: 72.88, timezone: 5.5, division: 9 },
|
|
386
|
+
});
|
|
387
|
+
<RoxyDivisionalChart data={d9} />
|
|
364
388
|
```
|
|
365
389
|
|
|
366
390
|
### 3. Numerology (life path, full chart, personal year)
|
|
@@ -607,6 +631,16 @@ Persist the choice in `localStorage` from your own code; the components do not o
|
|
|
607
631
|
Per-component bundles run 8-10 KB gzipped, capped at 30 KB by CI. The full bundle (every component, helpers, base styles) is around 26 KB gzipped, capped at 150 KB. The React package loads the runtime on mount, so a route that renders one chart pays for one component, not the whole catalog. Pin a concrete version in production for byte-stable cache hits.
|
|
608
632
|
</details>
|
|
609
633
|
|
|
634
|
+
<details>
|
|
635
|
+
<summary><strong>How tall does each component render on mobile?</strong></summary>
|
|
636
|
+
|
|
637
|
+
Charts stay square: every wheel and grid component honours `aspect-ratio: 1 / 1` capped at `max-width: 560px`, so at a 390px phone width the chart itself is around 390px tall.
|
|
638
|
+
|
|
639
|
+
What can grow vertically is the data card around it. `<roxy-natal-chart>` stacks the wheel above the aspect-grid tab, the dignity table, and the planet-reading accordion; the host article on the demo page measures roughly 2100px tall at 390px width because the accordion is fully expanded server-side. Production embeds usually drop the accordion or wrap the chart in a sized container, and the wheel alone fits the fold. Same applies to the synastry chart and the dasha timeline.
|
|
640
|
+
|
|
641
|
+
Rule of thumb: chart-only components (`<roxy-vedic-kundli>`, `<roxy-divisional-chart>`, `<roxy-ashtakavarga-grid>`, `<roxy-tarot-card>`) stay within their aspect ratio. Components that bundle a wheel plus interpretation copy (`<roxy-natal-chart>`, `<roxy-synastry-chart>`, `<roxy-dasha-timeline>`) grow tall to fit their content. Pick the level of detail by component choice.
|
|
642
|
+
</details>
|
|
643
|
+
|
|
610
644
|
<details>
|
|
611
645
|
<summary><strong>Does this work with Next.js App Router, Remix, Nuxt, SvelteKit, and Astro?</strong></summary>
|
|
612
646
|
|
|
@@ -621,7 +655,7 @@ const roxy = createRoxy(process.env.ROXY_API_KEY!);
|
|
|
621
655
|
|
|
622
656
|
export default async function Page() {
|
|
623
657
|
const { data } = await roxy.astrology.generateNatalChart({
|
|
624
|
-
body: { date: '1990-01-15', time: '14:30:00', latitude:
|
|
658
|
+
body: { date: '1990-01-15', time: '14:30:00', latitude: 19.07, longitude: 72.88, timezone: 5.5 },
|
|
625
659
|
});
|
|
626
660
|
return <ChartView data={data} />;
|
|
627
661
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
"use strict";var RoxyUI_ashtakavarga_grid=(()=>{var L=Object.defineProperty;var
|
|
2
|
-
\f\r]`,R=/<(?:(!--|\/[^a-zA-Z])|(\/?[a-zA-Z][^>\s]*)|(\/?$))/g,
|
|
3
|
-
\f\r"'\`<>=]|("|')|))|$)`,"g"),
|
|
1
|
+
"use strict";var RoxyUI_ashtakavarga_grid=(()=>{var L=Object.defineProperty;var nt=Object.getOwnPropertyDescriptor;var Ct=Object.getOwnPropertyNames;var Pt=Object.prototype.hasOwnProperty;var Tt=(i,t)=>{for(var e in t)L(i,e,{get:t[e],enumerable:!0})},kt=(i,t,e,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let s of Ct(t))!Pt.call(i,s)&&s!==e&&L(i,s,{get:()=>t[s],enumerable:!(r=nt(t,s))||r.enumerable});return i};var Rt=i=>kt(L({},"__esModule",{value:!0}),i),q=(i,t,e,r)=>{for(var s=r>1?void 0:r?nt(t,e):t,o=i.length-1,n;o>=0;o--)(n=i[o])&&(s=(r?n(t,e,s):n(s))||s);return r&&s&&L(t,e,s),s};var Xt={};Tt(Xt,{RoxyAshtakavargaGrid:()=>v});var B=globalThis,j=B.ShadowRoot&&(B.ShadyCSS===void 0||B.ShadyCSS.nativeShadow)&&"adoptedStyleSheets"in Document.prototype&&"replace"in CSSStyleSheet.prototype,W=Symbol(),at=new WeakMap,C=class{constructor(t,e,r){if(this._$cssResult$=!0,r!==W)throw Error("CSSResult is not constructable. Use `unsafeCSS` or `css` instead.");this.cssText=t,this.t=e}get styleSheet(){let t=this.o,e=this.t;if(j&&t===void 0){let r=e!==void 0&&e.length===1;r&&(t=at.get(e)),t===void 0&&((this.o=t=new CSSStyleSheet).replaceSync(this.cssText),r&&at.set(e,t))}return t}toString(){return this.cssText}},ht=i=>new C(typeof i=="string"?i:i+"",void 0,W),P=(i,...t)=>{let e=i.length===1?i[0]:t.reduce((r,s,o)=>r+(n=>{if(n._$cssResult$===!0)return n.cssText;if(typeof n=="number")return n;throw Error("Value passed to 'css' function must be a 'css' function result: "+n+". Use 'unsafeCSS' to pass non-literal values, but take care to ensure page security.")})(s)+i[o+1],i[0]);return new C(e,i,W)},lt=(i,t)=>{if(j)i.adoptedStyleSheets=t.map(e=>e instanceof CSSStyleSheet?e:e.styleSheet);else for(let e of t){let r=document.createElement("style"),s=B.litNonce;s!==void 0&&r.setAttribute("nonce",s),r.textContent=e.cssText,i.appendChild(r)}},F=j?i=>i:i=>i instanceof CSSStyleSheet?(t=>{let e="";for(let r of t.cssRules)e+=r.cssText;return ht(e)})(i):i;var{is:Mt,defineProperty:Nt,getOwnPropertyDescriptor:Ot,getOwnPropertyNames:Ht,getOwnPropertySymbols:Ut,getPrototypeOf:Lt}=Object,D=globalThis,ct=D.trustedTypes,qt=ct?ct.emptyScript:"",Bt=D.reactiveElementPolyfillSupport,T=(i,t)=>i,k={toAttribute(i,t){switch(t){case Boolean:i=i?qt:null;break;case Object:case Array:i=i==null?i:JSON.stringify(i)}return i},fromAttribute(i,t){let e=i;switch(t){case Boolean:e=i!==null;break;case Number:e=i===null?null:Number(i);break;case Object:case Array:try{e=JSON.parse(i)}catch{e=null}}return e}},z=(i,t)=>!Mt(i,t),dt={attribute:!0,type:String,converter:k,reflect:!1,useDefault:!1,hasChanged:z};Symbol.metadata??=Symbol("metadata"),D.litPropertyMetadata??=new WeakMap;var f=class extends HTMLElement{static addInitializer(t){this._$Ei(),(this.l??=[]).push(t)}static get observedAttributes(){return this.finalize(),this._$Eh&&[...this._$Eh.keys()]}static createProperty(t,e=dt){if(e.state&&(e.attribute=!1),this._$Ei(),this.prototype.hasOwnProperty(t)&&((e=Object.create(e)).wrapped=!0),this.elementProperties.set(t,e),!e.noAccessor){let r=Symbol(),s=this.getPropertyDescriptor(t,r,e);s!==void 0&&Nt(this.prototype,t,s)}}static getPropertyDescriptor(t,e,r){let{get:s,set:o}=Ot(this.prototype,t)??{get(){return this[e]},set(n){this[e]=n}};return{get:s,set(n){let h=s?.call(this);o?.call(this,n),this.requestUpdate(t,h,r)},configurable:!0,enumerable:!0}}static getPropertyOptions(t){return this.elementProperties.get(t)??dt}static _$Ei(){if(this.hasOwnProperty(T("elementProperties")))return;let t=Lt(this);t.finalize(),t.l!==void 0&&(this.l=[...t.l]),this.elementProperties=new Map(t.elementProperties)}static finalize(){if(this.hasOwnProperty(T("finalized")))return;if(this.finalized=!0,this._$Ei(),this.hasOwnProperty(T("properties"))){let e=this.properties,r=[...Ht(e),...Ut(e)];for(let s of r)this.createProperty(s,e[s])}let t=this[Symbol.metadata];if(t!==null){let e=litPropertyMetadata.get(t);if(e!==void 0)for(let[r,s]of e)this.elementProperties.set(r,s)}this._$Eh=new Map;for(let[e,r]of this.elementProperties){let s=this._$Eu(e,r);s!==void 0&&this._$Eh.set(s,e)}this.elementStyles=this.finalizeStyles(this.styles)}static finalizeStyles(t){let e=[];if(Array.isArray(t)){let r=new Set(t.flat(1/0).reverse());for(let s of r)e.unshift(F(s))}else t!==void 0&&e.push(F(t));return e}static _$Eu(t,e){let r=e.attribute;return r===!1?void 0:typeof r=="string"?r:typeof t=="string"?t.toLowerCase():void 0}constructor(){super(),this._$Ep=void 0,this.isUpdatePending=!1,this.hasUpdated=!1,this._$Em=null,this._$Ev()}_$Ev(){this._$ES=new Promise(t=>this.enableUpdating=t),this._$AL=new Map,this._$E_(),this.requestUpdate(),this.constructor.l?.forEach(t=>t(this))}addController(t){(this._$EO??=new Set).add(t),this.renderRoot!==void 0&&this.isConnected&&t.hostConnected?.()}removeController(t){this._$EO?.delete(t)}_$E_(){let t=new Map,e=this.constructor.elementProperties;for(let r of e.keys())this.hasOwnProperty(r)&&(t.set(r,this[r]),delete this[r]);t.size>0&&(this._$Ep=t)}createRenderRoot(){let t=this.shadowRoot??this.attachShadow(this.constructor.shadowRootOptions);return lt(t,this.constructor.elementStyles),t}connectedCallback(){this.renderRoot??=this.createRenderRoot(),this.enableUpdating(!0),this._$EO?.forEach(t=>t.hostConnected?.())}enableUpdating(t){}disconnectedCallback(){this._$EO?.forEach(t=>t.hostDisconnected?.())}attributeChangedCallback(t,e,r){this._$AK(t,r)}_$ET(t,e){let r=this.constructor.elementProperties.get(t),s=this.constructor._$Eu(t,r);if(s!==void 0&&r.reflect===!0){let o=(r.converter?.toAttribute!==void 0?r.converter:k).toAttribute(e,r.type);this._$Em=t,o==null?this.removeAttribute(s):this.setAttribute(s,o),this._$Em=null}}_$AK(t,e){let r=this.constructor,s=r._$Eh.get(t);if(s!==void 0&&this._$Em!==s){let o=r.getPropertyOptions(s),n=typeof o.converter=="function"?{fromAttribute:o.converter}:o.converter?.fromAttribute!==void 0?o.converter:k;this._$Em=s;let h=n.fromAttribute(e,o.type);this[s]=h??this._$Ej?.get(s)??h,this._$Em=null}}requestUpdate(t,e,r,s=!1,o){if(t!==void 0){let n=this.constructor;if(s===!1&&(o=this[t]),r??=n.getPropertyOptions(t),!((r.hasChanged??z)(o,e)||r.useDefault&&r.reflect&&o===this._$Ej?.get(t)&&!this.hasAttribute(n._$Eu(t,r))))return;this.C(t,e,r)}this.isUpdatePending===!1&&(this._$ES=this._$EP())}C(t,e,{useDefault:r,reflect:s,wrapped:o},n){r&&!(this._$Ej??=new Map).has(t)&&(this._$Ej.set(t,n??e??this[t]),o!==!0||n!==void 0)||(this._$AL.has(t)||(this.hasUpdated||r||(e=void 0),this._$AL.set(t,e)),s===!0&&this._$Em!==t&&(this._$Eq??=new Set).add(t))}async _$EP(){this.isUpdatePending=!0;try{await this._$ES}catch(e){Promise.reject(e)}let t=this.scheduleUpdate();return t!=null&&await t,!this.isUpdatePending}scheduleUpdate(){return this.performUpdate()}performUpdate(){if(!this.isUpdatePending)return;if(!this.hasUpdated){if(this.renderRoot??=this.createRenderRoot(),this._$Ep){for(let[s,o]of this._$Ep)this[s]=o;this._$Ep=void 0}let r=this.constructor.elementProperties;if(r.size>0)for(let[s,o]of r){let{wrapped:n}=o,h=this[s];n!==!0||this._$AL.has(s)||h===void 0||this.C(s,void 0,o,h)}}let t=!1,e=this._$AL;try{t=this.shouldUpdate(e),t?(this.willUpdate(e),this._$EO?.forEach(r=>r.hostUpdate?.()),this.update(e)):this._$EM()}catch(r){throw t=!1,this._$EM(),r}t&&this._$AE(e)}willUpdate(t){}_$AE(t){this._$EO?.forEach(e=>e.hostUpdated?.()),this.hasUpdated||(this.hasUpdated=!0,this.firstUpdated(t)),this.updated(t)}_$EM(){this._$AL=new Map,this.isUpdatePending=!1}get updateComplete(){return this.getUpdateComplete()}getUpdateComplete(){return this._$ES}shouldUpdate(t){return!0}update(t){this._$Eq&&=this._$Eq.forEach(e=>this._$ET(e,this[e])),this._$EM()}updated(t){}firstUpdated(t){}};f.elementStyles=[],f.shadowRootOptions={mode:"open"},f[T("elementProperties")]=new Map,f[T("finalized")]=new Map,Bt?.({ReactiveElement:f}),(D.reactiveElementVersions??=[]).push("2.1.2");var et=globalThis,pt=i=>i,I=et.trustedTypes,ut=I?I.createPolicy("lit-html",{createHTML:i=>i}):void 0,vt="$lit$",y=`lit$${Math.random().toFixed(9).slice(2)}$`,$t="?"+y,jt=`<${$t}>`,_=document,M=()=>_.createComment(""),N=i=>i===null||typeof i!="object"&&typeof i!="function",rt=Array.isArray,Dt=i=>rt(i)||typeof i?.[Symbol.iterator]=="function",Y=`[
|
|
2
|
+
\f\r]`,R=/<(?:(!--|\/[^a-zA-Z])|(\/?[a-zA-Z][^>\s]*)|(\/?$))/g,mt=/-->/g,ft=/>/g,$=RegExp(`>|${Y}(?:([^\\s"'>=/]+)(${Y}*=${Y}*(?:[^
|
|
3
|
+
\f\r"'\`<>=]|("|')|))|$)`,"g"),gt=/'/g,yt=/"/g,xt=/^(?:script|style|textarea|title)$/i,st=i=>(t,...e)=>({_$litType$:i,strings:t,values:e}),u=st(1),se=st(2),ie=st(3),A=Symbol.for("lit-noChange"),c=Symbol.for("lit-nothing"),bt=new WeakMap,x=_.createTreeWalker(_,129);function _t(i,t){if(!rt(i)||!i.hasOwnProperty("raw"))throw Error("invalid template strings array");return ut!==void 0?ut.createHTML(t):t}var zt=(i,t)=>{let e=i.length-1,r=[],s,o=t===2?"<svg>":t===3?"<math>":"",n=R;for(let h=0;h<e;h++){let a=i[h],d,p,l=-1,m=0;for(;m<a.length&&(n.lastIndex=m,p=n.exec(a),p!==null);)m=n.lastIndex,n===R?p[1]==="!--"?n=mt:p[1]!==void 0?n=ft:p[2]!==void 0?(xt.test(p[2])&&(s=RegExp("</"+p[2],"g")),n=$):p[3]!==void 0&&(n=$):n===$?p[0]===">"?(n=s??R,l=-1):p[1]===void 0?l=-2:(l=n.lastIndex-p[2].length,d=p[1],n=p[3]===void 0?$:p[3]==='"'?yt:gt):n===yt||n===gt?n=$:n===mt||n===ft?n=R:(n=$,s=void 0);let g=n===$&&i[h+1].startsWith("/>")?" ":"";o+=n===R?a+jt:l>=0?(r.push(d),a.slice(0,l)+vt+a.slice(l)+y+g):a+y+(l===-2?h:g)}return[_t(i,o+(i[e]||"<?>")+(t===2?"</svg>":t===3?"</math>":"")),r]},O=class i{constructor({strings:t,_$litType$:e},r){let s;this.parts=[];let o=0,n=0,h=t.length-1,a=this.parts,[d,p]=zt(t,e);if(this.el=i.createElement(d,r),x.currentNode=this.el.content,e===2||e===3){let l=this.el.content.firstChild;l.replaceWith(...l.childNodes)}for(;(s=x.nextNode())!==null&&a.length<h;){if(s.nodeType===1){if(s.hasAttributes())for(let l of s.getAttributeNames())if(l.endsWith(vt)){let m=p[n++],g=s.getAttribute(l).split(y),U=/([.?@])?(.*)/.exec(m);a.push({type:1,index:o,name:U[2],strings:g,ctor:U[1]==="."?X:U[1]==="?"?Z:U[1]==="@"?Q:E}),s.removeAttribute(l)}else l.startsWith(y)&&(a.push({type:6,index:o}),s.removeAttribute(l));if(xt.test(s.tagName)){let l=s.textContent.split(y),m=l.length-1;if(m>0){s.textContent=I?I.emptyScript:"";for(let g=0;g<m;g++)s.append(l[g],M()),x.nextNode(),a.push({type:2,index:++o});s.append(l[m],M())}}}else if(s.nodeType===8)if(s.data===$t)a.push({type:2,index:o});else{let l=-1;for(;(l=s.data.indexOf(y,l+1))!==-1;)a.push({type:7,index:o}),l+=y.length-1}o++}}static createElement(t,e){let r=_.createElement("template");return r.innerHTML=t,r}};function w(i,t,e=i,r){if(t===A)return t;let s=r!==void 0?e._$Co?.[r]:e._$Cl,o=N(t)?void 0:t._$litDirective$;return s?.constructor!==o&&(s?._$AO?.(!1),o===void 0?s=void 0:(s=new o(i),s._$AT(i,e,r)),r!==void 0?(e._$Co??=[])[r]=s:e._$Cl=s),s!==void 0&&(t=w(i,s._$AS(i,t.values),s,r)),t}var J=class{constructor(t,e){this._$AV=[],this._$AN=void 0,this._$AD=t,this._$AM=e}get parentNode(){return this._$AM.parentNode}get _$AU(){return this._$AM._$AU}u(t){let{el:{content:e},parts:r}=this._$AD,s=(t?.creationScope??_).importNode(e,!0);x.currentNode=s;let o=x.nextNode(),n=0,h=0,a=r[0];for(;a!==void 0;){if(n===a.index){let d;a.type===2?d=new H(o,o.nextSibling,this,t):a.type===1?d=new a.ctor(o,a.name,a.strings,this,t):a.type===6&&(d=new tt(o,this,t)),this._$AV.push(d),a=r[++h]}n!==a?.index&&(o=x.nextNode(),n++)}return x.currentNode=_,s}p(t){let e=0;for(let r of this._$AV)r!==void 0&&(r.strings!==void 0?(r._$AI(t,r,e),e+=r.strings.length-2):r._$AI(t[e])),e++}},H=class i{get _$AU(){return this._$AM?._$AU??this._$Cv}constructor(t,e,r,s){this.type=2,this._$AH=c,this._$AN=void 0,this._$AA=t,this._$AB=e,this._$AM=r,this.options=s,this._$Cv=s?.isConnected??!0}get parentNode(){let t=this._$AA.parentNode,e=this._$AM;return e!==void 0&&t?.nodeType===11&&(t=e.parentNode),t}get startNode(){return this._$AA}get endNode(){return this._$AB}_$AI(t,e=this){t=w(this,t,e),N(t)?t===c||t==null||t===""?(this._$AH!==c&&this._$AR(),this._$AH=c):t!==this._$AH&&t!==A&&this._(t):t._$litType$!==void 0?this.$(t):t.nodeType!==void 0?this.T(t):Dt(t)?this.k(t):this._(t)}O(t){return this._$AA.parentNode.insertBefore(t,this._$AB)}T(t){this._$AH!==t&&(this._$AR(),this._$AH=this.O(t))}_(t){this._$AH!==c&&N(this._$AH)?this._$AA.nextSibling.data=t:this.T(_.createTextNode(t)),this._$AH=t}$(t){let{values:e,_$litType$:r}=t,s=typeof r=="number"?this._$AC(t):(r.el===void 0&&(r.el=O.createElement(_t(r.h,r.h[0]),this.options)),r);if(this._$AH?._$AD===s)this._$AH.p(e);else{let o=new J(s,this),n=o.u(this.options);o.p(e),this.T(n),this._$AH=o}}_$AC(t){let e=bt.get(t.strings);return e===void 0&&bt.set(t.strings,e=new O(t)),e}k(t){rt(this._$AH)||(this._$AH=[],this._$AR());let e=this._$AH,r,s=0;for(let o of t)s===e.length?e.push(r=new i(this.O(M()),this.O(M()),this,this.options)):r=e[s],r._$AI(o),s++;s<e.length&&(this._$AR(r&&r._$AB.nextSibling,s),e.length=s)}_$AR(t=this._$AA.nextSibling,e){for(this._$AP?.(!1,!0,e);t!==this._$AB;){let r=pt(t).nextSibling;pt(t).remove(),t=r}}setConnected(t){this._$AM===void 0&&(this._$Cv=t,this._$AP?.(t))}},E=class{get tagName(){return this.element.tagName}get _$AU(){return this._$AM._$AU}constructor(t,e,r,s,o){this.type=1,this._$AH=c,this._$AN=void 0,this.element=t,this.name=e,this._$AM=s,this.options=o,r.length>2||r[0]!==""||r[1]!==""?(this._$AH=Array(r.length-1).fill(new String),this.strings=r):this._$AH=c}_$AI(t,e=this,r,s){let o=this.strings,n=!1;if(o===void 0)t=w(this,t,e,0),n=!N(t)||t!==this._$AH&&t!==A,n&&(this._$AH=t);else{let h=t,a,d;for(t=o[0],a=0;a<o.length-1;a++)d=w(this,h[r+a],e,a),d===A&&(d=this._$AH[a]),n||=!N(d)||d!==this._$AH[a],d===c?t=c:t!==c&&(t+=(d??"")+o[a+1]),this._$AH[a]=d}n&&!s&&this.j(t)}j(t){t===c?this.element.removeAttribute(this.name):this.element.setAttribute(this.name,t??"")}},X=class extends E{constructor(){super(...arguments),this.type=3}j(t){this.element[this.name]=t===c?void 0:t}},Z=class extends E{constructor(){super(...arguments),this.type=4}j(t){this.element.toggleAttribute(this.name,!!t&&t!==c)}},Q=class extends E{constructor(t,e,r,s,o){super(t,e,r,s,o),this.type=5}_$AI(t,e=this){if((t=w(this,t,e,0)??c)===A)return;let r=this._$AH,s=t===c&&r!==c||t.capture!==r.capture||t.once!==r.once||t.passive!==r.passive,o=t!==c&&(r===c||s);s&&this.element.removeEventListener(this.name,this,r),o&&this.element.addEventListener(this.name,this,t),this._$AH=t}handleEvent(t){typeof this._$AH=="function"?this._$AH.call(this.options?.host??this.element,t):this._$AH.handleEvent(t)}},tt=class{constructor(t,e,r){this.element=t,this.type=6,this._$AN=void 0,this._$AM=e,this.options=r}get _$AU(){return this._$AM._$AU}_$AI(t){w(this,t)}};var It=et.litHtmlPolyfillSupport;It?.(O,H),(et.litHtmlVersions??=[]).push("3.3.2");var At=(i,t,e)=>{let r=e?.renderBefore??t,s=r._$litPart$;if(s===void 0){let o=e?.renderBefore??null;r._$litPart$=s=new H(t.insertBefore(M(),o),o,void 0,e??{})}return s._$AI(i),s};var it=globalThis,b=class extends f{constructor(){super(...arguments),this.renderOptions={host:this},this._$Do=void 0}createRenderRoot(){let t=super.createRenderRoot();return this.renderOptions.renderBefore??=t.firstChild,t}update(t){let e=this.render();this.hasUpdated||(this.renderOptions.isConnected=this.isConnected),super.update(t),this._$Do=At(e,this.renderRoot,this.renderOptions)}connectedCallback(){super.connectedCallback(),this._$Do?.setConnected(!0)}disconnectedCallback(){super.disconnectedCallback(),this._$Do?.setConnected(!1)}render(){return A}};b._$litElement$=!0,b.finalized=!0,it.litElementHydrateSupport?.({LitElement:b});var Vt=it.litElementPolyfillSupport;Vt?.({LitElement:b});(it.litElementVersions??=[]).push("4.2.2");var St=i=>(t,e)=>{e!==void 0?e.addInitializer(()=>{customElements.define(i,t)}):customElements.define(i,t)};var Kt={attribute:!0,type:String,converter:k,reflect:!1,hasChanged:z},Gt=(i=Kt,t,e)=>{let{kind:r,metadata:s}=e,o=globalThis.litPropertyMetadata.get(s);if(o===void 0&&globalThis.litPropertyMetadata.set(s,o=new Map),r==="setter"&&((i=Object.create(i)).wrapped=!0),o.set(e.name,i),r==="accessor"){let{name:n}=e;return{set(h){let a=t.get.call(this);t.set.call(this,h),this.requestUpdate(n,a,i,!0,h)},init(h){return h!==void 0&&this.C(n,void 0,i,h),h}}}if(r==="setter"){let{name:n}=e;return function(h){let a=this[n];t.call(this,h),this.requestUpdate(n,a,i,!0,h)}}throw Error("Unsupported decorator location: "+r)};function V(i){return(t,e)=>typeof e=="object"?Gt(i,t,e):((r,s,o)=>{let n=s.hasOwnProperty(o);return s.constructor.createProperty(o,r),n?Object.getOwnPropertyDescriptor(s,o):void 0})(i,t,e)}function wt(i){return V({...i,state:!0,attribute:!1})}var ot={Aries:"\u2648",Taurus:"\u2649",Gemini:"\u264A",Cancer:"\u264B",Leo:"\u264C",Virgo:"\u264D",Libra:"\u264E",Scorpio:"\u264F",Sagittarius:"\u2650",Capricorn:"\u2651",Aquarius:"\u2652",Pisces:"\u2653"};var Wt=["Aries","Taurus","Gemini","Cancer","Leo","Virgo","Libra","Scorpio","Sagittarius","Capricorn","Aquarius","Pisces"],Ve=Wt.map(i=>i.toLowerCase());var Et=P`
|
|
4
4
|
:host {
|
|
5
5
|
display: block;
|
|
6
6
|
container-type: inline-size;
|
|
@@ -96,7 +96,7 @@
|
|
|
96
96
|
:host {
|
|
97
97
|
font-variant-emoji: text;
|
|
98
98
|
}
|
|
99
|
-
`;var
|
|
99
|
+
`;var Ft="roxy-data";function Yt(i){return i.nodeName==="SCRIPT"&&i.getAttribute("type")==="application/json"}var G=class{constructor(t){this.host=t,t.addController(this)}hostConnected(){if(this.host.data!=null)return;let t=this.read();t!==void 0&&(this.host.data=t,this.host.requestUpdate())}read(){let t=this.findInlineScript();return t?this.parse(t.textContent):void 0}findInlineScript(){for(let t of Array.from(this.host.children))if(Yt(t)&&t.classList.contains(Ft))return t;return null}parse(t){if(t?.trim())try{return JSON.parse(t)}catch{return}}};var Jt={sarva:"Sarvashtakavarga",bhinna:"Bhinnashtakavarga",pinda:"Shodhya Pinda"},S=["sarva","bhinna","pinda"],v=class extends b{constructor(){super();this.data=null;this.activeTab="sarva";new G(this)}render(){if(!this.data)return u`<div class="roxy-empty" role="status">No ashtakavarga data</div>`;let e=this.data.signs??[];return u`<div class="wrap" aria-label="Ashtakavarga grid">
|
|
100
100
|
<div class="head">
|
|
101
101
|
<h2 class="title">Ashtakavarga</h2>
|
|
102
102
|
${e.length?u`<p class="subtitle">${e.length} signs</p>`:c}
|
|
@@ -117,7 +117,7 @@
|
|
|
117
117
|
tabindex=${this.activeTab===r?"0":"-1"}
|
|
118
118
|
@click=${()=>{this.activeTab=r}}
|
|
119
119
|
>
|
|
120
|
-
${
|
|
120
|
+
${Jt[r]}
|
|
121
121
|
</button>`)}
|
|
122
122
|
</div>
|
|
123
123
|
|
|
@@ -137,14 +137,14 @@
|
|
|
137
137
|
</tr>
|
|
138
138
|
</thead>
|
|
139
139
|
<tbody>
|
|
140
|
-
${e.map((s,o)=>{let
|
|
140
|
+
${e.map((s,o)=>{let n=r.bindus[o]??0,h=this.sarvaHeat(n);return u`<tr>
|
|
141
141
|
<td>
|
|
142
142
|
<div class="planet-cell">
|
|
143
|
-
<span class="glyph" aria-hidden="true">${
|
|
143
|
+
<span class="glyph" aria-hidden="true">${ot[s]??""}</span>
|
|
144
144
|
${s}
|
|
145
145
|
</div>
|
|
146
146
|
</td>
|
|
147
|
-
<td class="${`heat-cell ${h}`}">${
|
|
147
|
+
<td class="${`heat-cell ${h}`}">${n}</td>
|
|
148
148
|
</tr>`})}
|
|
149
149
|
</tbody>
|
|
150
150
|
<tfoot>
|
|
@@ -159,14 +159,14 @@
|
|
|
159
159
|
<thead>
|
|
160
160
|
<tr>
|
|
161
161
|
<th scope="col">Planet</th>
|
|
162
|
-
${e.map(s=>u`<th scope="col" title=${s}>${
|
|
162
|
+
${e.map(s=>u`<th scope="col" title=${s}>${ot[s]??s.slice(0,2)}</th>`)}
|
|
163
163
|
<th scope="col">Total</th>
|
|
164
164
|
</tr>
|
|
165
165
|
</thead>
|
|
166
166
|
<tbody>
|
|
167
167
|
${r.map(s=>u`<tr>
|
|
168
168
|
<td>${s.planet}</td>
|
|
169
|
-
${s.bindus.map(o=>{let
|
|
169
|
+
${s.bindus.map(o=>{let n=this.bhinnaHeat(o);return u`<td class="${`heat-cell ${n}`}">${o}</td>`})}
|
|
170
170
|
<td>${s.total}</td>
|
|
171
171
|
</tr>`)}
|
|
172
172
|
</tbody>
|
|
@@ -190,7 +190,7 @@
|
|
|
190
190
|
</tr>`)}
|
|
191
191
|
</tbody>
|
|
192
192
|
</table>
|
|
193
|
-
</div>`:u`<p class="roxy-empty">No shodhya pinda data</p>`}};v.styles=[
|
|
193
|
+
</div>`:u`<p class="roxy-empty">No shodhya pinda data</p>`}};v.styles=[Et,P`
|
|
194
194
|
.wrap {
|
|
195
195
|
display: grid;
|
|
196
196
|
gap: var(--roxy-space-md, 1rem);
|
|
@@ -359,7 +359,7 @@
|
|
|
359
359
|
transparent 100%
|
|
360
360
|
);
|
|
361
361
|
}
|
|
362
|
-
`],
|
|
362
|
+
`],q([V({attribute:!1})],v.prototype,"data",2),q([wt()],v.prototype,"activeTab",2),v=q([St("roxy-ashtakavarga-grid")],v);return Rt(Xt);})();
|
|
363
363
|
/*! Bundled license information:
|
|
364
364
|
|
|
365
365
|
@lit/reactive-element/css-tag.js:
|