@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,494 @@
1
- import{Card as ue}from"@mui/material";import{useBusyTiming as Pe}from"@xylabs/react-flexbox";import{BusyCircularProgress as ce,BusyLinearProgress as fe}from"@xylabs/react-shared";import{jsx as D,jsxs as Ce}from"react/jsx-runtime";var z=({busy:o,busyMinimum:e=500,busyVariant:r="circular",busyVariantProps:t,children:a,...l})=>{let i=Pe(o,e);return Ce(ue,{...l,children:[a,r==="circular"&&i?D(ce,{...t}):null,r==="linear"&&i?D(fe,{...t}):null]})};import{Refresh as Ye}from"@mui/icons-material";import{Avatar as Ze,CardHeader as je,Chip as er}from"@mui/material";import{FlexRow as rr}from"@xylabs/react-flexbox";import{createContextEx as he}from"@xyo-network/react-shared";var y=he();import{useEffect as ye,useState as Ee}from"react";import{jsx as ve}from"react/jsx-runtime";var G=({children:o,refreshTitle:e,timestampLabel:r,hideElementsConfig:t,plugins:a,embedPluginConfig:l})=>{let[i,n]=Ee(a?a[0]:void 0);return ye(()=>{n(a?a[0]:void 0)},[a]),ve(y.Provider,{value:{activePlugin:i,embedPluginConfig:l,hideElementsConfig:t,provided:!0,refreshTitle:e,setActivePlugin:n,timestampLabel:r},children:o})};import{useContextEx as be}from"@xyo-network/react-shared";var p=()=>be(y,"EmbedPlugin",!0);import{useState as ge}from"react";import{createContextEx as Re}from"@xyo-network/react-shared";var E=Re();import{jsx as xe}from"react/jsx-runtime";var N=({children:o,onRefresh:e,refreshPayload:r})=>{let[t,a]=ge(r);return xe(E.Provider,{value:{onRefresh:e,provided:!0,refreshPayload:t,setRefreshPayload:a},children:o})};import{useContextEx as Me}from"@xyo-network/react-shared";var v=()=>Me(E,"RefreshPayload",!0);import{createContextEx as Se}from"@xyo-network/react-shared";var b=Se();import{delay as Fe}from"@xylabs/delay";import{useAsyncEffect as Ae}from"@xylabs/react-async-effect";import{Huri as Ie}from"@xyo-network/huri";import{ModuleErrorSchema as Le}from"@xyo-network/payload-model";import{useEffect as Be,useState as R}from"react";import{jsx as We}from"react/jsx-runtime";var O=({children:o,huriPayload:e})=>{let[r,t]=R(),[a,l]=R(),{refreshPayload:i,setRefreshPayload:n,onRefresh:m}=v();Be(()=>{typeof e=="string"&&l(e),typeof e=="object"&&(t(e),n?.(!0))},[e,n]);let[f,c]=R(),[A,de]=R();Ae(async pe=>{if(a&&!i)try{let I=await new Ie(a).fetch();await Fe(500),pe()&&(c(I===null),t(I),n?.(!0))}catch(H){de({message:H.message,schema:Le,sources:[]})}},[a,r,i,n]);let me=()=>{m?.(),a&&n?.(!1)};return We(b.Provider,{value:{huri:a,huriError:A,notFound:f,payload:r,provided:!0,refreshHuri:me,setPayload:t},children:o})};import{useContextEx as Ve}from"@xyo-network/react-shared";var s=()=>Ve(b,"ResolvePayload",!0);import{Chip as Te}from"@mui/material";import{useAsyncEffect as ke}from"@xylabs/react-async-effect";import{SchemaCache as L}from"@xyo-network/schema-cache";import{useState as J}from"react";import{createContextEx as we}from"@xyo-network/react-shared";var g=we();import{Fragment as He,jsx as B}from"react/jsx-runtime";var $=({children:o,enabled:e=!1})=>{let{payload:r}=s(),[t,a]=J(!1),[l,i]=J();return ke(async()=>{if(r&&e){await L.instance.get(r.schema);let n=r.schema;if(L.instance.validators[n]){let m=L.instance.validators[n];i(m?.(r))}a(!0)}},[r,e]),B(g.Provider,{value:{enabled:e,provided:!0,schema:r?.schema,validPayload:l},children:e?B(He,{children:t?o:B(Te,{label:"Validating Payload..."})}):o})};import{useContextEx as De}from"@xyo-network/react-shared";var K=()=>De(g,"ValidateSchema",!0);import{MoreVert as Ke}from"@mui/icons-material";import{IconButton as _e,Menu as qe}from"@mui/material";import{useState as Qe}from"react";import{OpenInNew as ze}from"@mui/icons-material";import{ListItemIcon as Ge,ListItemText as Ne,MenuItem as Oe}from"@mui/material";import{Fragment as $e,jsx as x,jsxs as Je}from"react/jsx-runtime";var _=o=>{let{huri:e}=s();return x($e,{children:e?Je(Oe,{title:"Source Payload JSON",onClick:()=>window.open(e,"_blank"),...o,children:[x(Ne,{sx:{mr:1},children:"JSON"}),x(Ge,{sx:{justifyContent:"end"},children:x(ze,{fontSize:"small"})})]}):null})};import{Fragment as Ue,jsx as M,jsxs as Xe}from"react/jsx-runtime";var q=o=>{let[e,r]=Qe(null),t=!!e,a=i=>{r(i.currentTarget)},l=()=>{r(null)};return Xe(Ue,{children:[M(_e,{onClick:a,...o,children:M(Ke,{})}),M(qe,{anchorEl:e,open:t,onClose:l,PaperProps:{variant:"elevation"},MenuListProps:{dense:!0},children:M(_,{})})]})};import{Fragment as Q,jsx as u,jsxs as or}from"react/jsx-runtime";var U=()=>{let{refreshHuri:o,huri:e}=s(),{activePlugin:r,timestampLabel:t,hideElementsConfig:a}=p(),{hideAvatar:l,hideTitle:i,hideRefreshButton:n,hideTimestamp:m,hideCardActions:f}=a??{},c=Date.now();return u(je,{sx:{flexWrap:"wrap",rowGap:1},avatar:l?u(Q,{}):u(Ze,{sx:{bgcolor:A=>A.palette.primary.main},"aria-label":r?.name,children:r?.name?.charAt(0)}),action:or(rr,{flexWrap:"wrap",columnGap:.5,children:[c?m&&n?"":u(er,{avatar:n?u(Q,{}):u(Ye,{}),clickable:!n,onClick:o,label:m?"":`${t} ${new Date(c).toLocaleString()}`}):null,f||e===void 0?null:u(q,{})]}),title:i?"":r?.name})};import{CardContent as fr}from"@mui/material";import{FlexGrowRow as Cr}from"@xylabs/react-flexbox";import{useListMode as hr}from"@xyo-network/react-shared";import{FormControl as tr,InputLabel as ar}from"@mui/material";import{jsx as ir,jsxs as lr}from"react/jsx-runtime";var S=({formId:o,formLabel:e,children:r,...t})=>lr(tr,{...t,children:[ir(ar,{id:o,children:e}),r]});import{MenuItem as W}from"@mui/material";import{SelectEx as nr}from"@xylabs/react-select";import{useListMode as sr}from"@xyo-network/react-shared";import{jsx as C,jsxs as mr}from"react/jsx-runtime";var X="listmode-select-id",Y="List Mode",dr=o=>{let{listMode:e,setListMode:r}=sr();return mr(nr,{value:e??"default",onChange:t=>{r?.(t.target.value)},...o,children:[C(W,{value:"default",children:"Default"},"default"),C(W,{value:"table",children:"Table"},"table"),C(W,{value:"grid",children:"Grid"},"grid")]})},Z=o=>C(S,{formId:X,formLabel:Y,children:C(dr,{size:"small",label:Y,labelId:X,...o})});import{MenuItem as pr}from"@mui/material";import{SelectEx as ur}from"@xylabs/react-select";import{jsx as V}from"react/jsx-runtime";var Pr="render-select-id",cr="Renderer",j=o=>{let{activePlugin:e,setActivePlugin:r,plugins:t}=p();return V(S,{formId:Pr,formLabel:cr,children:V(ur,{size:"small",value:e?.name,...o,children:t?.map(a=>V(pr,{value:a.name,onClick:()=>r?.(a),children:a.name},a.name))})})};import{jsx as h,jsxs as ee}from"react/jsx-runtime";var w=({...o})=>{let{payload:e}=s(),{activePlugin:r,plugins:t,hideElementsConfig:a}=p(),{listMode:l}=hr(),i=r?.components?.box?.listModes?.length??!1;return ee(z,{...o,children:[a?.hideCardHeader?null:h(U,{}),t&&t.length>0||i?ee(Cr,{columnGap:2,rowGap:2,flexWrap:"wrap",pb:1,children:[t&&t.length>1?h(j,{}):null,i?h(Z,{}):null]}):null,h(fr,{sx:{height:"100%"},children:r?h(r.components.box.detailsBox,{payload:e,...i&&{listMode:l}}):null})]})};import{useTheme as Nr}from"@mui/material";import{ErrorBoundary as Ar,ListModeProvider as Ir}from"@xyo-network/react-shared";import{LoadResult as yr}from"@xyo-network/react-shared";import{jsx as Er}from"react/jsx-runtime";var re=({children:o})=>{let{payload:e,notFound:r,huriError:t}=s();return Er(yr,{searchResult:e,notFound:!!r,error:!!t,children:o})};import{Alert as vr}from"@mui/material";import{Fragment as Rr,jsx as gr,jsxs as br}from"react/jsx-runtime";var oe=({children:o,...e})=>{let{validPayload:r,enabled:t,schema:a}=K();return t&&r===!1?br(vr,{severity:"error",title:"Invalid Payload!",...e,children:["Payload schema claimed to be ",a," but failed to validate."]}):gr(Rr,{children:o})};import{Alert as xr,AlertTitle as Mr}from"@mui/material";import{Fragment as Fr,jsx as te,jsxs as Sr}from"react/jsx-runtime";var ae=({children:o,...e})=>{let{payload:r}=s(),{plugins:t}=p();return r&&t?.length===0?Sr(xr,{severity:"warning",...e,children:[te(Mr,{children:"Missing plugins!"}),"Payload found but no plugins were present."]}):te(Fr,{children:o})};import{jsx as d}from"react/jsx-runtime";var ie=({validateSchema:o,plugins:e=[],huriPayload:r,refreshTitle:t="",timestampLabel:a="Data From",hideElementsConfig:l,embedPluginConfig:i,onRefresh:n,children:m})=>d(Ar,{children:d(G,{refreshTitle:t,timestampLabel:a,hideElementsConfig:l,plugins:e,embedPluginConfig:i,children:d(Lr,{onRefresh:n,huriPayload:r,children:d(Br,{validateSchema:o,children:d(Ir,{defaultListMode:i?.listMode,children:m})})})})}),Lr=({children:o,onRefresh:e,huriPayload:r})=>d(N,{onRefresh:e,children:d(O,{huriPayload:r,children:d(re,{children:o})})}),Br=({children:o,validateSchema:e})=>d($,{enabled:e,children:d(ae,{children:d(oe,{children:o})})});import{ErrorAlert as Dr,ErrorRender as zr}from"@xyo-network/react-error";import{Alert as Wr,AlertTitle as Vr,Card as wr,CardContent as Tr,Typography as T}from"@mui/material";import{Fragment as Hr,jsx as P,jsxs as le}from"react/jsx-runtime";var ne=o=>{let{alertProps:e,error:r,hideErrorDetails:t=!0,children:a,...l}=o;return P(wr,{...l,children:P(Tr,{children:a??P(kr,{...{alertProps:e,error:r,hideErrorDetails:t}})})})},kr=({alertProps:o,hideErrorDetails:e,error:r})=>le(Wr,{severity:"error",...o,children:[P(Vr,{children:"Whoops! Something went wrong"}),!e&&r?le(Hr,{children:[P(T,{variant:"caption",children:"Error: "}),P(T,{variant:"caption",children:r?.message})]}):P(T,{variant:"caption",fontSize:"small",children:"Error Loading Plugin"})]});import{jsx as F}from"react/jsx-runtime";var se=({xyoError:o,children:e,...r})=>F(zr,{error:o,noReAuth:!0,noErrorDisplay:!0,customError:F(Gr,{xyoError:o,...r}),children:e}),Gr=({xyoError:o,...e})=>F(ne,{...e,children:F(Dr,{error:o})});import{jsx as k,jsxs as Jr}from"react/jsx-runtime";var Fa=({children:o,...e})=>{let{validateSchema:r,plugins:t=[],huriPayload:a,refreshTitle:l="",timestampLabel:i="Data From",hideElementsConfig:n,embedPluginConfig:m,onRefresh:f,...c}=e;return Jr(ie,{embedPluginConfig:m,hideElementsConfig:n,huriPayload:a,onRefresh:f,plugins:t,refreshTitle:l,timestampLabel:i,validateSchema:r,children:[k(Or,{...c}),o]})},Or=o=>{let{payload:e,huriError:r}=s(),{refreshPayload:t}=v(),a=Nr();return k(se,{xyoError:r,children:k(w,{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,z as BusyCard,U as EmbedCardHeader,w as EmbedPlugin,w as EmbedPluginCard,Or as EmbedPluginCardInner,y as EmbedPluginContext,ie as EmbedPluginInner,G as EmbedPluginProvider,N as RefreshPayloadProvider,b as ResolvePayloadContext,O as ResolvePayloadProvider,$ as ValidatePayloadProvider,p as useEmbedPluginState,v as useRefreshPayload,s as useResolvePayload,K 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?.(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?.(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?.();
135
+ if (huri) {
136
+ 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?.(payload));
171
+ }
172
+ setInitialized(true);
173
+ }
174
+ },
175
+ [payload, enabled]
176
+ );
177
+ return /* @__PURE__ */ jsx5(ValidatePayloadContext.Provider, { value: { enabled, provided: true, schema: 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
+ const { refreshHuri, huri } = useResolvePayload();
222
+ const { activePlugin, timestampLabel, hideElementsConfig } = useEmbedPluginState();
223
+ const { hideAvatar, hideTitle, hideRefreshButton, hideTimestamp, hideCardActions } = hideElementsConfig ?? {};
224
+ const timestamp = Date.now();
225
+ return /* @__PURE__ */ jsx8(
226
+ CardHeader,
227
+ {
228
+ sx: { flexWrap: "wrap", rowGap: 1 },
229
+ avatar: hideAvatar ? /* @__PURE__ */ jsx8(Fragment4, {}) : /* @__PURE__ */ jsx8(Avatar, { sx: { bgcolor: (theme) => theme.palette.primary.main }, "aria-label": activePlugin?.name, children: activePlugin?.name?.charAt(0) }),
230
+ action: /* @__PURE__ */ jsxs4(FlexRow, { flexWrap: "wrap", columnGap: 0.5, children: [
231
+ timestamp ? hideTimestamp && hideRefreshButton ? "" : /* @__PURE__ */ jsx8(
232
+ Chip2,
233
+ {
234
+ avatar: hideRefreshButton ? /* @__PURE__ */ jsx8(Fragment4, {}) : /* @__PURE__ */ jsx8(RefreshIcon, {}),
235
+ clickable: hideRefreshButton ? false : true,
236
+ onClick: refreshHuri,
237
+ label: hideTimestamp ? "" : `${timestampLabel} ${new Date(timestamp).toLocaleString()}`
238
+ }
239
+ ) : null,
240
+ hideCardActions || huri === void 0 ? null : /* @__PURE__ */ jsx8(EmbedMenu, {})
241
+ ] }),
242
+ title: hideTitle ? "" : activePlugin?.name
243
+ }
244
+ );
245
+ };
246
+
247
+ // src/components/embed-card/card/EmbedPluginCard.tsx
248
+ import { CardContent } from "@mui/material";
249
+ import { FlexGrowRow } from "@xylabs/react-flexbox";
250
+ import { useListMode as useListMode2 } from "@xyo-network/react-shared";
251
+
252
+ // src/components/controls/EmbedFormControl.tsx
253
+ import { FormControl, InputLabel } from "@mui/material";
254
+ import { jsx as jsx9, jsxs as jsxs5 } from "react/jsx-runtime";
255
+ var EmbedFormControl = ({ formId, formLabel, children, ...props }) => {
256
+ return /* @__PURE__ */ jsxs5(FormControl, { ...props, children: [
257
+ /* @__PURE__ */ jsx9(InputLabel, { id: formId, children: formLabel }),
258
+ children
259
+ ] });
260
+ };
261
+
262
+ // src/components/controls/ListModeSelect.tsx
263
+ import { MenuItem as MenuItem2 } from "@mui/material";
264
+ import { SelectEx } from "@xylabs/react-select";
265
+ import { useListMode } from "@xyo-network/react-shared";
266
+ import { jsx as jsx10, jsxs as jsxs6 } from "react/jsx-runtime";
267
+ var listModeSelectId = "listmode-select-id";
268
+ var listModeSelectLabel = "List Mode";
269
+ var ListModeSelect = (props) => {
270
+ const { listMode, setListMode } = useListMode();
271
+ return /* @__PURE__ */ jsxs6(
272
+ SelectEx,
273
+ {
274
+ value: listMode ?? "default",
275
+ onChange: (event) => {
276
+ setListMode?.(event.target.value);
277
+ },
278
+ ...props,
279
+ children: [
280
+ /* @__PURE__ */ jsx10(MenuItem2, { value: "default", children: "Default" }, "default"),
281
+ /* @__PURE__ */ jsx10(MenuItem2, { value: "table", children: "Table" }, "table"),
282
+ /* @__PURE__ */ jsx10(MenuItem2, { value: "grid", children: "Grid" }, "grid")
283
+ ]
284
+ }
285
+ );
286
+ };
287
+ var ListModeSelectFormControl = (props) => {
288
+ return /* @__PURE__ */ jsx10(EmbedFormControl, { formId: listModeSelectId, formLabel: listModeSelectLabel, children: /* @__PURE__ */ jsx10(ListModeSelect, { size: "small", label: listModeSelectLabel, labelId: listModeSelectId, ...props }) });
289
+ };
290
+
291
+ // src/components/controls/RenderSelect.tsx
292
+ import { MenuItem as MenuItem3 } from "@mui/material";
293
+ import { SelectEx as SelectEx2 } from "@xylabs/react-select";
294
+ import { jsx as jsx11 } from "react/jsx-runtime";
295
+ var renderSelectId = "render-select-id";
296
+ var renderSelectLabel = "Renderer";
297
+ var EmbedRenderSelect = (props) => {
298
+ const { activePlugin, setActivePlugin, plugins } = useEmbedPluginState();
299
+ return /* @__PURE__ */ jsx11(EmbedFormControl, { formId: renderSelectId, formLabel: renderSelectLabel, children: /* @__PURE__ */ jsx11(SelectEx2, { size: "small", value: activePlugin?.name, ...props, children: plugins?.map((plugin) => /* @__PURE__ */ jsx11(MenuItem3, { value: plugin.name, onClick: () => setActivePlugin?.(plugin), children: plugin.name }, plugin.name)) }) });
300
+ };
301
+
302
+ // src/components/embed-card/card/EmbedPluginCard.tsx
303
+ import { jsx as jsx12, jsxs as jsxs7 } from "react/jsx-runtime";
304
+ var EmbedPluginCard = ({ ...props }) => {
305
+ const { payload } = useResolvePayload();
306
+ const { activePlugin: ActivePlugin, plugins, hideElementsConfig } = useEmbedPluginState();
307
+ const { listMode } = useListMode2();
308
+ const supportsListMode = ActivePlugin?.components?.box?.listModes?.length ?? 0 > 1;
309
+ return /* @__PURE__ */ jsxs7(BusyCard, { ...props, children: [
310
+ hideElementsConfig?.hideCardHeader ? null : /* @__PURE__ */ jsx12(EmbedCardHeader, {}),
311
+ plugins && plugins.length > 0 || supportsListMode ? /* @__PURE__ */ jsxs7(FlexGrowRow, { columnGap: 2, rowGap: 2, flexWrap: "wrap", pb: 1, children: [
312
+ plugins && plugins.length > 1 ? /* @__PURE__ */ jsx12(EmbedRenderSelect, {}) : null,
313
+ supportsListMode ? /* @__PURE__ */ jsx12(ListModeSelectFormControl, {}) : null
314
+ ] }) : null,
315
+ /* @__PURE__ */ jsx12(CardContent, { sx: { height: "100%" }, children: ActivePlugin ? /* @__PURE__ */ jsx12(ActivePlugin.components.box.detailsBox, { payload, ...supportsListMode && { listMode } }) : null })
316
+ ] });
317
+ };
318
+
319
+ // src/components/embed-card/EmbedPluginCard.tsx
320
+ import { useTheme } from "@mui/material";
321
+
322
+ // src/components/EmbedPlugin.tsx
323
+ import { ErrorBoundary, ListModeProvider } from "@xyo-network/react-shared";
324
+
325
+ // src/components/EmbedResolver.tsx
326
+ import { LoadResult } from "@xyo-network/react-shared";
327
+ import { jsx as jsx13 } from "react/jsx-runtime";
328
+ var EmbedResolver = ({ children }) => {
329
+ const { payload, notFound, huriError } = useResolvePayload();
330
+ return /* @__PURE__ */ jsx13(LoadResult, { searchResult: payload, notFound: !!notFound, error: !!huriError, children });
331
+ };
332
+
333
+ // src/components/validation-alerts/ValidatePayload.tsx
334
+ import { Alert } from "@mui/material";
335
+ import { Fragment as Fragment5, jsx as jsx14, jsxs as jsxs8 } from "react/jsx-runtime";
336
+ var ValidatePayloadAlert = ({ children, ...props }) => {
337
+ const { validPayload, enabled, schema } = useValidatePayload();
338
+ if (enabled && validPayload === false) {
339
+ return /* @__PURE__ */ jsxs8(Alert, { severity: "error", title: "Invalid Payload!", ...props, children: [
340
+ "Payload schema claimed to be ",
341
+ schema,
342
+ " but failed to validate."
343
+ ] });
344
+ }
345
+ return /* @__PURE__ */ jsx14(Fragment5, { children });
346
+ };
347
+
348
+ // src/components/validation-alerts/ValidatePlugins.tsx
349
+ import { Alert as Alert2, AlertTitle } from "@mui/material";
350
+ import { Fragment as Fragment6, jsx as jsx15, jsxs as jsxs9 } from "react/jsx-runtime";
351
+ var ValidatePluginsAlert = ({ children, ...props }) => {
352
+ const { payload } = useResolvePayload();
353
+ const { plugins } = useEmbedPluginState();
354
+ if (payload && plugins?.length === 0) {
355
+ return /* @__PURE__ */ jsxs9(Alert2, { severity: "warning", ...props, children: [
356
+ /* @__PURE__ */ jsx15(AlertTitle, { children: "Missing plugins!" }),
357
+ "Payload found but no plugins were present."
358
+ ] });
359
+ }
360
+ return /* @__PURE__ */ jsx15(Fragment6, { children });
361
+ };
362
+
363
+ // src/components/EmbedPlugin.tsx
364
+ import { jsx as jsx16 } from "react/jsx-runtime";
365
+ var EmbedPluginInner = ({
366
+ validateSchema,
367
+ plugins = [],
368
+ huriPayload,
369
+ refreshTitle = "",
370
+ timestampLabel = "Data From",
371
+ hideElementsConfig,
372
+ embedPluginConfig,
373
+ onRefresh,
374
+ children
375
+ }) => {
376
+ return /* @__PURE__ */ jsx16(ErrorBoundary, { children: /* @__PURE__ */ jsx16(
377
+ EmbedPluginProvider,
378
+ {
379
+ refreshTitle,
380
+ timestampLabel,
381
+ hideElementsConfig,
382
+ plugins,
383
+ embedPluginConfig,
384
+ children: /* @__PURE__ */ jsx16(WithResolvers, { onRefresh, huriPayload, children: /* @__PURE__ */ jsx16(WithValidators, { validateSchema, children: /* @__PURE__ */ jsx16(ListModeProvider, { defaultListMode: embedPluginConfig?.listMode, children }) }) })
385
+ }
386
+ ) });
387
+ };
388
+ var WithResolvers = ({ children, onRefresh, huriPayload }) => {
389
+ return /* @__PURE__ */ jsx16(RefreshPayloadProvider, { onRefresh, children: /* @__PURE__ */ jsx16(ResolvePayloadProvider, { huriPayload, children: /* @__PURE__ */ jsx16(EmbedResolver, { children }) }) });
390
+ };
391
+ var WithValidators = ({ children, validateSchema }) => {
392
+ return /* @__PURE__ */ jsx16(ValidatePayloadProvider, { enabled: validateSchema, children: /* @__PURE__ */ jsx16(ValidatePluginsAlert, { children: /* @__PURE__ */ jsx16(ValidatePayloadAlert, { children }) }) });
393
+ };
394
+
395
+ // src/components/embed-card/error-handling/EmbedCardApiErrorRenderer.tsx
396
+ import { ErrorAlert, ErrorRender } from "@xyo-network/react-error";
397
+
398
+ // src/components/embed-card/error-handling/EmbedErrorCard.tsx
399
+ import { Alert as Alert3, AlertTitle as AlertTitle2, Card as Card2, CardContent as CardContent2, Typography } from "@mui/material";
400
+ import { Fragment as Fragment7, jsx as jsx17, jsxs as jsxs10 } from "react/jsx-runtime";
401
+ var EmbedErrorCard = (props) => {
402
+ const { alertProps, error, hideErrorDetails = true, children, ...cardProps } = props;
403
+ const errorProps = { alertProps, error, hideErrorDetails };
404
+ return /* @__PURE__ */ jsx17(Card2, { ...cardProps, children: /* @__PURE__ */ jsx17(CardContent2, { children: children ?? /* @__PURE__ */ jsx17(DefaultErrorAlert, { ...errorProps }) }) });
405
+ };
406
+ var DefaultErrorAlert = ({ alertProps, hideErrorDetails, error }) => {
407
+ return /* @__PURE__ */ jsxs10(Alert3, { severity: "error", ...alertProps, children: [
408
+ /* @__PURE__ */ jsx17(AlertTitle2, { children: "Whoops! Something went wrong" }),
409
+ !hideErrorDetails && error ? /* @__PURE__ */ jsxs10(Fragment7, { children: [
410
+ /* @__PURE__ */ jsx17(Typography, { variant: "caption", children: "Error: " }),
411
+ /* @__PURE__ */ jsx17(Typography, { variant: "caption", children: error?.message })
412
+ ] }) : /* @__PURE__ */ jsx17(Typography, { variant: "caption", fontSize: "small", children: "Error Loading Plugin" })
413
+ ] });
414
+ };
415
+
416
+ // src/components/embed-card/error-handling/EmbedCardApiErrorRenderer.tsx
417
+ import { jsx as jsx18 } from "react/jsx-runtime";
418
+ var EmbedCardApiErrorRenderer = ({ xyoError, children, ...props }) => {
419
+ return /* @__PURE__ */ jsx18(ErrorRender, { error: xyoError, noReAuth: true, noErrorDisplay: true, customError: /* @__PURE__ */ jsx18(CustomApiErrorCard, { xyoError, ...props }), children });
420
+ };
421
+ var CustomApiErrorCard = ({ xyoError, ...props }) => {
422
+ return /* @__PURE__ */ jsx18(EmbedErrorCard, { ...props, children: /* @__PURE__ */ jsx18(ErrorAlert, { error: xyoError }) });
423
+ };
424
+
425
+ // src/components/embed-card/EmbedPluginCard.tsx
426
+ import { jsx as jsx19, jsxs as jsxs11 } from "react/jsx-runtime";
427
+ var ApiEmbedPluginCard = ({ children, ...props }) => {
428
+ const {
429
+ validateSchema,
430
+ plugins = [],
431
+ huriPayload,
432
+ refreshTitle = "",
433
+ timestampLabel = "Data From",
434
+ hideElementsConfig,
435
+ embedPluginConfig,
436
+ onRefresh,
437
+ ...busyCardProps
438
+ } = props;
439
+ return /* @__PURE__ */ jsxs11(
440
+ EmbedPluginInner,
441
+ {
442
+ ...{
443
+ embedPluginConfig,
444
+ hideElementsConfig,
445
+ huriPayload,
446
+ onRefresh,
447
+ plugins,
448
+ refreshTitle,
449
+ timestampLabel,
450
+ validateSchema
451
+ },
452
+ children: [
453
+ /* @__PURE__ */ jsx19(EmbedPluginCardInner, { ...busyCardProps }),
454
+ children
455
+ ]
456
+ }
457
+ );
458
+ };
459
+ var EmbedPluginCardInner = (props) => {
460
+ const { payload, huriError } = useResolvePayload();
461
+ const { refreshPayload } = useRefreshPayload();
462
+ const theme = useTheme();
463
+ return /* @__PURE__ */ jsx19(EmbedCardApiErrorRenderer, { xyoError: huriError, children: /* @__PURE__ */ jsx19(
464
+ EmbedPluginCard,
465
+ {
466
+ elevation: 3,
467
+ variant: "elevation",
468
+ busy: Boolean(!refreshPayload && payload),
469
+ busyVariantProps: { style: { alignItems: "start", paddingTop: theme.spacing(2), zIndex: 2 } },
470
+ sx: { position: "relative" },
471
+ ...props
472
+ }
473
+ ) });
474
+ };
475
+ export {
476
+ ApiEmbedPluginCard,
477
+ BusyCard,
478
+ EmbedCardHeader,
479
+ EmbedPluginCard as EmbedPlugin,
480
+ EmbedPluginCard,
481
+ EmbedPluginCardInner,
482
+ EmbedPluginContext,
483
+ EmbedPluginInner,
484
+ EmbedPluginProvider,
485
+ RefreshPayloadProvider,
486
+ ResolvePayloadContext,
487
+ ResolvePayloadProvider,
488
+ ValidatePayloadProvider,
489
+ useEmbedPluginState,
490
+ useRefreshPayload,
491
+ useResolvePayload,
492
+ useValidatePayload
493
+ };
2
494
  //# sourceMappingURL=index.js.map