@roxyapi/ui-react 0.0.1 → 0.1.1

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 (151) hide show
  1. package/AGENTS.md +169 -0
  2. package/dist/components/biorhythm-chart.d.ts +9 -0
  3. package/dist/components/biorhythm-chart.d.ts.map +1 -0
  4. package/dist/components/biorhythm-chart.js +65 -0
  5. package/dist/components/biorhythm-chart.js.map +7 -0
  6. package/dist/components/compatibility-card.d.ts +9 -0
  7. package/dist/components/compatibility-card.d.ts.map +1 -0
  8. package/dist/components/compatibility-card.js +65 -0
  9. package/dist/components/compatibility-card.js.map +7 -0
  10. package/dist/components/dasha-timeline.d.ts +9 -0
  11. package/dist/components/dasha-timeline.d.ts.map +1 -0
  12. package/dist/components/dasha-timeline.js +65 -0
  13. package/dist/components/dasha-timeline.js.map +7 -0
  14. package/dist/components/data.d.ts +9 -0
  15. package/dist/components/data.d.ts.map +1 -0
  16. package/dist/components/data.js +65 -0
  17. package/dist/components/data.js.map +7 -0
  18. package/dist/components/dosha-card.d.ts +9 -0
  19. package/dist/components/dosha-card.d.ts.map +1 -0
  20. package/dist/components/dosha-card.js +65 -0
  21. package/dist/components/dosha-card.js.map +7 -0
  22. package/dist/components/endpoint-form.d.ts +9 -0
  23. package/dist/components/endpoint-form.d.ts.map +1 -0
  24. package/dist/components/endpoint-form.js +65 -0
  25. package/dist/components/endpoint-form.js.map +7 -0
  26. package/dist/components/guna-milan.d.ts +9 -0
  27. package/dist/components/guna-milan.d.ts.map +1 -0
  28. package/dist/components/guna-milan.js +65 -0
  29. package/dist/components/guna-milan.js.map +7 -0
  30. package/dist/components/hexagram.d.ts +9 -0
  31. package/dist/components/hexagram.d.ts.map +1 -0
  32. package/dist/components/hexagram.js +65 -0
  33. package/dist/components/hexagram.js.map +7 -0
  34. package/dist/components/horoscope-card.d.ts +9 -0
  35. package/dist/components/horoscope-card.d.ts.map +1 -0
  36. package/dist/components/horoscope-card.js +65 -0
  37. package/dist/components/horoscope-card.js.map +7 -0
  38. package/dist/components/kp-planets-table.d.ts +9 -0
  39. package/dist/components/kp-planets-table.d.ts.map +1 -0
  40. package/dist/components/kp-planets-table.js +65 -0
  41. package/dist/components/kp-planets-table.js.map +7 -0
  42. package/dist/components/location-search.d.ts +9 -0
  43. package/dist/components/location-search.d.ts.map +1 -0
  44. package/dist/components/location-search.js +65 -0
  45. package/dist/components/location-search.js.map +7 -0
  46. package/dist/components/moon-phase.d.ts +9 -0
  47. package/dist/components/moon-phase.d.ts.map +1 -0
  48. package/dist/components/moon-phase.js +65 -0
  49. package/dist/components/moon-phase.js.map +7 -0
  50. package/dist/components/natal-chart.d.ts +9 -0
  51. package/dist/components/natal-chart.d.ts.map +1 -0
  52. package/dist/components/natal-chart.js +65 -0
  53. package/dist/components/natal-chart.js.map +7 -0
  54. package/dist/components/numerology-card.d.ts +9 -0
  55. package/dist/components/numerology-card.d.ts.map +1 -0
  56. package/dist/components/numerology-card.js +65 -0
  57. package/dist/components/numerology-card.js.map +7 -0
  58. package/dist/components/panchang-table.d.ts +9 -0
  59. package/dist/components/panchang-table.d.ts.map +1 -0
  60. package/dist/components/panchang-table.js +65 -0
  61. package/dist/components/panchang-table.js.map +7 -0
  62. package/dist/components/synastry-chart.d.ts +9 -0
  63. package/dist/components/synastry-chart.d.ts.map +1 -0
  64. package/dist/components/synastry-chart.js +65 -0
  65. package/dist/components/synastry-chart.js.map +7 -0
  66. package/dist/components/tarot-card.d.ts +9 -0
  67. package/dist/components/tarot-card.d.ts.map +1 -0
  68. package/dist/components/tarot-card.js +65 -0
  69. package/dist/components/tarot-card.js.map +7 -0
  70. package/dist/components/tarot-spread.d.ts +9 -0
  71. package/dist/components/tarot-spread.d.ts.map +1 -0
  72. package/dist/components/tarot-spread.js +65 -0
  73. package/dist/components/tarot-spread.js.map +7 -0
  74. package/dist/components/vedic-kundli.d.ts +9 -0
  75. package/dist/components/vedic-kundli.d.ts.map +1 -0
  76. package/dist/components/vedic-kundli.js +65 -0
  77. package/dist/components/vedic-kundli.js.map +7 -0
  78. package/dist/index.cjs +565 -0
  79. package/dist/index.cjs.map +7 -0
  80. package/dist/index.d.ts +21 -0
  81. package/dist/index.d.ts.map +1 -0
  82. package/dist/index.js +532 -0
  83. package/dist/index.js.map +7 -0
  84. package/dist/load-ui.d.ts +2 -0
  85. package/dist/load-ui.d.ts.map +1 -0
  86. package/dist/load-ui.js +38 -0
  87. package/dist/load-ui.js.map +7 -0
  88. package/package.json +47 -3
  89. package/src/components/biorhythm-chart.d.ts +12 -0
  90. package/src/components/biorhythm-chart.d.ts.map +1 -0
  91. package/src/components/biorhythm-chart.tsx +35 -0
  92. package/src/components/compatibility-card.d.ts +12 -0
  93. package/src/components/compatibility-card.d.ts.map +1 -0
  94. package/src/components/compatibility-card.tsx +35 -0
  95. package/src/components/dasha-timeline.d.ts +12 -0
  96. package/src/components/dasha-timeline.d.ts.map +1 -0
  97. package/src/components/dasha-timeline.tsx +35 -0
  98. package/src/components/data.d.ts +11 -0
  99. package/src/components/data.d.ts.map +1 -0
  100. package/src/components/data.tsx +35 -0
  101. package/src/components/dosha-card.d.ts +12 -0
  102. package/src/components/dosha-card.d.ts.map +1 -0
  103. package/src/components/dosha-card.tsx +35 -0
  104. package/src/components/endpoint-form.d.ts +12 -0
  105. package/src/components/endpoint-form.d.ts.map +1 -0
  106. package/src/components/endpoint-form.tsx +35 -0
  107. package/src/components/guna-milan.d.ts +12 -0
  108. package/src/components/guna-milan.d.ts.map +1 -0
  109. package/src/components/guna-milan.tsx +35 -0
  110. package/src/components/hexagram.d.ts +12 -0
  111. package/src/components/hexagram.d.ts.map +1 -0
  112. package/src/components/hexagram.tsx +35 -0
  113. package/src/components/horoscope-card.d.ts +12 -0
  114. package/src/components/horoscope-card.d.ts.map +1 -0
  115. package/src/components/horoscope-card.tsx +35 -0
  116. package/src/components/kp-planets-table.d.ts +12 -0
  117. package/src/components/kp-planets-table.d.ts.map +1 -0
  118. package/src/components/kp-planets-table.tsx +35 -0
  119. package/src/components/location-search.d.ts +12 -0
  120. package/src/components/location-search.d.ts.map +1 -0
  121. package/src/components/location-search.tsx +35 -0
  122. package/src/components/moon-phase.d.ts +12 -0
  123. package/src/components/moon-phase.d.ts.map +1 -0
  124. package/src/components/moon-phase.tsx +35 -0
  125. package/src/components/natal-chart.d.ts +12 -0
  126. package/src/components/natal-chart.d.ts.map +1 -0
  127. package/src/components/natal-chart.tsx +35 -0
  128. package/src/components/numerology-card.d.ts +12 -0
  129. package/src/components/numerology-card.d.ts.map +1 -0
  130. package/src/components/numerology-card.tsx +35 -0
  131. package/src/components/panchang-table.d.ts +12 -0
  132. package/src/components/panchang-table.d.ts.map +1 -0
  133. package/src/components/panchang-table.tsx +35 -0
  134. package/src/components/synastry-chart.d.ts +12 -0
  135. package/src/components/synastry-chart.d.ts.map +1 -0
  136. package/src/components/synastry-chart.tsx +35 -0
  137. package/src/components/tarot-card.d.ts +12 -0
  138. package/src/components/tarot-card.d.ts.map +1 -0
  139. package/src/components/tarot-card.tsx +35 -0
  140. package/src/components/tarot-spread.d.ts +12 -0
  141. package/src/components/tarot-spread.d.ts.map +1 -0
  142. package/src/components/tarot-spread.tsx +35 -0
  143. package/src/components/vedic-kundli.d.ts +12 -0
  144. package/src/components/vedic-kundli.d.ts.map +1 -0
  145. package/src/components/vedic-kundli.tsx +35 -0
  146. package/src/index.d.ts +21 -0
  147. package/src/index.d.ts.map +1 -0
  148. package/src/index.ts +20 -0
  149. package/src/load-ui.d.ts +2 -0
  150. package/src/load-ui.d.ts.map +1 -0
  151. package/src/load-ui.ts +41 -0
package/AGENTS.md ADDED
@@ -0,0 +1,169 @@
1
+ # AGENTS.md
2
+
3
+ This file teaches AI coding agents (Claude Code, Cursor, Copilot, Codex, Gemini CLI) how to use Roxy UI when integrating RoxyAPI into a project.
4
+
5
+ ## Identity
6
+
7
+ Roxy UI is the official web component library for the RoxyAPI catalog. Components and helpers cover Western astrology, Vedic astrology, numerology, tarot, biorhythm, I Ching, crystals, dreams, angel numbers, with the location helper for geocoding. New endpoints regenerate component types automatically.
8
+
9
+ ## Decision tree for picking a component
10
+
11
+ Use the table below. Match the user request against the endpoint, render the matching component.
12
+
13
+ <!-- BEGIN:COMPONENTS -->
14
+ | Element | Domain | Endpoint(s) | What it renders |
15
+ |---|---|---|---|
16
+ | `<roxy-natal-chart>` | Western | POST /astrology/natal-chart | Natal chart wheel with planet glyphs and aspect lines |
17
+ | `<roxy-horoscope-card>` | Western | GET /astrology/horoscope/{sign}/{daily,weekly,monthly} | Daily, weekly, or monthly horoscope card |
18
+ | `<roxy-synastry-chart>` | Western | POST /astrology/synastry | Dual-wheel synastry with inter-aspects table |
19
+ | `<roxy-compatibility-card>` | Cross | POST /astrology/compatibility-score, /numerology/compatibility, /biorhythm/compatibility | Score card with category breakdown |
20
+ | `<roxy-moon-phase>` | Western | GET /astrology/moon-phase/{current,upcoming,calendar/...} | Moon phase card and calendar |
21
+ | `<roxy-vedic-kundli>` | Vedic | POST /vedic-astrology/birth-chart | South or North Indian kundli |
22
+ | `<roxy-panchang-table>` | Vedic | POST /vedic-astrology/panchang/{basic,detailed} | 15+ muhurtas in detailed mode |
23
+ | `<roxy-dasha-timeline>` | Vedic | POST /vedic-astrology/dasha/{current,major,sub/...} | Vimshottari mahadasha + antardasha + pratyantardasha |
24
+ | `<roxy-dosha-card>` | Vedic | POST /vedic-astrology/dosha/{manglik,kalsarpa,sadhesati} | Presence, severity, remedies, scoped effects |
25
+ | `<roxy-guna-milan>` | Vedic | POST /vedic-astrology/compatibility | 36-point Ashtakoota with eight sub-scores |
26
+ | `<roxy-kp-planets-table>` | Vedic (KP) | POST /vedic-astrology/kp/planets | Sub-lord and sub-sub-lord columns |
27
+ | `<roxy-numerology-card>` | Numerology | POST /numerology/{life-path,expression,personal-year,chart} | Life path, expression, personal year, full chart |
28
+ | `<roxy-tarot-card>` | Tarot | GET /tarot/cards/{id}, POST /tarot/daily | Single card with upright and reversed flip |
29
+ | `<roxy-tarot-spread>` | Tarot | POST /tarot/spreads/{three-card,celtic-cross,love}, /tarot/yes-no, /tarot/draw | Spreads with positions and reading |
30
+ | `<roxy-biorhythm-chart>` | Biorhythm | POST /biorhythm/{daily,forecast,critical-days} | Daily bars, forecast cycle lines, critical days |
31
+ | `<roxy-hexagram>` | I Ching | GET /iching/hexagrams/{number}, /iching/cast, POST /iching/daily, /iching/daily/cast | Hexagram with trigrams, judgment, image, changing lines |
32
+ | `<roxy-endpoint-form>` | Helper | Any endpoint via x-roxy-ui hints | Schema-driven form, emits roxy-submit |
33
+ | `<roxy-location-search>` | Helper | GET /location/search | Debounced city search input, emits roxy-location-select |
34
+ | `<roxy-data>` | Helper | Any response shape | Generic fallback renderer for unknown shapes |
35
+ <!-- END:COMPONENTS -->
36
+
37
+ ## Integration patterns
38
+
39
+ ### Pattern 1: vanilla HTML, no build step
40
+
41
+ ```html
42
+ <script
43
+ src="https://cdn.jsdelivr.net/npm/@roxyapi/ui@1/dist/cdn/roxy-ui.js"
44
+ crossorigin="anonymous"
45
+ ></script>
46
+
47
+ <roxy-natal-chart id="chart"></roxy-natal-chart>
48
+
49
+ <script type="module">
50
+ const res = await fetch('https://roxyapi.com/api/v2/astrology/natal-chart', {
51
+ method: 'POST',
52
+ headers: { 'Content-Type': 'application/json', 'X-API-Key': 'roxy_xxx' },
53
+ body: JSON.stringify({
54
+ date: '1990-01-15',
55
+ time: '14:30:00',
56
+ latitude: 28.6139,
57
+ longitude: 77.209,
58
+ timezone: 5.5,
59
+ }),
60
+ });
61
+ const data = await res.json();
62
+ document.getElementById('chart').data = data;
63
+ </script>
64
+ ```
65
+
66
+ ### Pattern 2: React, with the typed SDK
67
+
68
+ ```tsx
69
+ import { createRoxy } from '@roxyapi/sdk';
70
+ import { RoxyNatalChart, RoxyLocationSearch } from '@roxyapi/ui-react';
71
+ import { useState } from 'react';
72
+
73
+ const roxy = createRoxy(process.env.NEXT_PUBLIC_ROXY_API_KEY!);
74
+
75
+ export function BirthChartView() {
76
+ const [chart, setChart] = useState(null);
77
+
78
+ const onLocationSelect = async (e: CustomEvent<{ latitude: number; longitude: number; timezone: string }>) => {
79
+ const { data } = await roxy.astrology.generateNatalChart({
80
+ body: { date: '1990-01-15', time: '14:30:00', ...e.detail },
81
+ });
82
+ setChart(data);
83
+ };
84
+
85
+ return (
86
+ <div>
87
+ <RoxyLocationSearch onroxy-location-select={onLocationSelect} />
88
+ {chart && <RoxyNatalChart data={chart} />}
89
+ </div>
90
+ );
91
+ }
92
+ ```
93
+
94
+ ### Pattern 3: schema-driven form
95
+
96
+ `<roxy-endpoint-form>` reads the OpenAPI spec and renders the inputs for any endpoint. Listen for the `roxy-submit` event with the validated payload.
97
+
98
+ ```html
99
+ <roxy-endpoint-form
100
+ data-endpoint="vedic-astrology/birth-chart"
101
+ method="POST"
102
+ submit-label="Generate kundli"
103
+ ></roxy-endpoint-form>
104
+
105
+ <script type="module">
106
+ const form = document.querySelector('roxy-endpoint-form');
107
+ form.addEventListener('roxy-submit', async (e) => {
108
+ const { endpoint, values } = e.detail;
109
+ const res = await fetch(`https://roxyapi.com/api/v2/${endpoint}`, {
110
+ method: 'POST',
111
+ headers: { 'Content-Type': 'application/json', 'X-API-Key': 'roxy_xxx' },
112
+ body: JSON.stringify(values),
113
+ });
114
+ const kundli = await res.json();
115
+ document.querySelector('roxy-vedic-kundli').data = kundli;
116
+ });
117
+ </script>
118
+ ```
119
+
120
+ ### Pattern 4: widgets auto-mount (no JavaScript wiring)
121
+
122
+ Use the publishable key flow for vibecoder embeds.
123
+
124
+ ```html
125
+ <script
126
+ src="https://cdn.jsdelivr.net/npm/@roxyapi/ui@1/dist/cdn/widgets.js"
127
+ defer
128
+ ></script>
129
+
130
+ <div
131
+ data-roxy-widget="natal-chart"
132
+ data-publishable-key="pk_live_xxx"
133
+ data-date="1990-01-15"
134
+ data-time="14:30:00"
135
+ data-latitude="28.6139"
136
+ data-longitude="77.209"
137
+ data-timezone="5.5"
138
+ ></div>
139
+ ```
140
+
141
+ The auto-mount script reads `data-*` attributes, calls the matching endpoint, and renders the matching component.
142
+
143
+ ## Rules every agent must follow
144
+
145
+ - Always call `/location/search` first before any chart endpoint that takes latitude, longitude, or timezone. Use `<roxy-location-search>` for the input UI.
146
+ - Pass the response object directly. Components are stateless; they do not fetch internally except for `<roxy-location-search>`, `<roxy-endpoint-form>`, and the widgets auto-mount script.
147
+ - Use the typed SDK from `@roxyapi/sdk` so prop shapes match the spec automatically.
148
+ - Theming is CSS custom properties on `:root` or per element. Do not write Tailwind classes inside the components; the shadow DOM ignores them.
149
+ - Honor reduced motion. The library already respects `prefers-reduced-motion: reduce` and the `--roxy-motion-duration` variable.
150
+ - A11y violations are CI failures. Do not paste over `role` or `aria-*` attributes; the components emit them correctly already.
151
+
152
+ ## Domain ordering
153
+
154
+ When listing domains in user-visible copy, use the canonical order: Western astrology, Vedic astrology, numerology, tarot, biorhythm, I Ching, crystals, dreams, angel numbers. Location is utility, not a selling domain.
155
+
156
+ ## What not to ship
157
+
158
+ - Do not bundle `@roxyapi/ui` and `@roxyapi/ui-react` together; they are decoupled by design.
159
+ - Use `@roxyapi/ui-react` for React projects. Use `@roxyapi/ui` directly elsewhere.
160
+ - Do not write your own kundli component. The lifted layout in `<roxy-vedic-kundli>` is the canonical RoxyAPI render path.
161
+ - Do not call astrology endpoints with hardcoded coordinates. Always geocode first via `<roxy-location-search>` or `roxy.location.searchCities()`.
162
+
163
+ ## Where to look next
164
+
165
+ - Component source: `packages/ui/src/components/`
166
+ - Sample data for every component: `apps/docs/sample-data.js`
167
+ - Token reference: `packages/ui/THEMING.md`
168
+ - Live preview: `bun run preview` then open `http://localhost:3001`
169
+ - Money endpoints reference: see the RoxyAPI methodology page at `roxyapi.com/methodology`
@@ -0,0 +1,9 @@
1
+ import * as React from 'react';
2
+ type DivAttrs = React.HTMLAttributes<HTMLElement>;
3
+ export interface RoxyBiorhythmChartProps extends Omit<DivAttrs, 'children' | 'onSelect'> {
4
+ data?: unknown;
5
+ [attr: string]: unknown;
6
+ }
7
+ export declare const RoxyBiorhythmChart: React.ForwardRefExoticComponent<Omit<RoxyBiorhythmChartProps, "ref"> & React.RefAttributes<HTMLElement>>;
8
+ export {};
9
+ //# sourceMappingURL=biorhythm-chart.d.ts.map
@@ -0,0 +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;AAG/B,KAAK,QAAQ,GAAG,KAAK,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC;AAElD,MAAM,WAAW,uBAAwB,SAAQ,IAAI,CAAC,QAAQ,EAAE,UAAU,GAAG,UAAU,CAAC;IACvF,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,eAAO,MAAM,kBAAkB,0GAwB9B,CAAC"}
@@ -0,0 +1,65 @@
1
+ // packages/ui-react/src/components/biorhythm-chart.tsx
2
+ import * as React from "react";
3
+
4
+ // packages/ui-react/src/load-ui.ts
5
+ var SCRIPT_ID = "roxyapi-ui-loader";
6
+ var CDN_BASE = "https://cdn.jsdelivr.net/npm/@roxyapi/ui@0/dist/cdn";
7
+ var loaded = null;
8
+ function ensureScriptLoaded(version = "0.1.0") {
9
+ if (typeof document === "undefined") return Promise.resolve();
10
+ if (loaded) return loaded;
11
+ loaded = new Promise((resolve, reject) => {
12
+ const major = version.split(".")[0];
13
+ const url = `${CDN_BASE.replace("@0", "@" + major)}/roxy-ui.js`;
14
+ let existing = document.getElementById(SCRIPT_ID);
15
+ if (existing) {
16
+ if (existing.dataset.loaded === "true") {
17
+ resolve();
18
+ } else {
19
+ existing.addEventListener("load", () => resolve());
20
+ existing.addEventListener("error", () => reject(new Error("roxy-ui load failed")));
21
+ }
22
+ return;
23
+ }
24
+ existing = document.createElement("script");
25
+ existing.id = SCRIPT_ID;
26
+ existing.src = url;
27
+ existing.async = true;
28
+ existing.crossOrigin = "anonymous";
29
+ existing.addEventListener("load", () => {
30
+ existing.dataset.loaded = "true";
31
+ resolve();
32
+ });
33
+ existing.addEventListener("error", () => reject(new Error("roxy-ui load failed")));
34
+ document.head.appendChild(existing);
35
+ });
36
+ return loaded;
37
+ }
38
+
39
+ // packages/ui-react/src/components/biorhythm-chart.tsx
40
+ var RoxyBiorhythmChart = React.forwardRef(
41
+ function RoxyBiorhythmChart2({ data, ...rest }, ref) {
42
+ const internal = React.useRef(null);
43
+ React.useImperativeHandle(ref, () => internal.current);
44
+ const [loaded2, setLoaded] = React.useState(false);
45
+ React.useEffect(() => {
46
+ let active = true;
47
+ ensureScriptLoaded().then(() => {
48
+ if (active) setLoaded(true);
49
+ });
50
+ return () => {
51
+ active = false;
52
+ };
53
+ }, []);
54
+ React.useEffect(() => {
55
+ if (internal.current && data !== void 0) {
56
+ internal.current.data = data;
57
+ }
58
+ }, [data, loaded2]);
59
+ return React.createElement("roxy-biorhythm-chart", { ref: internal, ...rest });
60
+ }
61
+ );
62
+ export {
63
+ RoxyBiorhythmChart
64
+ };
65
+ //# sourceMappingURL=biorhythm-chart.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/components/biorhythm-chart.tsx", "../../src/load-ui.ts"],
4
+ "sourcesContent": ["import * as React from 'react';\nimport { ensureScriptLoaded } from '../load-ui.js';\n\ntype DivAttrs = React.HTMLAttributes<HTMLElement>;\n\nexport interface RoxyBiorhythmChartProps extends Omit<DivAttrs, 'children' | 'onSelect'> {\n\tdata?: unknown;\n\t[attr: string]: unknown;\n}\n\nexport const RoxyBiorhythmChart = React.forwardRef<HTMLElement, RoxyBiorhythmChartProps>(\n\tfunction RoxyBiorhythmChart({ data, ...rest }, ref) {\n\t\tconst internal = React.useRef<HTMLElement | null>(null);\n\t\tReact.useImperativeHandle(ref, () => internal.current as HTMLElement);\n\t\tconst [loaded, setLoaded] = React.useState(false);\n\n\t\tReact.useEffect(() => {\n\t\t\tlet active = true;\n\t\t\tensureScriptLoaded().then(() => {\n\t\t\t\tif (active) setLoaded(true);\n\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\tif (internal.current && data !== undefined) {\n\t\t\t\t(internal.current as unknown as { data: unknown }).data = data;\n\t\t\t}\n\t\t}, [data, loaded]);\n\n\t\treturn React.createElement('roxy-biorhythm-chart', { ref: internal, ...rest });\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 */\nconst SCRIPT_ID = 'roxyapi-ui-loader';\nconst CDN_BASE = \"https://cdn.jsdelivr.net/npm/@roxyapi/ui@0/dist/cdn\";\n\nlet loaded: Promise<void> | null = null;\n\nexport function ensureScriptLoaded(version: string = '0.1.0'): 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 major = version.split('.')[0];\n\t\tconst url = `${CDN_BASE.replace('@0', '@' + major)}/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"],
5
+ "mappings": ";AAAA,YAAY,WAAW;;;ACKvB,IAAM,YAAY;AAClB,IAAM,WAAW;AAEjB,IAAI,SAA+B;AAE5B,SAAS,mBAAmB,UAAkB,SAAwB;AAC5E,MAAI,OAAO,aAAa,YAAa,QAAO,QAAQ,QAAQ;AAC5D,MAAI,OAAQ,QAAO;AAEnB,WAAS,IAAI,QAAc,CAAC,SAAS,WAAW;AAC/C,UAAM,QAAQ,QAAQ,MAAM,GAAG,EAAE,CAAC;AAClC,UAAM,MAAM,GAAG,SAAS,QAAQ,MAAM,MAAM,KAAK,CAAC;AAClD,QAAI,WAAW,SAAS,eAAe,SAAS;AAChD,QAAI,UAAU;AACb,UAAI,SAAS,QAAQ,WAAW,QAAQ;AACvC,gBAAQ;AAAA,MACT,OAAO;AACN,iBAAS,iBAAiB,QAAQ,MAAM,QAAQ,CAAC;AACjD,iBAAS,iBAAiB,SAAS,MAAM,OAAO,IAAI,MAAM,qBAAqB,CAAC,CAAC;AAAA,MAClF;AACA;AAAA,IACD;AACA,eAAW,SAAS,cAAc,QAAQ;AAC1C,aAAS,KAAK;AACd,aAAS,MAAM;AACf,aAAS,QAAQ;AACjB,aAAS,cAAc;AACvB,aAAS,iBAAiB,QAAQ,MAAM;AACvC,eAAU,QAAQ,SAAS;AAC3B,cAAQ;AAAA,IACT,CAAC;AACD,aAAS,iBAAiB,SAAS,MAAM,OAAO,IAAI,MAAM,qBAAqB,CAAC,CAAC;AACjF,aAAS,KAAK,YAAY,QAAQ;AAAA,EACnC,CAAC;AACD,SAAO;AACR;;;AD9BO,IAAM,qBAA2B;AAAA,EACvC,SAASA,oBAAmB,EAAE,MAAM,GAAG,KAAK,GAAG,KAAK;AACnD,UAAM,WAAiB,aAA2B,IAAI;AACtD,IAAM,0BAAoB,KAAK,MAAM,SAAS,OAAsB;AACpE,UAAM,CAACC,SAAQ,SAAS,IAAU,eAAS,KAAK;AAEhD,IAAM,gBAAU,MAAM;AACrB,UAAI,SAAS;AACb,yBAAmB,EAAE,KAAK,MAAM;AAC/B,YAAI,OAAQ,WAAU,IAAI;AAAA,MAC3B,CAAC;AACD,aAAO,MAAM;AACZ,iBAAS;AAAA,MACV;AAAA,IACD,GAAG,CAAC,CAAC;AAEL,IAAM,gBAAU,MAAM;AACrB,UAAI,SAAS,WAAW,SAAS,QAAW;AAC3C,QAAC,SAAS,QAAyC,OAAO;AAAA,MAC3D;AAAA,IACD,GAAG,CAAC,MAAMA,OAAM,CAAC;AAEjB,WAAa,oBAAc,wBAAwB,EAAE,KAAK,UAAU,GAAG,KAAK,CAAC;AAAA,EAC9E;AACD;",
6
+ "names": ["RoxyBiorhythmChart", "loaded"]
7
+ }
@@ -0,0 +1,9 @@
1
+ import * as React from 'react';
2
+ type DivAttrs = React.HTMLAttributes<HTMLElement>;
3
+ export interface RoxyCompatibilityCardProps extends Omit<DivAttrs, 'children' | 'onSelect'> {
4
+ data?: unknown;
5
+ [attr: string]: unknown;
6
+ }
7
+ export declare const RoxyCompatibilityCard: React.ForwardRefExoticComponent<Omit<RoxyCompatibilityCardProps, "ref"> & React.RefAttributes<HTMLElement>>;
8
+ export {};
9
+ //# sourceMappingURL=compatibility-card.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compatibility-card.d.ts","sourceRoot":"","sources":["../../src/components/compatibility-card.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAG/B,KAAK,QAAQ,GAAG,KAAK,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC;AAElD,MAAM,WAAW,0BAA2B,SAAQ,IAAI,CAAC,QAAQ,EAAE,UAAU,GAAG,UAAU,CAAC;IAC1F,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,eAAO,MAAM,qBAAqB,6GAwBjC,CAAC"}
@@ -0,0 +1,65 @@
1
+ // packages/ui-react/src/components/compatibility-card.tsx
2
+ import * as React from "react";
3
+
4
+ // packages/ui-react/src/load-ui.ts
5
+ var SCRIPT_ID = "roxyapi-ui-loader";
6
+ var CDN_BASE = "https://cdn.jsdelivr.net/npm/@roxyapi/ui@0/dist/cdn";
7
+ var loaded = null;
8
+ function ensureScriptLoaded(version = "0.1.0") {
9
+ if (typeof document === "undefined") return Promise.resolve();
10
+ if (loaded) return loaded;
11
+ loaded = new Promise((resolve, reject) => {
12
+ const major = version.split(".")[0];
13
+ const url = `${CDN_BASE.replace("@0", "@" + major)}/roxy-ui.js`;
14
+ let existing = document.getElementById(SCRIPT_ID);
15
+ if (existing) {
16
+ if (existing.dataset.loaded === "true") {
17
+ resolve();
18
+ } else {
19
+ existing.addEventListener("load", () => resolve());
20
+ existing.addEventListener("error", () => reject(new Error("roxy-ui load failed")));
21
+ }
22
+ return;
23
+ }
24
+ existing = document.createElement("script");
25
+ existing.id = SCRIPT_ID;
26
+ existing.src = url;
27
+ existing.async = true;
28
+ existing.crossOrigin = "anonymous";
29
+ existing.addEventListener("load", () => {
30
+ existing.dataset.loaded = "true";
31
+ resolve();
32
+ });
33
+ existing.addEventListener("error", () => reject(new Error("roxy-ui load failed")));
34
+ document.head.appendChild(existing);
35
+ });
36
+ return loaded;
37
+ }
38
+
39
+ // packages/ui-react/src/components/compatibility-card.tsx
40
+ var RoxyCompatibilityCard = React.forwardRef(
41
+ function RoxyCompatibilityCard2({ data, ...rest }, ref) {
42
+ const internal = React.useRef(null);
43
+ React.useImperativeHandle(ref, () => internal.current);
44
+ const [loaded2, setLoaded] = React.useState(false);
45
+ React.useEffect(() => {
46
+ let active = true;
47
+ ensureScriptLoaded().then(() => {
48
+ if (active) setLoaded(true);
49
+ });
50
+ return () => {
51
+ active = false;
52
+ };
53
+ }, []);
54
+ React.useEffect(() => {
55
+ if (internal.current && data !== void 0) {
56
+ internal.current.data = data;
57
+ }
58
+ }, [data, loaded2]);
59
+ return React.createElement("roxy-compatibility-card", { ref: internal, ...rest });
60
+ }
61
+ );
62
+ export {
63
+ RoxyCompatibilityCard
64
+ };
65
+ //# sourceMappingURL=compatibility-card.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/components/compatibility-card.tsx", "../../src/load-ui.ts"],
4
+ "sourcesContent": ["import * as React from 'react';\nimport { ensureScriptLoaded } from '../load-ui.js';\n\ntype DivAttrs = React.HTMLAttributes<HTMLElement>;\n\nexport interface RoxyCompatibilityCardProps extends Omit<DivAttrs, 'children' | 'onSelect'> {\n\tdata?: unknown;\n\t[attr: string]: unknown;\n}\n\nexport const RoxyCompatibilityCard = React.forwardRef<HTMLElement, RoxyCompatibilityCardProps>(\n\tfunction RoxyCompatibilityCard({ data, ...rest }, ref) {\n\t\tconst internal = React.useRef<HTMLElement | null>(null);\n\t\tReact.useImperativeHandle(ref, () => internal.current as HTMLElement);\n\t\tconst [loaded, setLoaded] = React.useState(false);\n\n\t\tReact.useEffect(() => {\n\t\t\tlet active = true;\n\t\t\tensureScriptLoaded().then(() => {\n\t\t\t\tif (active) setLoaded(true);\n\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\tif (internal.current && data !== undefined) {\n\t\t\t\t(internal.current as unknown as { data: unknown }).data = data;\n\t\t\t}\n\t\t}, [data, loaded]);\n\n\t\treturn React.createElement('roxy-compatibility-card', { ref: internal, ...rest });\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 */\nconst SCRIPT_ID = 'roxyapi-ui-loader';\nconst CDN_BASE = \"https://cdn.jsdelivr.net/npm/@roxyapi/ui@0/dist/cdn\";\n\nlet loaded: Promise<void> | null = null;\n\nexport function ensureScriptLoaded(version: string = '0.1.0'): 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 major = version.split('.')[0];\n\t\tconst url = `${CDN_BASE.replace('@0', '@' + major)}/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"],
5
+ "mappings": ";AAAA,YAAY,WAAW;;;ACKvB,IAAM,YAAY;AAClB,IAAM,WAAW;AAEjB,IAAI,SAA+B;AAE5B,SAAS,mBAAmB,UAAkB,SAAwB;AAC5E,MAAI,OAAO,aAAa,YAAa,QAAO,QAAQ,QAAQ;AAC5D,MAAI,OAAQ,QAAO;AAEnB,WAAS,IAAI,QAAc,CAAC,SAAS,WAAW;AAC/C,UAAM,QAAQ,QAAQ,MAAM,GAAG,EAAE,CAAC;AAClC,UAAM,MAAM,GAAG,SAAS,QAAQ,MAAM,MAAM,KAAK,CAAC;AAClD,QAAI,WAAW,SAAS,eAAe,SAAS;AAChD,QAAI,UAAU;AACb,UAAI,SAAS,QAAQ,WAAW,QAAQ;AACvC,gBAAQ;AAAA,MACT,OAAO;AACN,iBAAS,iBAAiB,QAAQ,MAAM,QAAQ,CAAC;AACjD,iBAAS,iBAAiB,SAAS,MAAM,OAAO,IAAI,MAAM,qBAAqB,CAAC,CAAC;AAAA,MAClF;AACA;AAAA,IACD;AACA,eAAW,SAAS,cAAc,QAAQ;AAC1C,aAAS,KAAK;AACd,aAAS,MAAM;AACf,aAAS,QAAQ;AACjB,aAAS,cAAc;AACvB,aAAS,iBAAiB,QAAQ,MAAM;AACvC,eAAU,QAAQ,SAAS;AAC3B,cAAQ;AAAA,IACT,CAAC;AACD,aAAS,iBAAiB,SAAS,MAAM,OAAO,IAAI,MAAM,qBAAqB,CAAC,CAAC;AACjF,aAAS,KAAK,YAAY,QAAQ;AAAA,EACnC,CAAC;AACD,SAAO;AACR;;;AD9BO,IAAM,wBAA8B;AAAA,EAC1C,SAASA,uBAAsB,EAAE,MAAM,GAAG,KAAK,GAAG,KAAK;AACtD,UAAM,WAAiB,aAA2B,IAAI;AACtD,IAAM,0BAAoB,KAAK,MAAM,SAAS,OAAsB;AACpE,UAAM,CAACC,SAAQ,SAAS,IAAU,eAAS,KAAK;AAEhD,IAAM,gBAAU,MAAM;AACrB,UAAI,SAAS;AACb,yBAAmB,EAAE,KAAK,MAAM;AAC/B,YAAI,OAAQ,WAAU,IAAI;AAAA,MAC3B,CAAC;AACD,aAAO,MAAM;AACZ,iBAAS;AAAA,MACV;AAAA,IACD,GAAG,CAAC,CAAC;AAEL,IAAM,gBAAU,MAAM;AACrB,UAAI,SAAS,WAAW,SAAS,QAAW;AAC3C,QAAC,SAAS,QAAyC,OAAO;AAAA,MAC3D;AAAA,IACD,GAAG,CAAC,MAAMA,OAAM,CAAC;AAEjB,WAAa,oBAAc,2BAA2B,EAAE,KAAK,UAAU,GAAG,KAAK,CAAC;AAAA,EACjF;AACD;",
6
+ "names": ["RoxyCompatibilityCard", "loaded"]
7
+ }
@@ -0,0 +1,9 @@
1
+ import * as React from 'react';
2
+ type DivAttrs = React.HTMLAttributes<HTMLElement>;
3
+ export interface RoxyDashaTimelineProps extends Omit<DivAttrs, 'children' | 'onSelect'> {
4
+ data?: unknown;
5
+ [attr: string]: unknown;
6
+ }
7
+ export declare const RoxyDashaTimeline: React.ForwardRefExoticComponent<Omit<RoxyDashaTimelineProps, "ref"> & React.RefAttributes<HTMLElement>>;
8
+ export {};
9
+ //# sourceMappingURL=dasha-timeline.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dasha-timeline.d.ts","sourceRoot":"","sources":["../../src/components/dasha-timeline.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAG/B,KAAK,QAAQ,GAAG,KAAK,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC;AAElD,MAAM,WAAW,sBAAuB,SAAQ,IAAI,CAAC,QAAQ,EAAE,UAAU,GAAG,UAAU,CAAC;IACtF,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,eAAO,MAAM,iBAAiB,yGAwB7B,CAAC"}
@@ -0,0 +1,65 @@
1
+ // packages/ui-react/src/components/dasha-timeline.tsx
2
+ import * as React from "react";
3
+
4
+ // packages/ui-react/src/load-ui.ts
5
+ var SCRIPT_ID = "roxyapi-ui-loader";
6
+ var CDN_BASE = "https://cdn.jsdelivr.net/npm/@roxyapi/ui@0/dist/cdn";
7
+ var loaded = null;
8
+ function ensureScriptLoaded(version = "0.1.0") {
9
+ if (typeof document === "undefined") return Promise.resolve();
10
+ if (loaded) return loaded;
11
+ loaded = new Promise((resolve, reject) => {
12
+ const major = version.split(".")[0];
13
+ const url = `${CDN_BASE.replace("@0", "@" + major)}/roxy-ui.js`;
14
+ let existing = document.getElementById(SCRIPT_ID);
15
+ if (existing) {
16
+ if (existing.dataset.loaded === "true") {
17
+ resolve();
18
+ } else {
19
+ existing.addEventListener("load", () => resolve());
20
+ existing.addEventListener("error", () => reject(new Error("roxy-ui load failed")));
21
+ }
22
+ return;
23
+ }
24
+ existing = document.createElement("script");
25
+ existing.id = SCRIPT_ID;
26
+ existing.src = url;
27
+ existing.async = true;
28
+ existing.crossOrigin = "anonymous";
29
+ existing.addEventListener("load", () => {
30
+ existing.dataset.loaded = "true";
31
+ resolve();
32
+ });
33
+ existing.addEventListener("error", () => reject(new Error("roxy-ui load failed")));
34
+ document.head.appendChild(existing);
35
+ });
36
+ return loaded;
37
+ }
38
+
39
+ // packages/ui-react/src/components/dasha-timeline.tsx
40
+ var RoxyDashaTimeline = React.forwardRef(
41
+ function RoxyDashaTimeline2({ data, ...rest }, ref) {
42
+ const internal = React.useRef(null);
43
+ React.useImperativeHandle(ref, () => internal.current);
44
+ const [loaded2, setLoaded] = React.useState(false);
45
+ React.useEffect(() => {
46
+ let active = true;
47
+ ensureScriptLoaded().then(() => {
48
+ if (active) setLoaded(true);
49
+ });
50
+ return () => {
51
+ active = false;
52
+ };
53
+ }, []);
54
+ React.useEffect(() => {
55
+ if (internal.current && data !== void 0) {
56
+ internal.current.data = data;
57
+ }
58
+ }, [data, loaded2]);
59
+ return React.createElement("roxy-dasha-timeline", { ref: internal, ...rest });
60
+ }
61
+ );
62
+ export {
63
+ RoxyDashaTimeline
64
+ };
65
+ //# sourceMappingURL=dasha-timeline.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/components/dasha-timeline.tsx", "../../src/load-ui.ts"],
4
+ "sourcesContent": ["import * as React from 'react';\nimport { ensureScriptLoaded } from '../load-ui.js';\n\ntype DivAttrs = React.HTMLAttributes<HTMLElement>;\n\nexport interface RoxyDashaTimelineProps extends Omit<DivAttrs, 'children' | 'onSelect'> {\n\tdata?: unknown;\n\t[attr: string]: unknown;\n}\n\nexport const RoxyDashaTimeline = React.forwardRef<HTMLElement, RoxyDashaTimelineProps>(\n\tfunction RoxyDashaTimeline({ data, ...rest }, ref) {\n\t\tconst internal = React.useRef<HTMLElement | null>(null);\n\t\tReact.useImperativeHandle(ref, () => internal.current as HTMLElement);\n\t\tconst [loaded, setLoaded] = React.useState(false);\n\n\t\tReact.useEffect(() => {\n\t\t\tlet active = true;\n\t\t\tensureScriptLoaded().then(() => {\n\t\t\t\tif (active) setLoaded(true);\n\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\tif (internal.current && data !== undefined) {\n\t\t\t\t(internal.current as unknown as { data: unknown }).data = data;\n\t\t\t}\n\t\t}, [data, loaded]);\n\n\t\treturn React.createElement('roxy-dasha-timeline', { ref: internal, ...rest });\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 */\nconst SCRIPT_ID = 'roxyapi-ui-loader';\nconst CDN_BASE = \"https://cdn.jsdelivr.net/npm/@roxyapi/ui@0/dist/cdn\";\n\nlet loaded: Promise<void> | null = null;\n\nexport function ensureScriptLoaded(version: string = '0.1.0'): 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 major = version.split('.')[0];\n\t\tconst url = `${CDN_BASE.replace('@0', '@' + major)}/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"],
5
+ "mappings": ";AAAA,YAAY,WAAW;;;ACKvB,IAAM,YAAY;AAClB,IAAM,WAAW;AAEjB,IAAI,SAA+B;AAE5B,SAAS,mBAAmB,UAAkB,SAAwB;AAC5E,MAAI,OAAO,aAAa,YAAa,QAAO,QAAQ,QAAQ;AAC5D,MAAI,OAAQ,QAAO;AAEnB,WAAS,IAAI,QAAc,CAAC,SAAS,WAAW;AAC/C,UAAM,QAAQ,QAAQ,MAAM,GAAG,EAAE,CAAC;AAClC,UAAM,MAAM,GAAG,SAAS,QAAQ,MAAM,MAAM,KAAK,CAAC;AAClD,QAAI,WAAW,SAAS,eAAe,SAAS;AAChD,QAAI,UAAU;AACb,UAAI,SAAS,QAAQ,WAAW,QAAQ;AACvC,gBAAQ;AAAA,MACT,OAAO;AACN,iBAAS,iBAAiB,QAAQ,MAAM,QAAQ,CAAC;AACjD,iBAAS,iBAAiB,SAAS,MAAM,OAAO,IAAI,MAAM,qBAAqB,CAAC,CAAC;AAAA,MAClF;AACA;AAAA,IACD;AACA,eAAW,SAAS,cAAc,QAAQ;AAC1C,aAAS,KAAK;AACd,aAAS,MAAM;AACf,aAAS,QAAQ;AACjB,aAAS,cAAc;AACvB,aAAS,iBAAiB,QAAQ,MAAM;AACvC,eAAU,QAAQ,SAAS;AAC3B,cAAQ;AAAA,IACT,CAAC;AACD,aAAS,iBAAiB,SAAS,MAAM,OAAO,IAAI,MAAM,qBAAqB,CAAC,CAAC;AACjF,aAAS,KAAK,YAAY,QAAQ;AAAA,EACnC,CAAC;AACD,SAAO;AACR;;;AD9BO,IAAM,oBAA0B;AAAA,EACtC,SAASA,mBAAkB,EAAE,MAAM,GAAG,KAAK,GAAG,KAAK;AAClD,UAAM,WAAiB,aAA2B,IAAI;AACtD,IAAM,0BAAoB,KAAK,MAAM,SAAS,OAAsB;AACpE,UAAM,CAACC,SAAQ,SAAS,IAAU,eAAS,KAAK;AAEhD,IAAM,gBAAU,MAAM;AACrB,UAAI,SAAS;AACb,yBAAmB,EAAE,KAAK,MAAM;AAC/B,YAAI,OAAQ,WAAU,IAAI;AAAA,MAC3B,CAAC;AACD,aAAO,MAAM;AACZ,iBAAS;AAAA,MACV;AAAA,IACD,GAAG,CAAC,CAAC;AAEL,IAAM,gBAAU,MAAM;AACrB,UAAI,SAAS,WAAW,SAAS,QAAW;AAC3C,QAAC,SAAS,QAAyC,OAAO;AAAA,MAC3D;AAAA,IACD,GAAG,CAAC,MAAMA,OAAM,CAAC;AAEjB,WAAa,oBAAc,uBAAuB,EAAE,KAAK,UAAU,GAAG,KAAK,CAAC;AAAA,EAC7E;AACD;",
6
+ "names": ["RoxyDashaTimeline", "loaded"]
7
+ }
@@ -0,0 +1,9 @@
1
+ import * as React from 'react';
2
+ type DivAttrs = React.HTMLAttributes<HTMLElement>;
3
+ export interface RoxyDataProps extends Omit<DivAttrs, 'children' | 'onSelect'> {
4
+ data?: unknown;
5
+ [attr: string]: unknown;
6
+ }
7
+ export declare const RoxyData: React.ForwardRefExoticComponent<Omit<RoxyDataProps, "ref"> & React.RefAttributes<HTMLElement>>;
8
+ export {};
9
+ //# sourceMappingURL=data.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"data.d.ts","sourceRoot":"","sources":["../../src/components/data.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAG/B,KAAK,QAAQ,GAAG,KAAK,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC;AAElD,MAAM,WAAW,aAAc,SAAQ,IAAI,CAAC,QAAQ,EAAE,UAAU,GAAG,UAAU,CAAC;IAC7E,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,eAAO,MAAM,QAAQ,gGAwBpB,CAAC"}
@@ -0,0 +1,65 @@
1
+ // packages/ui-react/src/components/data.tsx
2
+ import * as React from "react";
3
+
4
+ // packages/ui-react/src/load-ui.ts
5
+ var SCRIPT_ID = "roxyapi-ui-loader";
6
+ var CDN_BASE = "https://cdn.jsdelivr.net/npm/@roxyapi/ui@0/dist/cdn";
7
+ var loaded = null;
8
+ function ensureScriptLoaded(version = "0.1.0") {
9
+ if (typeof document === "undefined") return Promise.resolve();
10
+ if (loaded) return loaded;
11
+ loaded = new Promise((resolve, reject) => {
12
+ const major = version.split(".")[0];
13
+ const url = `${CDN_BASE.replace("@0", "@" + major)}/roxy-ui.js`;
14
+ let existing = document.getElementById(SCRIPT_ID);
15
+ if (existing) {
16
+ if (existing.dataset.loaded === "true") {
17
+ resolve();
18
+ } else {
19
+ existing.addEventListener("load", () => resolve());
20
+ existing.addEventListener("error", () => reject(new Error("roxy-ui load failed")));
21
+ }
22
+ return;
23
+ }
24
+ existing = document.createElement("script");
25
+ existing.id = SCRIPT_ID;
26
+ existing.src = url;
27
+ existing.async = true;
28
+ existing.crossOrigin = "anonymous";
29
+ existing.addEventListener("load", () => {
30
+ existing.dataset.loaded = "true";
31
+ resolve();
32
+ });
33
+ existing.addEventListener("error", () => reject(new Error("roxy-ui load failed")));
34
+ document.head.appendChild(existing);
35
+ });
36
+ return loaded;
37
+ }
38
+
39
+ // packages/ui-react/src/components/data.tsx
40
+ var RoxyData = React.forwardRef(
41
+ function RoxyData2({ data, ...rest }, ref) {
42
+ const internal = React.useRef(null);
43
+ React.useImperativeHandle(ref, () => internal.current);
44
+ const [loaded2, setLoaded] = React.useState(false);
45
+ React.useEffect(() => {
46
+ let active = true;
47
+ ensureScriptLoaded().then(() => {
48
+ if (active) setLoaded(true);
49
+ });
50
+ return () => {
51
+ active = false;
52
+ };
53
+ }, []);
54
+ React.useEffect(() => {
55
+ if (internal.current && data !== void 0) {
56
+ internal.current.data = data;
57
+ }
58
+ }, [data, loaded2]);
59
+ return React.createElement("roxy-data", { ref: internal, ...rest });
60
+ }
61
+ );
62
+ export {
63
+ RoxyData
64
+ };
65
+ //# sourceMappingURL=data.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/components/data.tsx", "../../src/load-ui.ts"],
4
+ "sourcesContent": ["import * as React from 'react';\nimport { ensureScriptLoaded } from '../load-ui.js';\n\ntype DivAttrs = React.HTMLAttributes<HTMLElement>;\n\nexport interface RoxyDataProps extends Omit<DivAttrs, 'children' | 'onSelect'> {\n\tdata?: unknown;\n\t[attr: string]: unknown;\n}\n\nexport const RoxyData = React.forwardRef<HTMLElement, RoxyDataProps>(\n\tfunction RoxyData({ data, ...rest }, ref) {\n\t\tconst internal = React.useRef<HTMLElement | null>(null);\n\t\tReact.useImperativeHandle(ref, () => internal.current as HTMLElement);\n\t\tconst [loaded, setLoaded] = React.useState(false);\n\n\t\tReact.useEffect(() => {\n\t\t\tlet active = true;\n\t\t\tensureScriptLoaded().then(() => {\n\t\t\t\tif (active) setLoaded(true);\n\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\tif (internal.current && data !== undefined) {\n\t\t\t\t(internal.current as unknown as { data: unknown }).data = data;\n\t\t\t}\n\t\t}, [data, loaded]);\n\n\t\treturn React.createElement('roxy-data', { ref: internal, ...rest });\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 */\nconst SCRIPT_ID = 'roxyapi-ui-loader';\nconst CDN_BASE = \"https://cdn.jsdelivr.net/npm/@roxyapi/ui@0/dist/cdn\";\n\nlet loaded: Promise<void> | null = null;\n\nexport function ensureScriptLoaded(version: string = '0.1.0'): 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 major = version.split('.')[0];\n\t\tconst url = `${CDN_BASE.replace('@0', '@' + major)}/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"],
5
+ "mappings": ";AAAA,YAAY,WAAW;;;ACKvB,IAAM,YAAY;AAClB,IAAM,WAAW;AAEjB,IAAI,SAA+B;AAE5B,SAAS,mBAAmB,UAAkB,SAAwB;AAC5E,MAAI,OAAO,aAAa,YAAa,QAAO,QAAQ,QAAQ;AAC5D,MAAI,OAAQ,QAAO;AAEnB,WAAS,IAAI,QAAc,CAAC,SAAS,WAAW;AAC/C,UAAM,QAAQ,QAAQ,MAAM,GAAG,EAAE,CAAC;AAClC,UAAM,MAAM,GAAG,SAAS,QAAQ,MAAM,MAAM,KAAK,CAAC;AAClD,QAAI,WAAW,SAAS,eAAe,SAAS;AAChD,QAAI,UAAU;AACb,UAAI,SAAS,QAAQ,WAAW,QAAQ;AACvC,gBAAQ;AAAA,MACT,OAAO;AACN,iBAAS,iBAAiB,QAAQ,MAAM,QAAQ,CAAC;AACjD,iBAAS,iBAAiB,SAAS,MAAM,OAAO,IAAI,MAAM,qBAAqB,CAAC,CAAC;AAAA,MAClF;AACA;AAAA,IACD;AACA,eAAW,SAAS,cAAc,QAAQ;AAC1C,aAAS,KAAK;AACd,aAAS,MAAM;AACf,aAAS,QAAQ;AACjB,aAAS,cAAc;AACvB,aAAS,iBAAiB,QAAQ,MAAM;AACvC,eAAU,QAAQ,SAAS;AAC3B,cAAQ;AAAA,IACT,CAAC;AACD,aAAS,iBAAiB,SAAS,MAAM,OAAO,IAAI,MAAM,qBAAqB,CAAC,CAAC;AACjF,aAAS,KAAK,YAAY,QAAQ;AAAA,EACnC,CAAC;AACD,SAAO;AACR;;;AD9BO,IAAM,WAAiB;AAAA,EAC7B,SAASA,UAAS,EAAE,MAAM,GAAG,KAAK,GAAG,KAAK;AACzC,UAAM,WAAiB,aAA2B,IAAI;AACtD,IAAM,0BAAoB,KAAK,MAAM,SAAS,OAAsB;AACpE,UAAM,CAACC,SAAQ,SAAS,IAAU,eAAS,KAAK;AAEhD,IAAM,gBAAU,MAAM;AACrB,UAAI,SAAS;AACb,yBAAmB,EAAE,KAAK,MAAM;AAC/B,YAAI,OAAQ,WAAU,IAAI;AAAA,MAC3B,CAAC;AACD,aAAO,MAAM;AACZ,iBAAS;AAAA,MACV;AAAA,IACD,GAAG,CAAC,CAAC;AAEL,IAAM,gBAAU,MAAM;AACrB,UAAI,SAAS,WAAW,SAAS,QAAW;AAC3C,QAAC,SAAS,QAAyC,OAAO;AAAA,MAC3D;AAAA,IACD,GAAG,CAAC,MAAMA,OAAM,CAAC;AAEjB,WAAa,oBAAc,aAAa,EAAE,KAAK,UAAU,GAAG,KAAK,CAAC;AAAA,EACnE;AACD;",
6
+ "names": ["RoxyData", "loaded"]
7
+ }
@@ -0,0 +1,9 @@
1
+ import * as React from 'react';
2
+ type DivAttrs = React.HTMLAttributes<HTMLElement>;
3
+ export interface RoxyDoshaCardProps extends Omit<DivAttrs, 'children' | 'onSelect'> {
4
+ data?: unknown;
5
+ [attr: string]: unknown;
6
+ }
7
+ export declare const RoxyDoshaCard: React.ForwardRefExoticComponent<Omit<RoxyDoshaCardProps, "ref"> & React.RefAttributes<HTMLElement>>;
8
+ export {};
9
+ //# sourceMappingURL=dosha-card.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dosha-card.d.ts","sourceRoot":"","sources":["../../src/components/dosha-card.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAG/B,KAAK,QAAQ,GAAG,KAAK,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC;AAElD,MAAM,WAAW,kBAAmB,SAAQ,IAAI,CAAC,QAAQ,EAAE,UAAU,GAAG,UAAU,CAAC;IAClF,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,eAAO,MAAM,aAAa,qGAwBzB,CAAC"}
@@ -0,0 +1,65 @@
1
+ // packages/ui-react/src/components/dosha-card.tsx
2
+ import * as React from "react";
3
+
4
+ // packages/ui-react/src/load-ui.ts
5
+ var SCRIPT_ID = "roxyapi-ui-loader";
6
+ var CDN_BASE = "https://cdn.jsdelivr.net/npm/@roxyapi/ui@0/dist/cdn";
7
+ var loaded = null;
8
+ function ensureScriptLoaded(version = "0.1.0") {
9
+ if (typeof document === "undefined") return Promise.resolve();
10
+ if (loaded) return loaded;
11
+ loaded = new Promise((resolve, reject) => {
12
+ const major = version.split(".")[0];
13
+ const url = `${CDN_BASE.replace("@0", "@" + major)}/roxy-ui.js`;
14
+ let existing = document.getElementById(SCRIPT_ID);
15
+ if (existing) {
16
+ if (existing.dataset.loaded === "true") {
17
+ resolve();
18
+ } else {
19
+ existing.addEventListener("load", () => resolve());
20
+ existing.addEventListener("error", () => reject(new Error("roxy-ui load failed")));
21
+ }
22
+ return;
23
+ }
24
+ existing = document.createElement("script");
25
+ existing.id = SCRIPT_ID;
26
+ existing.src = url;
27
+ existing.async = true;
28
+ existing.crossOrigin = "anonymous";
29
+ existing.addEventListener("load", () => {
30
+ existing.dataset.loaded = "true";
31
+ resolve();
32
+ });
33
+ existing.addEventListener("error", () => reject(new Error("roxy-ui load failed")));
34
+ document.head.appendChild(existing);
35
+ });
36
+ return loaded;
37
+ }
38
+
39
+ // packages/ui-react/src/components/dosha-card.tsx
40
+ var RoxyDoshaCard = React.forwardRef(
41
+ function RoxyDoshaCard2({ data, ...rest }, ref) {
42
+ const internal = React.useRef(null);
43
+ React.useImperativeHandle(ref, () => internal.current);
44
+ const [loaded2, setLoaded] = React.useState(false);
45
+ React.useEffect(() => {
46
+ let active = true;
47
+ ensureScriptLoaded().then(() => {
48
+ if (active) setLoaded(true);
49
+ });
50
+ return () => {
51
+ active = false;
52
+ };
53
+ }, []);
54
+ React.useEffect(() => {
55
+ if (internal.current && data !== void 0) {
56
+ internal.current.data = data;
57
+ }
58
+ }, [data, loaded2]);
59
+ return React.createElement("roxy-dosha-card", { ref: internal, ...rest });
60
+ }
61
+ );
62
+ export {
63
+ RoxyDoshaCard
64
+ };
65
+ //# sourceMappingURL=dosha-card.js.map