@roxyapi/ui-react 0.4.1 → 0.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/AGENTS.md +21 -0
- package/README.md +17 -1
- package/dist/components/ashtakavarga-grid.js +1 -90
- package/dist/components/ashtakavarga-grid.js.map +3 -3
- package/dist/components/biorhythm-chart.js +1 -90
- package/dist/components/biorhythm-chart.js.map +3 -3
- package/dist/components/choghadiya-grid.js +1 -90
- package/dist/components/choghadiya-grid.js.map +3 -3
- package/dist/components/compatibility-card.js +1 -90
- package/dist/components/compatibility-card.js.map +3 -3
- package/dist/components/dasha-timeline.js +1 -90
- package/dist/components/dasha-timeline.js.map +3 -3
- package/dist/components/data.js +1 -84
- package/dist/components/data.js.map +3 -3
- package/dist/components/divisional-chart.js +1 -90
- package/dist/components/divisional-chart.js.map +3 -3
- package/dist/components/dosha-card.js +1 -90
- package/dist/components/dosha-card.js.map +3 -3
- package/dist/components/endpoint-form.js +1 -108
- package/dist/components/endpoint-form.js.map +3 -3
- package/dist/components/guna-milan.js +1 -90
- package/dist/components/guna-milan.js.map +3 -3
- package/dist/components/hexagram.js +1 -90
- package/dist/components/hexagram.js.map +3 -3
- package/dist/components/horoscope-card.js +1 -90
- package/dist/components/horoscope-card.js.map +3 -3
- package/dist/components/kp-chart.js +1 -90
- package/dist/components/kp-chart.js.map +3 -3
- package/dist/components/kp-planets-table.js +1 -90
- package/dist/components/kp-planets-table.js.map +3 -3
- package/dist/components/kp-ruling-planets.js +1 -90
- package/dist/components/kp-ruling-planets.js.map +3 -3
- package/dist/components/location-search.js +1 -100
- package/dist/components/location-search.js.map +3 -3
- package/dist/components/moon-phase.js +1 -90
- package/dist/components/moon-phase.js.map +3 -3
- package/dist/components/nakshatra-card.js +1 -90
- package/dist/components/nakshatra-card.js.map +3 -3
- package/dist/components/natal-chart.js +1 -90
- package/dist/components/natal-chart.js.map +3 -3
- package/dist/components/numerology-card.js +1 -90
- package/dist/components/numerology-card.js.map +3 -3
- package/dist/components/panchang-table.js +1 -90
- package/dist/components/panchang-table.js.map +3 -3
- package/dist/components/shadbala-table.js +1 -90
- package/dist/components/shadbala-table.js.map +3 -3
- package/dist/components/synastry-chart.js +1 -90
- package/dist/components/synastry-chart.js.map +3 -3
- package/dist/components/tarot-card.js +1 -90
- package/dist/components/tarot-card.js.map +3 -3
- package/dist/components/tarot-spread.js +1 -90
- package/dist/components/tarot-spread.js.map +3 -3
- package/dist/components/transits-table.js +1 -90
- package/dist/components/transits-table.js.map +3 -3
- package/dist/components/vedic-kundli.js +1 -90
- package/dist/components/vedic-kundli.js.map +3 -3
- package/dist/components/vedic-planets-table.js +1 -90
- package/dist/components/vedic-planets-table.js.map +3 -3
- package/dist/components/western-planets-table.js +1 -90
- package/dist/components/western-planets-table.js.map +3 -3
- package/dist/components/yoga-list.js +1 -90
- package/dist/components/yoga-list.js.map +3 -3
- package/dist/index.cjs +1 -1509
- package/dist/index.cjs.map +3 -3
- package/dist/index.js +1 -1476
- package/dist/index.js.map +3 -3
- package/dist/load-ui.d.ts +1 -1
- package/dist/load-ui.js +1 -46
- package/dist/load-ui.js.map +3 -3
- package/package.json +1 -1
package/AGENTS.md
CHANGED
|
@@ -320,6 +320,27 @@ export default function BirthChartView({ data }: { data: unknown }) {
|
|
|
320
320
|
}
|
|
321
321
|
```
|
|
322
322
|
|
|
323
|
+
### Pattern 7: server-rendered markup (WordPress, JSX SSR, static HTML)
|
|
324
|
+
|
|
325
|
+
When the page is rendered on the server or served from cache, there may be no JavaScript to set the `data` property per element. Render the response into a child `<script type="application/json" class="roxy-data">` instead. The component reads the embedded JSON on load. No per-element script, no API key in the browser.
|
|
326
|
+
|
|
327
|
+
```html
|
|
328
|
+
<roxy-natal-chart>
|
|
329
|
+
<script type="application/json" class="roxy-data">
|
|
330
|
+
{ "planets": [ ], "houses": [ ], "aspects": [ ] }
|
|
331
|
+
</script>
|
|
332
|
+
</roxy-natal-chart>
|
|
333
|
+
```
|
|
334
|
+
|
|
335
|
+
Rules for this pattern:
|
|
336
|
+
|
|
337
|
+
- The JSON must be the unwrapped RoxyAPI response, the same shape you would assign to `element.data`. Do not embed the SDK envelope (`{ data, error, request, response }`); embed `data`.
|
|
338
|
+
- The script must be a direct child of the component and carry both `type="application/json"` and `class="roxy-data"`.
|
|
339
|
+
- The JavaScript property always wins. If you assign `element.data` in script, the markup is ignored. One component covers both server-rendered and dynamic pages with no branching.
|
|
340
|
+
- You can nest a server-rendered HTML fallback inside the same element for no-JavaScript and crawler views. The component reads only the marked script and leaves the fallback in place.
|
|
341
|
+
|
|
342
|
+
This is how the WordPress plugin renders: PHP fetches the response server-side, caches it, and writes the script into the page. The same shape works in any framework that emits HTML.
|
|
343
|
+
|
|
323
344
|
## Theming and dark mode
|
|
324
345
|
|
|
325
346
|
Components react to three signals in priority order. No events to dispatch. No JS bridge to write.
|
package/README.md
CHANGED
|
@@ -275,6 +275,22 @@ Always call `/location/search` first. Every chart endpoint expects latitude, lon
|
|
|
275
275
|
|
|
276
276
|
> **Timezone format.** RoxyAPI accepts both forms: a decimal-hour offset (`5.5` for IST, `-5` for EST) or an IANA name (`'Asia/Kolkata'`, `'America/New_York'`). Pick one and stay consistent. The decimal form is shorter and what `/location/search` returns; examples on this page use it. The IANA form is correct over DST boundaries when historical accuracy matters.
|
|
277
277
|
|
|
278
|
+
## Server-rendered, no JavaScript wiring
|
|
279
|
+
|
|
280
|
+
Server-rendered and cached pages (WordPress, JSX SSR, static HTML) cannot always run JavaScript to set the `data` property per element. Render the response into a child `<script type="application/json" class="roxy-data">` on the server instead. The component reads it on load. No per-element script, no API key in the browser.
|
|
281
|
+
|
|
282
|
+
```html
|
|
283
|
+
<roxy-natal-chart>
|
|
284
|
+
<script type="application/json" class="roxy-data">
|
|
285
|
+
{ "planets": [ ... ], "houses": [ ... ], "aspects": [ ... ] }
|
|
286
|
+
</script>
|
|
287
|
+
</roxy-natal-chart>
|
|
288
|
+
```
|
|
289
|
+
|
|
290
|
+
The component picks up the embedded JSON when no `data` property has been set. The JavaScript property always wins: assign `element.data` and the markup is ignored, so dynamic pages and server-rendered pages share one component with no branching. You can nest a server-rendered HTML fallback inside the same element for no-JavaScript and crawler views; the component leaves it untouched and reads only the marked script.
|
|
291
|
+
|
|
292
|
+
This is how the WordPress plugin renders: PHP fetches the response server-side, caches it, and embeds it in the page. The same shape works in any framework that emits HTML.
|
|
293
|
+
|
|
278
294
|
## Most-used components per domain
|
|
279
295
|
|
|
280
296
|
The highest-demand components by domain, in the order you are most likely to ship them. Each pairing shows the SDK call that returns the response shape the component renders. Spec change in the API translates to typed change at the component boundary; the pairing below is derived from the live OpenAPI spec, not invented. Full catalog in the [Components](#components) table.
|
|
@@ -606,7 +622,7 @@ Persist the choice in `localStorage` from your own code; the components do not o
|
|
|
606
622
|
<details>
|
|
607
623
|
<summary><strong>How big is each component? What is the bundle cost?</strong></summary>
|
|
608
624
|
|
|
609
|
-
Per-component bundles run
|
|
625
|
+
Per-component bundles run 6-10 KB gzipped, capped at 30 KB by CI. The full bundle (every component, helpers, base styles) stays well under the 150 KB CI cap, around 45 KB gzipped today. The React package loads the runtime on mount, so a route that renders one chart pays for one component, not the whole catalog. Pin a concrete version in production for byte-stable cache hits.
|
|
610
626
|
</details>
|
|
611
627
|
|
|
612
628
|
<details>
|
|
@@ -1,91 +1,2 @@
|
|
|
1
|
-
|
|
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_LATEST = "https://cdn.jsdelivr.net/npm/@roxyapi/ui@latest/dist/cdn";
|
|
7
|
-
var CDN_BASE_PREFIX = "https://cdn.jsdelivr.net/npm/@roxyapi/ui@";
|
|
8
|
-
var CDN_BASE_SUFFIX = "/dist/cdn";
|
|
9
|
-
var loaded = null;
|
|
10
|
-
function buildBase(version) {
|
|
11
|
-
if (!version || version === "latest") return CDN_BASE_LATEST;
|
|
12
|
-
return `${CDN_BASE_PREFIX}${version}${CDN_BASE_SUFFIX}`;
|
|
13
|
-
}
|
|
14
|
-
function ensureScriptLoaded(version = "latest") {
|
|
15
|
-
if (typeof document === "undefined") return Promise.resolve();
|
|
16
|
-
if (loaded) return loaded;
|
|
17
|
-
loaded = new Promise((resolve, reject) => {
|
|
18
|
-
const url = `${buildBase(version)}/roxy-ui.js`;
|
|
19
|
-
let existing = document.getElementById(SCRIPT_ID);
|
|
20
|
-
if (existing) {
|
|
21
|
-
if (existing.dataset.loaded === "true") {
|
|
22
|
-
resolve();
|
|
23
|
-
} else {
|
|
24
|
-
existing.addEventListener("load", () => resolve());
|
|
25
|
-
existing.addEventListener("error", () => reject(new Error("roxy-ui load failed")));
|
|
26
|
-
}
|
|
27
|
-
return;
|
|
28
|
-
}
|
|
29
|
-
existing = document.createElement("script");
|
|
30
|
-
existing.id = SCRIPT_ID;
|
|
31
|
-
existing.src = url;
|
|
32
|
-
existing.async = true;
|
|
33
|
-
existing.crossOrigin = "anonymous";
|
|
34
|
-
existing.addEventListener("load", () => {
|
|
35
|
-
existing.dataset.loaded = "true";
|
|
36
|
-
resolve();
|
|
37
|
-
});
|
|
38
|
-
existing.addEventListener("error", () => reject(new Error("roxy-ui load failed")));
|
|
39
|
-
document.head.appendChild(existing);
|
|
40
|
-
});
|
|
41
|
-
return loaded;
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
// packages/ui-react/src/components/ashtakavarga-grid.tsx
|
|
45
|
-
var RoxyAshtakavargaGrid = React.forwardRef(
|
|
46
|
-
function RoxyAshtakavargaGrid2({ data, className, style, ...rest }, ref) {
|
|
47
|
-
const internal = React.useRef(null);
|
|
48
|
-
React.useImperativeHandle(
|
|
49
|
-
ref,
|
|
50
|
-
() => internal.current,
|
|
51
|
-
[]
|
|
52
|
-
);
|
|
53
|
-
const [loaded2, setLoaded] = React.useState(false);
|
|
54
|
-
const [error, setError] = React.useState(null);
|
|
55
|
-
React.useEffect(() => {
|
|
56
|
-
let active = true;
|
|
57
|
-
ensureScriptLoaded().then(() => {
|
|
58
|
-
if (active) setLoaded(true);
|
|
59
|
-
}).catch((err) => {
|
|
60
|
-
if (!active) return;
|
|
61
|
-
setError(err instanceof Error ? err : new Error(String(err)));
|
|
62
|
-
});
|
|
63
|
-
return () => {
|
|
64
|
-
active = false;
|
|
65
|
-
};
|
|
66
|
-
}, []);
|
|
67
|
-
React.useEffect(() => {
|
|
68
|
-
const el = internal.current;
|
|
69
|
-
if (el && data !== void 0) {
|
|
70
|
-
el.data = data;
|
|
71
|
-
}
|
|
72
|
-
}, [data, loaded2]);
|
|
73
|
-
if (error) {
|
|
74
|
-
return React.createElement(
|
|
75
|
-
"div",
|
|
76
|
-
{ role: "alert", className, style },
|
|
77
|
-
`Roxy UI script load failed: ${error.message}`
|
|
78
|
-
);
|
|
79
|
-
}
|
|
80
|
-
return React.createElement("roxy-ashtakavarga-grid", {
|
|
81
|
-
ref: internal,
|
|
82
|
-
className,
|
|
83
|
-
style,
|
|
84
|
-
...rest
|
|
85
|
-
});
|
|
86
|
-
}
|
|
87
|
-
);
|
|
88
|
-
export {
|
|
89
|
-
RoxyAshtakavargaGrid
|
|
90
|
-
};
|
|
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};
|
|
91
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.
|
|
5
|
-
"mappings": "
|
|
6
|
-
"names": ["RoxyAshtakavargaGrid", "loaded"]
|
|
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.6.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"]
|
|
7
7
|
}
|
|
@@ -1,91 +1,2 @@
|
|
|
1
|
-
|
|
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_LATEST = "https://cdn.jsdelivr.net/npm/@roxyapi/ui@latest/dist/cdn";
|
|
7
|
-
var CDN_BASE_PREFIX = "https://cdn.jsdelivr.net/npm/@roxyapi/ui@";
|
|
8
|
-
var CDN_BASE_SUFFIX = "/dist/cdn";
|
|
9
|
-
var loaded = null;
|
|
10
|
-
function buildBase(version) {
|
|
11
|
-
if (!version || version === "latest") return CDN_BASE_LATEST;
|
|
12
|
-
return `${CDN_BASE_PREFIX}${version}${CDN_BASE_SUFFIX}`;
|
|
13
|
-
}
|
|
14
|
-
function ensureScriptLoaded(version = "latest") {
|
|
15
|
-
if (typeof document === "undefined") return Promise.resolve();
|
|
16
|
-
if (loaded) return loaded;
|
|
17
|
-
loaded = new Promise((resolve, reject) => {
|
|
18
|
-
const url = `${buildBase(version)}/roxy-ui.js`;
|
|
19
|
-
let existing = document.getElementById(SCRIPT_ID);
|
|
20
|
-
if (existing) {
|
|
21
|
-
if (existing.dataset.loaded === "true") {
|
|
22
|
-
resolve();
|
|
23
|
-
} else {
|
|
24
|
-
existing.addEventListener("load", () => resolve());
|
|
25
|
-
existing.addEventListener("error", () => reject(new Error("roxy-ui load failed")));
|
|
26
|
-
}
|
|
27
|
-
return;
|
|
28
|
-
}
|
|
29
|
-
existing = document.createElement("script");
|
|
30
|
-
existing.id = SCRIPT_ID;
|
|
31
|
-
existing.src = url;
|
|
32
|
-
existing.async = true;
|
|
33
|
-
existing.crossOrigin = "anonymous";
|
|
34
|
-
existing.addEventListener("load", () => {
|
|
35
|
-
existing.dataset.loaded = "true";
|
|
36
|
-
resolve();
|
|
37
|
-
});
|
|
38
|
-
existing.addEventListener("error", () => reject(new Error("roxy-ui load failed")));
|
|
39
|
-
document.head.appendChild(existing);
|
|
40
|
-
});
|
|
41
|
-
return loaded;
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
// packages/ui-react/src/components/biorhythm-chart.tsx
|
|
45
|
-
var RoxyBiorhythmChart = React.forwardRef(
|
|
46
|
-
function RoxyBiorhythmChart2({ data, className, style, ...rest }, ref) {
|
|
47
|
-
const internal = React.useRef(null);
|
|
48
|
-
React.useImperativeHandle(
|
|
49
|
-
ref,
|
|
50
|
-
() => internal.current,
|
|
51
|
-
[]
|
|
52
|
-
);
|
|
53
|
-
const [loaded2, setLoaded] = React.useState(false);
|
|
54
|
-
const [error, setError] = React.useState(null);
|
|
55
|
-
React.useEffect(() => {
|
|
56
|
-
let active = true;
|
|
57
|
-
ensureScriptLoaded().then(() => {
|
|
58
|
-
if (active) setLoaded(true);
|
|
59
|
-
}).catch((err) => {
|
|
60
|
-
if (!active) return;
|
|
61
|
-
setError(err instanceof Error ? err : new Error(String(err)));
|
|
62
|
-
});
|
|
63
|
-
return () => {
|
|
64
|
-
active = false;
|
|
65
|
-
};
|
|
66
|
-
}, []);
|
|
67
|
-
React.useEffect(() => {
|
|
68
|
-
const el = internal.current;
|
|
69
|
-
if (el && data !== void 0) {
|
|
70
|
-
el.data = data;
|
|
71
|
-
}
|
|
72
|
-
}, [data, loaded2]);
|
|
73
|
-
if (error) {
|
|
74
|
-
return React.createElement(
|
|
75
|
-
"div",
|
|
76
|
-
{ role: "alert", className, style },
|
|
77
|
-
`Roxy UI script load failed: ${error.message}`
|
|
78
|
-
);
|
|
79
|
-
}
|
|
80
|
-
return React.createElement("roxy-biorhythm-chart", {
|
|
81
|
-
ref: internal,
|
|
82
|
-
className,
|
|
83
|
-
style,
|
|
84
|
-
...rest
|
|
85
|
-
});
|
|
86
|
-
}
|
|
87
|
-
);
|
|
88
|
-
export {
|
|
89
|
-
RoxyBiorhythmChart
|
|
90
|
-
};
|
|
1
|
+
import*as t from"react";var u="roxyapi-ui-loader",R="https://cdn.jsdelivr.net/npm/@roxyapi/ui@latest/dist/cdn",h="https://cdn.jsdelivr.net/npm/@roxyapi/ui@",x="/dist/cdn",i=null;function L(n){return!n||n==="latest"?R:`${h}${n}${x}`}function m(n="latest"){return typeof document>"u"?Promise.resolve():i||(i=new Promise((r,a)=>{let s=`${L(n)}/roxy-ui.js`,e=document.getElementById(u);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=u,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)}),i)}var B=t.forwardRef(function({data:r,className:a,style:s,...e},p){let l=t.useRef(null);t.useImperativeHandle(p,()=>l.current,[]);let[f,y]=t.useState(!1),[c,E]=t.useState(null);return t.useEffect(()=>{let o=!0;return m().then(()=>{o&&y(!0)}).catch(d=>{o&&E(d instanceof Error?d:new Error(String(d)))}),()=>{o=!1}},[]),t.useEffect(()=>{let o=l.current;o&&r!==void 0&&(o.data=r)},[r,f]),c?t.createElement("div",{role:"alert",className:a,style:s},`Roxy UI script load failed: ${c.message}`):t.createElement("roxy-biorhythm-chart",{ref:l,className:a,style:s,...e})});export{B as RoxyBiorhythmChart};
|
|
91
2
|
//# sourceMappingURL=biorhythm-chart.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
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';\nimport type { GetCriticalDaysResponse, GetDailyBiorhythmResponse, GetForecastResponse } from '@roxyapi/ui/types';\n\ntype ElementAttrs = Omit<\n\tReact.HTMLAttributes<HTMLElement>,\n\t'children' | 'data'\n>;\n\nexport interface RoxyBiorhythmChartProps extends ElementAttrs {\n\t/** Spec-derived response payload. Pass the raw RoxyAPI response. */\n\tdata?: GetDailyBiorhythmResponse | GetForecastResponse | GetCriticalDaysResponse;\n\tclassName?: string;\n\tstyle?: React.CSSProperties;\n\n}\n\nexport const RoxyBiorhythmChart = React.forwardRef<HTMLElement | null, RoxyBiorhythmChartProps>(\n\tfunction RoxyBiorhythmChart({ 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-biorhythm-chart', {\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.
|
|
5
|
-
"mappings": "
|
|
6
|
-
"names": ["RoxyBiorhythmChart", "loaded"]
|
|
4
|
+
"sourcesContent": ["import * as React from 'react';\nimport { ensureScriptLoaded } from '../load-ui.js';\nimport type { GetCriticalDaysResponse, GetDailyBiorhythmResponse, GetForecastResponse } from '@roxyapi/ui/types';\n\ntype ElementAttrs = Omit<\n\tReact.HTMLAttributes<HTMLElement>,\n\t'children' | 'data'\n>;\n\nexport interface RoxyBiorhythmChartProps extends ElementAttrs {\n\t/** Spec-derived response payload. Pass the raw RoxyAPI response. */\n\tdata?: GetDailyBiorhythmResponse | GetForecastResponse | GetCriticalDaysResponse;\n\tclassName?: string;\n\tstyle?: React.CSSProperties;\n\n}\n\nexport const RoxyBiorhythmChart = React.forwardRef<HTMLElement | null, RoxyBiorhythmChartProps>(\n\tfunction RoxyBiorhythmChart({ 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-biorhythm-chart', {\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.6.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,EAA2B,aACvC,SAA4B,CAAE,KAAAC,EAAM,UAAAC,EAAW,MAAAC,EAAO,GAAGC,CAAK,EAAGC,EAAK,CACrE,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,uBAAwB,CAClD,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", "RoxyBiorhythmChart", "data", "className", "style", "rest", "ref", "internal", "loaded", "setLoaded", "error", "setError", "active", "ensureScriptLoaded", "err", "el"]
|
|
7
7
|
}
|
|
@@ -1,91 +1,2 @@
|
|
|
1
|
-
|
|
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_LATEST = "https://cdn.jsdelivr.net/npm/@roxyapi/ui@latest/dist/cdn";
|
|
7
|
-
var CDN_BASE_PREFIX = "https://cdn.jsdelivr.net/npm/@roxyapi/ui@";
|
|
8
|
-
var CDN_BASE_SUFFIX = "/dist/cdn";
|
|
9
|
-
var loaded = null;
|
|
10
|
-
function buildBase(version) {
|
|
11
|
-
if (!version || version === "latest") return CDN_BASE_LATEST;
|
|
12
|
-
return `${CDN_BASE_PREFIX}${version}${CDN_BASE_SUFFIX}`;
|
|
13
|
-
}
|
|
14
|
-
function ensureScriptLoaded(version = "latest") {
|
|
15
|
-
if (typeof document === "undefined") return Promise.resolve();
|
|
16
|
-
if (loaded) return loaded;
|
|
17
|
-
loaded = new Promise((resolve, reject) => {
|
|
18
|
-
const url = `${buildBase(version)}/roxy-ui.js`;
|
|
19
|
-
let existing = document.getElementById(SCRIPT_ID);
|
|
20
|
-
if (existing) {
|
|
21
|
-
if (existing.dataset.loaded === "true") {
|
|
22
|
-
resolve();
|
|
23
|
-
} else {
|
|
24
|
-
existing.addEventListener("load", () => resolve());
|
|
25
|
-
existing.addEventListener("error", () => reject(new Error("roxy-ui load failed")));
|
|
26
|
-
}
|
|
27
|
-
return;
|
|
28
|
-
}
|
|
29
|
-
existing = document.createElement("script");
|
|
30
|
-
existing.id = SCRIPT_ID;
|
|
31
|
-
existing.src = url;
|
|
32
|
-
existing.async = true;
|
|
33
|
-
existing.crossOrigin = "anonymous";
|
|
34
|
-
existing.addEventListener("load", () => {
|
|
35
|
-
existing.dataset.loaded = "true";
|
|
36
|
-
resolve();
|
|
37
|
-
});
|
|
38
|
-
existing.addEventListener("error", () => reject(new Error("roxy-ui load failed")));
|
|
39
|
-
document.head.appendChild(existing);
|
|
40
|
-
});
|
|
41
|
-
return loaded;
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
// packages/ui-react/src/components/choghadiya-grid.tsx
|
|
45
|
-
var RoxyChoghadiyaGrid = React.forwardRef(
|
|
46
|
-
function RoxyChoghadiyaGrid2({ data, className, style, ...rest }, ref) {
|
|
47
|
-
const internal = React.useRef(null);
|
|
48
|
-
React.useImperativeHandle(
|
|
49
|
-
ref,
|
|
50
|
-
() => internal.current,
|
|
51
|
-
[]
|
|
52
|
-
);
|
|
53
|
-
const [loaded2, setLoaded] = React.useState(false);
|
|
54
|
-
const [error, setError] = React.useState(null);
|
|
55
|
-
React.useEffect(() => {
|
|
56
|
-
let active = true;
|
|
57
|
-
ensureScriptLoaded().then(() => {
|
|
58
|
-
if (active) setLoaded(true);
|
|
59
|
-
}).catch((err) => {
|
|
60
|
-
if (!active) return;
|
|
61
|
-
setError(err instanceof Error ? err : new Error(String(err)));
|
|
62
|
-
});
|
|
63
|
-
return () => {
|
|
64
|
-
active = false;
|
|
65
|
-
};
|
|
66
|
-
}, []);
|
|
67
|
-
React.useEffect(() => {
|
|
68
|
-
const el = internal.current;
|
|
69
|
-
if (el && data !== void 0) {
|
|
70
|
-
el.data = data;
|
|
71
|
-
}
|
|
72
|
-
}, [data, loaded2]);
|
|
73
|
-
if (error) {
|
|
74
|
-
return React.createElement(
|
|
75
|
-
"div",
|
|
76
|
-
{ role: "alert", className, style },
|
|
77
|
-
`Roxy UI script load failed: ${error.message}`
|
|
78
|
-
);
|
|
79
|
-
}
|
|
80
|
-
return React.createElement("roxy-choghadiya-grid", {
|
|
81
|
-
ref: internal,
|
|
82
|
-
className,
|
|
83
|
-
style,
|
|
84
|
-
...rest
|
|
85
|
-
});
|
|
86
|
-
}
|
|
87
|
-
);
|
|
88
|
-
export {
|
|
89
|
-
RoxyChoghadiyaGrid
|
|
90
|
-
};
|
|
1
|
+
import*as t from"react";var c="roxyapi-ui-loader",R="https://cdn.jsdelivr.net/npm/@roxyapi/ui@latest/dist/cdn",h="https://cdn.jsdelivr.net/npm/@roxyapi/ui@",x="/dist/cdn",d=null;function g(n){return!n||n==="latest"?R:`${h}${n}${x}`}function f(n="latest"){return typeof document>"u"?Promise.resolve():d||(d=new Promise((r,a)=>{let i=`${g(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=i,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)}),d)}var C=t.forwardRef(function({data:r,className:a,style:i,...e},p){let s=t.useRef(null);t.useImperativeHandle(p,()=>s.current,[]);let[m,E]=t.useState(!1),[u,y]=t.useState(null);return t.useEffect(()=>{let o=!0;return f().then(()=>{o&&E(!0)}).catch(l=>{o&&y(l instanceof Error?l:new Error(String(l)))}),()=>{o=!1}},[]),t.useEffect(()=>{let o=s.current;o&&r!==void 0&&(o.data=r)},[r,m]),u?t.createElement("div",{role:"alert",className:a,style:i},`Roxy UI script load failed: ${u.message}`):t.createElement("roxy-choghadiya-grid",{ref:s,className:a,style:i,...e})});export{C as RoxyChoghadiyaGrid};
|
|
91
2
|
//# sourceMappingURL=choghadiya-grid.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/components/choghadiya-grid.tsx", "../../src/load-ui.ts"],
|
|
4
|
-
"sourcesContent": ["import * as React from 'react';\nimport { ensureScriptLoaded } from '../load-ui.js';\nimport type { GetChoghadiyaResponse } from '@roxyapi/ui/types';\n\ntype ElementAttrs = Omit<\n\tReact.HTMLAttributes<HTMLElement>,\n\t'children' | 'data'\n>;\n\nexport interface RoxyChoghadiyaGridProps extends ElementAttrs {\n\t/** Spec-derived response payload. Pass the raw RoxyAPI response. */\n\tdata?: GetChoghadiyaResponse;\n\tclassName?: string;\n\tstyle?: React.CSSProperties;\n\n}\n\nexport const RoxyChoghadiyaGrid = React.forwardRef<HTMLElement | null, RoxyChoghadiyaGridProps>(\n\tfunction RoxyChoghadiyaGrid({ 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-choghadiya-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.
|
|
5
|
-
"mappings": "
|
|
6
|
-
"names": ["RoxyChoghadiyaGrid", "loaded"]
|
|
4
|
+
"sourcesContent": ["import * as React from 'react';\nimport { ensureScriptLoaded } from '../load-ui.js';\nimport type { GetChoghadiyaResponse } from '@roxyapi/ui/types';\n\ntype ElementAttrs = Omit<\n\tReact.HTMLAttributes<HTMLElement>,\n\t'children' | 'data'\n>;\n\nexport interface RoxyChoghadiyaGridProps extends ElementAttrs {\n\t/** Spec-derived response payload. Pass the raw RoxyAPI response. */\n\tdata?: GetChoghadiyaResponse;\n\tclassName?: string;\n\tstyle?: React.CSSProperties;\n\n}\n\nexport const RoxyChoghadiyaGrid = React.forwardRef<HTMLElement | null, RoxyChoghadiyaGridProps>(\n\tfunction RoxyChoghadiyaGrid({ 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-choghadiya-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.6.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,EAA2B,aACvC,SAA4B,CAAE,KAAAC,EAAM,UAAAC,EAAW,MAAAC,EAAO,GAAGC,CAAK,EAAGC,EAAK,CACrE,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,uBAAwB,CAClD,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", "RoxyChoghadiyaGrid", "data", "className", "style", "rest", "ref", "internal", "loaded", "setLoaded", "error", "setError", "active", "ensureScriptLoaded", "err", "el"]
|
|
7
7
|
}
|
|
@@ -1,91 +1,2 @@
|
|
|
1
|
-
|
|
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_LATEST = "https://cdn.jsdelivr.net/npm/@roxyapi/ui@latest/dist/cdn";
|
|
7
|
-
var CDN_BASE_PREFIX = "https://cdn.jsdelivr.net/npm/@roxyapi/ui@";
|
|
8
|
-
var CDN_BASE_SUFFIX = "/dist/cdn";
|
|
9
|
-
var loaded = null;
|
|
10
|
-
function buildBase(version) {
|
|
11
|
-
if (!version || version === "latest") return CDN_BASE_LATEST;
|
|
12
|
-
return `${CDN_BASE_PREFIX}${version}${CDN_BASE_SUFFIX}`;
|
|
13
|
-
}
|
|
14
|
-
function ensureScriptLoaded(version = "latest") {
|
|
15
|
-
if (typeof document === "undefined") return Promise.resolve();
|
|
16
|
-
if (loaded) return loaded;
|
|
17
|
-
loaded = new Promise((resolve, reject) => {
|
|
18
|
-
const url = `${buildBase(version)}/roxy-ui.js`;
|
|
19
|
-
let existing = document.getElementById(SCRIPT_ID);
|
|
20
|
-
if (existing) {
|
|
21
|
-
if (existing.dataset.loaded === "true") {
|
|
22
|
-
resolve();
|
|
23
|
-
} else {
|
|
24
|
-
existing.addEventListener("load", () => resolve());
|
|
25
|
-
existing.addEventListener("error", () => reject(new Error("roxy-ui load failed")));
|
|
26
|
-
}
|
|
27
|
-
return;
|
|
28
|
-
}
|
|
29
|
-
existing = document.createElement("script");
|
|
30
|
-
existing.id = SCRIPT_ID;
|
|
31
|
-
existing.src = url;
|
|
32
|
-
existing.async = true;
|
|
33
|
-
existing.crossOrigin = "anonymous";
|
|
34
|
-
existing.addEventListener("load", () => {
|
|
35
|
-
existing.dataset.loaded = "true";
|
|
36
|
-
resolve();
|
|
37
|
-
});
|
|
38
|
-
existing.addEventListener("error", () => reject(new Error("roxy-ui load failed")));
|
|
39
|
-
document.head.appendChild(existing);
|
|
40
|
-
});
|
|
41
|
-
return loaded;
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
// packages/ui-react/src/components/compatibility-card.tsx
|
|
45
|
-
var RoxyCompatibilityCard = React.forwardRef(
|
|
46
|
-
function RoxyCompatibilityCard2({ data, className, style, ...rest }, ref) {
|
|
47
|
-
const internal = React.useRef(null);
|
|
48
|
-
React.useImperativeHandle(
|
|
49
|
-
ref,
|
|
50
|
-
() => internal.current,
|
|
51
|
-
[]
|
|
52
|
-
);
|
|
53
|
-
const [loaded2, setLoaded] = React.useState(false);
|
|
54
|
-
const [error, setError] = React.useState(null);
|
|
55
|
-
React.useEffect(() => {
|
|
56
|
-
let active = true;
|
|
57
|
-
ensureScriptLoaded().then(() => {
|
|
58
|
-
if (active) setLoaded(true);
|
|
59
|
-
}).catch((err) => {
|
|
60
|
-
if (!active) return;
|
|
61
|
-
setError(err instanceof Error ? err : new Error(String(err)));
|
|
62
|
-
});
|
|
63
|
-
return () => {
|
|
64
|
-
active = false;
|
|
65
|
-
};
|
|
66
|
-
}, []);
|
|
67
|
-
React.useEffect(() => {
|
|
68
|
-
const el = internal.current;
|
|
69
|
-
if (el && data !== void 0) {
|
|
70
|
-
el.data = data;
|
|
71
|
-
}
|
|
72
|
-
}, [data, loaded2]);
|
|
73
|
-
if (error) {
|
|
74
|
-
return React.createElement(
|
|
75
|
-
"div",
|
|
76
|
-
{ role: "alert", className, style },
|
|
77
|
-
`Roxy UI script load failed: ${error.message}`
|
|
78
|
-
);
|
|
79
|
-
}
|
|
80
|
-
return React.createElement("roxy-compatibility-card", {
|
|
81
|
-
ref: internal,
|
|
82
|
-
className,
|
|
83
|
-
style,
|
|
84
|
-
...rest
|
|
85
|
-
});
|
|
86
|
-
}
|
|
87
|
-
);
|
|
88
|
-
export {
|
|
89
|
-
RoxyCompatibilityCard
|
|
90
|
-
};
|
|
1
|
+
import*as t from"react";var c="roxyapi-ui-loader",R="https://cdn.jsdelivr.net/npm/@roxyapi/ui@latest/dist/cdn",C="https://cdn.jsdelivr.net/npm/@roxyapi/ui@",x="/dist/cdn",l=null;function L(n){return!n||n==="latest"?R:`${C}${n}${x}`}function p(n="latest"){return typeof document>"u"?Promise.resolve():l||(l=new Promise((r,a)=>{let o=`${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=o,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 T=t.forwardRef(function({data:r,className:a,style:o,...e},m){let s=t.useRef(null);t.useImperativeHandle(m,()=>s.current,[]);let[f,y]=t.useState(!1),[u,E]=t.useState(null);return t.useEffect(()=>{let i=!0;return p().then(()=>{i&&y(!0)}).catch(d=>{i&&E(d instanceof Error?d:new Error(String(d)))}),()=>{i=!1}},[]),t.useEffect(()=>{let i=s.current;i&&r!==void 0&&(i.data=r)},[r,f]),u?t.createElement("div",{role:"alert",className:a,style:o},`Roxy UI script load failed: ${u.message}`):t.createElement("roxy-compatibility-card",{ref:s,className:a,style:o,...e})});export{T as RoxyCompatibilityCard};
|
|
91
2
|
//# sourceMappingURL=compatibility-card.js.map
|