@roxyapi/ui-vue 0.33.0 → 0.35.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 (177) hide show
  1. package/AGENTS.md +60 -14
  2. package/README.md +195 -62
  3. package/dist/components/almanac-day.d.ts +138 -0
  4. package/dist/components/almanac-day.d.ts.map +1 -0
  5. package/dist/components/almanac-day.js +2 -0
  6. package/dist/components/almanac-day.js.map +7 -0
  7. package/dist/components/angel-number-card.js +1 -1
  8. package/dist/components/angel-number-card.js.map +1 -1
  9. package/dist/components/angel-number-lookup.js +1 -1
  10. package/dist/components/angel-number-lookup.js.map +1 -1
  11. package/dist/components/arudha-padas.js +1 -1
  12. package/dist/components/arudha-padas.js.map +1 -1
  13. package/dist/components/ashtakavarga-grid.js +1 -1
  14. package/dist/components/ashtakavarga-grid.js.map +1 -1
  15. package/dist/components/aspects-table.js +1 -1
  16. package/dist/components/aspects-table.js.map +1 -1
  17. package/dist/components/astrocartography-map.js +1 -1
  18. package/dist/components/astrocartography-map.js.map +1 -1
  19. package/dist/components/bazi-chart.d.ts +130 -0
  20. package/dist/components/bazi-chart.d.ts.map +1 -0
  21. package/dist/components/bazi-chart.js +2 -0
  22. package/dist/components/bazi-chart.js.map +7 -0
  23. package/dist/components/bhav-chalit-table.js +1 -1
  24. package/dist/components/bhav-chalit-table.js.map +1 -1
  25. package/dist/components/bhava-bala-table.js +1 -1
  26. package/dist/components/bhava-bala-table.js.map +1 -1
  27. package/dist/components/biorhythm-chart.js +1 -1
  28. package/dist/components/biorhythm-chart.js.map +1 -1
  29. package/dist/components/bodygraph.js +1 -1
  30. package/dist/components/bodygraph.js.map +1 -1
  31. package/dist/components/chara-karakas.js +1 -1
  32. package/dist/components/chara-karakas.js.map +1 -1
  33. package/dist/components/choghadiya-grid.js +1 -1
  34. package/dist/components/choghadiya-grid.js.map +1 -1
  35. package/dist/components/compatibility-card.js +1 -1
  36. package/dist/components/compatibility-card.js.map +1 -1
  37. package/dist/components/crystal-card.js +1 -1
  38. package/dist/components/crystal-card.js.map +1 -1
  39. package/dist/components/crystal-grid.js +1 -1
  40. package/dist/components/crystal-grid.js.map +1 -1
  41. package/dist/components/dasha-timeline.js +1 -1
  42. package/dist/components/dasha-timeline.js.map +1 -1
  43. package/dist/components/data.js +1 -1
  44. package/dist/components/data.js.map +1 -1
  45. package/dist/components/divisional-chart.js +1 -1
  46. package/dist/components/divisional-chart.js.map +1 -1
  47. package/dist/components/dosha-card.js +1 -1
  48. package/dist/components/dosha-card.js.map +1 -1
  49. package/dist/components/dream-card.js +1 -1
  50. package/dist/components/dream-card.js.map +1 -1
  51. package/dist/components/dream-search.js +1 -1
  52. package/dist/components/dream-search.js.map +1 -1
  53. package/dist/components/endpoint-form.js +1 -1
  54. package/dist/components/endpoint-form.js.map +1 -1
  55. package/dist/components/ephemeris-table.js +1 -1
  56. package/dist/components/ephemeris-table.js.map +1 -1
  57. package/dist/components/fixed-stars.js +1 -1
  58. package/dist/components/fixed-stars.js.map +1 -1
  59. package/dist/components/flying-star-chart.d.ts +138 -0
  60. package/dist/components/flying-star-chart.d.ts.map +1 -0
  61. package/dist/components/flying-star-chart.js +2 -0
  62. package/dist/components/flying-star-chart.js.map +7 -0
  63. package/dist/components/forecast-digest.js +1 -1
  64. package/dist/components/forecast-digest.js.map +1 -1
  65. package/dist/components/forecast-timeline.js +1 -1
  66. package/dist/components/forecast-timeline.js.map +1 -1
  67. package/dist/components/gochara-table.js +1 -1
  68. package/dist/components/gochara-table.js.map +1 -1
  69. package/dist/components/guna-milan.js +1 -1
  70. package/dist/components/guna-milan.js.map +1 -1
  71. package/dist/components/hd-connection.js +1 -1
  72. package/dist/components/hd-connection.js.map +1 -1
  73. package/dist/components/hd-penta.js +1 -1
  74. package/dist/components/hd-penta.js.map +1 -1
  75. package/dist/components/hd-type-card.js +1 -1
  76. package/dist/components/hd-type-card.js.map +1 -1
  77. package/dist/components/hd-variables.js +1 -1
  78. package/dist/components/hd-variables.js.map +1 -1
  79. package/dist/components/heliacal-table.js +1 -1
  80. package/dist/components/heliacal-table.js.map +1 -1
  81. package/dist/components/hexagram.js +1 -1
  82. package/dist/components/hexagram.js.map +1 -1
  83. package/dist/components/hora-table.js +1 -1
  84. package/dist/components/hora-table.js.map +1 -1
  85. package/dist/components/horoscope-card.d.ts +11 -3
  86. package/dist/components/horoscope-card.d.ts.map +1 -1
  87. package/dist/components/horoscope-card.js +1 -1
  88. package/dist/components/horoscope-card.js.map +2 -2
  89. package/dist/components/kp-chart.js +1 -1
  90. package/dist/components/kp-chart.js.map +1 -1
  91. package/dist/components/kp-planets-table.js +1 -1
  92. package/dist/components/kp-planets-table.js.map +1 -1
  93. package/dist/components/kp-ruling-planets.js +1 -1
  94. package/dist/components/kp-ruling-planets.js.map +1 -1
  95. package/dist/components/kua-card.d.ts +138 -0
  96. package/dist/components/kua-card.d.ts.map +1 -0
  97. package/dist/components/kua-card.js +2 -0
  98. package/dist/components/kua-card.js.map +7 -0
  99. package/dist/components/local-space-compass.js +1 -1
  100. package/dist/components/local-space-compass.js.map +1 -1
  101. package/dist/components/location-search.js +1 -1
  102. package/dist/components/location-search.js.map +1 -1
  103. package/dist/components/luck-pillars.d.ts +130 -0
  104. package/dist/components/luck-pillars.d.ts.map +1 -0
  105. package/dist/components/luck-pillars.js +2 -0
  106. package/dist/components/luck-pillars.js.map +7 -0
  107. package/dist/components/moon-phase.js +1 -1
  108. package/dist/components/moon-phase.js.map +1 -1
  109. package/dist/components/nakshatra-card.js +1 -1
  110. package/dist/components/nakshatra-card.js.map +1 -1
  111. package/dist/components/natal-chart.js +1 -1
  112. package/dist/components/natal-chart.js.map +1 -1
  113. package/dist/components/numerology-card.js +1 -1
  114. package/dist/components/numerology-card.js.map +1 -1
  115. package/dist/components/panchang-table.js +1 -1
  116. package/dist/components/panchang-table.js.map +1 -1
  117. package/dist/components/positions-table.js +1 -1
  118. package/dist/components/positions-table.js.map +1 -1
  119. package/dist/components/profection-card.js +1 -1
  120. package/dist/components/profection-card.js.map +1 -1
  121. package/dist/components/reference-card.js +1 -1
  122. package/dist/components/reference-card.js.map +1 -1
  123. package/dist/components/relocation-wheel.js +1 -1
  124. package/dist/components/relocation-wheel.js.map +1 -1
  125. package/dist/components/shadbala-table.js +1 -1
  126. package/dist/components/shadbala-table.js.map +1 -1
  127. package/dist/components/synastry-chart.js +1 -1
  128. package/dist/components/synastry-chart.js.map +1 -1
  129. package/dist/components/tarot-card.js +1 -1
  130. package/dist/components/tarot-card.js.map +1 -1
  131. package/dist/components/tarot-catalog.js +1 -1
  132. package/dist/components/tarot-catalog.js.map +1 -1
  133. package/dist/components/tarot-spread.js +1 -1
  134. package/dist/components/tarot-spread.js.map +1 -1
  135. package/dist/components/transit-wheel.js +1 -1
  136. package/dist/components/transit-wheel.js.map +1 -1
  137. package/dist/components/transits-table.js +1 -1
  138. package/dist/components/transits-table.js.map +1 -1
  139. package/dist/components/upagraha-table.js +1 -1
  140. package/dist/components/upagraha-table.js.map +1 -1
  141. package/dist/components/vedic-aspects.js +1 -1
  142. package/dist/components/vedic-aspects.js.map +1 -1
  143. package/dist/components/vedic-daily.js +1 -1
  144. package/dist/components/vedic-daily.js.map +1 -1
  145. package/dist/components/vedic-kundli.js +1 -1
  146. package/dist/components/vedic-kundli.js.map +1 -1
  147. package/dist/components/vedic-planets-table.js +1 -1
  148. package/dist/components/vedic-planets-table.js.map +1 -1
  149. package/dist/components/western-planets-table.js +1 -1
  150. package/dist/components/western-planets-table.js.map +1 -1
  151. package/dist/components/yoga-list.js +1 -1
  152. package/dist/components/yoga-list.js.map +1 -1
  153. package/dist/components/zodiac-card.d.ts +138 -0
  154. package/dist/components/zodiac-card.d.ts.map +1 -0
  155. package/dist/components/zodiac-card.js +2 -0
  156. package/dist/components/zodiac-card.js.map +7 -0
  157. package/dist/generated/tool-components.d.ts +14 -0
  158. package/dist/generated/tool-components.d.ts.map +1 -0
  159. package/dist/index.cjs +1 -1
  160. package/dist/index.cjs.map +4 -4
  161. package/dist/index.d.ts +13 -0
  162. package/dist/index.d.ts.map +1 -1
  163. package/dist/index.js +1 -1
  164. package/dist/index.js.map +4 -4
  165. package/dist/load-ui.d.ts +2 -2
  166. package/dist/load-ui.d.ts.map +1 -1
  167. package/dist/load-ui.js +1 -1
  168. package/dist/load-ui.js.map +2 -2
  169. package/dist/types/index.d.ts +1 -1
  170. package/dist/types/index.d.ts.map +1 -1
  171. package/dist/types/types.gen.d.ts +9734 -992
  172. package/dist/types/types.gen.d.ts.map +1 -1
  173. package/dist/utils/compact.d.ts +18 -0
  174. package/dist/utils/compact.d.ts.map +1 -0
  175. package/dist/utils/tool-component.d.ts +28 -0
  176. package/dist/utils/tool-component.d.ts.map +1 -0
  177. package/package.json +1 -1
package/AGENTS.md CHANGED
@@ -8,7 +8,7 @@ Live preview: <https://roxyapi.github.io/ui/>. Source of truth for component typ
8
8
 
9
9
  ## Identity
10
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.
11
+ Roxy UI is the official web component library for the RoxyAPI catalog. Components and helpers cover Western astrology, Vedic astrology, forecast, Human Design, Chinese astrology, feng shui, numerology, tarot, biorhythm, I Ching, crystals, dreams, angel numbers, with the location helper for geocoding. New endpoints regenerate component types automatically.
12
12
 
13
13
  ## Decision tree for picking a component
14
14
 
@@ -18,7 +18,7 @@ Map the natural-language request to a component first; fall back to the table be
18
18
 
19
19
  | If the user says... | Render |
20
20
  |---|---|
21
- | "daily horoscope for `{sign}`", "weekly horoscope", "monthly horoscope" | `<roxy-horoscope-card>` |
21
+ | "daily horoscope for `{sign}`", "weekly horoscope", "monthly horoscope", "year ahead", "yearly horoscope" | `<roxy-horoscope-card>` with `period="daily"`, `"weekly"`, `"monthly"` or `"yearly"`. Every period carries the reading twice, whole as one column and split into six topic sections, and `layout` picks which one renders. Yearly also carries the themes, key periods, eclipses, retrogrades and best months of the year |
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>` |
@@ -37,6 +37,12 @@ Map the natural-language request to a component first; fall back to the table be
37
37
  | "forecast", "what is coming up", "upcoming transits and events", "timeline of my year" | `<roxy-forecast-timeline>` |
38
38
  | "biorhythm", "physical/emotional/intellectual cycle", "critical days" | `<roxy-biorhythm-chart>` |
39
39
  | "I Ching", "hexagram", "cast the coins", "Book of Changes" | `<roxy-hexagram>` |
40
+ | "BaZi", "four pillars", "my Chinese birth chart", "what is my Day Master", "eight characters" | `<roxy-bazi-chart>` |
41
+ | "luck pillars", "Da Yun", "my ten year cycles", "when does my luck change" | `<roxy-luck-pillars>` |
42
+ | "Chinese zodiac", "what animal am I", "year of the {animal}", "my Chinese sign today", "are {animal} and {animal} compatible" | `<roxy-zodiac-card>` (`mode="sign"` for a birth date, `"animal"` for one animal in full, `"daily"` for today, `"compatibility"` for a pair) |
43
+ | "Chinese almanac", "Tong Shu", "is {date} a good day", "pick a wedding date", "auspicious days for {activity}" | `<roxy-almanac-day>` (`mode="day"`, `"month"`, or `"auspicious"` for a date search) |
44
+ | "Kua number", "eight mansions", "Ba Zhai", "my best direction", "which way should my desk face" | `<roxy-kua-card>` (`mode="kua"` for the number, `"mansions"` for the full map) |
45
+ | "flying stars", "Xuan Kong", "the stars in my house", "annual stars for {year}", "period 9 chart" | `<roxy-flying-star-chart>` (`mode="natal"` for a building, `mode="annual"` for one year over it) |
40
46
  | "moon phase", "moon calendar", "next full moon", "current moon" | `<roxy-moon-phase>` |
41
47
  | "what does my dream mean", "dream symbol", "dream dictionary", "I dreamt of {symbol}" | `<roxy-dream-card>` |
42
48
  | "angel number {n}", "meaning of 111 / 222 / 1111", "I keep seeing this number" | `<roxy-angel-number-card>` |
@@ -61,7 +67,7 @@ Use the table below for the formal endpoint to component mapping.
61
67
  | `<roxy-transit-wheel>` | Western | POST /astrology/transit-aspects | Natal chart on the inner ring, transiting bodies on the outer ring, aspect lines between them |
62
68
  | `<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 |
63
69
  | `<roxy-moon-phase>` | Western | GET /astrology/moon-phase/{current,upcoming,calendar/...} | Moon phase card and calendar |
64
- | `<roxy-horoscope-card>` | Western | GET /astrology/horoscope/{sign}/{daily,weekly,monthly} | Daily, weekly, or monthly horoscope card |
70
+ | `<roxy-horoscope-card>` | Western | GET /astrology/horoscope/{sign}/{daily,weekly,monthly,yearly} | Daily, weekly, monthly, or yearly horoscope card |
65
71
  | `<roxy-astrocartography-map>` | Western | POST /astrology/astrocartography | World map of planetary MC, IC, Ascendant, and Descendant lines with per-line interpretations |
66
72
  | `<roxy-local-space-compass>` | Western | POST /astrology/local-space | Compass dial of planetary azimuth lines from the birthplace, dimmed below the horizon |
67
73
  | `<roxy-relocation-wheel>` | Western | POST /astrology/relocation-chart | Relocated chart wheel plus the move geometry, angular planets, and planets that change house |
@@ -106,6 +112,12 @@ Use the table below for the formal endpoint to component mapping.
106
112
  | `<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 |
107
113
  | `<roxy-forecast-timeline>` | Forecast | POST /forecast/{timeline,significant-dates,transits} | Date-grouped events across Western, Vedic, and biorhythm domains, weighted by significance |
108
114
  | `<roxy-forecast-digest>` | Forecast | POST /forecast/digest | Per-window event counts, domain breakdown, and the highest-significance events |
115
+ | `<roxy-bazi-chart>` | Chinese | POST /chinese-astrology/bazi/chart | Year, month, day and hour pillars in hanzi with hidden stems, Ten Gods, Na Yin, element balance and interactions |
116
+ | `<roxy-luck-pillars>` | Chinese | POST /chinese-astrology/bazi/luck-pillars | Ten-year luck pillars as a strip with ages and years, the annual pillars, and the direction and start age behind them |
117
+ | `<roxy-zodiac-card>` | Chinese | POST /chinese-astrology/zodiac/sign, GET /chinese-astrology/zodiac/{animals/{id},{id}/daily,compatibility/{sign1}/{sign2}} | The animal for a date, one animal in full, a daily reading, or a pair scored |
118
+ | `<roxy-almanac-day>` | Chinese | GET /chinese-astrology/calendar/{day/{date},monthly}, POST /chinese-astrology/calendar/auspicious-days | Day officer, favours and avoids, clash animal and pillars, as one day, a month, or a date search |
119
+ | `<roxy-flying-star-chart>` | Feng Shui | POST /feng-shui/flying-stars/natal, GET /feng-shui/flying-stars/annual/{year} | Nine-palace flying star plate with the mountain, period and water star per palace, the facing and sitting mountains and the structure |
120
+ | `<roxy-kua-card>` | Feng Shui | POST /feng-shui/kua, POST /feng-shui/eight-mansions | Kua number and trigram over the eight-sector direction map, favourable and unfavourable sectors ranked |
109
121
  | `<roxy-biorhythm-chart>` | Biorhythm | POST /biorhythm/{daily,forecast,critical-days} | Daily bars, forecast cycle lines, critical days |
110
122
  | `<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 |
111
123
  | `<roxy-crystal-card>` | Crystals | GET /crystals/{id} | Photo, meaning sections, chakra, zodiac, element, hardness, keywords, and pairings |
@@ -214,7 +226,7 @@ Several components select a view, mode, or chart layout in addition to `data`. T
214
226
  <RoxyPanchangTable data={panchang} detail="detailed" />
215
227
  ```
216
228
 
217
- 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'`).
229
+ The full set: `RoxyNatalChart` `houseSystem`, `RoxyHoroscopeCard` `period` and `layout`, `RoxyMoonPhase` `mode`, `RoxyZodiacCard` `mode`, `RoxyKuaCard` `mode`, `RoxyAlmanacDay` `mode`, `RoxyFlyingStarChart` `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'`).
218
230
 
219
231
  ### 6c. Vue and Nuxt
220
232
 
@@ -421,7 +433,7 @@ That single element renders a schema-driven form (a zodiac/enum tile picker, a b
421
433
 
422
434
  In React, the same props are typed: `<RoxyNatalChart endpoint="astrology/natal-chart" publishableKey={process.env.NEXT_PUBLIC_ROXY_PK} />`.
423
435
 
424
- **Three optional attributes on the self-fetch element.** `lang` sets the response language (`en`, `tr`, `de`, `es`, `hi`, `pt`, `fr`, `ru`): put it on the element (`<roxy-horoscope-card lang="de" ...>`) and the form routes it to the `?lang=` query on submit, so visitors never see a language field. `submit-label` overrides the derived button label. `attribution` renders a small "Spiritual data by RoxyAPI" credit under the result: off by default, and the one-tag script below turns it on unless you set `data-attribution="off"`. None of these apply in controlled mode.
436
+ **Three optional attributes on the self-fetch element.** `lang` sets the response language (`en`, `tr`, `de`, `es`, `hi`, `pt`, `fr`, `ru`, `zh-Hans`, `zh-Hant`): put it on the element (`<roxy-horoscope-card lang="de" ...>`) and the form routes it to the `?lang=` query on submit, so visitors never see a language field. `submit-label` overrides the derived button label. `attribution` renders a small "Spiritual data by RoxyAPI" credit under the result: off by default, and the one-tag script below turns it on unless you set `data-attribution="off"`. None of these apply in controlled mode.
425
437
 
426
438
  **One tag, no element wiring.** For the simplest embed, load `dist/cdn/widgets.js` and drop a `<div data-roxy-widget="{slug}" data-publishable-key="pk_live_...">`. The script mounts the matching component from a generated slug map: with every path parameter supplied as a `data-*` attribute (`data-sign`, `data-id`) it fetches on mount, otherwise it renders the same input form. A second `data-*` attribute picks a variant (`data-period`, `data-mode`, `data-type`, `data-spread`). To keep every key on your own server instead, drop the publishable key and give the tag `data-submit-url` and `data-location-url`: the widget renders the form and routes both its requests there. `data-submit-context` rides along with the submitted one.
427
439
 
@@ -429,17 +441,49 @@ In React, the same props are typed: `<RoxyNatalChart endpoint="astrology/natal-c
429
441
 
430
442
  ### Pattern 5: MCP tool-call response
431
443
 
432
- 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.
444
+ A Remote MCP server at `roxyapi.com/mcp/{domain}` exposes each RoxyAPI endpoint as a tool, named for its method and path: `post_astrology_natal_chart`, `post_tarot_spreads_three_card`, `get_tarot_cards_id`. When your model calls one, the result is a single text content block holding the JSON string, and that JSON is the same shape the SDK returns. So the whole render is: parse it, look up the component, set `data`.
445
+
446
+ `componentForTool(name)` is the lookup, exported from `@roxyapi/ui`, `@roxyapi/ui-react` and `@roxyapi/ui-vue`. It returns `{ tag, pascal, attrs?, operationId, toolName }` for a tool the library draws, and `undefined` for one it does not. `operationId` names the OpenAPI operation the tool calls, for your logs or for finding the endpoint in the API reference. `attrs` values are always strings: set them as attributes in the DOM, spread them as props in React and Vue.
433
447
 
434
448
  ```ts
435
- // Pseudocode for any MCP-aware agent
436
- const result = await mcp.call('roxyapi.astrology.generate_natal_chart', {
437
- date: '1990-01-15', time: '14:30:00', latitude: 19.07, longitude: 72.88, timezone: 5.5,
438
- });
439
- document.querySelector('roxy-natal-chart').data = result;
449
+ import { componentForTool } from '@roxyapi/ui';
450
+
451
+ // `toolName` and `result` are what your model handed back for one tool call.
452
+ const found = componentForTool(toolName);
453
+ if (found) {
454
+ const el = document.createElement(found.tag);
455
+ for (const [name, value] of Object.entries(found.attrs ?? {})) el.setAttribute(name, value);
456
+ el.data = JSON.parse(result.content[0].text);
457
+ container.append(el);
458
+ }
459
+ ```
460
+
461
+ In React, `pascal` is the export name, so a namespace import renders it directly:
462
+
463
+ ```tsx
464
+ import * as RoxyUI from '@roxyapi/ui-react';
465
+ import { componentForTool } from '@roxyapi/ui-react';
466
+
467
+ export function ToolWidget({ toolName, output }: { toolName: string; output: string }) {
468
+ const found = componentForTool(toolName);
469
+ if (!found) return null;
470
+ const Component = RoxyUI[found.pascal as keyof typeof RoxyUI] as React.ComponentType<{ data: unknown }>;
471
+ return <Component data={JSON.parse(output)} {...found.attrs} />;
472
+ }
440
473
  ```
441
474
 
442
- No field renames. No glue code. Use the decision tree above to pick the component for any tool.
475
+ Three things the lookup already handles, so you do not have to:
476
+
477
+ - **A compact result.** Ask a tool for the compact shape and its same-shaped arrays arrive columnar, as `{ "__cols": [names], "__rows": [[values]] }`. Every component decodes that on the way in and renders the same card either way. `expandCompact(value)` is exported too, for the paths that read the JSON before an element does.
478
+ - **A server-prefixed name.** Some hosts prefix the tool name with the server it came from and a colon (`roxy_tarot:post_tarot_daily`). The lookup strips the prefix.
479
+ - **Which component leads.** Three responses are rendered by two components each, and the lookup returns the one that leads with the drawing:
480
+ - the natal chart response is drawn by both `<roxy-natal-chart>` and `<roxy-western-planets-table>`, the lookup returns `<roxy-natal-chart>`
481
+ - the transit aspects response is drawn by both `<roxy-transit-wheel>` and `<roxy-aspects-table>`, the lookup returns `<roxy-transit-wheel>`
482
+ - the Vedic birth chart response is drawn by both `<roxy-vedic-kundli>` and `<roxy-vedic-planets-table>`, the lookup returns `<roxy-vedic-kundli>`
483
+
484
+ Full recipe, including the vendor connectors and the Vercel AI SDK: <https://roxyapi.com/docs/tutorials/ai-chat-widgets>.
485
+
486
+ No field renames. No glue code. Use the decision tree above to pick the component for any tool the lookup does not cover.
443
487
 
444
488
  ### Pattern 6: Next.js RSC streaming
445
489
 
@@ -503,7 +547,9 @@ This is how the WordPress plugin renders: PHP fetches the response server-side,
503
547
 
504
548
  ## Localized responses
505
549
 
506
- 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.
550
+ Most RoxyAPI endpoints return their interpretation text in the language you ask for, selected with the `lang` query parameter (`en`, `tr`, `de`, `es`, `hi`, `pt`, `fr`, `ru`, `zh-Hans`, `zh-Hant`). Human Design, for example, returns the type, strategy, authority, profile, channel, center, gate, and line readings in the requested language. Coverage varies by domain, and a field with no translation in the language you asked for comes back in English.
551
+
552
+ Chinese is named by script rather than by language, so `zh-Hant` and `zh-Hans` are the two values to send. A component resolves a regional tag for you: `zh-TW` and `zh-HK` read as traditional, `zh-CN` and `zh-SG` as simplified.
507
553
 
508
554
  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.
509
555
 
@@ -627,7 +673,7 @@ That table is the shared vocabulary, not the whole list. **`components-catalog.j
627
673
 
628
674
  ## Domain ordering
629
675
 
630
- When listing domains in user-visible copy, use the canonical order: Western astrology, Vedic astrology, forecast, human design, numerology, tarot, biorhythm, I Ching, crystals, dreams, angel numbers. Location is utility, not a selling domain. The `domain` field in `components-catalog.json` carries the same names, so sort by this list rather than by whatever order you discovered components in.
676
+ When listing domains in user-visible copy, use the canonical order: Western astrology, Vedic astrology, forecast, human design, Chinese astrology, feng shui, numerology, tarot, biorhythm, I Ching, crystals, dreams, angel numbers. Sort by this list and skip any domain the catalog does not carry a component for. Location is utility, not a selling domain. The `domain` field in `components-catalog.json` carries the same names, so sort by this list rather than by whatever order you discovered components in.
631
677
 
632
678
  ## What not to ship
633
679
 
package/README.md CHANGED
@@ -177,6 +177,53 @@ Every chart, table, and card adapts to light and dark automatically. Hover any i
177
177
  </tr>
178
178
  </table>
179
179
 
180
+ ### Chinese astrology and feng shui
181
+
182
+ <table>
183
+ <tr>
184
+ <td width="50%"><strong>Four pillars</strong> · <code>&lt;roxy-bazi-chart&gt;</code><br><sub>POST /chinese-astrology/bazi/chart</sub><br>
185
+ <picture>
186
+ <source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/RoxyAPI/ui/main/assets/screenshots/bazi-chart-dark.png">
187
+ <img src="https://raw.githubusercontent.com/RoxyAPI/ui/main/assets/screenshots/bazi-chart-light.png" alt="BaZi four pillars chart, each pillar drawn as a Heavenly Stem over its Earthly Branch in hanzi with the Ten God relation, the stems the branch stores, and the Na Yin, over the five-element balance and the interactions the pillars form">
188
+ </picture>
189
+ </td>
190
+ <td width="50%"><strong>Flying star chart</strong> · <code>&lt;roxy-flying-star-chart&gt;</code><br><sub>POST /feng-shui/flying-stars/natal</sub><br>
191
+ <picture>
192
+ <source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/RoxyAPI/ui/main/assets/screenshots/flying-star-chart-dark.png">
193
+ <img src="https://raw.githubusercontent.com/RoxyAPI/ui/main/assets/screenshots/flying-star-chart-light.png" alt="Xuan Kong flying star plate, nine palaces on the Chinese compass with south at the top, each carrying its mountain star, period star and water star, over the facing and sitting mountains and the structure they produce">
194
+ </picture>
195
+ </td>
196
+ </tr>
197
+ <tr>
198
+ <td width="50%"><strong>Chinese zodiac</strong> · <code>&lt;roxy-zodiac-card&gt;</code><br><sub>GET /chinese-astrology/zodiac/animals/&#123;id&#125;</sub><br>
199
+ <picture>
200
+ <source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/RoxyAPI/ui/main/assets/screenshots/zodiac-card-dark.png">
201
+ <img src="https://raw.githubusercontent.com/RoxyAPI/ui/main/assets/screenshots/zodiac-card-light.png" alt="Chinese zodiac animal card with the animal in hanzi, its element and polarity, the double hours it governs, its trine, and its secret friend, clash and harm partners">
202
+ </picture>
203
+ </td>
204
+ <td width="50%"><strong>Kua and eight mansions</strong> · <code>&lt;roxy-kua-card&gt;</code><br><sub>POST /feng-shui/eight-mansions</sub><br>
205
+ <picture>
206
+ <source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/RoxyAPI/ui/main/assets/screenshots/kua-card-dark.png">
207
+ <img src="https://raw.githubusercontent.com/RoxyAPI/ui/main/assets/screenshots/kua-card-light.png" alt="Eight Mansions map on the nine-palace grid, four favourable and four unfavourable compass sectors each with its star, rank and life domain, and the Kua number and trigram in the centre">
208
+ </picture>
209
+ </td>
210
+ </tr>
211
+ <tr>
212
+ <td width="50%"><strong>Luck pillars</strong> · <code>&lt;roxy-luck-pillars&gt;</code><br><sub>POST /chinese-astrology/bazi/luck-pillars</sub><br>
213
+ <picture>
214
+ <source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/RoxyAPI/ui/main/assets/screenshots/luck-pillars-dark.png">
215
+ <img src="https://raw.githubusercontent.com/RoxyAPI/ui/main/assets/screenshots/luck-pillars-light.png" alt="BaZi luck pillars as a strip of ten-year stretches, each with its stem and branch in hanzi, the Ten God relation, and the ages and years it spans">
216
+ </picture>
217
+ </td>
218
+ <td width="50%"><strong>Chinese almanac</strong> · <code>&lt;roxy-almanac-day&gt;</code><br><sub>GET /chinese-astrology/calendar/day/&#123;date&#125;</sub><br>
219
+ <picture>
220
+ <source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/RoxyAPI/ui/main/assets/screenshots/almanac-day-dark.png">
221
+ <img src="https://raw.githubusercontent.com/RoxyAPI/ui/main/assets/screenshots/almanac-day-light.png" alt="Chinese almanac day with the day officer, what the day favours and what it avoids, the animal it clashes with, and its three pillars and lunar mansion">
222
+ </picture>
223
+ </td>
224
+ </tr>
225
+ </table>
226
+
180
227
  ### Other domains
181
228
 
182
229
  <table>
@@ -290,6 +337,40 @@ Always call `/location/search` first. Every chart endpoint expects latitude, lon
290
337
 
291
338
  > **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.
292
339
 
340
+ ## Render an AI tool result
341
+
342
+ It ships inside `@roxyapi/ui`, `@roxyapi/ui-react` and `@roxyapi/ui-vue`, so whichever one you already installed has it and there is nothing else to add.
343
+
344
+ Your model calls a Remote MCP tool at `roxyapi.com/mcp/{domain}` and hands you back a tool name and a JSON string. `componentForTool(name)` turns that name into the component that draws it, so a chat answer shows a real tarot spread or a real chart instead of a wall of fields. It works in any chat UI that lets you render your own markup for a tool result.
345
+
346
+ ```ts
347
+ import { componentForTool } from '@roxyapi/ui';
348
+
349
+ const found = componentForTool(toolName);
350
+ if (found) {
351
+ const el = document.createElement(found.tag);
352
+ for (const [name, value] of Object.entries(found.attrs ?? {})) el.setAttribute(name, value);
353
+ el.data = JSON.parse(result.content[0].text);
354
+ container.append(el);
355
+ }
356
+ ```
357
+
358
+ In React, `pascal` is the export name, so a namespace import renders it directly:
359
+
360
+ ```tsx
361
+ import * as RoxyUI from '@roxyapi/ui-react';
362
+ import { componentForTool } from '@roxyapi/ui-react';
363
+
364
+ export function ToolWidget({ toolName, output }: { toolName: string; output: string }) {
365
+ const found = componentForTool(toolName);
366
+ if (!found) return null;
367
+ const Component = RoxyUI[found.pascal as keyof typeof RoxyUI] as React.ComponentType<{ data: unknown }>;
368
+ return <Component data={JSON.parse(output)} {...found.attrs} />;
369
+ }
370
+ ```
371
+
372
+ A compact tool result is decoded for you, and a name a host prefixed with its server (`roxy_tarot:post_tarot_daily`) resolves the same as a bare one. Full recipe, with the vendor connectors and the Vercel AI SDK: <https://roxyapi.com/docs/tutorials/ai-chat-widgets>. Runnable page: [examples/vanilla/tool-result.html](examples/vanilla/tool-result.html).
373
+
293
374
  ## Server-rendered, no JavaScript wiring
294
375
 
295
376
  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.
@@ -428,7 +509,103 @@ const { data: d9 } = await roxy.vedicAstrology.generateDivisionalChart({
428
509
  <RoxyDivisionalChart data={d9} />
429
510
  ```
430
511
 
431
- ### 3. Numerology (life path, full chart, personal year)
512
+ ### 3. Forecast (transits, cross-domain timeline)
513
+
514
+ One stateless call merges Western transits, Vedic Vimshottari dasha boundaries, and biorhythm critical days into a single significance-scored, time-ordered timeline. Built for forecast feeds, transit alerts, and timing tools. No coordinates needed.
515
+
516
+ ```tsx
517
+ import { RoxyForecastTimeline } from '@roxyapi/ui-react';
518
+
519
+ // Transit forecast. The demand leader. Western transit-to-natal aspects, sign
520
+ // ingresses, and retrograde stations over the window.
521
+ const { data: transits } = await roxy.forecast.forecastTransits({
522
+ body: { birthData: { date: '1990-01-15', time: '14:30:00', timezone: 5.5 } },
523
+ });
524
+ <RoxyForecastTimeline data={transits} />
525
+
526
+ // Cross-domain timeline. The same window merged with Vedic dasha boundaries and
527
+ // biorhythm critical days into one significance-scored timeline.
528
+ const { data: timeline } = await roxy.forecast.generateTimeline({
529
+ body: {
530
+ birthData: { date: '1990-01-15', time: '14:30:00', timezone: 5.5 },
531
+ domains: ['western', 'vedic', 'biorhythm'],
532
+ },
533
+ });
534
+ <RoxyForecastTimeline data={timeline} />
535
+ ```
536
+
537
+ ### 4. Human Design (bodygraph)
538
+
539
+ A self-knowledge system computed from the same ephemeris as Western astrology, laid over the I Ching gate wheel and nine chakra-style centers. Self-discovery apps, dating and compatibility products, and AI coaching bots render the full bodygraph. No coordinates needed; Human Design uses the birth instant, not the observer location.
540
+
541
+ The response is a reading, not a set of labels: the type, strategy, authority, profile, and definition each arrive with the text that explains them, every defined channel and every center carry their own interpretation, and each of the activations carries a gate meaning and the meaning of its line. `<RoxyBodygraph>` lays that out for you. The chart and the identity read at a glance, and every body of prose sits behind a disclosure, so one component renders a complete reading without becoming a wall of text.
542
+
543
+ ```tsx
544
+ import { RoxyBodygraph } from '@roxyapi/ui-react';
545
+
546
+ // Full bodygraph. The head term every Human Design app leads with ("human design chart").
547
+ // Type, strategy, authority, profile, the nine centers, channels, and every gate
548
+ // activation in one call. Pass the birth instant only, no latitude or longitude.
549
+ const { data: bodygraph } = await roxy.humanDesign.generateBodygraph({
550
+ body: { date: '1990-01-15', time: '14:30:00', timezone: 5.5 },
551
+ });
552
+ <RoxyBodygraph data={bodygraph} />
553
+ ```
554
+
555
+ Every interpretation is localized. Ask for the language on the request and the component renders it, because the component prints the prose the API returned and holds no copy of its own.
556
+
557
+ ```tsx
558
+ const { data: bodygraph } = await roxy.humanDesign.generateBodygraph({
559
+ body: { date: '1990-01-15', time: '14:30:00', timezone: 5.5 },
560
+ query: { lang: 'de' },
561
+ });
562
+ ```
563
+
564
+ ### 5. Chinese astrology (four pillars, luck pillars, zodiac, almanac)
565
+
566
+ The BaZi chart a reading is built on, the ten-year luck pillars that time it, the twelve-animal zodiac, and the almanac people actually consult to pick a date. Fits date-selection tools, Chinese-new-year features and East Asian wellness apps.
567
+
568
+ ```tsx
569
+ import { RoxyBaziChart, RoxyZodiacCard, RoxyAlmanacDay } from '@roxyapi/ui-react';
570
+
571
+ // Four pillars. Stem over branch per pillar, hidden stems, Ten Gods, element balance.
572
+ const { data: bazi } = await roxy.chineseAstrology.generateBaziChart({
573
+ body: { date: '1990-01-15', time: '14:30:00', timezone: 'America/New_York' },
574
+ });
575
+ <RoxyBaziChart data={bazi} />
576
+
577
+ // The animal a birth date falls in, on the classical year boundary.
578
+ const { data: sign } = await roxy.chineseAstrology.calculateZodiacAnimal({
579
+ body: { date: '1990-01-15' },
580
+ });
581
+ <RoxyZodiacCard data={sign} mode="sign" />
582
+
583
+ // Almanac day. What the day favours, what it avoids, and the animal it clashes with.
584
+ const { data: day } = await roxy.chineseAstrology.getAlmanacDay({ path: { date: '2026-09-08' } });
585
+ <RoxyAlmanacDay data={day} mode="day" />
586
+ ```
587
+
588
+ ### 6. Feng shui (kua number, eight mansions, flying stars)
589
+
590
+ A person's Kua number and the eight directions it ranks for them, plus the Xuan Kong flying-star plate for a building. Fits home and office consultation tools, property apps and annual-forecast features.
591
+
592
+ ```tsx
593
+ import { RoxyKuaCard, RoxyFlyingStarChart } from '@roxyapi/ui-react';
594
+
595
+ // Kua number and the full Eight Mansions map, four favourable sectors and four not.
596
+ const { data: mansions } = await roxy.fengShui.generateEightMansions({
597
+ body: { date: '1990-01-15', gender: 'female' },
598
+ });
599
+ <RoxyKuaCard data={mansions} mode="mansions" />
600
+
601
+ // Flying star plate for a building, from its facing degrees and construction period.
602
+ const { data: plate } = await roxy.fengShui.generateFlyingStarChart({
603
+ body: { facingDegrees: 175, period: 9 },
604
+ });
605
+ <RoxyFlyingStarChart data={plate} mode="natal" />
606
+ ```
607
+
608
+ ### 7. Numerology (life path, full chart, personal year)
432
609
 
433
610
  Life path, the full chart, and the personal year. The easiest domain to integrate: a name and a birth date are enough, with no birth time and no coordinates.
434
611
 
@@ -454,7 +631,7 @@ const { data: pyear } = await roxy.numerology.calculatePersonalYear({
454
631
  <RoxyNumerologyCard data={pyear} type="personal-year" />
455
632
  ```
456
633
 
457
- ### 4. Tarot (daily card, three-card, Celtic Cross)
634
+ ### 8. Tarot (daily card, three-card, Celtic Cross)
458
635
 
459
636
  Draw a single daily card, a three-card spread, or a full Celtic Cross. The card database is stable reference data, so fetch it once and cache it rather than calling per render.
460
637
 
@@ -478,59 +655,7 @@ const { data: cc } = await roxy.tarot.castCelticCross({
478
655
  <RoxyTarotSpread data={cc} />
479
656
  ```
480
657
 
481
- ### 5. Human Design (bodygraph)
482
-
483
- A self-knowledge system computed from the same ephemeris as Western astrology, laid over the I Ching gate wheel and nine chakra-style centers. Self-discovery apps, dating and compatibility products, and AI coaching bots render the full bodygraph. No coordinates needed; Human Design uses the birth instant, not the observer location.
484
-
485
- The response is a reading, not a set of labels: the type, strategy, authority, profile, and definition each arrive with the text that explains them, every defined channel and every center carry their own interpretation, and each of the activations carries a gate meaning and the meaning of its line. `<RoxyBodygraph>` lays that out for you. The chart and the identity read at a glance, and every body of prose sits behind a disclosure, so one component renders a complete reading without becoming a wall of text.
486
-
487
- ```tsx
488
- import { RoxyBodygraph } from '@roxyapi/ui-react';
489
-
490
- // Full bodygraph. The head term every Human Design app leads with ("human design chart").
491
- // Type, strategy, authority, profile, the nine centers, channels, and every gate
492
- // activation in one call. Pass the birth instant only, no latitude or longitude.
493
- const { data: bodygraph } = await roxy.humanDesign.generateBodygraph({
494
- body: { date: '1990-01-15', time: '14:30:00', timezone: 5.5 },
495
- });
496
- <RoxyBodygraph data={bodygraph} />
497
- ```
498
-
499
- Every interpretation is localized. Ask for the language on the request and the component renders it, because the component prints the prose the API returned and holds no copy of its own.
500
-
501
- ```tsx
502
- const { data: bodygraph } = await roxy.humanDesign.generateBodygraph({
503
- body: { date: '1990-01-15', time: '14:30:00', timezone: 5.5 },
504
- query: { lang: 'de' },
505
- });
506
- ```
507
-
508
- ### 6. Forecast (transits, cross-domain timeline)
509
-
510
- One stateless call merges Western transits, Vedic Vimshottari dasha boundaries, and biorhythm critical days into a single significance-scored, time-ordered timeline. Built for forecast feeds, transit alerts, and timing tools. No coordinates needed.
511
-
512
- ```tsx
513
- import { RoxyForecastTimeline } from '@roxyapi/ui-react';
514
-
515
- // Transit forecast. The demand leader. Western transit-to-natal aspects, sign
516
- // ingresses, and retrograde stations over the window.
517
- const { data: transits } = await roxy.forecast.forecastTransits({
518
- body: { birthData: { date: '1990-01-15', time: '14:30:00', timezone: 5.5 } },
519
- });
520
- <RoxyForecastTimeline data={transits} />
521
-
522
- // Cross-domain timeline. The same window merged with Vedic dasha boundaries and
523
- // biorhythm critical days into one significance-scored timeline.
524
- const { data: timeline } = await roxy.forecast.generateTimeline({
525
- body: {
526
- birthData: { date: '1990-01-15', time: '14:30:00', timezone: 5.5 },
527
- domains: ['western', 'vedic', 'biorhythm'],
528
- },
529
- });
530
- <RoxyForecastTimeline data={timeline} />
531
- ```
532
-
533
- ### 7. Biorhythm (daily, forecast)
658
+ ### 9. Biorhythm (daily, forecast)
534
659
 
535
660
  Physical, emotional and intellectual cycles from a birth date alone, as a daily reading or a forward forecast with the critical days marked. Fits wellness, productivity, sports and couples apps.
536
661
 
@@ -551,7 +676,7 @@ const { data: forecast } = await roxy.biorhythm.getForecast({
551
676
  <RoxyBiorhythmChart data={forecast} mode="forecast" />
552
677
  ```
553
678
 
554
- ### 8. I Ching (cast a reading, hexagram lookup)
679
+ ### 10. I Ching (cast a reading, hexagram lookup)
555
680
 
556
681
  Cast a reading with its changing lines and the hexagram it transforms into, or look up any of the 64 figures directly. Fits meditation apps, decision-making tools and wisdom chatbots.
557
682
 
@@ -610,7 +735,7 @@ The self-fetch form renders spec-driven inputs (a zodiac tile picker, a boolean
610
735
  | `<roxy-transit-wheel>` | Western | POST /astrology/transit-aspects | Natal chart on the inner ring, transiting bodies on the outer ring, aspect lines between them |
611
736
  | `<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 |
612
737
  | `<roxy-moon-phase>` | Western | GET /astrology/moon-phase/{current,upcoming,calendar/...} | Moon phase card and calendar |
613
- | `<roxy-horoscope-card>` | Western | GET /astrology/horoscope/{sign}/{daily,weekly,monthly} | Daily, weekly, or monthly horoscope card |
738
+ | `<roxy-horoscope-card>` | Western | GET /astrology/horoscope/{sign}/{daily,weekly,monthly,yearly} | Daily, weekly, monthly, or yearly horoscope card |
614
739
  | `<roxy-astrocartography-map>` | Western | POST /astrology/astrocartography | World map of planetary MC, IC, Ascendant, and Descendant lines with per-line interpretations |
615
740
  | `<roxy-local-space-compass>` | Western | POST /astrology/local-space | Compass dial of planetary azimuth lines from the birthplace, dimmed below the horizon |
616
741
  | `<roxy-relocation-wheel>` | Western | POST /astrology/relocation-chart | Relocated chart wheel plus the move geometry, angular planets, and planets that change house |
@@ -655,6 +780,12 @@ The self-fetch form renders spec-driven inputs (a zodiac tile picker, a boolean
655
780
  | `<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 |
656
781
  | `<roxy-forecast-timeline>` | Forecast | POST /forecast/{timeline,significant-dates,transits} | Date-grouped events across Western, Vedic, and biorhythm domains, weighted by significance |
657
782
  | `<roxy-forecast-digest>` | Forecast | POST /forecast/digest | Per-window event counts, domain breakdown, and the highest-significance events |
783
+ | `<roxy-bazi-chart>` | Chinese | POST /chinese-astrology/bazi/chart | Year, month, day and hour pillars in hanzi with hidden stems, Ten Gods, Na Yin, element balance and interactions |
784
+ | `<roxy-luck-pillars>` | Chinese | POST /chinese-astrology/bazi/luck-pillars | Ten-year luck pillars as a strip with ages and years, the annual pillars, and the direction and start age behind them |
785
+ | `<roxy-zodiac-card>` | Chinese | POST /chinese-astrology/zodiac/sign, GET /chinese-astrology/zodiac/{animals/{id},{id}/daily,compatibility/{sign1}/{sign2}} | The animal for a date, one animal in full, a daily reading, or a pair scored |
786
+ | `<roxy-almanac-day>` | Chinese | GET /chinese-astrology/calendar/{day/{date},monthly}, POST /chinese-astrology/calendar/auspicious-days | Day officer, favours and avoids, clash animal and pillars, as one day, a month, or a date search |
787
+ | `<roxy-flying-star-chart>` | Feng Shui | POST /feng-shui/flying-stars/natal, GET /feng-shui/flying-stars/annual/{year} | Nine-palace flying star plate with the mountain, period and water star per palace, the facing and sitting mountains and the structure |
788
+ | `<roxy-kua-card>` | Feng Shui | POST /feng-shui/kua, POST /feng-shui/eight-mansions | Kua number and trigram over the eight-sector direction map, favourable and unfavourable sectors ranked |
658
789
  | `<roxy-biorhythm-chart>` | Biorhythm | POST /biorhythm/{daily,forecast,critical-days} | Daily bars, forecast cycle lines, critical days |
659
790
  | `<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 |
660
791
  | `<roxy-crystal-card>` | Crystals | GET /crystals/{id} | Photo, meaning sections, chakra, zodiac, element, hardness, keywords, and pairings |
@@ -753,7 +884,7 @@ What each family keeps when you set it:
753
884
 
754
885
  - Charts and wheels keep the drawing, the legend, the glyphs, every degree and house, and the tab strip.
755
886
  - Tables keep every row and column, including the calculated ones (kaksha bindus, koota scores, significance bars, orbs and strengths).
756
- - Cards keep the header, the badges, the meters and the fact grids: a dosha keeps its present or absent verdict, its phase and its severity; a crystal keeps its Mohs hardness and its attribute grid; a horoscope keeps its energy meter, its Moon placement, the transits behind the reading and its key dates.
887
+ - Cards keep the header, the badges, the meters and the fact grids: a dosha keeps its present or absent verdict, its phase and its severity; a crystal keeps its Mohs hardness and its attribute grid; a horoscope keeps its energy meter, its Moon placement, the transits behind the reading, its key dates, and the dated sky events the reading was built on, each with its exact instant and the house it falls in.
757
888
  - Vedic responses keep the sidereal frame caption, so a chart is still reconcilable against another calculator.
758
889
 
759
890
  What goes: interpretation paragraphs, the reading accordions, keyword chips attached to a reading, remedies and action steps and strengths lists (sentences laid out as bullets), and any section whose only content was one of those, heading included.
@@ -801,7 +932,9 @@ Two things are separate on purpose. The catalogue is the wording this library wr
801
932
 
802
933
  Dates, times and numbers follow the page as well, in the conventions that language actually uses: a Spanish page reads `15 ene 1990`, an Argentine one `15 de ene de 1990`, a German one `15. Jan. 1990, 14:30`. The hour cycle comes from the language, not from us, so nobody gets a 12-hour clock on a page that writes 24. This needs no catalogue and no attribute: it follows the same `lang` your page already declares.
803
934
 
804
- A catalogue ships for every language the API serves: `de`, `es`, `fr`, `hi`, `pt`, `ru`, `tr`. Coverage grows card by card, and a card is either translated or it is not, so a component reads its own labels in your language or renders them in English, never a mixture. Every term in every catalogue is sourced from named astrology references in that language rather than translated word for word, because the words a practitioner reads are the product.
935
+ A catalogue ships for `de`, `es`, `fr`, `hi`, `pt`, `ru` and `tr`. Coverage grows card by card, and a card is either translated or it is not, so a component reads its own labels in your language or renders them in English, never a mixture. Every term in every catalogue is sourced from named astrology references in that language rather than translated word for word, because the words a practitioner reads are the product.
936
+
937
+ Chinese is keyed by script rather than by language, so a page declaring `zh-Hant` or `zh-Hans` gets the response in that script from the endpoints that serve it. A regional tag resolves on its own: `zh-TW` and `zh-HK` read as traditional, `zh-CN` and `zh-SG` as simplified. Component labels stay English on those pages, and the response carries the vocabulary.
805
938
 
806
939
  ## Reliability
807
940
 
@@ -810,7 +943,7 @@ A catalogue ships for every language the API serves: `de`, `es`, `fr`, `hi`, `pt
810
943
  - Consistent response formats across every domain in the catalog.
811
944
  - A11y zero violations enforced in CI.
812
945
  - Tight per-component bundle budget enforced in CI.
813
- - Coverage of the highest-demand endpoints across Western astrology, Vedic astrology, numerology, tarot, Human Design, forecast, biorhythm, I Ching, plus helpers for location search and schema-driven forms.
946
+ - Coverage of the highest-demand endpoints across Western astrology, Vedic astrology, forecast, Human Design, Chinese astrology, feng shui, numerology, tarot, biorhythm, I Ching, plus helpers for location search and schema-driven forms.
814
947
 
815
948
  ## Built for AI agents
816
949
 
@@ -837,7 +970,7 @@ Local preview serves `apps/docs/` on port 3001. Same directory and same paths th
837
970
 
838
971
  ## Stack and integrations
839
972
 
840
- Roxy UI runs in any framework that supports the DOM: **React, Next.js, Vue, Svelte, Angular, Solid, Astro, Qwik, Hono, Remix, Nuxt, SvelteKit, Lit, plain HTML, WordPress, Shopify themes that allow custom code, and any MCP-compatible AI agent**. Distribution paths: npm, jsDelivr CDN, shadcn registry. Use cases: astrology widgets, kundli matching, daily horoscope, tarot reader, numerology calculator, biorhythm dashboard, I Ching cast, panchang almanac, dasha timeline, moon phase tracker, synastry compatibility, dosha checker.
973
+ Roxy UI runs in any framework that supports the DOM: **React, Next.js, Vue, Svelte, Angular, Solid, Astro, Qwik, Hono, Remix, Nuxt, SvelteKit, Lit, plain HTML, WordPress, Shopify themes that allow custom code, and any MCP-compatible AI agent**. Distribution paths: npm, jsDelivr CDN, shadcn registry. Use cases: astrology widgets, kundli matching, daily horoscope, BaZi four pillars chart, Chinese zodiac readings, feng shui Kua and flying star plates, almanac day picker, tarot reader, numerology calculator, biorhythm dashboard, I Ching cast, panchang almanac, dasha timeline, moon phase tracker, synastry compatibility, dosha checker.
841
974
 
842
975
  ## FAQ
843
976
 
@@ -873,7 +1006,7 @@ Persist the choice in `localStorage` from your own code; the components do not o
873
1006
  <details>
874
1007
  <summary><strong>How big is each component? What is the bundle cost?</strong></summary>
875
1008
 
876
- Per-component bundles run 13-26 KB gzipped, capped at 30 KB by CI. The full bundle (every component, helpers, base styles, and the inlined design tokens) stays well under the 150 KB CI cap, around 108 KB gzipped today. The React and Vue packages load 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.
1009
+ Every component bundle is under 30 KB gzipped and the full bundle (every component, helpers, base styles, and the inlined design tokens) is under 150 KB gzipped. Both ceilings are enforced in CI on every build, measured on the compressed bytes a browser actually downloads, so a release cannot quietly grow past them. 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.
877
1010
  </details>
878
1011
 
879
1012
  <details>