@roxyapi/ui-vue 0.13.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.
Files changed (230) hide show
  1. package/AGENTS.md +487 -0
  2. package/LICENSE +21 -0
  3. package/README.md +941 -0
  4. package/dist/components/angel-number-card.d.ts +58 -0
  5. package/dist/components/angel-number-card.d.ts.map +1 -0
  6. package/dist/components/angel-number-card.js +2 -0
  7. package/dist/components/angel-number-card.js.map +7 -0
  8. package/dist/components/angel-number-lookup.d.ts +58 -0
  9. package/dist/components/angel-number-lookup.d.ts.map +1 -0
  10. package/dist/components/angel-number-lookup.js +2 -0
  11. package/dist/components/angel-number-lookup.js.map +7 -0
  12. package/dist/components/ashtakavarga-grid.d.ts +58 -0
  13. package/dist/components/ashtakavarga-grid.d.ts.map +1 -0
  14. package/dist/components/ashtakavarga-grid.js +2 -0
  15. package/dist/components/ashtakavarga-grid.js.map +7 -0
  16. package/dist/components/aspects-table.d.ts +58 -0
  17. package/dist/components/aspects-table.d.ts.map +1 -0
  18. package/dist/components/aspects-table.js +2 -0
  19. package/dist/components/aspects-table.js.map +7 -0
  20. package/dist/components/astrocartography-map.d.ts +58 -0
  21. package/dist/components/astrocartography-map.d.ts.map +1 -0
  22. package/dist/components/astrocartography-map.js +2 -0
  23. package/dist/components/astrocartography-map.js.map +7 -0
  24. package/dist/components/biorhythm-chart.d.ts +66 -0
  25. package/dist/components/biorhythm-chart.d.ts.map +1 -0
  26. package/dist/components/biorhythm-chart.js +2 -0
  27. package/dist/components/biorhythm-chart.js.map +7 -0
  28. package/dist/components/bodygraph.d.ts +58 -0
  29. package/dist/components/bodygraph.d.ts.map +1 -0
  30. package/dist/components/bodygraph.js +2 -0
  31. package/dist/components/bodygraph.js.map +7 -0
  32. package/dist/components/choghadiya-grid.d.ts +58 -0
  33. package/dist/components/choghadiya-grid.d.ts.map +1 -0
  34. package/dist/components/choghadiya-grid.js +2 -0
  35. package/dist/components/choghadiya-grid.js.map +7 -0
  36. package/dist/components/compatibility-card.d.ts +66 -0
  37. package/dist/components/compatibility-card.d.ts.map +1 -0
  38. package/dist/components/compatibility-card.js +2 -0
  39. package/dist/components/compatibility-card.js.map +7 -0
  40. package/dist/components/crystal-card.d.ts +58 -0
  41. package/dist/components/crystal-card.d.ts.map +1 -0
  42. package/dist/components/crystal-card.js +2 -0
  43. package/dist/components/crystal-card.js.map +7 -0
  44. package/dist/components/crystal-grid.d.ts +66 -0
  45. package/dist/components/crystal-grid.d.ts.map +1 -0
  46. package/dist/components/crystal-grid.js +2 -0
  47. package/dist/components/crystal-grid.js.map +7 -0
  48. package/dist/components/dasha-timeline.d.ts +66 -0
  49. package/dist/components/dasha-timeline.d.ts.map +1 -0
  50. package/dist/components/dasha-timeline.js +2 -0
  51. package/dist/components/dasha-timeline.js.map +7 -0
  52. package/dist/components/data.d.ts +4 -0
  53. package/dist/components/data.d.ts.map +1 -0
  54. package/dist/components/data.js +2 -0
  55. package/dist/components/data.js.map +7 -0
  56. package/dist/components/divisional-chart.d.ts +66 -0
  57. package/dist/components/divisional-chart.d.ts.map +1 -0
  58. package/dist/components/divisional-chart.js +2 -0
  59. package/dist/components/divisional-chart.js.map +7 -0
  60. package/dist/components/dosha-card.d.ts +66 -0
  61. package/dist/components/dosha-card.d.ts.map +1 -0
  62. package/dist/components/dosha-card.js +2 -0
  63. package/dist/components/dosha-card.js.map +7 -0
  64. package/dist/components/dream-card.d.ts +58 -0
  65. package/dist/components/dream-card.d.ts.map +1 -0
  66. package/dist/components/dream-card.js +2 -0
  67. package/dist/components/dream-card.js.map +7 -0
  68. package/dist/components/dream-search.d.ts +58 -0
  69. package/dist/components/dream-search.d.ts.map +1 -0
  70. package/dist/components/dream-search.js +2 -0
  71. package/dist/components/dream-search.js.map +7 -0
  72. package/dist/components/endpoint-form.d.ts +41 -0
  73. package/dist/components/endpoint-form.d.ts.map +1 -0
  74. package/dist/components/endpoint-form.js +2 -0
  75. package/dist/components/endpoint-form.js.map +7 -0
  76. package/dist/components/fixed-stars.d.ts +58 -0
  77. package/dist/components/fixed-stars.d.ts.map +1 -0
  78. package/dist/components/fixed-stars.js +2 -0
  79. package/dist/components/fixed-stars.js.map +7 -0
  80. package/dist/components/forecast-digest.d.ts +58 -0
  81. package/dist/components/forecast-digest.d.ts.map +1 -0
  82. package/dist/components/forecast-digest.js +2 -0
  83. package/dist/components/forecast-digest.js.map +7 -0
  84. package/dist/components/forecast-timeline.d.ts +58 -0
  85. package/dist/components/forecast-timeline.d.ts.map +1 -0
  86. package/dist/components/forecast-timeline.js +2 -0
  87. package/dist/components/forecast-timeline.js.map +7 -0
  88. package/dist/components/guna-milan.d.ts +58 -0
  89. package/dist/components/guna-milan.d.ts.map +1 -0
  90. package/dist/components/guna-milan.js +2 -0
  91. package/dist/components/guna-milan.js.map +7 -0
  92. package/dist/components/hd-connection.d.ts +58 -0
  93. package/dist/components/hd-connection.d.ts.map +1 -0
  94. package/dist/components/hd-connection.js +2 -0
  95. package/dist/components/hd-connection.js.map +7 -0
  96. package/dist/components/hd-penta.d.ts +58 -0
  97. package/dist/components/hd-penta.d.ts.map +1 -0
  98. package/dist/components/hd-penta.js +2 -0
  99. package/dist/components/hd-penta.js.map +7 -0
  100. package/dist/components/hd-type-card.d.ts +58 -0
  101. package/dist/components/hd-type-card.d.ts.map +1 -0
  102. package/dist/components/hd-type-card.js +2 -0
  103. package/dist/components/hd-type-card.js.map +7 -0
  104. package/dist/components/hd-variables.d.ts +58 -0
  105. package/dist/components/hd-variables.d.ts.map +1 -0
  106. package/dist/components/hd-variables.js +2 -0
  107. package/dist/components/hd-variables.js.map +7 -0
  108. package/dist/components/hexagram.d.ts +66 -0
  109. package/dist/components/hexagram.d.ts.map +1 -0
  110. package/dist/components/hexagram.js +2 -0
  111. package/dist/components/hexagram.js.map +7 -0
  112. package/dist/components/hora-table.d.ts +58 -0
  113. package/dist/components/hora-table.d.ts.map +1 -0
  114. package/dist/components/hora-table.js +2 -0
  115. package/dist/components/hora-table.js.map +7 -0
  116. package/dist/components/horoscope-card.d.ts +66 -0
  117. package/dist/components/horoscope-card.d.ts.map +1 -0
  118. package/dist/components/horoscope-card.js +2 -0
  119. package/dist/components/horoscope-card.js.map +7 -0
  120. package/dist/components/kp-chart.d.ts +58 -0
  121. package/dist/components/kp-chart.d.ts.map +1 -0
  122. package/dist/components/kp-chart.js +2 -0
  123. package/dist/components/kp-chart.js.map +7 -0
  124. package/dist/components/kp-planets-table.d.ts +58 -0
  125. package/dist/components/kp-planets-table.d.ts.map +1 -0
  126. package/dist/components/kp-planets-table.js +2 -0
  127. package/dist/components/kp-planets-table.js.map +7 -0
  128. package/dist/components/kp-ruling-planets.d.ts +58 -0
  129. package/dist/components/kp-ruling-planets.d.ts.map +1 -0
  130. package/dist/components/kp-ruling-planets.js +2 -0
  131. package/dist/components/kp-ruling-planets.js.map +7 -0
  132. package/dist/components/local-space-compass.d.ts +58 -0
  133. package/dist/components/local-space-compass.d.ts.map +1 -0
  134. package/dist/components/local-space-compass.js +2 -0
  135. package/dist/components/local-space-compass.js.map +7 -0
  136. package/dist/components/location-search.d.ts +37 -0
  137. package/dist/components/location-search.d.ts.map +1 -0
  138. package/dist/components/location-search.js +2 -0
  139. package/dist/components/location-search.js.map +7 -0
  140. package/dist/components/moon-phase.d.ts +66 -0
  141. package/dist/components/moon-phase.d.ts.map +1 -0
  142. package/dist/components/moon-phase.js +2 -0
  143. package/dist/components/moon-phase.js.map +7 -0
  144. package/dist/components/nakshatra-card.d.ts +58 -0
  145. package/dist/components/nakshatra-card.d.ts.map +1 -0
  146. package/dist/components/nakshatra-card.js +2 -0
  147. package/dist/components/nakshatra-card.js.map +7 -0
  148. package/dist/components/natal-chart.d.ts +66 -0
  149. package/dist/components/natal-chart.d.ts.map +1 -0
  150. package/dist/components/natal-chart.js +2 -0
  151. package/dist/components/natal-chart.js.map +7 -0
  152. package/dist/components/numerology-card.d.ts +66 -0
  153. package/dist/components/numerology-card.d.ts.map +1 -0
  154. package/dist/components/numerology-card.js +2 -0
  155. package/dist/components/numerology-card.js.map +7 -0
  156. package/dist/components/panchang-table.d.ts +66 -0
  157. package/dist/components/panchang-table.d.ts.map +1 -0
  158. package/dist/components/panchang-table.js +2 -0
  159. package/dist/components/panchang-table.js.map +7 -0
  160. package/dist/components/positions-table.d.ts +66 -0
  161. package/dist/components/positions-table.d.ts.map +1 -0
  162. package/dist/components/positions-table.js +2 -0
  163. package/dist/components/positions-table.js.map +7 -0
  164. package/dist/components/profection-card.d.ts +58 -0
  165. package/dist/components/profection-card.d.ts.map +1 -0
  166. package/dist/components/profection-card.js +2 -0
  167. package/dist/components/profection-card.js.map +7 -0
  168. package/dist/components/reference-card.d.ts +58 -0
  169. package/dist/components/reference-card.d.ts.map +1 -0
  170. package/dist/components/reference-card.js +2 -0
  171. package/dist/components/reference-card.js.map +7 -0
  172. package/dist/components/relocation-wheel.d.ts +58 -0
  173. package/dist/components/relocation-wheel.d.ts.map +1 -0
  174. package/dist/components/relocation-wheel.js +2 -0
  175. package/dist/components/relocation-wheel.js.map +7 -0
  176. package/dist/components/shadbala-table.d.ts +58 -0
  177. package/dist/components/shadbala-table.d.ts.map +1 -0
  178. package/dist/components/shadbala-table.js +2 -0
  179. package/dist/components/shadbala-table.js.map +7 -0
  180. package/dist/components/synastry-chart.d.ts +65 -0
  181. package/dist/components/synastry-chart.d.ts.map +1 -0
  182. package/dist/components/synastry-chart.js +2 -0
  183. package/dist/components/synastry-chart.js.map +7 -0
  184. package/dist/components/tarot-card.d.ts +58 -0
  185. package/dist/components/tarot-card.d.ts.map +1 -0
  186. package/dist/components/tarot-card.js +2 -0
  187. package/dist/components/tarot-card.js.map +7 -0
  188. package/dist/components/tarot-catalog.d.ts +66 -0
  189. package/dist/components/tarot-catalog.d.ts.map +1 -0
  190. package/dist/components/tarot-catalog.js +2 -0
  191. package/dist/components/tarot-catalog.js.map +7 -0
  192. package/dist/components/tarot-spread.d.ts +66 -0
  193. package/dist/components/tarot-spread.d.ts.map +1 -0
  194. package/dist/components/tarot-spread.js +2 -0
  195. package/dist/components/tarot-spread.js.map +7 -0
  196. package/dist/components/transits-table.d.ts +58 -0
  197. package/dist/components/transits-table.d.ts.map +1 -0
  198. package/dist/components/transits-table.js +2 -0
  199. package/dist/components/transits-table.js.map +7 -0
  200. package/dist/components/vedic-aspects.d.ts +58 -0
  201. package/dist/components/vedic-aspects.d.ts.map +1 -0
  202. package/dist/components/vedic-aspects.js +2 -0
  203. package/dist/components/vedic-aspects.js.map +7 -0
  204. package/dist/components/vedic-kundli.d.ts +82 -0
  205. package/dist/components/vedic-kundli.d.ts.map +1 -0
  206. package/dist/components/vedic-kundli.js +2 -0
  207. package/dist/components/vedic-kundli.js.map +7 -0
  208. package/dist/components/vedic-planets-table.d.ts +58 -0
  209. package/dist/components/vedic-planets-table.d.ts.map +1 -0
  210. package/dist/components/vedic-planets-table.js +2 -0
  211. package/dist/components/vedic-planets-table.js.map +7 -0
  212. package/dist/components/western-planets-table.d.ts +58 -0
  213. package/dist/components/western-planets-table.d.ts.map +1 -0
  214. package/dist/components/western-planets-table.js +2 -0
  215. package/dist/components/western-planets-table.js.map +7 -0
  216. package/dist/components/yoga-list.d.ts +60 -0
  217. package/dist/components/yoga-list.d.ts.map +1 -0
  218. package/dist/components/yoga-list.js +2 -0
  219. package/dist/components/yoga-list.js.map +7 -0
  220. package/dist/index.cjs +2 -0
  221. package/dist/index.cjs.map +7 -0
  222. package/dist/index.d.ts +56 -0
  223. package/dist/index.d.ts.map +1 -0
  224. package/dist/index.js +2 -0
  225. package/dist/index.js.map +7 -0
  226. package/dist/load-ui.d.ts +4 -0
  227. package/dist/load-ui.d.ts.map +1 -0
  228. package/dist/load-ui.js +2 -0
  229. package/dist/load-ui.js.map +7 -0
  230. package/package.json +69 -0
package/AGENTS.md ADDED
@@ -0,0 +1,487 @@
1
+ # AGENTS.md
2
+
3
+ This file teaches AI coding agents (Claude Code, Cursor, Copilot, Codex, Gemini CLI, and any MCP-compatible client) how to use Roxy UI when integrating RoxyAPI into a project.
4
+
5
+ This file ships inside `@roxyapi/ui`, `@roxyapi/ui-react`, and `@roxyapi/ui-vue` on npm. After install, read it at `node_modules/@roxyapi/ui/AGENTS.md`.
6
+
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
+
9
+ ## Identity
10
+
11
+ Roxy UI is the official web component library for the RoxyAPI catalog. Components and helpers cover Western astrology, Vedic astrology, numerology, tarot, Human Design, forecast, biorhythm, I Ching, crystals, dreams, angel numbers, with the location helper for geocoding. New endpoints regenerate component types automatically.
12
+
13
+ ## Decision tree for picking a component
14
+
15
+ ### Pick by user phrase
16
+
17
+ Map the natural-language request to a component first; fall back to the table below if the request names a specific endpoint.
18
+
19
+ | If the user says... | Render |
20
+ |---|---|
21
+ | "daily horoscope for `{sign}`", "weekly horoscope", "monthly horoscope" | `<roxy-horoscope-card>` |
22
+ | "birth chart", "natal chart", "Western chart", "show me my planets" | `<roxy-natal-chart>` |
23
+ | "match two birth charts", "compare us in Western astrology", "synastry" | `<roxy-synastry-chart>` |
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) |
26
+ | "kundli matching", "Guna Milan", "match for marriage", "36-point compatibility" | `<roxy-guna-milan>` |
27
+ | "are we compatible", "compatibility score", "love score" (cross-domain) | `<roxy-compatibility-card>` |
28
+ | "panchang for today", "tithi", "nakshatra", "muhurta", "auspicious times" | `<roxy-panchang-table>` |
29
+ | "dasha", "mahadasha", "current planetary period", "Vimshottari" | `<roxy-dasha-timeline>` |
30
+ | "manglik", "kalsarpa", "sadhesati", "any doshas in my chart" | `<roxy-dosha-card>` |
31
+ | "KP planets", "sub-lord", "Krishnamurti" | `<roxy-kp-planets-table>` |
32
+ | "life path number", "expression number", "personal year", "numerology chart" | `<roxy-numerology-card>` |
33
+ | "draw a tarot card", "card of the day", "card meaning" | `<roxy-tarot-card>` |
34
+ | "tarot reading", "three-card spread", "Celtic Cross", "yes or no tarot" | `<roxy-tarot-spread>` |
35
+ | "Human Design chart", "bodygraph", "my type and authority", "defined centers", "channels and gates", "what does my profile mean", "what does gate 61 line 5 mean" | `<roxy-bodygraph>` |
36
+ | "forecast", "what is coming up", "upcoming transits and events", "timeline of my year" | `<roxy-forecast-timeline>` |
37
+ | "biorhythm", "physical/emotional/intellectual cycle", "critical days" | `<roxy-biorhythm-chart>` |
38
+ | "I Ching", "hexagram", "cast the coins", "Book of Changes" | `<roxy-hexagram>` |
39
+ | "moon phase", "moon calendar", "next full moon", "current moon" | `<roxy-moon-phase>` |
40
+ | "what does my dream mean", "dream symbol", "dream dictionary", "I dreamt of {symbol}" | `<roxy-dream-card>` |
41
+ | "angel number {n}", "meaning of 111 / 222 / 1111", "I keep seeing this number" | `<roxy-angel-number-card>` |
42
+ | "what does {any number} mean", "analyze this number", "is 1234 an angel number" | `<roxy-angel-number-lookup>` |
43
+ | "crystals for {chakra}", "healing stones", "birthstone for {month}", "crystals for {sign}" | `<roxy-crystal-grid>` |
44
+ | "search a city", "geocode", "lat/long for a place" | `<roxy-location-search>` |
45
+ | "build a form for endpoint X" | `<roxy-endpoint-form>` |
46
+
47
+ **Fallback rule.** If the response shape does not match any component above, render with `<roxy-data>`. It accepts any RoxyAPI response and produces a structured layout from the JSON.
48
+
49
+ ### Endpoint reference
50
+
51
+ Use the table below for the formal endpoint to component mapping.
52
+
53
+ <!-- BEGIN:COMPONENTS -->
54
+ | Element | Domain | Endpoint(s) | What it renders |
55
+ |---|---|---|---|
56
+ | `<roxy-natal-chart>` | Western | POST /astrology/natal-chart | Natal chart wheel with planet glyphs and aspect lines |
57
+ | `<roxy-synastry-chart>` | Western | POST /astrology/synastry | Dual-wheel synastry with inter-aspects table |
58
+ | `<roxy-western-planets-table>` | Western | POST /astrology/natal-chart | Sign, degree, house, motion columns plus ASC, MC, PoF, Vertex |
59
+ | `<roxy-transits-table>` | Western | POST /astrology/transits | Transit planet positions plus optional aspects to a natal chart |
60
+ | `<roxy-aspects-table>` | Western | POST /astrology/aspects, /astrology/transit-aspects, /astrology/aspect-patterns | Aspect rows coloured by nature with orb and strength, plus detected chart patterns |
61
+ | `<roxy-moon-phase>` | Western | GET /astrology/moon-phase/{current,upcoming,calendar/...} | Moon phase card and calendar |
62
+ | `<roxy-horoscope-card>` | Western | GET /astrology/horoscope/{sign}/{daily,weekly,monthly} | Daily, weekly, or monthly horoscope card |
63
+ | `<roxy-astrocartography-map>` | Western | POST /astrology/astrocartography | World map of planetary MC, IC, Ascendant, and Descendant lines with per-line interpretations |
64
+ | `<roxy-local-space-compass>` | Western | POST /astrology/local-space | Compass dial of planetary azimuth lines from the birthplace, dimmed below the horizon |
65
+ | `<roxy-relocation-wheel>` | Western | POST /astrology/relocation-chart | Relocated chart wheel plus the move geometry, angular planets, and planets that change house |
66
+ | `<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 |
67
+ | `<roxy-fixed-stars>` | Western | POST /astrology/fixed-stars | Star to natal point conjunctions with readings, plus a catalog of position, magnitude, nature, and keywords |
68
+ | `<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 |
69
+ | `<roxy-compatibility-card>` | Cross | POST /astrology/compatibility-score, /numerology/compatibility, /biorhythm/compatibility | Score card with category breakdown |
70
+ | `<roxy-vedic-kundli>` | Vedic | POST /vedic-astrology/birth-chart | South, North, or East Indian kundli with degree detail and optional Chandra Lagna view |
71
+ | `<roxy-divisional-chart>` | Vedic | POST /vedic-astrology/divisional-chart | Generic divisional varga wheel from D2 Hora to D60 Shashtiamsa |
72
+ | `<roxy-kp-chart>` | Vedic (KP) | POST /vedic-astrology/kp/chart | Ascendant, cusps, and planets with KP stellar hierarchy |
73
+ | `<roxy-vedic-planets-table>` | Vedic | POST /vedic-astrology/birth-chart | Degree, nakshatra, pada, lord, bhava, avastha columns |
74
+ | `<roxy-kp-planets-table>` | Vedic (KP) | POST /vedic-astrology/kp/planets | Sub-lord and sub-sub-lord columns |
75
+ | `<roxy-kp-ruling-planets>` | Vedic (KP) | POST /vedic-astrology/kp/ruling-planets | Day lord, Moon/Lagna hierarchies, ruling planets, significators |
76
+ | `<roxy-ashtakavarga-grid>` | Vedic | POST /vedic-astrology/ashtakavarga | Sarva, Bhinna, and Shodhya Pinda views in a tabbed heatmap |
77
+ | `<roxy-shadbala-table>` | Vedic | POST /vedic-astrology/shadbala | Six-fold planetary strength bar plus rupas and adequacy badge |
78
+ | `<roxy-dasha-timeline>` | Vedic | POST /vedic-astrology/dasha/{current,major,sub/...} | Vimshottari mahadasha + antardasha + pratyantardasha |
79
+ | `<roxy-guna-milan>` | Vedic | POST /vedic-astrology/compatibility | 36-point Ashtakoota with eight sub-scores |
80
+ | `<roxy-panchang-table>` | Vedic | POST /vedic-astrology/panchang/{basic,detailed} | 15+ muhurtas in detailed mode |
81
+ | `<roxy-vedic-aspects>` | Vedic | POST /vedic-astrology/aspects | Graha drishti rows with aspect type, strength, and orb, plus mutual aspects |
82
+ | `<roxy-hora-table>` | Vedic | POST /vedic-astrology/panchang/hora | Day and night planetary hours with ruling planet and window |
83
+ | `<roxy-choghadiya-grid>` | Vedic | POST /vedic-astrology/panchang/choghadiya | Day and night Choghadiya muhurta tiles colored by effect |
84
+ | `<roxy-yoga-list>` | Vedic | GET /vedic-astrology/yoga, /yoga/{id} | Filterable yoga cards from the 300 plus yoga catalog |
85
+ | `<roxy-nakshatra-card>` | Vedic | GET /vedic-astrology/nakshatras/{id} | Lord, deity, symbol, characteristics, remedies |
86
+ | `<roxy-dosha-card>` | Vedic | POST /vedic-astrology/dosha/{manglik,kalsarpa,sadhesati} | Presence, severity, remedies, scoped effects |
87
+ | `<roxy-numerology-card>` | Numerology | POST /numerology/{life-path,expression,soul-urge,personality,birth-day,maturity,daily,personal-day,personal-month,personal-year,chart} | Life path, expression, soul urge, personality, personal year, full chart |
88
+ | `<roxy-tarot-card>` | Tarot | GET /tarot/cards/{id}, POST /tarot/daily | Single card with upright and reversed flip |
89
+ | `<roxy-tarot-catalog>` | Tarot | GET /tarot/cards | Deck gallery tiles with card art, name, and arcana and suit |
90
+ | `<roxy-tarot-spread>` | Tarot | POST /tarot/spreads/{three-card,celtic-cross,love}, /tarot/yes-no, /tarot/draw | Spreads with positions and reading |
91
+ | `<roxy-bodygraph>` | Human Design | POST /human-design/bodygraph | Nine-center chart with defined and open centers, active channels, and gates, plus the type, strategy, authority, profile, and definition readings, the channels by circuit, the centers, and every activation with its gate and line meaning |
92
+ | `<roxy-hd-type-card>` | Human Design | POST /human-design/type, /human-design/profile | Type, strategy, authority, and profile tiles with the aura, signature, and not-self themes, plus the reading behind each label and the profile line keynotes |
93
+ | `<roxy-hd-connection>` | Human Design | POST /human-design/connection | Electromagnetic, compromise, and dominance channels between two charts |
94
+ | `<roxy-hd-penta>` | Human Design | POST /human-design/penta | Group penta channels split into upper and lower triangles |
95
+ | `<roxy-hd-variables>` | Human Design | POST /human-design/variables | The four transformation arrows with direction, color, tone, and base, plus a reading per arrow grouped by layer and the cognition |
96
+ | `<roxy-forecast-timeline>` | Forecast | POST /forecast/timeline | Date-grouped events across Western, Vedic, and biorhythm domains, weighted by significance |
97
+ | `<roxy-forecast-digest>` | Forecast | POST /forecast/digest | Per-window event counts, domain breakdown, and the highest-significance events |
98
+ | `<roxy-biorhythm-chart>` | Biorhythm | POST /biorhythm/{daily,forecast,critical-days} | Daily bars, forecast cycle lines, critical days |
99
+ | `<roxy-hexagram>` | I Ching | GET /iching/hexagrams/{number}, /iching/cast, POST /iching/daily, /iching/daily/cast | Hexagram figure with trigrams, judgment, image, and a reading per line (statement plus meaning); a cast highlights the moving lines and the resulting hexagram |
100
+ | `<roxy-crystal-card>` | Crystals | GET /crystals/{id} | Photo, meaning sections, chakra, zodiac, element, hardness, keywords, and pairings |
101
+ | `<roxy-crystal-grid>` | Crystals | GET /crystals, /crystals/chakra/{chakra}, /crystals/element/{element}, /crystals/zodiac/{sign}, /crystals/birthstone/{month}, /crystals/search | Crystal gallery tiles with photo, name, and colour swatches |
102
+ | `<roxy-dream-card>` | Dreams | GET /dreams/symbols/{id} | Symbol name, interpretation body, and letter chip |
103
+ | `<roxy-dream-search>` | Dreams | GET /dreams/symbols | Matched dream symbols as selectable tiles with a letter chip |
104
+ | `<roxy-angel-number-card>` | Angel Numbers | GET /angel-numbers/numbers/{number} | Number meaning with spiritual, love, career, money, twin flame, biblical, and shadow sections |
105
+ | `<roxy-angel-number-lookup>` | Angel Numbers | GET /angel-numbers/lookup | Pattern analysis plus known meaning and digit-root fallback |
106
+ | `<roxy-reference-card>` | Reference | GET /astrology/{signs,planet-meanings}/{id}, /vedic-astrology/rashis/{id}, /iching/trigrams/{id}, /human-design/{gates,centers}/{id}, /numerology/{meanings,compound-number}/{number} | Symbol, name, description, keyword chips, and an attribute grid for any glossary lookup |
107
+ | `<roxy-endpoint-form>` | Helper | Any endpoint, from the spec | Schema-driven form, emits roxy-submit |
108
+ | `<roxy-location-search>` | Helper | GET /location/search | Debounced city search input, emits roxy-location-select |
109
+ | `<roxy-data>` | Helper | Any response shape | Generic fallback renderer for unknown shapes |
110
+ <!-- END:COMPONENTS -->
111
+
112
+ ## Common integration bugs (read this first)
113
+
114
+ These are the bugs that come up over and over. Read this section before writing the first line of integration code.
115
+
116
+ ### 1. Envelope not unwrapped
117
+
118
+ The `@roxyapi/sdk` returns `{ data, error, request, response }`. **Always destructure `data` before passing to a component.** Passing the full envelope renders `[object Object]`. This is the single most common integration bug.
119
+
120
+ ```ts
121
+ // Wrong: passes the envelope
122
+ const response = await roxy.astrology.generateNatalChart({ body });
123
+ element.data = response; // → renders [object Object]
124
+
125
+ // Right: unwrap data
126
+ const { data } = await roxy.astrology.generateNatalChart({ body });
127
+ element.data = data;
128
+ ```
129
+
130
+ Every snippet below follows this rule.
131
+
132
+ ### 2. Hardcoded coordinates
133
+
134
+ Every chart endpoint (Western, Vedic, KP, synastry, transits, dasha, dosha, panchang) needs `latitude`, `longitude`, and `timezone`. Never ask the user to type coordinates. Call `/location/search` first, then feed the result into the chart endpoint.
135
+
136
+ ```ts
137
+ // Right
138
+ const { data: cities } = await roxy.location.searchCities({ query: { q: 'Mumbai' } });
139
+ const { latitude, longitude, timezone } = cities.cities[0];
140
+ const { data: chart } = await roxy.astrology.generateNatalChart({
141
+ body: { date, time, latitude, longitude, timezone },
142
+ });
143
+ ```
144
+
145
+ ### 3. Timezone format inconsistency
146
+
147
+ Every chart endpoint accepts `timezone` as either a decimal-hour offset (`5.5` for IST, `-5` for EST) or an IANA name (`'Asia/Kolkata'`, `'America/New_York'`). The decimal form is what `/location/search` returns; the IANA form is correct over DST boundaries. Pick one and stay consistent in a single integration. Mixing them does not break the API but makes the bug surface area larger.
148
+
149
+ ### 4. Secret key in the browser
150
+
151
+ Secret keys (`sk_*`) grant full account access and are server side only. Call `createRoxy(process.env.ROXY_API_KEY!)` on your server (Node, Bun, Hono, Next.js route handlers, Workers, Edge functions), then send the response, not the key, to the component. Never ship a secret key in a client bundle.
152
+
153
+ ```ts
154
+ // Secret key: server side only
155
+ const roxy = createRoxy(process.env.ROXY_API_KEY!);
156
+ ```
157
+
158
+ For direct client-side calls, use a **publishable key** (`pk_live_*` / `pk_test_*`) instead. Publishable keys are browser-safe: mint one at `roxyapi.com/account`, register the origins you embed on, and the API gateway returns 403 for any other origin. See the client-side pattern below.
159
+
160
+ ### 5. Missing `'use client'` in Next.js App Router
161
+
162
+ The React components in `@roxyapi/ui-react` mount Custom Elements, which need the DOM. In the App Router, files that import them must declare `'use client'` at the top. Server Components can fetch with the SDK; the client component renders.
163
+
164
+ ```tsx
165
+ // app/chart-view.tsx
166
+ 'use client';
167
+ import { RoxyNatalChart } from '@roxyapi/ui-react';
168
+
169
+ export default function ChartView({ data }) {
170
+ return <RoxyNatalChart data={data} />;
171
+ }
172
+ ```
173
+
174
+ ### 6. React 17 or 18 swallowing custom events
175
+
176
+ React 19 routes hyphenated DOM events through camelCase props correctly. React 17 and 18 do not. On 17/18, attach the listener with a ref:
177
+
178
+ ```tsx
179
+ const ref = useRef<HTMLElement>(null);
180
+ useEffect(() => {
181
+ const el = ref.current;
182
+ if (!el) return;
183
+ const handler = (e: Event) => setData((e as CustomEvent).detail);
184
+ el.addEventListener('roxy-location-select', handler);
185
+ return () => el.removeEventListener('roxy-location-select', handler);
186
+ }, []);
187
+
188
+ return <roxy-location-search ref={ref} />;
189
+ ```
190
+
191
+ The React 19 path is `<RoxyLocationSearch onRoxyLocationSelect={handler} />`.
192
+
193
+ ### 6b. Configuration props on the React components
194
+
195
+ Several components select a view, mode, or chart layout in addition to `data`. The React components type these as literal-union props alongside `data`, so editors autocomplete the allowed values and the build flags a typo. Set them as camelCase props.
196
+
197
+ ```tsx
198
+ <RoxyVedicKundli data={chart} chartStyle="south" />
199
+ <RoxyDoshaCard data={kalsarpa} type="kalsarpa" />
200
+ <RoxyHoroscopeCard data={weekly} period="weekly" />
201
+ <RoxyPanchangTable data={panchang} detail="detailed" />
202
+ ```
203
+
204
+ The full set: `RoxyNatalChart` `houseSystem`, `RoxyHoroscopeCard` `period`, `RoxyMoonPhase` `mode`, `RoxyCompatibilityCard` `mode`, `RoxyVedicKundli` and `RoxyDivisionalChart` `chartStyle`, `RoxyPanchangTable` `detail`, `RoxyDashaTimeline` `period`, `RoxyDoshaCard` `type`, `RoxyNumerologyCard` `type`, `RoxyTarotSpread` `spread`, `RoxyBiorhythmChart` `mode`, `RoxyHexagram` `mode`. Outside React and Vue, set the same value as a kebab-case attribute or a JS property on the element (for example `chart-style="south"` or `el.chartStyle = 'south'`).
205
+
206
+ ### 6c. Vue and Nuxt
207
+
208
+ `@roxyapi/ui-vue` exposes the same components with the same prop names. Bind `data` and the config props normally; the package sets them as DOM properties for you, so an object payload never gets stringified into an attribute. Listen to widget events with the usual `@` syntax.
209
+
210
+ ```vue
211
+ <script setup lang="ts">
212
+ import { RoxyVedicKundli, RoxyLocationSearch } from '@roxyapi/ui-vue';
213
+ </script>
214
+
215
+ <template>
216
+ <RoxyVedicKundli :data="chart" chart-style="south" />
217
+ <RoxyLocationSearch @roxy-location-select="onCity" />
218
+ </template>
219
+ ```
220
+
221
+ In Nuxt, render these in a client context (`<ClientOnly>` or a `.client.vue` component): they mount Custom Elements and need the DOM, the same constraint as `'use client'` in the Next.js App Router.
222
+
223
+ ### 7. Local response interface drift
224
+
225
+ Do not declare `interface XyzData { ... }` for a RoxyAPI response. Import the spec-derived type from `@roxyapi/sdk` (or let the SDK return type flow through inference). Local interfaces drift the moment the spec changes; the component will keep compiling while rendering nothing.
226
+
227
+ ```ts
228
+ // Wrong
229
+ interface NatalChart { planets: ...; houses: ...; }
230
+
231
+ // Right
232
+ import type { NatalChartResponse } from '@roxyapi/sdk';
233
+ ```
234
+
235
+ ## Integration patterns
236
+
237
+ ### Pattern 1: vanilla HTML, no build step
238
+
239
+ Fetch on your server with the secret key, then inline the response into the component as a child `<script type="application/json" class="roxy-data">`. The component reads it on load. No key in the browser.
240
+
241
+ ```html
242
+ <script
243
+ src="https://cdn.jsdelivr.net/npm/@roxyapi/ui@latest/dist/cdn/roxy-ui.js"
244
+ crossorigin="anonymous"
245
+ ></script>
246
+
247
+ <roxy-natal-chart>
248
+ <script type="application/json" class="roxy-data">
249
+ { "planets": [ ... ], "houses": [ ... ], "aspects": [ ... ] }
250
+ </script>
251
+ </roxy-natal-chart>
252
+ ```
253
+
254
+ Setting the JavaScript `data` property always wins over the inlined JSON, so the same element also drives dynamic pages.
255
+
256
+ ### Pattern 2: React, interactive
257
+
258
+ `<RoxyLocationSearch>` runs in the browser. On select, call your own route, which holds the secret key, and set the returned data on the chart. The key never reaches the client.
259
+
260
+ ```tsx
261
+ 'use client';
262
+
263
+ import {
264
+ RoxyNatalChart,
265
+ RoxyLocationSearch,
266
+ type RoxyNatalChartProps,
267
+ } from '@roxyapi/ui-react';
268
+ import { useState } from 'react';
269
+
270
+ export function BirthChartView() {
271
+ const [chart, setChart] = useState<RoxyNatalChartProps['data']>(undefined);
272
+
273
+ const onLocationSelect = async (e: CustomEvent<{ latitude?: number; longitude?: number; timezone?: number | string }>) => {
274
+ const { latitude, longitude, timezone } = e.detail;
275
+ if (latitude == null || longitude == null) return;
276
+ // Your route calls roxy.astrology.generateNatalChart with the secret key.
277
+ const res = await fetch('/api/natal-chart', {
278
+ method: 'POST',
279
+ body: JSON.stringify({ date: '1990-01-15', time: '14:30:00', latitude, longitude, timezone }),
280
+ });
281
+ setChart(await res.json());
282
+ };
283
+
284
+ return (
285
+ <div>
286
+ <RoxyLocationSearch onRoxyLocationSelect={onLocationSelect} />
287
+ {chart && <RoxyNatalChart data={chart} />}
288
+ </div>
289
+ );
290
+ }
291
+ ```
292
+
293
+ For a static chart with no picker, fetch in a Server Component and pass `data` to a client component (Pattern 6).
294
+
295
+ ### Pattern 3: schema-driven form
296
+
297
+ `<roxy-endpoint-form>` reads the OpenAPI spec and renders the inputs for any endpoint. On `roxy-submit`, POST the validated values to your own route, which calls the SDK with the secret key, then set the returned data on the target component.
298
+
299
+ ```html
300
+ <roxy-endpoint-form
301
+ data-endpoint="vedic-astrology/birth-chart"
302
+ method="POST"
303
+ submit-label="Generate kundli"
304
+ ></roxy-endpoint-form>
305
+ <roxy-vedic-kundli chart-style="south"></roxy-vedic-kundli>
306
+
307
+ <script type="module">
308
+ const form = document.querySelector('roxy-endpoint-form');
309
+ form.addEventListener('roxy-submit', async (e) => {
310
+ // Your route calls roxy.vedicAstrology.generateBirthChart with the secret key.
311
+ const res = await fetch('/api/kundli', { method: 'POST', body: JSON.stringify(e.detail.values) });
312
+ document.querySelector('roxy-vedic-kundli').data = await res.json();
313
+ });
314
+ </script>
315
+ ```
316
+
317
+ ### Pattern 4: fully client-side with a publishable key (no server, no script)
318
+
319
+ When you do not want a backend at all, mint a **publishable key** (`pk_live_*` / `pk_test_*`) at `roxyapi.com/account`, register the origins you embed on, and let the component fetch itself. Every rendering component is self-fetching: give it a `data-endpoint` and a `publishable-key` and it renders its own input form, calls RoxyAPI on submit, and displays the result. No script, no separate location wiring, no envelope handling.
320
+
321
+ ```html
322
+ <roxy-natal-chart
323
+ data-endpoint="astrology/natal-chart"
324
+ publishable-key="pk_live_..."
325
+ ></roxy-natal-chart>
326
+ ```
327
+
328
+ That single element shows a schema-driven form (city search included for endpoints that need coordinates), fetches on submit, shows a loading then error-or-result state, and re-shows the form so the user can try another query. `method` defaults to `POST`; set `method="GET"` for GET endpoints. Set `data-endpoint` to the spec path without the leading slash (`dreams/symbols/{id}`, `astrology/horoscope/{sign}/daily`).
329
+
330
+ **Key handling is the contract. The component enforces it, not you:**
331
+
332
+ - The publishable key is safe in client code: it is origin-restricted (any other origin gets 403) and cannot read your account.
333
+ - A **secret key never works here.** If `publishable-key` is not a `pk_` key the component refuses to fetch, sends nothing, and emits a `roxy-validation-error` event. A secret key cannot leak through self-fetch even by mistake.
334
+ - For production with a backend, prefer controlled mode (Patterns 1, 6, 7): the server fetches with the `sk_` key and injects the response, so no key of any kind reaches the browser.
335
+
336
+ In React, the same props are typed: `<RoxyNatalChart endpoint="astrology/natal-chart" publishableKey={process.env.NEXT_PUBLIC_ROXY_PK} />`.
337
+
338
+ ### Pattern 5: MCP tool-call response
339
+
340
+ A remote MCP server at `roxyapi.com/mcp/{domain}` exposes each RoxyAPI endpoint as an MCP tool. The JSON returned by the tool call has the same shape as the SDK response. Pass it straight into the matching component.
341
+
342
+ ```ts
343
+ // Pseudocode for any MCP-aware agent
344
+ const result = await mcp.call('roxyapi.astrology.generate_natal_chart', {
345
+ date: '1990-01-15', time: '14:30:00', latitude: 19.07, longitude: 72.88, timezone: 5.5,
346
+ });
347
+ document.querySelector('roxy-natal-chart').data = result;
348
+ ```
349
+
350
+ No field renames. No glue code. Use the decision tree above to pick the component for any tool.
351
+
352
+ ### Pattern 6: Next.js RSC streaming
353
+
354
+ Server fetches with the secret key, client renders with the React component. The API key never crosses the network.
355
+
356
+ ```tsx
357
+ // app/page.tsx (Server Component)
358
+ import { createRoxy } from '@roxyapi/sdk';
359
+ import BirthChartView from './birth-chart-view';
360
+
361
+ const roxy = createRoxy(process.env.ROXY_API_KEY!);
362
+
363
+ export default async function Page() {
364
+ const { data } = await roxy.vedicAstrology.generateBirthChart({
365
+ body: { date: '1990-01-15', time: '14:30:00', latitude: 19.07, longitude: 72.88, timezone: 5.5 },
366
+ });
367
+ return <BirthChartView data={data} />;
368
+ }
369
+ ```
370
+
371
+ ```tsx
372
+ // app/birth-chart-view.tsx (Client Component)
373
+ 'use client';
374
+ import { RoxyVedicKundli } from '@roxyapi/ui-react';
375
+
376
+ export default function BirthChartView({ data }: { data: unknown }) {
377
+ return <RoxyVedicKundli data={data} />;
378
+ }
379
+ ```
380
+
381
+ ### Pattern 7: server-rendered markup (WordPress, JSX SSR, static HTML)
382
+
383
+ 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.
384
+
385
+ **Always serialize with the shipped helper. Never hand-roll the escape and never use a bare `JSON.stringify`.** `@roxyapi/ui` exports `roxyDataScript(data)` (returns the full `<script class="roxy-data">…</script>` element) and `serializeRoxyData(data)` (returns just the escaped JSON string). They escape `<`, `>`, and `&` so a string field containing `</script>` cannot break out of the block. A raw `JSON.stringify` of a response with interpretation prose can contain `</script>` and corrupt the page or open an injection hole.
386
+
387
+ ```ts
388
+ import { roxyDataScript } from '@roxyapi/ui';
389
+
390
+ const { data } = await roxy.astrology.generateNatalChart({ body });
391
+ const html = `<roxy-natal-chart>${roxyDataScript(data)}</roxy-natal-chart>`;
392
+ ```
393
+
394
+ The emitted markup:
395
+
396
+ ```html
397
+ <roxy-natal-chart>
398
+ <script type="application/json" class="roxy-data">{ "planets": [ ], "houses": [ ], "aspects": [ ] }</script>
399
+ </roxy-natal-chart>
400
+ ```
401
+
402
+ Rules for this pattern:
403
+
404
+ - 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`.
405
+ - The script must be a direct child of the component and carry both `type="application/json"` and `class="roxy-data"`. `roxyDataScript` emits both.
406
+ - 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.
407
+ - 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.
408
+ - In a language that cannot call the TS helper (PHP, Python, Go), mirror its rule exactly: escape `<`, `>`, and `&` to their `\u003c`, `\u003e`, `\u0026` JSON escapes. The WordPress example does this in PHP.
409
+
410
+ 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.
411
+
412
+ ## Localized responses
413
+
414
+ Most RoxyAPI endpoints return their interpretation text in eight languages, selected with the `lang` query parameter (`en`, `tr`, `de`, `es`, `hi`, `pt`, `fr`, `ru`). Human Design, for example, returns the type, strategy, authority, profile, channel, center, gate, and line readings in the requested language.
415
+
416
+ The components hold no copy of their own; they print the prose the response carries. So the language of the response is the language of the render, and there is no locale prop to set.
417
+
418
+ ```ts
419
+ const { data } = await roxy.humanDesign.generateBodygraph({
420
+ body: { date: '1990-01-15', time: '14:30:00', timezone: 5.5 },
421
+ query: { lang: 'de' },
422
+ });
423
+ ```
424
+
425
+ `lang` is a query parameter even on a POST endpoint. Put it in `query`, never in `body`; a `lang` key in the body is ignored and you get English back. In the self-fetch pattern the component reads the parameter from the spec and sends it correctly, so the generated form simply offers the language as a field.
426
+
427
+ The structural labels the components draw (section headings such as Reading or Centers, and column headers) are English.
428
+
429
+ ## Theming and dark mode
430
+
431
+ Components react to three signals in priority order. No events to dispatch. No JS bridge to write. The CDN bundle (`dist/cdn/roxy-ui.js`) auto-loads the design tokens, so a single script tag yields full theming and dark mode with nothing else to add. The npm and React paths inherit the same tokens through the components; only set up `tokens.css` yourself if you import per component without the full bundle.
432
+
433
+ | Signal | Where | Effect |
434
+ |---|---|---|
435
+ | `prefers-color-scheme: dark` | OS | Default. Follows user system setting. |
436
+ | `data-theme="light"` or `data-theme="dark"` | `<html>` / `<body>` / any ancestor / the component itself | Wins over OS. Per-element override scope works. |
437
+ | `.dark` class | The component itself or any ancestor (typically `<html>`) | Same effect as `data-theme="dark"`. Use when the host stack already ships a `.dark` toggle (Tailwind, shadcn). |
438
+
439
+ To toggle at runtime:
440
+
441
+ ```ts
442
+ document.documentElement.dataset.theme = 'dark'; // or 'light'
443
+ ```
444
+
445
+ That single line re-themes every Roxy UI component on the page. Persist user choice in `localStorage` from your own code; the library does not own preferences.
446
+
447
+ Per-element scope is supported:
448
+
449
+ ```html
450
+ <roxy-natal-chart data-theme="dark" .data=${chart}></roxy-natal-chart>
451
+ ```
452
+
453
+ Every visible aspect of the chart is driven by `--roxy-*` CSS custom properties on `:host`. Override any token on `:root`, on `:host`, or per element. Do not write Tailwind utility classes inside the components; the Shadow DOM boundary stops them at the door.
454
+
455
+ ## Rules every agent must follow
456
+
457
+ - Always call `/location/search` first before any chart endpoint that takes latitude, longitude, or timezone. Use `<roxy-location-search>` for the input UI.
458
+ - Pass the response object directly. Components are stateless; they do not fetch internally except for `<roxy-location-search>`, `<roxy-endpoint-form>`, and the widgets auto-mount script.
459
+ - Use the typed SDK from `@roxyapi/sdk` so prop shapes match the spec automatically.
460
+ - Theming is CSS custom properties on `:root` or per element. Switch light and dark via `data-theme` on any ancestor (see the table above). Do not write Tailwind classes inside the components; the shadow DOM ignores them.
461
+ - Honor reduced motion. The library already respects `prefers-reduced-motion: reduce` and the `--roxy-motion-duration` variable.
462
+ - A11y violations are CI failures. Do not paste over `role` or `aria-*` attributes; the components emit them correctly already.
463
+ - Component types come from the OpenAPI spec via `@hey-api/openapi-ts`. Do not redefine response shapes locally; if a field is missing, fix the spec, regenerate, propagate.
464
+
465
+ ## Domain ordering
466
+
467
+ When listing domains in user-visible copy, use the canonical order: Western astrology, Vedic astrology, numerology, tarot, human design, forecast, biorhythm, I Ching, crystals, dreams, angel numbers. Location is utility, not a selling domain.
468
+
469
+ ## What not to ship
470
+
471
+ - Do not bundle `@roxyapi/ui` with `@roxyapi/ui-react` or `@roxyapi/ui-vue`; they ship independently.
472
+ - Use `@roxyapi/ui-react` for React projects and `@roxyapi/ui-vue` for Vue and Nuxt projects. Use `@roxyapi/ui` directly elsewhere.
473
+ - Do not write your own kundli component. The lifted layout in `<roxy-vedic-kundli>` is the canonical RoxyAPI render path.
474
+ - Do not call astrology endpoints with hardcoded coordinates. Always geocode first via `<roxy-location-search>` or `roxy.location.searchCities()`.
475
+ - Do not declare a local `interface XyzData` to describe a RoxyAPI response. Import the type from the spec-derived bundle: `import type { XyzResponse } from '@roxyapi/sdk'`. Local interfaces drift the moment the spec changes.
476
+ - Do not write Tailwind utility classes inside a component. The Shadow DOM boundary stops them at the door. Theme through `--roxy-*` CSS custom properties on `:root` or per element instead.
477
+ - Two ways to feed a component, no third. Controlled (default, recommended for production): pass `data` as a prop or hydrate from a child `roxy-data` JSON island; your server holds the secret key. Self-fetch (no backend): set `data-endpoint` + a `pk_` `publishable-key` and the component renders its own form and fetches in the browser (a secret key is refused client-side). Do not wrap a component in your own fetch loop or call a chart/table/card's internals.
478
+ - Do not redefine theme tokens or invent your own naming. Override the existing `--roxy-*` custom properties; the full list is in `THEMING.md`.
479
+
480
+ ## Where to look next
481
+
482
+ - Component source: `packages/ui/src/components/`
483
+ - Sample data for every component: `apps/docs/sample-data.js`
484
+ - Token reference: `packages/ui/THEMING.md`
485
+ - Live preview: `bun run preview` then open `http://localhost:3001`
486
+ - Endpoint reference: <https://roxyapi.com/api-reference>
487
+ - Machine-readable component catalog (every component, its domain, what it renders, and the endpoint(s) it consumes): <https://cdn.jsdelivr.net/npm/@roxyapi/ui@latest/components-catalog.json>. Fetch it to discover or map components programmatically instead of scraping this table.
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Roxy Labs
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.