@xyo-network/react-embed 2.78.0 → 2.78.2

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.
@@ -1,2 +1,496 @@
1
- import{Card as ur}from"@mui/material";import{useBusyTiming as Pr}from"@xylabs/react-flexbox";import{BusyCircularProgress as cr,BusyLinearProgress as fr}from"@xylabs/react-shared";import{jsx as z,jsxs as Cr}from"react/jsx-runtime";var G=({busy:o,busyMinimum:e=500,busyVariant:r="circular",busyVariantProps:t,children:a,...i})=>{let n=Pr(o,e);return Cr(ur,{...i,children:[a,r==="circular"&&n?z(cr,{...t}):null,r==="linear"&&n?z(fr,{...t}):null]})};import{Refresh as Yr}from"@mui/icons-material";import{Avatar as Zr,CardHeader as jr,Chip as re}from"@mui/material";import{FlexRow as ee}from"@xylabs/react-flexbox";import{createContextEx as hr}from"@xyo-network/react-shared";var y=hr();import{useEffect as Er,useState as yr}from"react";import{jsx as br}from"react/jsx-runtime";var N=({children:o,refreshTitle:e,timestampLabel:r,hideElementsConfig:t,plugins:a,embedPluginConfig:i})=>{let[n,l]=yr(a?a[0]:void 0);return Er(()=>{l(a?a[0]:void 0)},[a]),br(y.Provider,{value:{activePlugin:n,embedPluginConfig:i,hideElementsConfig:t,provided:!0,refreshTitle:e,setActivePlugin:l,timestampLabel:r},children:o})};import{useContextEx as vr}from"@xyo-network/react-shared";var u=()=>vr(y,"EmbedPlugin",!0);import{useState as xr}from"react";import{createContextEx as Rr}from"@xyo-network/react-shared";var b=Rr();import{jsx as gr}from"react/jsx-runtime";var O=({children:o,onRefresh:e,refreshPayload:r})=>{let[t,a]=xr(r);return gr(b.Provider,{value:{onRefresh:e,provided:!0,refreshPayload:t,setRefreshPayload:a},children:o})};import{useContextEx as Sr}from"@xyo-network/react-shared";var v=()=>Sr(b,"RefreshPayload",!0);import{createContextEx as Mr}from"@xyo-network/react-shared";var R=Mr();import{delay as Fr}from"@xylabs/delay";import{useAsyncEffect as Ir}from"@xylabs/react-async-effect";import{Huri as Ar}from"@xyo-network/huri";import{ModuleErrorSchema as Br}from"@xyo-network/payload-model";import{useEffect as Lr,useState as x}from"react";import{jsx as Wr}from"react/jsx-runtime";var J=({children:o,huriPayload:e})=>{let[r,t]=x(),[a,i]=x(),{refreshPayload:n,setRefreshPayload:l,onRefresh:s}=v();Lr(()=>{typeof e=="string"&&i(e),typeof e=="object"&&(t(e),l==null||l(!0))},[e,l]);let[p,f]=x(),[E,A]=x();Ir(async pr=>{if(a&&!n)try{let B=await new Ar(a).fetch();await Fr(500),pr()&&(f(B===null),t(B),l==null||l(!0))}catch(D){A({message:D.message,schema:Br,sources:[]})}},[a,r,n,l]);let mr=()=>{s==null||s(),a&&(l==null||l(!1))};return Wr(R.Provider,{value:{huri:a,huriError:E,notFound:p,payload:r,provided:!0,refreshHuri:mr,setPayload:t},children:o})};import{useContextEx as Vr}from"@xyo-network/react-shared";var d=()=>Vr(R,"ResolvePayload",!0);import{Chip as Tr}from"@mui/material";import{useAsyncEffect as kr}from"@xylabs/react-async-effect";import{SchemaCache as L}from"@xyo-network/schema-cache";import{useState as $}from"react";import{createContextEx as wr}from"@xyo-network/react-shared";var g=wr();import{Fragment as Hr,jsx as W}from"react/jsx-runtime";var K=({children:o,enabled:e=!1})=>{let{payload:r}=d(),[t,a]=$(!1),[i,n]=$();return kr(async()=>{if(r&&e){await L.instance.get(r.schema);let l=r.schema;if(L.instance.validators[l]){let s=L.instance.validators[l];n(s==null?void 0:s(r))}a(!0)}},[r,e]),W(g.Provider,{value:{enabled:e,provided:!0,schema:r==null?void 0:r.schema,validPayload:i},children:e?W(Hr,{children:t?o:W(Tr,{label:"Validating Payload..."})}):o})};import{useContextEx as Dr}from"@xyo-network/react-shared";var _=()=>Dr(g,"ValidateSchema",!0);import{MoreVert as Kr}from"@mui/icons-material";import{IconButton as _r,Menu as qr}from"@mui/material";import{useState as Qr}from"react";import{OpenInNew as zr}from"@mui/icons-material";import{ListItemIcon as Gr,ListItemText as Nr,MenuItem as Or}from"@mui/material";import{Fragment as $r,jsx as S,jsxs as Jr}from"react/jsx-runtime";var q=o=>{let{huri:e}=d();return S($r,{children:e?Jr(Or,{title:"Source Payload JSON",onClick:()=>window.open(e,"_blank"),...o,children:[S(Nr,{sx:{mr:1},children:"JSON"}),S(Gr,{sx:{justifyContent:"end"},children:S(zr,{fontSize:"small"})})]}):null})};import{Fragment as Ur,jsx as M,jsxs as Xr}from"react/jsx-runtime";var Q=o=>{let[e,r]=Qr(null),t=!!e,a=n=>{r(n.currentTarget)},i=()=>{r(null)};return Xr(Ur,{children:[M(_r,{onClick:a,...o,children:M(Kr,{})}),M(qr,{anchorEl:e,open:t,onClose:i,PaperProps:{variant:"elevation"},MenuListProps:{dense:!0},children:M(q,{})})]})};import{Fragment as U,jsx as P,jsxs as oe}from"react/jsx-runtime";var X=()=>{var E;let{refreshHuri:o,huri:e}=d(),{activePlugin:r,timestampLabel:t,hideElementsConfig:a}=u(),{hideAvatar:i,hideTitle:n,hideRefreshButton:l,hideTimestamp:s,hideCardActions:p}=a??{},f=Date.now();return P(jr,{sx:{flexWrap:"wrap",rowGap:1},avatar:i?P(U,{}):P(Zr,{sx:{bgcolor:A=>A.palette.primary.main},"aria-label":r==null?void 0:r.name,children:(E=r==null?void 0:r.name)==null?void 0:E.charAt(0)}),action:oe(ee,{flexWrap:"wrap",columnGap:.5,children:[f?s&&l?"":P(re,{avatar:l?P(U,{}):P(Yr,{}),clickable:!l,onClick:o,label:s?"":`${t} ${new Date(f).toLocaleString()}`}):null,p||e===void 0?null:P(Q,{})]}),title:n?"":r==null?void 0:r.name})};import{CardContent as fe}from"@mui/material";import{FlexGrowRow as Ce}from"@xylabs/react-flexbox";import{useListMode as he}from"@xyo-network/react-shared";import{FormControl as te,InputLabel as ae}from"@mui/material";import{jsx as le,jsxs as ne}from"react/jsx-runtime";var F=({formId:o,formLabel:e,children:r,...t})=>ne(te,{...t,children:[le(ae,{id:o,children:e}),r]});import{MenuItem as V}from"@mui/material";import{SelectEx as ie}from"@xylabs/react-select";import{useListMode as se}from"@xyo-network/react-shared";import{jsx as C,jsxs as me}from"react/jsx-runtime";var Y="listmode-select-id",Z="List Mode",de=o=>{let{listMode:e,setListMode:r}=se();return me(ie,{value:e??"default",onChange:t=>{r==null||r(t.target.value)},...o,children:[C(V,{value:"default",children:"Default"},"default"),C(V,{value:"table",children:"Table"},"table"),C(V,{value:"grid",children:"Grid"},"grid")]})},j=o=>C(F,{formId:Y,formLabel:Z,children:C(de,{size:"small",label:Z,labelId:Y,...o})});import{MenuItem as pe}from"@mui/material";import{SelectEx as ue}from"@xylabs/react-select";import{jsx as w}from"react/jsx-runtime";var Pe="render-select-id",ce="Renderer",rr=o=>{let{activePlugin:e,setActivePlugin:r,plugins:t}=u();return w(F,{formId:Pe,formLabel:ce,children:w(ue,{size:"small",value:e==null?void 0:e.name,...o,children:t==null?void 0:t.map(a=>w(pe,{value:a.name,onClick:()=>r==null?void 0:r(a),children:a.name},a.name))})})};import{jsx as h,jsxs as er}from"react/jsx-runtime";var T=({...o})=>{var l,s,p;let{payload:e}=d(),{activePlugin:r,plugins:t,hideElementsConfig:a}=u(),{listMode:i}=he(),n=((p=(s=(l=r==null?void 0:r.components)==null?void 0:l.box)==null?void 0:s.listModes)==null?void 0:p.length)??!1;return er(G,{...o,children:[a!=null&&a.hideCardHeader?null:h(X,{}),t&&t.length>0||n?er(Ce,{columnGap:2,rowGap:2,flexWrap:"wrap",pb:1,children:[t&&t.length>1?h(rr,{}):null,n?h(j,{}):null]}):null,h(fe,{sx:{height:"100%"},children:r?h(r.components.box.detailsBox,{payload:e,...n&&{listMode:i}}):null})]})};import{useTheme as Ne}from"@mui/material";import{ErrorBoundary as Ie,ListModeProvider as Ae}from"@xyo-network/react-shared";import{LoadResult as Ee}from"@xyo-network/react-shared";import{jsx as ye}from"react/jsx-runtime";var or=({children:o})=>{let{payload:e,notFound:r,huriError:t}=d();return ye(Ee,{searchResult:e,notFound:!!r,error:!!t,children:o})};import{Alert as be}from"@mui/material";import{Fragment as Re,jsx as xe,jsxs as ve}from"react/jsx-runtime";var tr=({children:o,...e})=>{let{validPayload:r,enabled:t,schema:a}=_();return t&&r===!1?ve(be,{severity:"error",title:"Invalid Payload!",...e,children:["Payload schema claimed to be ",a," but failed to validate."]}):xe(Re,{children:o})};import{Alert as ge,AlertTitle as Se}from"@mui/material";import{Fragment as Fe,jsx as ar,jsxs as Me}from"react/jsx-runtime";var lr=({children:o,...e})=>{let{payload:r}=d(),{plugins:t}=u();return r&&(t==null?void 0:t.length)===0?Me(ge,{severity:"warning",...e,children:[ar(Se,{children:"Missing plugins!"}),"Payload found but no plugins were present."]}):ar(Fe,{children:o})};import{jsx as m}from"react/jsx-runtime";var nr=({validateSchema:o,plugins:e=[],huriPayload:r,refreshTitle:t="",timestampLabel:a="Data From",hideElementsConfig:i,embedPluginConfig:n,onRefresh:l,children:s})=>m(Ie,{children:m(N,{refreshTitle:t,timestampLabel:a,hideElementsConfig:i,plugins:e,embedPluginConfig:n,children:m(Be,{onRefresh:l,huriPayload:r,children:m(Le,{validateSchema:o,children:m(Ae,{defaultListMode:n==null?void 0:n.listMode,children:s})})})})}),Be=({children:o,onRefresh:e,huriPayload:r})=>m(O,{onRefresh:e,children:m(J,{huriPayload:r,children:m(or,{children:o})})}),Le=({children:o,validateSchema:e})=>m(K,{enabled:e,children:m(lr,{children:m(tr,{children:o})})});import{ErrorAlert as De,ErrorRender as ze}from"@xyo-network/react-error";import{Alert as We,AlertTitle as Ve,Card as we,CardContent as Te,Typography as k}from"@mui/material";import{Fragment as He,jsx as c,jsxs as ir}from"react/jsx-runtime";var sr=o=>{let{alertProps:e,error:r,hideErrorDetails:t=!0,children:a,...i}=o;return c(we,{...i,children:c(Te,{children:a??c(ke,{...{alertProps:e,error:r,hideErrorDetails:t}})})})},ke=({alertProps:o,hideErrorDetails:e,error:r})=>ir(We,{severity:"error",...o,children:[c(Ve,{children:"Whoops! Something went wrong"}),!e&&r?ir(He,{children:[c(k,{variant:"caption",children:"Error: "}),c(k,{variant:"caption",children:r==null?void 0:r.message})]}):c(k,{variant:"caption",fontSize:"small",children:"Error Loading Plugin"})]});import{jsx as I}from"react/jsx-runtime";var dr=({xyoError:o,children:e,...r})=>I(ze,{error:o,noReAuth:!0,noErrorDisplay:!0,customError:I(Ge,{xyoError:o,...r}),children:e}),Ge=({xyoError:o,...e})=>I(sr,{...e,children:I(De,{error:o})});import{jsx as H,jsxs as Je}from"react/jsx-runtime";var Fa=({children:o,...e})=>{let{validateSchema:r,plugins:t=[],huriPayload:a,refreshTitle:i="",timestampLabel:n="Data From",hideElementsConfig:l,embedPluginConfig:s,onRefresh:p,...f}=e;return Je(nr,{embedPluginConfig:s,hideElementsConfig:l,huriPayload:a,onRefresh:p,plugins:t,refreshTitle:i,timestampLabel:n,validateSchema:r,children:[H(Oe,{...f}),o]})},Oe=o=>{let{payload:e,huriError:r}=d(),{refreshPayload:t}=v(),a=Ne();return H(dr,{xyoError:r,children:H(T,{elevation:3,variant:"elevation",busy:!!(!t&&e),busyVariantProps:{style:{alignItems:"start",paddingTop:a.spacing(2),zIndex:2}},sx:{position:"relative"},...o})})};export{Fa as ApiEmbedPluginCard,G as BusyCard,X as EmbedCardHeader,T as EmbedPlugin,T as EmbedPluginCard,Oe as EmbedPluginCardInner,y as EmbedPluginContext,nr as EmbedPluginInner,N as EmbedPluginProvider,O as RefreshPayloadProvider,R as ResolvePayloadContext,J as ResolvePayloadProvider,K as ValidatePayloadProvider,u as useEmbedPluginState,v as useRefreshPayload,d as useResolvePayload,_ as useValidatePayload};
1
+ // src/components/embed-card/card/BusyCard.tsx
2
+ import { Card } from "@mui/material";
3
+ import { useBusyTiming } from "@xylabs/react-flexbox";
4
+ import {
5
+ BusyCircularProgress,
6
+ BusyLinearProgress
7
+ } from "@xylabs/react-shared";
8
+ import { jsx, jsxs } from "react/jsx-runtime";
9
+ var BusyCard = ({
10
+ busy,
11
+ busyMinimum = 500,
12
+ busyVariant = "circular",
13
+ busyVariantProps,
14
+ children,
15
+ ...props
16
+ }) => {
17
+ const internalBusy = useBusyTiming(busy, busyMinimum);
18
+ return /* @__PURE__ */ jsxs(Card, { ...props, children: [
19
+ children,
20
+ busyVariant === "circular" && internalBusy ? /* @__PURE__ */ jsx(BusyCircularProgress, { ...busyVariantProps }) : null,
21
+ busyVariant === "linear" && internalBusy ? /* @__PURE__ */ jsx(BusyLinearProgress, { ...busyVariantProps }) : null
22
+ ] });
23
+ };
24
+
25
+ // src/components/embed-card/card/EmbedCardHeader.tsx
26
+ import { Refresh as RefreshIcon } from "@mui/icons-material";
27
+ import { Avatar, CardHeader, Chip as Chip2 } from "@mui/material";
28
+ import { FlexRow } from "@xylabs/react-flexbox";
29
+
30
+ // src/contexts/EmbedPluginContext/Context.tsx
31
+ import { createContextEx } from "@xyo-network/react-shared";
32
+ var EmbedPluginContext = createContextEx();
33
+
34
+ // src/contexts/EmbedPluginContext/Provider.tsx
35
+ import { useEffect, useState } from "react";
36
+ import { jsx as jsx2 } from "react/jsx-runtime";
37
+ var EmbedPluginProvider = ({
38
+ children,
39
+ refreshTitle,
40
+ timestampLabel,
41
+ hideElementsConfig,
42
+ plugins,
43
+ embedPluginConfig
44
+ }) => {
45
+ const [activePlugin, setActivePlugin] = useState(plugins ? plugins[0] : void 0);
46
+ useEffect(() => {
47
+ setActivePlugin(plugins ? plugins[0] : void 0);
48
+ }, [plugins]);
49
+ return /* @__PURE__ */ jsx2(
50
+ EmbedPluginContext.Provider,
51
+ {
52
+ value: {
53
+ activePlugin,
54
+ embedPluginConfig,
55
+ hideElementsConfig,
56
+ provided: true,
57
+ refreshTitle,
58
+ setActivePlugin,
59
+ timestampLabel
60
+ },
61
+ children
62
+ }
63
+ );
64
+ };
65
+
66
+ // src/contexts/EmbedPluginContext/use.tsx
67
+ import { useContextEx } from "@xyo-network/react-shared";
68
+ var useEmbedPluginState = () => useContextEx(EmbedPluginContext, "EmbedPlugin", true);
69
+
70
+ // src/contexts/RefreshPayloadContext/Provider.tsx
71
+ import { useState as useState2 } from "react";
72
+
73
+ // src/contexts/RefreshPayloadContext/Context.tsx
74
+ import { createContextEx as createContextEx2 } from "@xyo-network/react-shared";
75
+ var RefreshPayloadContext = createContextEx2();
76
+
77
+ // src/contexts/RefreshPayloadContext/Provider.tsx
78
+ import { jsx as jsx3 } from "react/jsx-runtime";
79
+ var RefreshPayloadProvider = ({ children, onRefresh, refreshPayload }) => {
80
+ const [localRefreshPayload, setRefreshPayload] = useState2(refreshPayload);
81
+ return /* @__PURE__ */ jsx3(RefreshPayloadContext.Provider, { value: { onRefresh, provided: true, refreshPayload: localRefreshPayload, setRefreshPayload }, children });
82
+ };
83
+
84
+ // src/contexts/RefreshPayloadContext/use.tsx
85
+ import { useContextEx as useContextEx2 } from "@xyo-network/react-shared";
86
+ var useRefreshPayload = () => useContextEx2(RefreshPayloadContext, "RefreshPayload", true);
87
+
88
+ // src/contexts/ResolvePayloadContext/Context.ts
89
+ import { createContextEx as createContextEx3 } from "@xyo-network/react-shared";
90
+ var ResolvePayloadContext = createContextEx3();
91
+
92
+ // src/contexts/ResolvePayloadContext/Provider.tsx
93
+ import { delay } from "@xylabs/delay";
94
+ import { useAsyncEffect } from "@xylabs/react-async-effect";
95
+ import { Huri } from "@xyo-network/huri";
96
+ import { ModuleErrorSchema } from "@xyo-network/payload-model";
97
+ import { useEffect as useEffect2, useState as useState3 } from "react";
98
+ import { jsx as jsx4 } from "react/jsx-runtime";
99
+ var ResolvePayloadProvider = ({ children, huriPayload }) => {
100
+ const [payload, setPayload] = useState3();
101
+ const [huri, setHuri] = useState3();
102
+ const { refreshPayload, setRefreshPayload, onRefresh } = useRefreshPayload();
103
+ useEffect2(() => {
104
+ typeof huriPayload === "string" ? setHuri(huriPayload) : void 0;
105
+ if (typeof huriPayload === "object") {
106
+ setPayload(huriPayload);
107
+ setRefreshPayload == null ? void 0 : setRefreshPayload(true);
108
+ }
109
+ }, [huriPayload, setRefreshPayload]);
110
+ const [notFound, setNotFound] = useState3();
111
+ const [huriError, setHuriError] = useState3();
112
+ useAsyncEffect(
113
+ // eslint-disable-next-line react-hooks/exhaustive-deps
114
+ async (mounted) => {
115
+ if (huri && !refreshPayload) {
116
+ try {
117
+ const huriInstance = new Huri(huri);
118
+ const result = await huriInstance.fetch();
119
+ await delay(500);
120
+ if (mounted()) {
121
+ setNotFound(result === null);
122
+ setPayload(result);
123
+ setRefreshPayload == null ? void 0 : setRefreshPayload(true);
124
+ }
125
+ } catch (e) {
126
+ const error = e;
127
+ setHuriError({ message: error.message, schema: ModuleErrorSchema, sources: [] });
128
+ }
129
+ }
130
+ },
131
+ [huri, payload, refreshPayload, setRefreshPayload]
132
+ );
133
+ const refreshHuri = () => {
134
+ onRefresh == null ? void 0 : onRefresh();
135
+ if (huri) {
136
+ setRefreshPayload == null ? void 0 : setRefreshPayload(false);
137
+ }
138
+ };
139
+ return /* @__PURE__ */ jsx4(ResolvePayloadContext.Provider, { value: { huri, huriError, notFound, payload, provided: true, refreshHuri, setPayload }, children });
140
+ };
141
+
142
+ // src/contexts/ResolvePayloadContext/use.tsx
143
+ import { useContextEx as useContextEx3 } from "@xyo-network/react-shared";
144
+ var useResolvePayload = () => useContextEx3(ResolvePayloadContext, "ResolvePayload", true);
145
+
146
+ // src/contexts/ValidatePayloadContext/Provider.tsx
147
+ import { Chip } from "@mui/material";
148
+ import { useAsyncEffect as useAsyncEffect2 } from "@xylabs/react-async-effect";
149
+ import { SchemaCache } from "@xyo-network/schema-cache";
150
+ import { useState as useState4 } from "react";
151
+
152
+ // src/contexts/ValidatePayloadContext/Context.ts
153
+ import { createContextEx as createContextEx4 } from "@xyo-network/react-shared";
154
+ var ValidatePayloadContext = createContextEx4();
155
+
156
+ // src/contexts/ValidatePayloadContext/Provider.tsx
157
+ import { Fragment, jsx as jsx5 } from "react/jsx-runtime";
158
+ var ValidatePayloadProvider = ({ children, enabled = false }) => {
159
+ const { payload } = useResolvePayload();
160
+ const [initialized, setInitialized] = useState4(false);
161
+ const [valid, setValid] = useState4();
162
+ useAsyncEffect2(
163
+ // eslint-disable-next-line react-hooks/exhaustive-deps
164
+ async () => {
165
+ if (payload && enabled) {
166
+ await SchemaCache.instance.get(payload.schema);
167
+ const possibleKnownSchema = payload.schema;
168
+ if (SchemaCache.instance.validators[possibleKnownSchema]) {
169
+ const validator = SchemaCache.instance.validators[possibleKnownSchema];
170
+ setValid(validator == null ? void 0 : validator(payload));
171
+ }
172
+ setInitialized(true);
173
+ }
174
+ },
175
+ [payload, enabled]
176
+ );
177
+ return /* @__PURE__ */ jsx5(ValidatePayloadContext.Provider, { value: { enabled, provided: true, schema: payload == null ? void 0 : payload.schema, validPayload: valid }, children: enabled ? /* @__PURE__ */ jsx5(Fragment, { children: initialized ? children : /* @__PURE__ */ jsx5(Chip, { label: "Validating Payload..." }) }) : children });
178
+ };
179
+
180
+ // src/contexts/ValidatePayloadContext/use.tsx
181
+ import { useContextEx as useContextEx4 } from "@xyo-network/react-shared";
182
+ var useValidatePayload = () => useContextEx4(ValidatePayloadContext, "ValidateSchema", true);
183
+
184
+ // src/components/embed-card/menu/EmbedMenu.tsx
185
+ import { MoreVert as MoreVertIcon } from "@mui/icons-material";
186
+ import { IconButton, Menu } from "@mui/material";
187
+ import { useState as useState5 } from "react";
188
+
189
+ // src/components/embed-card/menu/JsonMenuItem.tsx
190
+ import { OpenInNew as OpenInNewIcon } from "@mui/icons-material";
191
+ import { ListItemIcon, ListItemText, MenuItem } from "@mui/material";
192
+ import { Fragment as Fragment2, jsx as jsx6, jsxs as jsxs2 } from "react/jsx-runtime";
193
+ var JsonMenuItem = (props) => {
194
+ const { huri } = useResolvePayload();
195
+ return /* @__PURE__ */ jsx6(Fragment2, { children: huri ? /* @__PURE__ */ jsxs2(MenuItem, { title: "Source Payload JSON", onClick: () => window.open(huri, "_blank"), ...props, children: [
196
+ /* @__PURE__ */ jsx6(ListItemText, { sx: { mr: 1 }, children: "JSON" }),
197
+ /* @__PURE__ */ jsx6(ListItemIcon, { sx: { justifyContent: "end" }, children: /* @__PURE__ */ jsx6(OpenInNewIcon, { fontSize: "small" }) })
198
+ ] }) : null });
199
+ };
200
+
201
+ // src/components/embed-card/menu/EmbedMenu.tsx
202
+ import { Fragment as Fragment3, jsx as jsx7, jsxs as jsxs3 } from "react/jsx-runtime";
203
+ var EmbedMenu = (props) => {
204
+ const [anchorEl, setAnchorEl] = useState5(null);
205
+ const open = Boolean(anchorEl);
206
+ const handleClick = (event) => {
207
+ setAnchorEl(event.currentTarget);
208
+ };
209
+ const handleClose = () => {
210
+ setAnchorEl(null);
211
+ };
212
+ return /* @__PURE__ */ jsxs3(Fragment3, { children: [
213
+ /* @__PURE__ */ jsx7(IconButton, { onClick: handleClick, ...props, children: /* @__PURE__ */ jsx7(MoreVertIcon, {}) }),
214
+ /* @__PURE__ */ jsx7(Menu, { anchorEl, open, onClose: handleClose, PaperProps: { variant: "elevation" }, MenuListProps: { dense: true }, children: /* @__PURE__ */ jsx7(JsonMenuItem, {}) })
215
+ ] });
216
+ };
217
+
218
+ // src/components/embed-card/card/EmbedCardHeader.tsx
219
+ import { Fragment as Fragment4, jsx as jsx8, jsxs as jsxs4 } from "react/jsx-runtime";
220
+ var EmbedCardHeader = () => {
221
+ var _a;
222
+ const { refreshHuri, huri } = useResolvePayload();
223
+ const { activePlugin, timestampLabel, hideElementsConfig } = useEmbedPluginState();
224
+ const { hideAvatar, hideTitle, hideRefreshButton, hideTimestamp, hideCardActions } = hideElementsConfig ?? {};
225
+ const timestamp = Date.now();
226
+ return /* @__PURE__ */ jsx8(
227
+ CardHeader,
228
+ {
229
+ sx: { flexWrap: "wrap", rowGap: 1 },
230
+ avatar: hideAvatar ? /* @__PURE__ */ jsx8(Fragment4, {}) : /* @__PURE__ */ jsx8(Avatar, { sx: { bgcolor: (theme) => theme.palette.primary.main }, "aria-label": activePlugin == null ? void 0 : activePlugin.name, children: (_a = activePlugin == null ? void 0 : activePlugin.name) == null ? void 0 : _a.charAt(0) }),
231
+ action: /* @__PURE__ */ jsxs4(FlexRow, { flexWrap: "wrap", columnGap: 0.5, children: [
232
+ timestamp ? hideTimestamp && hideRefreshButton ? "" : /* @__PURE__ */ jsx8(
233
+ Chip2,
234
+ {
235
+ avatar: hideRefreshButton ? /* @__PURE__ */ jsx8(Fragment4, {}) : /* @__PURE__ */ jsx8(RefreshIcon, {}),
236
+ clickable: hideRefreshButton ? false : true,
237
+ onClick: refreshHuri,
238
+ label: hideTimestamp ? "" : `${timestampLabel} ${new Date(timestamp).toLocaleString()}`
239
+ }
240
+ ) : null,
241
+ hideCardActions || huri === void 0 ? null : /* @__PURE__ */ jsx8(EmbedMenu, {})
242
+ ] }),
243
+ title: hideTitle ? "" : activePlugin == null ? void 0 : activePlugin.name
244
+ }
245
+ );
246
+ };
247
+
248
+ // src/components/embed-card/card/EmbedPluginCard.tsx
249
+ import { CardContent } from "@mui/material";
250
+ import { FlexGrowRow } from "@xylabs/react-flexbox";
251
+ import { useListMode as useListMode2 } from "@xyo-network/react-shared";
252
+
253
+ // src/components/controls/EmbedFormControl.tsx
254
+ import { FormControl, InputLabel } from "@mui/material";
255
+ import { jsx as jsx9, jsxs as jsxs5 } from "react/jsx-runtime";
256
+ var EmbedFormControl = ({ formId, formLabel, children, ...props }) => {
257
+ return /* @__PURE__ */ jsxs5(FormControl, { ...props, children: [
258
+ /* @__PURE__ */ jsx9(InputLabel, { id: formId, children: formLabel }),
259
+ children
260
+ ] });
261
+ };
262
+
263
+ // src/components/controls/ListModeSelect.tsx
264
+ import { MenuItem as MenuItem2 } from "@mui/material";
265
+ import { SelectEx } from "@xylabs/react-select";
266
+ import { useListMode } from "@xyo-network/react-shared";
267
+ import { jsx as jsx10, jsxs as jsxs6 } from "react/jsx-runtime";
268
+ var listModeSelectId = "listmode-select-id";
269
+ var listModeSelectLabel = "List Mode";
270
+ var ListModeSelect = (props) => {
271
+ const { listMode, setListMode } = useListMode();
272
+ return /* @__PURE__ */ jsxs6(
273
+ SelectEx,
274
+ {
275
+ value: listMode ?? "default",
276
+ onChange: (event) => {
277
+ setListMode == null ? void 0 : setListMode(event.target.value);
278
+ },
279
+ ...props,
280
+ children: [
281
+ /* @__PURE__ */ jsx10(MenuItem2, { value: "default", children: "Default" }, "default"),
282
+ /* @__PURE__ */ jsx10(MenuItem2, { value: "table", children: "Table" }, "table"),
283
+ /* @__PURE__ */ jsx10(MenuItem2, { value: "grid", children: "Grid" }, "grid")
284
+ ]
285
+ }
286
+ );
287
+ };
288
+ var ListModeSelectFormControl = (props) => {
289
+ return /* @__PURE__ */ jsx10(EmbedFormControl, { formId: listModeSelectId, formLabel: listModeSelectLabel, children: /* @__PURE__ */ jsx10(ListModeSelect, { size: "small", label: listModeSelectLabel, labelId: listModeSelectId, ...props }) });
290
+ };
291
+
292
+ // src/components/controls/RenderSelect.tsx
293
+ import { MenuItem as MenuItem3 } from "@mui/material";
294
+ import { SelectEx as SelectEx2 } from "@xylabs/react-select";
295
+ import { jsx as jsx11 } from "react/jsx-runtime";
296
+ var renderSelectId = "render-select-id";
297
+ var renderSelectLabel = "Renderer";
298
+ var EmbedRenderSelect = (props) => {
299
+ const { activePlugin, setActivePlugin, plugins } = useEmbedPluginState();
300
+ return /* @__PURE__ */ jsx11(EmbedFormControl, { formId: renderSelectId, formLabel: renderSelectLabel, children: /* @__PURE__ */ jsx11(SelectEx2, { size: "small", value: activePlugin == null ? void 0 : activePlugin.name, ...props, children: plugins == null ? void 0 : plugins.map((plugin) => /* @__PURE__ */ jsx11(MenuItem3, { value: plugin.name, onClick: () => setActivePlugin == null ? void 0 : setActivePlugin(plugin), children: plugin.name }, plugin.name)) }) });
301
+ };
302
+
303
+ // src/components/embed-card/card/EmbedPluginCard.tsx
304
+ import { jsx as jsx12, jsxs as jsxs7 } from "react/jsx-runtime";
305
+ var EmbedPluginCard = ({ ...props }) => {
306
+ var _a, _b, _c;
307
+ const { payload } = useResolvePayload();
308
+ const { activePlugin: ActivePlugin, plugins, hideElementsConfig } = useEmbedPluginState();
309
+ const { listMode } = useListMode2();
310
+ const supportsListMode = ((_c = (_b = (_a = ActivePlugin == null ? void 0 : ActivePlugin.components) == null ? void 0 : _a.box) == null ? void 0 : _b.listModes) == null ? void 0 : _c.length) ?? 0 > 1;
311
+ return /* @__PURE__ */ jsxs7(BusyCard, { ...props, children: [
312
+ (hideElementsConfig == null ? void 0 : hideElementsConfig.hideCardHeader) ? null : /* @__PURE__ */ jsx12(EmbedCardHeader, {}),
313
+ plugins && plugins.length > 0 || supportsListMode ? /* @__PURE__ */ jsxs7(FlexGrowRow, { columnGap: 2, rowGap: 2, flexWrap: "wrap", pb: 1, children: [
314
+ plugins && plugins.length > 1 ? /* @__PURE__ */ jsx12(EmbedRenderSelect, {}) : null,
315
+ supportsListMode ? /* @__PURE__ */ jsx12(ListModeSelectFormControl, {}) : null
316
+ ] }) : null,
317
+ /* @__PURE__ */ jsx12(CardContent, { sx: { height: "100%" }, children: ActivePlugin ? /* @__PURE__ */ jsx12(ActivePlugin.components.box.detailsBox, { payload, ...supportsListMode && { listMode } }) : null })
318
+ ] });
319
+ };
320
+
321
+ // src/components/embed-card/EmbedPluginCard.tsx
322
+ import { useTheme } from "@mui/material";
323
+
324
+ // src/components/EmbedPlugin.tsx
325
+ import { ErrorBoundary, ListModeProvider } from "@xyo-network/react-shared";
326
+
327
+ // src/components/EmbedResolver.tsx
328
+ import { LoadResult } from "@xyo-network/react-shared";
329
+ import { jsx as jsx13 } from "react/jsx-runtime";
330
+ var EmbedResolver = ({ children }) => {
331
+ const { payload, notFound, huriError } = useResolvePayload();
332
+ return /* @__PURE__ */ jsx13(LoadResult, { searchResult: payload, notFound: !!notFound, error: !!huriError, children });
333
+ };
334
+
335
+ // src/components/validation-alerts/ValidatePayload.tsx
336
+ import { Alert } from "@mui/material";
337
+ import { Fragment as Fragment5, jsx as jsx14, jsxs as jsxs8 } from "react/jsx-runtime";
338
+ var ValidatePayloadAlert = ({ children, ...props }) => {
339
+ const { validPayload, enabled, schema } = useValidatePayload();
340
+ if (enabled && validPayload === false) {
341
+ return /* @__PURE__ */ jsxs8(Alert, { severity: "error", title: "Invalid Payload!", ...props, children: [
342
+ "Payload schema claimed to be ",
343
+ schema,
344
+ " but failed to validate."
345
+ ] });
346
+ }
347
+ return /* @__PURE__ */ jsx14(Fragment5, { children });
348
+ };
349
+
350
+ // src/components/validation-alerts/ValidatePlugins.tsx
351
+ import { Alert as Alert2, AlertTitle } from "@mui/material";
352
+ import { Fragment as Fragment6, jsx as jsx15, jsxs as jsxs9 } from "react/jsx-runtime";
353
+ var ValidatePluginsAlert = ({ children, ...props }) => {
354
+ const { payload } = useResolvePayload();
355
+ const { plugins } = useEmbedPluginState();
356
+ if (payload && (plugins == null ? void 0 : plugins.length) === 0) {
357
+ return /* @__PURE__ */ jsxs9(Alert2, { severity: "warning", ...props, children: [
358
+ /* @__PURE__ */ jsx15(AlertTitle, { children: "Missing plugins!" }),
359
+ "Payload found but no plugins were present."
360
+ ] });
361
+ }
362
+ return /* @__PURE__ */ jsx15(Fragment6, { children });
363
+ };
364
+
365
+ // src/components/EmbedPlugin.tsx
366
+ import { jsx as jsx16 } from "react/jsx-runtime";
367
+ var EmbedPluginInner = ({
368
+ validateSchema,
369
+ plugins = [],
370
+ huriPayload,
371
+ refreshTitle = "",
372
+ timestampLabel = "Data From",
373
+ hideElementsConfig,
374
+ embedPluginConfig,
375
+ onRefresh,
376
+ children
377
+ }) => {
378
+ return /* @__PURE__ */ jsx16(ErrorBoundary, { children: /* @__PURE__ */ jsx16(
379
+ EmbedPluginProvider,
380
+ {
381
+ refreshTitle,
382
+ timestampLabel,
383
+ hideElementsConfig,
384
+ plugins,
385
+ embedPluginConfig,
386
+ children: /* @__PURE__ */ jsx16(WithResolvers, { onRefresh, huriPayload, children: /* @__PURE__ */ jsx16(WithValidators, { validateSchema, children: /* @__PURE__ */ jsx16(ListModeProvider, { defaultListMode: embedPluginConfig == null ? void 0 : embedPluginConfig.listMode, children }) }) })
387
+ }
388
+ ) });
389
+ };
390
+ var WithResolvers = ({ children, onRefresh, huriPayload }) => {
391
+ return /* @__PURE__ */ jsx16(RefreshPayloadProvider, { onRefresh, children: /* @__PURE__ */ jsx16(ResolvePayloadProvider, { huriPayload, children: /* @__PURE__ */ jsx16(EmbedResolver, { children }) }) });
392
+ };
393
+ var WithValidators = ({ children, validateSchema }) => {
394
+ return /* @__PURE__ */ jsx16(ValidatePayloadProvider, { enabled: validateSchema, children: /* @__PURE__ */ jsx16(ValidatePluginsAlert, { children: /* @__PURE__ */ jsx16(ValidatePayloadAlert, { children }) }) });
395
+ };
396
+
397
+ // src/components/embed-card/error-handling/EmbedCardApiErrorRenderer.tsx
398
+ import { ErrorAlert, ErrorRender } from "@xyo-network/react-error";
399
+
400
+ // src/components/embed-card/error-handling/EmbedErrorCard.tsx
401
+ import { Alert as Alert3, AlertTitle as AlertTitle2, Card as Card2, CardContent as CardContent2, Typography } from "@mui/material";
402
+ import { Fragment as Fragment7, jsx as jsx17, jsxs as jsxs10 } from "react/jsx-runtime";
403
+ var EmbedErrorCard = (props) => {
404
+ const { alertProps, error, hideErrorDetails = true, children, ...cardProps } = props;
405
+ const errorProps = { alertProps, error, hideErrorDetails };
406
+ return /* @__PURE__ */ jsx17(Card2, { ...cardProps, children: /* @__PURE__ */ jsx17(CardContent2, { children: children ?? /* @__PURE__ */ jsx17(DefaultErrorAlert, { ...errorProps }) }) });
407
+ };
408
+ var DefaultErrorAlert = ({ alertProps, hideErrorDetails, error }) => {
409
+ return /* @__PURE__ */ jsxs10(Alert3, { severity: "error", ...alertProps, children: [
410
+ /* @__PURE__ */ jsx17(AlertTitle2, { children: "Whoops! Something went wrong" }),
411
+ !hideErrorDetails && error ? /* @__PURE__ */ jsxs10(Fragment7, { children: [
412
+ /* @__PURE__ */ jsx17(Typography, { variant: "caption", children: "Error: " }),
413
+ /* @__PURE__ */ jsx17(Typography, { variant: "caption", children: error == null ? void 0 : error.message })
414
+ ] }) : /* @__PURE__ */ jsx17(Typography, { variant: "caption", fontSize: "small", children: "Error Loading Plugin" })
415
+ ] });
416
+ };
417
+
418
+ // src/components/embed-card/error-handling/EmbedCardApiErrorRenderer.tsx
419
+ import { jsx as jsx18 } from "react/jsx-runtime";
420
+ var EmbedCardApiErrorRenderer = ({ xyoError, children, ...props }) => {
421
+ return /* @__PURE__ */ jsx18(ErrorRender, { error: xyoError, noReAuth: true, noErrorDisplay: true, customError: /* @__PURE__ */ jsx18(CustomApiErrorCard, { xyoError, ...props }), children });
422
+ };
423
+ var CustomApiErrorCard = ({ xyoError, ...props }) => {
424
+ return /* @__PURE__ */ jsx18(EmbedErrorCard, { ...props, children: /* @__PURE__ */ jsx18(ErrorAlert, { error: xyoError }) });
425
+ };
426
+
427
+ // src/components/embed-card/EmbedPluginCard.tsx
428
+ import { jsx as jsx19, jsxs as jsxs11 } from "react/jsx-runtime";
429
+ var ApiEmbedPluginCard = ({ children, ...props }) => {
430
+ const {
431
+ validateSchema,
432
+ plugins = [],
433
+ huriPayload,
434
+ refreshTitle = "",
435
+ timestampLabel = "Data From",
436
+ hideElementsConfig,
437
+ embedPluginConfig,
438
+ onRefresh,
439
+ ...busyCardProps
440
+ } = props;
441
+ return /* @__PURE__ */ jsxs11(
442
+ EmbedPluginInner,
443
+ {
444
+ ...{
445
+ embedPluginConfig,
446
+ hideElementsConfig,
447
+ huriPayload,
448
+ onRefresh,
449
+ plugins,
450
+ refreshTitle,
451
+ timestampLabel,
452
+ validateSchema
453
+ },
454
+ children: [
455
+ /* @__PURE__ */ jsx19(EmbedPluginCardInner, { ...busyCardProps }),
456
+ children
457
+ ]
458
+ }
459
+ );
460
+ };
461
+ var EmbedPluginCardInner = (props) => {
462
+ const { payload, huriError } = useResolvePayload();
463
+ const { refreshPayload } = useRefreshPayload();
464
+ const theme = useTheme();
465
+ return /* @__PURE__ */ jsx19(EmbedCardApiErrorRenderer, { xyoError: huriError, children: /* @__PURE__ */ jsx19(
466
+ EmbedPluginCard,
467
+ {
468
+ elevation: 3,
469
+ variant: "elevation",
470
+ busy: Boolean(!refreshPayload && payload),
471
+ busyVariantProps: { style: { alignItems: "start", paddingTop: theme.spacing(2), zIndex: 2 } },
472
+ sx: { position: "relative" },
473
+ ...props
474
+ }
475
+ ) });
476
+ };
477
+ export {
478
+ ApiEmbedPluginCard,
479
+ BusyCard,
480
+ EmbedCardHeader,
481
+ EmbedPluginCard as EmbedPlugin,
482
+ EmbedPluginCard,
483
+ EmbedPluginCardInner,
484
+ EmbedPluginContext,
485
+ EmbedPluginInner,
486
+ EmbedPluginProvider,
487
+ RefreshPayloadProvider,
488
+ ResolvePayloadContext,
489
+ ResolvePayloadProvider,
490
+ ValidatePayloadProvider,
491
+ useEmbedPluginState,
492
+ useRefreshPayload,
493
+ useResolvePayload,
494
+ useValidatePayload
495
+ };
2
496
  //# sourceMappingURL=index.js.map