@roxyapi/ui-react 0.10.0 → 0.11.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 (188) hide show
  1. package/AGENTS.md +31 -23
  2. package/README.md +23 -6
  3. package/dist/components/angel-number-card.d.ts +10 -0
  4. package/dist/components/angel-number-card.d.ts.map +1 -1
  5. package/dist/components/angel-number-card.js +1 -1
  6. package/dist/components/angel-number-card.js.map +3 -3
  7. package/dist/components/angel-number-lookup.d.ts +10 -0
  8. package/dist/components/angel-number-lookup.d.ts.map +1 -1
  9. package/dist/components/angel-number-lookup.js +1 -1
  10. package/dist/components/angel-number-lookup.js.map +3 -3
  11. package/dist/components/ashtakavarga-grid.d.ts +10 -0
  12. package/dist/components/ashtakavarga-grid.d.ts.map +1 -1
  13. package/dist/components/ashtakavarga-grid.js +1 -1
  14. package/dist/components/ashtakavarga-grid.js.map +3 -3
  15. package/dist/components/aspects-table.d.ts +22 -0
  16. package/dist/components/aspects-table.d.ts.map +1 -0
  17. package/dist/components/aspects-table.js +2 -0
  18. package/dist/components/aspects-table.js.map +7 -0
  19. package/dist/components/biorhythm-chart.d.ts +10 -0
  20. package/dist/components/biorhythm-chart.d.ts.map +1 -1
  21. package/dist/components/biorhythm-chart.js +1 -1
  22. package/dist/components/biorhythm-chart.js.map +3 -3
  23. package/dist/components/bodygraph.js.map +1 -1
  24. package/dist/components/choghadiya-grid.d.ts +10 -0
  25. package/dist/components/choghadiya-grid.d.ts.map +1 -1
  26. package/dist/components/choghadiya-grid.js +1 -1
  27. package/dist/components/choghadiya-grid.js.map +3 -3
  28. package/dist/components/compatibility-card.d.ts +10 -0
  29. package/dist/components/compatibility-card.d.ts.map +1 -1
  30. package/dist/components/compatibility-card.js +1 -1
  31. package/dist/components/compatibility-card.js.map +3 -3
  32. package/dist/components/crystal-card.d.ts +22 -0
  33. package/dist/components/crystal-card.d.ts.map +1 -0
  34. package/dist/components/crystal-card.js +2 -0
  35. package/dist/components/crystal-card.js.map +7 -0
  36. package/dist/components/crystal-grid.d.ts +10 -0
  37. package/dist/components/crystal-grid.d.ts.map +1 -1
  38. package/dist/components/crystal-grid.js +1 -1
  39. package/dist/components/crystal-grid.js.map +3 -3
  40. package/dist/components/dasha-timeline.d.ts +10 -0
  41. package/dist/components/dasha-timeline.d.ts.map +1 -1
  42. package/dist/components/dasha-timeline.js +1 -1
  43. package/dist/components/dasha-timeline.js.map +3 -3
  44. package/dist/components/data.js.map +1 -1
  45. package/dist/components/divisional-chart.d.ts +10 -0
  46. package/dist/components/divisional-chart.d.ts.map +1 -1
  47. package/dist/components/divisional-chart.js +1 -1
  48. package/dist/components/divisional-chart.js.map +3 -3
  49. package/dist/components/dosha-card.d.ts +10 -0
  50. package/dist/components/dosha-card.d.ts.map +1 -1
  51. package/dist/components/dosha-card.js +1 -1
  52. package/dist/components/dosha-card.js.map +3 -3
  53. package/dist/components/dream-card.d.ts +10 -0
  54. package/dist/components/dream-card.d.ts.map +1 -1
  55. package/dist/components/dream-card.js +1 -1
  56. package/dist/components/dream-card.js.map +3 -3
  57. package/dist/components/dream-search.d.ts +22 -0
  58. package/dist/components/dream-search.d.ts.map +1 -0
  59. package/dist/components/dream-search.js +2 -0
  60. package/dist/components/dream-search.js.map +7 -0
  61. package/dist/components/endpoint-form.js.map +1 -1
  62. package/dist/components/forecast-digest.d.ts +22 -0
  63. package/dist/components/forecast-digest.d.ts.map +1 -0
  64. package/dist/components/forecast-digest.js +2 -0
  65. package/dist/components/forecast-digest.js.map +7 -0
  66. package/dist/components/forecast-timeline.d.ts +14 -1
  67. package/dist/components/forecast-timeline.d.ts.map +1 -1
  68. package/dist/components/forecast-timeline.js +1 -1
  69. package/dist/components/forecast-timeline.js.map +3 -3
  70. package/dist/components/guna-milan.d.ts +10 -0
  71. package/dist/components/guna-milan.d.ts.map +1 -1
  72. package/dist/components/guna-milan.js +1 -1
  73. package/dist/components/guna-milan.js.map +3 -3
  74. package/dist/components/hd-connection.d.ts +22 -0
  75. package/dist/components/hd-connection.d.ts.map +1 -0
  76. package/dist/components/hd-connection.js +2 -0
  77. package/dist/components/hd-connection.js.map +7 -0
  78. package/dist/components/hd-penta.d.ts +22 -0
  79. package/dist/components/hd-penta.d.ts.map +1 -0
  80. package/dist/components/hd-penta.js +2 -0
  81. package/dist/components/hd-penta.js.map +7 -0
  82. package/dist/components/hd-variables.d.ts +22 -0
  83. package/dist/components/hd-variables.d.ts.map +1 -0
  84. package/dist/components/hd-variables.js +2 -0
  85. package/dist/components/hd-variables.js.map +7 -0
  86. package/dist/components/hexagram.d.ts +10 -0
  87. package/dist/components/hexagram.d.ts.map +1 -1
  88. package/dist/components/hexagram.js +1 -1
  89. package/dist/components/hexagram.js.map +3 -3
  90. package/dist/components/hora-table.d.ts +22 -0
  91. package/dist/components/hora-table.d.ts.map +1 -0
  92. package/dist/components/hora-table.js +2 -0
  93. package/dist/components/hora-table.js.map +7 -0
  94. package/dist/components/horoscope-card.d.ts +10 -0
  95. package/dist/components/horoscope-card.d.ts.map +1 -1
  96. package/dist/components/horoscope-card.js +1 -1
  97. package/dist/components/horoscope-card.js.map +3 -3
  98. package/dist/components/kp-chart.d.ts +10 -0
  99. package/dist/components/kp-chart.d.ts.map +1 -1
  100. package/dist/components/kp-chart.js +1 -1
  101. package/dist/components/kp-chart.js.map +3 -3
  102. package/dist/components/kp-planets-table.d.ts +10 -0
  103. package/dist/components/kp-planets-table.d.ts.map +1 -1
  104. package/dist/components/kp-planets-table.js +1 -1
  105. package/dist/components/kp-planets-table.js.map +3 -3
  106. package/dist/components/kp-ruling-planets.d.ts +10 -0
  107. package/dist/components/kp-ruling-planets.d.ts.map +1 -1
  108. package/dist/components/kp-ruling-planets.js +1 -1
  109. package/dist/components/kp-ruling-planets.js.map +3 -3
  110. package/dist/components/location-search.js.map +1 -1
  111. package/dist/components/moon-phase.d.ts +10 -0
  112. package/dist/components/moon-phase.d.ts.map +1 -1
  113. package/dist/components/moon-phase.js +1 -1
  114. package/dist/components/moon-phase.js.map +3 -3
  115. package/dist/components/nakshatra-card.d.ts +10 -0
  116. package/dist/components/nakshatra-card.d.ts.map +1 -1
  117. package/dist/components/nakshatra-card.js +1 -1
  118. package/dist/components/nakshatra-card.js.map +3 -3
  119. package/dist/components/natal-chart.d.ts +10 -0
  120. package/dist/components/natal-chart.d.ts.map +1 -1
  121. package/dist/components/natal-chart.js +1 -1
  122. package/dist/components/natal-chart.js.map +3 -3
  123. package/dist/components/numerology-card.d.ts +13 -3
  124. package/dist/components/numerology-card.d.ts.map +1 -1
  125. package/dist/components/numerology-card.js +1 -1
  126. package/dist/components/numerology-card.js.map +3 -3
  127. package/dist/components/panchang-table.d.ts +10 -0
  128. package/dist/components/panchang-table.d.ts.map +1 -1
  129. package/dist/components/panchang-table.js +1 -1
  130. package/dist/components/panchang-table.js.map +3 -3
  131. package/dist/components/reference-card.d.ts +22 -0
  132. package/dist/components/reference-card.d.ts.map +1 -0
  133. package/dist/components/reference-card.js +2 -0
  134. package/dist/components/reference-card.js.map +7 -0
  135. package/dist/components/shadbala-table.d.ts +10 -0
  136. package/dist/components/shadbala-table.d.ts.map +1 -1
  137. package/dist/components/shadbala-table.js +1 -1
  138. package/dist/components/shadbala-table.js.map +3 -3
  139. package/dist/components/synastry-chart.d.ts +10 -0
  140. package/dist/components/synastry-chart.d.ts.map +1 -1
  141. package/dist/components/synastry-chart.js +1 -1
  142. package/dist/components/synastry-chart.js.map +3 -3
  143. package/dist/components/tarot-card.d.ts +10 -0
  144. package/dist/components/tarot-card.d.ts.map +1 -1
  145. package/dist/components/tarot-card.js +1 -1
  146. package/dist/components/tarot-card.js.map +3 -3
  147. package/dist/components/tarot-catalog.d.ts +24 -0
  148. package/dist/components/tarot-catalog.d.ts.map +1 -0
  149. package/dist/components/tarot-catalog.js +2 -0
  150. package/dist/components/tarot-catalog.js.map +7 -0
  151. package/dist/components/tarot-spread.d.ts +13 -3
  152. package/dist/components/tarot-spread.d.ts.map +1 -1
  153. package/dist/components/tarot-spread.js +1 -1
  154. package/dist/components/tarot-spread.js.map +3 -3
  155. package/dist/components/transits-table.d.ts +10 -0
  156. package/dist/components/transits-table.d.ts.map +1 -1
  157. package/dist/components/transits-table.js +1 -1
  158. package/dist/components/transits-table.js.map +3 -3
  159. package/dist/components/vedic-aspects.d.ts +22 -0
  160. package/dist/components/vedic-aspects.d.ts.map +1 -0
  161. package/dist/components/vedic-aspects.js +2 -0
  162. package/dist/components/vedic-aspects.js.map +7 -0
  163. package/dist/components/vedic-kundli.d.ts +10 -0
  164. package/dist/components/vedic-kundli.d.ts.map +1 -1
  165. package/dist/components/vedic-kundli.js +1 -1
  166. package/dist/components/vedic-kundli.js.map +3 -3
  167. package/dist/components/vedic-planets-table.d.ts +10 -0
  168. package/dist/components/vedic-planets-table.d.ts.map +1 -1
  169. package/dist/components/vedic-planets-table.js +1 -1
  170. package/dist/components/vedic-planets-table.js.map +3 -3
  171. package/dist/components/western-planets-table.d.ts +10 -0
  172. package/dist/components/western-planets-table.d.ts.map +1 -1
  173. package/dist/components/western-planets-table.js +1 -1
  174. package/dist/components/western-planets-table.js.map +3 -3
  175. package/dist/components/yoga-list.d.ts +12 -2
  176. package/dist/components/yoga-list.d.ts.map +1 -1
  177. package/dist/components/yoga-list.js +1 -1
  178. package/dist/components/yoga-list.js.map +3 -3
  179. package/dist/index.cjs +1 -1
  180. package/dist/index.cjs.map +4 -4
  181. package/dist/index.d.ts +11 -0
  182. package/dist/index.d.ts.map +1 -1
  183. package/dist/index.js +1 -1
  184. package/dist/index.js.map +4 -4
  185. package/dist/load-ui.d.ts +1 -1
  186. package/dist/load-ui.js +1 -1
  187. package/dist/load-ui.js.map +1 -1
  188. package/package.json +1 -1
package/AGENTS.md CHANGED
@@ -57,6 +57,7 @@ Use the table below for the formal endpoint to component mapping.
57
57
  | `<roxy-synastry-chart>` | Western | POST /astrology/synastry | Dual-wheel synastry with inter-aspects table |
58
58
  | `<roxy-western-planets-table>` | Western | POST /astrology/natal-chart | Sign, degree, house, motion columns plus ASC, MC, PoF, Vertex |
59
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 |
60
61
  | `<roxy-moon-phase>` | Western | GET /astrology/moon-phase/{current,upcoming,calendar/...} | Moon phase card and calendar |
61
62
  | `<roxy-horoscope-card>` | Western | GET /astrology/horoscope/{sign}/{daily,weekly,monthly} | Daily, weekly, or monthly horoscope card |
62
63
  | `<roxy-compatibility-card>` | Cross | POST /astrology/compatibility-score, /numerology/compatibility, /biorhythm/compatibility | Score card with category breakdown |
@@ -71,22 +72,32 @@ Use the table below for the formal endpoint to component mapping.
71
72
  | `<roxy-dasha-timeline>` | Vedic | POST /vedic-astrology/dasha/{current,major,sub/...} | Vimshottari mahadasha + antardasha + pratyantardasha |
72
73
  | `<roxy-guna-milan>` | Vedic | POST /vedic-astrology/compatibility | 36-point Ashtakoota with eight sub-scores |
73
74
  | `<roxy-panchang-table>` | Vedic | POST /vedic-astrology/panchang/{basic,detailed} | 15+ muhurtas in detailed mode |
75
+ | `<roxy-vedic-aspects>` | Vedic | POST /vedic-astrology/aspects | Graha drishti rows with aspect type, strength, and orb, plus mutual aspects |
76
+ | `<roxy-hora-table>` | Vedic | POST /vedic-astrology/panchang/hora | Day and night planetary hours with ruling planet and window |
74
77
  | `<roxy-choghadiya-grid>` | Vedic | POST /vedic-astrology/panchang/choghadiya | Day and night Choghadiya muhurta tiles colored by effect |
75
78
  | `<roxy-yoga-list>` | Vedic | GET /vedic-astrology/yoga, /yoga/{id} | Filterable yoga cards from the 300 plus yoga catalog |
76
79
  | `<roxy-nakshatra-card>` | Vedic | GET /vedic-astrology/nakshatras/{id} | Lord, deity, symbol, characteristics, remedies |
77
80
  | `<roxy-dosha-card>` | Vedic | POST /vedic-astrology/dosha/{manglik,kalsarpa,sadhesati} | Presence, severity, remedies, scoped effects |
78
- | `<roxy-numerology-card>` | Numerology | POST /numerology/{life-path,expression,soul-urge,personality,personal-year,chart} | Life path, expression, soul urge, personality, personal year, full chart |
81
+ | `<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 |
79
82
  | `<roxy-tarot-card>` | Tarot | GET /tarot/cards/{id}, POST /tarot/daily | Single card with upright and reversed flip |
83
+ | `<roxy-tarot-catalog>` | Tarot | GET /tarot/cards | Deck gallery tiles with card art, name, and arcana and suit |
80
84
  | `<roxy-tarot-spread>` | Tarot | POST /tarot/spreads/{three-card,celtic-cross,love}, /tarot/yes-no, /tarot/draw | Spreads with positions and reading |
81
85
  | `<roxy-bodygraph>` | Human Design | POST /human-design/bodygraph | Nine-center chart with defined and open centers, active channels, gates, and a type and authority summary |
86
+ | `<roxy-hd-connection>` | Human Design | POST /human-design/connection | Electromagnetic, compromise, and dominance channels between two charts |
87
+ | `<roxy-hd-penta>` | Human Design | POST /human-design/penta | Group penta channels split into upper and lower triangles |
88
+ | `<roxy-hd-variables>` | Human Design | POST /human-design/variables | The four transformation arrows with direction and PHS labels |
82
89
  | `<roxy-forecast-timeline>` | Forecast | POST /forecast/timeline | Date-grouped events across Western, Vedic, and biorhythm domains, weighted by significance |
90
+ | `<roxy-forecast-digest>` | Forecast | POST /forecast/digest | Per-window event counts, domain breakdown, and the highest-significance events |
83
91
  | `<roxy-biorhythm-chart>` | Biorhythm | POST /biorhythm/{daily,forecast,critical-days} | Daily bars, forecast cycle lines, critical days |
84
92
  | `<roxy-hexagram>` | I Ching | GET /iching/hexagrams/{number}, /iching/cast, POST /iching/daily, /iching/daily/cast | Hexagram with trigrams, judgment, image, changing lines |
93
+ | `<roxy-crystal-card>` | Crystals | GET /crystals/{id} | Photo, meaning sections, chakra, zodiac, element, hardness, keywords, and pairings |
85
94
  | `<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 |
86
95
  | `<roxy-dream-card>` | Dreams | GET /dreams/symbols/{id} | Symbol name, interpretation body, and letter chip |
87
- | `<roxy-angel-number-card>` | Angel Numbers | GET /angel-numbers/numbers/{number} | Number meaning with spiritual, love, career, and twin flame sections |
96
+ | `<roxy-dream-search>` | Dreams | GET /dreams/symbols | Matched dream symbols as selectable tiles with a letter chip |
97
+ | `<roxy-angel-number-card>` | Angel Numbers | GET /angel-numbers/numbers/{number} | Number meaning with spiritual, love, career, money, twin flame, biblical, and shadow sections |
88
98
  | `<roxy-angel-number-lookup>` | Angel Numbers | GET /angel-numbers/lookup | Pattern analysis plus known meaning and digit-root fallback |
89
- | `<roxy-endpoint-form>` | Helper | Any endpoint via x-roxy-ui hints | Schema-driven form, emits roxy-submit |
99
+ | `<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 |
100
+ | `<roxy-endpoint-form>` | Helper | Any endpoint, from the spec | Schema-driven form, emits roxy-submit |
90
101
  | `<roxy-location-search>` | Helper | GET /location/search | Debounced city search input, emits roxy-location-select |
91
102
  | `<roxy-data>` | Helper | Any response shape | Generic fallback renderer for unknown shapes |
92
103
  <!-- END:COMPONENTS -->
@@ -279,30 +290,26 @@ For a static chart with no picker, fetch in a Server Component and pass `data` t
279
290
  </script>
280
291
  ```
281
292
 
282
- ### Pattern 4: fully client-side with a publishable key (no server)
293
+ ### Pattern 4: fully client-side with a publishable key (no server, no script)
283
294
 
284
- When you do not want a backend at all, mint a **publishable key** (`pk_live_*`) at `roxyapi.com/account`, register the origins you embed on, and call RoxyAPI directly from the browser. The publishable key is safe to ship in client code: it is origin-restricted (any other origin gets 403) and cannot read your account. `<roxy-location-search>` accepts the key via its `publishable-key` attribute and fetches geocoding itself; for the data endpoints you make a normal browser `fetch` with the key in the `X-API-Key` header, then assign the response to the rendering component.
295
+ 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.
285
296
 
286
297
  ```html
287
- <roxy-location-search publishable-key="pk_live_..."></roxy-location-search>
288
- <roxy-natal-chart></roxy-natal-chart>
289
-
290
- <script type="module">
291
- const chart = document.querySelector('roxy-natal-chart');
292
- document.querySelector('roxy-location-search').addEventListener('roxy-location-select', async (e) => {
293
- const { latitude, longitude, timezone } = e.detail;
294
- if (latitude == null || longitude == null) return;
295
- const res = await fetch('https://roxyapi.com/api/v2/astrology/natal-chart', {
296
- method: 'POST',
297
- headers: { 'X-API-Key': 'pk_live_...', 'Content-Type': 'application/json' },
298
- body: JSON.stringify({ date: '1990-01-15', time: '14:30:00', latitude, longitude, timezone }),
299
- });
300
- chart.data = await res.json(); // pass the unwrapped response, not an envelope
301
- });
302
- </script>
298
+ <roxy-natal-chart
299
+ data-endpoint="astrology/natal-chart"
300
+ publishable-key="pk_live_..."
301
+ ></roxy-natal-chart>
303
302
  ```
304
303
 
305
- Rendering components do not fetch on their own; you set `data`. Only `<roxy-location-search>` (and `<roxy-endpoint-form>` for the spec) fetch internally. A zero-wiring `data-*` auto-mount that fetches and renders with no script is still on the roadmap.
304
+ 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`).
305
+
306
+ **Key handling is the contract. The component enforces it, not you:**
307
+
308
+ - The publishable key is safe in client code: it is origin-restricted (any other origin gets 403) and cannot read your account.
309
+ - 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.
310
+ - 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.
311
+
312
+ In React, the same props are typed: `<RoxyNatalChart endpoint="astrology/natal-chart" publishableKey={process.env.NEXT_PUBLIC_ROXY_PK} />`.
306
313
 
307
314
  ### Pattern 5: MCP tool-call response
308
315
 
@@ -426,7 +433,7 @@ When listing domains in user-visible copy, use the canonical order: Western astr
426
433
  - Do not call astrology endpoints with hardcoded coordinates. Always geocode first via `<roxy-location-search>` or `roxy.location.searchCities()`.
427
434
  - 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.
428
435
  - 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.
429
- - Do not fetch inside chart, table, or card components. They are stateless: pass `data` as a prop. Documented exceptions are `<roxy-location-search>`, `<roxy-endpoint-form>`, and the widgets auto-mount script.
436
+ - 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.
430
437
  - Do not redefine theme tokens or invent your own naming. Override the existing `--roxy-*` custom properties; the full list is in `THEMING.md`.
431
438
 
432
439
  ## Where to look next
@@ -436,3 +443,4 @@ When listing domains in user-visible copy, use the canonical order: Western astr
436
443
  - Token reference: `packages/ui/THEMING.md`
437
444
  - Live preview: `bun run preview` then open `http://localhost:3001`
438
445
  - Endpoint reference: <https://roxyapi.com/api-reference>
446
+ - 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/README.md CHANGED
@@ -234,7 +234,7 @@ const { data } = await roxy.astrology.getDailyHoroscope({ path: { sign: 'aries'
234
234
  return <RoxyHoroscopeCard data={data} />;
235
235
  ```
236
236
 
237
- Then expand into natal charts, kundli, dasha, tarot, and every other domain. The SDK returns `data`, the component renders it; the same pairing holds for all 36 components.
237
+ Then expand into natal charts, kundli, dasha, tarot, and every other domain. The SDK returns `data`, the component renders it; the same pairing holds for every component in the catalog.
238
238
 
239
239
  > **Pass `data`, not the envelope.** The SDK returns `{ data, error, request, response }`. Pass `data`, or the component renders `[object Object]`. This is the most common integration bug.
240
240
 
@@ -538,9 +538,14 @@ const { data: random } = await roxy.iching.getRandomHexagram();
538
538
 
539
539
  Get a key at <https://roxyapi.com/account>.
540
540
 
541
- Two key types. **Secret keys** (`sk_*`) grant full account access: use them server side only (Node, Bun, Hono, Next.js route handlers, Workers). Never commit one, never ship one in a client bundle. **Publishable keys** (`pk_live_*` / `pk_test_*`) are browser-safe: mint one, register the origins you embed on, and any other origin gets a 403 at the gateway. Use a publishable key when you call RoxyAPI directly from the browser with no backend.
541
+ Two key types. **Secret keys** (`sk_*`) grant full account access: use them server side only (Node, Bun, Hono, Next.js route handlers, Workers). Never commit one, never ship one in a client bundle. **Publishable keys** (`pk_live_*` / `pk_test_*`) are browser-safe: mint one, register the origins you embed on, and any other origin gets a 403 at the gateway.
542
542
 
543
- Set `ROXY_API_KEY` to your secret key in your server env for the server-side SDK examples on this page. For direct client-side embedding with no backend, use a publishable key (see the fully client-side pattern in [`AGENTS.md`](AGENTS.md)).
543
+ Two ways to feed a component, and the key rule for each:
544
+
545
+ - **Controlled (recommended for production).** Your server fetches with the secret key and passes the response in via the `data` property or a `roxy-data` JSON island. No key of any kind reaches the browser. This is what the WordPress plugin and the server-rendered patterns do.
546
+ - **Self-fetch (no backend).** Give the component a `data-endpoint` and a `publishable-key` and it renders its own form and fetches in the browser. Only publishable keys work here: a secret key is refused client-side, so the component sends nothing and raises a validation error. A secret key cannot leak through self-fetch.
547
+
548
+ Set `ROXY_API_KEY` to your secret key in your server env for the server-side SDK examples on this page. For self-fetch embedding with no backend, use a publishable key (see the fully client-side pattern in [`AGENTS.md`](AGENTS.md)).
544
549
 
545
550
  ## Distribution
546
551
 
@@ -552,6 +557,7 @@ Set `ROXY_API_KEY` to your secret key in your server env for the server-side SDK
552
557
  | jsDelivr CDN (per component) | `cdn.jsdelivr.net/npm/@roxyapi/ui@latest/dist/cdn/components/{name}.js` |
553
558
  | Widgets auto-mount (with browser keys, coming soon) | `cdn.jsdelivr.net/npm/@roxyapi/ui@latest/dist/cdn/widgets.js` |
554
559
  | shadcn registry | `npx shadcn@latest add https://cdn.jsdelivr.net/gh/RoxyAPI/ui@latest/registry/{name}.json` |
560
+ | Components catalog (JSON: every component, domain, and endpoint) | `cdn.jsdelivr.net/npm/@roxyapi/ui@latest/components-catalog.json` |
555
561
 
556
562
  ## Components
557
563
 
@@ -562,6 +568,7 @@ Set `ROXY_API_KEY` to your secret key in your server env for the server-side SDK
562
568
  | `<roxy-synastry-chart>` | Western | POST /astrology/synastry | Dual-wheel synastry with inter-aspects table |
563
569
  | `<roxy-western-planets-table>` | Western | POST /astrology/natal-chart | Sign, degree, house, motion columns plus ASC, MC, PoF, Vertex |
564
570
  | `<roxy-transits-table>` | Western | POST /astrology/transits | Transit planet positions plus optional aspects to a natal chart |
571
+ | `<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 |
565
572
  | `<roxy-moon-phase>` | Western | GET /astrology/moon-phase/{current,upcoming,calendar/...} | Moon phase card and calendar |
566
573
  | `<roxy-horoscope-card>` | Western | GET /astrology/horoscope/{sign}/{daily,weekly,monthly} | Daily, weekly, or monthly horoscope card |
567
574
  | `<roxy-compatibility-card>` | Cross | POST /astrology/compatibility-score, /numerology/compatibility, /biorhythm/compatibility | Score card with category breakdown |
@@ -576,22 +583,32 @@ Set `ROXY_API_KEY` to your secret key in your server env for the server-side SDK
576
583
  | `<roxy-dasha-timeline>` | Vedic | POST /vedic-astrology/dasha/{current,major,sub/...} | Vimshottari mahadasha + antardasha + pratyantardasha |
577
584
  | `<roxy-guna-milan>` | Vedic | POST /vedic-astrology/compatibility | 36-point Ashtakoota with eight sub-scores |
578
585
  | `<roxy-panchang-table>` | Vedic | POST /vedic-astrology/panchang/{basic,detailed} | 15+ muhurtas in detailed mode |
586
+ | `<roxy-vedic-aspects>` | Vedic | POST /vedic-astrology/aspects | Graha drishti rows with aspect type, strength, and orb, plus mutual aspects |
587
+ | `<roxy-hora-table>` | Vedic | POST /vedic-astrology/panchang/hora | Day and night planetary hours with ruling planet and window |
579
588
  | `<roxy-choghadiya-grid>` | Vedic | POST /vedic-astrology/panchang/choghadiya | Day and night Choghadiya muhurta tiles colored by effect |
580
589
  | `<roxy-yoga-list>` | Vedic | GET /vedic-astrology/yoga, /yoga/{id} | Filterable yoga cards from the 300 plus yoga catalog |
581
590
  | `<roxy-nakshatra-card>` | Vedic | GET /vedic-astrology/nakshatras/{id} | Lord, deity, symbol, characteristics, remedies |
582
591
  | `<roxy-dosha-card>` | Vedic | POST /vedic-astrology/dosha/{manglik,kalsarpa,sadhesati} | Presence, severity, remedies, scoped effects |
583
- | `<roxy-numerology-card>` | Numerology | POST /numerology/{life-path,expression,soul-urge,personality,personal-year,chart} | Life path, expression, soul urge, personality, personal year, full chart |
592
+ | `<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 |
584
593
  | `<roxy-tarot-card>` | Tarot | GET /tarot/cards/{id}, POST /tarot/daily | Single card with upright and reversed flip |
594
+ | `<roxy-tarot-catalog>` | Tarot | GET /tarot/cards | Deck gallery tiles with card art, name, and arcana and suit |
585
595
  | `<roxy-tarot-spread>` | Tarot | POST /tarot/spreads/{three-card,celtic-cross,love}, /tarot/yes-no, /tarot/draw | Spreads with positions and reading |
586
596
  | `<roxy-bodygraph>` | Human Design | POST /human-design/bodygraph | Nine-center chart with defined and open centers, active channels, gates, and a type and authority summary |
597
+ | `<roxy-hd-connection>` | Human Design | POST /human-design/connection | Electromagnetic, compromise, and dominance channels between two charts |
598
+ | `<roxy-hd-penta>` | Human Design | POST /human-design/penta | Group penta channels split into upper and lower triangles |
599
+ | `<roxy-hd-variables>` | Human Design | POST /human-design/variables | The four transformation arrows with direction and PHS labels |
587
600
  | `<roxy-forecast-timeline>` | Forecast | POST /forecast/timeline | Date-grouped events across Western, Vedic, and biorhythm domains, weighted by significance |
601
+ | `<roxy-forecast-digest>` | Forecast | POST /forecast/digest | Per-window event counts, domain breakdown, and the highest-significance events |
588
602
  | `<roxy-biorhythm-chart>` | Biorhythm | POST /biorhythm/{daily,forecast,critical-days} | Daily bars, forecast cycle lines, critical days |
589
603
  | `<roxy-hexagram>` | I Ching | GET /iching/hexagrams/{number}, /iching/cast, POST /iching/daily, /iching/daily/cast | Hexagram with trigrams, judgment, image, changing lines |
604
+ | `<roxy-crystal-card>` | Crystals | GET /crystals/{id} | Photo, meaning sections, chakra, zodiac, element, hardness, keywords, and pairings |
590
605
  | `<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 |
591
606
  | `<roxy-dream-card>` | Dreams | GET /dreams/symbols/{id} | Symbol name, interpretation body, and letter chip |
592
- | `<roxy-angel-number-card>` | Angel Numbers | GET /angel-numbers/numbers/{number} | Number meaning with spiritual, love, career, and twin flame sections |
607
+ | `<roxy-dream-search>` | Dreams | GET /dreams/symbols | Matched dream symbols as selectable tiles with a letter chip |
608
+ | `<roxy-angel-number-card>` | Angel Numbers | GET /angel-numbers/numbers/{number} | Number meaning with spiritual, love, career, money, twin flame, biblical, and shadow sections |
593
609
  | `<roxy-angel-number-lookup>` | Angel Numbers | GET /angel-numbers/lookup | Pattern analysis plus known meaning and digit-root fallback |
594
- | `<roxy-endpoint-form>` | Helper | Any endpoint via x-roxy-ui hints | Schema-driven form, emits roxy-submit |
610
+ | `<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 |
611
+ | `<roxy-endpoint-form>` | Helper | Any endpoint, from the spec | Schema-driven form, emits roxy-submit |
595
612
  | `<roxy-location-search>` | Helper | GET /location/search | Debounced city search input, emits roxy-location-select |
596
613
  | `<roxy-data>` | Helper | Any response shape | Generic fallback renderer for unknown shapes |
597
614
  <!-- END:COMPONENTS -->
@@ -6,6 +6,16 @@ export interface RoxyAngelNumberCardProps extends ElementAttrs {
6
6
  data?: GetAngelNumberResponse;
7
7
  className?: string;
8
8
  style?: React.CSSProperties;
9
+ /** Endpoint path for built-in self-fetch (uncontrolled mode), e.g. "astrology/natal-chart". The component renders its own input form, fetches with the publishable key, and displays the result. Leave unset for controlled mode (pass `data`). */
10
+ endpoint?: string;
11
+ /** HTTP method for the self-fetch request. Defaults to POST. */
12
+ method?: 'GET' | 'POST';
13
+ /** Browser-safe publishable key (pk_) for self-fetch. A secret key is refused client-side and never sent. */
14
+ publishableKey?: string;
15
+ /** Override the API origin for self-hosted or proxied deployments. */
16
+ baseUrl?: string;
17
+ /** Override the OpenAPI spec URL the self-fetch form introspects. */
18
+ specUrl?: string;
9
19
  }
10
20
  export declare const RoxyAngelNumberCard: React.ForwardRefExoticComponent<RoxyAngelNumberCardProps & React.RefAttributes<HTMLElement | null>>;
11
21
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"angel-number-card.d.ts","sourceRoot":"","sources":["../../src/components/angel-number-card.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAC;AAEhE,KAAK,YAAY,GAAG,IAAI,CACvB,KAAK,CAAC,cAAc,CAAC,WAAW,CAAC,EACjC,UAAU,GAAG,MAAM,CACnB,CAAC;AAEF,MAAM,WAAW,wBAAyB,SAAQ,YAAY;IAC7D,oEAAoE;IACpE,IAAI,CAAC,EAAE,sBAAsB,CAAC;IAC9B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;CAE5B;AAED,eAAO,MAAM,mBAAmB,qGAgD/B,CAAC"}
1
+ {"version":3,"file":"angel-number-card.d.ts","sourceRoot":"","sources":["../../src/components/angel-number-card.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAC;AAEhE,KAAK,YAAY,GAAG,IAAI,CACvB,KAAK,CAAC,cAAc,CAAC,WAAW,CAAC,EACjC,UAAU,GAAG,MAAM,CACnB,CAAC;AAEF,MAAM,WAAW,wBAAyB,SAAQ,YAAY;IAC7D,oEAAoE;IACpE,IAAI,CAAC,EAAE,sBAAsB,CAAC;IAC9B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;IAC5B,mPAAmP;IACnP,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,gEAAgE;IAChE,MAAM,CAAC,EAAE,KAAK,GAAG,MAAM,CAAC;IACxB,6GAA6G;IAC7G,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,sEAAsE;IACtE,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,qEAAqE;IACrE,OAAO,CAAC,EAAE,MAAM,CAAC;CAEjB;AAED,eAAO,MAAM,mBAAmB,qGAmF/B,CAAC"}
@@ -1,2 +1,2 @@
1
- import*as t from"react";var c="roxyapi-ui-loader",x="https://cdn.jsdelivr.net/npm/@roxyapi/ui@latest/dist/cdn",y="https://cdn.jsdelivr.net/npm/@roxyapi/ui@",g="/dist/cdn",l=null;function L(n){return!n||n==="latest"?x:`${y}${n}${g}`}function m(n="latest"){return typeof document>"u"?Promise.resolve():l||(l=new Promise((r,a)=>{let s=`${L(n)}/roxy-ui.js`,e=document.getElementById(c);if(e){e.dataset.loaded==="true"?r():(e.addEventListener("load",()=>r()),e.addEventListener("error",()=>a(new Error("roxy-ui load failed"))));return}e=document.createElement("script"),e.id=c,e.src=s,e.async=!0,e.crossOrigin="anonymous",e.addEventListener("load",()=>{e.dataset.loaded="true",r()}),e.addEventListener("error",()=>a(new Error("roxy-ui load failed"))),document.head.appendChild(e)}),l)}var C=t.forwardRef(function({data:r,className:a,style:s,...e},f){let d=t.useRef(null);t.useImperativeHandle(f,()=>d.current,[]);let[p,E]=t.useState(!1),[u,R]=t.useState(null);return t.useEffect(()=>{let o=!0;return m().then(()=>{o&&E(!0)}).catch(i=>{o&&R(i instanceof Error?i:new Error(String(i)))}),()=>{o=!1}},[]),t.useEffect(()=>{let o=d.current;o&&r!==void 0&&(o.data=r)},[r,p]),u?t.createElement("div",{role:"alert",className:a,style:s},`Roxy UI script load failed: ${u.message}`):t.createElement("roxy-angel-number-card",{ref:d,className:a,style:s,...e})});export{C as RoxyAngelNumberCard};
1
+ import*as t from"react";var R="roxyapi-ui-loader",T="https://cdn.jsdelivr.net/npm/@roxyapi/ui@latest/dist/cdn",w="https://cdn.jsdelivr.net/npm/@roxyapi/ui@",A="/dist/cdn",d=null;function b(a){return!a||a==="latest"?T:`${w}${a}${A}`}function g(a="latest"){return typeof document>"u"?Promise.resolve():d||(d=new Promise((s,i)=>{let u=`${b(a)}/roxy-ui.js`,n=document.getElementById(R);if(n){n.dataset.loaded==="true"?s():(n.addEventListener("load",()=>s()),n.addEventListener("error",()=>i(new Error("roxy-ui load failed"))));return}n=document.createElement("script"),n.id=R,n.src=u,n.async=!0,n.crossOrigin="anonymous",n.addEventListener("load",()=>{n.dataset.loaded="true",s()}),n.addEventListener("error",()=>i(new Error("roxy-ui load failed"))),document.head.appendChild(n)}),d)}var N=t.forwardRef(function({data:s,className:i,style:u,endpoint:n,method:l,publishableKey:c,baseUrl:f,specUrl:m,...y},x){let r=t.useRef(null);t.useImperativeHandle(x,()=>r.current,[]);let[o,S]=t.useState(!1),[p,L]=t.useState(null);return t.useEffect(()=>{let e=!0;return g().then(()=>{e&&S(!0)}).catch(E=>{e&&L(E instanceof Error?E:new Error(String(E)))}),()=>{e=!1}},[]),t.useEffect(()=>{let e=r.current;e&&s!==void 0&&(e.data=s)},[s,o]),t.useEffect(()=>{let e=r.current;e&&n!==void 0&&(e.endpoint=n)},[n,o]),t.useEffect(()=>{let e=r.current;e&&l!==void 0&&(e.method=l)},[l,o]),t.useEffect(()=>{let e=r.current;e&&c!==void 0&&(e.publishableKey=c)},[c,o]),t.useEffect(()=>{let e=r.current;e&&f!==void 0&&(e.baseUrl=f)},[f,o]),t.useEffect(()=>{let e=r.current;e&&m!==void 0&&(e.specUrl=m)},[m,o]),p?t.createElement("div",{role:"alert",className:i,style:u},`Roxy UI script load failed: ${p.message}`):t.createElement("roxy-angel-number-card",{ref:r,className:i,style:u,...y})});export{N as RoxyAngelNumberCard};
2
2
  //# sourceMappingURL=angel-number-card.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/components/angel-number-card.tsx", "../../src/load-ui.ts"],
4
- "sourcesContent": ["import * as React from 'react';\nimport { ensureScriptLoaded } from '../load-ui.js';\nimport type { GetAngelNumberResponse } from '@roxyapi/ui/types';\n\ntype ElementAttrs = Omit<\n\tReact.HTMLAttributes<HTMLElement>,\n\t'children' | 'data'\n>;\n\nexport interface RoxyAngelNumberCardProps extends ElementAttrs {\n\t/** Spec-derived response payload. Pass the raw RoxyAPI response. */\n\tdata?: GetAngelNumberResponse;\n\tclassName?: string;\n\tstyle?: React.CSSProperties;\n\n}\n\nexport const RoxyAngelNumberCard = React.forwardRef<HTMLElement | null, RoxyAngelNumberCardProps>(\n\tfunction RoxyAngelNumberCard({ data, className, style, ...rest }, ref) {\n\t\tconst internal = React.useRef<HTMLElement | null>(null);\n\t\tReact.useImperativeHandle<HTMLElement | null, HTMLElement | null>(\n\t\t\tref,\n\t\t\t() => internal.current,\n\t\t\t[],\n\t\t);\n\t\tconst [loaded, setLoaded] = React.useState(false);\n\t\tconst [error, setError] = React.useState<Error | null>(null);\n\n\t\tReact.useEffect(() => {\n\t\t\tlet active = true;\n\t\t\tensureScriptLoaded()\n\t\t\t\t.then(() => {\n\t\t\t\t\tif (active) setLoaded(true);\n\t\t\t\t})\n\t\t\t\t.catch((err: unknown) => {\n\t\t\t\t\tif (!active) return;\n\t\t\t\t\tsetError(err instanceof Error ? err : new Error(String(err)));\n\t\t\t\t});\n\t\t\treturn () => {\n\t\t\t\tactive = false;\n\t\t\t};\n\t\t}, []);\n\n\t\tReact.useEffect(() => {\n\t\t\tconst el = internal.current;\n\t\t\tif (el && data !== undefined) {\n\t\t\t\t(el as unknown as { data: unknown }).data = data;\n\t\t\t}\n\t\t}, [data, loaded]);\n\n\t\tif (error) {\n\t\t\treturn React.createElement(\n\t\t\t\t'div',\n\t\t\t\t{ role: 'alert', className, style },\n\t\t\t\t`Roxy UI script load failed: ${error.message}`,\n\t\t\t);\n\t\t}\n\n\t\treturn React.createElement('roxy-angel-number-card', {\n\t\t\tref: internal,\n\t\t\tclassName,\n\t\t\tstyle,\n\t\t\t...rest,\n\t\t});\n\t},\n);\n", "/**\n * Loads the matching component bundle on first mount. Idempotent across\n * many components on the same page. Skips on the server (no document) so\n * React server components and Next.js SSR work without a flash.\n *\n * Pass an explicit `version` (e.g. `'0.1.5'`) to pin the loaded bundle to a\n * specific @roxyapi/ui release; the default ('latest') resolves to whatever\n * the CDN currently serves for @latest.\n */\nconst SCRIPT_ID = 'roxyapi-ui-loader';\nconst CDN_BASE_LATEST = \"https://cdn.jsdelivr.net/npm/@roxyapi/ui@latest/dist/cdn\";\nconst CDN_BASE_PREFIX = \"https://cdn.jsdelivr.net/npm/@roxyapi/ui@\";\nconst CDN_BASE_SUFFIX = \"/dist/cdn\";\n\nlet loaded: Promise<void> | null = null;\n\nfunction buildBase(version: string): string {\n\tif (!version || version === 'latest') return CDN_BASE_LATEST;\n\treturn `${CDN_BASE_PREFIX}${version}${CDN_BASE_SUFFIX}`;\n}\n\nexport function ensureScriptLoaded(version: string = 'latest'): Promise<void> {\n\tif (typeof document === 'undefined') return Promise.resolve();\n\tif (loaded) return loaded;\n\n\tloaded = new Promise<void>((resolve, reject) => {\n\t\tconst url = `${buildBase(version)}/roxy-ui.js`;\n\t\tlet existing = document.getElementById(SCRIPT_ID) as HTMLScriptElement | null;\n\t\tif (existing) {\n\t\t\tif (existing.dataset.loaded === 'true') {\n\t\t\t\tresolve();\n\t\t\t} else {\n\t\t\t\texisting.addEventListener('load', () => resolve());\n\t\t\t\texisting.addEventListener('error', () => reject(new Error('roxy-ui load failed')));\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\t\texisting = document.createElement('script');\n\t\texisting.id = SCRIPT_ID;\n\t\texisting.src = url;\n\t\texisting.async = true;\n\t\texisting.crossOrigin = 'anonymous';\n\t\texisting.addEventListener('load', () => {\n\t\t\texisting!.dataset.loaded = 'true';\n\t\t\tresolve();\n\t\t});\n\t\texisting.addEventListener('error', () => reject(new Error('roxy-ui load failed')));\n\t\tdocument.head.appendChild(existing);\n\t});\n\treturn loaded;\n}\n\n// Default export retained for convenience; matches the named export.\nexport default ensureScriptLoaded;\n// Surfaces the embedded @roxyapi/ui version this build of @roxyapi/ui-react\n// was generated against. Useful for diagnostics; not load-bearing.\nexport const ROXY_UI_VERSION = \"0.10.0\";\n"],
5
- "mappings": "AAAA,UAAYA,MAAW,QCSvB,IAAMC,EAAY,oBACZC,EAAkB,2DAClBC,EAAkB,4CAClBC,EAAkB,YAEpBC,EAA+B,KAEnC,SAASC,EAAUC,EAAyB,CAC3C,MAAI,CAACA,GAAWA,IAAY,SAAiBL,EACtC,GAAGC,CAAe,GAAGI,CAAO,GAAGH,CAAe,EACtD,CAEO,SAASI,EAAmBD,EAAkB,SAAyB,CAC7E,OAAI,OAAO,SAAa,IAAoB,QAAQ,QAAQ,EACxDF,IAEJA,EAAS,IAAI,QAAc,CAACI,EAASC,IAAW,CAC/C,IAAMC,EAAM,GAAGL,EAAUC,CAAO,CAAC,cAC7BK,EAAW,SAAS,eAAeX,CAAS,EAChD,GAAIW,EAAU,CACTA,EAAS,QAAQ,SAAW,OAC/BH,EAAQ,GAERG,EAAS,iBAAiB,OAAQ,IAAMH,EAAQ,CAAC,EACjDG,EAAS,iBAAiB,QAAS,IAAMF,EAAO,IAAI,MAAM,qBAAqB,CAAC,CAAC,GAElF,MACD,CACAE,EAAW,SAAS,cAAc,QAAQ,EAC1CA,EAAS,GAAKX,EACdW,EAAS,IAAMD,EACfC,EAAS,MAAQ,GACjBA,EAAS,YAAc,YACvBA,EAAS,iBAAiB,OAAQ,IAAM,CACvCA,EAAU,QAAQ,OAAS,OAC3BH,EAAQ,CACT,CAAC,EACDG,EAAS,iBAAiB,QAAS,IAAMF,EAAO,IAAI,MAAM,qBAAqB,CAAC,CAAC,EACjF,SAAS,KAAK,YAAYE,CAAQ,CACnC,CAAC,EACMP,EACR,CDjCO,IAAMQ,EAA4B,aACxC,SAA6B,CAAE,KAAAC,EAAM,UAAAC,EAAW,MAAAC,EAAO,GAAGC,CAAK,EAAGC,EAAK,CACtE,IAAMC,EAAiB,SAA2B,IAAI,EAChD,sBACLD,EACA,IAAMC,EAAS,QACf,CAAC,CACF,EACA,GAAM,CAACC,EAAQC,CAAS,EAAU,WAAS,EAAK,EAC1C,CAACC,EAAOC,CAAQ,EAAU,WAAuB,IAAI,EAwB3D,OAtBM,YAAU,IAAM,CACrB,IAAIC,EAAS,GACb,OAAAC,EAAmB,EACjB,KAAK,IAAM,CACPD,GAAQH,EAAU,EAAI,CAC3B,CAAC,EACA,MAAOK,GAAiB,CACnBF,GACLD,EAASG,aAAe,MAAQA,EAAM,IAAI,MAAM,OAAOA,CAAG,CAAC,CAAC,CAC7D,CAAC,EACK,IAAM,CACZF,EAAS,EACV,CACD,EAAG,CAAC,CAAC,EAEC,YAAU,IAAM,CACrB,IAAMG,EAAKR,EAAS,QAChBQ,GAAMb,IAAS,SACjBa,EAAoC,KAAOb,EAE9C,EAAG,CAACA,EAAMM,CAAM,CAAC,EAEbE,EACU,gBACZ,MACA,CAAE,KAAM,QAAS,UAAAP,EAAW,MAAAC,CAAM,EAClC,+BAA+BM,EAAM,OAAO,EAC7C,EAGY,gBAAc,yBAA0B,CACpD,IAAKH,EACL,UAAAJ,EACA,MAAAC,EACA,GAAGC,CACJ,CAAC,CACF,CACD",
6
- "names": ["React", "SCRIPT_ID", "CDN_BASE_LATEST", "CDN_BASE_PREFIX", "CDN_BASE_SUFFIX", "loaded", "buildBase", "version", "ensureScriptLoaded", "resolve", "reject", "url", "existing", "RoxyAngelNumberCard", "data", "className", "style", "rest", "ref", "internal", "loaded", "setLoaded", "error", "setError", "active", "ensureScriptLoaded", "err", "el"]
4
+ "sourcesContent": ["import * as React from 'react';\nimport { ensureScriptLoaded } from '../load-ui.js';\nimport type { GetAngelNumberResponse } from '@roxyapi/ui/types';\n\ntype ElementAttrs = Omit<\n\tReact.HTMLAttributes<HTMLElement>,\n\t'children' | 'data'\n>;\n\nexport interface RoxyAngelNumberCardProps extends ElementAttrs {\n\t/** Spec-derived response payload. Pass the raw RoxyAPI response. */\n\tdata?: GetAngelNumberResponse;\n\tclassName?: string;\n\tstyle?: React.CSSProperties;\n\t/** Endpoint path for built-in self-fetch (uncontrolled mode), e.g. \"astrology/natal-chart\". The component renders its own input form, fetches with the publishable key, and displays the result. Leave unset for controlled mode (pass `data`). */\n\tendpoint?: string;\n\t/** HTTP method for the self-fetch request. Defaults to POST. */\n\tmethod?: 'GET' | 'POST';\n\t/** Browser-safe publishable key (pk_) for self-fetch. A secret key is refused client-side and never sent. */\n\tpublishableKey?: string;\n\t/** Override the API origin for self-hosted or proxied deployments. */\n\tbaseUrl?: string;\n\t/** Override the OpenAPI spec URL the self-fetch form introspects. */\n\tspecUrl?: string;\n\n}\n\nexport const RoxyAngelNumberCard = React.forwardRef<HTMLElement | null, RoxyAngelNumberCardProps>(\n\tfunction RoxyAngelNumberCard({ data, className, style, endpoint, method, publishableKey, baseUrl, specUrl, ...rest }, ref) {\n\t\tconst internal = React.useRef<HTMLElement | null>(null);\n\t\tReact.useImperativeHandle<HTMLElement | null, HTMLElement | null>(\n\t\t\tref,\n\t\t\t() => internal.current,\n\t\t\t[],\n\t\t);\n\t\tconst [loaded, setLoaded] = React.useState(false);\n\t\tconst [error, setError] = React.useState<Error | null>(null);\n\n\t\tReact.useEffect(() => {\n\t\t\tlet active = true;\n\t\t\tensureScriptLoaded()\n\t\t\t\t.then(() => {\n\t\t\t\t\tif (active) setLoaded(true);\n\t\t\t\t})\n\t\t\t\t.catch((err: unknown) => {\n\t\t\t\t\tif (!active) return;\n\t\t\t\t\tsetError(err instanceof Error ? err : new Error(String(err)));\n\t\t\t\t});\n\t\t\treturn () => {\n\t\t\t\tactive = false;\n\t\t\t};\n\t\t}, []);\n\n\t\tReact.useEffect(() => {\n\t\t\tconst el = internal.current;\n\t\t\tif (el && data !== undefined) {\n\t\t\t\t(el as unknown as { data: unknown }).data = data;\n\t\t\t}\n\t\t}, [data, loaded]);\n\n\t\tReact.useEffect(() => {\n\t\t\tconst el = internal.current;\n\t\t\tif (el && endpoint !== undefined) {\n\t\t\t\t(el as unknown as { endpoint: string }).endpoint = endpoint;\n\t\t\t}\n\t\t}, [endpoint, loaded]);\n\n\t\tReact.useEffect(() => {\n\t\t\tconst el = internal.current;\n\t\t\tif (el && method !== undefined) {\n\t\t\t\t(el as unknown as { method: 'GET' | 'POST' }).method = method;\n\t\t\t}\n\t\t}, [method, loaded]);\n\n\t\tReact.useEffect(() => {\n\t\t\tconst el = internal.current;\n\t\t\tif (el && publishableKey !== undefined) {\n\t\t\t\t(el as unknown as { publishableKey: string }).publishableKey = publishableKey;\n\t\t\t}\n\t\t}, [publishableKey, loaded]);\n\n\t\tReact.useEffect(() => {\n\t\t\tconst el = internal.current;\n\t\t\tif (el && baseUrl !== undefined) {\n\t\t\t\t(el as unknown as { baseUrl: string }).baseUrl = baseUrl;\n\t\t\t}\n\t\t}, [baseUrl, loaded]);\n\n\t\tReact.useEffect(() => {\n\t\t\tconst el = internal.current;\n\t\t\tif (el && specUrl !== undefined) {\n\t\t\t\t(el as unknown as { specUrl: string }).specUrl = specUrl;\n\t\t\t}\n\t\t}, [specUrl, loaded]);\n\n\t\tif (error) {\n\t\t\treturn React.createElement(\n\t\t\t\t'div',\n\t\t\t\t{ role: 'alert', className, style },\n\t\t\t\t`Roxy UI script load failed: ${error.message}`,\n\t\t\t);\n\t\t}\n\n\t\treturn React.createElement('roxy-angel-number-card', {\n\t\t\tref: internal,\n\t\t\tclassName,\n\t\t\tstyle,\n\t\t\t...rest,\n\t\t});\n\t},\n);\n", "/**\n * Loads the matching component bundle on first mount. Idempotent across\n * many components on the same page. Skips on the server (no document) so\n * React server components and Next.js SSR work without a flash.\n *\n * Pass an explicit `version` (e.g. `'0.1.5'`) to pin the loaded bundle to a\n * specific @roxyapi/ui release; the default ('latest') resolves to whatever\n * the CDN currently serves for @latest.\n */\nconst SCRIPT_ID = 'roxyapi-ui-loader';\nconst CDN_BASE_LATEST = \"https://cdn.jsdelivr.net/npm/@roxyapi/ui@latest/dist/cdn\";\nconst CDN_BASE_PREFIX = \"https://cdn.jsdelivr.net/npm/@roxyapi/ui@\";\nconst CDN_BASE_SUFFIX = \"/dist/cdn\";\n\nlet loaded: Promise<void> | null = null;\n\nfunction buildBase(version: string): string {\n\tif (!version || version === 'latest') return CDN_BASE_LATEST;\n\treturn `${CDN_BASE_PREFIX}${version}${CDN_BASE_SUFFIX}`;\n}\n\nexport function ensureScriptLoaded(version: string = 'latest'): Promise<void> {\n\tif (typeof document === 'undefined') return Promise.resolve();\n\tif (loaded) return loaded;\n\n\tloaded = new Promise<void>((resolve, reject) => {\n\t\tconst url = `${buildBase(version)}/roxy-ui.js`;\n\t\tlet existing = document.getElementById(SCRIPT_ID) as HTMLScriptElement | null;\n\t\tif (existing) {\n\t\t\tif (existing.dataset.loaded === 'true') {\n\t\t\t\tresolve();\n\t\t\t} else {\n\t\t\t\texisting.addEventListener('load', () => resolve());\n\t\t\t\texisting.addEventListener('error', () => reject(new Error('roxy-ui load failed')));\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\t\texisting = document.createElement('script');\n\t\texisting.id = SCRIPT_ID;\n\t\texisting.src = url;\n\t\texisting.async = true;\n\t\texisting.crossOrigin = 'anonymous';\n\t\texisting.addEventListener('load', () => {\n\t\t\texisting!.dataset.loaded = 'true';\n\t\t\tresolve();\n\t\t});\n\t\texisting.addEventListener('error', () => reject(new Error('roxy-ui load failed')));\n\t\tdocument.head.appendChild(existing);\n\t});\n\treturn loaded;\n}\n\n// Default export retained for convenience; matches the named export.\nexport default ensureScriptLoaded;\n// Surfaces the embedded @roxyapi/ui version this build of @roxyapi/ui-react\n// was generated against. Useful for diagnostics; not load-bearing.\nexport const ROXY_UI_VERSION = \"0.11.0\";\n"],
5
+ "mappings": "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",
6
+ "names": ["React", "SCRIPT_ID", "CDN_BASE_LATEST", "CDN_BASE_PREFIX", "CDN_BASE_SUFFIX", "loaded", "buildBase", "version", "ensureScriptLoaded", "resolve", "reject", "url", "existing", "RoxyAngelNumberCard", "data", "className", "style", "endpoint", "method", "publishableKey", "baseUrl", "specUrl", "rest", "ref", "internal", "loaded", "setLoaded", "error", "setError", "active", "ensureScriptLoaded", "err", "el"]
7
7
  }
@@ -6,6 +6,16 @@ export interface RoxyAngelNumberLookupProps extends ElementAttrs {
6
6
  data?: AnalyzeNumberSequenceResponse;
7
7
  className?: string;
8
8
  style?: React.CSSProperties;
9
+ /** Endpoint path for built-in self-fetch (uncontrolled mode), e.g. "astrology/natal-chart". The component renders its own input form, fetches with the publishable key, and displays the result. Leave unset for controlled mode (pass `data`). */
10
+ endpoint?: string;
11
+ /** HTTP method for the self-fetch request. Defaults to POST. */
12
+ method?: 'GET' | 'POST';
13
+ /** Browser-safe publishable key (pk_) for self-fetch. A secret key is refused client-side and never sent. */
14
+ publishableKey?: string;
15
+ /** Override the API origin for self-hosted or proxied deployments. */
16
+ baseUrl?: string;
17
+ /** Override the OpenAPI spec URL the self-fetch form introspects. */
18
+ specUrl?: string;
9
19
  }
10
20
  export declare const RoxyAngelNumberLookup: React.ForwardRefExoticComponent<RoxyAngelNumberLookupProps & React.RefAttributes<HTMLElement | null>>;
11
21
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"angel-number-lookup.d.ts","sourceRoot":"","sources":["../../src/components/angel-number-lookup.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,KAAK,EAAE,6BAA6B,EAAE,MAAM,mBAAmB,CAAC;AAEvE,KAAK,YAAY,GAAG,IAAI,CACvB,KAAK,CAAC,cAAc,CAAC,WAAW,CAAC,EACjC,UAAU,GAAG,MAAM,CACnB,CAAC;AAEF,MAAM,WAAW,0BAA2B,SAAQ,YAAY;IAC/D,oEAAoE;IACpE,IAAI,CAAC,EAAE,6BAA6B,CAAC;IACrC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;CAE5B;AAED,eAAO,MAAM,qBAAqB,uGAgDjC,CAAC"}
1
+ {"version":3,"file":"angel-number-lookup.d.ts","sourceRoot":"","sources":["../../src/components/angel-number-lookup.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,KAAK,EAAE,6BAA6B,EAAE,MAAM,mBAAmB,CAAC;AAEvE,KAAK,YAAY,GAAG,IAAI,CACvB,KAAK,CAAC,cAAc,CAAC,WAAW,CAAC,EACjC,UAAU,GAAG,MAAM,CACnB,CAAC;AAEF,MAAM,WAAW,0BAA2B,SAAQ,YAAY;IAC/D,oEAAoE;IACpE,IAAI,CAAC,EAAE,6BAA6B,CAAC;IACrC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;IAC5B,mPAAmP;IACnP,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,gEAAgE;IAChE,MAAM,CAAC,EAAE,KAAK,GAAG,MAAM,CAAC;IACxB,6GAA6G;IAC7G,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,sEAAsE;IACtE,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,qEAAqE;IACrE,OAAO,CAAC,EAAE,MAAM,CAAC;CAEjB;AAED,eAAO,MAAM,qBAAqB,uGAmFjC,CAAC"}
@@ -1,2 +1,2 @@
1
- import*as t from"react";var c="roxyapi-ui-loader",y="https://cdn.jsdelivr.net/npm/@roxyapi/ui@latest/dist/cdn",x="https://cdn.jsdelivr.net/npm/@roxyapi/ui@",L="/dist/cdn",s=null;function S(r){return!r||r==="latest"?y:`${x}${r}${L}`}function m(r="latest"){return typeof document>"u"?Promise.resolve():s||(s=new Promise((n,a)=>{let l=`${S(r)}/roxy-ui.js`,e=document.getElementById(c);if(e){e.dataset.loaded==="true"?n():(e.addEventListener("load",()=>n()),e.addEventListener("error",()=>a(new Error("roxy-ui load failed"))));return}e=document.createElement("script"),e.id=c,e.src=l,e.async=!0,e.crossOrigin="anonymous",e.addEventListener("load",()=>{e.dataset.loaded="true",n()}),e.addEventListener("error",()=>a(new Error("roxy-ui load failed"))),document.head.appendChild(e)}),s)}var N=t.forwardRef(function({data:n,className:a,style:l,...e},p){let u=t.useRef(null);t.useImperativeHandle(p,()=>u.current,[]);let[f,E]=t.useState(!1),[d,R]=t.useState(null);return t.useEffect(()=>{let o=!0;return m().then(()=>{o&&E(!0)}).catch(i=>{o&&R(i instanceof Error?i:new Error(String(i)))}),()=>{o=!1}},[]),t.useEffect(()=>{let o=u.current;o&&n!==void 0&&(o.data=n)},[n,f]),d?t.createElement("div",{role:"alert",className:a,style:l},`Roxy UI script load failed: ${d.message}`):t.createElement("roxy-angel-number-lookup",{ref:u,className:a,style:l,...e})});export{N as RoxyAngelNumberLookup};
1
+ import*as t from"react";var R="roxyapi-ui-loader",T="https://cdn.jsdelivr.net/npm/@roxyapi/ui@latest/dist/cdn",k="https://cdn.jsdelivr.net/npm/@roxyapi/ui@",w="/dist/cdn",l=null;function A(s){return!s||s==="latest"?T:`${k}${s}${w}`}function y(s="latest"){return typeof document>"u"?Promise.resolve():l||(l=new Promise((o,u)=>{let i=`${A(s)}/roxy-ui.js`,n=document.getElementById(R);if(n){n.dataset.loaded==="true"?o():(n.addEventListener("load",()=>o()),n.addEventListener("error",()=>u(new Error("roxy-ui load failed"))));return}n=document.createElement("script"),n.id=R,n.src=i,n.async=!0,n.crossOrigin="anonymous",n.addEventListener("load",()=>{n.dataset.loaded="true",o()}),n.addEventListener("error",()=>u(new Error("roxy-ui load failed"))),document.head.appendChild(n)}),l)}var N=t.forwardRef(function({data:o,className:u,style:i,endpoint:n,method:d,publishableKey:c,baseUrl:f,specUrl:p,...g},x){let r=t.useRef(null);t.useImperativeHandle(x,()=>r.current,[]);let[a,L]=t.useState(!1),[E,S]=t.useState(null);return t.useEffect(()=>{let e=!0;return y().then(()=>{e&&L(!0)}).catch(m=>{e&&S(m instanceof Error?m:new Error(String(m)))}),()=>{e=!1}},[]),t.useEffect(()=>{let e=r.current;e&&o!==void 0&&(e.data=o)},[o,a]),t.useEffect(()=>{let e=r.current;e&&n!==void 0&&(e.endpoint=n)},[n,a]),t.useEffect(()=>{let e=r.current;e&&d!==void 0&&(e.method=d)},[d,a]),t.useEffect(()=>{let e=r.current;e&&c!==void 0&&(e.publishableKey=c)},[c,a]),t.useEffect(()=>{let e=r.current;e&&f!==void 0&&(e.baseUrl=f)},[f,a]),t.useEffect(()=>{let e=r.current;e&&p!==void 0&&(e.specUrl=p)},[p,a]),E?t.createElement("div",{role:"alert",className:u,style:i},`Roxy UI script load failed: ${E.message}`):t.createElement("roxy-angel-number-lookup",{ref:r,className:u,style:i,...g})});export{N as RoxyAngelNumberLookup};
2
2
  //# sourceMappingURL=angel-number-lookup.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/components/angel-number-lookup.tsx", "../../src/load-ui.ts"],
4
- "sourcesContent": ["import * as React from 'react';\nimport { ensureScriptLoaded } from '../load-ui.js';\nimport type { AnalyzeNumberSequenceResponse } from '@roxyapi/ui/types';\n\ntype ElementAttrs = Omit<\n\tReact.HTMLAttributes<HTMLElement>,\n\t'children' | 'data'\n>;\n\nexport interface RoxyAngelNumberLookupProps extends ElementAttrs {\n\t/** Spec-derived response payload. Pass the raw RoxyAPI response. */\n\tdata?: AnalyzeNumberSequenceResponse;\n\tclassName?: string;\n\tstyle?: React.CSSProperties;\n\n}\n\nexport const RoxyAngelNumberLookup = React.forwardRef<HTMLElement | null, RoxyAngelNumberLookupProps>(\n\tfunction RoxyAngelNumberLookup({ data, className, style, ...rest }, ref) {\n\t\tconst internal = React.useRef<HTMLElement | null>(null);\n\t\tReact.useImperativeHandle<HTMLElement | null, HTMLElement | null>(\n\t\t\tref,\n\t\t\t() => internal.current,\n\t\t\t[],\n\t\t);\n\t\tconst [loaded, setLoaded] = React.useState(false);\n\t\tconst [error, setError] = React.useState<Error | null>(null);\n\n\t\tReact.useEffect(() => {\n\t\t\tlet active = true;\n\t\t\tensureScriptLoaded()\n\t\t\t\t.then(() => {\n\t\t\t\t\tif (active) setLoaded(true);\n\t\t\t\t})\n\t\t\t\t.catch((err: unknown) => {\n\t\t\t\t\tif (!active) return;\n\t\t\t\t\tsetError(err instanceof Error ? err : new Error(String(err)));\n\t\t\t\t});\n\t\t\treturn () => {\n\t\t\t\tactive = false;\n\t\t\t};\n\t\t}, []);\n\n\t\tReact.useEffect(() => {\n\t\t\tconst el = internal.current;\n\t\t\tif (el && data !== undefined) {\n\t\t\t\t(el as unknown as { data: unknown }).data = data;\n\t\t\t}\n\t\t}, [data, loaded]);\n\n\t\tif (error) {\n\t\t\treturn React.createElement(\n\t\t\t\t'div',\n\t\t\t\t{ role: 'alert', className, style },\n\t\t\t\t`Roxy UI script load failed: ${error.message}`,\n\t\t\t);\n\t\t}\n\n\t\treturn React.createElement('roxy-angel-number-lookup', {\n\t\t\tref: internal,\n\t\t\tclassName,\n\t\t\tstyle,\n\t\t\t...rest,\n\t\t});\n\t},\n);\n", "/**\n * Loads the matching component bundle on first mount. Idempotent across\n * many components on the same page. Skips on the server (no document) so\n * React server components and Next.js SSR work without a flash.\n *\n * Pass an explicit `version` (e.g. `'0.1.5'`) to pin the loaded bundle to a\n * specific @roxyapi/ui release; the default ('latest') resolves to whatever\n * the CDN currently serves for @latest.\n */\nconst SCRIPT_ID = 'roxyapi-ui-loader';\nconst CDN_BASE_LATEST = \"https://cdn.jsdelivr.net/npm/@roxyapi/ui@latest/dist/cdn\";\nconst CDN_BASE_PREFIX = \"https://cdn.jsdelivr.net/npm/@roxyapi/ui@\";\nconst CDN_BASE_SUFFIX = \"/dist/cdn\";\n\nlet loaded: Promise<void> | null = null;\n\nfunction buildBase(version: string): string {\n\tif (!version || version === 'latest') return CDN_BASE_LATEST;\n\treturn `${CDN_BASE_PREFIX}${version}${CDN_BASE_SUFFIX}`;\n}\n\nexport function ensureScriptLoaded(version: string = 'latest'): Promise<void> {\n\tif (typeof document === 'undefined') return Promise.resolve();\n\tif (loaded) return loaded;\n\n\tloaded = new Promise<void>((resolve, reject) => {\n\t\tconst url = `${buildBase(version)}/roxy-ui.js`;\n\t\tlet existing = document.getElementById(SCRIPT_ID) as HTMLScriptElement | null;\n\t\tif (existing) {\n\t\t\tif (existing.dataset.loaded === 'true') {\n\t\t\t\tresolve();\n\t\t\t} else {\n\t\t\t\texisting.addEventListener('load', () => resolve());\n\t\t\t\texisting.addEventListener('error', () => reject(new Error('roxy-ui load failed')));\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\t\texisting = document.createElement('script');\n\t\texisting.id = SCRIPT_ID;\n\t\texisting.src = url;\n\t\texisting.async = true;\n\t\texisting.crossOrigin = 'anonymous';\n\t\texisting.addEventListener('load', () => {\n\t\t\texisting!.dataset.loaded = 'true';\n\t\t\tresolve();\n\t\t});\n\t\texisting.addEventListener('error', () => reject(new Error('roxy-ui load failed')));\n\t\tdocument.head.appendChild(existing);\n\t});\n\treturn loaded;\n}\n\n// Default export retained for convenience; matches the named export.\nexport default ensureScriptLoaded;\n// Surfaces the embedded @roxyapi/ui version this build of @roxyapi/ui-react\n// was generated against. Useful for diagnostics; not load-bearing.\nexport const ROXY_UI_VERSION = \"0.10.0\";\n"],
5
- "mappings": "AAAA,UAAYA,MAAW,QCSvB,IAAMC,EAAY,oBACZC,EAAkB,2DAClBC,EAAkB,4CAClBC,EAAkB,YAEpBC,EAA+B,KAEnC,SAASC,EAAUC,EAAyB,CAC3C,MAAI,CAACA,GAAWA,IAAY,SAAiBL,EACtC,GAAGC,CAAe,GAAGI,CAAO,GAAGH,CAAe,EACtD,CAEO,SAASI,EAAmBD,EAAkB,SAAyB,CAC7E,OAAI,OAAO,SAAa,IAAoB,QAAQ,QAAQ,EACxDF,IAEJA,EAAS,IAAI,QAAc,CAACI,EAASC,IAAW,CAC/C,IAAMC,EAAM,GAAGL,EAAUC,CAAO,CAAC,cAC7BK,EAAW,SAAS,eAAeX,CAAS,EAChD,GAAIW,EAAU,CACTA,EAAS,QAAQ,SAAW,OAC/BH,EAAQ,GAERG,EAAS,iBAAiB,OAAQ,IAAMH,EAAQ,CAAC,EACjDG,EAAS,iBAAiB,QAAS,IAAMF,EAAO,IAAI,MAAM,qBAAqB,CAAC,CAAC,GAElF,MACD,CACAE,EAAW,SAAS,cAAc,QAAQ,EAC1CA,EAAS,GAAKX,EACdW,EAAS,IAAMD,EACfC,EAAS,MAAQ,GACjBA,EAAS,YAAc,YACvBA,EAAS,iBAAiB,OAAQ,IAAM,CACvCA,EAAU,QAAQ,OAAS,OAC3BH,EAAQ,CACT,CAAC,EACDG,EAAS,iBAAiB,QAAS,IAAMF,EAAO,IAAI,MAAM,qBAAqB,CAAC,CAAC,EACjF,SAAS,KAAK,YAAYE,CAAQ,CACnC,CAAC,EACMP,EACR,CDjCO,IAAMQ,EAA8B,aAC1C,SAA+B,CAAE,KAAAC,EAAM,UAAAC,EAAW,MAAAC,EAAO,GAAGC,CAAK,EAAGC,EAAK,CACxE,IAAMC,EAAiB,SAA2B,IAAI,EAChD,sBACLD,EACA,IAAMC,EAAS,QACf,CAAC,CACF,EACA,GAAM,CAACC,EAAQC,CAAS,EAAU,WAAS,EAAK,EAC1C,CAACC,EAAOC,CAAQ,EAAU,WAAuB,IAAI,EAwB3D,OAtBM,YAAU,IAAM,CACrB,IAAIC,EAAS,GACb,OAAAC,EAAmB,EACjB,KAAK,IAAM,CACPD,GAAQH,EAAU,EAAI,CAC3B,CAAC,EACA,MAAOK,GAAiB,CACnBF,GACLD,EAASG,aAAe,MAAQA,EAAM,IAAI,MAAM,OAAOA,CAAG,CAAC,CAAC,CAC7D,CAAC,EACK,IAAM,CACZF,EAAS,EACV,CACD,EAAG,CAAC,CAAC,EAEC,YAAU,IAAM,CACrB,IAAMG,EAAKR,EAAS,QAChBQ,GAAMb,IAAS,SACjBa,EAAoC,KAAOb,EAE9C,EAAG,CAACA,EAAMM,CAAM,CAAC,EAEbE,EACU,gBACZ,MACA,CAAE,KAAM,QAAS,UAAAP,EAAW,MAAAC,CAAM,EAClC,+BAA+BM,EAAM,OAAO,EAC7C,EAGY,gBAAc,2BAA4B,CACtD,IAAKH,EACL,UAAAJ,EACA,MAAAC,EACA,GAAGC,CACJ,CAAC,CACF,CACD",
6
- "names": ["React", "SCRIPT_ID", "CDN_BASE_LATEST", "CDN_BASE_PREFIX", "CDN_BASE_SUFFIX", "loaded", "buildBase", "version", "ensureScriptLoaded", "resolve", "reject", "url", "existing", "RoxyAngelNumberLookup", "data", "className", "style", "rest", "ref", "internal", "loaded", "setLoaded", "error", "setError", "active", "ensureScriptLoaded", "err", "el"]
4
+ "sourcesContent": ["import * as React from 'react';\nimport { ensureScriptLoaded } from '../load-ui.js';\nimport type { AnalyzeNumberSequenceResponse } from '@roxyapi/ui/types';\n\ntype ElementAttrs = Omit<\n\tReact.HTMLAttributes<HTMLElement>,\n\t'children' | 'data'\n>;\n\nexport interface RoxyAngelNumberLookupProps extends ElementAttrs {\n\t/** Spec-derived response payload. Pass the raw RoxyAPI response. */\n\tdata?: AnalyzeNumberSequenceResponse;\n\tclassName?: string;\n\tstyle?: React.CSSProperties;\n\t/** Endpoint path for built-in self-fetch (uncontrolled mode), e.g. \"astrology/natal-chart\". The component renders its own input form, fetches with the publishable key, and displays the result. Leave unset for controlled mode (pass `data`). */\n\tendpoint?: string;\n\t/** HTTP method for the self-fetch request. Defaults to POST. */\n\tmethod?: 'GET' | 'POST';\n\t/** Browser-safe publishable key (pk_) for self-fetch. A secret key is refused client-side and never sent. */\n\tpublishableKey?: string;\n\t/** Override the API origin for self-hosted or proxied deployments. */\n\tbaseUrl?: string;\n\t/** Override the OpenAPI spec URL the self-fetch form introspects. */\n\tspecUrl?: string;\n\n}\n\nexport const RoxyAngelNumberLookup = React.forwardRef<HTMLElement | null, RoxyAngelNumberLookupProps>(\n\tfunction RoxyAngelNumberLookup({ data, className, style, endpoint, method, publishableKey, baseUrl, specUrl, ...rest }, ref) {\n\t\tconst internal = React.useRef<HTMLElement | null>(null);\n\t\tReact.useImperativeHandle<HTMLElement | null, HTMLElement | null>(\n\t\t\tref,\n\t\t\t() => internal.current,\n\t\t\t[],\n\t\t);\n\t\tconst [loaded, setLoaded] = React.useState(false);\n\t\tconst [error, setError] = React.useState<Error | null>(null);\n\n\t\tReact.useEffect(() => {\n\t\t\tlet active = true;\n\t\t\tensureScriptLoaded()\n\t\t\t\t.then(() => {\n\t\t\t\t\tif (active) setLoaded(true);\n\t\t\t\t})\n\t\t\t\t.catch((err: unknown) => {\n\t\t\t\t\tif (!active) return;\n\t\t\t\t\tsetError(err instanceof Error ? err : new Error(String(err)));\n\t\t\t\t});\n\t\t\treturn () => {\n\t\t\t\tactive = false;\n\t\t\t};\n\t\t}, []);\n\n\t\tReact.useEffect(() => {\n\t\t\tconst el = internal.current;\n\t\t\tif (el && data !== undefined) {\n\t\t\t\t(el as unknown as { data: unknown }).data = data;\n\t\t\t}\n\t\t}, [data, loaded]);\n\n\t\tReact.useEffect(() => {\n\t\t\tconst el = internal.current;\n\t\t\tif (el && endpoint !== undefined) {\n\t\t\t\t(el as unknown as { endpoint: string }).endpoint = endpoint;\n\t\t\t}\n\t\t}, [endpoint, loaded]);\n\n\t\tReact.useEffect(() => {\n\t\t\tconst el = internal.current;\n\t\t\tif (el && method !== undefined) {\n\t\t\t\t(el as unknown as { method: 'GET' | 'POST' }).method = method;\n\t\t\t}\n\t\t}, [method, loaded]);\n\n\t\tReact.useEffect(() => {\n\t\t\tconst el = internal.current;\n\t\t\tif (el && publishableKey !== undefined) {\n\t\t\t\t(el as unknown as { publishableKey: string }).publishableKey = publishableKey;\n\t\t\t}\n\t\t}, [publishableKey, loaded]);\n\n\t\tReact.useEffect(() => {\n\t\t\tconst el = internal.current;\n\t\t\tif (el && baseUrl !== undefined) {\n\t\t\t\t(el as unknown as { baseUrl: string }).baseUrl = baseUrl;\n\t\t\t}\n\t\t}, [baseUrl, loaded]);\n\n\t\tReact.useEffect(() => {\n\t\t\tconst el = internal.current;\n\t\t\tif (el && specUrl !== undefined) {\n\t\t\t\t(el as unknown as { specUrl: string }).specUrl = specUrl;\n\t\t\t}\n\t\t}, [specUrl, loaded]);\n\n\t\tif (error) {\n\t\t\treturn React.createElement(\n\t\t\t\t'div',\n\t\t\t\t{ role: 'alert', className, style },\n\t\t\t\t`Roxy UI script load failed: ${error.message}`,\n\t\t\t);\n\t\t}\n\n\t\treturn React.createElement('roxy-angel-number-lookup', {\n\t\t\tref: internal,\n\t\t\tclassName,\n\t\t\tstyle,\n\t\t\t...rest,\n\t\t});\n\t},\n);\n", "/**\n * Loads the matching component bundle on first mount. Idempotent across\n * many components on the same page. Skips on the server (no document) so\n * React server components and Next.js SSR work without a flash.\n *\n * Pass an explicit `version` (e.g. `'0.1.5'`) to pin the loaded bundle to a\n * specific @roxyapi/ui release; the default ('latest') resolves to whatever\n * the CDN currently serves for @latest.\n */\nconst SCRIPT_ID = 'roxyapi-ui-loader';\nconst CDN_BASE_LATEST = \"https://cdn.jsdelivr.net/npm/@roxyapi/ui@latest/dist/cdn\";\nconst CDN_BASE_PREFIX = \"https://cdn.jsdelivr.net/npm/@roxyapi/ui@\";\nconst CDN_BASE_SUFFIX = \"/dist/cdn\";\n\nlet loaded: Promise<void> | null = null;\n\nfunction buildBase(version: string): string {\n\tif (!version || version === 'latest') return CDN_BASE_LATEST;\n\treturn `${CDN_BASE_PREFIX}${version}${CDN_BASE_SUFFIX}`;\n}\n\nexport function ensureScriptLoaded(version: string = 'latest'): Promise<void> {\n\tif (typeof document === 'undefined') return Promise.resolve();\n\tif (loaded) return loaded;\n\n\tloaded = new Promise<void>((resolve, reject) => {\n\t\tconst url = `${buildBase(version)}/roxy-ui.js`;\n\t\tlet existing = document.getElementById(SCRIPT_ID) as HTMLScriptElement | null;\n\t\tif (existing) {\n\t\t\tif (existing.dataset.loaded === 'true') {\n\t\t\t\tresolve();\n\t\t\t} else {\n\t\t\t\texisting.addEventListener('load', () => resolve());\n\t\t\t\texisting.addEventListener('error', () => reject(new Error('roxy-ui load failed')));\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\t\texisting = document.createElement('script');\n\t\texisting.id = SCRIPT_ID;\n\t\texisting.src = url;\n\t\texisting.async = true;\n\t\texisting.crossOrigin = 'anonymous';\n\t\texisting.addEventListener('load', () => {\n\t\t\texisting!.dataset.loaded = 'true';\n\t\t\tresolve();\n\t\t});\n\t\texisting.addEventListener('error', () => reject(new Error('roxy-ui load failed')));\n\t\tdocument.head.appendChild(existing);\n\t});\n\treturn loaded;\n}\n\n// Default export retained for convenience; matches the named export.\nexport default ensureScriptLoaded;\n// Surfaces the embedded @roxyapi/ui version this build of @roxyapi/ui-react\n// was generated against. Useful for diagnostics; not load-bearing.\nexport const ROXY_UI_VERSION = \"0.11.0\";\n"],
5
+ "mappings": "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",
6
+ "names": ["React", "SCRIPT_ID", "CDN_BASE_LATEST", "CDN_BASE_PREFIX", "CDN_BASE_SUFFIX", "loaded", "buildBase", "version", "ensureScriptLoaded", "resolve", "reject", "url", "existing", "RoxyAngelNumberLookup", "data", "className", "style", "endpoint", "method", "publishableKey", "baseUrl", "specUrl", "rest", "ref", "internal", "loaded", "setLoaded", "error", "setError", "active", "ensureScriptLoaded", "err", "el"]
7
7
  }
@@ -6,6 +6,16 @@ export interface RoxyAshtakavargaGridProps extends ElementAttrs {
6
6
  data?: AshtakavargaResponse;
7
7
  className?: string;
8
8
  style?: React.CSSProperties;
9
+ /** Endpoint path for built-in self-fetch (uncontrolled mode), e.g. "astrology/natal-chart". The component renders its own input form, fetches with the publishable key, and displays the result. Leave unset for controlled mode (pass `data`). */
10
+ endpoint?: string;
11
+ /** HTTP method for the self-fetch request. Defaults to POST. */
12
+ method?: 'GET' | 'POST';
13
+ /** Browser-safe publishable key (pk_) for self-fetch. A secret key is refused client-side and never sent. */
14
+ publishableKey?: string;
15
+ /** Override the API origin for self-hosted or proxied deployments. */
16
+ baseUrl?: string;
17
+ /** Override the OpenAPI spec URL the self-fetch form introspects. */
18
+ specUrl?: string;
9
19
  }
10
20
  export declare const RoxyAshtakavargaGrid: React.ForwardRefExoticComponent<RoxyAshtakavargaGridProps & React.RefAttributes<HTMLElement | null>>;
11
21
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"ashtakavarga-grid.d.ts","sourceRoot":"","sources":["../../src/components/ashtakavarga-grid.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAE9D,KAAK,YAAY,GAAG,IAAI,CACvB,KAAK,CAAC,cAAc,CAAC,WAAW,CAAC,EACjC,UAAU,GAAG,MAAM,CACnB,CAAC;AAEF,MAAM,WAAW,yBAA0B,SAAQ,YAAY;IAC9D,oEAAoE;IACpE,IAAI,CAAC,EAAE,oBAAoB,CAAC;IAC5B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;CAE5B;AAED,eAAO,MAAM,oBAAoB,sGAgDhC,CAAC"}
1
+ {"version":3,"file":"ashtakavarga-grid.d.ts","sourceRoot":"","sources":["../../src/components/ashtakavarga-grid.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAE9D,KAAK,YAAY,GAAG,IAAI,CACvB,KAAK,CAAC,cAAc,CAAC,WAAW,CAAC,EACjC,UAAU,GAAG,MAAM,CACnB,CAAC;AAEF,MAAM,WAAW,yBAA0B,SAAQ,YAAY;IAC9D,oEAAoE;IACpE,IAAI,CAAC,EAAE,oBAAoB,CAAC;IAC5B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;IAC5B,mPAAmP;IACnP,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,gEAAgE;IAChE,MAAM,CAAC,EAAE,KAAK,GAAG,MAAM,CAAC;IACxB,6GAA6G;IAC7G,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,sEAAsE;IACtE,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,qEAAqE;IACrE,OAAO,CAAC,EAAE,MAAM,CAAC;CAEjB;AAED,eAAO,MAAM,oBAAoB,sGAmFhC,CAAC"}
@@ -1,2 +1,2 @@
1
- import*as t from"react";var c="roxyapi-ui-loader",x="https://cdn.jsdelivr.net/npm/@roxyapi/ui@latest/dist/cdn",y="https://cdn.jsdelivr.net/npm/@roxyapi/ui@",g="/dist/cdn",i=null;function v(n){return!n||n==="latest"?x:`${y}${n}${g}`}function f(n="latest"){return typeof document>"u"?Promise.resolve():i||(i=new Promise((r,o)=>{let s=`${v(n)}/roxy-ui.js`,e=document.getElementById(c);if(e){e.dataset.loaded==="true"?r():(e.addEventListener("load",()=>r()),e.addEventListener("error",()=>o(new Error("roxy-ui load failed"))));return}e=document.createElement("script"),e.id=c,e.src=s,e.async=!0,e.crossOrigin="anonymous",e.addEventListener("load",()=>{e.dataset.loaded="true",r()}),e.addEventListener("error",()=>o(new Error("roxy-ui load failed"))),document.head.appendChild(e)}),i)}var h=t.forwardRef(function({data:r,className:o,style:s,...e},p){let d=t.useRef(null);t.useImperativeHandle(p,()=>d.current,[]);let[m,E]=t.useState(!1),[u,R]=t.useState(null);return t.useEffect(()=>{let a=!0;return f().then(()=>{a&&E(!0)}).catch(l=>{a&&R(l instanceof Error?l:new Error(String(l)))}),()=>{a=!1}},[]),t.useEffect(()=>{let a=d.current;a&&r!==void 0&&(a.data=r)},[r,m]),u?t.createElement("div",{role:"alert",className:o,style:s},`Roxy UI script load failed: ${u.message}`):t.createElement("roxy-ashtakavarga-grid",{ref:d,className:o,style:s,...e})});export{h as RoxyAshtakavargaGrid};
1
+ import*as t from"react";var R="roxyapi-ui-loader",v="https://cdn.jsdelivr.net/npm/@roxyapi/ui@latest/dist/cdn",k="https://cdn.jsdelivr.net/npm/@roxyapi/ui@",L="/dist/cdn",u=null;function T(s){return!s||s==="latest"?v:`${k}${s}${L}`}function g(s="latest"){return typeof document>"u"?Promise.resolve():u||(u=new Promise((a,o)=>{let d=`${T(s)}/roxy-ui.js`,n=document.getElementById(R);if(n){n.dataset.loaded==="true"?a():(n.addEventListener("load",()=>a()),n.addEventListener("error",()=>o(new Error("roxy-ui load failed"))));return}n=document.createElement("script"),n.id=R,n.src=d,n.async=!0,n.crossOrigin="anonymous",n.addEventListener("load",()=>{n.dataset.loaded="true",a()}),n.addEventListener("error",()=>o(new Error("roxy-ui load failed"))),document.head.appendChild(n)}),u)}var P=t.forwardRef(function({data:a,className:o,style:d,endpoint:n,method:c,publishableKey:l,baseUrl:f,specUrl:E,...y},x){let r=t.useRef(null);t.useImperativeHandle(x,()=>r.current,[]);let[i,S]=t.useState(!1),[m,h]=t.useState(null);return t.useEffect(()=>{let e=!0;return g().then(()=>{e&&S(!0)}).catch(p=>{e&&h(p instanceof Error?p:new Error(String(p)))}),()=>{e=!1}},[]),t.useEffect(()=>{let e=r.current;e&&a!==void 0&&(e.data=a)},[a,i]),t.useEffect(()=>{let e=r.current;e&&n!==void 0&&(e.endpoint=n)},[n,i]),t.useEffect(()=>{let e=r.current;e&&c!==void 0&&(e.method=c)},[c,i]),t.useEffect(()=>{let e=r.current;e&&l!==void 0&&(e.publishableKey=l)},[l,i]),t.useEffect(()=>{let e=r.current;e&&f!==void 0&&(e.baseUrl=f)},[f,i]),t.useEffect(()=>{let e=r.current;e&&E!==void 0&&(e.specUrl=E)},[E,i]),m?t.createElement("div",{role:"alert",className:o,style:d},`Roxy UI script load failed: ${m.message}`):t.createElement("roxy-ashtakavarga-grid",{ref:r,className:o,style:d,...y})});export{P as RoxyAshtakavargaGrid};
2
2
  //# sourceMappingURL=ashtakavarga-grid.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/components/ashtakavarga-grid.tsx", "../../src/load-ui.ts"],
4
- "sourcesContent": ["import * as React from 'react';\nimport { ensureScriptLoaded } from '../load-ui.js';\nimport type { AshtakavargaResponse } from '@roxyapi/ui/types';\n\ntype ElementAttrs = Omit<\n\tReact.HTMLAttributes<HTMLElement>,\n\t'children' | 'data'\n>;\n\nexport interface RoxyAshtakavargaGridProps extends ElementAttrs {\n\t/** Spec-derived response payload. Pass the raw RoxyAPI response. */\n\tdata?: AshtakavargaResponse;\n\tclassName?: string;\n\tstyle?: React.CSSProperties;\n\n}\n\nexport const RoxyAshtakavargaGrid = React.forwardRef<HTMLElement | null, RoxyAshtakavargaGridProps>(\n\tfunction RoxyAshtakavargaGrid({ data, className, style, ...rest }, ref) {\n\t\tconst internal = React.useRef<HTMLElement | null>(null);\n\t\tReact.useImperativeHandle<HTMLElement | null, HTMLElement | null>(\n\t\t\tref,\n\t\t\t() => internal.current,\n\t\t\t[],\n\t\t);\n\t\tconst [loaded, setLoaded] = React.useState(false);\n\t\tconst [error, setError] = React.useState<Error | null>(null);\n\n\t\tReact.useEffect(() => {\n\t\t\tlet active = true;\n\t\t\tensureScriptLoaded()\n\t\t\t\t.then(() => {\n\t\t\t\t\tif (active) setLoaded(true);\n\t\t\t\t})\n\t\t\t\t.catch((err: unknown) => {\n\t\t\t\t\tif (!active) return;\n\t\t\t\t\tsetError(err instanceof Error ? err : new Error(String(err)));\n\t\t\t\t});\n\t\t\treturn () => {\n\t\t\t\tactive = false;\n\t\t\t};\n\t\t}, []);\n\n\t\tReact.useEffect(() => {\n\t\t\tconst el = internal.current;\n\t\t\tif (el && data !== undefined) {\n\t\t\t\t(el as unknown as { data: unknown }).data = data;\n\t\t\t}\n\t\t}, [data, loaded]);\n\n\t\tif (error) {\n\t\t\treturn React.createElement(\n\t\t\t\t'div',\n\t\t\t\t{ role: 'alert', className, style },\n\t\t\t\t`Roxy UI script load failed: ${error.message}`,\n\t\t\t);\n\t\t}\n\n\t\treturn React.createElement('roxy-ashtakavarga-grid', {\n\t\t\tref: internal,\n\t\t\tclassName,\n\t\t\tstyle,\n\t\t\t...rest,\n\t\t});\n\t},\n);\n", "/**\n * Loads the matching component bundle on first mount. Idempotent across\n * many components on the same page. Skips on the server (no document) so\n * React server components and Next.js SSR work without a flash.\n *\n * Pass an explicit `version` (e.g. `'0.1.5'`) to pin the loaded bundle to a\n * specific @roxyapi/ui release; the default ('latest') resolves to whatever\n * the CDN currently serves for @latest.\n */\nconst SCRIPT_ID = 'roxyapi-ui-loader';\nconst CDN_BASE_LATEST = \"https://cdn.jsdelivr.net/npm/@roxyapi/ui@latest/dist/cdn\";\nconst CDN_BASE_PREFIX = \"https://cdn.jsdelivr.net/npm/@roxyapi/ui@\";\nconst CDN_BASE_SUFFIX = \"/dist/cdn\";\n\nlet loaded: Promise<void> | null = null;\n\nfunction buildBase(version: string): string {\n\tif (!version || version === 'latest') return CDN_BASE_LATEST;\n\treturn `${CDN_BASE_PREFIX}${version}${CDN_BASE_SUFFIX}`;\n}\n\nexport function ensureScriptLoaded(version: string = 'latest'): Promise<void> {\n\tif (typeof document === 'undefined') return Promise.resolve();\n\tif (loaded) return loaded;\n\n\tloaded = new Promise<void>((resolve, reject) => {\n\t\tconst url = `${buildBase(version)}/roxy-ui.js`;\n\t\tlet existing = document.getElementById(SCRIPT_ID) as HTMLScriptElement | null;\n\t\tif (existing) {\n\t\t\tif (existing.dataset.loaded === 'true') {\n\t\t\t\tresolve();\n\t\t\t} else {\n\t\t\t\texisting.addEventListener('load', () => resolve());\n\t\t\t\texisting.addEventListener('error', () => reject(new Error('roxy-ui load failed')));\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\t\texisting = document.createElement('script');\n\t\texisting.id = SCRIPT_ID;\n\t\texisting.src = url;\n\t\texisting.async = true;\n\t\texisting.crossOrigin = 'anonymous';\n\t\texisting.addEventListener('load', () => {\n\t\t\texisting!.dataset.loaded = 'true';\n\t\t\tresolve();\n\t\t});\n\t\texisting.addEventListener('error', () => reject(new Error('roxy-ui load failed')));\n\t\tdocument.head.appendChild(existing);\n\t});\n\treturn loaded;\n}\n\n// Default export retained for convenience; matches the named export.\nexport default ensureScriptLoaded;\n// Surfaces the embedded @roxyapi/ui version this build of @roxyapi/ui-react\n// was generated against. Useful for diagnostics; not load-bearing.\nexport const ROXY_UI_VERSION = \"0.10.0\";\n"],
5
- "mappings": "AAAA,UAAYA,MAAW,QCSvB,IAAMC,EAAY,oBACZC,EAAkB,2DAClBC,EAAkB,4CAClBC,EAAkB,YAEpBC,EAA+B,KAEnC,SAASC,EAAUC,EAAyB,CAC3C,MAAI,CAACA,GAAWA,IAAY,SAAiBL,EACtC,GAAGC,CAAe,GAAGI,CAAO,GAAGH,CAAe,EACtD,CAEO,SAASI,EAAmBD,EAAkB,SAAyB,CAC7E,OAAI,OAAO,SAAa,IAAoB,QAAQ,QAAQ,EACxDF,IAEJA,EAAS,IAAI,QAAc,CAACI,EAASC,IAAW,CAC/C,IAAMC,EAAM,GAAGL,EAAUC,CAAO,CAAC,cAC7BK,EAAW,SAAS,eAAeX,CAAS,EAChD,GAAIW,EAAU,CACTA,EAAS,QAAQ,SAAW,OAC/BH,EAAQ,GAERG,EAAS,iBAAiB,OAAQ,IAAMH,EAAQ,CAAC,EACjDG,EAAS,iBAAiB,QAAS,IAAMF,EAAO,IAAI,MAAM,qBAAqB,CAAC,CAAC,GAElF,MACD,CACAE,EAAW,SAAS,cAAc,QAAQ,EAC1CA,EAAS,GAAKX,EACdW,EAAS,IAAMD,EACfC,EAAS,MAAQ,GACjBA,EAAS,YAAc,YACvBA,EAAS,iBAAiB,OAAQ,IAAM,CACvCA,EAAU,QAAQ,OAAS,OAC3BH,EAAQ,CACT,CAAC,EACDG,EAAS,iBAAiB,QAAS,IAAMF,EAAO,IAAI,MAAM,qBAAqB,CAAC,CAAC,EACjF,SAAS,KAAK,YAAYE,CAAQ,CACnC,CAAC,EACMP,EACR,CDjCO,IAAMQ,EAA6B,aACzC,SAA8B,CAAE,KAAAC,EAAM,UAAAC,EAAW,MAAAC,EAAO,GAAGC,CAAK,EAAGC,EAAK,CACvE,IAAMC,EAAiB,SAA2B,IAAI,EAChD,sBACLD,EACA,IAAMC,EAAS,QACf,CAAC,CACF,EACA,GAAM,CAACC,EAAQC,CAAS,EAAU,WAAS,EAAK,EAC1C,CAACC,EAAOC,CAAQ,EAAU,WAAuB,IAAI,EAwB3D,OAtBM,YAAU,IAAM,CACrB,IAAIC,EAAS,GACb,OAAAC,EAAmB,EACjB,KAAK,IAAM,CACPD,GAAQH,EAAU,EAAI,CAC3B,CAAC,EACA,MAAOK,GAAiB,CACnBF,GACLD,EAASG,aAAe,MAAQA,EAAM,IAAI,MAAM,OAAOA,CAAG,CAAC,CAAC,CAC7D,CAAC,EACK,IAAM,CACZF,EAAS,EACV,CACD,EAAG,CAAC,CAAC,EAEC,YAAU,IAAM,CACrB,IAAMG,EAAKR,EAAS,QAChBQ,GAAMb,IAAS,SACjBa,EAAoC,KAAOb,EAE9C,EAAG,CAACA,EAAMM,CAAM,CAAC,EAEbE,EACU,gBACZ,MACA,CAAE,KAAM,QAAS,UAAAP,EAAW,MAAAC,CAAM,EAClC,+BAA+BM,EAAM,OAAO,EAC7C,EAGY,gBAAc,yBAA0B,CACpD,IAAKH,EACL,UAAAJ,EACA,MAAAC,EACA,GAAGC,CACJ,CAAC,CACF,CACD",
6
- "names": ["React", "SCRIPT_ID", "CDN_BASE_LATEST", "CDN_BASE_PREFIX", "CDN_BASE_SUFFIX", "loaded", "buildBase", "version", "ensureScriptLoaded", "resolve", "reject", "url", "existing", "RoxyAshtakavargaGrid", "data", "className", "style", "rest", "ref", "internal", "loaded", "setLoaded", "error", "setError", "active", "ensureScriptLoaded", "err", "el"]
4
+ "sourcesContent": ["import * as React from 'react';\nimport { ensureScriptLoaded } from '../load-ui.js';\nimport type { AshtakavargaResponse } from '@roxyapi/ui/types';\n\ntype ElementAttrs = Omit<\n\tReact.HTMLAttributes<HTMLElement>,\n\t'children' | 'data'\n>;\n\nexport interface RoxyAshtakavargaGridProps extends ElementAttrs {\n\t/** Spec-derived response payload. Pass the raw RoxyAPI response. */\n\tdata?: AshtakavargaResponse;\n\tclassName?: string;\n\tstyle?: React.CSSProperties;\n\t/** Endpoint path for built-in self-fetch (uncontrolled mode), e.g. \"astrology/natal-chart\". The component renders its own input form, fetches with the publishable key, and displays the result. Leave unset for controlled mode (pass `data`). */\n\tendpoint?: string;\n\t/** HTTP method for the self-fetch request. Defaults to POST. */\n\tmethod?: 'GET' | 'POST';\n\t/** Browser-safe publishable key (pk_) for self-fetch. A secret key is refused client-side and never sent. */\n\tpublishableKey?: string;\n\t/** Override the API origin for self-hosted or proxied deployments. */\n\tbaseUrl?: string;\n\t/** Override the OpenAPI spec URL the self-fetch form introspects. */\n\tspecUrl?: string;\n\n}\n\nexport const RoxyAshtakavargaGrid = React.forwardRef<HTMLElement | null, RoxyAshtakavargaGridProps>(\n\tfunction RoxyAshtakavargaGrid({ data, className, style, endpoint, method, publishableKey, baseUrl, specUrl, ...rest }, ref) {\n\t\tconst internal = React.useRef<HTMLElement | null>(null);\n\t\tReact.useImperativeHandle<HTMLElement | null, HTMLElement | null>(\n\t\t\tref,\n\t\t\t() => internal.current,\n\t\t\t[],\n\t\t);\n\t\tconst [loaded, setLoaded] = React.useState(false);\n\t\tconst [error, setError] = React.useState<Error | null>(null);\n\n\t\tReact.useEffect(() => {\n\t\t\tlet active = true;\n\t\t\tensureScriptLoaded()\n\t\t\t\t.then(() => {\n\t\t\t\t\tif (active) setLoaded(true);\n\t\t\t\t})\n\t\t\t\t.catch((err: unknown) => {\n\t\t\t\t\tif (!active) return;\n\t\t\t\t\tsetError(err instanceof Error ? err : new Error(String(err)));\n\t\t\t\t});\n\t\t\treturn () => {\n\t\t\t\tactive = false;\n\t\t\t};\n\t\t}, []);\n\n\t\tReact.useEffect(() => {\n\t\t\tconst el = internal.current;\n\t\t\tif (el && data !== undefined) {\n\t\t\t\t(el as unknown as { data: unknown }).data = data;\n\t\t\t}\n\t\t}, [data, loaded]);\n\n\t\tReact.useEffect(() => {\n\t\t\tconst el = internal.current;\n\t\t\tif (el && endpoint !== undefined) {\n\t\t\t\t(el as unknown as { endpoint: string }).endpoint = endpoint;\n\t\t\t}\n\t\t}, [endpoint, loaded]);\n\n\t\tReact.useEffect(() => {\n\t\t\tconst el = internal.current;\n\t\t\tif (el && method !== undefined) {\n\t\t\t\t(el as unknown as { method: 'GET' | 'POST' }).method = method;\n\t\t\t}\n\t\t}, [method, loaded]);\n\n\t\tReact.useEffect(() => {\n\t\t\tconst el = internal.current;\n\t\t\tif (el && publishableKey !== undefined) {\n\t\t\t\t(el as unknown as { publishableKey: string }).publishableKey = publishableKey;\n\t\t\t}\n\t\t}, [publishableKey, loaded]);\n\n\t\tReact.useEffect(() => {\n\t\t\tconst el = internal.current;\n\t\t\tif (el && baseUrl !== undefined) {\n\t\t\t\t(el as unknown as { baseUrl: string }).baseUrl = baseUrl;\n\t\t\t}\n\t\t}, [baseUrl, loaded]);\n\n\t\tReact.useEffect(() => {\n\t\t\tconst el = internal.current;\n\t\t\tif (el && specUrl !== undefined) {\n\t\t\t\t(el as unknown as { specUrl: string }).specUrl = specUrl;\n\t\t\t}\n\t\t}, [specUrl, loaded]);\n\n\t\tif (error) {\n\t\t\treturn React.createElement(\n\t\t\t\t'div',\n\t\t\t\t{ role: 'alert', className, style },\n\t\t\t\t`Roxy UI script load failed: ${error.message}`,\n\t\t\t);\n\t\t}\n\n\t\treturn React.createElement('roxy-ashtakavarga-grid', {\n\t\t\tref: internal,\n\t\t\tclassName,\n\t\t\tstyle,\n\t\t\t...rest,\n\t\t});\n\t},\n);\n", "/**\n * Loads the matching component bundle on first mount. Idempotent across\n * many components on the same page. Skips on the server (no document) so\n * React server components and Next.js SSR work without a flash.\n *\n * Pass an explicit `version` (e.g. `'0.1.5'`) to pin the loaded bundle to a\n * specific @roxyapi/ui release; the default ('latest') resolves to whatever\n * the CDN currently serves for @latest.\n */\nconst SCRIPT_ID = 'roxyapi-ui-loader';\nconst CDN_BASE_LATEST = \"https://cdn.jsdelivr.net/npm/@roxyapi/ui@latest/dist/cdn\";\nconst CDN_BASE_PREFIX = \"https://cdn.jsdelivr.net/npm/@roxyapi/ui@\";\nconst CDN_BASE_SUFFIX = \"/dist/cdn\";\n\nlet loaded: Promise<void> | null = null;\n\nfunction buildBase(version: string): string {\n\tif (!version || version === 'latest') return CDN_BASE_LATEST;\n\treturn `${CDN_BASE_PREFIX}${version}${CDN_BASE_SUFFIX}`;\n}\n\nexport function ensureScriptLoaded(version: string = 'latest'): Promise<void> {\n\tif (typeof document === 'undefined') return Promise.resolve();\n\tif (loaded) return loaded;\n\n\tloaded = new Promise<void>((resolve, reject) => {\n\t\tconst url = `${buildBase(version)}/roxy-ui.js`;\n\t\tlet existing = document.getElementById(SCRIPT_ID) as HTMLScriptElement | null;\n\t\tif (existing) {\n\t\t\tif (existing.dataset.loaded === 'true') {\n\t\t\t\tresolve();\n\t\t\t} else {\n\t\t\t\texisting.addEventListener('load', () => resolve());\n\t\t\t\texisting.addEventListener('error', () => reject(new Error('roxy-ui load failed')));\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\t\texisting = document.createElement('script');\n\t\texisting.id = SCRIPT_ID;\n\t\texisting.src = url;\n\t\texisting.async = true;\n\t\texisting.crossOrigin = 'anonymous';\n\t\texisting.addEventListener('load', () => {\n\t\t\texisting!.dataset.loaded = 'true';\n\t\t\tresolve();\n\t\t});\n\t\texisting.addEventListener('error', () => reject(new Error('roxy-ui load failed')));\n\t\tdocument.head.appendChild(existing);\n\t});\n\treturn loaded;\n}\n\n// Default export retained for convenience; matches the named export.\nexport default ensureScriptLoaded;\n// Surfaces the embedded @roxyapi/ui version this build of @roxyapi/ui-react\n// was generated against. Useful for diagnostics; not load-bearing.\nexport const ROXY_UI_VERSION = \"0.11.0\";\n"],
5
+ "mappings": "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",
6
+ "names": ["React", "SCRIPT_ID", "CDN_BASE_LATEST", "CDN_BASE_PREFIX", "CDN_BASE_SUFFIX", "loaded", "buildBase", "version", "ensureScriptLoaded", "resolve", "reject", "url", "existing", "RoxyAshtakavargaGrid", "data", "className", "style", "endpoint", "method", "publishableKey", "baseUrl", "specUrl", "rest", "ref", "internal", "loaded", "setLoaded", "error", "setError", "active", "ensureScriptLoaded", "err", "el"]
7
7
  }
@@ -0,0 +1,22 @@
1
+ import * as React from 'react';
2
+ import type { CalculateAspectsResponse, CalculateTransitAspectsResponse, DetectAspectPatternsResponse } from '@roxyapi/ui/types';
3
+ type ElementAttrs = Omit<React.HTMLAttributes<HTMLElement>, 'children' | 'data'>;
4
+ export interface RoxyAspectsTableProps extends ElementAttrs {
5
+ /** Spec-derived response payload. Pass the raw RoxyAPI response. */
6
+ data?: CalculateAspectsResponse | CalculateTransitAspectsResponse | DetectAspectPatternsResponse;
7
+ className?: string;
8
+ style?: React.CSSProperties;
9
+ /** Endpoint path for built-in self-fetch (uncontrolled mode), e.g. "astrology/natal-chart". The component renders its own input form, fetches with the publishable key, and displays the result. Leave unset for controlled mode (pass `data`). */
10
+ endpoint?: string;
11
+ /** HTTP method for the self-fetch request. Defaults to POST. */
12
+ method?: 'GET' | 'POST';
13
+ /** Browser-safe publishable key (pk_) for self-fetch. A secret key is refused client-side and never sent. */
14
+ publishableKey?: string;
15
+ /** Override the API origin for self-hosted or proxied deployments. */
16
+ baseUrl?: string;
17
+ /** Override the OpenAPI spec URL the self-fetch form introspects. */
18
+ specUrl?: string;
19
+ }
20
+ export declare const RoxyAspectsTable: React.ForwardRefExoticComponent<RoxyAspectsTableProps & React.RefAttributes<HTMLElement | null>>;
21
+ export {};
22
+ //# sourceMappingURL=aspects-table.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"aspects-table.d.ts","sourceRoot":"","sources":["../../src/components/aspects-table.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,KAAK,EAAE,wBAAwB,EAAE,+BAA+B,EAAE,4BAA4B,EAAE,MAAM,mBAAmB,CAAC;AAEjI,KAAK,YAAY,GAAG,IAAI,CACvB,KAAK,CAAC,cAAc,CAAC,WAAW,CAAC,EACjC,UAAU,GAAG,MAAM,CACnB,CAAC;AAEF,MAAM,WAAW,qBAAsB,SAAQ,YAAY;IAC1D,oEAAoE;IACpE,IAAI,CAAC,EAAE,wBAAwB,GAAG,+BAA+B,GAAG,4BAA4B,CAAC;IACjG,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;IAC5B,mPAAmP;IACnP,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,gEAAgE;IAChE,MAAM,CAAC,EAAE,KAAK,GAAG,MAAM,CAAC;IACxB,6GAA6G;IAC7G,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,sEAAsE;IACtE,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,qEAAqE;IACrE,OAAO,CAAC,EAAE,MAAM,CAAC;CAEjB;AAED,eAAO,MAAM,gBAAgB,kGAmF5B,CAAC"}
@@ -0,0 +1,2 @@
1
+ import*as t from"react";var m="roxyapi-ui-loader",S="https://cdn.jsdelivr.net/npm/@roxyapi/ui@latest/dist/cdn",L="https://cdn.jsdelivr.net/npm/@roxyapi/ui@",w="/dist/cdn",l=null;function P(a){return!a||a==="latest"?S:`${L}${a}${w}`}function y(a="latest"){return typeof document>"u"?Promise.resolve():l||(l=new Promise((s,i)=>{let c=`${P(a)}/roxy-ui.js`,n=document.getElementById(m);if(n){n.dataset.loaded==="true"?s():(n.addEventListener("load",()=>s()),n.addEventListener("error",()=>i(new Error("roxy-ui load failed"))));return}n=document.createElement("script"),n.id=m,n.src=c,n.async=!0,n.crossOrigin="anonymous",n.addEventListener("load",()=>{n.dataset.loaded="true",s()}),n.addEventListener("error",()=>i(new Error("roxy-ui load failed"))),document.head.appendChild(n)}),l)}var h=t.forwardRef(function({data:s,className:i,style:c,endpoint:n,method:u,publishableKey:d,baseUrl:f,specUrl:p,...x},T){let r=t.useRef(null);t.useImperativeHandle(T,()=>r.current,[]);let[o,g]=t.useState(!1),[R,A]=t.useState(null);return t.useEffect(()=>{let e=!0;return y().then(()=>{e&&g(!0)}).catch(E=>{e&&A(E instanceof Error?E:new Error(String(E)))}),()=>{e=!1}},[]),t.useEffect(()=>{let e=r.current;e&&s!==void 0&&(e.data=s)},[s,o]),t.useEffect(()=>{let e=r.current;e&&n!==void 0&&(e.endpoint=n)},[n,o]),t.useEffect(()=>{let e=r.current;e&&u!==void 0&&(e.method=u)},[u,o]),t.useEffect(()=>{let e=r.current;e&&d!==void 0&&(e.publishableKey=d)},[d,o]),t.useEffect(()=>{let e=r.current;e&&f!==void 0&&(e.baseUrl=f)},[f,o]),t.useEffect(()=>{let e=r.current;e&&p!==void 0&&(e.specUrl=p)},[p,o]),R?t.createElement("div",{role:"alert",className:i,style:c},`Roxy UI script load failed: ${R.message}`):t.createElement("roxy-aspects-table",{ref:r,className:i,style:c,...x})});export{h as RoxyAspectsTable};
2
+ //# sourceMappingURL=aspects-table.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/components/aspects-table.tsx", "../../src/load-ui.ts"],
4
+ "sourcesContent": ["import * as React from 'react';\nimport { ensureScriptLoaded } from '../load-ui.js';\nimport type { CalculateAspectsResponse, CalculateTransitAspectsResponse, DetectAspectPatternsResponse } from '@roxyapi/ui/types';\n\ntype ElementAttrs = Omit<\n\tReact.HTMLAttributes<HTMLElement>,\n\t'children' | 'data'\n>;\n\nexport interface RoxyAspectsTableProps extends ElementAttrs {\n\t/** Spec-derived response payload. Pass the raw RoxyAPI response. */\n\tdata?: CalculateAspectsResponse | CalculateTransitAspectsResponse | DetectAspectPatternsResponse;\n\tclassName?: string;\n\tstyle?: React.CSSProperties;\n\t/** Endpoint path for built-in self-fetch (uncontrolled mode), e.g. \"astrology/natal-chart\". The component renders its own input form, fetches with the publishable key, and displays the result. Leave unset for controlled mode (pass `data`). */\n\tendpoint?: string;\n\t/** HTTP method for the self-fetch request. Defaults to POST. */\n\tmethod?: 'GET' | 'POST';\n\t/** Browser-safe publishable key (pk_) for self-fetch. A secret key is refused client-side and never sent. */\n\tpublishableKey?: string;\n\t/** Override the API origin for self-hosted or proxied deployments. */\n\tbaseUrl?: string;\n\t/** Override the OpenAPI spec URL the self-fetch form introspects. */\n\tspecUrl?: string;\n\n}\n\nexport const RoxyAspectsTable = React.forwardRef<HTMLElement | null, RoxyAspectsTableProps>(\n\tfunction RoxyAspectsTable({ data, className, style, endpoint, method, publishableKey, baseUrl, specUrl, ...rest }, ref) {\n\t\tconst internal = React.useRef<HTMLElement | null>(null);\n\t\tReact.useImperativeHandle<HTMLElement | null, HTMLElement | null>(\n\t\t\tref,\n\t\t\t() => internal.current,\n\t\t\t[],\n\t\t);\n\t\tconst [loaded, setLoaded] = React.useState(false);\n\t\tconst [error, setError] = React.useState<Error | null>(null);\n\n\t\tReact.useEffect(() => {\n\t\t\tlet active = true;\n\t\t\tensureScriptLoaded()\n\t\t\t\t.then(() => {\n\t\t\t\t\tif (active) setLoaded(true);\n\t\t\t\t})\n\t\t\t\t.catch((err: unknown) => {\n\t\t\t\t\tif (!active) return;\n\t\t\t\t\tsetError(err instanceof Error ? err : new Error(String(err)));\n\t\t\t\t});\n\t\t\treturn () => {\n\t\t\t\tactive = false;\n\t\t\t};\n\t\t}, []);\n\n\t\tReact.useEffect(() => {\n\t\t\tconst el = internal.current;\n\t\t\tif (el && data !== undefined) {\n\t\t\t\t(el as unknown as { data: unknown }).data = data;\n\t\t\t}\n\t\t}, [data, loaded]);\n\n\t\tReact.useEffect(() => {\n\t\t\tconst el = internal.current;\n\t\t\tif (el && endpoint !== undefined) {\n\t\t\t\t(el as unknown as { endpoint: string }).endpoint = endpoint;\n\t\t\t}\n\t\t}, [endpoint, loaded]);\n\n\t\tReact.useEffect(() => {\n\t\t\tconst el = internal.current;\n\t\t\tif (el && method !== undefined) {\n\t\t\t\t(el as unknown as { method: 'GET' | 'POST' }).method = method;\n\t\t\t}\n\t\t}, [method, loaded]);\n\n\t\tReact.useEffect(() => {\n\t\t\tconst el = internal.current;\n\t\t\tif (el && publishableKey !== undefined) {\n\t\t\t\t(el as unknown as { publishableKey: string }).publishableKey = publishableKey;\n\t\t\t}\n\t\t}, [publishableKey, loaded]);\n\n\t\tReact.useEffect(() => {\n\t\t\tconst el = internal.current;\n\t\t\tif (el && baseUrl !== undefined) {\n\t\t\t\t(el as unknown as { baseUrl: string }).baseUrl = baseUrl;\n\t\t\t}\n\t\t}, [baseUrl, loaded]);\n\n\t\tReact.useEffect(() => {\n\t\t\tconst el = internal.current;\n\t\t\tif (el && specUrl !== undefined) {\n\t\t\t\t(el as unknown as { specUrl: string }).specUrl = specUrl;\n\t\t\t}\n\t\t}, [specUrl, loaded]);\n\n\t\tif (error) {\n\t\t\treturn React.createElement(\n\t\t\t\t'div',\n\t\t\t\t{ role: 'alert', className, style },\n\t\t\t\t`Roxy UI script load failed: ${error.message}`,\n\t\t\t);\n\t\t}\n\n\t\treturn React.createElement('roxy-aspects-table', {\n\t\t\tref: internal,\n\t\t\tclassName,\n\t\t\tstyle,\n\t\t\t...rest,\n\t\t});\n\t},\n);\n", "/**\n * Loads the matching component bundle on first mount. Idempotent across\n * many components on the same page. Skips on the server (no document) so\n * React server components and Next.js SSR work without a flash.\n *\n * Pass an explicit `version` (e.g. `'0.1.5'`) to pin the loaded bundle to a\n * specific @roxyapi/ui release; the default ('latest') resolves to whatever\n * the CDN currently serves for @latest.\n */\nconst SCRIPT_ID = 'roxyapi-ui-loader';\nconst CDN_BASE_LATEST = \"https://cdn.jsdelivr.net/npm/@roxyapi/ui@latest/dist/cdn\";\nconst CDN_BASE_PREFIX = \"https://cdn.jsdelivr.net/npm/@roxyapi/ui@\";\nconst CDN_BASE_SUFFIX = \"/dist/cdn\";\n\nlet loaded: Promise<void> | null = null;\n\nfunction buildBase(version: string): string {\n\tif (!version || version === 'latest') return CDN_BASE_LATEST;\n\treturn `${CDN_BASE_PREFIX}${version}${CDN_BASE_SUFFIX}`;\n}\n\nexport function ensureScriptLoaded(version: string = 'latest'): Promise<void> {\n\tif (typeof document === 'undefined') return Promise.resolve();\n\tif (loaded) return loaded;\n\n\tloaded = new Promise<void>((resolve, reject) => {\n\t\tconst url = `${buildBase(version)}/roxy-ui.js`;\n\t\tlet existing = document.getElementById(SCRIPT_ID) as HTMLScriptElement | null;\n\t\tif (existing) {\n\t\t\tif (existing.dataset.loaded === 'true') {\n\t\t\t\tresolve();\n\t\t\t} else {\n\t\t\t\texisting.addEventListener('load', () => resolve());\n\t\t\t\texisting.addEventListener('error', () => reject(new Error('roxy-ui load failed')));\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\t\texisting = document.createElement('script');\n\t\texisting.id = SCRIPT_ID;\n\t\texisting.src = url;\n\t\texisting.async = true;\n\t\texisting.crossOrigin = 'anonymous';\n\t\texisting.addEventListener('load', () => {\n\t\t\texisting!.dataset.loaded = 'true';\n\t\t\tresolve();\n\t\t});\n\t\texisting.addEventListener('error', () => reject(new Error('roxy-ui load failed')));\n\t\tdocument.head.appendChild(existing);\n\t});\n\treturn loaded;\n}\n\n// Default export retained for convenience; matches the named export.\nexport default ensureScriptLoaded;\n// Surfaces the embedded @roxyapi/ui version this build of @roxyapi/ui-react\n// was generated against. Useful for diagnostics; not load-bearing.\nexport const ROXY_UI_VERSION = \"0.11.0\";\n"],
5
+ "mappings": "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",
6
+ "names": ["React", "SCRIPT_ID", "CDN_BASE_LATEST", "CDN_BASE_PREFIX", "CDN_BASE_SUFFIX", "loaded", "buildBase", "version", "ensureScriptLoaded", "resolve", "reject", "url", "existing", "RoxyAspectsTable", "data", "className", "style", "endpoint", "method", "publishableKey", "baseUrl", "specUrl", "rest", "ref", "internal", "loaded", "setLoaded", "error", "setError", "active", "ensureScriptLoaded", "err", "el"]
7
+ }
@@ -8,6 +8,16 @@ export interface RoxyBiorhythmChartProps extends ElementAttrs {
8
8
  style?: React.CSSProperties;
9
9
  /** Which biorhythm response shape to render: a single day, a multi-day forecast, or the critical days list. */
10
10
  mode?: 'daily' | 'forecast' | 'critical-days';
11
+ /** Endpoint path for built-in self-fetch (uncontrolled mode), e.g. "astrology/natal-chart". The component renders its own input form, fetches with the publishable key, and displays the result. Leave unset for controlled mode (pass `data`). */
12
+ endpoint?: string;
13
+ /** HTTP method for the self-fetch request. Defaults to POST. */
14
+ method?: 'GET' | 'POST';
15
+ /** Browser-safe publishable key (pk_) for self-fetch. A secret key is refused client-side and never sent. */
16
+ publishableKey?: string;
17
+ /** Override the API origin for self-hosted or proxied deployments. */
18
+ baseUrl?: string;
19
+ /** Override the OpenAPI spec URL the self-fetch form introspects. */
20
+ specUrl?: string;
11
21
  }
12
22
  export declare const RoxyBiorhythmChart: React.ForwardRefExoticComponent<RoxyBiorhythmChartProps & React.RefAttributes<HTMLElement | null>>;
13
23
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"biorhythm-chart.d.ts","sourceRoot":"","sources":["../../src/components/biorhythm-chart.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,KAAK,EAAE,uBAAuB,EAAE,yBAAyB,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAEjH,KAAK,YAAY,GAAG,IAAI,CACvB,KAAK,CAAC,cAAc,CAAC,WAAW,CAAC,EACjC,UAAU,GAAG,MAAM,CACnB,CAAC;AAEF,MAAM,WAAW,uBAAwB,SAAQ,YAAY;IAC5D,oEAAoE;IACpE,IAAI,CAAC,EAAE,yBAAyB,GAAG,mBAAmB,GAAG,uBAAuB,CAAC;IACjF,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;IAC5B,+GAA+G;IAC/G,IAAI,CAAC,EAAE,OAAO,GAAG,UAAU,GAAG,eAAe,CAAC;CAE9C;AAED,eAAO,MAAM,kBAAkB,oGAuD9B,CAAC"}
1
+ {"version":3,"file":"biorhythm-chart.d.ts","sourceRoot":"","sources":["../../src/components/biorhythm-chart.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,KAAK,EAAE,uBAAuB,EAAE,yBAAyB,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAEjH,KAAK,YAAY,GAAG,IAAI,CACvB,KAAK,CAAC,cAAc,CAAC,WAAW,CAAC,EACjC,UAAU,GAAG,MAAM,CACnB,CAAC;AAEF,MAAM,WAAW,uBAAwB,SAAQ,YAAY;IAC5D,oEAAoE;IACpE,IAAI,CAAC,EAAE,yBAAyB,GAAG,mBAAmB,GAAG,uBAAuB,CAAC;IACjF,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;IAC5B,+GAA+G;IAC/G,IAAI,CAAC,EAAE,OAAO,GAAG,UAAU,GAAG,eAAe,CAAC;IAC9C,mPAAmP;IACnP,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,gEAAgE;IAChE,MAAM,CAAC,EAAE,KAAK,GAAG,MAAM,CAAC;IACxB,6GAA6G;IAC7G,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,sEAAsE;IACtE,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,qEAAqE;IACrE,OAAO,CAAC,EAAE,MAAM,CAAC;CAEjB;AAED,eAAO,MAAM,kBAAkB,oGA0F9B,CAAC"}