@alextheman/components 5.0.2 → 5.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.cjs CHANGED
@@ -1,3 +1,3 @@
1
- "use strict";var at=Object.create;var z=Object.defineProperty,pt=Object.defineProperties,st=Object.getOwnPropertyDescriptor,dt=Object.getOwnPropertyDescriptors,mt=Object.getOwnPropertyNames,_=Object.getOwnPropertySymbols,lt=Object.getPrototypeOf,pe=Object.prototype.hasOwnProperty,Pe=Object.prototype.propertyIsEnumerable;var ye=(e,o,t)=>o in e?z(e,o,{enumerable:!0,configurable:!0,writable:!0,value:t}):e[o]=t,p=(e,o)=>{for(var t in o||(o={}))pe.call(o,t)&&ye(e,t,o[t]);if(_)for(var t of _(o))Pe.call(o,t)&&ye(e,t,o[t]);return e},f=(e,o)=>pt(e,dt(o));var h=(e,o)=>{var t={};for(var i in e)pe.call(e,i)&&o.indexOf(i)<0&&(t[i]=e[i]);if(e!=null&&_)for(var i of _(e))o.indexOf(i)<0&&Pe.call(e,i)&&(t[i]=e[i]);return t};var ct=(e,o)=>{for(var t in o)z(e,t,{get:o[t],enumerable:!0})},ve=(e,o,t,i)=>{if(o&&typeof o=="object"||typeof o=="function")for(let a of mt(o))!pe.call(e,a)&&a!==t&&z(e,a,{get:()=>o[a],enumerable:!(i=st(o,a))||i.enumerable});return e};var n=(e,o,t)=>(t=e!=null?at(lt(e)):{},ve(o||!e||!e.__esModule?z(t,"default",{value:e,enumerable:!0}):t,e)),ut=e=>ve(z({},"__esModule",{value:!0}),e);var Se=(e,o,t)=>new Promise((i,a)=>{var r=m=>{try{d(t.next(m))}catch(c){a(c)}},s=m=>{try{d(t.throw(m))}catch(c){a(c)}},d=m=>m.done?i(m.value):Promise.resolve(m.value).then(r,s);d((t=t.apply(e,o)).next())});var Vt={};ct(Vt,{CollapsableItem:()=>Ce,DarkModeToggle:()=>Ke,DropdownMenu:()=>Ze,ExternalLink:()=>eo,FileInput:()=>j,FileInputList:()=>uo,FileType:()=>io,IconWithPopover:()=>go,InternalLink:()=>oe,ListItemInternalLink:()=>So,Loader:()=>Io,LoaderData:()=>q,LoaderError:()=>Q,LoaderProvider:()=>Y,ModeProvider:()=>Re,NavigationBottom:()=>No,NavigationDrawer:()=>Jo,PopoverText:()=>Yo,ReactPlayground:()=>Qo,ScreenSizeProvider:()=>Oe,SnackbarProvider:()=>Xe,SubmitButton:()=>et,SwitchWithIcons:()=>nt,useHash:()=>it,useLoader:()=>M,useMode:()=>R,useScreenSize:()=>Ae,useSnackbar:()=>Ve});module.exports=ut(Vt);var we=n(require("@mui/icons-material/ArrowDropDown"),1),be=n(require("@mui/icons-material/ArrowDropUp"),1),Ie=n(require("@mui/material/Box"),1),G=n(require("@mui/material/ButtonBase"),1),Le=n(require("@mui/material/Collapse"),1),J=require("react");var B=require("react/jsx-runtime");function ft({isInitiallyOpen:e,onOpen:o,onClose:t,children:i,buttonStyles:a,buttonContents:r,buttonComponent:s=G.default,collapseProps:d,openIcon:m=(0,B.jsx)(be.default,{}),closedIcon:c=(0,B.jsx)(we.default,{}),useDefaultStyling:l=s===G.default}){let[u,g]=(0,J.useState)(!!e);return(0,J.useEffect)(()=>{u&&o?o():!u&&t&&t()},[u]),(0,B.jsxs)(Ie.default,{children:[(0,B.jsxs)(s,{onClick:()=>{g(y=>!y)},sx:l?p({width:"100%",display:"flex",alignItems:"center",justifyContent:"center",paddingY:1.5,paddingX:2,textAlign:"center","&:hover":s===G.default?{backgroundColor:"action.hover"}:null},a):a,"aria-expanded":u,children:[r,u?m:c]}),(0,B.jsx)(Le.default,f(p({in:u},d),{children:i}))]})}var Ce=ft;var $e=n(require("@mui/icons-material/DarkMode"),1),_e=n(require("@mui/icons-material/LightMode"),1),Ge=n(require("@mui/material/IconButton"),1),Je=n(require("@mui/material/Tooltip"),1);var ke=n(require("@mui/material/CircularProgress"),1),K=require("react");var se=require("react/jsx-runtime"),Te=(0,K.createContext)(void 0);function M(){let e=(0,K.useContext)(Te);if(!e)throw new Error("LOADER_CONTEXT_NOT_SET");return e}function xt(i){var a=i,{children:e,loadingComponent:o=(0,se.jsx)(ke.default,{})}=a,t=h(a,["children","loadingComponent"]);return(0,se.jsx)(Te.Provider,{value:p({loadingComponent:o},t),children:e})}var Y=xt;var Be=require("react");var P=require("react/jsx-runtime");function gt({children:e,loadingComponent:o,onUndefined:t,showOnError:i}){let{isLoading:a,data:r,loadingComponent:s,error:d}=M(),m=(0,Be.useRef)(!1);if(a)return(0,P.jsx)(P.Fragment,{children:o!=null?o:s});if(d&&!i)return(0,P.jsx)(P.Fragment,{});if(r===void 0){if(m.current||(console.warn("Data is undefined after loading. This could either be an issue with the query or you have not passed in the data to LoaderProvider. Please double-check that you have provided data."),m.current=!0),t){let c=t();return c!=null?c:(0,P.jsx)(P.Fragment,{})}return(0,P.jsx)(P.Fragment,{})}return typeof e=="function"?(0,P.jsx)(P.Fragment,{children:e(r)}):(0,P.jsx)(P.Fragment,{children:e})}var q=gt;var De=n(require("@mui/material/Alert"),1);var D=require("react/jsx-runtime");function ht(){var t;let{error:e,errorComponent:o}=M();return e?typeof o=="function"?o(e):o?(0,D.jsx)(D.Fragment,{children:o}):(0,D.jsx)(De.default,{severity:"error",children:(t=e==null?void 0:e.message)!=null?t:"An unknown error has occured. Please try again later."}):(0,D.jsx)(D.Fragment,{})}var Q=ht;var Ne=n(require("@mui/material/CssBaseline"),1),Z=require("@mui/material/styles"),C=require("react"),H=require("react/jsx-runtime"),Me=(0,C.createContext)({toggleMode:()=>{},mode:"dark"});function R(){return(0,C.useContext)(Me)}function yt({children:e,mode:o="dark"}){let[t,i]=(0,C.useState)(o),a=(0,C.useMemo)(()=>(0,Z.createTheme)({palette:{mode:t}}),[t]);return(0,H.jsx)(Me.Provider,{value:{mode:t,toggleMode:()=>{i(r=>r==="light"?"dark":"light")}},children:(0,H.jsxs)(Z.ThemeProvider,{theme:a,children:[(0,H.jsx)(Ne.default,{}),e]})})}var Re=yt;var S=require("react"),Fe=require("react/jsx-runtime"),Ee=(0,S.createContext)({windowWidth:0,windowHeight:0,isLargeScreen:!1});function Ae(){return(0,S.useContext)(Ee)}function Pt({children:e,largeScreenWidth:o,largeScreenHeight:t}){let[i,a]=(0,S.useState)(window.innerWidth),[r,s]=(0,S.useState)(window.innerHeight);function d(l,u,g=669,y=600){return l>g&&u>y}let[m,c]=(0,S.useState)(d(window.innerWidth,window.innerHeight,o,t));return(0,S.useEffect)(()=>{function l(){a(window.innerWidth),s(window.innerHeight)}return l(),window.addEventListener("resize",l),()=>{window.removeEventListener("resize",l)}},[]),(0,S.useEffect)(()=>{c(d(i,r,o,t))},[i,r,o,t]),(0,Fe.jsx)(Ee.Provider,{value:{isLargeScreen:m,windowWidth:i,windowHeight:r},children:e})}var Oe=Pt;var We=require("@alextheman/utility"),ze=n(require("@mui/material/Alert"),1),He=n(require("@mui/material/Snackbar"),1),b=require("react");var U=require("react/jsx-runtime"),Ue=(0,b.createContext)(void 0);function Ve(){let e=(0,b.useContext)(Ue);if(!e)throw new Error("SNACKBAR_CONTEXT_NOT_SET");return e}function vt({children:e,autoHideDuration:o=5e3}){let[t,i]=(0,b.useState)(!1),[a,r]=(0,b.useState)(o),[s,d]=(0,b.useState)(""),[m,c]=(0,b.useState)("info");function l(g,y,w){i(!0),r(w!=null?w:o),c(y!=null?y:"info"),d(g)}function u(){return Se(this,null,function*(){i(!1),yield(0,We.wait)(.2),d("")})}return(0,U.jsxs)(Ue.Provider,{value:{addSnackbar:l},children:[(0,U.jsx)(He.default,{open:t,autoHideDuration:a,onClose:u,children:(0,U.jsx)(ze.default,{onClose:u,severity:m,children:s})}),e]})}var Xe=vt;var V=require("react/jsx-runtime");function St(){let{mode:e,toggleMode:o}=R();return(0,V.jsx)(Je.default,{title:`Enable ${e==="dark"?"light":"dark"} mode`,children:(0,V.jsx)(Ge.default,{sx:{marginLeft:"auto"},onClick:o,"aria-label":`Enable ${e==="dark"?"light":"dark"} mode`,children:e==="dark"?(0,V.jsx)(_e.default,{}):(0,V.jsx)($e.default,{})})})}var Ke=St;var Ye=n(require("@mui/icons-material/ArrowDropDown"),1),qe=n(require("@mui/icons-material/ArrowDropUp"),1),de=n(require("@mui/material/Box"),1),me=n(require("@mui/material/Button"),1),Qe=n(require("@mui/material/Menu"),1),E=require("react");var k=require("react/jsx-runtime");function wt({children:e,button:o=me.default,buttonChildren:t="Menu",buttonProps:i,isOpenIcon:a=(0,k.jsx)(qe.default,{}),isClosedIcon:r=(0,k.jsx)(Ye.default,{}),onOpen:s,onClose:d}){let[m,c]=(0,E.useState)(null),l=(0,E.useMemo)(()=>!!m,[m]),u=f(p({},i),{onClick:g=>{c(g.currentTarget)},"aria-controls":l?"dropdown-menu":void 0,"aria-haspopup":"true","aria-expanded":l});return o===me.default&&(u.endIcon=l?a:r),(0,E.useEffect)(()=>{l&&s?s():!l&&d&&d()},[l,s,d]),(0,k.jsxs)(de.default,{children:[(0,k.jsx)(o,f(p({},u),{children:t})),(0,k.jsx)(Qe.default,{id:"dropdown-menu",anchorEl:m,open:l,onClose:()=>{c(null)},children:typeof e=="function"?(0,k.jsx)(de.default,{children:e(()=>{c(null)})}):e})]})}var Ze=wt;var je=n(require("@mui/material/Link"),1);var oo=require("react/jsx-runtime");function bt(i){var a=i,{href:e,children:o}=a,t=h(a,["href","children"]);return(0,oo.jsx)(je.default,f(p({component:"a",href:e,target:"_blank",rel:"noopener noreferrer"},t),{children:o}))}var eo=bt;var to=n(require("@mui/icons-material/CloudUpload"),1),ro=n(require("@mui/material/Button"),1),le=require("@mui/material/styles"),no=require("react");var A=require("react/jsx-runtime"),io={PDF:"application/pdf",PNG:"image/png",JPEG:"image/jpeg",JPG:"image/jpg",XLSX:"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",DOCX:"application/vnd.openxmlformats-officedocument.wordprocessingml.document",MP3:"audio/mp3",MP4:"video/mp4",WAV:"audio/wav"},It=(0,le.styled)("input")({clip:"rect(0 0 0 0)",clipPath:"inset(50%)",height:1,overflow:"hidden",position:"absolute",bottom:0,left:0,whiteSpace:"nowrap",width:1}),Lt=(0,le.styled)("div")(({theme:e,$dragging:o})=>({border:"2px dashed",borderColor:o?e.palette.primary.main:"#ccc",backgroundColor:o?e.palette.action.hover:"transparent",borderRadius:8,padding:"1.5rem",textAlign:"center",transition:"border-color 0.2s",cursor:"pointer"}));function Ct(s){var d=s,{onFileInput:e,label:o="Upload files",multiple:t,accept:i,useDropzone:a}=d,r=h(d,["onFileInput","label","multiple","accept","useDropzone"]);var u;let[m,c]=(0,no.useState)(!1),l=(0,A.jsxs)(ro.default,f(p({variant:"contained",component:"label","aria-label":"File upload button",onKeyDown:g=>{var y;(g.key==="Enter"||g.key===" ")&&(g.preventDefault(),(y=document.getElementById("file-input"))==null||y.click())}},r),{startIcon:(u=r.startIcon)!=null?u:(0,A.jsx)(to.default,{}),children:[o,(0,A.jsx)(It,{id:"file-input",type:"file",onChange:g=>{var w;let y=g.target;e(Array.from((w=y.files)!=null?w:[])),y.value=""},multiple:t,accept:i==null?void 0:i.join(","),disabled:r.disabled})]}));return a?(0,A.jsx)(Lt,{$dragging:m,onDragOver:g=>{g.preventDefault(),!r.disabled&&c(!0)},onDragLeave:g=>{g.preventDefault(),c(!1)},onDrop:g=>{var w;if(g.preventDefault(),c(!1),r.disabled)return;let y=Array.from((w=g.dataTransfer.files)!=null?w:[]);e(y)},children:l}):l}var j=Ct;var ao=n(require("@mui/icons-material/Delete"),1),po=n(require("@mui/material/Box"),1),so=n(require("@mui/material/IconButton"),1),mo=n(require("@mui/material/List"),1),lo=n(require("@mui/material/ListItem"),1),co=n(require("@mui/material/ListItemText"),1);var I=require("react/jsx-runtime");function kt(i){var a=i,{files:e,setFiles:o}=a,t=h(a,["files","setFiles"]);function r(d){o(m=>[...m,...d])}let s=f(p({},t),{onFileInput:r});return(s==null?void 0:s.multiple)===void 0&&(s.multiple=!0),(0,I.jsxs)(po.default,{children:[(0,I.jsx)(j,p({},s)),(0,I.jsx)(mo.default,{children:e.map(d=>(0,I.jsx)(lo.default,{secondaryAction:(0,I.jsx)(so.default,{"aria-label":"Delete",edge:"end",onClick:()=>{o(m=>m.filter(c=>c!==d))},children:(0,I.jsx)(ao.default,{})}),children:(0,I.jsx)(co.default,{primary:d.name})},d.name))})]})}var uo=kt;var fo=n(require("@mui/material/Box"),1),xo=n(require("@mui/material/Popover"),1),ee=require("react");var X=require("react/jsx-runtime");function Tt({icon:e,onOpen:o,onClose:t,iconProps:i,children:a}){let[r,s]=(0,ee.useState)(null),d=!!r,m=(0,ee.useId)();function c(u){s(u.currentTarget),o&&o()}function l(){s(null),t&&t()}return(0,X.jsxs)(fo.default,{children:[(0,X.jsx)(e,p({"aria-owns":d?m:void 0,"aria-haspopup":"true",onMouseEnter:c,onMouseLeave:l},i)),(0,X.jsx)(xo.default,{id:m,sx:{pointerEvents:"none"},open:d,anchorEl:r,anchorOrigin:{vertical:"bottom",horizontal:"left"},transformOrigin:{vertical:"top",horizontal:"left"},onClose:l,disableRestoreFocus:!0,children:a})]})}var go=Tt;var ho=n(require("@mui/material/Link"),1),yo=require("react-router-dom");var Po=require("react/jsx-runtime");function Bt(i){var a=i,{to:e,children:o}=a,t=h(a,["to","children"]);return(0,Po.jsx)(ho.default,f(p({component:yo.Link,to:e},t),{children:o}))}var oe=Bt;var vo=n(require("@mui/material/ListItemButton"),1);var wo=require("react/jsx-runtime");function Dt(t){var i=t,{children:e}=i,o=h(i,["children"]);return(0,wo.jsx)(vo.default,f(p({component:oe},o),{children:e}))}var So=Dt;var bo=n(require("@mui/material/CircularProgress"),1);var O=require("react/jsx-runtime");function Nt(a){var r=a,{children:e,onUndefined:o,loadingComponent:t=(0,O.jsx)(bo.default,{})}=r,i=h(r,["children","onUndefined","loadingComponent"]);return(0,O.jsxs)(Y,f(p({loadingComponent:t},i),{children:[(0,O.jsx)(Q,{}),(0,O.jsx)(q,{onUndefined:o,children:e})]}))}var Io=Nt;var Lo=n(require("@mui/material/BottomNavigation"),1),Co=n(require("@mui/material/BottomNavigationAction"),1),ko=n(require("@mui/material/Box"),1),To=n(require("@mui/material/Paper"),1),Bo=require("react"),Do=require("react-router-dom");var L=require("react/jsx-runtime");function Mt({children:e,navItems:o}){let[t,i]=(0,Bo.useState)("");return(0,L.jsxs)(L.Fragment,{children:[(0,L.jsx)(ko.default,{sx:{paddingBottom:7},children:e}),(0,L.jsx)(To.default,{sx:{position:"fixed",bottom:0,left:0,right:0},children:(0,L.jsx)(Lo.default,{showLabels:!0,value:t,onChange:(a,r)=>{i(r)},children:o.map(a=>(0,L.jsx)(Co.default,f(p({},a),{component:Do.Link}),a.value))})})]})}var No=Mt;var ce=require("@alextheman/utility"),Ao=n(require("@mui/icons-material/ChevronLeft"),1),Oo=n(require("@mui/icons-material/ChevronRight"),1),Fo=n(require("@mui/icons-material/Menu"),1),Wo=n(require("@mui/material/AppBar"),1),ue=n(require("@mui/material/Box"),1),zo=n(require("@mui/material/CssBaseline"),1),fe=n(require("@mui/material/Divider"),1),Ho=n(require("@mui/material/Drawer"),1),xe=n(require("@mui/material/IconButton"),1),Uo=n(require("@mui/material/List"),1),Vo=n(require("@mui/material/ListItem"),1),Xo=n(require("@mui/material/ListItemButton"),1),$o=n(require("@mui/material/ListItemIcon"),1),_o=n(require("@mui/material/ListItemText"),1),F=require("@mui/material/styles"),Go=n(require("@mui/material/Toolbar"),1),te=n(require("@mui/material/Typography"),1),ne=require("react"),ie=require("react-router-dom");var x=require("react/jsx-runtime"),re=240;function Mo(e){return{width:re,transition:e.transitions.create("width",{easing:e.transitions.easing.sharp,duration:e.transitions.duration.enteringScreen}),overflowX:"hidden"}}function Ro(e){return{transition:e.transitions.create("width",{easing:e.transitions.easing.sharp,duration:e.transitions.duration.leavingScreen}),overflowX:"hidden",width:`calc(${e.spacing(7)} + 1px)`,[e.breakpoints.up("sm")]:{width:`calc(${e.spacing(8)} + 1px)`}}}var Eo=(0,F.styled)("div")(({theme:e})=>p({display:"flex",alignItems:"center",justifyContent:"flex-end",padding:e.spacing(0,1)},e.mixins.toolbar)),Rt=(0,F.styled)(Wo.default,{shouldForwardProp:e=>e!=="open"})(({theme:e})=>({zIndex:e.zIndex.drawer+1,transition:e.transitions.create(["width","margin"],{easing:e.transitions.easing.sharp,duration:e.transitions.duration.leavingScreen}),variants:[{props:({open:o})=>o,style:{marginLeft:re,width:`calc(100% - ${re}px)`,transition:e.transitions.create(["width","margin"],{easing:e.transitions.easing.sharp,duration:e.transitions.duration.enteringScreen})}}]})),Et=(0,F.styled)(Ho.default,{shouldForwardProp:e=>e!=="open"})(({theme:e})=>({width:re,flexShrink:0,whiteSpace:"nowrap",boxSizing:"border-box",variants:[{props:({open:o})=>o,style:f(p({},Mo(e)),{"& .MuiDrawer-paper":Mo(e)})},{props:({open:o})=>!o,style:f(p({},Ro(e)),{"& .MuiDrawer-paper":Ro(e)})}]}));function At({title:e,navItems:o,children:t,headerElements:i}){let a=(0,F.useTheme)(),[r,s]=(0,ne.useState)(!0),d=(0,ie.useLocation)();function m(){s(!0)}function c(){s(!1)}return(0,x.jsxs)(ue.default,{sx:{display:"flex"},children:[(0,x.jsx)(zo.default,{}),(0,x.jsx)(Rt,{position:"fixed",open:r,children:(0,x.jsxs)(Go.default,{children:[(0,x.jsx)(xe.default,{color:"inherit","aria-label":"open drawer",onClick:m,edge:"start",sx:[{marginRight:5},r&&{display:"none"}],children:(0,x.jsx)(Fo.default,{})}),(0,x.jsx)(te.default,{variant:"h6",noWrap:!0,component:"div",children:e}),i]})}),(0,x.jsxs)(Et,{variant:"permanent",open:r,children:[(0,x.jsx)(Eo,{children:(0,x.jsx)(xe.default,{onClick:c,children:a.direction==="rtl"?(0,x.jsx)(Oo.default,{}):(0,x.jsx)(Ao.default,{})})}),(0,x.jsx)(fe.default,{}),o.map(l=>(0,x.jsxs)(ne.Fragment,{children:[(0,x.jsxs)(Uo.default,{children:[(0,x.jsx)(te.default,{variant:r?"h5":"h6",paddingLeft:r?2:1,children:r?l.category:(0,ce.truncate)(l.category,4)}),l.options.map(u=>(0,x.jsx)(Vo.default,{disablePadding:!0,sx:{display:"block"},children:(0,x.jsxs)(Xo.default,{sx:[{minHeight:48,px:2.5},r?{justifyContent:"initial"}:{justifyContent:"center"}],component:ie.Link,to:u.to,selected:d.pathname===u.to,children:[(0,x.jsx)($o.default,{sx:[{minWidth:0,justifyContent:"center"},r?{mr:3}:{mr:"auto"}],children:u.icon?u.icon:r?null:(0,x.jsx)(te.default,{children:(0,ce.truncate)(u.label,4)})}),(0,x.jsx)(_o.default,{primary:u.label,sx:[r?{opacity:1}:{opacity:0}]})]})},u.to))]}),(0,x.jsx)(fe.default,{})]},l.category))]}),(0,x.jsxs)(ue.default,{component:"main",sx:{flexGrow:1,p:3},children:[(0,x.jsx)(Eo,{}),t]})]})}var Jo=At;var Ko=n(require("@mui/material/Typography"),1);var $=require("react/jsx-runtime");function Ot(i){var a=i,{text:e,sx:o}=a,t=h(a,["text","sx"]);return(0,$.jsx)($.Fragment,{children:e.split(`
2
- `).map((r,s)=>(0,$.jsx)(Ko.default,f(p({sx:p({margin:1},o)},t),{children:r}),s))})}var Yo=Ot;var ae=n(require("@mui/material/Box"),1),ge=n(require("@mui/material/Typography"),1),qo=require("common-tags"),T=require("react-live");var v=require("react/jsx-runtime");function Ft({code:e,scope:o,previewStyles:t,noInline:i,enableTypeScript:a,language:r}){let{mode:s}=R(),d={backgroundColor:s==="dark"?"black":"white",border:.3,borderRadius:1,padding:2,borderColor:"darkgray"},m=t?p(p({},d),t):p({},d);return(0,v.jsx)(ae.default,{sx:{borderRadius:1,border:.5,padding:2},children:(0,v.jsxs)(T.LiveProvider,{code:(0,qo.stripIndent)(e),scope:o,noInline:i,enableTypeScript:a,language:r,children:[(0,v.jsx)(ge.default,{variant:"h5",children:"Code"}),(0,v.jsx)(ae.default,{sx:{border:.3,borderRadius:.3,borderColor:"darkgray"},children:(0,v.jsx)(T.LiveEditor,{})}),(0,v.jsx)("br",{}),(0,v.jsx)(ge.default,{variant:"h5",children:"Result"}),(0,v.jsxs)(ae.default,{sx:m,children:[(0,v.jsx)(T.LivePreview,{}),(0,v.jsx)(T.LiveError,{})]})]})})}var Qo=Ft;var Zo=n(require("@mui/material/Button"),1),jo=require("react-hook-form");var ot=require("react/jsx-runtime");function Wt(i){var a=i,{disableClean:e,label:o}=a,t=h(a,["disableClean","label"]);let{formState:{disabled:r,isDirty:s,isSubmitting:d}}=(0,jo.useFormContext)();return(0,ot.jsx)(Zo.default,f(p({color:"primary",disabled:t.disabled||e&&!s||r,loading:d,type:"submit",variant:"contained"},t),{children:o}))}var et=Wt;var he=n(require("@mui/material/Box"),1),tt=require("@mui/material/styles"),rt=n(require("@mui/material/Switch"),1);var W=require("react/jsx-runtime"),zt=(0,tt.styled)(rt.default)(()=>({padding:8,"& .MuiSwitch-track":{borderRadius:11,"&::before, &::after":{content:'""',position:"absolute",top:"50%",transform:"translateY(-50%)",fontSize:16,width:28,height:28}}}));function Ht(r){var s=r,{checkedIcon:e,checkedIconStyles:o,uncheckedIcon:t,uncheckedIconStyles:i}=s,a=h(s,["checkedIcon","checkedIconStyles","uncheckedIcon","uncheckedIconStyles"]);let d={borderRadius:"50%",borderColor:"white",backgroundColor:"white",display:"flex",alignItems:"center",justifyContent:"center",padding:.25},m={color:"black",maxWidth:16.5,maxHeight:16.5};return(0,W.jsx)(zt,p({checkedIcon:(0,W.jsx)(he.default,{sx:d,children:(0,W.jsx)(e,{style:p(p({},m),o)})}),icon:(0,W.jsx)(he.default,{sx:d,children:(0,W.jsx)(t,{style:p(p({},m),i)})})},a))}var nt=Ht;var N=require("react");function Ut(e){let[o,t]=(0,N.useState)(()=>{let r=window.location.hash.replace("#","");return e&&r===""?e:r}),i=(0,N.useCallback)(()=>{let r=window.location.hash.replace("#","");t(e&&r===""?e:r)},[t,e]);(0,N.useEffect)(()=>(window.addEventListener("hashchange",i),()=>{window.removeEventListener("hashchange",i)}),[i]);let a=(0,N.useCallback)(r=>{let s=typeof r=="function"?r(o):r;s!==o&&(window.location.hash=s)},[o]);return[o,a]}var it=Ut;0&&(module.exports={CollapsableItem,DarkModeToggle,DropdownMenu,ExternalLink,FileInput,FileInputList,FileType,IconWithPopover,InternalLink,ListItemInternalLink,Loader,LoaderData,LoaderError,LoaderProvider,ModeProvider,NavigationBottom,NavigationDrawer,PopoverText,ReactPlayground,ScreenSizeProvider,SnackbarProvider,SubmitButton,SwitchWithIcons,useHash,useLoader,useMode,useScreenSize,useSnackbar});
1
+ "use strict";var cr=Object.create;var z=Object.defineProperty,ur=Object.defineProperties,fr=Object.getOwnPropertyDescriptor,xr=Object.getOwnPropertyDescriptors,Pr=Object.getOwnPropertyNames,_=Object.getOwnPropertySymbols,gr=Object.getPrototypeOf,se=Object.prototype.hasOwnProperty,ve=Object.prototype.propertyIsEnumerable;var ye=(e,o,r)=>o in e?z(e,o,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[o]=r,p=(e,o)=>{for(var r in o||(o={}))se.call(o,r)&&ye(e,r,o[r]);if(_)for(var r of _(o))ve.call(o,r)&&ye(e,r,o[r]);return e},f=(e,o)=>ur(e,xr(o));var g=(e,o)=>{var r={};for(var i in e)se.call(e,i)&&o.indexOf(i)<0&&(r[i]=e[i]);if(e!=null&&_)for(var i of _(e))o.indexOf(i)<0&&ve.call(e,i)&&(r[i]=e[i]);return r};var hr=(e,o)=>{for(var r in o)z(e,r,{get:o[r],enumerable:!0})},Se=(e,o,r,i)=>{if(o&&typeof o=="object"||typeof o=="function")for(let a of Pr(o))!se.call(e,a)&&a!==r&&z(e,a,{get:()=>o[a],enumerable:!(i=fr(o,a))||i.enumerable});return e};var n=(e,o,r)=>(r=e!=null?cr(gr(e)):{},Se(o||!e||!e.__esModule?z(r,"default",{value:e,enumerable:!0}):r,e)),yr=e=>Se(z({},"__esModule",{value:!0}),e);var we=(e,o,r)=>new Promise((i,a)=>{var t=m=>{try{d(r.next(m))}catch(c){a(c)}},s=m=>{try{d(r.throw(m))}catch(c){a(c)}},d=m=>m.done?i(m.value):Promise.resolve(m.value).then(t,s);d((r=r.apply(e,o)).next())});var Yr={};hr(Yr,{CollapsableItem:()=>Ce,DarkModeToggle:()=>Ye,DropdownMenu:()=>je,ExternalLink:()=>oo,FileInput:()=>j,FileInputList:()=>fo,FileType:()=>ao,IconWithPopover:()=>go,InternalLink:()=>oe,ListItemInternalLink:()=>wo,Loader:()=>Io,LoaderData:()=>q,LoaderError:()=>Q,LoaderProvider:()=>Y,ModeProvider:()=>Ee,NavigationBottom:()=>No,NavigationDrawer:()=>Ko,PopoverText:()=>qo,ReactPlayground:()=>Zo,ScreenSizeProvider:()=>Fe,SkeletonRow:()=>tr,SnackbarProvider:()=>$e,SubmitButton:()=>ar,SwitchWithIcons:()=>mr,useHash:()=>lr,useLoader:()=>N,useMode:()=>M,useScreenSize:()=>Oe,useSnackbar:()=>Xe});module.exports=yr(Yr);var be=n(require("@mui/icons-material/ArrowDropDown"),1),Le=n(require("@mui/icons-material/ArrowDropUp"),1),Ie=n(require("@mui/material/Box"),1),G=n(require("@mui/material/ButtonBase"),1),ke=n(require("@mui/material/Collapse"),1),J=require("react");var B=require("react/jsx-runtime");function vr({isInitiallyOpen:e,onOpen:o,onClose:r,children:i,buttonStyles:a,buttonContents:t,buttonComponent:s=G.default,collapseProps:d,openIcon:m=(0,B.jsx)(Le.default,{}),closedIcon:c=(0,B.jsx)(be.default,{}),useDefaultStyling:l=s===G.default}){let[u,P]=(0,J.useState)(!!e);return(0,J.useEffect)(()=>{u&&o?o():!u&&r&&r()},[u]),(0,B.jsxs)(Ie.default,{children:[(0,B.jsxs)(s,{onClick:()=>{P(h=>!h)},sx:l?p({width:"100%",display:"flex",alignItems:"center",justifyContent:"center",paddingY:1.5,paddingX:2,textAlign:"center","&:hover":s===G.default?{backgroundColor:"action.hover"}:null},a):a,"aria-expanded":u,children:[t,u?m:c]}),(0,B.jsx)(ke.default,f(p({in:u},d),{children:i}))]})}var Ce=vr;var _e=n(require("@mui/icons-material/DarkMode"),1),Ge=n(require("@mui/icons-material/LightMode"),1),Je=n(require("@mui/material/IconButton"),1),Ke=n(require("@mui/material/Tooltip"),1);var Te=n(require("@mui/material/CircularProgress"),1),K=require("react");var de=require("react/jsx-runtime"),Be=(0,K.createContext)(void 0);function N(){let e=(0,K.useContext)(Be);if(!e)throw new Error("LOADER_CONTEXT_NOT_SET");return e}function Sr(i){var a=i,{children:e,loadingComponent:o=(0,de.jsx)(Te.default,{})}=a,r=g(a,["children","loadingComponent"]);return(0,de.jsx)(Be.Provider,{value:p({loadingComponent:o},r),children:e})}var Y=Sr;var Re=require("react");var y=require("react/jsx-runtime");function wr({children:e,loadingComponent:o,onUndefined:r,showOnError:i}){let{isLoading:a,data:t,loadingComponent:s,error:d}=N(),m=(0,Re.useRef)(!1);if(a)return(0,y.jsx)(y.Fragment,{children:o!=null?o:s});if(d&&!i)return(0,y.jsx)(y.Fragment,{});if(t===void 0){if(m.current||(console.warn("Data is undefined after loading. This could either be an issue with the query or you have not passed in the data to LoaderProvider. Please double-check that you have provided data."),m.current=!0),r){let c=r();return c!=null?c:(0,y.jsx)(y.Fragment,{})}return(0,y.jsx)(y.Fragment,{})}return typeof e=="function"?(0,y.jsx)(y.Fragment,{children:e(t)}):(0,y.jsx)(y.Fragment,{children:e})}var q=wr;var De=n(require("@mui/material/Alert"),1);var R=require("react/jsx-runtime");function br(){var r;let{error:e,errorComponent:o}=N();return e?typeof o=="function"?o(e):o?(0,R.jsx)(R.Fragment,{children:o}):(0,R.jsx)(De.default,{severity:"error",children:(r=e==null?void 0:e.message)!=null?r:"An unknown error has occured. Please try again later."}):(0,R.jsx)(R.Fragment,{})}var Q=br;var Ne=n(require("@mui/material/CssBaseline"),1),Z=require("@mui/material/styles"),k=require("react"),H=require("react/jsx-runtime"),Me=(0,k.createContext)({toggleMode:()=>{},mode:"dark"});function M(){return(0,k.useContext)(Me)}function Lr({children:e,mode:o="dark"}){let[r,i]=(0,k.useState)(o),a=(0,k.useMemo)(()=>(0,Z.createTheme)({palette:{mode:r}}),[r]);return(0,H.jsx)(Me.Provider,{value:{mode:r,toggleMode:()=>{i(t=>t==="light"?"dark":"light")}},children:(0,H.jsxs)(Z.ThemeProvider,{theme:a,children:[(0,H.jsx)(Ne.default,{}),e]})})}var Ee=Lr;var S=require("react"),We=require("react/jsx-runtime"),Ae=(0,S.createContext)({windowWidth:0,windowHeight:0,isLargeScreen:!1});function Oe(){return(0,S.useContext)(Ae)}function Ir({children:e,largeScreenWidth:o,largeScreenHeight:r}){let[i,a]=(0,S.useState)(window.innerWidth),[t,s]=(0,S.useState)(window.innerHeight);function d(l,u,P=669,h=600){return l>P&&u>h}let[m,c]=(0,S.useState)(d(window.innerWidth,window.innerHeight,o,r));return(0,S.useEffect)(()=>{function l(){a(window.innerWidth),s(window.innerHeight)}return l(),window.addEventListener("resize",l),()=>{window.removeEventListener("resize",l)}},[]),(0,S.useEffect)(()=>{c(d(i,t,o,r))},[i,t,o,r]),(0,We.jsx)(Ae.Provider,{value:{isLargeScreen:m,windowWidth:i,windowHeight:t},children:e})}var Fe=Ir;var ze=require("@alextheman/utility"),He=n(require("@mui/material/Alert"),1),Ue=n(require("@mui/material/Snackbar"),1),b=require("react");var U=require("react/jsx-runtime"),Ve=(0,b.createContext)(void 0);function Xe(){let e=(0,b.useContext)(Ve);if(!e)throw new Error("SNACKBAR_CONTEXT_NOT_SET");return e}function kr({children:e,autoHideDuration:o=5e3}){let[r,i]=(0,b.useState)(!1),[a,t]=(0,b.useState)(o),[s,d]=(0,b.useState)(""),[m,c]=(0,b.useState)("info");function l(P,h,w){i(!0),t(w!=null?w:o),c(h!=null?h:"info"),d(P)}function u(){return we(this,null,function*(){i(!1),yield(0,ze.wait)(.2),d("")})}return(0,U.jsxs)(Ve.Provider,{value:{addSnackbar:l},children:[(0,U.jsx)(Ue.default,{open:r,autoHideDuration:a,onClose:u,children:(0,U.jsx)(He.default,{onClose:u,severity:m,children:s})}),e]})}var $e=kr;var V=require("react/jsx-runtime");function Cr(){let{mode:e,toggleMode:o}=M();return(0,V.jsx)(Ke.default,{title:`Enable ${e==="dark"?"light":"dark"} mode`,children:(0,V.jsx)(Je.default,{sx:{marginLeft:"auto"},onClick:o,"aria-label":`Enable ${e==="dark"?"light":"dark"} mode`,children:e==="dark"?(0,V.jsx)(Ge.default,{}):(0,V.jsx)(_e.default,{})})})}var Ye=Cr;var qe=n(require("@mui/icons-material/ArrowDropDown"),1),Qe=n(require("@mui/icons-material/ArrowDropUp"),1),me=n(require("@mui/material/Box"),1),le=n(require("@mui/material/Button"),1),Ze=n(require("@mui/material/Menu"),1),E=require("react");var C=require("react/jsx-runtime");function Tr({children:e,button:o=le.default,buttonChildren:r="Menu",buttonProps:i,isOpenIcon:a=(0,C.jsx)(Qe.default,{}),isClosedIcon:t=(0,C.jsx)(qe.default,{}),onOpen:s,onClose:d}){let[m,c]=(0,E.useState)(null),l=(0,E.useMemo)(()=>!!m,[m]),u=f(p({},i),{onClick:P=>{c(P.currentTarget)},"aria-controls":l?"dropdown-menu":void 0,"aria-haspopup":"true","aria-expanded":l});return o===le.default&&(u.endIcon=l?a:t),(0,E.useEffect)(()=>{l&&s?s():!l&&d&&d()},[l,s,d]),(0,C.jsxs)(me.default,{children:[(0,C.jsx)(o,f(p({},u),{children:r})),(0,C.jsx)(Ze.default,{id:"dropdown-menu",anchorEl:m,open:l,onClose:()=>{c(null)},children:typeof e=="function"?(0,C.jsx)(me.default,{children:e(()=>{c(null)})}):e})]})}var je=Tr;var eo=n(require("@mui/material/Link"),1);var ro=require("react/jsx-runtime");function Br(i){var a=i,{href:e,children:o}=a,r=g(a,["href","children"]);return(0,ro.jsx)(eo.default,f(p({component:"a",href:e,target:"_blank",rel:"noopener noreferrer"},r),{children:o}))}var oo=Br;var to=n(require("@mui/icons-material/CloudUpload"),1),no=n(require("@mui/material/Button"),1),ce=require("@mui/material/styles"),io=require("react");var A=require("react/jsx-runtime"),ao={PDF:"application/pdf",PNG:"image/png",JPEG:"image/jpeg",JPG:"image/jpg",XLSX:"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",DOCX:"application/vnd.openxmlformats-officedocument.wordprocessingml.document",MP3:"audio/mp3",MP4:"video/mp4",WAV:"audio/wav"},Rr=(0,ce.styled)("input")({clip:"rect(0 0 0 0)",clipPath:"inset(50%)",height:1,overflow:"hidden",position:"absolute",bottom:0,left:0,whiteSpace:"nowrap",width:1}),Dr=(0,ce.styled)("div")(({theme:e,$dragging:o})=>({border:"2px dashed",borderColor:o?e.palette.primary.main:"#ccc",backgroundColor:o?e.palette.action.hover:"transparent",borderRadius:8,padding:"1.5rem",textAlign:"center",transition:"border-color 0.2s",cursor:"pointer"}));function Nr(s){var d=s,{onFileInput:e,label:o="Upload files",multiple:r,accept:i,useDropzone:a}=d,t=g(d,["onFileInput","label","multiple","accept","useDropzone"]);var u;let[m,c]=(0,io.useState)(!1),l=(0,A.jsxs)(no.default,f(p({variant:"contained",component:"label","aria-label":"File upload button",onKeyDown:P=>{var h;(P.key==="Enter"||P.key===" ")&&(P.preventDefault(),(h=document.getElementById("file-input"))==null||h.click())}},t),{startIcon:(u=t.startIcon)!=null?u:(0,A.jsx)(to.default,{}),children:[o,(0,A.jsx)(Rr,{id:"file-input",type:"file",onChange:P=>{var w;let h=P.target;e(Array.from((w=h.files)!=null?w:[])),h.value=""},multiple:r,accept:i==null?void 0:i.join(","),disabled:t.disabled})]}));return a?(0,A.jsx)(Dr,{$dragging:m,onDragOver:P=>{P.preventDefault(),!t.disabled&&c(!0)},onDragLeave:P=>{P.preventDefault(),c(!1)},onDrop:P=>{var w;if(P.preventDefault(),c(!1),t.disabled)return;let h=Array.from((w=P.dataTransfer.files)!=null?w:[]);e(h)},children:l}):l}var j=Nr;var po=n(require("@mui/icons-material/Delete"),1),so=n(require("@mui/material/Box"),1),mo=n(require("@mui/material/IconButton"),1),lo=n(require("@mui/material/List"),1),co=n(require("@mui/material/ListItem"),1),uo=n(require("@mui/material/ListItemText"),1);var L=require("react/jsx-runtime");function Mr(i){var a=i,{files:e,setFiles:o}=a,r=g(a,["files","setFiles"]);function t(d){o(m=>[...m,...d])}let s=f(p({},r),{onFileInput:t});return(s==null?void 0:s.multiple)===void 0&&(s.multiple=!0),(0,L.jsxs)(so.default,{children:[(0,L.jsx)(j,p({},s)),(0,L.jsx)(lo.default,{children:e.map(d=>(0,L.jsx)(co.default,{secondaryAction:(0,L.jsx)(mo.default,{"aria-label":"Delete",edge:"end",onClick:()=>{o(m=>m.filter(c=>c!==d))},children:(0,L.jsx)(po.default,{})}),children:(0,L.jsx)(uo.default,{primary:d.name})},d.name))})]})}var fo=Mr;var xo=n(require("@mui/material/Box"),1),Po=n(require("@mui/material/Popover"),1),ee=require("react");var X=require("react/jsx-runtime");function Er({icon:e,onOpen:o,onClose:r,iconProps:i,children:a}){let[t,s]=(0,ee.useState)(null),d=!!t,m=(0,ee.useId)();function c(u){s(u.currentTarget),o&&o()}function l(){s(null),r&&r()}return(0,X.jsxs)(xo.default,{children:[(0,X.jsx)(e,p({"aria-owns":d?m:void 0,"aria-haspopup":"true",onMouseEnter:c,onMouseLeave:l},i)),(0,X.jsx)(Po.default,{id:m,sx:{pointerEvents:"none"},open:d,anchorEl:t,anchorOrigin:{vertical:"bottom",horizontal:"left"},transformOrigin:{vertical:"top",horizontal:"left"},onClose:l,disableRestoreFocus:!0,children:a})]})}var go=Er;var ho=n(require("@mui/material/Link"),1),yo=require("react-router-dom");var vo=require("react/jsx-runtime");function Ar(i){var a=i,{to:e,children:o}=a,r=g(a,["to","children"]);return(0,vo.jsx)(ho.default,f(p({component:yo.Link,to:e},r),{children:o}))}var oe=Ar;var So=n(require("@mui/material/ListItemButton"),1);var bo=require("react/jsx-runtime");function Or(r){var i=r,{children:e}=i,o=g(i,["children"]);return(0,bo.jsx)(So.default,f(p({component:oe},o),{children:e}))}var wo=Or;var Lo=n(require("@mui/material/CircularProgress"),1);var O=require("react/jsx-runtime");function Fr(a){var t=a,{children:e,onUndefined:o,loadingComponent:r=(0,O.jsx)(Lo.default,{})}=t,i=g(t,["children","onUndefined","loadingComponent"]);return(0,O.jsxs)(Y,f(p({loadingComponent:r},i),{children:[(0,O.jsx)(Q,{}),(0,O.jsx)(q,{onUndefined:o,children:e})]}))}var Io=Fr;var ko=n(require("@mui/material/BottomNavigation"),1),Co=n(require("@mui/material/BottomNavigationAction"),1),To=n(require("@mui/material/Box"),1),Bo=n(require("@mui/material/Paper"),1),Ro=require("react"),Do=require("react-router-dom");var I=require("react/jsx-runtime");function Wr({children:e,navItems:o}){let[r,i]=(0,Ro.useState)("");return(0,I.jsxs)(I.Fragment,{children:[(0,I.jsx)(To.default,{sx:{paddingBottom:7},children:e}),(0,I.jsx)(Bo.default,{sx:{position:"fixed",bottom:0,left:0,right:0},children:(0,I.jsx)(ko.default,{showLabels:!0,value:r,onChange:(a,t)=>{i(t)},children:o.map(a=>(0,I.jsx)(Co.default,f(p({},a),{component:Do.Link}),a.value))})})]})}var No=Wr;var ue=require("@alextheman/utility"),Oo=n(require("@mui/icons-material/ChevronLeft"),1),Fo=n(require("@mui/icons-material/ChevronRight"),1),Wo=n(require("@mui/icons-material/Menu"),1),zo=n(require("@mui/material/AppBar"),1),fe=n(require("@mui/material/Box"),1),Ho=n(require("@mui/material/CssBaseline"),1),xe=n(require("@mui/material/Divider"),1),Uo=n(require("@mui/material/Drawer"),1),Pe=n(require("@mui/material/IconButton"),1),Vo=n(require("@mui/material/List"),1),Xo=n(require("@mui/material/ListItem"),1),$o=n(require("@mui/material/ListItemButton"),1),_o=n(require("@mui/material/ListItemIcon"),1),Go=n(require("@mui/material/ListItemText"),1),F=require("@mui/material/styles"),Jo=n(require("@mui/material/Toolbar"),1),re=n(require("@mui/material/Typography"),1),ne=require("react"),ie=require("react-router-dom");var x=require("react/jsx-runtime"),te=240;function Mo(e){return{width:te,transition:e.transitions.create("width",{easing:e.transitions.easing.sharp,duration:e.transitions.duration.enteringScreen}),overflowX:"hidden"}}function Eo(e){return{transition:e.transitions.create("width",{easing:e.transitions.easing.sharp,duration:e.transitions.duration.leavingScreen}),overflowX:"hidden",width:`calc(${e.spacing(7)} + 1px)`,[e.breakpoints.up("sm")]:{width:`calc(${e.spacing(8)} + 1px)`}}}var Ao=(0,F.styled)("div")(({theme:e})=>p({display:"flex",alignItems:"center",justifyContent:"flex-end",padding:e.spacing(0,1)},e.mixins.toolbar)),zr=(0,F.styled)(zo.default,{shouldForwardProp:e=>e!=="open"})(({theme:e})=>({zIndex:e.zIndex.drawer+1,transition:e.transitions.create(["width","margin"],{easing:e.transitions.easing.sharp,duration:e.transitions.duration.leavingScreen}),variants:[{props:({open:o})=>o,style:{marginLeft:te,width:`calc(100% - ${te}px)`,transition:e.transitions.create(["width","margin"],{easing:e.transitions.easing.sharp,duration:e.transitions.duration.enteringScreen})}}]})),Hr=(0,F.styled)(Uo.default,{shouldForwardProp:e=>e!=="open"})(({theme:e})=>({width:te,flexShrink:0,whiteSpace:"nowrap",boxSizing:"border-box",variants:[{props:({open:o})=>o,style:f(p({},Mo(e)),{"& .MuiDrawer-paper":Mo(e)})},{props:({open:o})=>!o,style:f(p({},Eo(e)),{"& .MuiDrawer-paper":Eo(e)})}]}));function Ur({title:e,navItems:o,children:r,headerElements:i}){let a=(0,F.useTheme)(),[t,s]=(0,ne.useState)(!0),d=(0,ie.useLocation)();function m(){s(!0)}function c(){s(!1)}return(0,x.jsxs)(fe.default,{sx:{display:"flex"},children:[(0,x.jsx)(Ho.default,{}),(0,x.jsx)(zr,{position:"fixed",open:t,children:(0,x.jsxs)(Jo.default,{children:[(0,x.jsx)(Pe.default,{color:"inherit","aria-label":"open drawer",onClick:m,edge:"start",sx:[{marginRight:5},t&&{display:"none"}],children:(0,x.jsx)(Wo.default,{})}),(0,x.jsx)(re.default,{variant:"h6",noWrap:!0,component:"div",children:e}),i]})}),(0,x.jsxs)(Hr,{variant:"permanent",open:t,children:[(0,x.jsx)(Ao,{children:(0,x.jsx)(Pe.default,{onClick:c,children:a.direction==="rtl"?(0,x.jsx)(Fo.default,{}):(0,x.jsx)(Oo.default,{})})}),(0,x.jsx)(xe.default,{}),o.map(l=>(0,x.jsxs)(ne.Fragment,{children:[(0,x.jsxs)(Vo.default,{children:[(0,x.jsx)(re.default,{variant:t?"h5":"h6",paddingLeft:t?2:1,children:t?l.category:(0,ue.truncate)(l.category,4)}),l.options.map(u=>(0,x.jsx)(Xo.default,{disablePadding:!0,sx:{display:"block"},children:(0,x.jsxs)($o.default,{sx:[{minHeight:48,px:2.5},t?{justifyContent:"initial"}:{justifyContent:"center"}],component:ie.Link,to:u.to,selected:d.pathname===u.to,children:[(0,x.jsx)(_o.default,{sx:[{minWidth:0,justifyContent:"center"},t?{mr:3}:{mr:"auto"}],children:u.icon?u.icon:t?null:(0,x.jsx)(re.default,{children:(0,ue.truncate)(u.label,4)})}),(0,x.jsx)(Go.default,{primary:u.label,sx:[t?{opacity:1}:{opacity:0}]})]})},u.to))]}),(0,x.jsx)(xe.default,{})]},l.category))]}),(0,x.jsxs)(fe.default,{component:"main",sx:{flexGrow:1,p:3},children:[(0,x.jsx)(Ao,{}),r]})]})}var Ko=Ur;var Yo=n(require("@mui/material/Typography"),1);var $=require("react/jsx-runtime");function Vr(i){var a=i,{text:e,sx:o}=a,r=g(a,["text","sx"]);return(0,$.jsx)($.Fragment,{children:e.split(`
2
+ `).map((t,s)=>(0,$.jsx)(Yo.default,f(p({sx:p({margin:1},o)},r),{children:t}),s))})}var qo=Vr;var ae=n(require("@mui/material/Box"),1),ge=n(require("@mui/material/Typography"),1),Qo=require("common-tags"),T=require("react-live");var v=require("react/jsx-runtime");function Xr({code:e,scope:o,previewStyles:r,noInline:i,enableTypeScript:a,language:t}){let{mode:s}=M(),d={backgroundColor:s==="dark"?"black":"white",border:.3,borderRadius:1,padding:2,borderColor:"darkgray"},m=r?p(p({},d),r):p({},d);return(0,v.jsx)(ae.default,{sx:{borderRadius:1,border:.5,padding:2},children:(0,v.jsxs)(T.LiveProvider,{code:(0,Qo.stripIndent)(e),scope:o,noInline:i,enableTypeScript:a,language:t,children:[(0,v.jsx)(ge.default,{variant:"h5",children:"Code"}),(0,v.jsx)(ae.default,{sx:{border:.3,borderRadius:.3,borderColor:"darkgray"},children:(0,v.jsx)(T.LiveEditor,{})}),(0,v.jsx)("br",{}),(0,v.jsx)(ge.default,{variant:"h5",children:"Result"}),(0,v.jsxs)(ae.default,{sx:m,children:[(0,v.jsx)(T.LivePreview,{}),(0,v.jsx)(T.LiveError,{})]})]})})}var Zo=Xr;var jo=require("@alextheman/utility"),er=n(require("@mui/material/Skeleton"),1),or=n(require("@mui/material/TableCell"),1),rr=n(require("@mui/material/TableRow"),1),pe=require("react/jsx-runtime");function $r({columns:e}){return(0,pe.jsx)(rr.default,{children:(0,jo.fillArray)(o=>(0,pe.jsx)(or.default,{children:(0,pe.jsx)(er.default,{})},o),e)})}var tr=$r;var nr=n(require("@mui/material/Button"),1),ir=require("react-hook-form");var pr=require("react/jsx-runtime");function _r(i){var a=i,{disableClean:e,label:o}=a,r=g(a,["disableClean","label"]);let{formState:{disabled:t,isDirty:s,isSubmitting:d}}=(0,ir.useFormContext)();return(0,pr.jsx)(nr.default,f(p({color:"primary",disabled:r.disabled||e&&!s||t,loading:d,type:"submit",variant:"contained"},r),{children:o}))}var ar=_r;var he=n(require("@mui/material/Box"),1),sr=require("@mui/material/styles"),dr=n(require("@mui/material/Switch"),1);var W=require("react/jsx-runtime"),Gr=(0,sr.styled)(dr.default)(()=>({padding:8,"& .MuiSwitch-track":{borderRadius:11,"&::before, &::after":{content:'""',position:"absolute",top:"50%",transform:"translateY(-50%)",fontSize:16,width:28,height:28}}}));function Jr(t){var s=t,{checkedIcon:e,checkedIconStyles:o,uncheckedIcon:r,uncheckedIconStyles:i}=s,a=g(s,["checkedIcon","checkedIconStyles","uncheckedIcon","uncheckedIconStyles"]);let d={borderRadius:"50%",borderColor:"white",backgroundColor:"white",display:"flex",alignItems:"center",justifyContent:"center",padding:.25},m={color:"black",maxWidth:16.5,maxHeight:16.5};return(0,W.jsx)(Gr,p({checkedIcon:(0,W.jsx)(he.default,{sx:d,children:(0,W.jsx)(e,{style:p(p({},m),o)})}),icon:(0,W.jsx)(he.default,{sx:d,children:(0,W.jsx)(r,{style:p(p({},m),i)})})},a))}var mr=Jr;var D=require("react");function Kr(e){let[o,r]=(0,D.useState)(()=>{let t=window.location.hash.replace("#","");return e&&t===""?e:t}),i=(0,D.useCallback)(()=>{let t=window.location.hash.replace("#","");r(e&&t===""?e:t)},[r,e]);(0,D.useEffect)(()=>(window.addEventListener("hashchange",i),()=>{window.removeEventListener("hashchange",i)}),[i]);let a=(0,D.useCallback)(t=>{let s=typeof t=="function"?t(o):t;s!==o&&(window.location.hash=s)},[o]);return[o,a]}var lr=Kr;0&&(module.exports={CollapsableItem,DarkModeToggle,DropdownMenu,ExternalLink,FileInput,FileInputList,FileType,IconWithPopover,InternalLink,ListItemInternalLink,Loader,LoaderData,LoaderError,LoaderProvider,ModeProvider,NavigationBottom,NavigationDrawer,PopoverText,ReactPlayground,ScreenSizeProvider,SkeletonRow,SnackbarProvider,SubmitButton,SwitchWithIcons,useHash,useLoader,useMode,useScreenSize,useSnackbar});
3
3
  //# sourceMappingURL=index.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/components/CollapsableItem.tsx","../src/components/DarkModeToggle.tsx","../src/providers/LoaderProvider/index.tsx","../src/providers/LoaderProvider/LoaderData.tsx","../src/providers/LoaderProvider/LoaderError.tsx","../src/providers/ModeProvider.tsx","../src/providers/ScreenSizeProvider.tsx","../src/providers/SnackbarProvider.tsx","../src/components/DropdownMenu.tsx","../src/components/ExternalLink.tsx","../src/components/FileInput.tsx","../src/components/FileInputList.tsx","../src/components/IconWithPopover.tsx","../src/components/InternalLink.tsx","../src/components/ListItemInternalLink.tsx","../src/components/Loader.tsx","../src/components/NavigationBottom.tsx","../src/components/NavigationDrawer.tsx","../src/components/PopoverText.tsx","../src/components/ReactPlayground.tsx","../src/components/SubmitButton.tsx","../src/components/SwitchWithIcons.tsx","../src/hooks/useHash.ts"],"sourcesContent":["export * from \"src/components\";\nexport * from \"src/hooks\";\nexport * from \"src/providers\";\n","import type { CollapseProps } from \"@mui/material/Collapse\";\nimport type { SxProps } from \"@mui/material/styles\";\nimport type { ElementType, ReactNode } from \"react\";\n\nimport ArrowDropDown from \"@mui/icons-material/ArrowDropDown\";\nimport ArrowDropUp from \"@mui/icons-material/ArrowDropUp\";\nimport Box from \"@mui/material/Box\";\nimport ButtonBase from \"@mui/material/ButtonBase\";\nimport Collapse from \"@mui/material/Collapse\";\nimport { useEffect, useState } from \"react\";\n\nexport interface CollapsableItemProps {\n isInitiallyOpen?: boolean;\n onOpen?: () => void;\n onClose?: () => void;\n children: ReactNode;\n buttonStyles?: SxProps;\n buttonContents: ReactNode;\n buttonComponent?: ElementType;\n openIcon?: ReactNode;\n closedIcon?: ReactNode;\n collapseProps?: Omit<CollapseProps, \"in\">;\n useDefaultStyling?: boolean;\n}\n\nfunction CollapsableItem({\n isInitiallyOpen,\n onOpen,\n onClose,\n children,\n buttonStyles,\n buttonContents,\n buttonComponent: ButtonComponent = ButtonBase,\n collapseProps,\n openIcon = <ArrowDropUp />,\n closedIcon = <ArrowDropDown />,\n useDefaultStyling = ButtonComponent === ButtonBase ? true : false,\n}: CollapsableItemProps) {\n const [isItemOpen, setIsItemOpen] = useState<boolean>(!!isInitiallyOpen);\n\n useEffect(() => {\n if (isItemOpen && onOpen) {\n onOpen();\n } else if (!isItemOpen && onClose) {\n onClose();\n }\n }, [isItemOpen]);\n\n return (\n <Box>\n <ButtonComponent\n onClick={() => {\n setIsItemOpen((previouslyOpen) => {\n return !previouslyOpen;\n });\n }}\n sx={\n useDefaultStyling\n ? {\n width: \"100%\",\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n paddingY: 1.5,\n paddingX: 2,\n textAlign: \"center\",\n \"&:hover\":\n ButtonComponent === ButtonBase ? { backgroundColor: \"action.hover\" } : null,\n ...buttonStyles,\n }\n : buttonStyles\n }\n aria-expanded={isItemOpen}\n >\n {buttonContents}\n {isItemOpen ? openIcon : closedIcon}\n </ButtonComponent>\n <Collapse in={isItemOpen} {...collapseProps}>\n {children}\n </Collapse>\n </Box>\n );\n}\n\nexport default CollapsableItem;\n","import DarkMode from \"@mui/icons-material/DarkMode\";\nimport LightMode from \"@mui/icons-material/LightMode\";\nimport IconButton from \"@mui/material/IconButton\";\nimport Tooltip from \"@mui/material/Tooltip\";\n\nimport { useMode } from \"src/providers\";\n\nfunction DarkModeToggle() {\n const { mode, toggleMode } = useMode();\n\n return (\n <Tooltip title={`Enable ${mode === \"dark\" ? \"light\" : \"dark\"} mode`}>\n <IconButton\n sx={{ marginLeft: \"auto\" }}\n onClick={toggleMode}\n aria-label={`Enable ${mode === \"dark\" ? \"light\" : \"dark\"} mode`}\n >\n {mode === \"dark\" ? <LightMode /> : <DarkMode />}\n </IconButton>\n </Tooltip>\n );\n}\n\nexport default DarkModeToggle;\n","import type { ReactNode } from \"react\";\n\nimport CircularProgress from \"@mui/material/CircularProgress\";\nimport { createContext, useContext } from \"react\";\n\ninterface BaseProps<T> {\n isLoading: boolean;\n data?: T;\n loadingComponent?: ReactNode;\n}\n\ninterface PropsWithNoError<T> extends BaseProps<T> {\n error?: never;\n errorComponent?: never;\n}\n\ninterface PropsWithError<T> extends BaseProps<T> {\n error: unknown;\n errorComponent?: ReactNode | ((error: unknown) => ReactNode);\n}\n\nexport type LoaderContextValue<T> = PropsWithNoError<T> | PropsWithError<T>;\nexport type LoaderProviderProps<T> = LoaderContextValue<T> & { children: ReactNode };\n\nconst LoaderContext = createContext<LoaderContextValue<unknown> | undefined>(undefined);\nexport function useLoader<T>(): LoaderContextValue<T> {\n const context = useContext(LoaderContext);\n if (!context) {\n throw new Error(\"LOADER_CONTEXT_NOT_SET\");\n }\n return context as LoaderContextValue<T>;\n}\n\nfunction LoaderProvider<T>({\n children,\n loadingComponent = <CircularProgress />,\n ...contextProps\n}: LoaderProviderProps<T>) {\n return (\n <LoaderContext.Provider value={{ loadingComponent, ...contextProps }}>\n {children}\n </LoaderContext.Provider>\n );\n}\n\nexport default LoaderProvider;\n","import type { DisallowUndefined } from \"@alextheman/utility\";\nimport type { ReactNode } from \"react\";\n\nimport { useRef } from \"react\";\n\nimport { useLoader } from \"src/providers/LoaderProvider\";\n\nexport interface LoaderDataProps<T> {\n children: ReactNode | ((data: DisallowUndefined<T>) => ReactNode);\n loadingComponent?: ReactNode;\n onUndefined?: () => ReactNode | void;\n showOnError?: boolean;\n}\n\nfunction LoaderData<T>({\n children,\n loadingComponent,\n onUndefined,\n showOnError,\n}: LoaderDataProps<T>) {\n const { isLoading, data, loadingComponent: defaultLoadingComponent, error } = useLoader<T>();\n const warnedOnce = useRef(false);\n\n if (isLoading) {\n return <>{loadingComponent ?? defaultLoadingComponent}</>;\n }\n\n if (error && !showOnError) {\n return <></>;\n }\n\n // No need to also check for isLoading === true here, since this was covered earlier\n if (data === undefined) {\n if (!warnedOnce.current) {\n console.warn(\n \"Data is undefined after loading. This could either be an issue with the query or you have not passed in the data to LoaderProvider. Please double-check that you have provided data.\",\n );\n warnedOnce.current = true;\n }\n\n if (onUndefined) {\n const result = onUndefined();\n return result ?? <></>;\n }\n return <></>;\n }\n\n return typeof children === \"function\" ? (\n <>{children(data as DisallowUndefined<T>)}</>\n ) : (\n <>{children}</>\n );\n}\n\nexport default LoaderData;\n","import Alert from \"@mui/material/Alert\";\n\nimport { useLoader } from \"src/providers/LoaderProvider\";\n\nfunction LoaderError() {\n const { error, errorComponent } = useLoader();\n\n if (error) {\n if (typeof errorComponent === \"function\") {\n return errorComponent(error);\n }\n if (errorComponent) {\n return <>{errorComponent}</>;\n }\n return (\n <Alert severity=\"error\">\n {(error as Error)?.message ?? \"An unknown error has occured. Please try again later.\"}\n </Alert>\n );\n }\n\n return <></>;\n}\n\nexport default LoaderError;\n","import type { ReactNode } from \"react\";\n\nimport CssBaseline from \"@mui/material/CssBaseline\";\nimport { createTheme, ThemeProvider } from \"@mui/material/styles\";\nimport { createContext, useContext, useMemo, useState } from \"react\";\n\nconst ModeContext = createContext({\n toggleMode: () => {},\n mode: \"dark\",\n});\n\nexport function useMode() {\n return useContext(ModeContext);\n}\n\nexport type Mode = \"light\" | \"dark\";\n\nexport interface ModeProviderProps {\n children: ReactNode;\n mode?: Mode;\n}\n\nfunction ModeProvider({ children, mode: modeProp = \"dark\" }: ModeProviderProps) {\n const [mode, setMode] = useState<Mode>(modeProp);\n\n const theme = useMemo(() => {\n return createTheme({\n palette: {\n mode,\n },\n });\n }, [mode]);\n\n return (\n <ModeContext.Provider\n value={{\n mode,\n toggleMode: () => {\n setMode((prev) => {\n return prev === \"light\" ? \"dark\" : \"light\";\n });\n },\n }}\n >\n <ThemeProvider theme={theme}>\n <CssBaseline />\n {children}\n </ThemeProvider>\n </ModeContext.Provider>\n );\n}\n\nexport default ModeProvider;\n","import type { ReactNode } from \"react\";\n\nimport { createContext, useContext, useEffect, useState } from \"react\";\n\nexport interface ScreenSizeProps {\n children: ReactNode;\n largeScreenWidth?: number;\n largeScreenHeight?: number;\n}\n\nexport interface ScreenSizeContextValue {\n isLargeScreen: boolean;\n windowWidth: number;\n windowHeight: number;\n}\n\nconst ScreenSizeContext = createContext<ScreenSizeContextValue>({\n windowWidth: 0,\n windowHeight: 0,\n isLargeScreen: false,\n});\n\nexport function useScreenSize() {\n return useContext(ScreenSizeContext);\n}\n\nfunction ScreenSizeProvider({ children, largeScreenWidth, largeScreenHeight }: ScreenSizeProps) {\n const [windowWidth, setWindowWidth] = useState<number>(window.innerWidth);\n const [windowHeight, setWindowHeight] = useState<number>(window.innerHeight);\n\n function largeScreenCondition(\n width: number,\n height: number,\n largeScreenWidth: number = 669,\n largeScreenHeight: number = 600,\n ): boolean {\n return width > largeScreenWidth && height > largeScreenHeight;\n }\n\n const [isLargeScreen, setIsLargeScreen] = useState<boolean>(\n largeScreenCondition(\n window.innerWidth,\n window.innerHeight,\n largeScreenWidth,\n largeScreenHeight,\n ),\n );\n\n useEffect(() => {\n function setDimensions() {\n setWindowWidth(window.innerWidth);\n setWindowHeight(window.innerHeight);\n }\n setDimensions();\n window.addEventListener(\"resize\", setDimensions);\n return () => {\n window.removeEventListener(\"resize\", setDimensions);\n };\n }, []);\n\n useEffect(() => {\n setIsLargeScreen(\n largeScreenCondition(windowWidth, windowHeight, largeScreenWidth, largeScreenHeight),\n );\n }, [windowWidth, windowHeight, largeScreenWidth, largeScreenHeight]);\n\n return (\n <ScreenSizeContext.Provider\n value={{\n isLargeScreen,\n windowWidth,\n windowHeight,\n }}\n >\n {children}\n </ScreenSizeContext.Provider>\n );\n}\n\nexport default ScreenSizeProvider;\n","import type { AlertColor } from \"@mui/material/Alert\";\nimport type { ReactNode } from \"react\";\n\nimport { wait } from \"@alextheman/utility\";\nimport Alert from \"@mui/material/Alert\";\nimport Snackbar from \"@mui/material/Snackbar\";\nimport { createContext, useContext, useState } from \"react\";\n\nexport interface SnackbarProviderProps {\n children: ReactNode;\n autoHideDuration?: number;\n}\n\nexport interface SnackbarContextValue {\n addSnackbar: (message: string, severity?: AlertColor, duration?: number) => void;\n}\n\nconst SnackbarContext = createContext<SnackbarContextValue | undefined>(undefined);\nexport function useSnackbar() {\n const context = useContext(SnackbarContext);\n if (!context) {\n throw new Error(\"SNACKBAR_CONTEXT_NOT_SET\");\n }\n return context;\n}\n\nfunction SnackbarProvider({ children, autoHideDuration = 5000 }: SnackbarProviderProps) {\n const [open, setOpen] = useState<boolean>(false);\n const [autoHideDurationState, setAutoHideDurationState] = useState<number>(autoHideDuration);\n const [message, setMessage] = useState<string>(\"\");\n const [severity, setSeverity] = useState<AlertColor>(\"info\");\n\n function addSnackbar(message: string, severity?: AlertColor, duration?: number) {\n setOpen(true);\n setAutoHideDurationState(duration ?? autoHideDuration);\n setSeverity(severity ?? \"info\");\n setMessage(message);\n }\n\n async function handleClose() {\n setOpen(false);\n // Wait for 0.2 seconds to ensure that the message is only cleared after the snackbar is fully closed.\n // This prevents potential weird flickering that may occur if they happen synchronously.\n await wait(0.2);\n setMessage(\"\");\n }\n\n return (\n <SnackbarContext.Provider value={{ addSnackbar }}>\n <Snackbar open={open} autoHideDuration={autoHideDurationState} onClose={handleClose}>\n <Alert onClose={handleClose} severity={severity}>\n {message}\n </Alert>\n </Snackbar>\n {children}\n </SnackbarContext.Provider>\n );\n}\n\nexport default SnackbarProvider;\n","import type { ButtonOwnProps } from \"@mui/material/Button\";\nimport type { ElementType, MouseEvent as ReactMouseEvent, ReactNode } from \"react\";\n\nimport ArrowDropDown from \"@mui/icons-material/ArrowDropDown\";\nimport ArrowDropUp from \"@mui/icons-material/ArrowDropUp\";\nimport Box from \"@mui/material/Box\";\nimport MUIButton from \"@mui/material/Button\";\nimport Menu from \"@mui/material/Menu\";\nimport { useEffect, useMemo, useState } from \"react\";\n\nexport interface DropdownMenuProps {\n children: ReactNode | ((closeMenu: () => void) => ReactNode);\n buttonChildren?: ReactNode;\n button?: ElementType;\n // Omit endIcon because the built-in isOpenIcon and isClosedIcon gives more control.\n // onClick is also omitted because that controls anchorElement, and the onOpen/onClose functions can be used instead.\n buttonProps?: Omit<ButtonOwnProps, \"onClick\" | \"endIcon\">;\n isOpenIcon?: ReactNode;\n isClosedIcon?: ReactNode;\n onOpen?: () => void;\n onClose?: () => void;\n}\n\nfunction DropdownMenu({\n children,\n button: Button = MUIButton,\n buttonChildren = \"Menu\",\n buttonProps: incomingButtonProps,\n isOpenIcon = <ArrowDropUp />,\n isClosedIcon = <ArrowDropDown />,\n onOpen,\n onClose,\n}: DropdownMenuProps) {\n const [anchorElement, setAnchorElement] = useState<HTMLElement | null>(null);\n const isDropdownOpen = useMemo(() => {\n return !!anchorElement;\n }, [anchorElement]);\n\n const buttonProps: Record<string, unknown> = {\n ...incomingButtonProps,\n onClick: (event: ReactMouseEvent<HTMLElement>) => {\n setAnchorElement(event.currentTarget);\n },\n \"aria-controls\": isDropdownOpen ? \"dropdown-menu\" : undefined,\n \"aria-haspopup\": \"true\",\n \"aria-expanded\": isDropdownOpen,\n };\n\n if (Button === MUIButton) {\n buttonProps.endIcon = isDropdownOpen ? isOpenIcon : isClosedIcon;\n }\n\n useEffect(() => {\n if (isDropdownOpen && onOpen) {\n onOpen();\n } else if (!isDropdownOpen && onClose) {\n onClose();\n }\n }, [isDropdownOpen, onOpen, onClose]);\n\n return (\n <Box>\n <Button {...buttonProps}>{buttonChildren}</Button>\n <Menu\n id=\"dropdown-menu\"\n anchorEl={anchorElement}\n open={isDropdownOpen}\n onClose={() => {\n setAnchorElement(null);\n }}\n >\n {typeof children === \"function\" ? (\n <Box>\n {children(() => {\n setAnchorElement(null);\n })}\n </Box>\n ) : (\n children\n )}\n </Menu>\n </Box>\n );\n}\n\nexport default DropdownMenu;\n","import type { LinkProps } from \"@mui/material/Link\";\nimport type { ReactNode } from \"react\";\n\nimport MUILink from \"@mui/material/Link\";\n\nexport interface ExternalLinkProps extends Omit<LinkProps, \"to\" | \"target\" | \"rel\"> {\n href: `https://${string}` | `http://${string}`;\n to?: never;\n children: ReactNode;\n}\n\nfunction ExternalLink({ href, children, ...linkProps }: ExternalLinkProps) {\n return (\n <MUILink component={\"a\"} href={href} target=\"_blank\" rel=\"noopener noreferrer\" {...linkProps}>\n {children}\n </MUILink>\n );\n}\n\nexport default ExternalLink;\n","import type { ButtonOwnProps } from \"@mui/material/Button\";\n\nimport CloudUploadIcon from \"@mui/icons-material/CloudUpload\";\nimport Button from \"@mui/material/Button\";\nimport { styled } from \"@mui/material/styles\";\nimport { useState } from \"react\";\n\nexport const FileType = {\n PDF: \"application/pdf\",\n PNG: \"image/png\",\n JPEG: \"image/jpeg\",\n JPG: \"image/jpg\",\n XLSX: \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\",\n DOCX: \"application/vnd.openxmlformats-officedocument.wordprocessingml.document\",\n MP3: \"audio/mp3\",\n MP4: \"video/mp4\",\n WAV: \"audio/wav\",\n} as const;\n// eslint-disable-next-line @typescript-eslint/no-redeclare\nexport type FileType = (typeof FileType)[keyof typeof FileType];\n\nconst VisuallyHiddenInput = styled(\"input\")({\n clip: \"rect(0 0 0 0)\",\n clipPath: \"inset(50%)\",\n height: 1,\n overflow: \"hidden\",\n position: \"absolute\",\n bottom: 0,\n left: 0,\n whiteSpace: \"nowrap\",\n width: 1,\n});\n\nconst Dropzone = styled(\"div\")<{ $dragging: boolean }>(({ theme, $dragging }) => {\n return {\n border: \"2px dashed\",\n borderColor: $dragging ? theme.palette.primary.main : \"#ccc\",\n backgroundColor: $dragging ? theme.palette.action.hover : \"transparent\",\n borderRadius: 8,\n padding: \"1.5rem\",\n textAlign: \"center\",\n transition: \"border-color 0.2s\",\n cursor: \"pointer\",\n };\n});\n\nexport interface FileInputProps extends ButtonOwnProps {\n onFileInput: (allowedFiles: File[]) => void;\n label?: string;\n multiple?: boolean;\n accept?: string[];\n useDropzone?: boolean;\n}\n\nfunction FileInput({\n onFileInput,\n label = \"Upload files\",\n multiple,\n accept,\n useDropzone,\n ...buttonProps\n}: FileInputProps) {\n const [isDragging, setIsDragging] = useState<boolean>(false);\n\n const fileInputButton = (\n <Button\n variant=\"contained\"\n component=\"label\"\n aria-label=\"File upload button\"\n onKeyDown={(event) => {\n if (event.key === \"Enter\" || event.key === \" \") {\n event.preventDefault();\n document.getElementById(\"file-input\")?.click();\n }\n }}\n {...buttonProps}\n startIcon={buttonProps.startIcon ?? <CloudUploadIcon />}\n >\n {label}\n <VisuallyHiddenInput\n id=\"file-input\"\n type=\"file\"\n onChange={(event) => {\n const input = event.target;\n onFileInput(Array.from(input.files ?? []));\n input.value = \"\";\n }}\n multiple={multiple}\n accept={accept?.join(\",\")}\n disabled={buttonProps.disabled}\n />\n </Button>\n );\n\n return useDropzone ? (\n <Dropzone\n $dragging={isDragging}\n onDragOver={(event) => {\n event.preventDefault();\n if (buttonProps.disabled) {\n return;\n }\n setIsDragging(true);\n }}\n onDragLeave={(event) => {\n event.preventDefault();\n setIsDragging(false);\n }}\n onDrop={(event) => {\n event.preventDefault();\n setIsDragging(false);\n if (buttonProps.disabled) {\n return;\n }\n const filesArray = Array.from(event.dataTransfer.files ?? []);\n onFileInput(filesArray);\n }}\n >\n {fileInputButton}\n </Dropzone>\n ) : (\n fileInputButton\n );\n}\n\nexport default FileInput;\n","import type { Dispatch, SetStateAction } from \"react\";\nimport type { FileInputProps } from \"src/components/FileInput\";\n\nimport DeleteIcon from \"@mui/icons-material/Delete\";\nimport Box from \"@mui/material/Box\";\nimport IconButton from \"@mui/material/IconButton\";\nimport List from \"@mui/material/List\";\nimport ListItem from \"@mui/material/ListItem\";\nimport ListItemText from \"@mui/material/ListItemText\";\n\nimport FileInput from \"src/components/FileInput\";\n\nexport interface FileInputListProps extends Omit<FileInputProps, \"onFileInput\"> {\n files: File[];\n setFiles: Dispatch<SetStateAction<File[]>>;\n}\n\nfunction FileInputList({ files, setFiles, ...fileInputProps }: FileInputListProps) {\n function onFileInput(newFiles: File[]) {\n setFiles((oldFiles) => {\n return [...oldFiles, ...newFiles];\n });\n }\n\n const newFileInputProps = { ...fileInputProps, onFileInput };\n if (newFileInputProps?.multiple === undefined) {\n newFileInputProps.multiple = true;\n }\n\n return (\n <Box>\n <FileInput {...newFileInputProps} />\n <List>\n {files.map((file) => {\n return (\n <ListItem\n key={file.name}\n secondaryAction={\n <IconButton\n aria-label=\"Delete\"\n edge=\"end\"\n onClick={() => {\n setFiles((oldFiles) => {\n return oldFiles.filter((fileToDelete) => {\n return fileToDelete !== file;\n });\n });\n }}\n >\n <DeleteIcon />\n </IconButton>\n }\n >\n <ListItemText primary={file.name} />\n </ListItem>\n );\n })}\n </List>\n </Box>\n );\n}\n\nexport default FileInputList;\n","import type { OverridableComponent } from \"@mui/material/OverridableComponent\";\nimport type { SvgIconTypeMap } from \"@mui/material/SvgIcon\";\nimport type { ElementType, MouseEvent as ReactMouseEvent, ReactNode } from \"react\";\n\nimport Box from \"@mui/material/Box\";\nimport Popover from \"@mui/material/Popover\";\nimport { useId, useState } from \"react\";\n\nexport interface IconWithPopoverProps {\n icon:\n | (OverridableComponent<SvgIconTypeMap<unknown, \"svg\">> & {\n muiName: string;\n })\n | ElementType;\n onOpen?: () => void;\n onClose?: () => void;\n iconProps?: SvgIconTypeMap<unknown, \"svg\">[\"props\"];\n children: ReactNode;\n}\n\nfunction IconWithPopover({\n icon: Icon,\n onOpen,\n onClose,\n iconProps,\n children,\n}: IconWithPopoverProps) {\n const [anchorElement, setAnchorElement] = useState<Element | null>(null);\n const isPopoverOpen = !!anchorElement;\n const popoverId = useId();\n\n function handleOpen(event: ReactMouseEvent<SVGSVGElement, MouseEvent>) {\n setAnchorElement(event.currentTarget);\n if (onOpen) {\n onOpen();\n }\n }\n\n function handleClose() {\n setAnchorElement(null);\n if (onClose) {\n onClose();\n }\n }\n\n return (\n <Box>\n <Icon\n aria-owns={isPopoverOpen ? popoverId : undefined}\n aria-haspopup=\"true\"\n onMouseEnter={handleOpen}\n onMouseLeave={handleClose}\n {...iconProps}\n />\n <Popover\n id={popoverId}\n sx={{ pointerEvents: \"none\" }}\n open={isPopoverOpen}\n anchorEl={anchorElement}\n anchorOrigin={{\n vertical: \"bottom\",\n horizontal: \"left\",\n }}\n transformOrigin={{\n vertical: \"top\",\n horizontal: \"left\",\n }}\n onClose={handleClose}\n disableRestoreFocus\n >\n {children}\n </Popover>\n </Box>\n );\n}\n\nexport default IconWithPopover;\n","import type { LinkProps } from \"@mui/material/Link\";\nimport type { ReactNode } from \"react\";\n\nimport MUILink from \"@mui/material/Link\";\nimport { Link as ReactDOMLink } from \"react-router-dom\";\n\nexport interface InternalLinkProps extends Omit<LinkProps, \"href\"> {\n to: `/${string}` | `~/${string}`;\n href?: never;\n children: ReactNode;\n}\n\nfunction InternalLink({ to, children, ...linkProps }: InternalLinkProps) {\n return (\n <MUILink component={ReactDOMLink} to={to} {...linkProps}>\n {children}\n </MUILink>\n );\n}\n\nexport default InternalLink;\n","import type { ListItemButtonProps } from \"@mui/material/ListItemButton\";\nimport type { ReactNode } from \"react\";\n\nimport ListItemButton from \"@mui/material/ListItemButton\";\n\nimport InternalLink from \"src/components/InternalLink\";\n\nexport interface ListItemInternalLinkProps extends Omit<ListItemButtonProps, \"href\"> {\n children: ReactNode;\n to: string;\n}\n\nfunction ListItemInternalLink({ children, ...listItemButtonProps }: ListItemInternalLinkProps) {\n return (\n <ListItemButton component={InternalLink} {...listItemButtonProps}>\n {children}\n </ListItemButton>\n );\n}\n\nexport default ListItemInternalLink;\n","import type { DisallowUndefined } from \"@alextheman/utility\";\nimport type { ReactNode } from \"react\";\nimport type { LoaderProviderProps } from \"src/providers\";\n\nimport CircularProgress from \"@mui/material/CircularProgress\";\n\nimport { LoaderError, LoaderProvider } from \"src/providers\";\nimport LoaderData from \"src/providers/LoaderProvider/LoaderData\";\n\nexport type LoaderProps<T> = Omit<LoaderProviderProps<T>, \"children\"> & {\n children: ReactNode | ((data: DisallowUndefined<T>) => ReactNode);\n onUndefined?: () => ReactNode | void;\n};\n\nfunction Loader<T>({\n children,\n onUndefined,\n loadingComponent = <CircularProgress />,\n ...loaderProviderProps\n}: LoaderProps<T>) {\n return (\n <LoaderProvider<T> loadingComponent={loadingComponent} {...loaderProviderProps}>\n <LoaderError />\n <LoaderData<T> onUndefined={onUndefined}>{children}</LoaderData>\n </LoaderProvider>\n );\n}\n\nexport default Loader;\n","import type { JSX, ReactNode } from \"react\";\n\nimport BottomNavigation from \"@mui/material/BottomNavigation\";\nimport BottomNavigationAction from \"@mui/material/BottomNavigationAction\";\nimport Box from \"@mui/material/Box\";\nimport Paper from \"@mui/material/Paper\";\nimport { useState } from \"react\";\nimport { Link } from \"react-router-dom\";\n\nexport interface NavItemBottom {\n value: string;\n label: string;\n icon?: JSX.Element;\n to: string;\n}\n\nexport interface NavigationBottomProps {\n children: ReactNode;\n navItems: NavItemBottom[];\n}\n\nfunction NavigationBottom({ children, navItems }: NavigationBottomProps) {\n const [value, setValue] = useState<string>(\"\");\n return (\n <>\n <Box sx={{ paddingBottom: 7 }}>{children}</Box>\n <Paper sx={{ position: \"fixed\", bottom: 0, left: 0, right: 0 }}>\n <BottomNavigation\n showLabels\n value={value}\n onChange={(_, value) => {\n setValue(value);\n }}\n >\n {navItems.map((item) => {\n return <BottomNavigationAction key={item.value} {...item} component={Link} />;\n })}\n </BottomNavigation>\n </Paper>\n </>\n );\n}\n\nexport default NavigationBottom;\n","import type { AppBarProps as MuiAppBarProps } from \"@mui/material/AppBar\";\nimport type { CSSObject, Theme } from \"@mui/material/styles\";\nimport type { ReactNode } from \"react\";\n\nimport { truncate } from \"@alextheman/utility\";\nimport ChevronLeftIcon from \"@mui/icons-material/ChevronLeft\";\nimport ChevronRightIcon from \"@mui/icons-material/ChevronRight\";\nimport MenuIcon from \"@mui/icons-material/Menu\";\nimport MuiAppBar from \"@mui/material/AppBar\";\nimport Box from \"@mui/material/Box\";\nimport CssBaseline from \"@mui/material/CssBaseline\";\nimport Divider from \"@mui/material/Divider\";\nimport MuiDrawer from \"@mui/material/Drawer\";\nimport IconButton from \"@mui/material/IconButton\";\nimport List from \"@mui/material/List\";\nimport ListItem from \"@mui/material/ListItem\";\nimport ListItemButton from \"@mui/material/ListItemButton\";\nimport ListItemIcon from \"@mui/material/ListItemIcon\";\nimport ListItemText from \"@mui/material/ListItemText\";\nimport { styled, useTheme } from \"@mui/material/styles\";\nimport Toolbar from \"@mui/material/Toolbar\";\nimport Typography from \"@mui/material/Typography\";\nimport { Fragment, useState } from \"react\";\nimport { Link, useLocation } from \"react-router-dom\";\n\nconst drawerWidth = 240;\n\nfunction openedMixin(theme: Theme): CSSObject {\n return {\n width: drawerWidth,\n transition: theme.transitions.create(\"width\", {\n easing: theme.transitions.easing.sharp,\n duration: theme.transitions.duration.enteringScreen,\n }),\n overflowX: \"hidden\",\n };\n}\n\nfunction closedMixin(theme: Theme): CSSObject {\n return {\n transition: theme.transitions.create(\"width\", {\n easing: theme.transitions.easing.sharp,\n duration: theme.transitions.duration.leavingScreen,\n }),\n overflowX: \"hidden\",\n width: `calc(${theme.spacing(7)} + 1px)`,\n [theme.breakpoints.up(\"sm\")]: {\n width: `calc(${theme.spacing(8)} + 1px)`,\n },\n };\n}\n\nconst DrawerHeader = styled(\"div\")(({ theme }) => {\n return {\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"flex-end\",\n padding: theme.spacing(0, 1),\n // necessary for content to be below app bar\n ...theme.mixins.toolbar,\n };\n});\n\ninterface AppBarProps extends MuiAppBarProps {\n open?: boolean;\n}\n\nconst AppBar = styled(MuiAppBar, {\n shouldForwardProp: (prop) => {\n return prop !== \"open\";\n },\n})<AppBarProps>(({ theme }) => {\n return {\n zIndex: theme.zIndex.drawer + 1,\n transition: theme.transitions.create([\"width\", \"margin\"], {\n easing: theme.transitions.easing.sharp,\n duration: theme.transitions.duration.leavingScreen,\n }),\n variants: [\n {\n props: ({ open }) => {\n return open;\n },\n style: {\n marginLeft: drawerWidth,\n width: `calc(100% - ${drawerWidth}px)`,\n transition: theme.transitions.create([\"width\", \"margin\"], {\n easing: theme.transitions.easing.sharp,\n duration: theme.transitions.duration.enteringScreen,\n }),\n },\n },\n ],\n };\n});\n\nconst Drawer = styled(MuiDrawer, {\n shouldForwardProp: (prop) => {\n return prop !== \"open\";\n },\n})(({ theme }) => {\n return {\n width: drawerWidth,\n flexShrink: 0,\n whiteSpace: \"nowrap\",\n boxSizing: \"border-box\",\n variants: [\n {\n props: ({ open }) => {\n return open;\n },\n style: {\n ...openedMixin(theme),\n \"& .MuiDrawer-paper\": openedMixin(theme),\n },\n },\n {\n props: ({ open }) => {\n return !open;\n },\n style: {\n ...closedMixin(theme),\n \"& .MuiDrawer-paper\": closedMixin(theme),\n },\n },\n ],\n };\n});\n\nexport interface NavMenuItem {\n category: string;\n options: {\n label: string;\n to: string;\n icon?: ReactNode;\n }[];\n}\n\nexport interface NavigationDrawerProps {\n title: string;\n navItems: NavMenuItem[];\n headerElements?: ReactNode;\n children: ReactNode;\n}\n\nfunction NavigationDrawer({ title, navItems, children, headerElements }: NavigationDrawerProps) {\n const theme = useTheme();\n const [open, setOpen] = useState(true);\n const location = useLocation();\n\n function handleDrawerOpen() {\n setOpen(true);\n }\n\n function handleDrawerClose() {\n setOpen(false);\n }\n\n return (\n <Box sx={{ display: \"flex\" }}>\n <CssBaseline />\n <AppBar position=\"fixed\" open={open}>\n <Toolbar>\n <IconButton\n color=\"inherit\"\n aria-label=\"open drawer\"\n onClick={handleDrawerOpen}\n edge=\"start\"\n sx={[\n {\n marginRight: 5,\n },\n open && { display: \"none\" },\n ]}\n >\n <MenuIcon />\n </IconButton>\n <Typography variant=\"h6\" noWrap component=\"div\">\n {title}\n </Typography>\n {headerElements}\n </Toolbar>\n </AppBar>\n <Drawer variant=\"permanent\" open={open}>\n <DrawerHeader>\n <IconButton onClick={handleDrawerClose}>\n {theme.direction === \"rtl\" ? <ChevronRightIcon /> : <ChevronLeftIcon />}\n </IconButton>\n </DrawerHeader>\n <Divider />\n {navItems.map((item) => {\n return (\n <Fragment key={item.category}>\n <List>\n <Typography variant={open ? \"h5\" : \"h6\"} paddingLeft={open ? 2 : 1}>\n {open ? item.category : truncate(item.category, 4)}\n </Typography>\n {item.options.map((option) => {\n return (\n <ListItem key={option.to} disablePadding sx={{ display: \"block\" }}>\n <ListItemButton\n sx={[\n {\n minHeight: 48,\n px: 2.5,\n },\n open\n ? {\n justifyContent: \"initial\",\n }\n : {\n justifyContent: \"center\",\n },\n ]}\n component={Link}\n to={option.to}\n selected={location.pathname === option.to}\n >\n <ListItemIcon\n sx={[\n {\n minWidth: 0,\n justifyContent: \"center\",\n },\n open\n ? {\n mr: 3,\n }\n : {\n mr: \"auto\",\n },\n ]}\n >\n {option.icon ? (\n option.icon\n ) : !open ? (\n <Typography>{truncate(option.label, 4)}</Typography>\n ) : null}\n </ListItemIcon>\n <ListItemText\n primary={option.label}\n sx={[\n open\n ? {\n opacity: 1,\n }\n : {\n opacity: 0,\n },\n ]}\n />\n </ListItemButton>\n </ListItem>\n );\n })}\n </List>\n <Divider />\n </Fragment>\n );\n })}\n </Drawer>\n <Box component=\"main\" sx={{ flexGrow: 1, p: 3 }}>\n <DrawerHeader />\n {children}\n </Box>\n </Box>\n );\n}\n\nexport default NavigationDrawer;\n","import type { TypographyProps } from \"@mui/material/Typography\";\n\nimport Typography from \"@mui/material/Typography\";\n\nexport interface PopoverTextProps extends TypographyProps {\n text: string;\n}\n\nfunction PopoverText({ text, sx, ...typographyProps }: PopoverTextProps) {\n return (\n <>\n {text.split(\"\\n\").map((line, index) => {\n return (\n <Typography key={index} sx={{ margin: 1, ...sx }} {...typographyProps}>\n {line}\n </Typography>\n );\n })}\n </>\n );\n}\n\nexport default PopoverText;\n","import type { SxProps, Theme } from \"@mui/material/styles\";\n\nimport Box from \"@mui/material/Box\";\nimport Typography from \"@mui/material/Typography\";\nimport { stripIndent } from \"common-tags\";\nimport { LiveEditor, LiveError, LivePreview, LiveProvider } from \"react-live\";\n\nimport { useMode } from \"src/providers\";\n\nexport interface ReactPlaygroundProps {\n code: string;\n scope?: Record<string, unknown>;\n previewStyles?: SxProps<Theme>;\n noInline?: boolean;\n enableTypeScript?: boolean;\n language?: string;\n}\n\nfunction ReactPlayground({\n code,\n scope,\n previewStyles,\n noInline,\n enableTypeScript,\n language,\n}: ReactPlaygroundProps) {\n const { mode } = useMode();\n const defaultPreviewStyles: SxProps<Theme> = {\n backgroundColor: mode === \"dark\" ? \"black\" : \"white\",\n border: 0.3,\n borderRadius: 1,\n padding: 2,\n borderColor: \"darkgray\",\n };\n const allPreviewStyles = previewStyles\n ? { ...defaultPreviewStyles, ...previewStyles }\n : { ...defaultPreviewStyles };\n return (\n <Box sx={{ borderRadius: 1, border: 0.5, padding: 2 }}>\n <LiveProvider\n code={stripIndent(code)}\n scope={scope}\n noInline={noInline}\n enableTypeScript={enableTypeScript}\n language={language}\n >\n <Typography variant=\"h5\">Code</Typography>\n <Box\n sx={{\n border: 0.3,\n borderRadius: 0.3,\n borderColor: \"darkgray\",\n }}\n >\n <LiveEditor />\n </Box>\n <br />\n <Typography variant=\"h5\">Result</Typography>\n <Box sx={allPreviewStyles}>\n <LivePreview />\n <LiveError />\n </Box>\n </LiveProvider>\n </Box>\n );\n}\n\nexport default ReactPlayground;\n","import type { ButtonProps } from \"@mui/material/Button\";\n\nimport Button from \"@mui/material/Button\";\nimport { useFormContext } from \"react-hook-form\";\n\nexport interface SubmitButtonProps extends Omit<ButtonProps, \"type\"> {\n disableClean?: boolean;\n label: string;\n}\n\nfunction SubmitButton({ disableClean, label, ...buttonProps }: SubmitButtonProps) {\n const {\n formState: { disabled: formDisabled, isDirty, isSubmitting },\n } = useFormContext();\n\n return (\n <Button\n color=\"primary\"\n disabled={buttonProps.disabled || (disableClean && !isDirty) || formDisabled}\n loading={isSubmitting}\n type=\"submit\"\n variant=\"contained\"\n {...buttonProps}\n >\n {label}\n </Button>\n );\n}\n\nexport default SubmitButton;\n","import type { CommonProps } from \"@mui/material/OverridableComponent\";\nimport type { SwitchProps } from \"@mui/material/Switch\";\nimport type { ComponentType, CSSProperties } from \"react\";\n\nimport Box from \"@mui/material/Box\";\nimport { styled } from \"@mui/material/styles\";\nimport Switch from \"@mui/material/Switch\";\n\nexport interface SwitchWithIconsProps extends Omit<SwitchProps, \"icon\" | \"checkedIcon\"> {\n checkedIcon: ComponentType<{ style?: CSSProperties }>;\n checkedIconStyles?: CommonProps[\"style\"];\n uncheckedIcon: ComponentType<{ style?: CSSProperties }>;\n uncheckedIconStyles?: CommonProps[\"style\"];\n}\n\nconst StyledSwitch = styled(Switch)(() => {\n return {\n padding: 8,\n \"& .MuiSwitch-track\": {\n borderRadius: 11,\n \"&::before, &::after\": {\n content: '\"\"',\n position: \"absolute\",\n top: \"50%\",\n transform: \"translateY(-50%)\",\n fontSize: 16,\n width: 28,\n height: 28,\n },\n },\n };\n});\n\nfunction SwitchWithIcons({\n checkedIcon: CheckedIcon,\n checkedIconStyles,\n uncheckedIcon: UncheckedIcon,\n uncheckedIconStyles,\n ...switchProps\n}: SwitchWithIconsProps) {\n const boxSx = {\n borderRadius: \"50%\",\n borderColor: \"white\",\n backgroundColor: \"white\",\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n padding: 0.25,\n };\n const defaultIconStyles = { color: \"black\", maxWidth: 16.5, maxHeight: 16.5 };\n return (\n <StyledSwitch\n checkedIcon={\n <Box sx={boxSx}>\n <CheckedIcon style={{ ...defaultIconStyles, ...checkedIconStyles }} />\n </Box>\n }\n icon={\n <Box sx={boxSx}>\n <UncheckedIcon style={{ ...defaultIconStyles, ...uncheckedIconStyles }} />\n </Box>\n }\n {...switchProps}\n />\n );\n}\n\nexport default SwitchWithIcons;\n","import type { Dispatch, SetStateAction } from \"react\";\n\nimport { useCallback, useEffect, useState } from \"react\";\n\nfunction useHash<S extends string>(initialHash: S | undefined): [S, Dispatch<SetStateAction<S>>] {\n const [hash, setHash] = useState<S>(() => {\n const hash: S = window.location.hash.replace(\"#\", \"\") as S;\n return !initialHash ? hash : hash === \"\" ? initialHash : hash;\n });\n const hashChangeHandler = useCallback(() => {\n const hash: S = window.location.hash.replace(\"#\", \"\") as S;\n setHash(!initialHash ? hash : hash === \"\" ? initialHash : hash);\n }, [setHash, initialHash]);\n\n useEffect(() => {\n window.addEventListener(\"hashchange\", hashChangeHandler);\n return () => {\n window.removeEventListener(\"hashchange\", hashChangeHandler);\n };\n }, [hashChangeHandler]);\n\n const updateHash = useCallback(\n (newHash: S | ((previousState: S) => S)) => {\n const resolvedHash = typeof newHash === \"function\" ? newHash(hash) : newHash;\n if (resolvedHash !== hash) {\n window.location.hash = resolvedHash;\n }\n },\n [hash],\n );\n\n return [hash, updateHash];\n}\n\nexport default useHash;\n"],"mappings":"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","names":["index_exports","__export","CollapsableItem_default","DarkModeToggle_default","DropdownMenu_default","ExternalLink_default","FileInput_default","FileInputList_default","FileType","IconWithPopover_default","InternalLink_default","ListItemInternalLink_default","Loader_default","LoaderData_default","LoaderError_default","LoaderProvider_default","ModeProvider_default","NavigationBottom_default","NavigationDrawer_default","PopoverText_default","ReactPlayground_default","ScreenSizeProvider_default","SnackbarProvider_default","SubmitButton_default","SwitchWithIcons_default","useHash_default","useLoader","useMode","useScreenSize","useSnackbar","__toCommonJS","import_ArrowDropDown","import_ArrowDropUp","import_Box","import_ButtonBase","import_Collapse","import_react","import_jsx_runtime","CollapsableItem","isInitiallyOpen","onOpen","onClose","children","buttonStyles","buttonContents","ButtonComponent","ButtonBase","collapseProps","openIcon","ArrowDropUp","closedIcon","ArrowDropDown","useDefaultStyling","isItemOpen","setIsItemOpen","Box","previouslyOpen","__spreadValues","Collapse","__spreadProps","CollapsableItem_default","import_DarkMode","import_LightMode","import_IconButton","import_Tooltip","import_CircularProgress","import_react","import_jsx_runtime","LoaderContext","useLoader","context","LoaderProvider","_a","_b","children","loadingComponent","CircularProgress","contextProps","__objRest","__spreadValues","LoaderProvider_default","import_react","import_jsx_runtime","LoaderData","children","loadingComponent","onUndefined","showOnError","isLoading","data","defaultLoadingComponent","error","useLoader","warnedOnce","result","LoaderData_default","import_Alert","import_jsx_runtime","LoaderError","_a","error","errorComponent","useLoader","Alert","LoaderError_default","import_CssBaseline","import_styles","import_react","import_jsx_runtime","ModeContext","useMode","ModeProvider","children","modeProp","mode","setMode","theme","prev","CssBaseline","ModeProvider_default","import_react","import_jsx_runtime","ScreenSizeContext","useScreenSize","ScreenSizeProvider","children","largeScreenWidth","largeScreenHeight","windowWidth","setWindowWidth","windowHeight","setWindowHeight","largeScreenCondition","width","height","isLargeScreen","setIsLargeScreen","setDimensions","ScreenSizeProvider_default","import_utility","import_Alert","import_Snackbar","import_react","import_jsx_runtime","SnackbarContext","useSnackbar","context","SnackbarProvider","children","autoHideDuration","open","setOpen","autoHideDurationState","setAutoHideDurationState","message","setMessage","severity","setSeverity","addSnackbar","duration","handleClose","__async","Snackbar","Alert","SnackbarProvider_default","import_jsx_runtime","DarkModeToggle","mode","toggleMode","useMode","Tooltip","IconButton","LightMode","DarkMode","DarkModeToggle_default","import_ArrowDropDown","import_ArrowDropUp","import_Box","import_Button","import_Menu","import_react","import_jsx_runtime","DropdownMenu","children","Button","MUIButton","buttonChildren","incomingButtonProps","isOpenIcon","ArrowDropUp","isClosedIcon","ArrowDropDown","onOpen","onClose","anchorElement","setAnchorElement","isDropdownOpen","buttonProps","__spreadProps","__spreadValues","event","Box","Menu","DropdownMenu_default","import_Link","import_jsx_runtime","ExternalLink","_a","_b","href","children","linkProps","__objRest","MUILink","__spreadProps","__spreadValues","ExternalLink_default","import_CloudUpload","import_Button","import_styles","import_react","import_jsx_runtime","FileType","VisuallyHiddenInput","Dropzone","theme","$dragging","FileInput","_a","_b","onFileInput","label","multiple","accept","useDropzone","buttonProps","__objRest","isDragging","setIsDragging","fileInputButton","Button","__spreadProps","__spreadValues","event","CloudUploadIcon","input","filesArray","FileInput_default","import_Delete","import_Box","import_IconButton","import_List","import_ListItem","import_ListItemText","import_jsx_runtime","FileInputList","_a","_b","files","setFiles","fileInputProps","__objRest","onFileInput","newFiles","oldFiles","newFileInputProps","__spreadProps","__spreadValues","Box","FileInput_default","List","file","ListItem","IconButton","fileToDelete","DeleteIcon","ListItemText","FileInputList_default","import_Box","import_Popover","import_react","import_jsx_runtime","IconWithPopover","Icon","onOpen","onClose","iconProps","children","anchorElement","setAnchorElement","isPopoverOpen","popoverId","handleOpen","event","handleClose","Box","__spreadValues","Popover","IconWithPopover_default","import_Link","import_react_router_dom","import_jsx_runtime","InternalLink","_a","_b","to","children","linkProps","__objRest","MUILink","__spreadProps","__spreadValues","ReactDOMLink","InternalLink_default","import_ListItemButton","import_jsx_runtime","ListItemInternalLink","_a","_b","children","listItemButtonProps","__objRest","ListItemButton","__spreadProps","__spreadValues","InternalLink_default","ListItemInternalLink_default","import_CircularProgress","import_jsx_runtime","Loader","_a","_b","children","onUndefined","loadingComponent","CircularProgress","loaderProviderProps","__objRest","LoaderProvider_default","__spreadProps","__spreadValues","LoaderError_default","LoaderData_default","Loader_default","import_BottomNavigation","import_BottomNavigationAction","import_Box","import_Paper","import_react","import_react_router_dom","import_jsx_runtime","NavigationBottom","children","navItems","value","setValue","Box","Paper","BottomNavigation","_","item","BottomNavigationAction","__spreadProps","__spreadValues","NavigationBottom_default","import_utility","import_ChevronLeft","import_ChevronRight","import_Menu","import_AppBar","import_Box","import_CssBaseline","import_Divider","import_Drawer","import_IconButton","import_List","import_ListItem","import_ListItemButton","import_ListItemIcon","import_ListItemText","import_styles","import_Toolbar","import_Typography","import_react","import_react_router_dom","import_jsx_runtime","drawerWidth","openedMixin","theme","closedMixin","DrawerHeader","__spreadValues","AppBar","MuiAppBar","prop","open","Drawer","MuiDrawer","__spreadProps","NavigationDrawer","title","navItems","children","headerElements","setOpen","location","handleDrawerOpen","handleDrawerClose","Box","CssBaseline","Toolbar","IconButton","MenuIcon","Typography","ChevronRightIcon","ChevronLeftIcon","Divider","item","List","option","ListItem","ListItemButton","ListItemIcon","ListItemText","NavigationDrawer_default","import_Typography","import_jsx_runtime","PopoverText","_a","_b","text","sx","typographyProps","__objRest","line","index","Typography","__spreadProps","__spreadValues","PopoverText_default","import_Box","import_Typography","import_common_tags","import_react_live","import_jsx_runtime","ReactPlayground","code","scope","previewStyles","noInline","enableTypeScript","language","mode","useMode","defaultPreviewStyles","allPreviewStyles","__spreadValues","Box","Typography","ReactPlayground_default","import_Button","import_react_hook_form","import_jsx_runtime","SubmitButton","_a","_b","disableClean","label","buttonProps","__objRest","formDisabled","isDirty","isSubmitting","Button","__spreadProps","__spreadValues","SubmitButton_default","import_Box","import_styles","import_Switch","import_jsx_runtime","StyledSwitch","Switch","SwitchWithIcons","_a","_b","CheckedIcon","checkedIconStyles","UncheckedIcon","uncheckedIconStyles","switchProps","__objRest","boxSx","defaultIconStyles","__spreadValues","Box","SwitchWithIcons_default","import_react","useHash","initialHash","hash","setHash","hashChangeHandler","updateHash","newHash","resolvedHash","useHash_default"]}
1
+ {"version":3,"sources":["../src/index.ts","../src/components/CollapsableItem.tsx","../src/components/DarkModeToggle.tsx","../src/providers/LoaderProvider/index.tsx","../src/providers/LoaderProvider/LoaderData.tsx","../src/providers/LoaderProvider/LoaderError.tsx","../src/providers/ModeProvider.tsx","../src/providers/ScreenSizeProvider.tsx","../src/providers/SnackbarProvider.tsx","../src/components/DropdownMenu.tsx","../src/components/ExternalLink.tsx","../src/components/FileInput.tsx","../src/components/FileInputList.tsx","../src/components/IconWithPopover.tsx","../src/components/InternalLink.tsx","../src/components/ListItemInternalLink.tsx","../src/components/Loader.tsx","../src/components/NavigationBottom.tsx","../src/components/NavigationDrawer.tsx","../src/components/PopoverText.tsx","../src/components/ReactPlayground.tsx","../src/components/SkeletonRow.tsx","../src/components/SubmitButton.tsx","../src/components/SwitchWithIcons.tsx","../src/hooks/useHash.ts"],"sourcesContent":["export * from \"src/components\";\nexport * from \"src/hooks\";\nexport * from \"src/providers\";\n","import type { CollapseProps } from \"@mui/material/Collapse\";\nimport type { SxProps } from \"@mui/material/styles\";\nimport type { ElementType, ReactNode } from \"react\";\n\nimport ArrowDropDown from \"@mui/icons-material/ArrowDropDown\";\nimport ArrowDropUp from \"@mui/icons-material/ArrowDropUp\";\nimport Box from \"@mui/material/Box\";\nimport ButtonBase from \"@mui/material/ButtonBase\";\nimport Collapse from \"@mui/material/Collapse\";\nimport { useEffect, useState } from \"react\";\n\nexport interface CollapsableItemProps {\n isInitiallyOpen?: boolean;\n onOpen?: () => void;\n onClose?: () => void;\n children: ReactNode;\n buttonStyles?: SxProps;\n buttonContents: ReactNode;\n buttonComponent?: ElementType;\n openIcon?: ReactNode;\n closedIcon?: ReactNode;\n collapseProps?: Omit<CollapseProps, \"in\">;\n useDefaultStyling?: boolean;\n}\n\nfunction CollapsableItem({\n isInitiallyOpen,\n onOpen,\n onClose,\n children,\n buttonStyles,\n buttonContents,\n buttonComponent: ButtonComponent = ButtonBase,\n collapseProps,\n openIcon = <ArrowDropUp />,\n closedIcon = <ArrowDropDown />,\n useDefaultStyling = ButtonComponent === ButtonBase ? true : false,\n}: CollapsableItemProps) {\n const [isItemOpen, setIsItemOpen] = useState<boolean>(!!isInitiallyOpen);\n\n useEffect(() => {\n if (isItemOpen && onOpen) {\n onOpen();\n } else if (!isItemOpen && onClose) {\n onClose();\n }\n }, [isItemOpen]);\n\n return (\n <Box>\n <ButtonComponent\n onClick={() => {\n setIsItemOpen((previouslyOpen) => {\n return !previouslyOpen;\n });\n }}\n sx={\n useDefaultStyling\n ? {\n width: \"100%\",\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n paddingY: 1.5,\n paddingX: 2,\n textAlign: \"center\",\n \"&:hover\":\n ButtonComponent === ButtonBase ? { backgroundColor: \"action.hover\" } : null,\n ...buttonStyles,\n }\n : buttonStyles\n }\n aria-expanded={isItemOpen}\n >\n {buttonContents}\n {isItemOpen ? openIcon : closedIcon}\n </ButtonComponent>\n <Collapse in={isItemOpen} {...collapseProps}>\n {children}\n </Collapse>\n </Box>\n );\n}\n\nexport default CollapsableItem;\n","import DarkMode from \"@mui/icons-material/DarkMode\";\nimport LightMode from \"@mui/icons-material/LightMode\";\nimport IconButton from \"@mui/material/IconButton\";\nimport Tooltip from \"@mui/material/Tooltip\";\n\nimport { useMode } from \"src/providers\";\n\nfunction DarkModeToggle() {\n const { mode, toggleMode } = useMode();\n\n return (\n <Tooltip title={`Enable ${mode === \"dark\" ? \"light\" : \"dark\"} mode`}>\n <IconButton\n sx={{ marginLeft: \"auto\" }}\n onClick={toggleMode}\n aria-label={`Enable ${mode === \"dark\" ? \"light\" : \"dark\"} mode`}\n >\n {mode === \"dark\" ? <LightMode /> : <DarkMode />}\n </IconButton>\n </Tooltip>\n );\n}\n\nexport default DarkModeToggle;\n","import type { ReactNode } from \"react\";\n\nimport CircularProgress from \"@mui/material/CircularProgress\";\nimport { createContext, useContext } from \"react\";\n\nexport interface LoaderProviderBaseProps<T> {\n isLoading: boolean;\n data?: T;\n loadingComponent?: ReactNode;\n}\n\nexport interface LoaderProviderPropsWithNoError<T> extends LoaderProviderBaseProps<T> {\n error?: never;\n errorComponent?: never;\n}\n\nexport interface LoaderProviderPropsWithError<T> extends LoaderProviderBaseProps<T> {\n error: unknown;\n errorComponent?: ReactNode | ((error: unknown) => ReactNode);\n}\n\nexport type LoaderContextValue<T> =\n | LoaderProviderPropsWithNoError<T>\n | LoaderProviderPropsWithError<T>;\nexport type LoaderProviderProps<T> = LoaderContextValue<T> & { children: ReactNode };\n\nconst LoaderContext = createContext<LoaderContextValue<unknown> | undefined>(undefined);\nexport function useLoader<T>(): LoaderContextValue<T> {\n const context = useContext(LoaderContext);\n if (!context) {\n throw new Error(\"LOADER_CONTEXT_NOT_SET\");\n }\n return context as LoaderContextValue<T>;\n}\n\nfunction LoaderProvider<T>({\n children,\n loadingComponent = <CircularProgress />,\n ...contextProps\n}: LoaderProviderProps<T>) {\n return (\n <LoaderContext.Provider value={{ loadingComponent, ...contextProps }}>\n {children}\n </LoaderContext.Provider>\n );\n}\n\nexport default LoaderProvider;\n","import type { DisallowUndefined } from \"@alextheman/utility\";\nimport type { ReactNode } from \"react\";\n\nimport { useRef } from \"react\";\n\nimport { useLoader } from \"src/providers/LoaderProvider\";\n\nexport interface LoaderDataProps<T> {\n children: ReactNode | ((data: DisallowUndefined<T>) => ReactNode);\n loadingComponent?: ReactNode;\n onUndefined?: () => ReactNode | void;\n showOnError?: boolean;\n}\n\nfunction LoaderData<T>({\n children,\n loadingComponent,\n onUndefined,\n showOnError,\n}: LoaderDataProps<T>) {\n const { isLoading, data, loadingComponent: defaultLoadingComponent, error } = useLoader<T>();\n const warnedOnce = useRef(false);\n\n if (isLoading) {\n return <>{loadingComponent ?? defaultLoadingComponent}</>;\n }\n\n if (error && !showOnError) {\n return <></>;\n }\n\n // No need to also check for isLoading === true here, since this was covered earlier\n if (data === undefined) {\n if (!warnedOnce.current) {\n console.warn(\n \"Data is undefined after loading. This could either be an issue with the query or you have not passed in the data to LoaderProvider. Please double-check that you have provided data.\",\n );\n warnedOnce.current = true;\n }\n\n if (onUndefined) {\n const result = onUndefined();\n return result ?? <></>;\n }\n return <></>;\n }\n\n return typeof children === \"function\" ? (\n <>{children(data as DisallowUndefined<T>)}</>\n ) : (\n <>{children}</>\n );\n}\n\nexport default LoaderData;\n","import Alert from \"@mui/material/Alert\";\n\nimport { useLoader } from \"src/providers/LoaderProvider\";\n\nfunction LoaderError() {\n const { error, errorComponent } = useLoader();\n\n if (error) {\n if (typeof errorComponent === \"function\") {\n return errorComponent(error);\n }\n if (errorComponent) {\n return <>{errorComponent}</>;\n }\n return (\n <Alert severity=\"error\">\n {(error as Error)?.message ?? \"An unknown error has occured. Please try again later.\"}\n </Alert>\n );\n }\n\n return <></>;\n}\n\nexport default LoaderError;\n","import type { ReactNode } from \"react\";\n\nimport CssBaseline from \"@mui/material/CssBaseline\";\nimport { createTheme, ThemeProvider } from \"@mui/material/styles\";\nimport { createContext, useContext, useMemo, useState } from \"react\";\n\nconst ModeContext = createContext({\n toggleMode: () => {},\n mode: \"dark\",\n});\n\nexport function useMode() {\n return useContext(ModeContext);\n}\n\nexport type Mode = \"light\" | \"dark\";\n\nexport interface ModeProviderProps {\n children: ReactNode;\n mode?: Mode;\n}\n\nfunction ModeProvider({ children, mode: modeProp = \"dark\" }: ModeProviderProps) {\n const [mode, setMode] = useState<Mode>(modeProp);\n\n const theme = useMemo(() => {\n return createTheme({\n palette: {\n mode,\n },\n });\n }, [mode]);\n\n return (\n <ModeContext.Provider\n value={{\n mode,\n toggleMode: () => {\n setMode((prev) => {\n return prev === \"light\" ? \"dark\" : \"light\";\n });\n },\n }}\n >\n <ThemeProvider theme={theme}>\n <CssBaseline />\n {children}\n </ThemeProvider>\n </ModeContext.Provider>\n );\n}\n\nexport default ModeProvider;\n","import type { ReactNode } from \"react\";\n\nimport { createContext, useContext, useEffect, useState } from \"react\";\n\nexport interface ScreenSizeProps {\n children: ReactNode;\n largeScreenWidth?: number;\n largeScreenHeight?: number;\n}\n\nexport interface ScreenSizeContextValue {\n isLargeScreen: boolean;\n windowWidth: number;\n windowHeight: number;\n}\n\nconst ScreenSizeContext = createContext<ScreenSizeContextValue>({\n windowWidth: 0,\n windowHeight: 0,\n isLargeScreen: false,\n});\n\nexport function useScreenSize() {\n return useContext(ScreenSizeContext);\n}\n\nfunction ScreenSizeProvider({ children, largeScreenWidth, largeScreenHeight }: ScreenSizeProps) {\n const [windowWidth, setWindowWidth] = useState<number>(window.innerWidth);\n const [windowHeight, setWindowHeight] = useState<number>(window.innerHeight);\n\n function largeScreenCondition(\n width: number,\n height: number,\n largeScreenWidth: number = 669,\n largeScreenHeight: number = 600,\n ): boolean {\n return width > largeScreenWidth && height > largeScreenHeight;\n }\n\n const [isLargeScreen, setIsLargeScreen] = useState<boolean>(\n largeScreenCondition(\n window.innerWidth,\n window.innerHeight,\n largeScreenWidth,\n largeScreenHeight,\n ),\n );\n\n useEffect(() => {\n function setDimensions() {\n setWindowWidth(window.innerWidth);\n setWindowHeight(window.innerHeight);\n }\n setDimensions();\n window.addEventListener(\"resize\", setDimensions);\n return () => {\n window.removeEventListener(\"resize\", setDimensions);\n };\n }, []);\n\n useEffect(() => {\n setIsLargeScreen(\n largeScreenCondition(windowWidth, windowHeight, largeScreenWidth, largeScreenHeight),\n );\n }, [windowWidth, windowHeight, largeScreenWidth, largeScreenHeight]);\n\n return (\n <ScreenSizeContext.Provider\n value={{\n isLargeScreen,\n windowWidth,\n windowHeight,\n }}\n >\n {children}\n </ScreenSizeContext.Provider>\n );\n}\n\nexport default ScreenSizeProvider;\n","import type { AlertColor } from \"@mui/material/Alert\";\nimport type { ReactNode } from \"react\";\n\nimport { wait } from \"@alextheman/utility\";\nimport Alert from \"@mui/material/Alert\";\nimport Snackbar from \"@mui/material/Snackbar\";\nimport { createContext, useContext, useState } from \"react\";\n\nexport interface SnackbarProviderProps {\n children: ReactNode;\n autoHideDuration?: number;\n}\n\nexport interface SnackbarContextValue {\n addSnackbar: (message: string, severity?: AlertColor, duration?: number) => void;\n}\n\nconst SnackbarContext = createContext<SnackbarContextValue | undefined>(undefined);\nexport function useSnackbar() {\n const context = useContext(SnackbarContext);\n if (!context) {\n throw new Error(\"SNACKBAR_CONTEXT_NOT_SET\");\n }\n return context;\n}\n\nfunction SnackbarProvider({ children, autoHideDuration = 5000 }: SnackbarProviderProps) {\n const [open, setOpen] = useState<boolean>(false);\n const [autoHideDurationState, setAutoHideDurationState] = useState<number>(autoHideDuration);\n const [message, setMessage] = useState<string>(\"\");\n const [severity, setSeverity] = useState<AlertColor>(\"info\");\n\n function addSnackbar(message: string, severity?: AlertColor, duration?: number) {\n setOpen(true);\n setAutoHideDurationState(duration ?? autoHideDuration);\n setSeverity(severity ?? \"info\");\n setMessage(message);\n }\n\n async function handleClose() {\n setOpen(false);\n // Wait for 0.2 seconds to ensure that the message is only cleared after the snackbar is fully closed.\n // This prevents potential weird flickering that may occur if they happen synchronously.\n await wait(0.2);\n setMessage(\"\");\n }\n\n return (\n <SnackbarContext.Provider value={{ addSnackbar }}>\n <Snackbar open={open} autoHideDuration={autoHideDurationState} onClose={handleClose}>\n <Alert onClose={handleClose} severity={severity}>\n {message}\n </Alert>\n </Snackbar>\n {children}\n </SnackbarContext.Provider>\n );\n}\n\nexport default SnackbarProvider;\n","import type { ButtonOwnProps } from \"@mui/material/Button\";\nimport type { ElementType, MouseEvent as ReactMouseEvent, ReactNode } from \"react\";\n\nimport ArrowDropDown from \"@mui/icons-material/ArrowDropDown\";\nimport ArrowDropUp from \"@mui/icons-material/ArrowDropUp\";\nimport Box from \"@mui/material/Box\";\nimport MUIButton from \"@mui/material/Button\";\nimport Menu from \"@mui/material/Menu\";\nimport { useEffect, useMemo, useState } from \"react\";\n\nexport interface DropdownMenuProps {\n children: ReactNode | ((closeMenu: () => void) => ReactNode);\n buttonChildren?: ReactNode;\n button?: ElementType;\n // Omit endIcon because the built-in isOpenIcon and isClosedIcon gives more control.\n // onClick is also omitted because that controls anchorElement, and the onOpen/onClose functions can be used instead.\n buttonProps?: Omit<ButtonOwnProps, \"onClick\" | \"endIcon\">;\n isOpenIcon?: ReactNode;\n isClosedIcon?: ReactNode;\n onOpen?: () => void;\n onClose?: () => void;\n}\n\nfunction DropdownMenu({\n children,\n button: Button = MUIButton,\n buttonChildren = \"Menu\",\n buttonProps: incomingButtonProps,\n isOpenIcon = <ArrowDropUp />,\n isClosedIcon = <ArrowDropDown />,\n onOpen,\n onClose,\n}: DropdownMenuProps) {\n const [anchorElement, setAnchorElement] = useState<HTMLElement | null>(null);\n const isDropdownOpen = useMemo(() => {\n return !!anchorElement;\n }, [anchorElement]);\n\n const buttonProps: Record<string, unknown> = {\n ...incomingButtonProps,\n onClick: (event: ReactMouseEvent<HTMLElement>) => {\n setAnchorElement(event.currentTarget);\n },\n \"aria-controls\": isDropdownOpen ? \"dropdown-menu\" : undefined,\n \"aria-haspopup\": \"true\",\n \"aria-expanded\": isDropdownOpen,\n };\n\n if (Button === MUIButton) {\n buttonProps.endIcon = isDropdownOpen ? isOpenIcon : isClosedIcon;\n }\n\n useEffect(() => {\n if (isDropdownOpen && onOpen) {\n onOpen();\n } else if (!isDropdownOpen && onClose) {\n onClose();\n }\n }, [isDropdownOpen, onOpen, onClose]);\n\n return (\n <Box>\n <Button {...buttonProps}>{buttonChildren}</Button>\n <Menu\n id=\"dropdown-menu\"\n anchorEl={anchorElement}\n open={isDropdownOpen}\n onClose={() => {\n setAnchorElement(null);\n }}\n >\n {typeof children === \"function\" ? (\n <Box>\n {children(() => {\n setAnchorElement(null);\n })}\n </Box>\n ) : (\n children\n )}\n </Menu>\n </Box>\n );\n}\n\nexport default DropdownMenu;\n","import type { LinkProps } from \"@mui/material/Link\";\nimport type { ReactNode } from \"react\";\n\nimport MUILink from \"@mui/material/Link\";\n\nexport interface ExternalLinkProps extends Omit<LinkProps, \"to\" | \"target\" | \"rel\"> {\n href: `https://${string}` | `http://${string}`;\n to?: never;\n children: ReactNode;\n}\n\nfunction ExternalLink({ href, children, ...linkProps }: ExternalLinkProps) {\n return (\n <MUILink component={\"a\"} href={href} target=\"_blank\" rel=\"noopener noreferrer\" {...linkProps}>\n {children}\n </MUILink>\n );\n}\n\nexport default ExternalLink;\n","import type { ButtonOwnProps } from \"@mui/material/Button\";\n\nimport CloudUploadIcon from \"@mui/icons-material/CloudUpload\";\nimport Button from \"@mui/material/Button\";\nimport { styled } from \"@mui/material/styles\";\nimport { useState } from \"react\";\n\nexport const FileType = {\n PDF: \"application/pdf\",\n PNG: \"image/png\",\n JPEG: \"image/jpeg\",\n JPG: \"image/jpg\",\n XLSX: \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\",\n DOCX: \"application/vnd.openxmlformats-officedocument.wordprocessingml.document\",\n MP3: \"audio/mp3\",\n MP4: \"video/mp4\",\n WAV: \"audio/wav\",\n} as const;\n// eslint-disable-next-line @typescript-eslint/no-redeclare\nexport type FileType = (typeof FileType)[keyof typeof FileType];\n\nconst VisuallyHiddenInput = styled(\"input\")({\n clip: \"rect(0 0 0 0)\",\n clipPath: \"inset(50%)\",\n height: 1,\n overflow: \"hidden\",\n position: \"absolute\",\n bottom: 0,\n left: 0,\n whiteSpace: \"nowrap\",\n width: 1,\n});\n\nconst Dropzone = styled(\"div\")<{ $dragging: boolean }>(({ theme, $dragging }) => {\n return {\n border: \"2px dashed\",\n borderColor: $dragging ? theme.palette.primary.main : \"#ccc\",\n backgroundColor: $dragging ? theme.palette.action.hover : \"transparent\",\n borderRadius: 8,\n padding: \"1.5rem\",\n textAlign: \"center\",\n transition: \"border-color 0.2s\",\n cursor: \"pointer\",\n };\n});\n\nexport interface FileInputProps extends ButtonOwnProps {\n onFileInput: (allowedFiles: File[]) => void;\n label?: string;\n multiple?: boolean;\n accept?: string[];\n useDropzone?: boolean;\n}\n\nfunction FileInput({\n onFileInput,\n label = \"Upload files\",\n multiple,\n accept,\n useDropzone,\n ...buttonProps\n}: FileInputProps) {\n const [isDragging, setIsDragging] = useState<boolean>(false);\n\n const fileInputButton = (\n <Button\n variant=\"contained\"\n component=\"label\"\n aria-label=\"File upload button\"\n onKeyDown={(event) => {\n if (event.key === \"Enter\" || event.key === \" \") {\n event.preventDefault();\n document.getElementById(\"file-input\")?.click();\n }\n }}\n {...buttonProps}\n startIcon={buttonProps.startIcon ?? <CloudUploadIcon />}\n >\n {label}\n <VisuallyHiddenInput\n id=\"file-input\"\n type=\"file\"\n onChange={(event) => {\n const input = event.target;\n onFileInput(Array.from(input.files ?? []));\n input.value = \"\";\n }}\n multiple={multiple}\n accept={accept?.join(\",\")}\n disabled={buttonProps.disabled}\n />\n </Button>\n );\n\n return useDropzone ? (\n <Dropzone\n $dragging={isDragging}\n onDragOver={(event) => {\n event.preventDefault();\n if (buttonProps.disabled) {\n return;\n }\n setIsDragging(true);\n }}\n onDragLeave={(event) => {\n event.preventDefault();\n setIsDragging(false);\n }}\n onDrop={(event) => {\n event.preventDefault();\n setIsDragging(false);\n if (buttonProps.disabled) {\n return;\n }\n const filesArray = Array.from(event.dataTransfer.files ?? []);\n onFileInput(filesArray);\n }}\n >\n {fileInputButton}\n </Dropzone>\n ) : (\n fileInputButton\n );\n}\n\nexport default FileInput;\n","import type { Dispatch, SetStateAction } from \"react\";\nimport type { FileInputProps } from \"src/components/FileInput\";\n\nimport DeleteIcon from \"@mui/icons-material/Delete\";\nimport Box from \"@mui/material/Box\";\nimport IconButton from \"@mui/material/IconButton\";\nimport List from \"@mui/material/List\";\nimport ListItem from \"@mui/material/ListItem\";\nimport ListItemText from \"@mui/material/ListItemText\";\n\nimport FileInput from \"src/components/FileInput\";\n\nexport interface FileInputListProps extends Omit<FileInputProps, \"onFileInput\"> {\n files: File[];\n setFiles: Dispatch<SetStateAction<File[]>>;\n}\n\nfunction FileInputList({ files, setFiles, ...fileInputProps }: FileInputListProps) {\n function onFileInput(newFiles: File[]) {\n setFiles((oldFiles) => {\n return [...oldFiles, ...newFiles];\n });\n }\n\n const newFileInputProps = { ...fileInputProps, onFileInput };\n if (newFileInputProps?.multiple === undefined) {\n newFileInputProps.multiple = true;\n }\n\n return (\n <Box>\n <FileInput {...newFileInputProps} />\n <List>\n {files.map((file) => {\n return (\n <ListItem\n key={file.name}\n secondaryAction={\n <IconButton\n aria-label=\"Delete\"\n edge=\"end\"\n onClick={() => {\n setFiles((oldFiles) => {\n return oldFiles.filter((fileToDelete) => {\n return fileToDelete !== file;\n });\n });\n }}\n >\n <DeleteIcon />\n </IconButton>\n }\n >\n <ListItemText primary={file.name} />\n </ListItem>\n );\n })}\n </List>\n </Box>\n );\n}\n\nexport default FileInputList;\n","import type { OverridableComponent } from \"@mui/material/OverridableComponent\";\nimport type { SvgIconTypeMap } from \"@mui/material/SvgIcon\";\nimport type { ElementType, MouseEvent as ReactMouseEvent, ReactNode } from \"react\";\n\nimport Box from \"@mui/material/Box\";\nimport Popover from \"@mui/material/Popover\";\nimport { useId, useState } from \"react\";\n\nexport interface IconWithPopoverProps {\n icon:\n | (OverridableComponent<SvgIconTypeMap<unknown, \"svg\">> & {\n muiName: string;\n })\n | ElementType;\n onOpen?: () => void;\n onClose?: () => void;\n iconProps?: SvgIconTypeMap<unknown, \"svg\">[\"props\"];\n children: ReactNode;\n}\n\nfunction IconWithPopover({\n icon: Icon,\n onOpen,\n onClose,\n iconProps,\n children,\n}: IconWithPopoverProps) {\n const [anchorElement, setAnchorElement] = useState<Element | null>(null);\n const isPopoverOpen = !!anchorElement;\n const popoverId = useId();\n\n function handleOpen(event: ReactMouseEvent<SVGSVGElement, MouseEvent>) {\n setAnchorElement(event.currentTarget);\n if (onOpen) {\n onOpen();\n }\n }\n\n function handleClose() {\n setAnchorElement(null);\n if (onClose) {\n onClose();\n }\n }\n\n return (\n <Box>\n <Icon\n aria-owns={isPopoverOpen ? popoverId : undefined}\n aria-haspopup=\"true\"\n onMouseEnter={handleOpen}\n onMouseLeave={handleClose}\n {...iconProps}\n />\n <Popover\n id={popoverId}\n sx={{ pointerEvents: \"none\" }}\n open={isPopoverOpen}\n anchorEl={anchorElement}\n anchorOrigin={{\n vertical: \"bottom\",\n horizontal: \"left\",\n }}\n transformOrigin={{\n vertical: \"top\",\n horizontal: \"left\",\n }}\n onClose={handleClose}\n disableRestoreFocus\n >\n {children}\n </Popover>\n </Box>\n );\n}\n\nexport default IconWithPopover;\n","import type { LinkProps } from \"@mui/material/Link\";\nimport type { ReactNode } from \"react\";\n\nimport MUILink from \"@mui/material/Link\";\nimport { Link as ReactDOMLink } from \"react-router-dom\";\n\nexport interface InternalLinkProps extends Omit<LinkProps, \"href\"> {\n to: `/${string}` | `~/${string}`;\n href?: never;\n children: ReactNode;\n}\n\nfunction InternalLink({ to, children, ...linkProps }: InternalLinkProps) {\n return (\n <MUILink component={ReactDOMLink} to={to} {...linkProps}>\n {children}\n </MUILink>\n );\n}\n\nexport default InternalLink;\n","import type { ListItemButtonProps } from \"@mui/material/ListItemButton\";\nimport type { ReactNode } from \"react\";\n\nimport ListItemButton from \"@mui/material/ListItemButton\";\n\nimport InternalLink from \"src/components/InternalLink\";\n\nexport interface ListItemInternalLinkProps extends Omit<ListItemButtonProps, \"href\"> {\n children: ReactNode;\n to: string;\n}\n\nfunction ListItemInternalLink({ children, ...listItemButtonProps }: ListItemInternalLinkProps) {\n return (\n <ListItemButton component={InternalLink} {...listItemButtonProps}>\n {children}\n </ListItemButton>\n );\n}\n\nexport default ListItemInternalLink;\n","import type { DisallowUndefined } from \"@alextheman/utility\";\nimport type { ReactNode } from \"react\";\nimport type { LoaderProviderProps } from \"src/providers\";\n\nimport CircularProgress from \"@mui/material/CircularProgress\";\n\nimport { LoaderError, LoaderProvider } from \"src/providers\";\nimport LoaderData from \"src/providers/LoaderProvider/LoaderData\";\n\nexport type LoaderProps<T> = Omit<LoaderProviderProps<T>, \"children\"> & {\n children: ReactNode | ((data: DisallowUndefined<T>) => ReactNode);\n onUndefined?: () => ReactNode | void;\n};\n\nfunction Loader<T>({\n children,\n onUndefined,\n loadingComponent = <CircularProgress />,\n ...loaderProviderProps\n}: LoaderProps<T>) {\n return (\n <LoaderProvider<T> loadingComponent={loadingComponent} {...loaderProviderProps}>\n <LoaderError />\n <LoaderData<T> onUndefined={onUndefined}>{children}</LoaderData>\n </LoaderProvider>\n );\n}\n\nexport default Loader;\n","import type { JSX, ReactNode } from \"react\";\n\nimport BottomNavigation from \"@mui/material/BottomNavigation\";\nimport BottomNavigationAction from \"@mui/material/BottomNavigationAction\";\nimport Box from \"@mui/material/Box\";\nimport Paper from \"@mui/material/Paper\";\nimport { useState } from \"react\";\nimport { Link } from \"react-router-dom\";\n\nexport interface NavItemBottom {\n value: string;\n label: string;\n icon?: JSX.Element;\n to: string;\n}\n\nexport interface NavigationBottomProps {\n children: ReactNode;\n navItems: NavItemBottom[];\n}\n\nfunction NavigationBottom({ children, navItems }: NavigationBottomProps) {\n const [value, setValue] = useState<string>(\"\");\n return (\n <>\n <Box sx={{ paddingBottom: 7 }}>{children}</Box>\n <Paper sx={{ position: \"fixed\", bottom: 0, left: 0, right: 0 }}>\n <BottomNavigation\n showLabels\n value={value}\n onChange={(_, value) => {\n setValue(value);\n }}\n >\n {navItems.map((item) => {\n return <BottomNavigationAction key={item.value} {...item} component={Link} />;\n })}\n </BottomNavigation>\n </Paper>\n </>\n );\n}\n\nexport default NavigationBottom;\n","import type { AppBarProps as MuiAppBarProps } from \"@mui/material/AppBar\";\nimport type { CSSObject, Theme } from \"@mui/material/styles\";\nimport type { ReactNode } from \"react\";\n\nimport { truncate } from \"@alextheman/utility\";\nimport ChevronLeftIcon from \"@mui/icons-material/ChevronLeft\";\nimport ChevronRightIcon from \"@mui/icons-material/ChevronRight\";\nimport MenuIcon from \"@mui/icons-material/Menu\";\nimport MuiAppBar from \"@mui/material/AppBar\";\nimport Box from \"@mui/material/Box\";\nimport CssBaseline from \"@mui/material/CssBaseline\";\nimport Divider from \"@mui/material/Divider\";\nimport MuiDrawer from \"@mui/material/Drawer\";\nimport IconButton from \"@mui/material/IconButton\";\nimport List from \"@mui/material/List\";\nimport ListItem from \"@mui/material/ListItem\";\nimport ListItemButton from \"@mui/material/ListItemButton\";\nimport ListItemIcon from \"@mui/material/ListItemIcon\";\nimport ListItemText from \"@mui/material/ListItemText\";\nimport { styled, useTheme } from \"@mui/material/styles\";\nimport Toolbar from \"@mui/material/Toolbar\";\nimport Typography from \"@mui/material/Typography\";\nimport { Fragment, useState } from \"react\";\nimport { Link, useLocation } from \"react-router-dom\";\n\nconst drawerWidth = 240;\n\nfunction openedMixin(theme: Theme): CSSObject {\n return {\n width: drawerWidth,\n transition: theme.transitions.create(\"width\", {\n easing: theme.transitions.easing.sharp,\n duration: theme.transitions.duration.enteringScreen,\n }),\n overflowX: \"hidden\",\n };\n}\n\nfunction closedMixin(theme: Theme): CSSObject {\n return {\n transition: theme.transitions.create(\"width\", {\n easing: theme.transitions.easing.sharp,\n duration: theme.transitions.duration.leavingScreen,\n }),\n overflowX: \"hidden\",\n width: `calc(${theme.spacing(7)} + 1px)`,\n [theme.breakpoints.up(\"sm\")]: {\n width: `calc(${theme.spacing(8)} + 1px)`,\n },\n };\n}\n\nconst DrawerHeader = styled(\"div\")(({ theme }) => {\n return {\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"flex-end\",\n padding: theme.spacing(0, 1),\n // necessary for content to be below app bar\n ...theme.mixins.toolbar,\n };\n});\n\ninterface AppBarProps extends MuiAppBarProps {\n open?: boolean;\n}\n\nconst AppBar = styled(MuiAppBar, {\n shouldForwardProp: (prop) => {\n return prop !== \"open\";\n },\n})<AppBarProps>(({ theme }) => {\n return {\n zIndex: theme.zIndex.drawer + 1,\n transition: theme.transitions.create([\"width\", \"margin\"], {\n easing: theme.transitions.easing.sharp,\n duration: theme.transitions.duration.leavingScreen,\n }),\n variants: [\n {\n props: ({ open }) => {\n return open;\n },\n style: {\n marginLeft: drawerWidth,\n width: `calc(100% - ${drawerWidth}px)`,\n transition: theme.transitions.create([\"width\", \"margin\"], {\n easing: theme.transitions.easing.sharp,\n duration: theme.transitions.duration.enteringScreen,\n }),\n },\n },\n ],\n };\n});\n\nconst Drawer = styled(MuiDrawer, {\n shouldForwardProp: (prop) => {\n return prop !== \"open\";\n },\n})(({ theme }) => {\n return {\n width: drawerWidth,\n flexShrink: 0,\n whiteSpace: \"nowrap\",\n boxSizing: \"border-box\",\n variants: [\n {\n props: ({ open }) => {\n return open;\n },\n style: {\n ...openedMixin(theme),\n \"& .MuiDrawer-paper\": openedMixin(theme),\n },\n },\n {\n props: ({ open }) => {\n return !open;\n },\n style: {\n ...closedMixin(theme),\n \"& .MuiDrawer-paper\": closedMixin(theme),\n },\n },\n ],\n };\n});\n\nexport interface NavMenuItem {\n category: string;\n options: {\n label: string;\n to: string;\n icon?: ReactNode;\n }[];\n}\n\nexport interface NavigationDrawerProps {\n title: string;\n navItems: NavMenuItem[];\n headerElements?: ReactNode;\n children: ReactNode;\n}\n\nfunction NavigationDrawer({ title, navItems, children, headerElements }: NavigationDrawerProps) {\n const theme = useTheme();\n const [open, setOpen] = useState(true);\n const location = useLocation();\n\n function handleDrawerOpen() {\n setOpen(true);\n }\n\n function handleDrawerClose() {\n setOpen(false);\n }\n\n return (\n <Box sx={{ display: \"flex\" }}>\n <CssBaseline />\n <AppBar position=\"fixed\" open={open}>\n <Toolbar>\n <IconButton\n color=\"inherit\"\n aria-label=\"open drawer\"\n onClick={handleDrawerOpen}\n edge=\"start\"\n sx={[\n {\n marginRight: 5,\n },\n open && { display: \"none\" },\n ]}\n >\n <MenuIcon />\n </IconButton>\n <Typography variant=\"h6\" noWrap component=\"div\">\n {title}\n </Typography>\n {headerElements}\n </Toolbar>\n </AppBar>\n <Drawer variant=\"permanent\" open={open}>\n <DrawerHeader>\n <IconButton onClick={handleDrawerClose}>\n {theme.direction === \"rtl\" ? <ChevronRightIcon /> : <ChevronLeftIcon />}\n </IconButton>\n </DrawerHeader>\n <Divider />\n {navItems.map((item) => {\n return (\n <Fragment key={item.category}>\n <List>\n <Typography variant={open ? \"h5\" : \"h6\"} paddingLeft={open ? 2 : 1}>\n {open ? item.category : truncate(item.category, 4)}\n </Typography>\n {item.options.map((option) => {\n return (\n <ListItem key={option.to} disablePadding sx={{ display: \"block\" }}>\n <ListItemButton\n sx={[\n {\n minHeight: 48,\n px: 2.5,\n },\n open\n ? {\n justifyContent: \"initial\",\n }\n : {\n justifyContent: \"center\",\n },\n ]}\n component={Link}\n to={option.to}\n selected={location.pathname === option.to}\n >\n <ListItemIcon\n sx={[\n {\n minWidth: 0,\n justifyContent: \"center\",\n },\n open\n ? {\n mr: 3,\n }\n : {\n mr: \"auto\",\n },\n ]}\n >\n {option.icon ? (\n option.icon\n ) : !open ? (\n <Typography>{truncate(option.label, 4)}</Typography>\n ) : null}\n </ListItemIcon>\n <ListItemText\n primary={option.label}\n sx={[\n open\n ? {\n opacity: 1,\n }\n : {\n opacity: 0,\n },\n ]}\n />\n </ListItemButton>\n </ListItem>\n );\n })}\n </List>\n <Divider />\n </Fragment>\n );\n })}\n </Drawer>\n <Box component=\"main\" sx={{ flexGrow: 1, p: 3 }}>\n <DrawerHeader />\n {children}\n </Box>\n </Box>\n );\n}\n\nexport default NavigationDrawer;\n","import type { TypographyProps } from \"@mui/material/Typography\";\n\nimport Typography from \"@mui/material/Typography\";\n\nexport interface PopoverTextProps extends TypographyProps {\n text: string;\n}\n\nfunction PopoverText({ text, sx, ...typographyProps }: PopoverTextProps) {\n return (\n <>\n {text.split(\"\\n\").map((line, index) => {\n return (\n <Typography key={index} sx={{ margin: 1, ...sx }} {...typographyProps}>\n {line}\n </Typography>\n );\n })}\n </>\n );\n}\n\nexport default PopoverText;\n","import type { SxProps, Theme } from \"@mui/material/styles\";\n\nimport Box from \"@mui/material/Box\";\nimport Typography from \"@mui/material/Typography\";\nimport { stripIndent } from \"common-tags\";\nimport { LiveEditor, LiveError, LivePreview, LiveProvider } from \"react-live\";\n\nimport { useMode } from \"src/providers\";\n\nexport interface ReactPlaygroundProps {\n code: string;\n scope?: Record<string, unknown>;\n previewStyles?: SxProps<Theme>;\n noInline?: boolean;\n enableTypeScript?: boolean;\n language?: string;\n}\n\nfunction ReactPlayground({\n code,\n scope,\n previewStyles,\n noInline,\n enableTypeScript,\n language,\n}: ReactPlaygroundProps) {\n const { mode } = useMode();\n const defaultPreviewStyles: SxProps<Theme> = {\n backgroundColor: mode === \"dark\" ? \"black\" : \"white\",\n border: 0.3,\n borderRadius: 1,\n padding: 2,\n borderColor: \"darkgray\",\n };\n const allPreviewStyles = previewStyles\n ? { ...defaultPreviewStyles, ...previewStyles }\n : { ...defaultPreviewStyles };\n return (\n <Box sx={{ borderRadius: 1, border: 0.5, padding: 2 }}>\n <LiveProvider\n code={stripIndent(code)}\n scope={scope}\n noInline={noInline}\n enableTypeScript={enableTypeScript}\n language={language}\n >\n <Typography variant=\"h5\">Code</Typography>\n <Box\n sx={{\n border: 0.3,\n borderRadius: 0.3,\n borderColor: \"darkgray\",\n }}\n >\n <LiveEditor />\n </Box>\n <br />\n <Typography variant=\"h5\">Result</Typography>\n <Box sx={allPreviewStyles}>\n <LivePreview />\n <LiveError />\n </Box>\n </LiveProvider>\n </Box>\n );\n}\n\nexport default ReactPlayground;\n","import { fillArray } from \"@alextheman/utility\";\nimport Skeleton from \"@mui/material/Skeleton\";\nimport TableCell from \"@mui/material/TableCell\";\nimport TableRow from \"@mui/material/TableRow\";\n\nexport interface SkeletonRowProps {\n columns: number;\n}\n\nfunction SkeletonRow({ columns }: SkeletonRowProps) {\n return (\n <TableRow>\n {fillArray((index) => {\n return (\n <TableCell key={index}>\n <Skeleton />\n </TableCell>\n );\n }, columns)}\n </TableRow>\n );\n}\n\nexport default SkeletonRow;\n","import type { ButtonProps } from \"@mui/material/Button\";\n\nimport Button from \"@mui/material/Button\";\nimport { useFormContext } from \"react-hook-form\";\n\nexport interface SubmitButtonProps extends Omit<ButtonProps, \"type\"> {\n disableClean?: boolean;\n label: string;\n}\n\nfunction SubmitButton({ disableClean, label, ...buttonProps }: SubmitButtonProps) {\n const {\n formState: { disabled: formDisabled, isDirty, isSubmitting },\n } = useFormContext();\n\n return (\n <Button\n color=\"primary\"\n disabled={buttonProps.disabled || (disableClean && !isDirty) || formDisabled}\n loading={isSubmitting}\n type=\"submit\"\n variant=\"contained\"\n {...buttonProps}\n >\n {label}\n </Button>\n );\n}\n\nexport default SubmitButton;\n","import type { CommonProps } from \"@mui/material/OverridableComponent\";\nimport type { SwitchProps } from \"@mui/material/Switch\";\nimport type { ComponentType, CSSProperties } from \"react\";\n\nimport Box from \"@mui/material/Box\";\nimport { styled } from \"@mui/material/styles\";\nimport Switch from \"@mui/material/Switch\";\n\nexport interface SwitchWithIconsProps extends Omit<SwitchProps, \"icon\" | \"checkedIcon\"> {\n checkedIcon: ComponentType<{ style?: CSSProperties }>;\n checkedIconStyles?: CommonProps[\"style\"];\n uncheckedIcon: ComponentType<{ style?: CSSProperties }>;\n uncheckedIconStyles?: CommonProps[\"style\"];\n}\n\nconst StyledSwitch = styled(Switch)(() => {\n return {\n padding: 8,\n \"& .MuiSwitch-track\": {\n borderRadius: 11,\n \"&::before, &::after\": {\n content: '\"\"',\n position: \"absolute\",\n top: \"50%\",\n transform: \"translateY(-50%)\",\n fontSize: 16,\n width: 28,\n height: 28,\n },\n },\n };\n});\n\nfunction SwitchWithIcons({\n checkedIcon: CheckedIcon,\n checkedIconStyles,\n uncheckedIcon: UncheckedIcon,\n uncheckedIconStyles,\n ...switchProps\n}: SwitchWithIconsProps) {\n const boxSx = {\n borderRadius: \"50%\",\n borderColor: \"white\",\n backgroundColor: \"white\",\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n padding: 0.25,\n };\n const defaultIconStyles = { color: \"black\", maxWidth: 16.5, maxHeight: 16.5 };\n return (\n <StyledSwitch\n checkedIcon={\n <Box sx={boxSx}>\n <CheckedIcon style={{ ...defaultIconStyles, ...checkedIconStyles }} />\n </Box>\n }\n icon={\n <Box sx={boxSx}>\n <UncheckedIcon style={{ ...defaultIconStyles, ...uncheckedIconStyles }} />\n </Box>\n }\n {...switchProps}\n />\n );\n}\n\nexport default SwitchWithIcons;\n","import type { Dispatch, SetStateAction } from \"react\";\n\nimport { useCallback, useEffect, useState } from \"react\";\n\nfunction useHash<S extends string>(initialHash: S | undefined): [S, Dispatch<SetStateAction<S>>] {\n const [hash, setHash] = useState<S>(() => {\n const hash: S = window.location.hash.replace(\"#\", \"\") as S;\n return !initialHash ? hash : hash === \"\" ? initialHash : hash;\n });\n const hashChangeHandler = useCallback(() => {\n const hash: S = window.location.hash.replace(\"#\", \"\") as S;\n setHash(!initialHash ? hash : hash === \"\" ? initialHash : hash);\n }, [setHash, initialHash]);\n\n useEffect(() => {\n window.addEventListener(\"hashchange\", hashChangeHandler);\n return () => {\n window.removeEventListener(\"hashchange\", hashChangeHandler);\n };\n }, [hashChangeHandler]);\n\n const updateHash = useCallback(\n (newHash: S | ((previousState: S) => S)) => {\n const resolvedHash = typeof newHash === \"function\" ? newHash(hash) : newHash;\n if (resolvedHash !== hash) {\n window.location.hash = resolvedHash;\n }\n },\n [hash],\n );\n\n return [hash, updateHash];\n}\n\nexport default useHash;\n"],"mappings":"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","names":["index_exports","__export","CollapsableItem_default","DarkModeToggle_default","DropdownMenu_default","ExternalLink_default","FileInput_default","FileInputList_default","FileType","IconWithPopover_default","InternalLink_default","ListItemInternalLink_default","Loader_default","LoaderData_default","LoaderError_default","LoaderProvider_default","ModeProvider_default","NavigationBottom_default","NavigationDrawer_default","PopoverText_default","ReactPlayground_default","ScreenSizeProvider_default","SkeletonRow_default","SnackbarProvider_default","SubmitButton_default","SwitchWithIcons_default","useHash_default","useLoader","useMode","useScreenSize","useSnackbar","__toCommonJS","import_ArrowDropDown","import_ArrowDropUp","import_Box","import_ButtonBase","import_Collapse","import_react","import_jsx_runtime","CollapsableItem","isInitiallyOpen","onOpen","onClose","children","buttonStyles","buttonContents","ButtonComponent","ButtonBase","collapseProps","openIcon","ArrowDropUp","closedIcon","ArrowDropDown","useDefaultStyling","isItemOpen","setIsItemOpen","Box","previouslyOpen","__spreadValues","Collapse","__spreadProps","CollapsableItem_default","import_DarkMode","import_LightMode","import_IconButton","import_Tooltip","import_CircularProgress","import_react","import_jsx_runtime","LoaderContext","useLoader","context","LoaderProvider","_a","_b","children","loadingComponent","CircularProgress","contextProps","__objRest","__spreadValues","LoaderProvider_default","import_react","import_jsx_runtime","LoaderData","children","loadingComponent","onUndefined","showOnError","isLoading","data","defaultLoadingComponent","error","useLoader","warnedOnce","result","LoaderData_default","import_Alert","import_jsx_runtime","LoaderError","_a","error","errorComponent","useLoader","Alert","LoaderError_default","import_CssBaseline","import_styles","import_react","import_jsx_runtime","ModeContext","useMode","ModeProvider","children","modeProp","mode","setMode","theme","prev","CssBaseline","ModeProvider_default","import_react","import_jsx_runtime","ScreenSizeContext","useScreenSize","ScreenSizeProvider","children","largeScreenWidth","largeScreenHeight","windowWidth","setWindowWidth","windowHeight","setWindowHeight","largeScreenCondition","width","height","isLargeScreen","setIsLargeScreen","setDimensions","ScreenSizeProvider_default","import_utility","import_Alert","import_Snackbar","import_react","import_jsx_runtime","SnackbarContext","useSnackbar","context","SnackbarProvider","children","autoHideDuration","open","setOpen","autoHideDurationState","setAutoHideDurationState","message","setMessage","severity","setSeverity","addSnackbar","duration","handleClose","__async","Snackbar","Alert","SnackbarProvider_default","import_jsx_runtime","DarkModeToggle","mode","toggleMode","useMode","Tooltip","IconButton","LightMode","DarkMode","DarkModeToggle_default","import_ArrowDropDown","import_ArrowDropUp","import_Box","import_Button","import_Menu","import_react","import_jsx_runtime","DropdownMenu","children","Button","MUIButton","buttonChildren","incomingButtonProps","isOpenIcon","ArrowDropUp","isClosedIcon","ArrowDropDown","onOpen","onClose","anchorElement","setAnchorElement","isDropdownOpen","buttonProps","__spreadProps","__spreadValues","event","Box","Menu","DropdownMenu_default","import_Link","import_jsx_runtime","ExternalLink","_a","_b","href","children","linkProps","__objRest","MUILink","__spreadProps","__spreadValues","ExternalLink_default","import_CloudUpload","import_Button","import_styles","import_react","import_jsx_runtime","FileType","VisuallyHiddenInput","Dropzone","theme","$dragging","FileInput","_a","_b","onFileInput","label","multiple","accept","useDropzone","buttonProps","__objRest","isDragging","setIsDragging","fileInputButton","Button","__spreadProps","__spreadValues","event","CloudUploadIcon","input","filesArray","FileInput_default","import_Delete","import_Box","import_IconButton","import_List","import_ListItem","import_ListItemText","import_jsx_runtime","FileInputList","_a","_b","files","setFiles","fileInputProps","__objRest","onFileInput","newFiles","oldFiles","newFileInputProps","__spreadProps","__spreadValues","Box","FileInput_default","List","file","ListItem","IconButton","fileToDelete","DeleteIcon","ListItemText","FileInputList_default","import_Box","import_Popover","import_react","import_jsx_runtime","IconWithPopover","Icon","onOpen","onClose","iconProps","children","anchorElement","setAnchorElement","isPopoverOpen","popoverId","handleOpen","event","handleClose","Box","__spreadValues","Popover","IconWithPopover_default","import_Link","import_react_router_dom","import_jsx_runtime","InternalLink","_a","_b","to","children","linkProps","__objRest","MUILink","__spreadProps","__spreadValues","ReactDOMLink","InternalLink_default","import_ListItemButton","import_jsx_runtime","ListItemInternalLink","_a","_b","children","listItemButtonProps","__objRest","ListItemButton","__spreadProps","__spreadValues","InternalLink_default","ListItemInternalLink_default","import_CircularProgress","import_jsx_runtime","Loader","_a","_b","children","onUndefined","loadingComponent","CircularProgress","loaderProviderProps","__objRest","LoaderProvider_default","__spreadProps","__spreadValues","LoaderError_default","LoaderData_default","Loader_default","import_BottomNavigation","import_BottomNavigationAction","import_Box","import_Paper","import_react","import_react_router_dom","import_jsx_runtime","NavigationBottom","children","navItems","value","setValue","Box","Paper","BottomNavigation","_","item","BottomNavigationAction","__spreadProps","__spreadValues","NavigationBottom_default","import_utility","import_ChevronLeft","import_ChevronRight","import_Menu","import_AppBar","import_Box","import_CssBaseline","import_Divider","import_Drawer","import_IconButton","import_List","import_ListItem","import_ListItemButton","import_ListItemIcon","import_ListItemText","import_styles","import_Toolbar","import_Typography","import_react","import_react_router_dom","import_jsx_runtime","drawerWidth","openedMixin","theme","closedMixin","DrawerHeader","__spreadValues","AppBar","MuiAppBar","prop","open","Drawer","MuiDrawer","__spreadProps","NavigationDrawer","title","navItems","children","headerElements","setOpen","location","handleDrawerOpen","handleDrawerClose","Box","CssBaseline","Toolbar","IconButton","MenuIcon","Typography","ChevronRightIcon","ChevronLeftIcon","Divider","item","List","option","ListItem","ListItemButton","ListItemIcon","ListItemText","NavigationDrawer_default","import_Typography","import_jsx_runtime","PopoverText","_a","_b","text","sx","typographyProps","__objRest","line","index","Typography","__spreadProps","__spreadValues","PopoverText_default","import_Box","import_Typography","import_common_tags","import_react_live","import_jsx_runtime","ReactPlayground","code","scope","previewStyles","noInline","enableTypeScript","language","mode","useMode","defaultPreviewStyles","allPreviewStyles","__spreadValues","Box","Typography","ReactPlayground_default","import_utility","import_Skeleton","import_TableCell","import_TableRow","import_jsx_runtime","SkeletonRow","columns","TableRow","index","TableCell","Skeleton","SkeletonRow_default","import_Button","import_react_hook_form","import_jsx_runtime","SubmitButton","_a","_b","disableClean","label","buttonProps","__objRest","formDisabled","isDirty","isSubmitting","Button","__spreadProps","__spreadValues","SubmitButton_default","import_Box","import_styles","import_Switch","import_jsx_runtime","StyledSwitch","Switch","SwitchWithIcons","_a","_b","CheckedIcon","checkedIconStyles","UncheckedIcon","uncheckedIconStyles","switchProps","__objRest","boxSx","defaultIconStyles","__spreadValues","Box","SwitchWithIcons_default","import_react","useHash","initialHash","hash","setHash","hashChangeHandler","updateHash","newHash","resolvedHash","useHash_default"]}
package/dist/index.d.cts CHANGED
@@ -100,20 +100,20 @@ interface ListItemInternalLinkProps extends Omit<ListItemButtonProps, "href"> {
100
100
  }
101
101
  declare function ListItemInternalLink({ children, ...listItemButtonProps }: ListItemInternalLinkProps): react_jsx_runtime.JSX.Element;
102
102
 
103
- interface BaseProps<T> {
103
+ interface LoaderProviderBaseProps<T> {
104
104
  isLoading: boolean;
105
105
  data?: T;
106
106
  loadingComponent?: ReactNode;
107
107
  }
108
- interface PropsWithNoError<T> extends BaseProps<T> {
108
+ interface LoaderProviderPropsWithNoError<T> extends LoaderProviderBaseProps<T> {
109
109
  error?: never;
110
110
  errorComponent?: never;
111
111
  }
112
- interface PropsWithError<T> extends BaseProps<T> {
112
+ interface LoaderProviderPropsWithError<T> extends LoaderProviderBaseProps<T> {
113
113
  error: unknown;
114
114
  errorComponent?: ReactNode | ((error: unknown) => ReactNode);
115
115
  }
116
- type LoaderContextValue<T> = PropsWithNoError<T> | PropsWithError<T>;
116
+ type LoaderContextValue<T> = LoaderProviderPropsWithNoError<T> | LoaderProviderPropsWithError<T>;
117
117
  type LoaderProviderProps<T> = LoaderContextValue<T> & {
118
118
  children: ReactNode;
119
119
  };
@@ -213,6 +213,11 @@ interface ReactPlaygroundProps {
213
213
  }
214
214
  declare function ReactPlayground({ code, scope, previewStyles, noInline, enableTypeScript, language, }: ReactPlaygroundProps): react_jsx_runtime.JSX.Element;
215
215
 
216
+ interface SkeletonRowProps {
217
+ columns: number;
218
+ }
219
+ declare function SkeletonRow({ columns }: SkeletonRowProps): react_jsx_runtime.JSX.Element;
220
+
216
221
  interface SubmitButtonProps extends Omit<ButtonProps, "type"> {
217
222
  disableClean?: boolean;
218
223
  label: string;
@@ -233,4 +238,4 @@ declare function SwitchWithIcons({ checkedIcon: CheckedIcon, checkedIconStyles,
233
238
 
234
239
  declare function useHash<S extends string>(initialHash: S | undefined): [S, Dispatch<SetStateAction<S>>];
235
240
 
236
- export { CollapsableItem, type CollapsableItemProps, DarkModeToggle, DropdownMenu, type DropdownMenuProps, ExternalLink, type ExternalLinkProps, FileInput, FileInputList, type FileInputListProps, type FileInputProps, FileType, IconWithPopover, type IconWithPopoverProps, InternalLink, type InternalLinkProps, ListItemInternalLink, type ListItemInternalLinkProps, Loader, type LoaderContextValue, LoaderData, type LoaderDataProps, LoaderError, type LoaderProps, LoaderProvider, type LoaderProviderProps, type Mode, ModeProvider, type ModeProviderProps, type NavItemBottom, type NavMenuItem, NavigationBottom, type NavigationBottomProps, NavigationDrawer, type NavigationDrawerProps, PopoverText, type PopoverTextProps, ReactPlayground, type ReactPlaygroundProps, type ScreenSizeContextValue, type ScreenSizeProps, ScreenSizeProvider, SnackbarProvider, type SnackbarProviderProps, SubmitButton, type SubmitButtonProps, SwitchWithIcons, type SwitchWithIconsProps, useHash, useLoader, useMode, useScreenSize, useSnackbar };
241
+ export { CollapsableItem, type CollapsableItemProps, DarkModeToggle, DropdownMenu, type DropdownMenuProps, ExternalLink, type ExternalLinkProps, FileInput, FileInputList, type FileInputListProps, type FileInputProps, FileType, IconWithPopover, type IconWithPopoverProps, InternalLink, type InternalLinkProps, ListItemInternalLink, type ListItemInternalLinkProps, Loader, type LoaderContextValue, LoaderData, type LoaderDataProps, LoaderError, type LoaderProps, LoaderProvider, type LoaderProviderBaseProps, type LoaderProviderProps, type LoaderProviderPropsWithError, type LoaderProviderPropsWithNoError, type Mode, ModeProvider, type ModeProviderProps, type NavItemBottom, type NavMenuItem, NavigationBottom, type NavigationBottomProps, NavigationDrawer, type NavigationDrawerProps, PopoverText, type PopoverTextProps, ReactPlayground, type ReactPlaygroundProps, type ScreenSizeContextValue, type ScreenSizeProps, ScreenSizeProvider, SkeletonRow, type SkeletonRowProps, SnackbarProvider, type SnackbarProviderProps, SubmitButton, type SubmitButtonProps, SwitchWithIcons, type SwitchWithIconsProps, useHash, useLoader, useMode, useScreenSize, useSnackbar };
package/dist/index.d.ts CHANGED
@@ -100,20 +100,20 @@ interface ListItemInternalLinkProps extends Omit<ListItemButtonProps, "href"> {
100
100
  }
101
101
  declare function ListItemInternalLink({ children, ...listItemButtonProps }: ListItemInternalLinkProps): react_jsx_runtime.JSX.Element;
102
102
 
103
- interface BaseProps<T> {
103
+ interface LoaderProviderBaseProps<T> {
104
104
  isLoading: boolean;
105
105
  data?: T;
106
106
  loadingComponent?: ReactNode;
107
107
  }
108
- interface PropsWithNoError<T> extends BaseProps<T> {
108
+ interface LoaderProviderPropsWithNoError<T> extends LoaderProviderBaseProps<T> {
109
109
  error?: never;
110
110
  errorComponent?: never;
111
111
  }
112
- interface PropsWithError<T> extends BaseProps<T> {
112
+ interface LoaderProviderPropsWithError<T> extends LoaderProviderBaseProps<T> {
113
113
  error: unknown;
114
114
  errorComponent?: ReactNode | ((error: unknown) => ReactNode);
115
115
  }
116
- type LoaderContextValue<T> = PropsWithNoError<T> | PropsWithError<T>;
116
+ type LoaderContextValue<T> = LoaderProviderPropsWithNoError<T> | LoaderProviderPropsWithError<T>;
117
117
  type LoaderProviderProps<T> = LoaderContextValue<T> & {
118
118
  children: ReactNode;
119
119
  };
@@ -213,6 +213,11 @@ interface ReactPlaygroundProps {
213
213
  }
214
214
  declare function ReactPlayground({ code, scope, previewStyles, noInline, enableTypeScript, language, }: ReactPlaygroundProps): react_jsx_runtime.JSX.Element;
215
215
 
216
+ interface SkeletonRowProps {
217
+ columns: number;
218
+ }
219
+ declare function SkeletonRow({ columns }: SkeletonRowProps): react_jsx_runtime.JSX.Element;
220
+
216
221
  interface SubmitButtonProps extends Omit<ButtonProps, "type"> {
217
222
  disableClean?: boolean;
218
223
  label: string;
@@ -233,4 +238,4 @@ declare function SwitchWithIcons({ checkedIcon: CheckedIcon, checkedIconStyles,
233
238
 
234
239
  declare function useHash<S extends string>(initialHash: S | undefined): [S, Dispatch<SetStateAction<S>>];
235
240
 
236
- export { CollapsableItem, type CollapsableItemProps, DarkModeToggle, DropdownMenu, type DropdownMenuProps, ExternalLink, type ExternalLinkProps, FileInput, FileInputList, type FileInputListProps, type FileInputProps, FileType, IconWithPopover, type IconWithPopoverProps, InternalLink, type InternalLinkProps, ListItemInternalLink, type ListItemInternalLinkProps, Loader, type LoaderContextValue, LoaderData, type LoaderDataProps, LoaderError, type LoaderProps, LoaderProvider, type LoaderProviderProps, type Mode, ModeProvider, type ModeProviderProps, type NavItemBottom, type NavMenuItem, NavigationBottom, type NavigationBottomProps, NavigationDrawer, type NavigationDrawerProps, PopoverText, type PopoverTextProps, ReactPlayground, type ReactPlaygroundProps, type ScreenSizeContextValue, type ScreenSizeProps, ScreenSizeProvider, SnackbarProvider, type SnackbarProviderProps, SubmitButton, type SubmitButtonProps, SwitchWithIcons, type SwitchWithIconsProps, useHash, useLoader, useMode, useScreenSize, useSnackbar };
241
+ export { CollapsableItem, type CollapsableItemProps, DarkModeToggle, DropdownMenu, type DropdownMenuProps, ExternalLink, type ExternalLinkProps, FileInput, FileInputList, type FileInputListProps, type FileInputProps, FileType, IconWithPopover, type IconWithPopoverProps, InternalLink, type InternalLinkProps, ListItemInternalLink, type ListItemInternalLinkProps, Loader, type LoaderContextValue, LoaderData, type LoaderDataProps, LoaderError, type LoaderProps, LoaderProvider, type LoaderProviderBaseProps, type LoaderProviderProps, type LoaderProviderPropsWithError, type LoaderProviderPropsWithNoError, type Mode, ModeProvider, type ModeProviderProps, type NavItemBottom, type NavMenuItem, NavigationBottom, type NavigationBottomProps, NavigationDrawer, type NavigationDrawerProps, PopoverText, type PopoverTextProps, ReactPlayground, type ReactPlaygroundProps, type ScreenSizeContextValue, type ScreenSizeProps, ScreenSizeProvider, SkeletonRow, type SkeletonRowProps, SnackbarProvider, type SnackbarProviderProps, SubmitButton, type SubmitButtonProps, SwitchWithIcons, type SwitchWithIconsProps, useHash, useLoader, useMode, useScreenSize, useSnackbar };
package/dist/index.js CHANGED
@@ -1,3 +1,3 @@
1
- var be=Object.defineProperty,Ie=Object.defineProperties;var Le=Object.getOwnPropertyDescriptors;var T=Object.getOwnPropertySymbols;var K=Object.prototype.hasOwnProperty,Y=Object.prototype.propertyIsEnumerable;var J=(e,o,t)=>o in e?be(e,o,{enumerable:!0,configurable:!0,writable:!0,value:t}):e[o]=t,a=(e,o)=>{for(var t in o||(o={}))K.call(o,t)&&J(e,t,o[t]);if(T)for(var t of T(o))Y.call(o,t)&&J(e,t,o[t]);return e},u=(e,o)=>Ie(e,Le(o));var x=(e,o)=>{var t={};for(var n in e)K.call(e,n)&&o.indexOf(n)<0&&(t[n]=e[n]);if(e!=null&&T)for(var n of T(e))o.indexOf(n)<0&&Y.call(e,n)&&(t[n]=e[n]);return t};var q=(e,o,t)=>new Promise((n,i)=>{var r=d=>{try{s(t.next(d))}catch(l){i(l)}},p=d=>{try{s(t.throw(d))}catch(l){i(l)}},s=d=>d.done?n(d.value):Promise.resolve(d.value).then(r,p);s((t=t.apply(e,o)).next())});import Ce from"@mui/icons-material/ArrowDropDown";import ke from"@mui/icons-material/ArrowDropUp";import Te from"@mui/material/Box";import R from"@mui/material/ButtonBase";import Be from"@mui/material/Collapse";import{useEffect as De,useState as Ne}from"react";import{jsx as E,jsxs as Q}from"react/jsx-runtime";function Me({isInitiallyOpen:e,onOpen:o,onClose:t,children:n,buttonStyles:i,buttonContents:r,buttonComponent:p=R,collapseProps:s,openIcon:d=E(ke,{}),closedIcon:l=E(Ce,{}),useDefaultStyling:m=p===R}){let[c,f]=Ne(!!e);return De(()=>{c&&o?o():!c&&t&&t()},[c]),Q(Te,{children:[Q(p,{onClick:()=>{f(h=>!h)},sx:m?a({width:"100%",display:"flex",alignItems:"center",justifyContent:"center",paddingY:1.5,paddingX:2,textAlign:"center","&:hover":p===R?{backgroundColor:"action.hover"}:null},i):i,"aria-expanded":c,children:[r,c?d:l]}),E(Be,u(a({in:c},s),{children:n}))]})}var Re=Me;import fo from"@mui/icons-material/DarkMode";import xo from"@mui/icons-material/LightMode";import go from"@mui/material/IconButton";import ho from"@mui/material/Tooltip";import Ee from"@mui/material/CircularProgress";import{createContext as Ae,useContext as Oe}from"react";import{jsx as Z}from"react/jsx-runtime";var j=Ae(void 0);function I(){let e=Oe(j);if(!e)throw new Error("LOADER_CONTEXT_NOT_SET");return e}function Fe(n){var i=n,{children:e,loadingComponent:o=Z(Ee,{})}=i,t=x(i,["children","loadingComponent"]);return Z(j.Provider,{value:a({loadingComponent:o},t),children:e})}var A=Fe;import{useRef as We}from"react";import{Fragment as S,jsx as w}from"react/jsx-runtime";function ze({children:e,loadingComponent:o,onUndefined:t,showOnError:n}){let{isLoading:i,data:r,loadingComponent:p,error:s}=I(),d=We(!1);if(i)return w(S,{children:o!=null?o:p});if(s&&!n)return w(S,{});if(r===void 0){if(d.current||(console.warn("Data is undefined after loading. This could either be an issue with the query or you have not passed in the data to LoaderProvider. Please double-check that you have provided data."),d.current=!0),t){let l=t();return l!=null?l:w(S,{})}return w(S,{})}return typeof e=="function"?w(S,{children:e(r)}):w(S,{children:e})}var O=ze;import He from"@mui/material/Alert";import{Fragment as ee,jsx as F}from"react/jsx-runtime";function Ue(){var t;let{error:e,errorComponent:o}=I();return e?typeof o=="function"?o(e):o?F(ee,{children:o}):F(He,{severity:"error",children:(t=e==null?void 0:e.message)!=null?t:"An unknown error has occured. Please try again later."}):F(ee,{})}var W=Ue;import Ve from"@mui/material/CssBaseline";import{createTheme as Xe,ThemeProvider as $e}from"@mui/material/styles";import{createContext as _e,useContext as Ge,useMemo as Je,useState as Ke}from"react";import{jsx as oe,jsxs as Qe}from"react/jsx-runtime";var te=_e({toggleMode:()=>{},mode:"dark"});function L(){return Ge(te)}function Ye({children:e,mode:o="dark"}){let[t,n]=Ke(o),i=Je(()=>Xe({palette:{mode:t}}),[t]);return oe(te.Provider,{value:{mode:t,toggleMode:()=>{n(r=>r==="light"?"dark":"light")}},children:Qe($e,{theme:i,children:[oe(Ve,{}),e]})})}var qe=Ye;import{createContext as Ze,useContext as je,useEffect as re,useState as z}from"react";import{jsx as ro}from"react/jsx-runtime";var ne=Ze({windowWidth:0,windowHeight:0,isLargeScreen:!1});function eo(){return je(ne)}function oo({children:e,largeScreenWidth:o,largeScreenHeight:t}){let[n,i]=z(window.innerWidth),[r,p]=z(window.innerHeight);function s(m,c,f=669,h=600){return m>f&&c>h}let[d,l]=z(s(window.innerWidth,window.innerHeight,o,t));return re(()=>{function m(){i(window.innerWidth),p(window.innerHeight)}return m(),window.addEventListener("resize",m),()=>{window.removeEventListener("resize",m)}},[]),re(()=>{l(s(n,r,o,t))},[n,r,o,t]),ro(ne.Provider,{value:{isLargeScreen:d,windowWidth:n,windowHeight:r},children:e})}var to=oo;import{wait as no}from"@alextheman/utility";import io from"@mui/material/Alert";import ao from"@mui/material/Snackbar";import{createContext as po,useContext as so,useState as B}from"react";import{jsx as ie,jsxs as uo}from"react/jsx-runtime";var ae=po(void 0);function mo(){let e=so(ae);if(!e)throw new Error("SNACKBAR_CONTEXT_NOT_SET");return e}function lo({children:e,autoHideDuration:o=5e3}){let[t,n]=B(!1),[i,r]=B(o),[p,s]=B(""),[d,l]=B("info");function m(f,h,y){n(!0),r(y!=null?y:o),l(h!=null?h:"info"),s(f)}function c(){return q(this,null,function*(){n(!1),yield no(.2),s("")})}return uo(ae.Provider,{value:{addSnackbar:m},children:[ie(ao,{open:t,autoHideDuration:i,onClose:c,children:ie(io,{onClose:c,severity:d,children:p})}),e]})}var co=lo;import{jsx as D}from"react/jsx-runtime";function yo(){let{mode:e,toggleMode:o}=L();return D(ho,{title:`Enable ${e==="dark"?"light":"dark"} mode`,children:D(go,{sx:{marginLeft:"auto"},onClick:o,"aria-label":`Enable ${e==="dark"?"light":"dark"} mode`,children:e==="dark"?D(xo,{}):D(fo,{})})})}var Po=yo;import vo from"@mui/icons-material/ArrowDropDown";import So from"@mui/icons-material/ArrowDropUp";import pe from"@mui/material/Box";import se from"@mui/material/Button";import wo from"@mui/material/Menu";import{useEffect as bo,useMemo as Io,useState as Lo}from"react";import{jsx as C,jsxs as To}from"react/jsx-runtime";function Co({children:e,button:o=se,buttonChildren:t="Menu",buttonProps:n,isOpenIcon:i=C(So,{}),isClosedIcon:r=C(vo,{}),onOpen:p,onClose:s}){let[d,l]=Lo(null),m=Io(()=>!!d,[d]),c=u(a({},n),{onClick:f=>{l(f.currentTarget)},"aria-controls":m?"dropdown-menu":void 0,"aria-haspopup":"true","aria-expanded":m});return o===se&&(c.endIcon=m?i:r),bo(()=>{m&&p?p():!m&&s&&s()},[m,p,s]),To(pe,{children:[C(o,u(a({},c),{children:t})),C(wo,{id:"dropdown-menu",anchorEl:d,open:m,onClose:()=>{l(null)},children:typeof e=="function"?C(pe,{children:e(()=>{l(null)})}):e})]})}var ko=Co;import Bo from"@mui/material/Link";import{jsx as Mo}from"react/jsx-runtime";function Do(n){var i=n,{href:e,children:o}=i,t=x(i,["href","children"]);return Mo(Bo,u(a({component:"a",href:e,target:"_blank",rel:"noopener noreferrer"},t),{children:o}))}var No=Do;import Ro from"@mui/icons-material/CloudUpload";import Eo from"@mui/material/Button";import{styled as de}from"@mui/material/styles";import{useState as Ao}from"react";import{jsx as H,jsxs as Ho}from"react/jsx-runtime";var Oo={PDF:"application/pdf",PNG:"image/png",JPEG:"image/jpeg",JPG:"image/jpg",XLSX:"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",DOCX:"application/vnd.openxmlformats-officedocument.wordprocessingml.document",MP3:"audio/mp3",MP4:"video/mp4",WAV:"audio/wav"},Fo=de("input")({clip:"rect(0 0 0 0)",clipPath:"inset(50%)",height:1,overflow:"hidden",position:"absolute",bottom:0,left:0,whiteSpace:"nowrap",width:1}),Wo=de("div")(({theme:e,$dragging:o})=>({border:"2px dashed",borderColor:o?e.palette.primary.main:"#ccc",backgroundColor:o?e.palette.action.hover:"transparent",borderRadius:8,padding:"1.5rem",textAlign:"center",transition:"border-color 0.2s",cursor:"pointer"}));function zo(p){var s=p,{onFileInput:e,label:o="Upload files",multiple:t,accept:n,useDropzone:i}=s,r=x(s,["onFileInput","label","multiple","accept","useDropzone"]);var c;let[d,l]=Ao(!1),m=Ho(Eo,u(a({variant:"contained",component:"label","aria-label":"File upload button",onKeyDown:f=>{var h;(f.key==="Enter"||f.key===" ")&&(f.preventDefault(),(h=document.getElementById("file-input"))==null||h.click())}},r),{startIcon:(c=r.startIcon)!=null?c:H(Ro,{}),children:[o,H(Fo,{id:"file-input",type:"file",onChange:f=>{var y;let h=f.target;e(Array.from((y=h.files)!=null?y:[])),h.value=""},multiple:t,accept:n==null?void 0:n.join(","),disabled:r.disabled})]}));return i?H(Wo,{$dragging:d,onDragOver:f=>{f.preventDefault(),!r.disabled&&l(!0)},onDragLeave:f=>{f.preventDefault(),l(!1)},onDrop:f=>{var y;if(f.preventDefault(),l(!1),r.disabled)return;let h=Array.from((y=f.dataTransfer.files)!=null?y:[]);e(h)},children:m}):m}var U=zo;import Uo from"@mui/icons-material/Delete";import Vo from"@mui/material/Box";import Xo from"@mui/material/IconButton";import $o from"@mui/material/List";import _o from"@mui/material/ListItem";import Go from"@mui/material/ListItemText";import{jsx as b,jsxs as Yo}from"react/jsx-runtime";function Jo(n){var i=n,{files:e,setFiles:o}=i,t=x(i,["files","setFiles"]);function r(s){o(d=>[...d,...s])}let p=u(a({},t),{onFileInput:r});return(p==null?void 0:p.multiple)===void 0&&(p.multiple=!0),Yo(Vo,{children:[b(U,a({},p)),b($o,{children:e.map(s=>b(_o,{secondaryAction:b(Xo,{"aria-label":"Delete",edge:"end",onClick:()=>{o(d=>d.filter(l=>l!==s))},children:b(Uo,{})}),children:b(Go,{primary:s.name})},s.name))})]})}var Ko=Jo;import qo from"@mui/material/Box";import Qo from"@mui/material/Popover";import{useId as Zo,useState as jo}from"react";import{jsx as me,jsxs as tt}from"react/jsx-runtime";function et({icon:e,onOpen:o,onClose:t,iconProps:n,children:i}){let[r,p]=jo(null),s=!!r,d=Zo();function l(c){p(c.currentTarget),o&&o()}function m(){p(null),t&&t()}return tt(qo,{children:[me(e,a({"aria-owns":s?d:void 0,"aria-haspopup":"true",onMouseEnter:l,onMouseLeave:m},n)),me(Qo,{id:d,sx:{pointerEvents:"none"},open:s,anchorEl:r,anchorOrigin:{vertical:"bottom",horizontal:"left"},transformOrigin:{vertical:"top",horizontal:"left"},onClose:m,disableRestoreFocus:!0,children:i})]})}var ot=et;import rt from"@mui/material/Link";import{Link as nt}from"react-router-dom";import{jsx as at}from"react/jsx-runtime";function it(n){var i=n,{to:e,children:o}=i,t=x(i,["to","children"]);return at(rt,u(a({component:nt,to:e},t),{children:o}))}var V=it;import pt from"@mui/material/ListItemButton";import{jsx as mt}from"react/jsx-runtime";function st(t){var n=t,{children:e}=n,o=x(n,["children"]);return mt(pt,u(a({component:V},o),{children:e}))}var dt=st;import lt from"@mui/material/CircularProgress";import{jsx as X,jsxs as ft}from"react/jsx-runtime";function ct(i){var r=i,{children:e,onUndefined:o,loadingComponent:t=X(lt,{})}=r,n=x(r,["children","onUndefined","loadingComponent"]);return ft(A,u(a({loadingComponent:t},n),{children:[X(W,{}),X(O,{onUndefined:o,children:e})]}))}var ut=ct;import xt from"@mui/material/BottomNavigation";import gt from"@mui/material/BottomNavigationAction";import ht from"@mui/material/Box";import yt from"@mui/material/Paper";import{useState as Pt}from"react";import{Link as vt}from"react-router-dom";import{Fragment as bt,jsx as N,jsxs as It}from"react/jsx-runtime";function St({children:e,navItems:o}){let[t,n]=Pt("");return It(bt,{children:[N(ht,{sx:{paddingBottom:7},children:e}),N(yt,{sx:{position:"fixed",bottom:0,left:0,right:0},children:N(xt,{showLabels:!0,value:t,onChange:(i,r)=>{n(r)},children:o.map(i=>N(gt,u(a({},i),{component:vt}),i.value))})})]})}var wt=St;import{truncate as le}from"@alextheman/utility";import Lt from"@mui/icons-material/ChevronLeft";import Ct from"@mui/icons-material/ChevronRight";import kt from"@mui/icons-material/Menu";import Tt from"@mui/material/AppBar";import ce from"@mui/material/Box";import Bt from"@mui/material/CssBaseline";import ue from"@mui/material/Divider";import Dt from"@mui/material/Drawer";import fe from"@mui/material/IconButton";import Nt from"@mui/material/List";import Mt from"@mui/material/ListItem";import Rt from"@mui/material/ListItemButton";import Et from"@mui/material/ListItemIcon";import At from"@mui/material/ListItemText";import{styled as _,useTheme as Ot}from"@mui/material/styles";import Ft from"@mui/material/Toolbar";import $ from"@mui/material/Typography";import{Fragment as Wt,useState as zt}from"react";import{Link as Ht,useLocation as Ut}from"react-router-dom";import{jsx as g,jsxs as v}from"react/jsx-runtime";var M=240;function xe(e){return{width:M,transition:e.transitions.create("width",{easing:e.transitions.easing.sharp,duration:e.transitions.duration.enteringScreen}),overflowX:"hidden"}}function ge(e){return{transition:e.transitions.create("width",{easing:e.transitions.easing.sharp,duration:e.transitions.duration.leavingScreen}),overflowX:"hidden",width:`calc(${e.spacing(7)} + 1px)`,[e.breakpoints.up("sm")]:{width:`calc(${e.spacing(8)} + 1px)`}}}var he=_("div")(({theme:e})=>a({display:"flex",alignItems:"center",justifyContent:"flex-end",padding:e.spacing(0,1)},e.mixins.toolbar)),Vt=_(Tt,{shouldForwardProp:e=>e!=="open"})(({theme:e})=>({zIndex:e.zIndex.drawer+1,transition:e.transitions.create(["width","margin"],{easing:e.transitions.easing.sharp,duration:e.transitions.duration.leavingScreen}),variants:[{props:({open:o})=>o,style:{marginLeft:M,width:`calc(100% - ${M}px)`,transition:e.transitions.create(["width","margin"],{easing:e.transitions.easing.sharp,duration:e.transitions.duration.enteringScreen})}}]})),Xt=_(Dt,{shouldForwardProp:e=>e!=="open"})(({theme:e})=>({width:M,flexShrink:0,whiteSpace:"nowrap",boxSizing:"border-box",variants:[{props:({open:o})=>o,style:u(a({},xe(e)),{"& .MuiDrawer-paper":xe(e)})},{props:({open:o})=>!o,style:u(a({},ge(e)),{"& .MuiDrawer-paper":ge(e)})}]}));function $t({title:e,navItems:o,children:t,headerElements:n}){let i=Ot(),[r,p]=zt(!0),s=Ut();function d(){p(!0)}function l(){p(!1)}return v(ce,{sx:{display:"flex"},children:[g(Bt,{}),g(Vt,{position:"fixed",open:r,children:v(Ft,{children:[g(fe,{color:"inherit","aria-label":"open drawer",onClick:d,edge:"start",sx:[{marginRight:5},r&&{display:"none"}],children:g(kt,{})}),g($,{variant:"h6",noWrap:!0,component:"div",children:e}),n]})}),v(Xt,{variant:"permanent",open:r,children:[g(he,{children:g(fe,{onClick:l,children:i.direction==="rtl"?g(Ct,{}):g(Lt,{})})}),g(ue,{}),o.map(m=>v(Wt,{children:[v(Nt,{children:[g($,{variant:r?"h5":"h6",paddingLeft:r?2:1,children:r?m.category:le(m.category,4)}),m.options.map(c=>g(Mt,{disablePadding:!0,sx:{display:"block"},children:v(Rt,{sx:[{minHeight:48,px:2.5},r?{justifyContent:"initial"}:{justifyContent:"center"}],component:Ht,to:c.to,selected:s.pathname===c.to,children:[g(Et,{sx:[{minWidth:0,justifyContent:"center"},r?{mr:3}:{mr:"auto"}],children:c.icon?c.icon:r?null:g($,{children:le(c.label,4)})}),g(At,{primary:c.label,sx:[r?{opacity:1}:{opacity:0}]})]})},c.to))]}),g(ue,{})]},m.category))]}),v(ce,{component:"main",sx:{flexGrow:1,p:3},children:[g(he,{}),t]})]})}var _t=$t;import Gt from"@mui/material/Typography";import{Fragment as Yt,jsx as ye}from"react/jsx-runtime";function Jt(n){var i=n,{text:e,sx:o}=i,t=x(i,["text","sx"]);return ye(Yt,{children:e.split(`
2
- `).map((r,p)=>ye(Gt,u(a({sx:a({margin:1},o)},t),{children:r}),p))})}var Kt=Jt;import G from"@mui/material/Box";import Pe from"@mui/material/Typography";import{stripIndent as qt}from"common-tags";import{LiveEditor as Qt,LiveError as Zt,LivePreview as jt,LiveProvider as er}from"react-live";import{jsx as P,jsxs as ve}from"react/jsx-runtime";function or({code:e,scope:o,previewStyles:t,noInline:n,enableTypeScript:i,language:r}){let{mode:p}=L(),s={backgroundColor:p==="dark"?"black":"white",border:.3,borderRadius:1,padding:2,borderColor:"darkgray"},d=t?a(a({},s),t):a({},s);return P(G,{sx:{borderRadius:1,border:.5,padding:2},children:ve(er,{code:qt(e),scope:o,noInline:n,enableTypeScript:i,language:r,children:[P(Pe,{variant:"h5",children:"Code"}),P(G,{sx:{border:.3,borderRadius:.3,borderColor:"darkgray"},children:P(Qt,{})}),P("br",{}),P(Pe,{variant:"h5",children:"Result"}),ve(G,{sx:d,children:[P(jt,{}),P(Zt,{})]})]})})}var tr=or;import rr from"@mui/material/Button";import{useFormContext as nr}from"react-hook-form";import{jsx as pr}from"react/jsx-runtime";function ir(n){var i=n,{disableClean:e,label:o}=i,t=x(i,["disableClean","label"]);let{formState:{disabled:r,isDirty:p,isSubmitting:s}}=nr();return pr(rr,u(a({color:"primary",disabled:t.disabled||e&&!p||r,loading:s,type:"submit",variant:"contained"},t),{children:o}))}var ar=ir;import Se from"@mui/material/Box";import{styled as sr}from"@mui/material/styles";import dr from"@mui/material/Switch";import{jsx as k}from"react/jsx-runtime";var mr=sr(dr)(()=>({padding:8,"& .MuiSwitch-track":{borderRadius:11,"&::before, &::after":{content:'""',position:"absolute",top:"50%",transform:"translateY(-50%)",fontSize:16,width:28,height:28}}}));function lr(r){var p=r,{checkedIcon:e,checkedIconStyles:o,uncheckedIcon:t,uncheckedIconStyles:n}=p,i=x(p,["checkedIcon","checkedIconStyles","uncheckedIcon","uncheckedIconStyles"]);let s={borderRadius:"50%",borderColor:"white",backgroundColor:"white",display:"flex",alignItems:"center",justifyContent:"center",padding:.25},d={color:"black",maxWidth:16.5,maxHeight:16.5};return k(mr,a({checkedIcon:k(Se,{sx:s,children:k(e,{style:a(a({},d),o)})}),icon:k(Se,{sx:s,children:k(t,{style:a(a({},d),n)})})},i))}var cr=lr;import{useCallback as we,useEffect as ur,useState as fr}from"react";function xr(e){let[o,t]=fr(()=>{let r=window.location.hash.replace("#","");return e&&r===""?e:r}),n=we(()=>{let r=window.location.hash.replace("#","");t(e&&r===""?e:r)},[t,e]);ur(()=>(window.addEventListener("hashchange",n),()=>{window.removeEventListener("hashchange",n)}),[n]);let i=we(r=>{let p=typeof r=="function"?r(o):r;p!==o&&(window.location.hash=p)},[o]);return[o,i]}var gr=xr;export{Re as CollapsableItem,Po as DarkModeToggle,ko as DropdownMenu,No as ExternalLink,U as FileInput,Ko as FileInputList,Oo as FileType,ot as IconWithPopover,V as InternalLink,dt as ListItemInternalLink,ut as Loader,O as LoaderData,W as LoaderError,A as LoaderProvider,qe as ModeProvider,wt as NavigationBottom,_t as NavigationDrawer,Kt as PopoverText,tr as ReactPlayground,to as ScreenSizeProvider,co as SnackbarProvider,ar as SubmitButton,cr as SwitchWithIcons,gr as useHash,I as useLoader,L as useMode,eo as useScreenSize,mo as useSnackbar};
1
+ var Le=Object.defineProperty,Ie=Object.defineProperties;var ke=Object.getOwnPropertyDescriptors;var T=Object.getOwnPropertySymbols;var Y=Object.prototype.hasOwnProperty,q=Object.prototype.propertyIsEnumerable;var K=(e,o,r)=>o in e?Le(e,o,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[o]=r,a=(e,o)=>{for(var r in o||(o={}))Y.call(o,r)&&K(e,r,o[r]);if(T)for(var r of T(o))q.call(o,r)&&K(e,r,o[r]);return e},u=(e,o)=>Ie(e,ke(o));var x=(e,o)=>{var r={};for(var n in e)Y.call(e,n)&&o.indexOf(n)<0&&(r[n]=e[n]);if(e!=null&&T)for(var n of T(e))o.indexOf(n)<0&&q.call(e,n)&&(r[n]=e[n]);return r};var Q=(e,o,r)=>new Promise((n,i)=>{var t=d=>{try{s(r.next(d))}catch(l){i(l)}},p=d=>{try{s(r.throw(d))}catch(l){i(l)}},s=d=>d.done?n(d.value):Promise.resolve(d.value).then(t,p);s((r=r.apply(e,o)).next())});import Ce from"@mui/icons-material/ArrowDropDown";import Te from"@mui/icons-material/ArrowDropUp";import Be from"@mui/material/Box";import M from"@mui/material/ButtonBase";import Re from"@mui/material/Collapse";import{useEffect as De,useState as Ne}from"react";import{jsx as E,jsxs as Z}from"react/jsx-runtime";function Me({isInitiallyOpen:e,onOpen:o,onClose:r,children:n,buttonStyles:i,buttonContents:t,buttonComponent:p=M,collapseProps:s,openIcon:d=E(Te,{}),closedIcon:l=E(Ce,{}),useDefaultStyling:m=p===M}){let[c,f]=Ne(!!e);return De(()=>{c&&o?o():!c&&r&&r()},[c]),Z(Be,{children:[Z(p,{onClick:()=>{f(g=>!g)},sx:m?a({width:"100%",display:"flex",alignItems:"center",justifyContent:"center",paddingY:1.5,paddingX:2,textAlign:"center","&:hover":p===M?{backgroundColor:"action.hover"}:null},i):i,"aria-expanded":c,children:[t,c?d:l]}),E(Re,u(a({in:c},s),{children:n}))]})}var Ee=Me;import xo from"@mui/icons-material/DarkMode";import Po from"@mui/icons-material/LightMode";import go from"@mui/material/IconButton";import ho from"@mui/material/Tooltip";import Ae from"@mui/material/CircularProgress";import{createContext as Oe,useContext as Fe}from"react";import{jsx as j}from"react/jsx-runtime";var ee=Oe(void 0);function L(){let e=Fe(ee);if(!e)throw new Error("LOADER_CONTEXT_NOT_SET");return e}function We(n){var i=n,{children:e,loadingComponent:o=j(Ae,{})}=i,r=x(i,["children","loadingComponent"]);return j(ee.Provider,{value:a({loadingComponent:o},r),children:e})}var A=We;import{useRef as ze}from"react";import{Fragment as S,jsx as w}from"react/jsx-runtime";function He({children:e,loadingComponent:o,onUndefined:r,showOnError:n}){let{isLoading:i,data:t,loadingComponent:p,error:s}=L(),d=ze(!1);if(i)return w(S,{children:o!=null?o:p});if(s&&!n)return w(S,{});if(t===void 0){if(d.current||(console.warn("Data is undefined after loading. This could either be an issue with the query or you have not passed in the data to LoaderProvider. Please double-check that you have provided data."),d.current=!0),r){let l=r();return l!=null?l:w(S,{})}return w(S,{})}return typeof e=="function"?w(S,{children:e(t)}):w(S,{children:e})}var O=He;import Ue from"@mui/material/Alert";import{Fragment as oe,jsx as F}from"react/jsx-runtime";function Ve(){var r;let{error:e,errorComponent:o}=L();return e?typeof o=="function"?o(e):o?F(oe,{children:o}):F(Ue,{severity:"error",children:(r=e==null?void 0:e.message)!=null?r:"An unknown error has occured. Please try again later."}):F(oe,{})}var W=Ve;import Xe from"@mui/material/CssBaseline";import{createTheme as $e,ThemeProvider as _e}from"@mui/material/styles";import{createContext as Ge,useContext as Je,useMemo as Ke,useState as Ye}from"react";import{jsx as re,jsxs as Ze}from"react/jsx-runtime";var te=Ge({toggleMode:()=>{},mode:"dark"});function I(){return Je(te)}function qe({children:e,mode:o="dark"}){let[r,n]=Ye(o),i=Ke(()=>$e({palette:{mode:r}}),[r]);return re(te.Provider,{value:{mode:r,toggleMode:()=>{n(t=>t==="light"?"dark":"light")}},children:Ze(_e,{theme:i,children:[re(Xe,{}),e]})})}var Qe=qe;import{createContext as je,useContext as eo,useEffect as ne,useState as z}from"react";import{jsx as no}from"react/jsx-runtime";var ie=je({windowWidth:0,windowHeight:0,isLargeScreen:!1});function oo(){return eo(ie)}function ro({children:e,largeScreenWidth:o,largeScreenHeight:r}){let[n,i]=z(window.innerWidth),[t,p]=z(window.innerHeight);function s(m,c,f=669,g=600){return m>f&&c>g}let[d,l]=z(s(window.innerWidth,window.innerHeight,o,r));return ne(()=>{function m(){i(window.innerWidth),p(window.innerHeight)}return m(),window.addEventListener("resize",m),()=>{window.removeEventListener("resize",m)}},[]),ne(()=>{l(s(n,t,o,r))},[n,t,o,r]),no(ie.Provider,{value:{isLargeScreen:d,windowWidth:n,windowHeight:t},children:e})}var to=ro;import{wait as io}from"@alextheman/utility";import ao from"@mui/material/Alert";import po from"@mui/material/Snackbar";import{createContext as so,useContext as mo,useState as B}from"react";import{jsx as ae,jsxs as fo}from"react/jsx-runtime";var pe=so(void 0);function lo(){let e=mo(pe);if(!e)throw new Error("SNACKBAR_CONTEXT_NOT_SET");return e}function co({children:e,autoHideDuration:o=5e3}){let[r,n]=B(!1),[i,t]=B(o),[p,s]=B(""),[d,l]=B("info");function m(f,g,h){n(!0),t(h!=null?h:o),l(g!=null?g:"info"),s(f)}function c(){return Q(this,null,function*(){n(!1),yield io(.2),s("")})}return fo(pe.Provider,{value:{addSnackbar:m},children:[ae(po,{open:r,autoHideDuration:i,onClose:c,children:ae(ao,{onClose:c,severity:d,children:p})}),e]})}var uo=co;import{jsx as R}from"react/jsx-runtime";function yo(){let{mode:e,toggleMode:o}=I();return R(ho,{title:`Enable ${e==="dark"?"light":"dark"} mode`,children:R(go,{sx:{marginLeft:"auto"},onClick:o,"aria-label":`Enable ${e==="dark"?"light":"dark"} mode`,children:e==="dark"?R(Po,{}):R(xo,{})})})}var vo=yo;import So from"@mui/icons-material/ArrowDropDown";import wo from"@mui/icons-material/ArrowDropUp";import se from"@mui/material/Box";import de from"@mui/material/Button";import bo from"@mui/material/Menu";import{useEffect as Lo,useMemo as Io,useState as ko}from"react";import{jsx as k,jsxs as Bo}from"react/jsx-runtime";function Co({children:e,button:o=de,buttonChildren:r="Menu",buttonProps:n,isOpenIcon:i=k(wo,{}),isClosedIcon:t=k(So,{}),onOpen:p,onClose:s}){let[d,l]=ko(null),m=Io(()=>!!d,[d]),c=u(a({},n),{onClick:f=>{l(f.currentTarget)},"aria-controls":m?"dropdown-menu":void 0,"aria-haspopup":"true","aria-expanded":m});return o===de&&(c.endIcon=m?i:t),Lo(()=>{m&&p?p():!m&&s&&s()},[m,p,s]),Bo(se,{children:[k(o,u(a({},c),{children:r})),k(bo,{id:"dropdown-menu",anchorEl:d,open:m,onClose:()=>{l(null)},children:typeof e=="function"?k(se,{children:e(()=>{l(null)})}):e})]})}var To=Co;import Ro from"@mui/material/Link";import{jsx as Mo}from"react/jsx-runtime";function Do(n){var i=n,{href:e,children:o}=i,r=x(i,["href","children"]);return Mo(Ro,u(a({component:"a",href:e,target:"_blank",rel:"noopener noreferrer"},r),{children:o}))}var No=Do;import Eo from"@mui/icons-material/CloudUpload";import Ao from"@mui/material/Button";import{styled as me}from"@mui/material/styles";import{useState as Oo}from"react";import{jsx as H,jsxs as Uo}from"react/jsx-runtime";var Fo={PDF:"application/pdf",PNG:"image/png",JPEG:"image/jpeg",JPG:"image/jpg",XLSX:"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",DOCX:"application/vnd.openxmlformats-officedocument.wordprocessingml.document",MP3:"audio/mp3",MP4:"video/mp4",WAV:"audio/wav"},Wo=me("input")({clip:"rect(0 0 0 0)",clipPath:"inset(50%)",height:1,overflow:"hidden",position:"absolute",bottom:0,left:0,whiteSpace:"nowrap",width:1}),zo=me("div")(({theme:e,$dragging:o})=>({border:"2px dashed",borderColor:o?e.palette.primary.main:"#ccc",backgroundColor:o?e.palette.action.hover:"transparent",borderRadius:8,padding:"1.5rem",textAlign:"center",transition:"border-color 0.2s",cursor:"pointer"}));function Ho(p){var s=p,{onFileInput:e,label:o="Upload files",multiple:r,accept:n,useDropzone:i}=s,t=x(s,["onFileInput","label","multiple","accept","useDropzone"]);var c;let[d,l]=Oo(!1),m=Uo(Ao,u(a({variant:"contained",component:"label","aria-label":"File upload button",onKeyDown:f=>{var g;(f.key==="Enter"||f.key===" ")&&(f.preventDefault(),(g=document.getElementById("file-input"))==null||g.click())}},t),{startIcon:(c=t.startIcon)!=null?c:H(Eo,{}),children:[o,H(Wo,{id:"file-input",type:"file",onChange:f=>{var h;let g=f.target;e(Array.from((h=g.files)!=null?h:[])),g.value=""},multiple:r,accept:n==null?void 0:n.join(","),disabled:t.disabled})]}));return i?H(zo,{$dragging:d,onDragOver:f=>{f.preventDefault(),!t.disabled&&l(!0)},onDragLeave:f=>{f.preventDefault(),l(!1)},onDrop:f=>{var h;if(f.preventDefault(),l(!1),t.disabled)return;let g=Array.from((h=f.dataTransfer.files)!=null?h:[]);e(g)},children:m}):m}var U=Ho;import Vo from"@mui/icons-material/Delete";import Xo from"@mui/material/Box";import $o from"@mui/material/IconButton";import _o from"@mui/material/List";import Go from"@mui/material/ListItem";import Jo from"@mui/material/ListItemText";import{jsx as b,jsxs as qo}from"react/jsx-runtime";function Ko(n){var i=n,{files:e,setFiles:o}=i,r=x(i,["files","setFiles"]);function t(s){o(d=>[...d,...s])}let p=u(a({},r),{onFileInput:t});return(p==null?void 0:p.multiple)===void 0&&(p.multiple=!0),qo(Xo,{children:[b(U,a({},p)),b(_o,{children:e.map(s=>b(Go,{secondaryAction:b($o,{"aria-label":"Delete",edge:"end",onClick:()=>{o(d=>d.filter(l=>l!==s))},children:b(Vo,{})}),children:b(Jo,{primary:s.name})},s.name))})]})}var Yo=Ko;import Qo from"@mui/material/Box";import Zo from"@mui/material/Popover";import{useId as jo,useState as er}from"react";import{jsx as le,jsxs as tr}from"react/jsx-runtime";function or({icon:e,onOpen:o,onClose:r,iconProps:n,children:i}){let[t,p]=er(null),s=!!t,d=jo();function l(c){p(c.currentTarget),o&&o()}function m(){p(null),r&&r()}return tr(Qo,{children:[le(e,a({"aria-owns":s?d:void 0,"aria-haspopup":"true",onMouseEnter:l,onMouseLeave:m},n)),le(Zo,{id:d,sx:{pointerEvents:"none"},open:s,anchorEl:t,anchorOrigin:{vertical:"bottom",horizontal:"left"},transformOrigin:{vertical:"top",horizontal:"left"},onClose:m,disableRestoreFocus:!0,children:i})]})}var rr=or;import nr from"@mui/material/Link";import{Link as ir}from"react-router-dom";import{jsx as pr}from"react/jsx-runtime";function ar(n){var i=n,{to:e,children:o}=i,r=x(i,["to","children"]);return pr(nr,u(a({component:ir,to:e},r),{children:o}))}var V=ar;import sr from"@mui/material/ListItemButton";import{jsx as lr}from"react/jsx-runtime";function dr(r){var n=r,{children:e}=n,o=x(n,["children"]);return lr(sr,u(a({component:V},o),{children:e}))}var mr=dr;import cr from"@mui/material/CircularProgress";import{jsx as X,jsxs as xr}from"react/jsx-runtime";function ur(i){var t=i,{children:e,onUndefined:o,loadingComponent:r=X(cr,{})}=t,n=x(t,["children","onUndefined","loadingComponent"]);return xr(A,u(a({loadingComponent:r},n),{children:[X(W,{}),X(O,{onUndefined:o,children:e})]}))}var fr=ur;import Pr from"@mui/material/BottomNavigation";import gr from"@mui/material/BottomNavigationAction";import hr from"@mui/material/Box";import yr from"@mui/material/Paper";import{useState as vr}from"react";import{Link as Sr}from"react-router-dom";import{Fragment as Lr,jsx as D,jsxs as Ir}from"react/jsx-runtime";function wr({children:e,navItems:o}){let[r,n]=vr("");return Ir(Lr,{children:[D(hr,{sx:{paddingBottom:7},children:e}),D(yr,{sx:{position:"fixed",bottom:0,left:0,right:0},children:D(Pr,{showLabels:!0,value:r,onChange:(i,t)=>{n(t)},children:o.map(i=>D(gr,u(a({},i),{component:Sr}),i.value))})})]})}var br=wr;import{truncate as ce}from"@alextheman/utility";import kr from"@mui/icons-material/ChevronLeft";import Cr from"@mui/icons-material/ChevronRight";import Tr from"@mui/icons-material/Menu";import Br from"@mui/material/AppBar";import ue from"@mui/material/Box";import Rr from"@mui/material/CssBaseline";import fe from"@mui/material/Divider";import Dr from"@mui/material/Drawer";import xe from"@mui/material/IconButton";import Nr from"@mui/material/List";import Mr from"@mui/material/ListItem";import Er from"@mui/material/ListItemButton";import Ar from"@mui/material/ListItemIcon";import Or from"@mui/material/ListItemText";import{styled as _,useTheme as Fr}from"@mui/material/styles";import Wr from"@mui/material/Toolbar";import $ from"@mui/material/Typography";import{Fragment as zr,useState as Hr}from"react";import{Link as Ur,useLocation as Vr}from"react-router-dom";import{jsx as P,jsxs as v}from"react/jsx-runtime";var N=240;function Pe(e){return{width:N,transition:e.transitions.create("width",{easing:e.transitions.easing.sharp,duration:e.transitions.duration.enteringScreen}),overflowX:"hidden"}}function ge(e){return{transition:e.transitions.create("width",{easing:e.transitions.easing.sharp,duration:e.transitions.duration.leavingScreen}),overflowX:"hidden",width:`calc(${e.spacing(7)} + 1px)`,[e.breakpoints.up("sm")]:{width:`calc(${e.spacing(8)} + 1px)`}}}var he=_("div")(({theme:e})=>a({display:"flex",alignItems:"center",justifyContent:"flex-end",padding:e.spacing(0,1)},e.mixins.toolbar)),Xr=_(Br,{shouldForwardProp:e=>e!=="open"})(({theme:e})=>({zIndex:e.zIndex.drawer+1,transition:e.transitions.create(["width","margin"],{easing:e.transitions.easing.sharp,duration:e.transitions.duration.leavingScreen}),variants:[{props:({open:o})=>o,style:{marginLeft:N,width:`calc(100% - ${N}px)`,transition:e.transitions.create(["width","margin"],{easing:e.transitions.easing.sharp,duration:e.transitions.duration.enteringScreen})}}]})),$r=_(Dr,{shouldForwardProp:e=>e!=="open"})(({theme:e})=>({width:N,flexShrink:0,whiteSpace:"nowrap",boxSizing:"border-box",variants:[{props:({open:o})=>o,style:u(a({},Pe(e)),{"& .MuiDrawer-paper":Pe(e)})},{props:({open:o})=>!o,style:u(a({},ge(e)),{"& .MuiDrawer-paper":ge(e)})}]}));function _r({title:e,navItems:o,children:r,headerElements:n}){let i=Fr(),[t,p]=Hr(!0),s=Vr();function d(){p(!0)}function l(){p(!1)}return v(ue,{sx:{display:"flex"},children:[P(Rr,{}),P(Xr,{position:"fixed",open:t,children:v(Wr,{children:[P(xe,{color:"inherit","aria-label":"open drawer",onClick:d,edge:"start",sx:[{marginRight:5},t&&{display:"none"}],children:P(Tr,{})}),P($,{variant:"h6",noWrap:!0,component:"div",children:e}),n]})}),v($r,{variant:"permanent",open:t,children:[P(he,{children:P(xe,{onClick:l,children:i.direction==="rtl"?P(Cr,{}):P(kr,{})})}),P(fe,{}),o.map(m=>v(zr,{children:[v(Nr,{children:[P($,{variant:t?"h5":"h6",paddingLeft:t?2:1,children:t?m.category:ce(m.category,4)}),m.options.map(c=>P(Mr,{disablePadding:!0,sx:{display:"block"},children:v(Er,{sx:[{minHeight:48,px:2.5},t?{justifyContent:"initial"}:{justifyContent:"center"}],component:Ur,to:c.to,selected:s.pathname===c.to,children:[P(Ar,{sx:[{minWidth:0,justifyContent:"center"},t?{mr:3}:{mr:"auto"}],children:c.icon?c.icon:t?null:P($,{children:ce(c.label,4)})}),P(Or,{primary:c.label,sx:[t?{opacity:1}:{opacity:0}]})]})},c.to))]}),P(fe,{})]},m.category))]}),v(ue,{component:"main",sx:{flexGrow:1,p:3},children:[P(he,{}),r]})]})}var Gr=_r;import Jr from"@mui/material/Typography";import{Fragment as qr,jsx as ye}from"react/jsx-runtime";function Kr(n){var i=n,{text:e,sx:o}=i,r=x(i,["text","sx"]);return ye(qr,{children:e.split(`
2
+ `).map((t,p)=>ye(Jr,u(a({sx:a({margin:1},o)},r),{children:t}),p))})}var Yr=Kr;import G from"@mui/material/Box";import ve from"@mui/material/Typography";import{stripIndent as Qr}from"common-tags";import{LiveEditor as Zr,LiveError as jr,LivePreview as et,LiveProvider as ot}from"react-live";import{jsx as y,jsxs as Se}from"react/jsx-runtime";function rt({code:e,scope:o,previewStyles:r,noInline:n,enableTypeScript:i,language:t}){let{mode:p}=I(),s={backgroundColor:p==="dark"?"black":"white",border:.3,borderRadius:1,padding:2,borderColor:"darkgray"},d=r?a(a({},s),r):a({},s);return y(G,{sx:{borderRadius:1,border:.5,padding:2},children:Se(ot,{code:Qr(e),scope:o,noInline:n,enableTypeScript:i,language:t,children:[y(ve,{variant:"h5",children:"Code"}),y(G,{sx:{border:.3,borderRadius:.3,borderColor:"darkgray"},children:y(Zr,{})}),y("br",{}),y(ve,{variant:"h5",children:"Result"}),Se(G,{sx:d,children:[y(et,{}),y(jr,{})]})]})})}var tt=rt;import{fillArray as nt}from"@alextheman/utility";import it from"@mui/material/Skeleton";import at from"@mui/material/TableCell";import pt from"@mui/material/TableRow";import{jsx as J}from"react/jsx-runtime";function st({columns:e}){return J(pt,{children:nt(o=>J(at,{children:J(it,{})},o),e)})}var dt=st;import mt from"@mui/material/Button";import{useFormContext as lt}from"react-hook-form";import{jsx as ft}from"react/jsx-runtime";function ct(n){var i=n,{disableClean:e,label:o}=i,r=x(i,["disableClean","label"]);let{formState:{disabled:t,isDirty:p,isSubmitting:s}}=lt();return ft(mt,u(a({color:"primary",disabled:r.disabled||e&&!p||t,loading:s,type:"submit",variant:"contained"},r),{children:o}))}var ut=ct;import we from"@mui/material/Box";import{styled as xt}from"@mui/material/styles";import Pt from"@mui/material/Switch";import{jsx as C}from"react/jsx-runtime";var gt=xt(Pt)(()=>({padding:8,"& .MuiSwitch-track":{borderRadius:11,"&::before, &::after":{content:'""',position:"absolute",top:"50%",transform:"translateY(-50%)",fontSize:16,width:28,height:28}}}));function ht(t){var p=t,{checkedIcon:e,checkedIconStyles:o,uncheckedIcon:r,uncheckedIconStyles:n}=p,i=x(p,["checkedIcon","checkedIconStyles","uncheckedIcon","uncheckedIconStyles"]);let s={borderRadius:"50%",borderColor:"white",backgroundColor:"white",display:"flex",alignItems:"center",justifyContent:"center",padding:.25},d={color:"black",maxWidth:16.5,maxHeight:16.5};return C(gt,a({checkedIcon:C(we,{sx:s,children:C(e,{style:a(a({},d),o)})}),icon:C(we,{sx:s,children:C(r,{style:a(a({},d),n)})})},i))}var yt=ht;import{useCallback as be,useEffect as vt,useState as St}from"react";function wt(e){let[o,r]=St(()=>{let t=window.location.hash.replace("#","");return e&&t===""?e:t}),n=be(()=>{let t=window.location.hash.replace("#","");r(e&&t===""?e:t)},[r,e]);vt(()=>(window.addEventListener("hashchange",n),()=>{window.removeEventListener("hashchange",n)}),[n]);let i=be(t=>{let p=typeof t=="function"?t(o):t;p!==o&&(window.location.hash=p)},[o]);return[o,i]}var bt=wt;export{Ee as CollapsableItem,vo as DarkModeToggle,To as DropdownMenu,No as ExternalLink,U as FileInput,Yo as FileInputList,Fo as FileType,rr as IconWithPopover,V as InternalLink,mr as ListItemInternalLink,fr as Loader,O as LoaderData,W as LoaderError,A as LoaderProvider,Qe as ModeProvider,br as NavigationBottom,Gr as NavigationDrawer,Yr as PopoverText,tt as ReactPlayground,to as ScreenSizeProvider,dt as SkeletonRow,uo as SnackbarProvider,ut as SubmitButton,yt as SwitchWithIcons,bt as useHash,L as useLoader,I as useMode,oo as useScreenSize,lo as useSnackbar};
3
3
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/CollapsableItem.tsx","../src/components/DarkModeToggle.tsx","../src/providers/LoaderProvider/index.tsx","../src/providers/LoaderProvider/LoaderData.tsx","../src/providers/LoaderProvider/LoaderError.tsx","../src/providers/ModeProvider.tsx","../src/providers/ScreenSizeProvider.tsx","../src/providers/SnackbarProvider.tsx","../src/components/DropdownMenu.tsx","../src/components/ExternalLink.tsx","../src/components/FileInput.tsx","../src/components/FileInputList.tsx","../src/components/IconWithPopover.tsx","../src/components/InternalLink.tsx","../src/components/ListItemInternalLink.tsx","../src/components/Loader.tsx","../src/components/NavigationBottom.tsx","../src/components/NavigationDrawer.tsx","../src/components/PopoverText.tsx","../src/components/ReactPlayground.tsx","../src/components/SubmitButton.tsx","../src/components/SwitchWithIcons.tsx","../src/hooks/useHash.ts"],"sourcesContent":["import type { CollapseProps } from \"@mui/material/Collapse\";\nimport type { SxProps } from \"@mui/material/styles\";\nimport type { ElementType, ReactNode } from \"react\";\n\nimport ArrowDropDown from \"@mui/icons-material/ArrowDropDown\";\nimport ArrowDropUp from \"@mui/icons-material/ArrowDropUp\";\nimport Box from \"@mui/material/Box\";\nimport ButtonBase from \"@mui/material/ButtonBase\";\nimport Collapse from \"@mui/material/Collapse\";\nimport { useEffect, useState } from \"react\";\n\nexport interface CollapsableItemProps {\n isInitiallyOpen?: boolean;\n onOpen?: () => void;\n onClose?: () => void;\n children: ReactNode;\n buttonStyles?: SxProps;\n buttonContents: ReactNode;\n buttonComponent?: ElementType;\n openIcon?: ReactNode;\n closedIcon?: ReactNode;\n collapseProps?: Omit<CollapseProps, \"in\">;\n useDefaultStyling?: boolean;\n}\n\nfunction CollapsableItem({\n isInitiallyOpen,\n onOpen,\n onClose,\n children,\n buttonStyles,\n buttonContents,\n buttonComponent: ButtonComponent = ButtonBase,\n collapseProps,\n openIcon = <ArrowDropUp />,\n closedIcon = <ArrowDropDown />,\n useDefaultStyling = ButtonComponent === ButtonBase ? true : false,\n}: CollapsableItemProps) {\n const [isItemOpen, setIsItemOpen] = useState<boolean>(!!isInitiallyOpen);\n\n useEffect(() => {\n if (isItemOpen && onOpen) {\n onOpen();\n } else if (!isItemOpen && onClose) {\n onClose();\n }\n }, [isItemOpen]);\n\n return (\n <Box>\n <ButtonComponent\n onClick={() => {\n setIsItemOpen((previouslyOpen) => {\n return !previouslyOpen;\n });\n }}\n sx={\n useDefaultStyling\n ? {\n width: \"100%\",\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n paddingY: 1.5,\n paddingX: 2,\n textAlign: \"center\",\n \"&:hover\":\n ButtonComponent === ButtonBase ? { backgroundColor: \"action.hover\" } : null,\n ...buttonStyles,\n }\n : buttonStyles\n }\n aria-expanded={isItemOpen}\n >\n {buttonContents}\n {isItemOpen ? openIcon : closedIcon}\n </ButtonComponent>\n <Collapse in={isItemOpen} {...collapseProps}>\n {children}\n </Collapse>\n </Box>\n );\n}\n\nexport default CollapsableItem;\n","import DarkMode from \"@mui/icons-material/DarkMode\";\nimport LightMode from \"@mui/icons-material/LightMode\";\nimport IconButton from \"@mui/material/IconButton\";\nimport Tooltip from \"@mui/material/Tooltip\";\n\nimport { useMode } from \"src/providers\";\n\nfunction DarkModeToggle() {\n const { mode, toggleMode } = useMode();\n\n return (\n <Tooltip title={`Enable ${mode === \"dark\" ? \"light\" : \"dark\"} mode`}>\n <IconButton\n sx={{ marginLeft: \"auto\" }}\n onClick={toggleMode}\n aria-label={`Enable ${mode === \"dark\" ? \"light\" : \"dark\"} mode`}\n >\n {mode === \"dark\" ? <LightMode /> : <DarkMode />}\n </IconButton>\n </Tooltip>\n );\n}\n\nexport default DarkModeToggle;\n","import type { ReactNode } from \"react\";\n\nimport CircularProgress from \"@mui/material/CircularProgress\";\nimport { createContext, useContext } from \"react\";\n\ninterface BaseProps<T> {\n isLoading: boolean;\n data?: T;\n loadingComponent?: ReactNode;\n}\n\ninterface PropsWithNoError<T> extends BaseProps<T> {\n error?: never;\n errorComponent?: never;\n}\n\ninterface PropsWithError<T> extends BaseProps<T> {\n error: unknown;\n errorComponent?: ReactNode | ((error: unknown) => ReactNode);\n}\n\nexport type LoaderContextValue<T> = PropsWithNoError<T> | PropsWithError<T>;\nexport type LoaderProviderProps<T> = LoaderContextValue<T> & { children: ReactNode };\n\nconst LoaderContext = createContext<LoaderContextValue<unknown> | undefined>(undefined);\nexport function useLoader<T>(): LoaderContextValue<T> {\n const context = useContext(LoaderContext);\n if (!context) {\n throw new Error(\"LOADER_CONTEXT_NOT_SET\");\n }\n return context as LoaderContextValue<T>;\n}\n\nfunction LoaderProvider<T>({\n children,\n loadingComponent = <CircularProgress />,\n ...contextProps\n}: LoaderProviderProps<T>) {\n return (\n <LoaderContext.Provider value={{ loadingComponent, ...contextProps }}>\n {children}\n </LoaderContext.Provider>\n );\n}\n\nexport default LoaderProvider;\n","import type { DisallowUndefined } from \"@alextheman/utility\";\nimport type { ReactNode } from \"react\";\n\nimport { useRef } from \"react\";\n\nimport { useLoader } from \"src/providers/LoaderProvider\";\n\nexport interface LoaderDataProps<T> {\n children: ReactNode | ((data: DisallowUndefined<T>) => ReactNode);\n loadingComponent?: ReactNode;\n onUndefined?: () => ReactNode | void;\n showOnError?: boolean;\n}\n\nfunction LoaderData<T>({\n children,\n loadingComponent,\n onUndefined,\n showOnError,\n}: LoaderDataProps<T>) {\n const { isLoading, data, loadingComponent: defaultLoadingComponent, error } = useLoader<T>();\n const warnedOnce = useRef(false);\n\n if (isLoading) {\n return <>{loadingComponent ?? defaultLoadingComponent}</>;\n }\n\n if (error && !showOnError) {\n return <></>;\n }\n\n // No need to also check for isLoading === true here, since this was covered earlier\n if (data === undefined) {\n if (!warnedOnce.current) {\n console.warn(\n \"Data is undefined after loading. This could either be an issue with the query or you have not passed in the data to LoaderProvider. Please double-check that you have provided data.\",\n );\n warnedOnce.current = true;\n }\n\n if (onUndefined) {\n const result = onUndefined();\n return result ?? <></>;\n }\n return <></>;\n }\n\n return typeof children === \"function\" ? (\n <>{children(data as DisallowUndefined<T>)}</>\n ) : (\n <>{children}</>\n );\n}\n\nexport default LoaderData;\n","import Alert from \"@mui/material/Alert\";\n\nimport { useLoader } from \"src/providers/LoaderProvider\";\n\nfunction LoaderError() {\n const { error, errorComponent } = useLoader();\n\n if (error) {\n if (typeof errorComponent === \"function\") {\n return errorComponent(error);\n }\n if (errorComponent) {\n return <>{errorComponent}</>;\n }\n return (\n <Alert severity=\"error\">\n {(error as Error)?.message ?? \"An unknown error has occured. Please try again later.\"}\n </Alert>\n );\n }\n\n return <></>;\n}\n\nexport default LoaderError;\n","import type { ReactNode } from \"react\";\n\nimport CssBaseline from \"@mui/material/CssBaseline\";\nimport { createTheme, ThemeProvider } from \"@mui/material/styles\";\nimport { createContext, useContext, useMemo, useState } from \"react\";\n\nconst ModeContext = createContext({\n toggleMode: () => {},\n mode: \"dark\",\n});\n\nexport function useMode() {\n return useContext(ModeContext);\n}\n\nexport type Mode = \"light\" | \"dark\";\n\nexport interface ModeProviderProps {\n children: ReactNode;\n mode?: Mode;\n}\n\nfunction ModeProvider({ children, mode: modeProp = \"dark\" }: ModeProviderProps) {\n const [mode, setMode] = useState<Mode>(modeProp);\n\n const theme = useMemo(() => {\n return createTheme({\n palette: {\n mode,\n },\n });\n }, [mode]);\n\n return (\n <ModeContext.Provider\n value={{\n mode,\n toggleMode: () => {\n setMode((prev) => {\n return prev === \"light\" ? \"dark\" : \"light\";\n });\n },\n }}\n >\n <ThemeProvider theme={theme}>\n <CssBaseline />\n {children}\n </ThemeProvider>\n </ModeContext.Provider>\n );\n}\n\nexport default ModeProvider;\n","import type { ReactNode } from \"react\";\n\nimport { createContext, useContext, useEffect, useState } from \"react\";\n\nexport interface ScreenSizeProps {\n children: ReactNode;\n largeScreenWidth?: number;\n largeScreenHeight?: number;\n}\n\nexport interface ScreenSizeContextValue {\n isLargeScreen: boolean;\n windowWidth: number;\n windowHeight: number;\n}\n\nconst ScreenSizeContext = createContext<ScreenSizeContextValue>({\n windowWidth: 0,\n windowHeight: 0,\n isLargeScreen: false,\n});\n\nexport function useScreenSize() {\n return useContext(ScreenSizeContext);\n}\n\nfunction ScreenSizeProvider({ children, largeScreenWidth, largeScreenHeight }: ScreenSizeProps) {\n const [windowWidth, setWindowWidth] = useState<number>(window.innerWidth);\n const [windowHeight, setWindowHeight] = useState<number>(window.innerHeight);\n\n function largeScreenCondition(\n width: number,\n height: number,\n largeScreenWidth: number = 669,\n largeScreenHeight: number = 600,\n ): boolean {\n return width > largeScreenWidth && height > largeScreenHeight;\n }\n\n const [isLargeScreen, setIsLargeScreen] = useState<boolean>(\n largeScreenCondition(\n window.innerWidth,\n window.innerHeight,\n largeScreenWidth,\n largeScreenHeight,\n ),\n );\n\n useEffect(() => {\n function setDimensions() {\n setWindowWidth(window.innerWidth);\n setWindowHeight(window.innerHeight);\n }\n setDimensions();\n window.addEventListener(\"resize\", setDimensions);\n return () => {\n window.removeEventListener(\"resize\", setDimensions);\n };\n }, []);\n\n useEffect(() => {\n setIsLargeScreen(\n largeScreenCondition(windowWidth, windowHeight, largeScreenWidth, largeScreenHeight),\n );\n }, [windowWidth, windowHeight, largeScreenWidth, largeScreenHeight]);\n\n return (\n <ScreenSizeContext.Provider\n value={{\n isLargeScreen,\n windowWidth,\n windowHeight,\n }}\n >\n {children}\n </ScreenSizeContext.Provider>\n );\n}\n\nexport default ScreenSizeProvider;\n","import type { AlertColor } from \"@mui/material/Alert\";\nimport type { ReactNode } from \"react\";\n\nimport { wait } from \"@alextheman/utility\";\nimport Alert from \"@mui/material/Alert\";\nimport Snackbar from \"@mui/material/Snackbar\";\nimport { createContext, useContext, useState } from \"react\";\n\nexport interface SnackbarProviderProps {\n children: ReactNode;\n autoHideDuration?: number;\n}\n\nexport interface SnackbarContextValue {\n addSnackbar: (message: string, severity?: AlertColor, duration?: number) => void;\n}\n\nconst SnackbarContext = createContext<SnackbarContextValue | undefined>(undefined);\nexport function useSnackbar() {\n const context = useContext(SnackbarContext);\n if (!context) {\n throw new Error(\"SNACKBAR_CONTEXT_NOT_SET\");\n }\n return context;\n}\n\nfunction SnackbarProvider({ children, autoHideDuration = 5000 }: SnackbarProviderProps) {\n const [open, setOpen] = useState<boolean>(false);\n const [autoHideDurationState, setAutoHideDurationState] = useState<number>(autoHideDuration);\n const [message, setMessage] = useState<string>(\"\");\n const [severity, setSeverity] = useState<AlertColor>(\"info\");\n\n function addSnackbar(message: string, severity?: AlertColor, duration?: number) {\n setOpen(true);\n setAutoHideDurationState(duration ?? autoHideDuration);\n setSeverity(severity ?? \"info\");\n setMessage(message);\n }\n\n async function handleClose() {\n setOpen(false);\n // Wait for 0.2 seconds to ensure that the message is only cleared after the snackbar is fully closed.\n // This prevents potential weird flickering that may occur if they happen synchronously.\n await wait(0.2);\n setMessage(\"\");\n }\n\n return (\n <SnackbarContext.Provider value={{ addSnackbar }}>\n <Snackbar open={open} autoHideDuration={autoHideDurationState} onClose={handleClose}>\n <Alert onClose={handleClose} severity={severity}>\n {message}\n </Alert>\n </Snackbar>\n {children}\n </SnackbarContext.Provider>\n );\n}\n\nexport default SnackbarProvider;\n","import type { ButtonOwnProps } from \"@mui/material/Button\";\nimport type { ElementType, MouseEvent as ReactMouseEvent, ReactNode } from \"react\";\n\nimport ArrowDropDown from \"@mui/icons-material/ArrowDropDown\";\nimport ArrowDropUp from \"@mui/icons-material/ArrowDropUp\";\nimport Box from \"@mui/material/Box\";\nimport MUIButton from \"@mui/material/Button\";\nimport Menu from \"@mui/material/Menu\";\nimport { useEffect, useMemo, useState } from \"react\";\n\nexport interface DropdownMenuProps {\n children: ReactNode | ((closeMenu: () => void) => ReactNode);\n buttonChildren?: ReactNode;\n button?: ElementType;\n // Omit endIcon because the built-in isOpenIcon and isClosedIcon gives more control.\n // onClick is also omitted because that controls anchorElement, and the onOpen/onClose functions can be used instead.\n buttonProps?: Omit<ButtonOwnProps, \"onClick\" | \"endIcon\">;\n isOpenIcon?: ReactNode;\n isClosedIcon?: ReactNode;\n onOpen?: () => void;\n onClose?: () => void;\n}\n\nfunction DropdownMenu({\n children,\n button: Button = MUIButton,\n buttonChildren = \"Menu\",\n buttonProps: incomingButtonProps,\n isOpenIcon = <ArrowDropUp />,\n isClosedIcon = <ArrowDropDown />,\n onOpen,\n onClose,\n}: DropdownMenuProps) {\n const [anchorElement, setAnchorElement] = useState<HTMLElement | null>(null);\n const isDropdownOpen = useMemo(() => {\n return !!anchorElement;\n }, [anchorElement]);\n\n const buttonProps: Record<string, unknown> = {\n ...incomingButtonProps,\n onClick: (event: ReactMouseEvent<HTMLElement>) => {\n setAnchorElement(event.currentTarget);\n },\n \"aria-controls\": isDropdownOpen ? \"dropdown-menu\" : undefined,\n \"aria-haspopup\": \"true\",\n \"aria-expanded\": isDropdownOpen,\n };\n\n if (Button === MUIButton) {\n buttonProps.endIcon = isDropdownOpen ? isOpenIcon : isClosedIcon;\n }\n\n useEffect(() => {\n if (isDropdownOpen && onOpen) {\n onOpen();\n } else if (!isDropdownOpen && onClose) {\n onClose();\n }\n }, [isDropdownOpen, onOpen, onClose]);\n\n return (\n <Box>\n <Button {...buttonProps}>{buttonChildren}</Button>\n <Menu\n id=\"dropdown-menu\"\n anchorEl={anchorElement}\n open={isDropdownOpen}\n onClose={() => {\n setAnchorElement(null);\n }}\n >\n {typeof children === \"function\" ? (\n <Box>\n {children(() => {\n setAnchorElement(null);\n })}\n </Box>\n ) : (\n children\n )}\n </Menu>\n </Box>\n );\n}\n\nexport default DropdownMenu;\n","import type { LinkProps } from \"@mui/material/Link\";\nimport type { ReactNode } from \"react\";\n\nimport MUILink from \"@mui/material/Link\";\n\nexport interface ExternalLinkProps extends Omit<LinkProps, \"to\" | \"target\" | \"rel\"> {\n href: `https://${string}` | `http://${string}`;\n to?: never;\n children: ReactNode;\n}\n\nfunction ExternalLink({ href, children, ...linkProps }: ExternalLinkProps) {\n return (\n <MUILink component={\"a\"} href={href} target=\"_blank\" rel=\"noopener noreferrer\" {...linkProps}>\n {children}\n </MUILink>\n );\n}\n\nexport default ExternalLink;\n","import type { ButtonOwnProps } from \"@mui/material/Button\";\n\nimport CloudUploadIcon from \"@mui/icons-material/CloudUpload\";\nimport Button from \"@mui/material/Button\";\nimport { styled } from \"@mui/material/styles\";\nimport { useState } from \"react\";\n\nexport const FileType = {\n PDF: \"application/pdf\",\n PNG: \"image/png\",\n JPEG: \"image/jpeg\",\n JPG: \"image/jpg\",\n XLSX: \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\",\n DOCX: \"application/vnd.openxmlformats-officedocument.wordprocessingml.document\",\n MP3: \"audio/mp3\",\n MP4: \"video/mp4\",\n WAV: \"audio/wav\",\n} as const;\n// eslint-disable-next-line @typescript-eslint/no-redeclare\nexport type FileType = (typeof FileType)[keyof typeof FileType];\n\nconst VisuallyHiddenInput = styled(\"input\")({\n clip: \"rect(0 0 0 0)\",\n clipPath: \"inset(50%)\",\n height: 1,\n overflow: \"hidden\",\n position: \"absolute\",\n bottom: 0,\n left: 0,\n whiteSpace: \"nowrap\",\n width: 1,\n});\n\nconst Dropzone = styled(\"div\")<{ $dragging: boolean }>(({ theme, $dragging }) => {\n return {\n border: \"2px dashed\",\n borderColor: $dragging ? theme.palette.primary.main : \"#ccc\",\n backgroundColor: $dragging ? theme.palette.action.hover : \"transparent\",\n borderRadius: 8,\n padding: \"1.5rem\",\n textAlign: \"center\",\n transition: \"border-color 0.2s\",\n cursor: \"pointer\",\n };\n});\n\nexport interface FileInputProps extends ButtonOwnProps {\n onFileInput: (allowedFiles: File[]) => void;\n label?: string;\n multiple?: boolean;\n accept?: string[];\n useDropzone?: boolean;\n}\n\nfunction FileInput({\n onFileInput,\n label = \"Upload files\",\n multiple,\n accept,\n useDropzone,\n ...buttonProps\n}: FileInputProps) {\n const [isDragging, setIsDragging] = useState<boolean>(false);\n\n const fileInputButton = (\n <Button\n variant=\"contained\"\n component=\"label\"\n aria-label=\"File upload button\"\n onKeyDown={(event) => {\n if (event.key === \"Enter\" || event.key === \" \") {\n event.preventDefault();\n document.getElementById(\"file-input\")?.click();\n }\n }}\n {...buttonProps}\n startIcon={buttonProps.startIcon ?? <CloudUploadIcon />}\n >\n {label}\n <VisuallyHiddenInput\n id=\"file-input\"\n type=\"file\"\n onChange={(event) => {\n const input = event.target;\n onFileInput(Array.from(input.files ?? []));\n input.value = \"\";\n }}\n multiple={multiple}\n accept={accept?.join(\",\")}\n disabled={buttonProps.disabled}\n />\n </Button>\n );\n\n return useDropzone ? (\n <Dropzone\n $dragging={isDragging}\n onDragOver={(event) => {\n event.preventDefault();\n if (buttonProps.disabled) {\n return;\n }\n setIsDragging(true);\n }}\n onDragLeave={(event) => {\n event.preventDefault();\n setIsDragging(false);\n }}\n onDrop={(event) => {\n event.preventDefault();\n setIsDragging(false);\n if (buttonProps.disabled) {\n return;\n }\n const filesArray = Array.from(event.dataTransfer.files ?? []);\n onFileInput(filesArray);\n }}\n >\n {fileInputButton}\n </Dropzone>\n ) : (\n fileInputButton\n );\n}\n\nexport default FileInput;\n","import type { Dispatch, SetStateAction } from \"react\";\nimport type { FileInputProps } from \"src/components/FileInput\";\n\nimport DeleteIcon from \"@mui/icons-material/Delete\";\nimport Box from \"@mui/material/Box\";\nimport IconButton from \"@mui/material/IconButton\";\nimport List from \"@mui/material/List\";\nimport ListItem from \"@mui/material/ListItem\";\nimport ListItemText from \"@mui/material/ListItemText\";\n\nimport FileInput from \"src/components/FileInput\";\n\nexport interface FileInputListProps extends Omit<FileInputProps, \"onFileInput\"> {\n files: File[];\n setFiles: Dispatch<SetStateAction<File[]>>;\n}\n\nfunction FileInputList({ files, setFiles, ...fileInputProps }: FileInputListProps) {\n function onFileInput(newFiles: File[]) {\n setFiles((oldFiles) => {\n return [...oldFiles, ...newFiles];\n });\n }\n\n const newFileInputProps = { ...fileInputProps, onFileInput };\n if (newFileInputProps?.multiple === undefined) {\n newFileInputProps.multiple = true;\n }\n\n return (\n <Box>\n <FileInput {...newFileInputProps} />\n <List>\n {files.map((file) => {\n return (\n <ListItem\n key={file.name}\n secondaryAction={\n <IconButton\n aria-label=\"Delete\"\n edge=\"end\"\n onClick={() => {\n setFiles((oldFiles) => {\n return oldFiles.filter((fileToDelete) => {\n return fileToDelete !== file;\n });\n });\n }}\n >\n <DeleteIcon />\n </IconButton>\n }\n >\n <ListItemText primary={file.name} />\n </ListItem>\n );\n })}\n </List>\n </Box>\n );\n}\n\nexport default FileInputList;\n","import type { OverridableComponent } from \"@mui/material/OverridableComponent\";\nimport type { SvgIconTypeMap } from \"@mui/material/SvgIcon\";\nimport type { ElementType, MouseEvent as ReactMouseEvent, ReactNode } from \"react\";\n\nimport Box from \"@mui/material/Box\";\nimport Popover from \"@mui/material/Popover\";\nimport { useId, useState } from \"react\";\n\nexport interface IconWithPopoverProps {\n icon:\n | (OverridableComponent<SvgIconTypeMap<unknown, \"svg\">> & {\n muiName: string;\n })\n | ElementType;\n onOpen?: () => void;\n onClose?: () => void;\n iconProps?: SvgIconTypeMap<unknown, \"svg\">[\"props\"];\n children: ReactNode;\n}\n\nfunction IconWithPopover({\n icon: Icon,\n onOpen,\n onClose,\n iconProps,\n children,\n}: IconWithPopoverProps) {\n const [anchorElement, setAnchorElement] = useState<Element | null>(null);\n const isPopoverOpen = !!anchorElement;\n const popoverId = useId();\n\n function handleOpen(event: ReactMouseEvent<SVGSVGElement, MouseEvent>) {\n setAnchorElement(event.currentTarget);\n if (onOpen) {\n onOpen();\n }\n }\n\n function handleClose() {\n setAnchorElement(null);\n if (onClose) {\n onClose();\n }\n }\n\n return (\n <Box>\n <Icon\n aria-owns={isPopoverOpen ? popoverId : undefined}\n aria-haspopup=\"true\"\n onMouseEnter={handleOpen}\n onMouseLeave={handleClose}\n {...iconProps}\n />\n <Popover\n id={popoverId}\n sx={{ pointerEvents: \"none\" }}\n open={isPopoverOpen}\n anchorEl={anchorElement}\n anchorOrigin={{\n vertical: \"bottom\",\n horizontal: \"left\",\n }}\n transformOrigin={{\n vertical: \"top\",\n horizontal: \"left\",\n }}\n onClose={handleClose}\n disableRestoreFocus\n >\n {children}\n </Popover>\n </Box>\n );\n}\n\nexport default IconWithPopover;\n","import type { LinkProps } from \"@mui/material/Link\";\nimport type { ReactNode } from \"react\";\n\nimport MUILink from \"@mui/material/Link\";\nimport { Link as ReactDOMLink } from \"react-router-dom\";\n\nexport interface InternalLinkProps extends Omit<LinkProps, \"href\"> {\n to: `/${string}` | `~/${string}`;\n href?: never;\n children: ReactNode;\n}\n\nfunction InternalLink({ to, children, ...linkProps }: InternalLinkProps) {\n return (\n <MUILink component={ReactDOMLink} to={to} {...linkProps}>\n {children}\n </MUILink>\n );\n}\n\nexport default InternalLink;\n","import type { ListItemButtonProps } from \"@mui/material/ListItemButton\";\nimport type { ReactNode } from \"react\";\n\nimport ListItemButton from \"@mui/material/ListItemButton\";\n\nimport InternalLink from \"src/components/InternalLink\";\n\nexport interface ListItemInternalLinkProps extends Omit<ListItemButtonProps, \"href\"> {\n children: ReactNode;\n to: string;\n}\n\nfunction ListItemInternalLink({ children, ...listItemButtonProps }: ListItemInternalLinkProps) {\n return (\n <ListItemButton component={InternalLink} {...listItemButtonProps}>\n {children}\n </ListItemButton>\n );\n}\n\nexport default ListItemInternalLink;\n","import type { DisallowUndefined } from \"@alextheman/utility\";\nimport type { ReactNode } from \"react\";\nimport type { LoaderProviderProps } from \"src/providers\";\n\nimport CircularProgress from \"@mui/material/CircularProgress\";\n\nimport { LoaderError, LoaderProvider } from \"src/providers\";\nimport LoaderData from \"src/providers/LoaderProvider/LoaderData\";\n\nexport type LoaderProps<T> = Omit<LoaderProviderProps<T>, \"children\"> & {\n children: ReactNode | ((data: DisallowUndefined<T>) => ReactNode);\n onUndefined?: () => ReactNode | void;\n};\n\nfunction Loader<T>({\n children,\n onUndefined,\n loadingComponent = <CircularProgress />,\n ...loaderProviderProps\n}: LoaderProps<T>) {\n return (\n <LoaderProvider<T> loadingComponent={loadingComponent} {...loaderProviderProps}>\n <LoaderError />\n <LoaderData<T> onUndefined={onUndefined}>{children}</LoaderData>\n </LoaderProvider>\n );\n}\n\nexport default Loader;\n","import type { JSX, ReactNode } from \"react\";\n\nimport BottomNavigation from \"@mui/material/BottomNavigation\";\nimport BottomNavigationAction from \"@mui/material/BottomNavigationAction\";\nimport Box from \"@mui/material/Box\";\nimport Paper from \"@mui/material/Paper\";\nimport { useState } from \"react\";\nimport { Link } from \"react-router-dom\";\n\nexport interface NavItemBottom {\n value: string;\n label: string;\n icon?: JSX.Element;\n to: string;\n}\n\nexport interface NavigationBottomProps {\n children: ReactNode;\n navItems: NavItemBottom[];\n}\n\nfunction NavigationBottom({ children, navItems }: NavigationBottomProps) {\n const [value, setValue] = useState<string>(\"\");\n return (\n <>\n <Box sx={{ paddingBottom: 7 }}>{children}</Box>\n <Paper sx={{ position: \"fixed\", bottom: 0, left: 0, right: 0 }}>\n <BottomNavigation\n showLabels\n value={value}\n onChange={(_, value) => {\n setValue(value);\n }}\n >\n {navItems.map((item) => {\n return <BottomNavigationAction key={item.value} {...item} component={Link} />;\n })}\n </BottomNavigation>\n </Paper>\n </>\n );\n}\n\nexport default NavigationBottom;\n","import type { AppBarProps as MuiAppBarProps } from \"@mui/material/AppBar\";\nimport type { CSSObject, Theme } from \"@mui/material/styles\";\nimport type { ReactNode } from \"react\";\n\nimport { truncate } from \"@alextheman/utility\";\nimport ChevronLeftIcon from \"@mui/icons-material/ChevronLeft\";\nimport ChevronRightIcon from \"@mui/icons-material/ChevronRight\";\nimport MenuIcon from \"@mui/icons-material/Menu\";\nimport MuiAppBar from \"@mui/material/AppBar\";\nimport Box from \"@mui/material/Box\";\nimport CssBaseline from \"@mui/material/CssBaseline\";\nimport Divider from \"@mui/material/Divider\";\nimport MuiDrawer from \"@mui/material/Drawer\";\nimport IconButton from \"@mui/material/IconButton\";\nimport List from \"@mui/material/List\";\nimport ListItem from \"@mui/material/ListItem\";\nimport ListItemButton from \"@mui/material/ListItemButton\";\nimport ListItemIcon from \"@mui/material/ListItemIcon\";\nimport ListItemText from \"@mui/material/ListItemText\";\nimport { styled, useTheme } from \"@mui/material/styles\";\nimport Toolbar from \"@mui/material/Toolbar\";\nimport Typography from \"@mui/material/Typography\";\nimport { Fragment, useState } from \"react\";\nimport { Link, useLocation } from \"react-router-dom\";\n\nconst drawerWidth = 240;\n\nfunction openedMixin(theme: Theme): CSSObject {\n return {\n width: drawerWidth,\n transition: theme.transitions.create(\"width\", {\n easing: theme.transitions.easing.sharp,\n duration: theme.transitions.duration.enteringScreen,\n }),\n overflowX: \"hidden\",\n };\n}\n\nfunction closedMixin(theme: Theme): CSSObject {\n return {\n transition: theme.transitions.create(\"width\", {\n easing: theme.transitions.easing.sharp,\n duration: theme.transitions.duration.leavingScreen,\n }),\n overflowX: \"hidden\",\n width: `calc(${theme.spacing(7)} + 1px)`,\n [theme.breakpoints.up(\"sm\")]: {\n width: `calc(${theme.spacing(8)} + 1px)`,\n },\n };\n}\n\nconst DrawerHeader = styled(\"div\")(({ theme }) => {\n return {\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"flex-end\",\n padding: theme.spacing(0, 1),\n // necessary for content to be below app bar\n ...theme.mixins.toolbar,\n };\n});\n\ninterface AppBarProps extends MuiAppBarProps {\n open?: boolean;\n}\n\nconst AppBar = styled(MuiAppBar, {\n shouldForwardProp: (prop) => {\n return prop !== \"open\";\n },\n})<AppBarProps>(({ theme }) => {\n return {\n zIndex: theme.zIndex.drawer + 1,\n transition: theme.transitions.create([\"width\", \"margin\"], {\n easing: theme.transitions.easing.sharp,\n duration: theme.transitions.duration.leavingScreen,\n }),\n variants: [\n {\n props: ({ open }) => {\n return open;\n },\n style: {\n marginLeft: drawerWidth,\n width: `calc(100% - ${drawerWidth}px)`,\n transition: theme.transitions.create([\"width\", \"margin\"], {\n easing: theme.transitions.easing.sharp,\n duration: theme.transitions.duration.enteringScreen,\n }),\n },\n },\n ],\n };\n});\n\nconst Drawer = styled(MuiDrawer, {\n shouldForwardProp: (prop) => {\n return prop !== \"open\";\n },\n})(({ theme }) => {\n return {\n width: drawerWidth,\n flexShrink: 0,\n whiteSpace: \"nowrap\",\n boxSizing: \"border-box\",\n variants: [\n {\n props: ({ open }) => {\n return open;\n },\n style: {\n ...openedMixin(theme),\n \"& .MuiDrawer-paper\": openedMixin(theme),\n },\n },\n {\n props: ({ open }) => {\n return !open;\n },\n style: {\n ...closedMixin(theme),\n \"& .MuiDrawer-paper\": closedMixin(theme),\n },\n },\n ],\n };\n});\n\nexport interface NavMenuItem {\n category: string;\n options: {\n label: string;\n to: string;\n icon?: ReactNode;\n }[];\n}\n\nexport interface NavigationDrawerProps {\n title: string;\n navItems: NavMenuItem[];\n headerElements?: ReactNode;\n children: ReactNode;\n}\n\nfunction NavigationDrawer({ title, navItems, children, headerElements }: NavigationDrawerProps) {\n const theme = useTheme();\n const [open, setOpen] = useState(true);\n const location = useLocation();\n\n function handleDrawerOpen() {\n setOpen(true);\n }\n\n function handleDrawerClose() {\n setOpen(false);\n }\n\n return (\n <Box sx={{ display: \"flex\" }}>\n <CssBaseline />\n <AppBar position=\"fixed\" open={open}>\n <Toolbar>\n <IconButton\n color=\"inherit\"\n aria-label=\"open drawer\"\n onClick={handleDrawerOpen}\n edge=\"start\"\n sx={[\n {\n marginRight: 5,\n },\n open && { display: \"none\" },\n ]}\n >\n <MenuIcon />\n </IconButton>\n <Typography variant=\"h6\" noWrap component=\"div\">\n {title}\n </Typography>\n {headerElements}\n </Toolbar>\n </AppBar>\n <Drawer variant=\"permanent\" open={open}>\n <DrawerHeader>\n <IconButton onClick={handleDrawerClose}>\n {theme.direction === \"rtl\" ? <ChevronRightIcon /> : <ChevronLeftIcon />}\n </IconButton>\n </DrawerHeader>\n <Divider />\n {navItems.map((item) => {\n return (\n <Fragment key={item.category}>\n <List>\n <Typography variant={open ? \"h5\" : \"h6\"} paddingLeft={open ? 2 : 1}>\n {open ? item.category : truncate(item.category, 4)}\n </Typography>\n {item.options.map((option) => {\n return (\n <ListItem key={option.to} disablePadding sx={{ display: \"block\" }}>\n <ListItemButton\n sx={[\n {\n minHeight: 48,\n px: 2.5,\n },\n open\n ? {\n justifyContent: \"initial\",\n }\n : {\n justifyContent: \"center\",\n },\n ]}\n component={Link}\n to={option.to}\n selected={location.pathname === option.to}\n >\n <ListItemIcon\n sx={[\n {\n minWidth: 0,\n justifyContent: \"center\",\n },\n open\n ? {\n mr: 3,\n }\n : {\n mr: \"auto\",\n },\n ]}\n >\n {option.icon ? (\n option.icon\n ) : !open ? (\n <Typography>{truncate(option.label, 4)}</Typography>\n ) : null}\n </ListItemIcon>\n <ListItemText\n primary={option.label}\n sx={[\n open\n ? {\n opacity: 1,\n }\n : {\n opacity: 0,\n },\n ]}\n />\n </ListItemButton>\n </ListItem>\n );\n })}\n </List>\n <Divider />\n </Fragment>\n );\n })}\n </Drawer>\n <Box component=\"main\" sx={{ flexGrow: 1, p: 3 }}>\n <DrawerHeader />\n {children}\n </Box>\n </Box>\n );\n}\n\nexport default NavigationDrawer;\n","import type { TypographyProps } from \"@mui/material/Typography\";\n\nimport Typography from \"@mui/material/Typography\";\n\nexport interface PopoverTextProps extends TypographyProps {\n text: string;\n}\n\nfunction PopoverText({ text, sx, ...typographyProps }: PopoverTextProps) {\n return (\n <>\n {text.split(\"\\n\").map((line, index) => {\n return (\n <Typography key={index} sx={{ margin: 1, ...sx }} {...typographyProps}>\n {line}\n </Typography>\n );\n })}\n </>\n );\n}\n\nexport default PopoverText;\n","import type { SxProps, Theme } from \"@mui/material/styles\";\n\nimport Box from \"@mui/material/Box\";\nimport Typography from \"@mui/material/Typography\";\nimport { stripIndent } from \"common-tags\";\nimport { LiveEditor, LiveError, LivePreview, LiveProvider } from \"react-live\";\n\nimport { useMode } from \"src/providers\";\n\nexport interface ReactPlaygroundProps {\n code: string;\n scope?: Record<string, unknown>;\n previewStyles?: SxProps<Theme>;\n noInline?: boolean;\n enableTypeScript?: boolean;\n language?: string;\n}\n\nfunction ReactPlayground({\n code,\n scope,\n previewStyles,\n noInline,\n enableTypeScript,\n language,\n}: ReactPlaygroundProps) {\n const { mode } = useMode();\n const defaultPreviewStyles: SxProps<Theme> = {\n backgroundColor: mode === \"dark\" ? \"black\" : \"white\",\n border: 0.3,\n borderRadius: 1,\n padding: 2,\n borderColor: \"darkgray\",\n };\n const allPreviewStyles = previewStyles\n ? { ...defaultPreviewStyles, ...previewStyles }\n : { ...defaultPreviewStyles };\n return (\n <Box sx={{ borderRadius: 1, border: 0.5, padding: 2 }}>\n <LiveProvider\n code={stripIndent(code)}\n scope={scope}\n noInline={noInline}\n enableTypeScript={enableTypeScript}\n language={language}\n >\n <Typography variant=\"h5\">Code</Typography>\n <Box\n sx={{\n border: 0.3,\n borderRadius: 0.3,\n borderColor: \"darkgray\",\n }}\n >\n <LiveEditor />\n </Box>\n <br />\n <Typography variant=\"h5\">Result</Typography>\n <Box sx={allPreviewStyles}>\n <LivePreview />\n <LiveError />\n </Box>\n </LiveProvider>\n </Box>\n );\n}\n\nexport default ReactPlayground;\n","import type { ButtonProps } from \"@mui/material/Button\";\n\nimport Button from \"@mui/material/Button\";\nimport { useFormContext } from \"react-hook-form\";\n\nexport interface SubmitButtonProps extends Omit<ButtonProps, \"type\"> {\n disableClean?: boolean;\n label: string;\n}\n\nfunction SubmitButton({ disableClean, label, ...buttonProps }: SubmitButtonProps) {\n const {\n formState: { disabled: formDisabled, isDirty, isSubmitting },\n } = useFormContext();\n\n return (\n <Button\n color=\"primary\"\n disabled={buttonProps.disabled || (disableClean && !isDirty) || formDisabled}\n loading={isSubmitting}\n type=\"submit\"\n variant=\"contained\"\n {...buttonProps}\n >\n {label}\n </Button>\n );\n}\n\nexport default SubmitButton;\n","import type { CommonProps } from \"@mui/material/OverridableComponent\";\nimport type { SwitchProps } from \"@mui/material/Switch\";\nimport type { ComponentType, CSSProperties } from \"react\";\n\nimport Box from \"@mui/material/Box\";\nimport { styled } from \"@mui/material/styles\";\nimport Switch from \"@mui/material/Switch\";\n\nexport interface SwitchWithIconsProps extends Omit<SwitchProps, \"icon\" | \"checkedIcon\"> {\n checkedIcon: ComponentType<{ style?: CSSProperties }>;\n checkedIconStyles?: CommonProps[\"style\"];\n uncheckedIcon: ComponentType<{ style?: CSSProperties }>;\n uncheckedIconStyles?: CommonProps[\"style\"];\n}\n\nconst StyledSwitch = styled(Switch)(() => {\n return {\n padding: 8,\n \"& .MuiSwitch-track\": {\n borderRadius: 11,\n \"&::before, &::after\": {\n content: '\"\"',\n position: \"absolute\",\n top: \"50%\",\n transform: \"translateY(-50%)\",\n fontSize: 16,\n width: 28,\n height: 28,\n },\n },\n };\n});\n\nfunction SwitchWithIcons({\n checkedIcon: CheckedIcon,\n checkedIconStyles,\n uncheckedIcon: UncheckedIcon,\n uncheckedIconStyles,\n ...switchProps\n}: SwitchWithIconsProps) {\n const boxSx = {\n borderRadius: \"50%\",\n borderColor: \"white\",\n backgroundColor: \"white\",\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n padding: 0.25,\n };\n const defaultIconStyles = { color: \"black\", maxWidth: 16.5, maxHeight: 16.5 };\n return (\n <StyledSwitch\n checkedIcon={\n <Box sx={boxSx}>\n <CheckedIcon style={{ ...defaultIconStyles, ...checkedIconStyles }} />\n </Box>\n }\n icon={\n <Box sx={boxSx}>\n <UncheckedIcon style={{ ...defaultIconStyles, ...uncheckedIconStyles }} />\n </Box>\n }\n {...switchProps}\n />\n );\n}\n\nexport default SwitchWithIcons;\n","import type { Dispatch, SetStateAction } from \"react\";\n\nimport { useCallback, useEffect, useState } from \"react\";\n\nfunction useHash<S extends string>(initialHash: S | undefined): [S, Dispatch<SetStateAction<S>>] {\n const [hash, setHash] = useState<S>(() => {\n const hash: S = window.location.hash.replace(\"#\", \"\") as S;\n return !initialHash ? hash : hash === \"\" ? initialHash : hash;\n });\n const hashChangeHandler = useCallback(() => {\n const hash: S = window.location.hash.replace(\"#\", \"\") as S;\n setHash(!initialHash ? hash : hash === \"\" ? initialHash : hash);\n }, [setHash, initialHash]);\n\n useEffect(() => {\n window.addEventListener(\"hashchange\", hashChangeHandler);\n return () => {\n window.removeEventListener(\"hashchange\", hashChangeHandler);\n };\n }, [hashChangeHandler]);\n\n const updateHash = useCallback(\n (newHash: S | ((previousState: S) => S)) => {\n const resolvedHash = typeof newHash === \"function\" ? newHash(hash) : newHash;\n if (resolvedHash !== hash) {\n window.location.hash = resolvedHash;\n }\n },\n [hash],\n );\n\n return [hash, updateHash];\n}\n\nexport default useHash;\n"],"mappings":"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","names":["ArrowDropDown","ArrowDropUp","Box","ButtonBase","Collapse","useEffect","useState","jsx","jsxs","CollapsableItem","isInitiallyOpen","onOpen","onClose","children","buttonStyles","buttonContents","ButtonComponent","ButtonBase","collapseProps","openIcon","ArrowDropUp","closedIcon","ArrowDropDown","useDefaultStyling","isItemOpen","setIsItemOpen","useState","useEffect","Box","previouslyOpen","__spreadValues","Collapse","__spreadProps","CollapsableItem_default","DarkMode","LightMode","IconButton","Tooltip","CircularProgress","createContext","useContext","jsx","LoaderContext","createContext","useLoader","context","useContext","LoaderProvider","_a","_b","children","loadingComponent","CircularProgress","contextProps","__objRest","__spreadValues","LoaderProvider_default","useRef","Fragment","jsx","LoaderData","children","loadingComponent","onUndefined","showOnError","isLoading","data","defaultLoadingComponent","error","useLoader","warnedOnce","useRef","result","LoaderData_default","Alert","Fragment","jsx","LoaderError","_a","error","errorComponent","useLoader","Alert","LoaderError_default","CssBaseline","createTheme","ThemeProvider","createContext","useContext","useMemo","useState","jsx","jsxs","ModeContext","useMode","ModeProvider","children","modeProp","mode","setMode","theme","prev","ModeProvider_default","createContext","useContext","useEffect","useState","jsx","ScreenSizeContext","useScreenSize","ScreenSizeProvider","children","largeScreenWidth","largeScreenHeight","windowWidth","setWindowWidth","windowHeight","setWindowHeight","largeScreenCondition","width","height","isLargeScreen","setIsLargeScreen","setDimensions","ScreenSizeProvider_default","wait","Alert","Snackbar","createContext","useContext","useState","jsx","jsxs","SnackbarContext","createContext","useSnackbar","context","useContext","SnackbarProvider","children","autoHideDuration","open","setOpen","useState","autoHideDurationState","setAutoHideDurationState","message","setMessage","severity","setSeverity","addSnackbar","duration","handleClose","__async","wait","Snackbar","Alert","SnackbarProvider_default","jsx","DarkModeToggle","mode","toggleMode","useMode","Tooltip","IconButton","LightMode","DarkMode","DarkModeToggle_default","ArrowDropDown","ArrowDropUp","Box","MUIButton","Menu","useEffect","useMemo","useState","jsx","jsxs","DropdownMenu","children","Button","MUIButton","buttonChildren","incomingButtonProps","isOpenIcon","ArrowDropUp","isClosedIcon","ArrowDropDown","onOpen","onClose","anchorElement","setAnchorElement","useState","isDropdownOpen","useMemo","buttonProps","__spreadProps","__spreadValues","event","useEffect","Box","Menu","DropdownMenu_default","MUILink","jsx","ExternalLink","_a","_b","href","children","linkProps","__objRest","MUILink","__spreadProps","__spreadValues","ExternalLink_default","CloudUploadIcon","Button","styled","useState","jsx","jsxs","FileType","VisuallyHiddenInput","styled","Dropzone","theme","$dragging","FileInput","_a","_b","onFileInput","label","multiple","accept","useDropzone","buttonProps","__objRest","isDragging","setIsDragging","useState","fileInputButton","Button","__spreadProps","__spreadValues","event","CloudUploadIcon","input","filesArray","FileInput_default","DeleteIcon","Box","IconButton","List","ListItem","ListItemText","jsx","jsxs","FileInputList","_a","_b","files","setFiles","fileInputProps","__objRest","onFileInput","newFiles","oldFiles","newFileInputProps","__spreadProps","__spreadValues","Box","FileInput_default","List","file","ListItem","IconButton","fileToDelete","DeleteIcon","ListItemText","FileInputList_default","Box","Popover","useId","useState","jsx","jsxs","IconWithPopover","Icon","onOpen","onClose","iconProps","children","anchorElement","setAnchorElement","useState","isPopoverOpen","popoverId","useId","handleOpen","event","handleClose","Box","__spreadValues","Popover","IconWithPopover_default","MUILink","ReactDOMLink","jsx","InternalLink","_a","_b","to","children","linkProps","__objRest","MUILink","__spreadProps","__spreadValues","ReactDOMLink","InternalLink_default","ListItemButton","jsx","ListItemInternalLink","_a","_b","children","listItemButtonProps","__objRest","ListItemButton","__spreadProps","__spreadValues","InternalLink_default","ListItemInternalLink_default","CircularProgress","jsx","jsxs","Loader","_a","_b","children","onUndefined","loadingComponent","CircularProgress","loaderProviderProps","__objRest","LoaderProvider_default","__spreadProps","__spreadValues","LoaderError_default","LoaderData_default","Loader_default","BottomNavigation","BottomNavigationAction","Box","Paper","useState","Link","Fragment","jsx","jsxs","NavigationBottom","children","navItems","value","setValue","useState","Box","Paper","BottomNavigation","_","item","BottomNavigationAction","__spreadProps","__spreadValues","Link","NavigationBottom_default","truncate","ChevronLeftIcon","ChevronRightIcon","MenuIcon","MuiAppBar","Box","CssBaseline","Divider","MuiDrawer","IconButton","List","ListItem","ListItemButton","ListItemIcon","ListItemText","styled","useTheme","Toolbar","Typography","Fragment","useState","Link","useLocation","jsx","jsxs","drawerWidth","openedMixin","theme","closedMixin","DrawerHeader","styled","__spreadValues","AppBar","MuiAppBar","prop","open","Drawer","MuiDrawer","__spreadProps","NavigationDrawer","title","navItems","children","headerElements","useTheme","setOpen","useState","location","useLocation","handleDrawerOpen","handleDrawerClose","Box","CssBaseline","Toolbar","IconButton","MenuIcon","Typography","ChevronRightIcon","ChevronLeftIcon","Divider","item","Fragment","List","truncate","option","ListItem","ListItemButton","Link","ListItemIcon","ListItemText","NavigationDrawer_default","Typography","Fragment","jsx","PopoverText","_a","_b","text","sx","typographyProps","__objRest","line","index","Typography","__spreadProps","__spreadValues","PopoverText_default","Box","Typography","stripIndent","LiveEditor","LiveError","LivePreview","LiveProvider","jsx","jsxs","ReactPlayground","code","scope","previewStyles","noInline","enableTypeScript","language","mode","useMode","defaultPreviewStyles","allPreviewStyles","__spreadValues","Box","LiveProvider","stripIndent","Typography","LiveEditor","LivePreview","LiveError","ReactPlayground_default","Button","useFormContext","jsx","SubmitButton","_a","_b","disableClean","label","buttonProps","__objRest","formDisabled","isDirty","isSubmitting","useFormContext","Button","__spreadProps","__spreadValues","SubmitButton_default","Box","styled","Switch","jsx","StyledSwitch","styled","Switch","SwitchWithIcons","_a","_b","CheckedIcon","checkedIconStyles","UncheckedIcon","uncheckedIconStyles","switchProps","__objRest","boxSx","defaultIconStyles","__spreadValues","Box","SwitchWithIcons_default","useCallback","useEffect","useState","useHash","initialHash","hash","setHash","hashChangeHandler","updateHash","newHash","resolvedHash","useHash_default"]}
1
+ {"version":3,"sources":["../src/components/CollapsableItem.tsx","../src/components/DarkModeToggle.tsx","../src/providers/LoaderProvider/index.tsx","../src/providers/LoaderProvider/LoaderData.tsx","../src/providers/LoaderProvider/LoaderError.tsx","../src/providers/ModeProvider.tsx","../src/providers/ScreenSizeProvider.tsx","../src/providers/SnackbarProvider.tsx","../src/components/DropdownMenu.tsx","../src/components/ExternalLink.tsx","../src/components/FileInput.tsx","../src/components/FileInputList.tsx","../src/components/IconWithPopover.tsx","../src/components/InternalLink.tsx","../src/components/ListItemInternalLink.tsx","../src/components/Loader.tsx","../src/components/NavigationBottom.tsx","../src/components/NavigationDrawer.tsx","../src/components/PopoverText.tsx","../src/components/ReactPlayground.tsx","../src/components/SkeletonRow.tsx","../src/components/SubmitButton.tsx","../src/components/SwitchWithIcons.tsx","../src/hooks/useHash.ts"],"sourcesContent":["import type { CollapseProps } from \"@mui/material/Collapse\";\nimport type { SxProps } from \"@mui/material/styles\";\nimport type { ElementType, ReactNode } from \"react\";\n\nimport ArrowDropDown from \"@mui/icons-material/ArrowDropDown\";\nimport ArrowDropUp from \"@mui/icons-material/ArrowDropUp\";\nimport Box from \"@mui/material/Box\";\nimport ButtonBase from \"@mui/material/ButtonBase\";\nimport Collapse from \"@mui/material/Collapse\";\nimport { useEffect, useState } from \"react\";\n\nexport interface CollapsableItemProps {\n isInitiallyOpen?: boolean;\n onOpen?: () => void;\n onClose?: () => void;\n children: ReactNode;\n buttonStyles?: SxProps;\n buttonContents: ReactNode;\n buttonComponent?: ElementType;\n openIcon?: ReactNode;\n closedIcon?: ReactNode;\n collapseProps?: Omit<CollapseProps, \"in\">;\n useDefaultStyling?: boolean;\n}\n\nfunction CollapsableItem({\n isInitiallyOpen,\n onOpen,\n onClose,\n children,\n buttonStyles,\n buttonContents,\n buttonComponent: ButtonComponent = ButtonBase,\n collapseProps,\n openIcon = <ArrowDropUp />,\n closedIcon = <ArrowDropDown />,\n useDefaultStyling = ButtonComponent === ButtonBase ? true : false,\n}: CollapsableItemProps) {\n const [isItemOpen, setIsItemOpen] = useState<boolean>(!!isInitiallyOpen);\n\n useEffect(() => {\n if (isItemOpen && onOpen) {\n onOpen();\n } else if (!isItemOpen && onClose) {\n onClose();\n }\n }, [isItemOpen]);\n\n return (\n <Box>\n <ButtonComponent\n onClick={() => {\n setIsItemOpen((previouslyOpen) => {\n return !previouslyOpen;\n });\n }}\n sx={\n useDefaultStyling\n ? {\n width: \"100%\",\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n paddingY: 1.5,\n paddingX: 2,\n textAlign: \"center\",\n \"&:hover\":\n ButtonComponent === ButtonBase ? { backgroundColor: \"action.hover\" } : null,\n ...buttonStyles,\n }\n : buttonStyles\n }\n aria-expanded={isItemOpen}\n >\n {buttonContents}\n {isItemOpen ? openIcon : closedIcon}\n </ButtonComponent>\n <Collapse in={isItemOpen} {...collapseProps}>\n {children}\n </Collapse>\n </Box>\n );\n}\n\nexport default CollapsableItem;\n","import DarkMode from \"@mui/icons-material/DarkMode\";\nimport LightMode from \"@mui/icons-material/LightMode\";\nimport IconButton from \"@mui/material/IconButton\";\nimport Tooltip from \"@mui/material/Tooltip\";\n\nimport { useMode } from \"src/providers\";\n\nfunction DarkModeToggle() {\n const { mode, toggleMode } = useMode();\n\n return (\n <Tooltip title={`Enable ${mode === \"dark\" ? \"light\" : \"dark\"} mode`}>\n <IconButton\n sx={{ marginLeft: \"auto\" }}\n onClick={toggleMode}\n aria-label={`Enable ${mode === \"dark\" ? \"light\" : \"dark\"} mode`}\n >\n {mode === \"dark\" ? <LightMode /> : <DarkMode />}\n </IconButton>\n </Tooltip>\n );\n}\n\nexport default DarkModeToggle;\n","import type { ReactNode } from \"react\";\n\nimport CircularProgress from \"@mui/material/CircularProgress\";\nimport { createContext, useContext } from \"react\";\n\nexport interface LoaderProviderBaseProps<T> {\n isLoading: boolean;\n data?: T;\n loadingComponent?: ReactNode;\n}\n\nexport interface LoaderProviderPropsWithNoError<T> extends LoaderProviderBaseProps<T> {\n error?: never;\n errorComponent?: never;\n}\n\nexport interface LoaderProviderPropsWithError<T> extends LoaderProviderBaseProps<T> {\n error: unknown;\n errorComponent?: ReactNode | ((error: unknown) => ReactNode);\n}\n\nexport type LoaderContextValue<T> =\n | LoaderProviderPropsWithNoError<T>\n | LoaderProviderPropsWithError<T>;\nexport type LoaderProviderProps<T> = LoaderContextValue<T> & { children: ReactNode };\n\nconst LoaderContext = createContext<LoaderContextValue<unknown> | undefined>(undefined);\nexport function useLoader<T>(): LoaderContextValue<T> {\n const context = useContext(LoaderContext);\n if (!context) {\n throw new Error(\"LOADER_CONTEXT_NOT_SET\");\n }\n return context as LoaderContextValue<T>;\n}\n\nfunction LoaderProvider<T>({\n children,\n loadingComponent = <CircularProgress />,\n ...contextProps\n}: LoaderProviderProps<T>) {\n return (\n <LoaderContext.Provider value={{ loadingComponent, ...contextProps }}>\n {children}\n </LoaderContext.Provider>\n );\n}\n\nexport default LoaderProvider;\n","import type { DisallowUndefined } from \"@alextheman/utility\";\nimport type { ReactNode } from \"react\";\n\nimport { useRef } from \"react\";\n\nimport { useLoader } from \"src/providers/LoaderProvider\";\n\nexport interface LoaderDataProps<T> {\n children: ReactNode | ((data: DisallowUndefined<T>) => ReactNode);\n loadingComponent?: ReactNode;\n onUndefined?: () => ReactNode | void;\n showOnError?: boolean;\n}\n\nfunction LoaderData<T>({\n children,\n loadingComponent,\n onUndefined,\n showOnError,\n}: LoaderDataProps<T>) {\n const { isLoading, data, loadingComponent: defaultLoadingComponent, error } = useLoader<T>();\n const warnedOnce = useRef(false);\n\n if (isLoading) {\n return <>{loadingComponent ?? defaultLoadingComponent}</>;\n }\n\n if (error && !showOnError) {\n return <></>;\n }\n\n // No need to also check for isLoading === true here, since this was covered earlier\n if (data === undefined) {\n if (!warnedOnce.current) {\n console.warn(\n \"Data is undefined after loading. This could either be an issue with the query or you have not passed in the data to LoaderProvider. Please double-check that you have provided data.\",\n );\n warnedOnce.current = true;\n }\n\n if (onUndefined) {\n const result = onUndefined();\n return result ?? <></>;\n }\n return <></>;\n }\n\n return typeof children === \"function\" ? (\n <>{children(data as DisallowUndefined<T>)}</>\n ) : (\n <>{children}</>\n );\n}\n\nexport default LoaderData;\n","import Alert from \"@mui/material/Alert\";\n\nimport { useLoader } from \"src/providers/LoaderProvider\";\n\nfunction LoaderError() {\n const { error, errorComponent } = useLoader();\n\n if (error) {\n if (typeof errorComponent === \"function\") {\n return errorComponent(error);\n }\n if (errorComponent) {\n return <>{errorComponent}</>;\n }\n return (\n <Alert severity=\"error\">\n {(error as Error)?.message ?? \"An unknown error has occured. Please try again later.\"}\n </Alert>\n );\n }\n\n return <></>;\n}\n\nexport default LoaderError;\n","import type { ReactNode } from \"react\";\n\nimport CssBaseline from \"@mui/material/CssBaseline\";\nimport { createTheme, ThemeProvider } from \"@mui/material/styles\";\nimport { createContext, useContext, useMemo, useState } from \"react\";\n\nconst ModeContext = createContext({\n toggleMode: () => {},\n mode: \"dark\",\n});\n\nexport function useMode() {\n return useContext(ModeContext);\n}\n\nexport type Mode = \"light\" | \"dark\";\n\nexport interface ModeProviderProps {\n children: ReactNode;\n mode?: Mode;\n}\n\nfunction ModeProvider({ children, mode: modeProp = \"dark\" }: ModeProviderProps) {\n const [mode, setMode] = useState<Mode>(modeProp);\n\n const theme = useMemo(() => {\n return createTheme({\n palette: {\n mode,\n },\n });\n }, [mode]);\n\n return (\n <ModeContext.Provider\n value={{\n mode,\n toggleMode: () => {\n setMode((prev) => {\n return prev === \"light\" ? \"dark\" : \"light\";\n });\n },\n }}\n >\n <ThemeProvider theme={theme}>\n <CssBaseline />\n {children}\n </ThemeProvider>\n </ModeContext.Provider>\n );\n}\n\nexport default ModeProvider;\n","import type { ReactNode } from \"react\";\n\nimport { createContext, useContext, useEffect, useState } from \"react\";\n\nexport interface ScreenSizeProps {\n children: ReactNode;\n largeScreenWidth?: number;\n largeScreenHeight?: number;\n}\n\nexport interface ScreenSizeContextValue {\n isLargeScreen: boolean;\n windowWidth: number;\n windowHeight: number;\n}\n\nconst ScreenSizeContext = createContext<ScreenSizeContextValue>({\n windowWidth: 0,\n windowHeight: 0,\n isLargeScreen: false,\n});\n\nexport function useScreenSize() {\n return useContext(ScreenSizeContext);\n}\n\nfunction ScreenSizeProvider({ children, largeScreenWidth, largeScreenHeight }: ScreenSizeProps) {\n const [windowWidth, setWindowWidth] = useState<number>(window.innerWidth);\n const [windowHeight, setWindowHeight] = useState<number>(window.innerHeight);\n\n function largeScreenCondition(\n width: number,\n height: number,\n largeScreenWidth: number = 669,\n largeScreenHeight: number = 600,\n ): boolean {\n return width > largeScreenWidth && height > largeScreenHeight;\n }\n\n const [isLargeScreen, setIsLargeScreen] = useState<boolean>(\n largeScreenCondition(\n window.innerWidth,\n window.innerHeight,\n largeScreenWidth,\n largeScreenHeight,\n ),\n );\n\n useEffect(() => {\n function setDimensions() {\n setWindowWidth(window.innerWidth);\n setWindowHeight(window.innerHeight);\n }\n setDimensions();\n window.addEventListener(\"resize\", setDimensions);\n return () => {\n window.removeEventListener(\"resize\", setDimensions);\n };\n }, []);\n\n useEffect(() => {\n setIsLargeScreen(\n largeScreenCondition(windowWidth, windowHeight, largeScreenWidth, largeScreenHeight),\n );\n }, [windowWidth, windowHeight, largeScreenWidth, largeScreenHeight]);\n\n return (\n <ScreenSizeContext.Provider\n value={{\n isLargeScreen,\n windowWidth,\n windowHeight,\n }}\n >\n {children}\n </ScreenSizeContext.Provider>\n );\n}\n\nexport default ScreenSizeProvider;\n","import type { AlertColor } from \"@mui/material/Alert\";\nimport type { ReactNode } from \"react\";\n\nimport { wait } from \"@alextheman/utility\";\nimport Alert from \"@mui/material/Alert\";\nimport Snackbar from \"@mui/material/Snackbar\";\nimport { createContext, useContext, useState } from \"react\";\n\nexport interface SnackbarProviderProps {\n children: ReactNode;\n autoHideDuration?: number;\n}\n\nexport interface SnackbarContextValue {\n addSnackbar: (message: string, severity?: AlertColor, duration?: number) => void;\n}\n\nconst SnackbarContext = createContext<SnackbarContextValue | undefined>(undefined);\nexport function useSnackbar() {\n const context = useContext(SnackbarContext);\n if (!context) {\n throw new Error(\"SNACKBAR_CONTEXT_NOT_SET\");\n }\n return context;\n}\n\nfunction SnackbarProvider({ children, autoHideDuration = 5000 }: SnackbarProviderProps) {\n const [open, setOpen] = useState<boolean>(false);\n const [autoHideDurationState, setAutoHideDurationState] = useState<number>(autoHideDuration);\n const [message, setMessage] = useState<string>(\"\");\n const [severity, setSeverity] = useState<AlertColor>(\"info\");\n\n function addSnackbar(message: string, severity?: AlertColor, duration?: number) {\n setOpen(true);\n setAutoHideDurationState(duration ?? autoHideDuration);\n setSeverity(severity ?? \"info\");\n setMessage(message);\n }\n\n async function handleClose() {\n setOpen(false);\n // Wait for 0.2 seconds to ensure that the message is only cleared after the snackbar is fully closed.\n // This prevents potential weird flickering that may occur if they happen synchronously.\n await wait(0.2);\n setMessage(\"\");\n }\n\n return (\n <SnackbarContext.Provider value={{ addSnackbar }}>\n <Snackbar open={open} autoHideDuration={autoHideDurationState} onClose={handleClose}>\n <Alert onClose={handleClose} severity={severity}>\n {message}\n </Alert>\n </Snackbar>\n {children}\n </SnackbarContext.Provider>\n );\n}\n\nexport default SnackbarProvider;\n","import type { ButtonOwnProps } from \"@mui/material/Button\";\nimport type { ElementType, MouseEvent as ReactMouseEvent, ReactNode } from \"react\";\n\nimport ArrowDropDown from \"@mui/icons-material/ArrowDropDown\";\nimport ArrowDropUp from \"@mui/icons-material/ArrowDropUp\";\nimport Box from \"@mui/material/Box\";\nimport MUIButton from \"@mui/material/Button\";\nimport Menu from \"@mui/material/Menu\";\nimport { useEffect, useMemo, useState } from \"react\";\n\nexport interface DropdownMenuProps {\n children: ReactNode | ((closeMenu: () => void) => ReactNode);\n buttonChildren?: ReactNode;\n button?: ElementType;\n // Omit endIcon because the built-in isOpenIcon and isClosedIcon gives more control.\n // onClick is also omitted because that controls anchorElement, and the onOpen/onClose functions can be used instead.\n buttonProps?: Omit<ButtonOwnProps, \"onClick\" | \"endIcon\">;\n isOpenIcon?: ReactNode;\n isClosedIcon?: ReactNode;\n onOpen?: () => void;\n onClose?: () => void;\n}\n\nfunction DropdownMenu({\n children,\n button: Button = MUIButton,\n buttonChildren = \"Menu\",\n buttonProps: incomingButtonProps,\n isOpenIcon = <ArrowDropUp />,\n isClosedIcon = <ArrowDropDown />,\n onOpen,\n onClose,\n}: DropdownMenuProps) {\n const [anchorElement, setAnchorElement] = useState<HTMLElement | null>(null);\n const isDropdownOpen = useMemo(() => {\n return !!anchorElement;\n }, [anchorElement]);\n\n const buttonProps: Record<string, unknown> = {\n ...incomingButtonProps,\n onClick: (event: ReactMouseEvent<HTMLElement>) => {\n setAnchorElement(event.currentTarget);\n },\n \"aria-controls\": isDropdownOpen ? \"dropdown-menu\" : undefined,\n \"aria-haspopup\": \"true\",\n \"aria-expanded\": isDropdownOpen,\n };\n\n if (Button === MUIButton) {\n buttonProps.endIcon = isDropdownOpen ? isOpenIcon : isClosedIcon;\n }\n\n useEffect(() => {\n if (isDropdownOpen && onOpen) {\n onOpen();\n } else if (!isDropdownOpen && onClose) {\n onClose();\n }\n }, [isDropdownOpen, onOpen, onClose]);\n\n return (\n <Box>\n <Button {...buttonProps}>{buttonChildren}</Button>\n <Menu\n id=\"dropdown-menu\"\n anchorEl={anchorElement}\n open={isDropdownOpen}\n onClose={() => {\n setAnchorElement(null);\n }}\n >\n {typeof children === \"function\" ? (\n <Box>\n {children(() => {\n setAnchorElement(null);\n })}\n </Box>\n ) : (\n children\n )}\n </Menu>\n </Box>\n );\n}\n\nexport default DropdownMenu;\n","import type { LinkProps } from \"@mui/material/Link\";\nimport type { ReactNode } from \"react\";\n\nimport MUILink from \"@mui/material/Link\";\n\nexport interface ExternalLinkProps extends Omit<LinkProps, \"to\" | \"target\" | \"rel\"> {\n href: `https://${string}` | `http://${string}`;\n to?: never;\n children: ReactNode;\n}\n\nfunction ExternalLink({ href, children, ...linkProps }: ExternalLinkProps) {\n return (\n <MUILink component={\"a\"} href={href} target=\"_blank\" rel=\"noopener noreferrer\" {...linkProps}>\n {children}\n </MUILink>\n );\n}\n\nexport default ExternalLink;\n","import type { ButtonOwnProps } from \"@mui/material/Button\";\n\nimport CloudUploadIcon from \"@mui/icons-material/CloudUpload\";\nimport Button from \"@mui/material/Button\";\nimport { styled } from \"@mui/material/styles\";\nimport { useState } from \"react\";\n\nexport const FileType = {\n PDF: \"application/pdf\",\n PNG: \"image/png\",\n JPEG: \"image/jpeg\",\n JPG: \"image/jpg\",\n XLSX: \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\",\n DOCX: \"application/vnd.openxmlformats-officedocument.wordprocessingml.document\",\n MP3: \"audio/mp3\",\n MP4: \"video/mp4\",\n WAV: \"audio/wav\",\n} as const;\n// eslint-disable-next-line @typescript-eslint/no-redeclare\nexport type FileType = (typeof FileType)[keyof typeof FileType];\n\nconst VisuallyHiddenInput = styled(\"input\")({\n clip: \"rect(0 0 0 0)\",\n clipPath: \"inset(50%)\",\n height: 1,\n overflow: \"hidden\",\n position: \"absolute\",\n bottom: 0,\n left: 0,\n whiteSpace: \"nowrap\",\n width: 1,\n});\n\nconst Dropzone = styled(\"div\")<{ $dragging: boolean }>(({ theme, $dragging }) => {\n return {\n border: \"2px dashed\",\n borderColor: $dragging ? theme.palette.primary.main : \"#ccc\",\n backgroundColor: $dragging ? theme.palette.action.hover : \"transparent\",\n borderRadius: 8,\n padding: \"1.5rem\",\n textAlign: \"center\",\n transition: \"border-color 0.2s\",\n cursor: \"pointer\",\n };\n});\n\nexport interface FileInputProps extends ButtonOwnProps {\n onFileInput: (allowedFiles: File[]) => void;\n label?: string;\n multiple?: boolean;\n accept?: string[];\n useDropzone?: boolean;\n}\n\nfunction FileInput({\n onFileInput,\n label = \"Upload files\",\n multiple,\n accept,\n useDropzone,\n ...buttonProps\n}: FileInputProps) {\n const [isDragging, setIsDragging] = useState<boolean>(false);\n\n const fileInputButton = (\n <Button\n variant=\"contained\"\n component=\"label\"\n aria-label=\"File upload button\"\n onKeyDown={(event) => {\n if (event.key === \"Enter\" || event.key === \" \") {\n event.preventDefault();\n document.getElementById(\"file-input\")?.click();\n }\n }}\n {...buttonProps}\n startIcon={buttonProps.startIcon ?? <CloudUploadIcon />}\n >\n {label}\n <VisuallyHiddenInput\n id=\"file-input\"\n type=\"file\"\n onChange={(event) => {\n const input = event.target;\n onFileInput(Array.from(input.files ?? []));\n input.value = \"\";\n }}\n multiple={multiple}\n accept={accept?.join(\",\")}\n disabled={buttonProps.disabled}\n />\n </Button>\n );\n\n return useDropzone ? (\n <Dropzone\n $dragging={isDragging}\n onDragOver={(event) => {\n event.preventDefault();\n if (buttonProps.disabled) {\n return;\n }\n setIsDragging(true);\n }}\n onDragLeave={(event) => {\n event.preventDefault();\n setIsDragging(false);\n }}\n onDrop={(event) => {\n event.preventDefault();\n setIsDragging(false);\n if (buttonProps.disabled) {\n return;\n }\n const filesArray = Array.from(event.dataTransfer.files ?? []);\n onFileInput(filesArray);\n }}\n >\n {fileInputButton}\n </Dropzone>\n ) : (\n fileInputButton\n );\n}\n\nexport default FileInput;\n","import type { Dispatch, SetStateAction } from \"react\";\nimport type { FileInputProps } from \"src/components/FileInput\";\n\nimport DeleteIcon from \"@mui/icons-material/Delete\";\nimport Box from \"@mui/material/Box\";\nimport IconButton from \"@mui/material/IconButton\";\nimport List from \"@mui/material/List\";\nimport ListItem from \"@mui/material/ListItem\";\nimport ListItemText from \"@mui/material/ListItemText\";\n\nimport FileInput from \"src/components/FileInput\";\n\nexport interface FileInputListProps extends Omit<FileInputProps, \"onFileInput\"> {\n files: File[];\n setFiles: Dispatch<SetStateAction<File[]>>;\n}\n\nfunction FileInputList({ files, setFiles, ...fileInputProps }: FileInputListProps) {\n function onFileInput(newFiles: File[]) {\n setFiles((oldFiles) => {\n return [...oldFiles, ...newFiles];\n });\n }\n\n const newFileInputProps = { ...fileInputProps, onFileInput };\n if (newFileInputProps?.multiple === undefined) {\n newFileInputProps.multiple = true;\n }\n\n return (\n <Box>\n <FileInput {...newFileInputProps} />\n <List>\n {files.map((file) => {\n return (\n <ListItem\n key={file.name}\n secondaryAction={\n <IconButton\n aria-label=\"Delete\"\n edge=\"end\"\n onClick={() => {\n setFiles((oldFiles) => {\n return oldFiles.filter((fileToDelete) => {\n return fileToDelete !== file;\n });\n });\n }}\n >\n <DeleteIcon />\n </IconButton>\n }\n >\n <ListItemText primary={file.name} />\n </ListItem>\n );\n })}\n </List>\n </Box>\n );\n}\n\nexport default FileInputList;\n","import type { OverridableComponent } from \"@mui/material/OverridableComponent\";\nimport type { SvgIconTypeMap } from \"@mui/material/SvgIcon\";\nimport type { ElementType, MouseEvent as ReactMouseEvent, ReactNode } from \"react\";\n\nimport Box from \"@mui/material/Box\";\nimport Popover from \"@mui/material/Popover\";\nimport { useId, useState } from \"react\";\n\nexport interface IconWithPopoverProps {\n icon:\n | (OverridableComponent<SvgIconTypeMap<unknown, \"svg\">> & {\n muiName: string;\n })\n | ElementType;\n onOpen?: () => void;\n onClose?: () => void;\n iconProps?: SvgIconTypeMap<unknown, \"svg\">[\"props\"];\n children: ReactNode;\n}\n\nfunction IconWithPopover({\n icon: Icon,\n onOpen,\n onClose,\n iconProps,\n children,\n}: IconWithPopoverProps) {\n const [anchorElement, setAnchorElement] = useState<Element | null>(null);\n const isPopoverOpen = !!anchorElement;\n const popoverId = useId();\n\n function handleOpen(event: ReactMouseEvent<SVGSVGElement, MouseEvent>) {\n setAnchorElement(event.currentTarget);\n if (onOpen) {\n onOpen();\n }\n }\n\n function handleClose() {\n setAnchorElement(null);\n if (onClose) {\n onClose();\n }\n }\n\n return (\n <Box>\n <Icon\n aria-owns={isPopoverOpen ? popoverId : undefined}\n aria-haspopup=\"true\"\n onMouseEnter={handleOpen}\n onMouseLeave={handleClose}\n {...iconProps}\n />\n <Popover\n id={popoverId}\n sx={{ pointerEvents: \"none\" }}\n open={isPopoverOpen}\n anchorEl={anchorElement}\n anchorOrigin={{\n vertical: \"bottom\",\n horizontal: \"left\",\n }}\n transformOrigin={{\n vertical: \"top\",\n horizontal: \"left\",\n }}\n onClose={handleClose}\n disableRestoreFocus\n >\n {children}\n </Popover>\n </Box>\n );\n}\n\nexport default IconWithPopover;\n","import type { LinkProps } from \"@mui/material/Link\";\nimport type { ReactNode } from \"react\";\n\nimport MUILink from \"@mui/material/Link\";\nimport { Link as ReactDOMLink } from \"react-router-dom\";\n\nexport interface InternalLinkProps extends Omit<LinkProps, \"href\"> {\n to: `/${string}` | `~/${string}`;\n href?: never;\n children: ReactNode;\n}\n\nfunction InternalLink({ to, children, ...linkProps }: InternalLinkProps) {\n return (\n <MUILink component={ReactDOMLink} to={to} {...linkProps}>\n {children}\n </MUILink>\n );\n}\n\nexport default InternalLink;\n","import type { ListItemButtonProps } from \"@mui/material/ListItemButton\";\nimport type { ReactNode } from \"react\";\n\nimport ListItemButton from \"@mui/material/ListItemButton\";\n\nimport InternalLink from \"src/components/InternalLink\";\n\nexport interface ListItemInternalLinkProps extends Omit<ListItemButtonProps, \"href\"> {\n children: ReactNode;\n to: string;\n}\n\nfunction ListItemInternalLink({ children, ...listItemButtonProps }: ListItemInternalLinkProps) {\n return (\n <ListItemButton component={InternalLink} {...listItemButtonProps}>\n {children}\n </ListItemButton>\n );\n}\n\nexport default ListItemInternalLink;\n","import type { DisallowUndefined } from \"@alextheman/utility\";\nimport type { ReactNode } from \"react\";\nimport type { LoaderProviderProps } from \"src/providers\";\n\nimport CircularProgress from \"@mui/material/CircularProgress\";\n\nimport { LoaderError, LoaderProvider } from \"src/providers\";\nimport LoaderData from \"src/providers/LoaderProvider/LoaderData\";\n\nexport type LoaderProps<T> = Omit<LoaderProviderProps<T>, \"children\"> & {\n children: ReactNode | ((data: DisallowUndefined<T>) => ReactNode);\n onUndefined?: () => ReactNode | void;\n};\n\nfunction Loader<T>({\n children,\n onUndefined,\n loadingComponent = <CircularProgress />,\n ...loaderProviderProps\n}: LoaderProps<T>) {\n return (\n <LoaderProvider<T> loadingComponent={loadingComponent} {...loaderProviderProps}>\n <LoaderError />\n <LoaderData<T> onUndefined={onUndefined}>{children}</LoaderData>\n </LoaderProvider>\n );\n}\n\nexport default Loader;\n","import type { JSX, ReactNode } from \"react\";\n\nimport BottomNavigation from \"@mui/material/BottomNavigation\";\nimport BottomNavigationAction from \"@mui/material/BottomNavigationAction\";\nimport Box from \"@mui/material/Box\";\nimport Paper from \"@mui/material/Paper\";\nimport { useState } from \"react\";\nimport { Link } from \"react-router-dom\";\n\nexport interface NavItemBottom {\n value: string;\n label: string;\n icon?: JSX.Element;\n to: string;\n}\n\nexport interface NavigationBottomProps {\n children: ReactNode;\n navItems: NavItemBottom[];\n}\n\nfunction NavigationBottom({ children, navItems }: NavigationBottomProps) {\n const [value, setValue] = useState<string>(\"\");\n return (\n <>\n <Box sx={{ paddingBottom: 7 }}>{children}</Box>\n <Paper sx={{ position: \"fixed\", bottom: 0, left: 0, right: 0 }}>\n <BottomNavigation\n showLabels\n value={value}\n onChange={(_, value) => {\n setValue(value);\n }}\n >\n {navItems.map((item) => {\n return <BottomNavigationAction key={item.value} {...item} component={Link} />;\n })}\n </BottomNavigation>\n </Paper>\n </>\n );\n}\n\nexport default NavigationBottom;\n","import type { AppBarProps as MuiAppBarProps } from \"@mui/material/AppBar\";\nimport type { CSSObject, Theme } from \"@mui/material/styles\";\nimport type { ReactNode } from \"react\";\n\nimport { truncate } from \"@alextheman/utility\";\nimport ChevronLeftIcon from \"@mui/icons-material/ChevronLeft\";\nimport ChevronRightIcon from \"@mui/icons-material/ChevronRight\";\nimport MenuIcon from \"@mui/icons-material/Menu\";\nimport MuiAppBar from \"@mui/material/AppBar\";\nimport Box from \"@mui/material/Box\";\nimport CssBaseline from \"@mui/material/CssBaseline\";\nimport Divider from \"@mui/material/Divider\";\nimport MuiDrawer from \"@mui/material/Drawer\";\nimport IconButton from \"@mui/material/IconButton\";\nimport List from \"@mui/material/List\";\nimport ListItem from \"@mui/material/ListItem\";\nimport ListItemButton from \"@mui/material/ListItemButton\";\nimport ListItemIcon from \"@mui/material/ListItemIcon\";\nimport ListItemText from \"@mui/material/ListItemText\";\nimport { styled, useTheme } from \"@mui/material/styles\";\nimport Toolbar from \"@mui/material/Toolbar\";\nimport Typography from \"@mui/material/Typography\";\nimport { Fragment, useState } from \"react\";\nimport { Link, useLocation } from \"react-router-dom\";\n\nconst drawerWidth = 240;\n\nfunction openedMixin(theme: Theme): CSSObject {\n return {\n width: drawerWidth,\n transition: theme.transitions.create(\"width\", {\n easing: theme.transitions.easing.sharp,\n duration: theme.transitions.duration.enteringScreen,\n }),\n overflowX: \"hidden\",\n };\n}\n\nfunction closedMixin(theme: Theme): CSSObject {\n return {\n transition: theme.transitions.create(\"width\", {\n easing: theme.transitions.easing.sharp,\n duration: theme.transitions.duration.leavingScreen,\n }),\n overflowX: \"hidden\",\n width: `calc(${theme.spacing(7)} + 1px)`,\n [theme.breakpoints.up(\"sm\")]: {\n width: `calc(${theme.spacing(8)} + 1px)`,\n },\n };\n}\n\nconst DrawerHeader = styled(\"div\")(({ theme }) => {\n return {\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"flex-end\",\n padding: theme.spacing(0, 1),\n // necessary for content to be below app bar\n ...theme.mixins.toolbar,\n };\n});\n\ninterface AppBarProps extends MuiAppBarProps {\n open?: boolean;\n}\n\nconst AppBar = styled(MuiAppBar, {\n shouldForwardProp: (prop) => {\n return prop !== \"open\";\n },\n})<AppBarProps>(({ theme }) => {\n return {\n zIndex: theme.zIndex.drawer + 1,\n transition: theme.transitions.create([\"width\", \"margin\"], {\n easing: theme.transitions.easing.sharp,\n duration: theme.transitions.duration.leavingScreen,\n }),\n variants: [\n {\n props: ({ open }) => {\n return open;\n },\n style: {\n marginLeft: drawerWidth,\n width: `calc(100% - ${drawerWidth}px)`,\n transition: theme.transitions.create([\"width\", \"margin\"], {\n easing: theme.transitions.easing.sharp,\n duration: theme.transitions.duration.enteringScreen,\n }),\n },\n },\n ],\n };\n});\n\nconst Drawer = styled(MuiDrawer, {\n shouldForwardProp: (prop) => {\n return prop !== \"open\";\n },\n})(({ theme }) => {\n return {\n width: drawerWidth,\n flexShrink: 0,\n whiteSpace: \"nowrap\",\n boxSizing: \"border-box\",\n variants: [\n {\n props: ({ open }) => {\n return open;\n },\n style: {\n ...openedMixin(theme),\n \"& .MuiDrawer-paper\": openedMixin(theme),\n },\n },\n {\n props: ({ open }) => {\n return !open;\n },\n style: {\n ...closedMixin(theme),\n \"& .MuiDrawer-paper\": closedMixin(theme),\n },\n },\n ],\n };\n});\n\nexport interface NavMenuItem {\n category: string;\n options: {\n label: string;\n to: string;\n icon?: ReactNode;\n }[];\n}\n\nexport interface NavigationDrawerProps {\n title: string;\n navItems: NavMenuItem[];\n headerElements?: ReactNode;\n children: ReactNode;\n}\n\nfunction NavigationDrawer({ title, navItems, children, headerElements }: NavigationDrawerProps) {\n const theme = useTheme();\n const [open, setOpen] = useState(true);\n const location = useLocation();\n\n function handleDrawerOpen() {\n setOpen(true);\n }\n\n function handleDrawerClose() {\n setOpen(false);\n }\n\n return (\n <Box sx={{ display: \"flex\" }}>\n <CssBaseline />\n <AppBar position=\"fixed\" open={open}>\n <Toolbar>\n <IconButton\n color=\"inherit\"\n aria-label=\"open drawer\"\n onClick={handleDrawerOpen}\n edge=\"start\"\n sx={[\n {\n marginRight: 5,\n },\n open && { display: \"none\" },\n ]}\n >\n <MenuIcon />\n </IconButton>\n <Typography variant=\"h6\" noWrap component=\"div\">\n {title}\n </Typography>\n {headerElements}\n </Toolbar>\n </AppBar>\n <Drawer variant=\"permanent\" open={open}>\n <DrawerHeader>\n <IconButton onClick={handleDrawerClose}>\n {theme.direction === \"rtl\" ? <ChevronRightIcon /> : <ChevronLeftIcon />}\n </IconButton>\n </DrawerHeader>\n <Divider />\n {navItems.map((item) => {\n return (\n <Fragment key={item.category}>\n <List>\n <Typography variant={open ? \"h5\" : \"h6\"} paddingLeft={open ? 2 : 1}>\n {open ? item.category : truncate(item.category, 4)}\n </Typography>\n {item.options.map((option) => {\n return (\n <ListItem key={option.to} disablePadding sx={{ display: \"block\" }}>\n <ListItemButton\n sx={[\n {\n minHeight: 48,\n px: 2.5,\n },\n open\n ? {\n justifyContent: \"initial\",\n }\n : {\n justifyContent: \"center\",\n },\n ]}\n component={Link}\n to={option.to}\n selected={location.pathname === option.to}\n >\n <ListItemIcon\n sx={[\n {\n minWidth: 0,\n justifyContent: \"center\",\n },\n open\n ? {\n mr: 3,\n }\n : {\n mr: \"auto\",\n },\n ]}\n >\n {option.icon ? (\n option.icon\n ) : !open ? (\n <Typography>{truncate(option.label, 4)}</Typography>\n ) : null}\n </ListItemIcon>\n <ListItemText\n primary={option.label}\n sx={[\n open\n ? {\n opacity: 1,\n }\n : {\n opacity: 0,\n },\n ]}\n />\n </ListItemButton>\n </ListItem>\n );\n })}\n </List>\n <Divider />\n </Fragment>\n );\n })}\n </Drawer>\n <Box component=\"main\" sx={{ flexGrow: 1, p: 3 }}>\n <DrawerHeader />\n {children}\n </Box>\n </Box>\n );\n}\n\nexport default NavigationDrawer;\n","import type { TypographyProps } from \"@mui/material/Typography\";\n\nimport Typography from \"@mui/material/Typography\";\n\nexport interface PopoverTextProps extends TypographyProps {\n text: string;\n}\n\nfunction PopoverText({ text, sx, ...typographyProps }: PopoverTextProps) {\n return (\n <>\n {text.split(\"\\n\").map((line, index) => {\n return (\n <Typography key={index} sx={{ margin: 1, ...sx }} {...typographyProps}>\n {line}\n </Typography>\n );\n })}\n </>\n );\n}\n\nexport default PopoverText;\n","import type { SxProps, Theme } from \"@mui/material/styles\";\n\nimport Box from \"@mui/material/Box\";\nimport Typography from \"@mui/material/Typography\";\nimport { stripIndent } from \"common-tags\";\nimport { LiveEditor, LiveError, LivePreview, LiveProvider } from \"react-live\";\n\nimport { useMode } from \"src/providers\";\n\nexport interface ReactPlaygroundProps {\n code: string;\n scope?: Record<string, unknown>;\n previewStyles?: SxProps<Theme>;\n noInline?: boolean;\n enableTypeScript?: boolean;\n language?: string;\n}\n\nfunction ReactPlayground({\n code,\n scope,\n previewStyles,\n noInline,\n enableTypeScript,\n language,\n}: ReactPlaygroundProps) {\n const { mode } = useMode();\n const defaultPreviewStyles: SxProps<Theme> = {\n backgroundColor: mode === \"dark\" ? \"black\" : \"white\",\n border: 0.3,\n borderRadius: 1,\n padding: 2,\n borderColor: \"darkgray\",\n };\n const allPreviewStyles = previewStyles\n ? { ...defaultPreviewStyles, ...previewStyles }\n : { ...defaultPreviewStyles };\n return (\n <Box sx={{ borderRadius: 1, border: 0.5, padding: 2 }}>\n <LiveProvider\n code={stripIndent(code)}\n scope={scope}\n noInline={noInline}\n enableTypeScript={enableTypeScript}\n language={language}\n >\n <Typography variant=\"h5\">Code</Typography>\n <Box\n sx={{\n border: 0.3,\n borderRadius: 0.3,\n borderColor: \"darkgray\",\n }}\n >\n <LiveEditor />\n </Box>\n <br />\n <Typography variant=\"h5\">Result</Typography>\n <Box sx={allPreviewStyles}>\n <LivePreview />\n <LiveError />\n </Box>\n </LiveProvider>\n </Box>\n );\n}\n\nexport default ReactPlayground;\n","import { fillArray } from \"@alextheman/utility\";\nimport Skeleton from \"@mui/material/Skeleton\";\nimport TableCell from \"@mui/material/TableCell\";\nimport TableRow from \"@mui/material/TableRow\";\n\nexport interface SkeletonRowProps {\n columns: number;\n}\n\nfunction SkeletonRow({ columns }: SkeletonRowProps) {\n return (\n <TableRow>\n {fillArray((index) => {\n return (\n <TableCell key={index}>\n <Skeleton />\n </TableCell>\n );\n }, columns)}\n </TableRow>\n );\n}\n\nexport default SkeletonRow;\n","import type { ButtonProps } from \"@mui/material/Button\";\n\nimport Button from \"@mui/material/Button\";\nimport { useFormContext } from \"react-hook-form\";\n\nexport interface SubmitButtonProps extends Omit<ButtonProps, \"type\"> {\n disableClean?: boolean;\n label: string;\n}\n\nfunction SubmitButton({ disableClean, label, ...buttonProps }: SubmitButtonProps) {\n const {\n formState: { disabled: formDisabled, isDirty, isSubmitting },\n } = useFormContext();\n\n return (\n <Button\n color=\"primary\"\n disabled={buttonProps.disabled || (disableClean && !isDirty) || formDisabled}\n loading={isSubmitting}\n type=\"submit\"\n variant=\"contained\"\n {...buttonProps}\n >\n {label}\n </Button>\n );\n}\n\nexport default SubmitButton;\n","import type { CommonProps } from \"@mui/material/OverridableComponent\";\nimport type { SwitchProps } from \"@mui/material/Switch\";\nimport type { ComponentType, CSSProperties } from \"react\";\n\nimport Box from \"@mui/material/Box\";\nimport { styled } from \"@mui/material/styles\";\nimport Switch from \"@mui/material/Switch\";\n\nexport interface SwitchWithIconsProps extends Omit<SwitchProps, \"icon\" | \"checkedIcon\"> {\n checkedIcon: ComponentType<{ style?: CSSProperties }>;\n checkedIconStyles?: CommonProps[\"style\"];\n uncheckedIcon: ComponentType<{ style?: CSSProperties }>;\n uncheckedIconStyles?: CommonProps[\"style\"];\n}\n\nconst StyledSwitch = styled(Switch)(() => {\n return {\n padding: 8,\n \"& .MuiSwitch-track\": {\n borderRadius: 11,\n \"&::before, &::after\": {\n content: '\"\"',\n position: \"absolute\",\n top: \"50%\",\n transform: \"translateY(-50%)\",\n fontSize: 16,\n width: 28,\n height: 28,\n },\n },\n };\n});\n\nfunction SwitchWithIcons({\n checkedIcon: CheckedIcon,\n checkedIconStyles,\n uncheckedIcon: UncheckedIcon,\n uncheckedIconStyles,\n ...switchProps\n}: SwitchWithIconsProps) {\n const boxSx = {\n borderRadius: \"50%\",\n borderColor: \"white\",\n backgroundColor: \"white\",\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n padding: 0.25,\n };\n const defaultIconStyles = { color: \"black\", maxWidth: 16.5, maxHeight: 16.5 };\n return (\n <StyledSwitch\n checkedIcon={\n <Box sx={boxSx}>\n <CheckedIcon style={{ ...defaultIconStyles, ...checkedIconStyles }} />\n </Box>\n }\n icon={\n <Box sx={boxSx}>\n <UncheckedIcon style={{ ...defaultIconStyles, ...uncheckedIconStyles }} />\n </Box>\n }\n {...switchProps}\n />\n );\n}\n\nexport default SwitchWithIcons;\n","import type { Dispatch, SetStateAction } from \"react\";\n\nimport { useCallback, useEffect, useState } from \"react\";\n\nfunction useHash<S extends string>(initialHash: S | undefined): [S, Dispatch<SetStateAction<S>>] {\n const [hash, setHash] = useState<S>(() => {\n const hash: S = window.location.hash.replace(\"#\", \"\") as S;\n return !initialHash ? hash : hash === \"\" ? initialHash : hash;\n });\n const hashChangeHandler = useCallback(() => {\n const hash: S = window.location.hash.replace(\"#\", \"\") as S;\n setHash(!initialHash ? hash : hash === \"\" ? initialHash : hash);\n }, [setHash, initialHash]);\n\n useEffect(() => {\n window.addEventListener(\"hashchange\", hashChangeHandler);\n return () => {\n window.removeEventListener(\"hashchange\", hashChangeHandler);\n };\n }, [hashChangeHandler]);\n\n const updateHash = useCallback(\n (newHash: S | ((previousState: S) => S)) => {\n const resolvedHash = typeof newHash === \"function\" ? newHash(hash) : newHash;\n if (resolvedHash !== hash) {\n window.location.hash = resolvedHash;\n }\n },\n [hash],\n );\n\n return [hash, updateHash];\n}\n\nexport default useHash;\n"],"mappings":"kyBAIA,OAAOA,OAAmB,oCAC1B,OAAOC,OAAiB,kCACxB,OAAOC,OAAS,oBAChB,OAAOC,MAAgB,2BACvB,OAAOC,OAAc,yBACrB,OAAS,aAAAC,GAAW,YAAAC,OAAgB,QAyBvB,cAAAC,EAgBP,QAAAC,MAhBO,oBATb,SAASC,GAAgB,CACvB,gBAAAC,EACA,OAAAC,EACA,QAAAC,EACA,SAAAC,EACA,aAAAC,EACA,eAAAC,EACA,gBAAiBC,EAAkBC,EACnC,cAAAC,EACA,SAAAC,EAAWZ,EAACa,GAAA,EAAY,EACxB,WAAAC,EAAad,EAACe,GAAA,EAAc,EAC5B,kBAAAC,EAAoBP,IAAoBC,CAC1C,EAAyB,CACvB,GAAM,CAACO,EAAYC,CAAa,EAAIC,GAAkB,CAAC,CAAChB,CAAe,EAEvE,OAAAiB,GAAU,IAAM,CACVH,GAAcb,EAChBA,EAAO,EACE,CAACa,GAAcZ,GACxBA,EAAQ,CAEZ,EAAG,CAACY,CAAU,CAAC,EAGbhB,EAACoB,GAAA,CACC,UAAApB,EAACQ,EAAA,CACC,QAAS,IAAM,CACbS,EAAeI,GACN,CAACA,CACT,CACH,EACA,GACEN,EACIO,EAAA,CACE,MAAO,OACP,QAAS,OACT,WAAY,SACZ,eAAgB,SAChB,SAAU,IACV,SAAU,EACV,UAAW,SACX,UACEd,IAAoBC,EAAa,CAAE,gBAAiB,cAAe,EAAI,MACtEH,GAELA,EAEN,gBAAeU,EAEd,UAAAT,EACAS,EAAaL,EAAWE,GAC3B,EACAd,EAACwB,GAAAC,EAAAF,EAAA,CAAS,GAAIN,GAAgBN,GAA7B,CACE,SAAAL,GACH,GACF,CAEJ,CAEA,IAAOoB,GAAQxB,GCpFf,OAAOyB,OAAc,+BACrB,OAAOC,OAAe,gCACtB,OAAOC,OAAgB,2BACvB,OAAOC,OAAa,wBCDpB,OAAOC,OAAsB,iCAC7B,OAAS,iBAAAC,GAAe,cAAAC,OAAkB,QAkCrB,cAAAC,MAAA,oBAXrB,IAAMC,GAAgBC,GAAuD,MAAS,EAC/E,SAASC,GAAsC,CACpD,IAAMC,EAAUC,GAAWJ,EAAa,EACxC,GAAI,CAACG,EACH,MAAM,IAAI,MAAM,wBAAwB,EAE1C,OAAOA,CACT,CAEA,SAASE,GAAkBC,EAIA,CAJA,IAAAC,EAAAD,EACzB,UAAAE,EACA,iBAAAC,EAAmBV,EAACW,GAAA,EAAiB,CArCvC,EAmC2BH,EAGtBI,EAAAC,EAHsBL,EAGtB,CAFH,WACA,qBAGA,OACER,EAACC,GAAc,SAAd,CAAuB,MAAOa,EAAA,CAAE,iBAAAJ,GAAqBE,GACnD,SAAAH,EACH,CAEJ,CAEA,IAAOM,EAAQT,GC5Cf,OAAS,UAAAU,OAAc,QAqBZ,mBAAAC,EAAA,OAAAC,MAAA,oBAVX,SAASC,GAAc,CACrB,SAAAC,EACA,iBAAAC,EACA,YAAAC,EACA,YAAAC,CACF,EAAuB,CACrB,GAAM,CAAE,UAAAC,EAAW,KAAAC,EAAM,iBAAkBC,EAAyB,MAAAC,CAAM,EAAIC,EAAa,EACrFC,EAAaC,GAAO,EAAK,EAE/B,GAAIN,EACF,OAAON,EAAAD,EAAA,CAAG,SAAAI,GAAA,KAAAA,EAAoBK,EAAwB,EAGxD,GAAIC,GAAS,CAACJ,EACZ,OAAOL,EAAAD,EAAA,EAAE,EAIX,GAAIQ,IAAS,OAAW,CAQtB,GAPKI,EAAW,UACd,QAAQ,KACN,sLACF,EACAA,EAAW,QAAU,IAGnBP,EAAa,CACf,IAAMS,EAAST,EAAY,EAC3B,OAAOS,GAAA,KAAAA,EAAUb,EAAAD,EAAA,EAAE,CACrB,CACA,OAAOC,EAAAD,EAAA,EAAE,CACX,CAEA,OAAO,OAAOG,GAAa,WACzBF,EAAAD,EAAA,CAAG,SAAAG,EAASK,CAA4B,EAAE,EAE1CP,EAAAD,EAAA,CAAG,SAAAG,EAAS,CAEhB,CAEA,IAAOY,EAAQb,GCtDf,OAAOc,OAAW,sBAYL,mBAAAC,GAAA,OAAAC,MAAA,oBARb,SAASC,IAAc,CAJvB,IAAAC,EAKE,GAAM,CAAE,MAAAC,EAAO,eAAAC,CAAe,EAAIC,EAAU,EAE5C,OAAIF,EACE,OAAOC,GAAmB,WACrBA,EAAeD,CAAK,EAEzBC,EACKJ,EAAAD,GAAA,CAAG,SAAAK,EAAe,EAGzBJ,EAACM,GAAA,CAAM,SAAS,QACZ,UAAAJ,EAAAC,GAAA,YAAAA,EAAiB,UAAjB,KAAAD,EAA4B,wDAChC,EAIGF,EAAAD,GAAA,EAAE,CACX,CAEA,IAAOQ,EAAQN,GCtBf,OAAOO,OAAiB,4BACxB,OAAS,eAAAC,GAAa,iBAAAC,OAAqB,uBAC3C,OAAS,iBAAAC,GAAe,cAAAC,GAAY,WAAAC,GAAS,YAAAC,OAAgB,QAwCvD,OACE,OAAAC,GADF,QAAAC,OAAA,oBAtCN,IAAMC,GAAcN,GAAc,CAChC,WAAY,IAAM,CAAC,EACnB,KAAM,MACR,CAAC,EAEM,SAASO,GAAU,CACxB,OAAON,GAAWK,EAAW,CAC/B,CASA,SAASE,GAAa,CAAE,SAAAC,EAAU,KAAMC,EAAW,MAAO,EAAsB,CAC9E,GAAM,CAACC,EAAMC,CAAO,EAAIT,GAAeO,CAAQ,EAEzCG,EAAQX,GAAQ,IACbJ,GAAY,CACjB,QAAS,CACP,KAAAa,CACF,CACF,CAAC,EACA,CAACA,CAAI,CAAC,EAET,OACEP,GAACE,GAAY,SAAZ,CACC,MAAO,CACL,KAAAK,EACA,WAAY,IAAM,CAChBC,EAASE,GACAA,IAAS,QAAU,OAAS,OACpC,CACH,CACF,EAEA,SAAAT,GAACN,GAAA,CAAc,MAAOc,EACpB,UAAAT,GAACP,GAAA,EAAY,EACZY,GACH,EACF,CAEJ,CAEA,IAAOM,GAAQP,GClDf,OAAS,iBAAAQ,GAAe,cAAAC,GAAY,aAAAC,GAAW,YAAAC,MAAgB,QAiE3D,cAAAC,OAAA,oBAnDJ,IAAMC,GAAoBL,GAAsC,CAC9D,YAAa,EACb,aAAc,EACd,cAAe,EACjB,CAAC,EAEM,SAASM,IAAgB,CAC9B,OAAOL,GAAWI,EAAiB,CACrC,CAEA,SAASE,GAAmB,CAAE,SAAAC,EAAU,iBAAAC,EAAkB,kBAAAC,CAAkB,EAAoB,CAC9F,GAAM,CAACC,EAAaC,CAAc,EAAIT,EAAiB,OAAO,UAAU,EAClE,CAACU,EAAcC,CAAe,EAAIX,EAAiB,OAAO,WAAW,EAE3E,SAASY,EACPC,EACAC,EACAR,EAA2B,IAC3BC,EAA4B,IACnB,CACT,OAAOM,EAAQP,GAAoBQ,EAASP,CAC9C,CAEA,GAAM,CAACQ,EAAeC,CAAgB,EAAIhB,EACxCY,EACE,OAAO,WACP,OAAO,YACPN,EACAC,CACF,CACF,EAEA,OAAAR,GAAU,IAAM,CACd,SAASkB,GAAgB,CACvBR,EAAe,OAAO,UAAU,EAChCE,EAAgB,OAAO,WAAW,CACpC,CACA,OAAAM,EAAc,EACd,OAAO,iBAAiB,SAAUA,CAAa,EACxC,IAAM,CACX,OAAO,oBAAoB,SAAUA,CAAa,CACpD,CACF,EAAG,CAAC,CAAC,EAELlB,GAAU,IAAM,CACdiB,EACEJ,EAAqBJ,EAAaE,EAAcJ,EAAkBC,CAAiB,CACrF,CACF,EAAG,CAACC,EAAaE,EAAcJ,EAAkBC,CAAiB,CAAC,EAGjEN,GAACC,GAAkB,SAAlB,CACC,MAAO,CACL,cAAAa,EACA,YAAAP,EACA,aAAAE,CACF,EAEC,SAAAL,EACH,CAEJ,CAEA,IAAOa,GAAQd,GC5Ef,OAAS,QAAAe,OAAY,sBACrB,OAAOC,OAAW,sBAClB,OAAOC,OAAc,yBACrB,OAAS,iBAAAC,GAAe,cAAAC,GAAY,YAAAC,MAAgB,QA0ChD,OAEI,OAAAC,GAFJ,QAAAC,OAAA,oBA/BJ,IAAMC,GAAkBC,GAAgD,MAAS,EAC1E,SAASC,IAAc,CAC5B,IAAMC,EAAUC,GAAWJ,EAAe,EAC1C,GAAI,CAACG,EACH,MAAM,IAAI,MAAM,0BAA0B,EAE5C,OAAOA,CACT,CAEA,SAASE,GAAiB,CAAE,SAAAC,EAAU,iBAAAC,EAAmB,GAAK,EAA0B,CACtF,GAAM,CAACC,EAAMC,CAAO,EAAIC,EAAkB,EAAK,EACzC,CAACC,EAAuBC,CAAwB,EAAIF,EAAiBH,CAAgB,EACrF,CAACM,EAASC,CAAU,EAAIJ,EAAiB,EAAE,EAC3C,CAACK,EAAUC,CAAW,EAAIN,EAAqB,MAAM,EAE3D,SAASO,EAAYJ,EAAiBE,EAAuBG,EAAmB,CAC9ET,EAAQ,EAAI,EACZG,EAAyBM,GAAA,KAAAA,EAAYX,CAAgB,EACrDS,EAAYD,GAAA,KAAAA,EAAY,MAAM,EAC9BD,EAAWD,CAAO,CACpB,CAEA,SAAeM,GAAc,QAAAC,EAAA,sBAC3BX,EAAQ,EAAK,EAGb,MAAMY,GAAK,EAAG,EACdP,EAAW,EAAE,CACf,GAEA,OACEf,GAACC,GAAgB,SAAhB,CAAyB,MAAO,CAAE,YAAAiB,CAAY,EAC7C,UAAAnB,GAACwB,GAAA,CAAS,KAAMd,EAAM,iBAAkBG,EAAuB,QAASQ,EACtE,SAAArB,GAACyB,GAAA,CAAM,QAASJ,EAAa,SAAUJ,EACpC,SAAAF,EACH,EACF,EACCP,GACH,CAEJ,CAEA,IAAOkB,GAAQnB,GN1CY,cAAAoB,MAAA,oBAV3B,SAASC,IAAiB,CACxB,GAAM,CAAE,KAAAC,EAAM,WAAAC,CAAW,EAAIC,EAAQ,EAErC,OACEJ,EAACK,GAAA,CAAQ,MAAO,UAAUH,IAAS,OAAS,QAAU,MAAM,QAC1D,SAAAF,EAACM,GAAA,CACC,GAAI,CAAE,WAAY,MAAO,EACzB,QAASH,EACT,aAAY,UAAUD,IAAS,OAAS,QAAU,MAAM,QAEvD,SAAAA,IAAS,OAASF,EAACO,GAAA,EAAU,EAAKP,EAACQ,GAAA,EAAS,EAC/C,EACF,CAEJ,CAEA,IAAOC,GAAQR,GOpBf,OAAOS,OAAmB,oCAC1B,OAAOC,OAAiB,kCACxB,OAAOC,OAAS,oBAChB,OAAOC,OAAe,uBACtB,OAAOC,OAAU,qBACjB,OAAS,aAAAC,GAAW,WAAAC,GAAS,YAAAC,OAAgB,QAoB9B,cAAAC,EAiCX,QAAAC,OAjCW,oBALf,SAASC,GAAa,CACpB,SAAAC,EACA,OAAQC,EAASC,GACjB,eAAAC,EAAiB,OACjB,YAAaC,EACb,WAAAC,EAAaR,EAACS,GAAA,EAAY,EAC1B,aAAAC,EAAeV,EAACW,GAAA,EAAc,EAC9B,OAAAC,EACA,QAAAC,CACF,EAAsB,CACpB,GAAM,CAACC,EAAeC,CAAgB,EAAIC,GAA6B,IAAI,EACrEC,EAAiBC,GAAQ,IACtB,CAAC,CAACJ,EACR,CAACA,CAAa,CAAC,EAEZK,EAAuCC,EAAAC,EAAA,GACxCd,GADwC,CAE3C,QAAUe,GAAwC,CAChDP,EAAiBO,EAAM,aAAa,CACtC,EACA,gBAAiBL,EAAiB,gBAAkB,OACpD,gBAAiB,OACjB,gBAAiBA,CACnB,GAEA,OAAIb,IAAWC,KACbc,EAAY,QAAUF,EAAiBT,EAAaE,GAGtDa,GAAU,IAAM,CACVN,GAAkBL,EACpBA,EAAO,EACE,CAACK,GAAkBJ,GAC5BA,EAAQ,CAEZ,EAAG,CAACI,EAAgBL,EAAQC,CAAO,CAAC,EAGlCZ,GAACuB,GAAA,CACC,UAAAxB,EAACI,EAAAgB,EAAAC,EAAA,GAAWF,GAAX,CAAyB,SAAAb,GAAe,EACzCN,EAACyB,GAAA,CACC,GAAG,gBACH,SAAUX,EACV,KAAMG,EACN,QAAS,IAAM,CACbF,EAAiB,IAAI,CACvB,EAEC,gBAAOZ,GAAa,WACnBH,EAACwB,GAAA,CACE,SAAArB,EAAS,IAAM,CACdY,EAAiB,IAAI,CACvB,CAAC,EACH,EAEAZ,EAEJ,GACF,CAEJ,CAEA,IAAOuB,GAAQxB,GClFf,OAAOyB,OAAa,qBAUhB,cAAAC,OAAA,oBAFJ,SAASC,GAAaC,EAAqD,CAArD,IAAAC,EAAAD,EAAE,MAAAE,EAAM,SAAAC,CAX9B,EAWsBF,EAAqBG,EAAAC,EAArBJ,EAAqB,CAAnB,OAAM,aAC5B,OACEH,GAACQ,GAAAC,EAAAC,EAAA,CAAQ,UAAW,IAAK,KAAMN,EAAM,OAAO,SAAS,IAAI,uBAA0BE,GAAlF,CACE,SAAAD,GACH,CAEJ,CAEA,IAAOM,GAAQV,GCjBf,OAAOW,OAAqB,kCAC5B,OAAOC,OAAY,uBACnB,OAAS,UAAAC,OAAc,uBACvB,OAAS,YAAAC,OAAgB,QA4DrB,OAWsC,OAAAC,EAXtC,QAAAC,OAAA,oBA1DG,IAAMC,GAAW,CACtB,IAAK,kBACL,IAAK,YACL,KAAM,aACN,IAAK,YACL,KAAM,oEACN,KAAM,0EACN,IAAK,YACL,IAAK,YACL,IAAK,WACP,EAIMC,GAAsBC,GAAO,OAAO,EAAE,CAC1C,KAAM,gBACN,SAAU,aACV,OAAQ,EACR,SAAU,SACV,SAAU,WACV,OAAQ,EACR,KAAM,EACN,WAAY,SACZ,MAAO,CACT,CAAC,EAEKC,GAAWD,GAAO,KAAK,EAA0B,CAAC,CAAE,MAAAE,EAAO,UAAAC,CAAU,KAClE,CACL,OAAQ,aACR,YAAaA,EAAYD,EAAM,QAAQ,QAAQ,KAAO,OACtD,gBAAiBC,EAAYD,EAAM,QAAQ,OAAO,MAAQ,cAC1D,aAAc,EACd,QAAS,SACT,UAAW,SACX,WAAY,oBACZ,OAAQ,SACV,EACD,EAUD,SAASE,GAAUC,EAOA,CAPA,IAAAC,EAAAD,EACjB,aAAAE,EACA,MAAAC,EAAQ,eACR,SAAAC,EACA,OAAAC,EACA,YAAAC,CA3DF,EAsDmBL,EAMdM,EAAAC,EANcP,EAMd,CALH,cACA,QACA,WACA,SACA,gBA3DF,IAAAD,EA8DE,GAAM,CAACS,EAAYC,CAAa,EAAIC,GAAkB,EAAK,EAErDC,EACJpB,GAACqB,GAAAC,EAAAC,EAAA,CACC,QAAQ,YACR,UAAU,QACV,aAAW,qBACX,UAAYC,GAAU,CArE5B,IAAAhB,GAsEYgB,EAAM,MAAQ,SAAWA,EAAM,MAAQ,OACzCA,EAAM,eAAe,GACrBhB,EAAA,SAAS,eAAe,YAAY,IAApC,MAAAA,EAAuC,QAE3C,GACIO,GAVL,CAWC,WAAWP,EAAAO,EAAY,YAAZ,KAAAP,EAAyBT,EAAC0B,GAAA,EAAgB,EAEpD,UAAAd,EACDZ,EAACG,GAAA,CACC,GAAG,aACH,KAAK,OACL,SAAWsB,GAAU,CAlF7B,IAAAhB,EAmFU,IAAMkB,EAAQF,EAAM,OACpBd,EAAY,MAAM,MAAKF,EAAAkB,EAAM,QAAN,KAAAlB,EAAe,CAAC,CAAC,CAAC,EACzCkB,EAAM,MAAQ,EAChB,EACA,SAAUd,EACV,OAAQC,GAAA,YAAAA,EAAQ,KAAK,KACrB,SAAUE,EAAY,SACxB,IACF,EAGF,OAAOD,EACLf,EAACK,GAAA,CACC,UAAWa,EACX,WAAaO,GAAU,CACrBA,EAAM,eAAe,EACjB,CAAAT,EAAY,UAGhBG,EAAc,EAAI,CACpB,EACA,YAAcM,GAAU,CACtBA,EAAM,eAAe,EACrBN,EAAc,EAAK,CACrB,EACA,OAASM,GAAU,CA5GzB,IAAAhB,EA+GQ,GAFAgB,EAAM,eAAe,EACrBN,EAAc,EAAK,EACfH,EAAY,SACd,OAEF,IAAMY,EAAa,MAAM,MAAKnB,EAAAgB,EAAM,aAAa,QAAnB,KAAAhB,EAA4B,CAAC,CAAC,EAC5DE,EAAYiB,CAAU,CACxB,EAEC,SAAAP,EACH,EAEAA,CAEJ,CAEA,IAAOQ,EAAQrB,GC1Hf,OAAOsB,OAAgB,6BACvB,OAAOC,OAAS,oBAChB,OAAOC,OAAgB,2BACvB,OAAOC,OAAU,qBACjB,OAAOC,OAAc,yBACrB,OAAOC,OAAkB,6BAsBrB,OACE,OAAAC,EADF,QAAAC,OAAA,oBAbJ,SAASC,GAAcC,EAA4D,CAA5D,IAAAC,EAAAD,EAAE,OAAAE,EAAO,SAAAC,CAjBhC,EAiBuBF,EAAsBG,EAAAC,EAAtBJ,EAAsB,CAApB,QAAO,aAC9B,SAASK,EAAYC,EAAkB,CACrCJ,EAAUK,GACD,CAAC,GAAGA,EAAU,GAAGD,CAAQ,CACjC,CACH,CAEA,IAAME,EAAoBC,EAAAC,EAAA,GAAKP,GAAL,CAAqB,YAAAE,CAAY,GAC3D,OAAIG,GAAA,YAAAA,EAAmB,YAAa,SAClCA,EAAkB,SAAW,IAI7BX,GAACc,GAAA,CACC,UAAAf,EAACgB,EAAAF,EAAA,GAAcF,EAAmB,EAClCZ,EAACiB,GAAA,CACE,SAAAZ,EAAM,IAAKa,GAERlB,EAACmB,GAAA,CAEC,gBACEnB,EAACoB,GAAA,CACC,aAAW,SACX,KAAK,MACL,QAAS,IAAM,CACbd,EAAUK,GACDA,EAAS,OAAQU,GACfA,IAAiBH,CACzB,CACF,CACH,EAEA,SAAAlB,EAACsB,GAAA,EAAW,EACd,EAGF,SAAAtB,EAACuB,GAAA,CAAa,QAASL,EAAK,KAAM,GAjB7BA,EAAK,IAkBZ,CAEH,EACH,GACF,CAEJ,CAEA,IAAOM,GAAQtB,GC1Df,OAAOuB,OAAS,oBAChB,OAAOC,OAAa,wBACpB,OAAS,SAAAC,GAAO,YAAAC,OAAgB,QAwC5B,OACE,OAAAC,GADF,QAAAC,OAAA,oBA1BJ,SAASC,GAAgB,CACvB,KAAMC,EACN,OAAAC,EACA,QAAAC,EACA,UAAAC,EACA,SAAAC,CACF,EAAyB,CACvB,GAAM,CAACC,EAAeC,CAAgB,EAAIC,GAAyB,IAAI,EACjEC,EAAgB,CAAC,CAACH,EAClBI,EAAYC,GAAM,EAExB,SAASC,EAAWC,EAAmD,CACrEN,EAAiBM,EAAM,aAAa,EAChCX,GACFA,EAAO,CAEX,CAEA,SAASY,GAAc,CACrBP,EAAiB,IAAI,EACjBJ,GACFA,EAAQ,CAEZ,CAEA,OACEJ,GAACgB,GAAA,CACC,UAAAjB,GAACG,EAAAe,EAAA,CACC,YAAWP,EAAgBC,EAAY,OACvC,gBAAc,OACd,aAAcE,EACd,aAAcE,GACVV,EACN,EACAN,GAACmB,GAAA,CACC,GAAIP,EACJ,GAAI,CAAE,cAAe,MAAO,EAC5B,KAAMD,EACN,SAAUH,EACV,aAAc,CACZ,SAAU,SACV,WAAY,MACd,EACA,gBAAiB,CACf,SAAU,MACV,WAAY,MACd,EACA,QAASQ,EACT,oBAAmB,GAElB,SAAAT,EACH,GACF,CAEJ,CAEA,IAAOa,GAAQlB,GCzEf,OAAOmB,OAAa,qBACpB,OAAS,QAAQC,OAAoB,mBAUjC,cAAAC,OAAA,oBAFJ,SAASC,GAAaC,EAAmD,CAAnD,IAAAC,EAAAD,EAAE,IAAAE,EAAI,SAAAC,CAZ5B,EAYsBF,EAAmBG,EAAAC,EAAnBJ,EAAmB,CAAjB,KAAI,aAC1B,OACEH,GAACQ,GAAAC,EAAAC,EAAA,CAAQ,UAAWC,GAAc,GAAIP,GAAQE,GAA7C,CACE,SAAAD,GACH,CAEJ,CAEA,IAAOO,EAAQX,GCjBf,OAAOY,OAAoB,+BAWvB,cAAAC,OAAA,oBAFJ,SAASC,GAAqBC,EAAiE,CAAjE,IAAAC,EAAAD,EAAE,UAAAE,CAZhC,EAY8BD,EAAeE,EAAAC,EAAfH,EAAe,CAAb,aAC9B,OACEH,GAACO,GAAAC,EAAAC,EAAA,CAAe,UAAWC,GAAkBL,GAA5C,CACE,SAAAD,GACH,CAEJ,CAEA,IAAOO,GAAQV,GChBf,OAAOW,OAAsB,iCAaR,cAAAC,EAIjB,QAAAC,OAJiB,oBAHrB,SAASC,GAAUC,EAKA,CALA,IAAAC,EAAAD,EACjB,UAAAE,EACA,YAAAC,EACA,iBAAAC,EAAmBP,EAACQ,GAAA,EAAiB,CAjBvC,EAcmBJ,EAIdK,EAAAC,EAJcN,EAId,CAHH,WACA,cACA,qBAGA,OACEH,GAACU,EAAAC,EAAAC,EAAA,CAAkB,iBAAkBN,GAAsBE,GAA1D,CACC,UAAAT,EAACc,EAAA,EAAY,EACbd,EAACe,EAAA,CAAc,YAAaT,EAAc,SAAAD,EAAS,IACrD,CAEJ,CAEA,IAAOW,GAAQd,GC1Bf,OAAOe,OAAsB,iCAC7B,OAAOC,OAA4B,uCACnC,OAAOC,OAAS,oBAChB,OAAOC,OAAW,sBAClB,OAAS,YAAAC,OAAgB,QACzB,OAAS,QAAAC,OAAY,mBAiBjB,mBAAAC,GACE,OAAAC,EADF,QAAAC,OAAA,oBAHJ,SAASC,GAAiB,CAAE,SAAAC,EAAU,SAAAC,CAAS,EAA0B,CACvE,GAAM,CAACC,EAAOC,CAAQ,EAAIC,GAAiB,EAAE,EAC7C,OACEN,GAAAF,GAAA,CACE,UAAAC,EAACQ,GAAA,CAAI,GAAI,CAAE,cAAe,CAAE,EAAI,SAAAL,EAAS,EACzCH,EAACS,GAAA,CAAM,GAAI,CAAE,SAAU,QAAS,OAAQ,EAAG,KAAM,EAAG,MAAO,CAAE,EAC3D,SAAAT,EAACU,GAAA,CACC,WAAU,GACV,MAAOL,EACP,SAAU,CAACM,EAAGN,IAAU,CACtBC,EAASD,CAAK,CAChB,EAEC,SAAAD,EAAS,IAAKQ,GACNZ,EAACa,GAAAC,EAAAC,EAAA,GAA4CH,GAA5C,CAAkD,UAAWI,KAAjCJ,EAAK,KAAkC,CAC5E,EACH,EACF,GACF,CAEJ,CAEA,IAAOK,GAAQf,GCvCf,OAAS,YAAAgB,OAAgB,sBACzB,OAAOC,OAAqB,kCAC5B,OAAOC,OAAsB,mCAC7B,OAAOC,OAAc,2BACrB,OAAOC,OAAe,uBACtB,OAAOC,OAAS,oBAChB,OAAOC,OAAiB,4BACxB,OAAOC,OAAa,wBACpB,OAAOC,OAAe,uBACtB,OAAOC,OAAgB,2BACvB,OAAOC,OAAU,qBACjB,OAAOC,OAAc,yBACrB,OAAOC,OAAoB,+BAC3B,OAAOC,OAAkB,6BACzB,OAAOC,OAAkB,6BACzB,OAAS,UAAAC,EAAQ,YAAAC,OAAgB,uBACjC,OAAOC,OAAa,wBACpB,OAAOC,MAAgB,2BACvB,OAAS,YAAAC,GAAU,YAAAC,OAAgB,QACnC,OAAS,QAAAC,GAAM,eAAAC,OAAmB,mBAyI5B,cAAAC,EAEE,QAAAC,MAFF,oBAvIN,IAAMC,EAAc,IAEpB,SAASC,GAAYC,EAAyB,CAC5C,MAAO,CACL,MAAOF,EACP,WAAYE,EAAM,YAAY,OAAO,QAAS,CAC5C,OAAQA,EAAM,YAAY,OAAO,MACjC,SAAUA,EAAM,YAAY,SAAS,cACvC,CAAC,EACD,UAAW,QACb,CACF,CAEA,SAASC,GAAYD,EAAyB,CAC5C,MAAO,CACL,WAAYA,EAAM,YAAY,OAAO,QAAS,CAC5C,OAAQA,EAAM,YAAY,OAAO,MACjC,SAAUA,EAAM,YAAY,SAAS,aACvC,CAAC,EACD,UAAW,SACX,MAAO,QAAQA,EAAM,QAAQ,CAAC,CAAC,UAC/B,CAACA,EAAM,YAAY,GAAG,IAAI,CAAC,EAAG,CAC5B,MAAO,QAAQA,EAAM,QAAQ,CAAC,CAAC,SACjC,CACF,CACF,CAEA,IAAME,GAAeC,EAAO,KAAK,EAAE,CAAC,CAAE,MAAAH,CAAM,IACnCI,EAAA,CACL,QAAS,OACT,WAAY,SACZ,eAAgB,WAChB,QAASJ,EAAM,QAAQ,EAAG,CAAC,GAExBA,EAAM,OAAO,QAEnB,EAMKK,GAASF,EAAOG,GAAW,CAC/B,kBAAoBC,GACXA,IAAS,MAEpB,CAAC,EAAe,CAAC,CAAE,MAAAP,CAAM,KAChB,CACL,OAAQA,EAAM,OAAO,OAAS,EAC9B,WAAYA,EAAM,YAAY,OAAO,CAAC,QAAS,QAAQ,EAAG,CACxD,OAAQA,EAAM,YAAY,OAAO,MACjC,SAAUA,EAAM,YAAY,SAAS,aACvC,CAAC,EACD,SAAU,CACR,CACE,MAAO,CAAC,CAAE,KAAAQ,CAAK,IACNA,EAET,MAAO,CACL,WAAYV,EACZ,MAAO,eAAeA,CAAW,MACjC,WAAYE,EAAM,YAAY,OAAO,CAAC,QAAS,QAAQ,EAAG,CACxD,OAAQA,EAAM,YAAY,OAAO,MACjC,SAAUA,EAAM,YAAY,SAAS,cACvC,CAAC,CACH,CACF,CACF,CACF,EACD,EAEKS,GAASN,EAAOO,GAAW,CAC/B,kBAAoBH,GACXA,IAAS,MAEpB,CAAC,EAAE,CAAC,CAAE,MAAAP,CAAM,KACH,CACL,MAAOF,EACP,WAAY,EACZ,WAAY,SACZ,UAAW,aACX,SAAU,CACR,CACE,MAAO,CAAC,CAAE,KAAAU,CAAK,IACNA,EAET,MAAOG,EAAAP,EAAA,GACFL,GAAYC,CAAK,GADf,CAEL,qBAAsBD,GAAYC,CAAK,CACzC,EACF,EACA,CACE,MAAO,CAAC,CAAE,KAAAQ,CAAK,IACN,CAACA,EAEV,MAAOG,EAAAP,EAAA,GACFH,GAAYD,CAAK,GADf,CAEL,qBAAsBC,GAAYD,CAAK,CACzC,EACF,CACF,CACF,EACD,EAkBD,SAASY,GAAiB,CAAE,MAAAC,EAAO,SAAAC,EAAU,SAAAC,EAAU,eAAAC,CAAe,EAA0B,CAC9F,IAAMhB,EAAQiB,GAAS,EACjB,CAACT,EAAMU,CAAO,EAAIC,GAAS,EAAI,EAC/BC,EAAWC,GAAY,EAE7B,SAASC,GAAmB,CAC1BJ,EAAQ,EAAI,CACd,CAEA,SAASK,GAAoB,CAC3BL,EAAQ,EAAK,CACf,CAEA,OACErB,EAAC2B,GAAA,CAAI,GAAI,CAAE,QAAS,MAAO,EACzB,UAAA5B,EAAC6B,GAAA,EAAY,EACb7B,EAACS,GAAA,CAAO,SAAS,QAAQ,KAAMG,EAC7B,SAAAX,EAAC6B,GAAA,CACC,UAAA9B,EAAC+B,GAAA,CACC,MAAM,UACN,aAAW,cACX,QAASL,EACT,KAAK,QACL,GAAI,CACF,CACE,YAAa,CACf,EACAd,GAAQ,CAAE,QAAS,MAAO,CAC5B,EAEA,SAAAZ,EAACgC,GAAA,EAAS,EACZ,EACAhC,EAACiC,EAAA,CAAW,QAAQ,KAAK,OAAM,GAAC,UAAU,MACvC,SAAAhB,EACH,EACCG,GACH,EACF,EACAnB,EAACY,GAAA,CAAO,QAAQ,YAAY,KAAMD,EAChC,UAAAZ,EAACM,GAAA,CACC,SAAAN,EAAC+B,GAAA,CAAW,QAASJ,EAClB,SAAAvB,EAAM,YAAc,MAAQJ,EAACkC,GAAA,EAAiB,EAAKlC,EAACmC,GAAA,EAAgB,EACvE,EACF,EACAnC,EAACoC,GAAA,EAAQ,EACRlB,EAAS,IAAKmB,GAEXpC,EAACqC,GAAA,CACC,UAAArC,EAACsC,GAAA,CACC,UAAAvC,EAACiC,EAAA,CAAW,QAASrB,EAAO,KAAO,KAAM,YAAaA,EAAO,EAAI,EAC9D,SAAAA,EAAOyB,EAAK,SAAWG,GAASH,EAAK,SAAU,CAAC,EACnD,EACCA,EAAK,QAAQ,IAAKI,GAEfzC,EAAC0C,GAAA,CAAyB,eAAc,GAAC,GAAI,CAAE,QAAS,OAAQ,EAC9D,SAAAzC,EAAC0C,GAAA,CACC,GAAI,CACF,CACE,UAAW,GACX,GAAI,GACN,EACA/B,EACI,CACE,eAAgB,SAClB,EACA,CACE,eAAgB,QAClB,CACN,EACA,UAAWgC,GACX,GAAIH,EAAO,GACX,SAAUjB,EAAS,WAAaiB,EAAO,GAEvC,UAAAzC,EAAC6C,GAAA,CACC,GAAI,CACF,CACE,SAAU,EACV,eAAgB,QAClB,EACAjC,EACI,CACE,GAAI,CACN,EACA,CACE,GAAI,MACN,CACN,EAEC,SAAA6B,EAAO,KACNA,EAAO,KACJ7B,EAED,KADFZ,EAACiC,EAAA,CAAY,SAAAO,GAASC,EAAO,MAAO,CAAC,EAAE,EAE3C,EACAzC,EAAC8C,GAAA,CACC,QAASL,EAAO,MAChB,GAAI,CACF7B,EACI,CACE,QAAS,CACX,EACA,CACE,QAAS,CACX,CACN,EACF,GACF,GApDa6B,EAAO,EAqDtB,CAEH,GACH,EACAzC,EAACoC,GAAA,EAAQ,IAhEIC,EAAK,QAiEpB,CAEH,GACH,EACApC,EAAC2B,GAAA,CAAI,UAAU,OAAO,GAAI,CAAE,SAAU,EAAG,EAAG,CAAE,EAC5C,UAAA5B,EAACM,GAAA,EAAa,EACba,GACH,GACF,CAEJ,CAEA,IAAO4B,GAAQ/B,GC3Qf,OAAOgC,OAAgB,2BAQnB,mBAAAC,GAGM,OAAAC,OAHN,oBAFJ,SAASC,GAAYC,EAAoD,CAApD,IAAAC,EAAAD,EAAE,MAAAE,EAAM,GAAAC,CAR7B,EAQqBF,EAAeG,EAAAC,EAAfJ,EAAe,CAAb,OAAM,OAC3B,OACEH,GAAAD,GAAA,CACG,SAAAK,EAAK,MAAM;AAAA,CAAI,EAAE,IAAI,CAACI,EAAMC,IAEzBT,GAACU,GAAAC,EAAAC,EAAA,CAAuB,GAAIA,EAAA,CAAE,OAAQ,GAAMP,IAAUC,GAArD,CACE,SAAAE,IADcC,CAEjB,CAEH,EACH,CAEJ,CAEA,IAAOI,GAAQZ,GCpBf,OAAOa,MAAS,oBAChB,OAAOC,OAAgB,2BACvB,OAAS,eAAAC,OAAmB,cAC5B,OAAS,cAAAC,GAAY,aAAAC,GAAW,eAAAC,GAAa,gBAAAC,OAAoB,aAyCzD,cAAAC,EAYA,QAAAC,OAZA,oBA5BR,SAASC,GAAgB,CACvB,KAAAC,EACA,MAAAC,EACA,cAAAC,EACA,SAAAC,EACA,iBAAAC,EACA,SAAAC,CACF,EAAyB,CACvB,GAAM,CAAE,KAAAC,CAAK,EAAIC,EAAQ,EACnBC,EAAuC,CAC3C,gBAAiBF,IAAS,OAAS,QAAU,QAC7C,OAAQ,GACR,aAAc,EACd,QAAS,EACT,YAAa,UACf,EACMG,EAAmBP,EACrBQ,IAAA,GAAKF,GAAyBN,GAC9BQ,EAAA,GAAKF,GACT,OACEX,EAACc,EAAA,CAAI,GAAI,CAAE,aAAc,EAAG,OAAQ,GAAK,QAAS,CAAE,EAClD,SAAAb,GAACc,GAAA,CACC,KAAMC,GAAYb,CAAI,EACtB,MAAOC,EACP,SAAUE,EACV,iBAAkBC,EAClB,SAAUC,EAEV,UAAAR,EAACiB,GAAA,CAAW,QAAQ,KAAK,gBAAI,EAC7BjB,EAACc,EAAA,CACC,GAAI,CACF,OAAQ,GACR,aAAc,GACd,YAAa,UACf,EAEA,SAAAd,EAACkB,GAAA,EAAW,EACd,EACAlB,EAAC,OAAG,EACJA,EAACiB,GAAA,CAAW,QAAQ,KAAK,kBAAM,EAC/BhB,GAACa,EAAA,CAAI,GAAIF,EACP,UAAAZ,EAACmB,GAAA,EAAY,EACbnB,EAACoB,GAAA,EAAU,GACb,GACF,EACF,CAEJ,CAEA,IAAOC,GAAQnB,GCnEf,OAAS,aAAAoB,OAAiB,sBAC1B,OAAOC,OAAc,yBACrB,OAAOC,OAAe,0BACtB,OAAOC,OAAc,yBAYT,cAAAC,MAAA,oBANZ,SAASC,GAAY,CAAE,QAAAC,CAAQ,EAAqB,CAClD,OACEF,EAACD,GAAA,CACE,SAAAH,GAAWO,GAERH,EAACF,GAAA,CACC,SAAAE,EAACH,GAAA,EAAS,GADIM,CAEhB,EAEDD,CAAO,EACZ,CAEJ,CAEA,IAAOE,GAAQH,GCrBf,OAAOI,OAAY,uBACnB,OAAS,kBAAAC,OAAsB,kBAa3B,cAAAC,OAAA,oBANJ,SAASC,GAAaC,EAA4D,CAA5D,IAAAC,EAAAD,EAAE,cAAAE,EAAc,MAAAC,CAVtC,EAUsBF,EAA0BG,EAAAC,EAA1BJ,EAA0B,CAAxB,eAAc,UACpC,GAAM,CACJ,UAAW,CAAE,SAAUK,EAAc,QAAAC,EAAS,aAAAC,CAAa,CAC7D,EAAIC,GAAe,EAEnB,OACEX,GAACY,GAAAC,EAAAC,EAAA,CACC,MAAM,UACN,SAAUR,EAAY,UAAaF,GAAgB,CAACK,GAAYD,EAChE,QAASE,EACT,KAAK,SACL,QAAQ,aACJJ,GANL,CAQE,SAAAD,GACH,CAEJ,CAEA,IAAOU,GAAQd,GCzBf,OAAOe,OAAS,oBAChB,OAAS,UAAAC,OAAc,uBACvB,OAAOC,OAAY,uBAgDT,cAAAC,MAAA,oBAvCV,IAAMC,GAAeC,GAAOC,EAAM,EAAE,KAC3B,CACL,QAAS,EACT,qBAAsB,CACpB,aAAc,GACd,sBAAuB,CACrB,QAAS,KACT,SAAU,WACV,IAAK,MACL,UAAW,mBACX,SAAU,GACV,MAAO,GACP,OAAQ,EACV,CACF,CACF,EACD,EAED,SAASC,GAAgBC,EAMA,CANA,IAAAC,EAAAD,EACvB,aAAaE,EACb,kBAAAC,EACA,cAAeC,EACf,oBAAAC,CArCF,EAiCyBJ,EAKpBK,EAAAC,EALoBN,EAKpB,CAJH,cACA,oBACA,gBACA,wBAGA,IAAMO,EAAQ,CACZ,aAAc,MACd,YAAa,QACb,gBAAiB,QACjB,QAAS,OACT,WAAY,SACZ,eAAgB,SAChB,QAAS,GACX,EACMC,EAAoB,CAAE,MAAO,QAAS,SAAU,KAAM,UAAW,IAAK,EAC5E,OACEd,EAACC,GAAAc,EAAA,CACC,YACEf,EAACgB,GAAA,CAAI,GAAIH,EACP,SAAAb,EAACO,EAAA,CAAY,MAAOQ,IAAA,GAAKD,GAAsBN,GAAqB,EACtE,EAEF,KACER,EAACgB,GAAA,CAAI,GAAIH,EACP,SAAAb,EAACS,EAAA,CAAc,MAAOM,IAAA,GAAKD,GAAsBJ,GAAuB,EAC1E,GAEEC,EACN,CAEJ,CAEA,IAAOM,GAAQb,GCjEf,OAAS,eAAAc,GAAa,aAAAC,GAAW,YAAAC,OAAgB,QAEjD,SAASC,GAA0BC,EAA8D,CAC/F,GAAM,CAACC,EAAMC,CAAO,EAAIJ,GAAY,IAAM,CACxC,IAAMG,EAAU,OAAO,SAAS,KAAK,QAAQ,IAAK,EAAE,EACpD,OAAQD,GAAqBC,IAAS,GAAKD,EAArBC,CACxB,CAAC,EACKE,EAAoBP,GAAY,IAAM,CAC1C,IAAMK,EAAU,OAAO,SAAS,KAAK,QAAQ,IAAK,EAAE,EACpDC,EAASF,GAAqBC,IAAS,GAAKD,EAArBC,CAAuC,CAChE,EAAG,CAACC,EAASF,CAAW,CAAC,EAEzBH,GAAU,KACR,OAAO,iBAAiB,aAAcM,CAAiB,EAChD,IAAM,CACX,OAAO,oBAAoB,aAAcA,CAAiB,CAC5D,GACC,CAACA,CAAiB,CAAC,EAEtB,IAAMC,EAAaR,GAChBS,GAA2C,CAC1C,IAAMC,EAAe,OAAOD,GAAY,WAAaA,EAAQJ,CAAI,EAAII,EACjEC,IAAiBL,IACnB,OAAO,SAAS,KAAOK,EAE3B,EACA,CAACL,CAAI,CACP,EAEA,MAAO,CAACA,EAAMG,CAAU,CAC1B,CAEA,IAAOG,GAAQR","names":["ArrowDropDown","ArrowDropUp","Box","ButtonBase","Collapse","useEffect","useState","jsx","jsxs","CollapsableItem","isInitiallyOpen","onOpen","onClose","children","buttonStyles","buttonContents","ButtonComponent","ButtonBase","collapseProps","openIcon","ArrowDropUp","closedIcon","ArrowDropDown","useDefaultStyling","isItemOpen","setIsItemOpen","useState","useEffect","Box","previouslyOpen","__spreadValues","Collapse","__spreadProps","CollapsableItem_default","DarkMode","LightMode","IconButton","Tooltip","CircularProgress","createContext","useContext","jsx","LoaderContext","createContext","useLoader","context","useContext","LoaderProvider","_a","_b","children","loadingComponent","CircularProgress","contextProps","__objRest","__spreadValues","LoaderProvider_default","useRef","Fragment","jsx","LoaderData","children","loadingComponent","onUndefined","showOnError","isLoading","data","defaultLoadingComponent","error","useLoader","warnedOnce","useRef","result","LoaderData_default","Alert","Fragment","jsx","LoaderError","_a","error","errorComponent","useLoader","Alert","LoaderError_default","CssBaseline","createTheme","ThemeProvider","createContext","useContext","useMemo","useState","jsx","jsxs","ModeContext","useMode","ModeProvider","children","modeProp","mode","setMode","theme","prev","ModeProvider_default","createContext","useContext","useEffect","useState","jsx","ScreenSizeContext","useScreenSize","ScreenSizeProvider","children","largeScreenWidth","largeScreenHeight","windowWidth","setWindowWidth","windowHeight","setWindowHeight","largeScreenCondition","width","height","isLargeScreen","setIsLargeScreen","setDimensions","ScreenSizeProvider_default","wait","Alert","Snackbar","createContext","useContext","useState","jsx","jsxs","SnackbarContext","createContext","useSnackbar","context","useContext","SnackbarProvider","children","autoHideDuration","open","setOpen","useState","autoHideDurationState","setAutoHideDurationState","message","setMessage","severity","setSeverity","addSnackbar","duration","handleClose","__async","wait","Snackbar","Alert","SnackbarProvider_default","jsx","DarkModeToggle","mode","toggleMode","useMode","Tooltip","IconButton","LightMode","DarkMode","DarkModeToggle_default","ArrowDropDown","ArrowDropUp","Box","MUIButton","Menu","useEffect","useMemo","useState","jsx","jsxs","DropdownMenu","children","Button","MUIButton","buttonChildren","incomingButtonProps","isOpenIcon","ArrowDropUp","isClosedIcon","ArrowDropDown","onOpen","onClose","anchorElement","setAnchorElement","useState","isDropdownOpen","useMemo","buttonProps","__spreadProps","__spreadValues","event","useEffect","Box","Menu","DropdownMenu_default","MUILink","jsx","ExternalLink","_a","_b","href","children","linkProps","__objRest","MUILink","__spreadProps","__spreadValues","ExternalLink_default","CloudUploadIcon","Button","styled","useState","jsx","jsxs","FileType","VisuallyHiddenInput","styled","Dropzone","theme","$dragging","FileInput","_a","_b","onFileInput","label","multiple","accept","useDropzone","buttonProps","__objRest","isDragging","setIsDragging","useState","fileInputButton","Button","__spreadProps","__spreadValues","event","CloudUploadIcon","input","filesArray","FileInput_default","DeleteIcon","Box","IconButton","List","ListItem","ListItemText","jsx","jsxs","FileInputList","_a","_b","files","setFiles","fileInputProps","__objRest","onFileInput","newFiles","oldFiles","newFileInputProps","__spreadProps","__spreadValues","Box","FileInput_default","List","file","ListItem","IconButton","fileToDelete","DeleteIcon","ListItemText","FileInputList_default","Box","Popover","useId","useState","jsx","jsxs","IconWithPopover","Icon","onOpen","onClose","iconProps","children","anchorElement","setAnchorElement","useState","isPopoverOpen","popoverId","useId","handleOpen","event","handleClose","Box","__spreadValues","Popover","IconWithPopover_default","MUILink","ReactDOMLink","jsx","InternalLink","_a","_b","to","children","linkProps","__objRest","MUILink","__spreadProps","__spreadValues","ReactDOMLink","InternalLink_default","ListItemButton","jsx","ListItemInternalLink","_a","_b","children","listItemButtonProps","__objRest","ListItemButton","__spreadProps","__spreadValues","InternalLink_default","ListItemInternalLink_default","CircularProgress","jsx","jsxs","Loader","_a","_b","children","onUndefined","loadingComponent","CircularProgress","loaderProviderProps","__objRest","LoaderProvider_default","__spreadProps","__spreadValues","LoaderError_default","LoaderData_default","Loader_default","BottomNavigation","BottomNavigationAction","Box","Paper","useState","Link","Fragment","jsx","jsxs","NavigationBottom","children","navItems","value","setValue","useState","Box","Paper","BottomNavigation","_","item","BottomNavigationAction","__spreadProps","__spreadValues","Link","NavigationBottom_default","truncate","ChevronLeftIcon","ChevronRightIcon","MenuIcon","MuiAppBar","Box","CssBaseline","Divider","MuiDrawer","IconButton","List","ListItem","ListItemButton","ListItemIcon","ListItemText","styled","useTheme","Toolbar","Typography","Fragment","useState","Link","useLocation","jsx","jsxs","drawerWidth","openedMixin","theme","closedMixin","DrawerHeader","styled","__spreadValues","AppBar","MuiAppBar","prop","open","Drawer","MuiDrawer","__spreadProps","NavigationDrawer","title","navItems","children","headerElements","useTheme","setOpen","useState","location","useLocation","handleDrawerOpen","handleDrawerClose","Box","CssBaseline","Toolbar","IconButton","MenuIcon","Typography","ChevronRightIcon","ChevronLeftIcon","Divider","item","Fragment","List","truncate","option","ListItem","ListItemButton","Link","ListItemIcon","ListItemText","NavigationDrawer_default","Typography","Fragment","jsx","PopoverText","_a","_b","text","sx","typographyProps","__objRest","line","index","Typography","__spreadProps","__spreadValues","PopoverText_default","Box","Typography","stripIndent","LiveEditor","LiveError","LivePreview","LiveProvider","jsx","jsxs","ReactPlayground","code","scope","previewStyles","noInline","enableTypeScript","language","mode","useMode","defaultPreviewStyles","allPreviewStyles","__spreadValues","Box","LiveProvider","stripIndent","Typography","LiveEditor","LivePreview","LiveError","ReactPlayground_default","fillArray","Skeleton","TableCell","TableRow","jsx","SkeletonRow","columns","index","SkeletonRow_default","Button","useFormContext","jsx","SubmitButton","_a","_b","disableClean","label","buttonProps","__objRest","formDisabled","isDirty","isSubmitting","useFormContext","Button","__spreadProps","__spreadValues","SubmitButton_default","Box","styled","Switch","jsx","StyledSwitch","styled","Switch","SwitchWithIcons","_a","_b","CheckedIcon","checkedIconStyles","UncheckedIcon","uncheckedIconStyles","switchProps","__objRest","boxSx","defaultIconStyles","__spreadValues","Box","SwitchWithIcons_default","useCallback","useEffect","useState","useHash","initialHash","hash","setHash","hashChangeHandler","updateHash","newHash","resolvedHash","useHash_default"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@alextheman/components",
3
- "version": "5.0.2",
3
+ "version": "5.1.1",
4
4
  "description": "A package containing common React components used across my projects",
5
5
  "license": "ISC",
6
6
  "author": "alextheman",