@alextheman/components 4.0.1 → 4.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.cjs +2 -2
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +14 -1
- package/dist/index.d.ts +14 -1
- package/dist/index.js +2 -2
- package/dist/index.js.map +1 -1
- package/package.json +21 -12
package/dist/index.cjs
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
"use strict";var To=Object.create;var R=Object.defineProperty,Do=Object.defineProperties,No=Object.getOwnPropertyDescriptor,Ro=Object.getOwnPropertyDescriptors,Eo=Object.getOwnPropertyNames,W=Object.getOwnPropertySymbols,Fo=Object.getPrototypeOf,q=Object.prototype.hasOwnProperty,se=Object.prototype.propertyIsEnumerable;var pe=(e,o,t)=>o in e?R(e,o,{enumerable:!0,configurable:!0,writable:!0,value:t}):e[o]=t,p=(e,o)=>{for(var t in o||(o={}))q.call(o,t)&&pe(e,t,o[t]);if(W)for(var t of W(o))se.call(o,t)&&pe(e,t,o[t]);return e},f=(e,o)=>Do(e,Ro(o));var y=(e,o)=>{var t={};for(var n in e)q.call(e,n)&&o.indexOf(n)<0&&(t[n]=e[n]);if(e!=null&&W)for(var n of W(e))o.indexOf(n)<0&&se.call(e,n)&&(t[n]=e[n]);return t};var Oo=(e,o)=>{for(var t in o)R(e,t,{get:o[t],enumerable:!0})},me=(e,o,t,n)=>{if(o&&typeof o=="object"||typeof o=="function")for(let i of Eo(o))!q.call(e,i)&&i!==t&&R(e,i,{get:()=>o[i],enumerable:!(n=No(o,i))||n.enumerable});return e};var r=(e,o,t)=>(t=e!=null?To(Fo(e)):{},me(o||!e||!e.__esModule?R(t,"default",{value:e,enumerable:!0}):t,e)),Ao=e=>me(R({},"__esModule",{value:!0}),e);var it={};Oo(it,{CollapsableItem:()=>fe,DarkModeToggle:()=>we,DropdownMenu:()=>Le,ExternalLink:()=>Be,FileInput:()=>X,FileInputList:()=>He,FileType:()=>Re,IconWithPopover:()=>Ge,InternalLink:()=>$,ListItemInternalLink:()=>_e,ModeContext:()=>L,ModeProvider:()=>xe,NavigationBottom:()=>to,NavigationDrawer:()=>vo,PopoverText:()=>Po,ReactPlayground:()=>Lo,ScreenSizeContext:()=>ne,ScreenSizeProvider:()=>wo,SwitchWithIcons:()=>Mo});module.exports=Ao(it);var le=r(require("@mui/icons-material/ArrowDropDown"),1),de=r(require("@mui/icons-material/ArrowDropUp"),1),ce=r(require("@mui/material/Box"),1),z=r(require("@mui/material/ButtonBase"),1),ue=r(require("@mui/material/Collapse"),1),H=require("react");var k=require("react/jsx-runtime");function Wo({isInitiallyOpen:e,onOpen:o,onClose:t,children:n,buttonStyles:i,buttonContents:a,buttonComponent:s=z.default,collapseProps:m,openIcon:u=(0,k.jsx)(de.default,{}),closedIcon:x=(0,k.jsx)(le.default,{}),useDefaultStyling:l=s===z.default}){let[c,g]=(0,H.useState)(!!e);return(0,H.useEffect)(()=>{c&&o?o():!c&&t&&t()},[c]),(0,k.jsxs)(ce.default,{children:[(0,k.jsxs)(s,{onClick:()=>{g(v=>!v)},sx:l?p({width:"100%",display:"flex",alignItems:"center",justifyContent:"center",paddingY:1.5,paddingX:2,textAlign:"center","&:hover":s===z.default?{backgroundColor:"action.hover"}:null},i):i,"aria-expanded":c,children:[a,c?u:x]}),(0,k.jsx)(ue.default,f(p({in:c},m),{children:n}))]})}var fe=Wo;var ye=r(require("@mui/icons-material/DarkMode"),1),he=r(require("@mui/icons-material/LightMode"),1),ve=r(require("@mui/material/IconButton"),1),Ie=r(require("@mui/material/Tooltip"),1),Pe=require("react");var ge=r(require("@mui/material/CssBaseline"),1),V=require("@mui/material/styles"),C=require("react"),E=require("react/jsx-runtime"),L=(0,C.createContext)({toggleMode:()=>{},mode:"dark"});function zo({children:e,mode:o="dark"}){let[t,n]=(0,C.useState)(o),i=(0,C.useMemo)(()=>(0,V.createTheme)({palette:{mode:t}}),[t]);return(0,E.jsx)(L.Provider,{value:{mode:t,toggleMode:()=>{n(a=>a==="light"?"dark":"light")}},children:(0,E.jsxs)(V.ThemeProvider,{theme:i,children:[(0,E.jsx)(ge.default,{}),e]})})}var xe=zo;var F=require("react/jsx-runtime");function Ho(){let{mode:e,toggleMode:o}=(0,Pe.useContext)(L);return(0,F.jsx)(Ie.default,{title:`Enable ${e==="dark"?"light":"dark"} mode`,children:(0,F.jsx)(ve.default,{sx:{marginLeft:"auto"},onClick:o,"aria-label":`Enable ${e==="dark"?"light":"dark"} mode`,children:e==="dark"?(0,F.jsx)(he.default,{}):(0,F.jsx)(ye.default,{})})})}var we=Ho;var be=r(require("@mui/icons-material/ArrowDropDown"),1),Se=r(require("@mui/icons-material/ArrowDropUp"),1),Q=r(require("@mui/material/Box"),1),Z=r(require("@mui/material/Button"),1),ke=r(require("@mui/material/Menu"),1),B=require("react");var b=require("react/jsx-runtime");function Vo({children:e,button:o=Z.default,buttonChildren:t="Menu",buttonProps:n,isOpenIcon:i=(0,b.jsx)(Se.default,{}),isClosedIcon:a=(0,b.jsx)(be.default,{}),onOpen:s,onClose:m}){let[u,x]=(0,B.useState)(null),l=(0,B.useMemo)(()=>!!u,[u]),c=f(p({},n),{onClick:g=>{x(g.currentTarget)},"aria-controls":l?"dropdown-menu":void 0,"aria-haspopup":"true","aria-expanded":l});return o===Z.default&&(c.endIcon=l?i:a),(0,B.useEffect)(()=>{l&&s?s():!l&&m&&m()},[l,s,m]),(0,b.jsxs)(Q.default,{children:[(0,b.jsx)(o,f(p({},c),{children:t})),(0,b.jsx)(ke.default,{id:"dropdown-menu",anchorEl:u,open:l,onClose:()=>{x(null)},children:typeof e=="function"?(0,b.jsx)(Q.default,{children:e(()=>{x(null)})}):e})]})}var Le=Vo;var Ce=r(require("@mui/material/Link"),1);var Me=require("react/jsx-runtime");function Xo(a){var s=a,{href:e,children:o,target:t="_blank",rel:n="noopener noreferrer"}=s,i=y(s,["href","children","target","rel"]);return(0,Me.jsx)(Ce.default,f(p({component:"a",href:e,target:t,rel:n},i),{children:o}))}var Be=Xo;var Te=r(require("@mui/icons-material/CloudUpload"),1),De=r(require("@mui/material/Button"),1),j=require("@mui/material/styles"),Ne=require("react");var M=require("react/jsx-runtime"),Re={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"},Go=(0,j.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}),$o=(0,j.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 Uo(s){var m=s,{onFileInput:e,label:o="Upload files",multiple:t,accept:n,useDropzone:i}=m,a=y(m,["onFileInput","label","multiple","accept","useDropzone"]);var c;let[u,x]=(0,Ne.useState)(!1),l=(0,M.jsxs)(De.default,f(p({variant:"contained",component:"label","aria-label":"File upload button",onKeyDown:g=>{var v;(g.key==="Enter"||g.key===" ")&&(g.preventDefault(),(v=document.getElementById("file-input"))==null||v.click())}},a),{startIcon:(c=a.startIcon)!=null?c:(0,M.jsx)(Te.default,{}),children:[o,(0,M.jsx)(Go,{id:"file-input",type:"file",onChange:g=>{var N;let v=g.target;e(Array.from((N=v.files)!=null?N:[])),v.value=""},multiple:t,accept:n==null?void 0:n.join(","),disabled:a.disabled})]}));return i?(0,M.jsx)($o,{$dragging:u,onDragOver:g=>{g.preventDefault(),!a.disabled&&x(!0)},onDragLeave:g=>{g.preventDefault(),x(!1)},onDrop:g=>{var N;if(g.preventDefault(),x(!1),a.disabled)return;let v=Array.from((N=g.dataTransfer.files)!=null?N:[]);e(v)},children:l}):l}var X=Uo;var Ee=r(require("@mui/icons-material/Delete"),1),Fe=r(require("@mui/material/Box"),1),Oe=r(require("@mui/material/IconButton"),1),Ae=r(require("@mui/material/List"),1),We=r(require("@mui/material/ListItem"),1),ze=r(require("@mui/material/ListItemText"),1);var I=require("react/jsx-runtime");function Jo(n){var i=n,{files:e,setFiles:o}=i,t=y(i,["files","setFiles"]);function a(m){o(u=>[...u,...m])}let s=f(p({},t),{onFileInput:a});return(s==null?void 0:s.multiple)===void 0&&(s.multiple=!0),(0,I.jsxs)(Fe.default,{children:[(0,I.jsx)(X,p({},s)),(0,I.jsx)(Ae.default,{children:e.map(m=>(0,I.jsx)(We.default,{secondaryAction:(0,I.jsx)(Oe.default,{"aria-label":"Delete",edge:"end",onClick:()=>{o(u=>u.filter(x=>x!==m))},children:(0,I.jsx)(Ee.default,{})}),children:(0,I.jsx)(ze.default,{primary:m.name})},m.name))})]})}var He=Jo;var Ve=r(require("@mui/material/Box"),1),Xe=r(require("@mui/material/Popover"),1),G=require("react");var O=require("react/jsx-runtime");function Yo({icon:e,onOpen:o,onClose:t,iconProps:n,children:i}){let[a,s]=(0,G.useState)(null),m=!!a,u=(0,G.useId)();function x(c){s(c.currentTarget),o&&o()}function l(){s(null),t&&t()}return(0,O.jsxs)(Ve.default,{children:[(0,O.jsx)(e,p({"aria-owns":m?u:void 0,"aria-haspopup":"true",onMouseEnter:x,onMouseLeave:l},n)),(0,O.jsx)(Xe.default,{id:u,sx:{pointerEvents:"none"},open:m,anchorEl:a,anchorOrigin:{vertical:"bottom",horizontal:"left"},transformOrigin:{vertical:"top",horizontal:"left"},onClose:l,disableRestoreFocus:!0,children:i})]})}var Ge=Yo;var $e=r(require("@mui/material/Link"),1),Ue=require("react-router-dom");var Je=require("react/jsx-runtime");function _o(n){var i=n,{to:e,children:o}=i,t=y(i,["to","children"]);return(0,Je.jsx)($e.default,f(p({component:Ue.Link,to:e},t),{children:o}))}var $=_o;var Ye=r(require("@mui/material/ListItemButton"),1);var Ke=require("react/jsx-runtime");function Ko(t){var n=t,{children:e}=n,o=y(n,["children"]);return(0,Ke.jsx)(Ye.default,f(p({component:$},o),{children:e}))}var _e=Ko;var qe=r(require("@mui/material/BottomNavigation"),1),Qe=r(require("@mui/material/BottomNavigationAction"),1),Ze=r(require("@mui/material/Box"),1),je=r(require("@mui/material/Paper"),1),eo=require("react"),oo=require("react-router-dom");var P=require("react/jsx-runtime");function qo({children:e,navItems:o}){let[t,n]=(0,eo.useState)("");return(0,P.jsxs)(P.Fragment,{children:[(0,P.jsx)(Ze.default,{sx:{paddingBottom:7},children:e}),(0,P.jsx)(je.default,{sx:{position:"fixed",bottom:0,left:0,right:0},children:(0,P.jsx)(qe.default,{showLabels:!0,value:t,onChange:(i,a)=>{n(a)},children:o.map(i=>(0,P.jsx)(Qe.default,f(p({},i),{component:oo.Link}),i.value))})})]})}var to=qo;var ee=require("@alextheman/utility"),ao=r(require("@mui/icons-material/ChevronLeft"),1),po=r(require("@mui/icons-material/ChevronRight"),1),so=r(require("@mui/icons-material/Menu"),1),mo=r(require("@mui/material/AppBar"),1),oe=r(require("@mui/material/Box"),1),lo=r(require("@mui/material/CssBaseline"),1),te=r(require("@mui/material/Divider"),1),co=r(require("@mui/material/Drawer"),1),re=r(require("@mui/material/IconButton"),1),uo=r(require("@mui/material/List"),1),fo=r(require("@mui/material/ListItem"),1),go=r(require("@mui/material/ListItemButton"),1),xo=r(require("@mui/material/ListItemIcon"),1),yo=r(require("@mui/material/ListItemText"),1),T=require("@mui/material/styles"),ho=r(require("@mui/material/Toolbar"),1),U=r(require("@mui/material/Typography"),1),Y=require("react"),_=require("react-router-dom");var d=require("react/jsx-runtime"),J=240;function ro(e){return{width:J,transition:e.transitions.create("width",{easing:e.transitions.easing.sharp,duration:e.transitions.duration.enteringScreen}),overflowX:"hidden"}}function no(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 io=(0,T.styled)("div")(({theme:e})=>p({display:"flex",alignItems:"center",justifyContent:"flex-end",padding:e.spacing(0,1)},e.mixins.toolbar)),Qo=(0,T.styled)(mo.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:J,width:`calc(100% - ${J}px)`,transition:e.transitions.create(["width","margin"],{easing:e.transitions.easing.sharp,duration:e.transitions.duration.enteringScreen})}}]})),Zo=(0,T.styled)(co.default,{shouldForwardProp:e=>e!=="open"})(({theme:e})=>({width:J,flexShrink:0,whiteSpace:"nowrap",boxSizing:"border-box",variants:[{props:({open:o})=>o,style:f(p({},ro(e)),{"& .MuiDrawer-paper":ro(e)})},{props:({open:o})=>!o,style:f(p({},no(e)),{"& .MuiDrawer-paper":no(e)})}]}));function jo({title:e,navItems:o,children:t,headerElements:n}){let i=(0,T.useTheme)(),[a,s]=(0,Y.useState)(!0),m=(0,_.useLocation)();function u(){s(!0)}function x(){s(!1)}return(0,d.jsxs)(oe.default,{sx:{display:"flex"},children:[(0,d.jsx)(lo.default,{}),(0,d.jsx)(Qo,{position:"fixed",open:a,children:(0,d.jsxs)(ho.default,{children:[(0,d.jsx)(re.default,{color:"inherit","aria-label":"open drawer",onClick:u,edge:"start",sx:[{marginRight:5},a&&{display:"none"}],children:(0,d.jsx)(so.default,{})}),(0,d.jsx)(U.default,{variant:"h6",noWrap:!0,component:"div",children:e}),n]})}),(0,d.jsxs)(Zo,{variant:"permanent",open:a,children:[(0,d.jsx)(io,{children:(0,d.jsx)(re.default,{onClick:x,children:i.direction==="rtl"?(0,d.jsx)(po.default,{}):(0,d.jsx)(ao.default,{})})}),(0,d.jsx)(te.default,{}),o.map(l=>(0,d.jsxs)(Y.Fragment,{children:[(0,d.jsxs)(uo.default,{children:[(0,d.jsx)(U.default,{variant:a?"h5":"h6",paddingLeft:a?2:1,children:a?l.category:(0,ee.truncate)(l.category,4)}),l.options.map(c=>(0,d.jsx)(fo.default,{disablePadding:!0,sx:{display:"block"},children:(0,d.jsxs)(go.default,{sx:[{minHeight:48,px:2.5},a?{justifyContent:"initial"}:{justifyContent:"center"}],component:_.Link,to:c.to,selected:m.pathname===c.to,children:[(0,d.jsx)(xo.default,{sx:[{minWidth:0,justifyContent:"center"},a?{mr:3}:{mr:"auto"}],children:c.icon?c.icon:a?null:(0,d.jsx)(U.default,{children:(0,ee.truncate)(c.label,4)})}),(0,d.jsx)(yo.default,{primary:c.label,sx:[a?{opacity:1}:{opacity:0}]})]})},c.to))]}),(0,d.jsx)(te.default,{})]},l.category))]}),(0,d.jsxs)(oe.default,{component:"main",sx:{flexGrow:1,p:3},children:[(0,d.jsx)(io,{}),t]})]})}var vo=jo;var Io=r(require("@mui/material/Typography"),1);var A=require("react/jsx-runtime");function et(n){var i=n,{text:e,sx:o}=i,t=y(i,["text","sx"]);return(0,A.jsx)(A.Fragment,{children:e.split(`
|
|
2
|
-
`).map((
|
|
1
|
+
"use strict";var No=Object.create;var E=Object.defineProperty,Ro=Object.defineProperties,Eo=Object.getOwnPropertyDescriptor,Fo=Object.getOwnPropertyDescriptors,Oo=Object.getOwnPropertyNames,W=Object.getOwnPropertySymbols,Ao=Object.getPrototypeOf,j=Object.prototype.hasOwnProperty,le=Object.prototype.propertyIsEnumerable;var me=(e,o,t)=>o in e?E(e,o,{enumerable:!0,configurable:!0,writable:!0,value:t}):e[o]=t,p=(e,o)=>{for(var t in o||(o={}))j.call(o,t)&&me(e,t,o[t]);if(W)for(var t of W(o))le.call(o,t)&&me(e,t,o[t]);return e},f=(e,o)=>Ro(e,Fo(o));var h=(e,o)=>{var t={};for(var i in e)j.call(e,i)&&o.indexOf(i)<0&&(t[i]=e[i]);if(e!=null&&W)for(var i of W(e))o.indexOf(i)<0&&le.call(e,i)&&(t[i]=e[i]);return t};var zo=(e,o)=>{for(var t in o)E(e,t,{get:o[t],enumerable:!0})},ce=(e,o,t,i)=>{if(o&&typeof o=="object"||typeof o=="function")for(let a of Oo(o))!j.call(e,a)&&a!==t&&E(e,a,{get:()=>o[a],enumerable:!(i=Eo(o,a))||i.enumerable});return e};var r=(e,o,t)=>(t=e!=null?No(Ao(e)):{},ce(o||!e||!e.__esModule?E(t,"default",{value:e,enumerable:!0}):t,e)),Wo=e=>ce(E({},"__esModule",{value:!0}),e);var st={};zo(st,{CollapsableItem:()=>xe,DarkModeToggle:()=>ke,DropdownMenu:()=>Te,ExternalLink:()=>Ne,FileInput:()=>U,FileInputList:()=>$e,FileType:()=>Ae,IconWithPopover:()=>Ye,InternalLink:()=>Y,ListItemInternalLink:()=>Ze,ModeContext:()=>G,ModeProvider:()=>ye,NavigationBottom:()=>ao,NavigationDrawer:()=>So,PopoverText:()=>Lo,ReactPlayground:()=>Co,ScreenSizeContext:()=>$,ScreenSizeProvider:()=>Ie,SwitchWithIcons:()=>To,useHash:()=>Do,useMode:()=>B,useScreenSize:()=>ve});module.exports=Wo(st);var de=r(require("@mui/icons-material/ArrowDropDown"),1),ue=r(require("@mui/icons-material/ArrowDropUp"),1),fe=r(require("@mui/material/Box"),1),H=r(require("@mui/material/ButtonBase"),1),ge=r(require("@mui/material/Collapse"),1),V=require("react");var k=require("react/jsx-runtime");function Ho({isInitiallyOpen:e,onOpen:o,onClose:t,children:i,buttonStyles:a,buttonContents:n,buttonComponent:s=H.default,collapseProps:m,openIcon:u=(0,k.jsx)(ue.default,{}),closedIcon:x=(0,k.jsx)(de.default,{}),useDefaultStyling:l=s===H.default}){let[d,g]=(0,V.useState)(!!e);return(0,V.useEffect)(()=>{d&&o?o():!d&&t&&t()},[d]),(0,k.jsxs)(fe.default,{children:[(0,k.jsxs)(s,{onClick:()=>{g(v=>!v)},sx:l?p({width:"100%",display:"flex",alignItems:"center",justifyContent:"center",paddingY:1.5,paddingX:2,textAlign:"center","&:hover":s===H.default?{backgroundColor:"action.hover"}:null},a):a,"aria-expanded":d,children:[n,d?u:x]}),(0,k.jsx)(ge.default,f(p({in:d},m),{children:i}))]})}var xe=Ho;var we=r(require("@mui/icons-material/DarkMode"),1),Se=r(require("@mui/icons-material/LightMode"),1),be=r(require("@mui/material/IconButton"),1),Le=r(require("@mui/material/Tooltip"),1);var he=r(require("@mui/material/CssBaseline"),1),X=require("@mui/material/styles"),S=require("react"),F=require("react/jsx-runtime"),G=(0,S.createContext)({toggleMode:()=>{},mode:"dark"});function B(){return(0,S.useContext)(G)}function Vo({children:e,mode:o="dark"}){let[t,i]=(0,S.useState)(o),a=(0,S.useMemo)(()=>(0,X.createTheme)({palette:{mode:t}}),[t]);return(0,F.jsx)(G.Provider,{value:{mode:t,toggleMode:()=>{i(n=>n==="light"?"dark":"light")}},children:(0,F.jsxs)(X.ThemeProvider,{theme:a,children:[(0,F.jsx)(he.default,{}),e]})})}var ye=Vo;var I=require("react"),Pe=require("react/jsx-runtime"),$=(0,I.createContext)({windowWidth:0,windowHeight:0,isLargeScreen:!1});function ve(){return(0,I.useContext)($)}function Xo({children:e,largeScreenWidth:o,largeScreenHeight:t}){let[i,a]=(0,I.useState)(window.innerWidth),[n,s]=(0,I.useState)(window.innerHeight);function m(l,d,g=669,v=600){return l>g&&d>v}let[u,x]=(0,I.useState)(m(window.innerWidth,window.innerHeight,o,t));return(0,I.useEffect)(()=>{function l(){a(window.innerWidth),s(window.innerHeight)}return l(),window.addEventListener("resize",l),()=>{window.removeEventListener("resize",l)}},[]),(0,I.useEffect)(()=>{x(m(i,n,o,t))},[i,n,o,t]),(0,Pe.jsx)($.Provider,{value:{isLargeScreen:u,windowWidth:i,windowHeight:n},children:e})}var Ie=Xo;var O=require("react/jsx-runtime");function Go(){let{mode:e,toggleMode:o}=B();return(0,O.jsx)(Le.default,{title:`Enable ${e==="dark"?"light":"dark"} mode`,children:(0,O.jsx)(be.default,{sx:{marginLeft:"auto"},onClick:o,"aria-label":`Enable ${e==="dark"?"light":"dark"} mode`,children:e==="dark"?(0,O.jsx)(Se.default,{}):(0,O.jsx)(we.default,{})})})}var ke=Go;var Ce=r(require("@mui/icons-material/ArrowDropDown"),1),Be=r(require("@mui/icons-material/ArrowDropUp"),1),ee=r(require("@mui/material/Box"),1),oe=r(require("@mui/material/Button"),1),Me=r(require("@mui/material/Menu"),1),M=require("react");var b=require("react/jsx-runtime");function $o({children:e,button:o=oe.default,buttonChildren:t="Menu",buttonProps:i,isOpenIcon:a=(0,b.jsx)(Be.default,{}),isClosedIcon:n=(0,b.jsx)(Ce.default,{}),onOpen:s,onClose:m}){let[u,x]=(0,M.useState)(null),l=(0,M.useMemo)(()=>!!u,[u]),d=f(p({},i),{onClick:g=>{x(g.currentTarget)},"aria-controls":l?"dropdown-menu":void 0,"aria-haspopup":"true","aria-expanded":l});return o===oe.default&&(d.endIcon=l?a:n),(0,M.useEffect)(()=>{l&&s?s():!l&&m&&m()},[l,s,m]),(0,b.jsxs)(ee.default,{children:[(0,b.jsx)(o,f(p({},d),{children:t})),(0,b.jsx)(Me.default,{id:"dropdown-menu",anchorEl:u,open:l,onClose:()=>{x(null)},children:typeof e=="function"?(0,b.jsx)(ee.default,{children:e(()=>{x(null)})}):e})]})}var Te=$o;var De=r(require("@mui/material/Link"),1);var Re=require("react/jsx-runtime");function Uo(n){var s=n,{href:e,children:o,target:t="_blank",rel:i="noopener noreferrer"}=s,a=h(s,["href","children","target","rel"]);return(0,Re.jsx)(De.default,f(p({component:"a",href:e,target:t,rel:i},a),{children:o}))}var Ne=Uo;var Ee=r(require("@mui/icons-material/CloudUpload"),1),Fe=r(require("@mui/material/Button"),1),te=require("@mui/material/styles"),Oe=require("react");var T=require("react/jsx-runtime"),Ae={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"},Jo=(0,te.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}),Yo=(0,te.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 _o(s){var m=s,{onFileInput:e,label:o="Upload files",multiple:t,accept:i,useDropzone:a}=m,n=h(m,["onFileInput","label","multiple","accept","useDropzone"]);var d;let[u,x]=(0,Oe.useState)(!1),l=(0,T.jsxs)(Fe.default,f(p({variant:"contained",component:"label","aria-label":"File upload button",onKeyDown:g=>{var v;(g.key==="Enter"||g.key===" ")&&(g.preventDefault(),(v=document.getElementById("file-input"))==null||v.click())}},n),{startIcon:(d=n.startIcon)!=null?d:(0,T.jsx)(Ee.default,{}),children:[o,(0,T.jsx)(Jo,{id:"file-input",type:"file",onChange:g=>{var R;let v=g.target;e(Array.from((R=v.files)!=null?R:[])),v.value=""},multiple:t,accept:i==null?void 0:i.join(","),disabled:n.disabled})]}));return a?(0,T.jsx)(Yo,{$dragging:u,onDragOver:g=>{g.preventDefault(),!n.disabled&&x(!0)},onDragLeave:g=>{g.preventDefault(),x(!1)},onDrop:g=>{var R;if(g.preventDefault(),x(!1),n.disabled)return;let v=Array.from((R=g.dataTransfer.files)!=null?R:[]);e(v)},children:l}):l}var U=_o;var ze=r(require("@mui/icons-material/Delete"),1),We=r(require("@mui/material/Box"),1),He=r(require("@mui/material/IconButton"),1),Ve=r(require("@mui/material/List"),1),Xe=r(require("@mui/material/ListItem"),1),Ge=r(require("@mui/material/ListItemText"),1);var P=require("react/jsx-runtime");function Ko(i){var a=i,{files:e,setFiles:o}=a,t=h(a,["files","setFiles"]);function n(m){o(u=>[...u,...m])}let s=f(p({},t),{onFileInput:n});return(s==null?void 0:s.multiple)===void 0&&(s.multiple=!0),(0,P.jsxs)(We.default,{children:[(0,P.jsx)(U,p({},s)),(0,P.jsx)(Ve.default,{children:e.map(m=>(0,P.jsx)(Xe.default,{secondaryAction:(0,P.jsx)(He.default,{"aria-label":"Delete",edge:"end",onClick:()=>{o(u=>u.filter(x=>x!==m))},children:(0,P.jsx)(ze.default,{})}),children:(0,P.jsx)(Ge.default,{primary:m.name})},m.name))})]})}var $e=Ko;var Ue=r(require("@mui/material/Box"),1),Je=r(require("@mui/material/Popover"),1),J=require("react");var A=require("react/jsx-runtime");function qo({icon:e,onOpen:o,onClose:t,iconProps:i,children:a}){let[n,s]=(0,J.useState)(null),m=!!n,u=(0,J.useId)();function x(d){s(d.currentTarget),o&&o()}function l(){s(null),t&&t()}return(0,A.jsxs)(Ue.default,{children:[(0,A.jsx)(e,p({"aria-owns":m?u:void 0,"aria-haspopup":"true",onMouseEnter:x,onMouseLeave:l},i)),(0,A.jsx)(Je.default,{id:u,sx:{pointerEvents:"none"},open:m,anchorEl:n,anchorOrigin:{vertical:"bottom",horizontal:"left"},transformOrigin:{vertical:"top",horizontal:"left"},onClose:l,disableRestoreFocus:!0,children:a})]})}var Ye=qo;var _e=r(require("@mui/material/Link"),1),Ke=require("react-router-dom");var qe=require("react/jsx-runtime");function Qo(i){var a=i,{to:e,children:o}=a,t=h(a,["to","children"]);return(0,qe.jsx)(_e.default,f(p({component:Ke.Link,to:e},t),{children:o}))}var Y=Qo;var Qe=r(require("@mui/material/ListItemButton"),1);var je=require("react/jsx-runtime");function Zo(t){var i=t,{children:e}=i,o=h(i,["children"]);return(0,je.jsx)(Qe.default,f(p({component:Y},o),{children:e}))}var Ze=Zo;var eo=r(require("@mui/material/BottomNavigation"),1),oo=r(require("@mui/material/BottomNavigationAction"),1),to=r(require("@mui/material/Box"),1),ro=r(require("@mui/material/Paper"),1),no=require("react"),io=require("react-router-dom");var w=require("react/jsx-runtime");function jo({children:e,navItems:o}){let[t,i]=(0,no.useState)("");return(0,w.jsxs)(w.Fragment,{children:[(0,w.jsx)(to.default,{sx:{paddingBottom:7},children:e}),(0,w.jsx)(ro.default,{sx:{position:"fixed",bottom:0,left:0,right:0},children:(0,w.jsx)(eo.default,{showLabels:!0,value:t,onChange:(a,n)=>{i(n)},children:o.map(a=>(0,w.jsx)(oo.default,f(p({},a),{component:io.Link}),a.value))})})]})}var ao=jo;var re=require("@alextheman/utility"),lo=r(require("@mui/icons-material/ChevronLeft"),1),co=r(require("@mui/icons-material/ChevronRight"),1),uo=r(require("@mui/icons-material/Menu"),1),fo=r(require("@mui/material/AppBar"),1),ne=r(require("@mui/material/Box"),1),go=r(require("@mui/material/CssBaseline"),1),ie=r(require("@mui/material/Divider"),1),xo=r(require("@mui/material/Drawer"),1),ae=r(require("@mui/material/IconButton"),1),ho=r(require("@mui/material/List"),1),yo=r(require("@mui/material/ListItem"),1),vo=r(require("@mui/material/ListItemButton"),1),Io=r(require("@mui/material/ListItemIcon"),1),Po=r(require("@mui/material/ListItemText"),1),D=require("@mui/material/styles"),wo=r(require("@mui/material/Toolbar"),1),_=r(require("@mui/material/Typography"),1),q=require("react"),Q=require("react-router-dom");var c=require("react/jsx-runtime"),K=240;function po(e){return{width:K,transition:e.transitions.create("width",{easing:e.transitions.easing.sharp,duration:e.transitions.duration.enteringScreen}),overflowX:"hidden"}}function so(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 mo=(0,D.styled)("div")(({theme:e})=>p({display:"flex",alignItems:"center",justifyContent:"flex-end",padding:e.spacing(0,1)},e.mixins.toolbar)),et=(0,D.styled)(fo.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:K,width:`calc(100% - ${K}px)`,transition:e.transitions.create(["width","margin"],{easing:e.transitions.easing.sharp,duration:e.transitions.duration.enteringScreen})}}]})),ot=(0,D.styled)(xo.default,{shouldForwardProp:e=>e!=="open"})(({theme:e})=>({width:K,flexShrink:0,whiteSpace:"nowrap",boxSizing:"border-box",variants:[{props:({open:o})=>o,style:f(p({},po(e)),{"& .MuiDrawer-paper":po(e)})},{props:({open:o})=>!o,style:f(p({},so(e)),{"& .MuiDrawer-paper":so(e)})}]}));function tt({title:e,navItems:o,children:t,headerElements:i}){let a=(0,D.useTheme)(),[n,s]=(0,q.useState)(!0),m=(0,Q.useLocation)();function u(){s(!0)}function x(){s(!1)}return(0,c.jsxs)(ne.default,{sx:{display:"flex"},children:[(0,c.jsx)(go.default,{}),(0,c.jsx)(et,{position:"fixed",open:n,children:(0,c.jsxs)(wo.default,{children:[(0,c.jsx)(ae.default,{color:"inherit","aria-label":"open drawer",onClick:u,edge:"start",sx:[{marginRight:5},n&&{display:"none"}],children:(0,c.jsx)(uo.default,{})}),(0,c.jsx)(_.default,{variant:"h6",noWrap:!0,component:"div",children:e}),i]})}),(0,c.jsxs)(ot,{variant:"permanent",open:n,children:[(0,c.jsx)(mo,{children:(0,c.jsx)(ae.default,{onClick:x,children:a.direction==="rtl"?(0,c.jsx)(co.default,{}):(0,c.jsx)(lo.default,{})})}),(0,c.jsx)(ie.default,{}),o.map(l=>(0,c.jsxs)(q.Fragment,{children:[(0,c.jsxs)(ho.default,{children:[(0,c.jsx)(_.default,{variant:n?"h5":"h6",paddingLeft:n?2:1,children:n?l.category:(0,re.truncate)(l.category,4)}),l.options.map(d=>(0,c.jsx)(yo.default,{disablePadding:!0,sx:{display:"block"},children:(0,c.jsxs)(vo.default,{sx:[{minHeight:48,px:2.5},n?{justifyContent:"initial"}:{justifyContent:"center"}],component:Q.Link,to:d.to,selected:m.pathname===d.to,children:[(0,c.jsx)(Io.default,{sx:[{minWidth:0,justifyContent:"center"},n?{mr:3}:{mr:"auto"}],children:d.icon?d.icon:n?null:(0,c.jsx)(_.default,{children:(0,re.truncate)(d.label,4)})}),(0,c.jsx)(Po.default,{primary:d.label,sx:[n?{opacity:1}:{opacity:0}]})]})},d.to))]}),(0,c.jsx)(ie.default,{})]},l.category))]}),(0,c.jsxs)(ne.default,{component:"main",sx:{flexGrow:1,p:3},children:[(0,c.jsx)(mo,{}),t]})]})}var So=tt;var bo=r(require("@mui/material/Typography"),1);var z=require("react/jsx-runtime");function rt(i){var a=i,{text:e,sx:o}=a,t=h(a,["text","sx"]);return(0,z.jsx)(z.Fragment,{children:e.split(`
|
|
2
|
+
`).map((n,s)=>(0,z.jsx)(bo.default,f(p({sx:p({margin:1},o)},t),{children:n}),s))})}var Lo=rt;var Z=r(require("@mui/material/Box"),1),pe=r(require("@mui/material/Typography"),1),ko=require("common-tags"),L=require("react-live");var y=require("react/jsx-runtime");function nt({code:e,scope:o,previewStyles:t,noInline:i,enableTypeScript:a,language:n}){let{mode:s}=B(),m={backgroundColor:s==="dark"?"black":"white",border:.3,borderRadius:1,padding:2,borderColor:"darkgray"},u=t?p(p({},m),t):p({},m);return(0,y.jsx)(Z.default,{sx:{borderRadius:1,border:.5,padding:2},children:(0,y.jsxs)(L.LiveProvider,{code:(0,ko.stripIndent)(e),scope:o,noInline:i,enableTypeScript:a,language:n,children:[(0,y.jsx)(pe.default,{variant:"h5",children:"Code"}),(0,y.jsx)(Z.default,{sx:{border:.3,borderRadius:.3,borderColor:"darkgray"},children:(0,y.jsx)(L.LiveEditor,{})}),(0,y.jsx)("br",{}),(0,y.jsx)(pe.default,{variant:"h5",children:"Result"}),(0,y.jsxs)(Z.default,{sx:u,children:[(0,y.jsx)(L.LivePreview,{}),(0,y.jsx)(L.LiveError,{})]})]})})}var Co=nt;var se=r(require("@mui/material/Box"),1),Bo=require("@mui/material/styles"),Mo=r(require("@mui/material/Switch"),1);var N=require("react/jsx-runtime"),it=(0,Bo.styled)(Mo.default)(()=>({padding:8,"& .MuiSwitch-track":{borderRadius:11,"&::before, &::after":{content:'""',position:"absolute",top:"50%",transform:"translateY(-50%)",fontSize:16,width:28,height:28}}}));function at(n){var s=n,{checkedIcon:e,checkedIconStyles:o,uncheckedIcon:t,uncheckedIconStyles:i}=s,a=h(s,["checkedIcon","checkedIconStyles","uncheckedIcon","uncheckedIconStyles"]);let m={borderRadius:"50%",borderColor:"white",backgroundColor:"white",display:"flex",alignItems:"center",justifyContent:"center",padding:.25},u={color:"black",maxWidth:16.5,maxHeight:16.5};return(0,N.jsx)(it,p({checkedIcon:(0,N.jsx)(se.default,{sx:m,children:(0,N.jsx)(e,{style:p(p({},u),o)})}),icon:(0,N.jsx)(se.default,{sx:m,children:(0,N.jsx)(t,{style:p(p({},u),i)})})},a))}var To=at;var C=require("react");function pt(e){let[o,t]=(0,C.useState)(()=>{let n=window.location.hash.replace("#","");return e&&n===""?e:n}),i=(0,C.useCallback)(()=>{let n=window.location.hash.replace("#","");t(e&&n===""?e:n)},[t,e]);(0,C.useEffect)(()=>(window.addEventListener("hashchange",i),()=>{window.removeEventListener("hashchange",i)}),[i]);let a=(0,C.useCallback)(n=>{let s=typeof n=="function"?n(o):n;s!==o&&(window.location.hash=s)},[o]);return[o,a]}var Do=pt;0&&(module.exports={CollapsableItem,DarkModeToggle,DropdownMenu,ExternalLink,FileInput,FileInputList,FileType,IconWithPopover,InternalLink,ListItemInternalLink,ModeContext,ModeProvider,NavigationBottom,NavigationDrawer,PopoverText,ReactPlayground,ScreenSizeContext,ScreenSizeProvider,SwitchWithIcons,useHash,useMode,useScreenSize});
|
|
3
3
|
//# sourceMappingURL=index.cjs.map
|
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/components/CollapsableItem.tsx","../src/components/DarkModeToggle.tsx","../src/providers/ModeProvider.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/NavigationBottom.tsx","../src/components/NavigationDrawer.tsx","../src/components/PopoverText.tsx","../src/components/ReactPlayground.tsx","../src/providers/ScreenSizeProvider.tsx","../src/components/SwitchWithIcons.tsx"],"sourcesContent":["export * from \"src/components\";\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\";\nimport { useContext } from \"react\";\n\nimport { ModeContext } from \"src/providers/ModeProvider\";\n\nfunction DarkModeToggle() {\n const { mode, toggleMode } = useContext(ModeContext);\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 CssBaseline from \"@mui/material/CssBaseline\";\nimport { createTheme, ThemeProvider } from \"@mui/material/styles\";\nimport { createContext, useMemo, useState } from \"react\";\n\nexport const ModeContext = createContext({\n toggleMode: () => {},\n mode: \"dark\",\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 { 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 Link from \"@mui/material/Link\";\n\nexport interface ExternalLinkProps extends Omit<LinkProps, \"to\"> {\n href: string;\n children: ReactNode;\n}\n\nfunction ExternalLink({\n href,\n children,\n target = \"_blank\",\n rel = \"noopener noreferrer\",\n ...linkProps\n}: ExternalLinkProps) {\n return (\n <Link component={\"a\"} href={href} target={target} rel={rel} {...linkProps}>\n {children}\n </Link>\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 Link from \"@mui/material/Link\";\nimport { Link as ReactDOMLink } from \"react-router-dom\";\n\nexport interface InternalLinkProps extends Omit<LinkProps, \"href\"> {\n to: string;\n children: ReactNode;\n}\n\nfunction InternalLink({ to, children, ...linkProps }: InternalLinkProps) {\n return (\n <Link component={ReactDOMLink} to={to} {...linkProps}>\n {children}\n </Link>\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 { 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 { useContext } from \"react\";\nimport { LiveEditor, LiveError, LivePreview, LiveProvider } from \"react-live\";\n\nimport { ModeContext } 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 } = useContext(ModeContext);\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 { ReactNode } from \"react\";\n\nimport { createContext, 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\nexport const ScreenSizeContext = createContext<ScreenSizeContextValue>({\n windowWidth: 0,\n windowHeight: 0,\n isLargeScreen: false,\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 { 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"],"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","ModeContext","ModeProvider_default","NavigationBottom_default","NavigationDrawer_default","PopoverText_default","ReactPlayground_default","ScreenSizeContext","ScreenSizeProvider_default","SwitchWithIcons_default","__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_react","import_CssBaseline","import_styles","import_react","import_jsx_runtime","ModeContext","ModeProvider","children","modeProp","mode","setMode","theme","prev","CssBaseline","ModeProvider_default","import_jsx_runtime","DarkModeToggle","mode","toggleMode","ModeContext","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","target","rel","linkProps","__objRest","Link","__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","Link","__spreadProps","__spreadValues","ReactDOMLink","InternalLink_default","import_ListItemButton","import_jsx_runtime","ListItemInternalLink","_a","_b","children","listItemButtonProps","__objRest","ListItemButton","__spreadProps","__spreadValues","InternalLink_default","ListItemInternalLink_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","import_react_live","import_react","import_jsx_runtime","ScreenSizeContext","ScreenSizeProvider","children","largeScreenWidth","largeScreenHeight","windowWidth","setWindowWidth","windowHeight","setWindowHeight","largeScreenCondition","width","height","isLargeScreen","setIsLargeScreen","setDimensions","ScreenSizeProvider_default","import_jsx_runtime","ReactPlayground","code","scope","previewStyles","noInline","enableTypeScript","language","mode","ModeContext","defaultPreviewStyles","allPreviewStyles","__spreadValues","Box","Typography","ReactPlayground_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"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/components/CollapsableItem.tsx","../src/components/DarkModeToggle.tsx","../src/providers/ModeProvider.tsx","../src/providers/ScreenSizeProvider.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/NavigationBottom.tsx","../src/components/NavigationDrawer.tsx","../src/components/PopoverText.tsx","../src/components/ReactPlayground.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","/* eslint-disable @typescript-eslint/no-deprecated */\nimport 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\n/**\n * @deprecated Direct use of ModeContext is deprecated. Please use useMode hook instead.\n */\nexport const 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","/* eslint-disable @typescript-eslint/no-deprecated */\nimport 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\n/**\n * @deprecated Direct use of ScreenSizeContext is deprecated. Please use useScreenSize hook instead.\n */\nexport const 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 { 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 Link from \"@mui/material/Link\";\n\nexport interface ExternalLinkProps extends Omit<LinkProps, \"to\"> {\n href: string;\n children: ReactNode;\n}\n\nfunction ExternalLink({\n href,\n children,\n target = \"_blank\",\n rel = \"noopener noreferrer\",\n ...linkProps\n}: ExternalLinkProps) {\n return (\n <Link component={\"a\"} href={href} target={target} rel={rel} {...linkProps}>\n {children}\n </Link>\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 Link from \"@mui/material/Link\";\nimport { Link as ReactDOMLink } from \"react-router-dom\";\n\nexport interface InternalLinkProps extends Omit<LinkProps, \"href\"> {\n to: string;\n children: ReactNode;\n}\n\nfunction InternalLink({ to, children, ...linkProps }: InternalLinkProps) {\n return (\n <Link component={ReactDOMLink} to={to} {...linkProps}>\n {children}\n </Link>\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 { 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 { 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":"0kCAAA,IAAAA,GAAA,GAAAC,GAAAD,GAAA,qBAAAE,GAAA,mBAAAC,GAAA,iBAAAC,GAAA,iBAAAC,GAAA,cAAAC,EAAA,kBAAAC,GAAA,aAAAC,GAAA,oBAAAC,GAAA,iBAAAC,EAAA,yBAAAC,GAAA,gBAAAC,EAAA,iBAAAC,GAAA,qBAAAC,GAAA,qBAAAC,GAAA,gBAAAC,GAAA,oBAAAC,GAAA,sBAAAC,EAAA,uBAAAC,GAAA,oBAAAC,GAAA,YAAAC,GAAA,YAAAC,EAAA,kBAAAC,KAAA,eAAAC,GAAAxB,ICIA,IAAAyB,GAA0B,kDAC1BC,GAAwB,gDACxBC,GAAgB,kCAChBC,EAAuB,yCACvBC,GAAqB,uCACrBC,EAAoC,iBAyBvB,IAAAC,EAAA,6BATb,SAASC,GAAgB,CACvB,gBAAAC,EACA,OAAAC,EACA,QAAAC,EACA,SAAAC,EACA,aAAAC,EACA,eAAAC,EACA,gBAAiBC,EAAkB,EAAAC,QACnC,cAAAC,EACA,SAAAC,KAAW,OAAC,GAAAC,QAAA,EAAY,EACxB,WAAAC,KAAa,OAAC,GAAAC,QAAA,EAAc,EAC5B,kBAAAC,EAAoBP,IAAoB,EAAAC,OAC1C,EAAyB,CACvB,GAAM,CAACO,EAAYC,CAAa,KAAI,YAAkB,CAAC,CAACf,CAAe,EAEvE,sBAAU,IAAM,CACVc,GAAcb,EAChBA,EAAO,EACE,CAACa,GAAcZ,GACxBA,EAAQ,CAEZ,EAAG,CAACY,CAAU,CAAC,KAGb,QAAC,GAAAE,QAAA,CACC,qBAACV,EAAA,CACC,QAAS,IAAM,CACbS,EAAeE,GACN,CAACA,CACT,CACH,EACA,GACEJ,EACIK,EAAA,CACE,MAAO,OACP,QAAS,OACT,WAAY,SACZ,eAAgB,SAChB,SAAU,IACV,SAAU,EACV,UAAW,SACX,UACEZ,IAAoB,EAAAC,QAAa,CAAE,gBAAiB,cAAe,EAAI,MACtEH,GAELA,EAEN,gBAAeU,EAEd,UAAAT,EACAS,EAAaL,EAAWE,GAC3B,KACA,OAAC,GAAAQ,QAAAC,EAAAF,EAAA,CAAS,GAAIJ,GAAgBN,GAA7B,CACE,SAAAL,GACH,GACF,CAEJ,CAEA,IAAOkB,GAAQtB,GCpFf,IAAAuB,GAAqB,6CACrBC,GAAsB,8CACtBC,GAAuB,yCACvBC,GAAoB,sCCApB,IAAAC,GAAwB,0CACxBC,EAA2C,gCAC3CC,EAA6D,iBA2CvDC,EAAA,6BAtCOC,KAAc,iBAAc,CACvC,WAAY,IAAM,CAAC,EACnB,KAAM,MACR,CAAC,EAEM,SAASC,GAAU,CACxB,SAAO,cAAWD,CAAW,CAC/B,CASA,SAASE,GAAa,CAAE,SAAAC,EAAU,KAAMC,EAAW,MAAO,EAAsB,CAC9E,GAAM,CAACC,EAAMC,CAAO,KAAI,YAAeF,CAAQ,EAEzCG,KAAQ,WAAQ,OACb,eAAY,CACjB,QAAS,CACP,KAAAF,CACF,CACF,CAAC,EACA,CAACA,CAAI,CAAC,EAET,SACE,OAACL,EAAY,SAAZ,CACC,MAAO,CACL,KAAAK,EACA,WAAY,IAAM,CAChBC,EAASE,GACAA,IAAS,QAAU,OAAS,OACpC,CACH,CACF,EAEA,oBAAC,iBAAc,MAAOD,EACpB,oBAAC,GAAAE,QAAA,EAAY,EACZN,GACH,EACF,CAEJ,CAEA,IAAOO,GAAQR,GCrDf,IAAAS,EAA+D,iBAoE3DC,GAAA,6BAnDSC,KAAoB,iBAAsC,CACrE,YAAa,EACb,aAAc,EACd,cAAe,EACjB,CAAC,EAEM,SAASC,IAAgB,CAC9B,SAAO,cAAWD,CAAiB,CACrC,CAEA,SAASE,GAAmB,CAAE,SAAAC,EAAU,iBAAAC,EAAkB,kBAAAC,CAAkB,EAAoB,CAC9F,GAAM,CAACC,EAAaC,CAAc,KAAI,YAAiB,OAAO,UAAU,EAClE,CAACC,EAAcC,CAAe,KAAI,YAAiB,OAAO,WAAW,EAE3E,SAASC,EACPC,EACAC,EACAR,EAA2B,IAC3BC,EAA4B,IACnB,CACT,OAAOM,EAAQP,GAAoBQ,EAASP,CAC9C,CAEA,GAAM,CAACQ,EAAeC,CAAgB,KAAI,YACxCJ,EACE,OAAO,WACP,OAAO,YACPN,EACAC,CACF,CACF,EAEA,sBAAU,IAAM,CACd,SAASU,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,KAEL,aAAU,IAAM,CACdD,EACEJ,EAAqBJ,EAAaE,EAAcJ,EAAkBC,CAAiB,CACrF,CACF,EAAG,CAACC,EAAaE,EAAcJ,EAAkBC,CAAiB,CAAC,KAGjE,QAACL,EAAkB,SAAlB,CACC,MAAO,CACL,cAAAa,EACA,YAAAP,EACA,aAAAE,CACF,EAEC,SAAAL,EACH,CAEJ,CAEA,IAAOa,GAAQd,GFlEY,IAAAe,EAAA,6BAV3B,SAASC,IAAiB,CACxB,GAAM,CAAE,KAAAC,EAAM,WAAAC,CAAW,EAAIC,EAAQ,EAErC,SACE,OAAC,GAAAC,QAAA,CAAQ,MAAO,UAAUH,IAAS,OAAS,QAAU,MAAM,QAC1D,mBAAC,GAAAI,QAAA,CACC,GAAI,CAAE,WAAY,MAAO,EACzB,QAASH,EACT,aAAY,UAAUD,IAAS,OAAS,QAAU,MAAM,QAEvD,SAAAA,IAAS,UAAS,OAAC,GAAAK,QAAA,EAAU,KAAK,OAAC,GAAAC,QAAA,EAAS,EAC/C,EACF,CAEJ,CAEA,IAAOC,GAAQR,GGpBf,IAAAS,GAA0B,kDAC1BC,GAAwB,gDACxBC,GAAgB,kCAChBC,GAAsB,qCACtBC,GAAiB,mCACjBC,EAA6C,iBAoB9B,IAAAC,EAAA,6BALf,SAASC,GAAa,CACpB,SAAAC,EACA,OAAQC,EAAS,GAAAC,QACjB,eAAAC,EAAiB,OACjB,YAAaC,EACb,WAAAC,KAAa,OAAC,GAAAC,QAAA,EAAY,EAC1B,aAAAC,KAAe,OAAC,GAAAC,QAAA,EAAc,EAC9B,OAAAC,EACA,QAAAC,CACF,EAAsB,CACpB,GAAM,CAACC,EAAeC,CAAgB,KAAI,YAA6B,IAAI,EACrEC,KAAiB,WAAQ,IACtB,CAAC,CAACF,EACR,CAACA,CAAa,CAAC,EAEZG,EAAuCC,EAAAC,EAAA,GACxCZ,GADwC,CAE3C,QAAUa,GAAwC,CAChDL,EAAiBK,EAAM,aAAa,CACtC,EACA,gBAAiBJ,EAAiB,gBAAkB,OACpD,gBAAiB,OACjB,gBAAiBA,CACnB,GAEA,OAAIZ,IAAW,GAAAC,UACbY,EAAY,QAAUD,EAAiBR,EAAaE,MAGtD,aAAU,IAAM,CACVM,GAAkBJ,EACpBA,EAAO,EACE,CAACI,GAAkBH,GAC5BA,EAAQ,CAEZ,EAAG,CAACG,EAAgBJ,EAAQC,CAAO,CAAC,KAGlC,QAAC,GAAAQ,QAAA,CACC,oBAACjB,EAAAc,EAAAC,EAAA,GAAWF,GAAX,CAAyB,SAAAX,GAAe,KACzC,OAAC,GAAAgB,QAAA,CACC,GAAG,gBACH,SAAUR,EACV,KAAME,EACN,QAAS,IAAM,CACbD,EAAiB,IAAI,CACvB,EAEC,gBAAOZ,GAAa,cACnB,OAAC,GAAAkB,QAAA,CACE,SAAAlB,EAAS,IAAM,CACdY,EAAiB,IAAI,CACvB,CAAC,EACH,EAEAZ,EAEJ,GACF,CAEJ,CAEA,IAAOoB,GAAQrB,GClFf,IAAAsB,GAAiB,mCAeb,IAAAC,GAAA,6BARJ,SAASC,GAAaC,EAMA,CANA,IAAAC,EAAAD,EACpB,MAAAE,EACA,SAAAC,EACA,OAAAC,EAAS,SACT,IAAAC,EAAM,qBAdR,EAUsBJ,EAKjBK,EAAAC,EALiBN,EAKjB,CAJH,OACA,WACA,SACA,QAGA,SACE,QAAC,GAAAO,QAAAC,EAAAC,EAAA,CAAK,UAAW,IAAK,KAAMR,EAAM,OAAQE,EAAQ,IAAKC,GAASC,GAA/D,CACE,SAAAH,GACH,CAEJ,CAEA,IAAOQ,GAAQZ,GCtBf,IAAAa,GAA4B,gDAC5BC,GAAmB,qCACnBC,GAAuB,gCACvBC,GAAyB,iBA4DrB,IAAAC,EAAA,6BA1DSC,GAAW,CACtB,IAAK,kBACL,IAAK,YACL,KAAM,aACN,IAAK,YACL,KAAM,oEACN,KAAM,0EACN,IAAK,YACL,IAAK,YACL,IAAK,WACP,EAIMC,MAAsB,WAAO,OAAO,EAAE,CAC1C,KAAM,gBACN,SAAU,aACV,OAAQ,EACR,SAAU,SACV,SAAU,WACV,OAAQ,EACR,KAAM,EACN,WAAY,SACZ,MAAO,CACT,CAAC,EAEKC,MAAW,WAAO,KAAK,EAA0B,CAAC,CAAE,MAAAC,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,KAAI,aAAkB,EAAK,EAErDC,KACJ,QAAC,GAAAC,QAAAC,EAAAC,EAAA,CACC,QAAQ,YACR,UAAU,QACV,aAAW,qBACX,UAAYC,GAAU,CArE5B,IAAAf,GAsEYe,EAAM,MAAQ,SAAWA,EAAM,MAAQ,OACzCA,EAAM,eAAe,GACrBf,EAAA,SAAS,eAAe,YAAY,IAApC,MAAAA,EAAuC,QAE3C,GACIO,GAVL,CAWC,WAAWP,EAAAO,EAAY,YAAZ,KAAAP,KAAyB,OAAC,GAAAgB,QAAA,EAAgB,EAEpD,UAAAb,KACD,OAACR,GAAA,CACC,GAAG,aACH,KAAK,OACL,SAAWoB,GAAU,CAlF7B,IAAAf,EAmFU,IAAMiB,EAAQF,EAAM,OACpBb,EAAY,MAAM,MAAKF,EAAAiB,EAAM,QAAN,KAAAjB,EAAe,CAAC,CAAC,CAAC,EACzCiB,EAAM,MAAQ,EAChB,EACA,SAAUb,EACV,OAAQC,GAAA,YAAAA,EAAQ,KAAK,KACrB,SAAUE,EAAY,SACxB,IACF,EAGF,OAAOD,KACL,OAACV,GAAA,CACC,UAAWa,EACX,WAAaM,GAAU,CACrBA,EAAM,eAAe,EACjB,CAAAR,EAAY,UAGhBG,EAAc,EAAI,CACpB,EACA,YAAcK,GAAU,CACtBA,EAAM,eAAe,EACrBL,EAAc,EAAK,CACrB,EACA,OAASK,GAAU,CA5GzB,IAAAf,EA+GQ,GAFAe,EAAM,eAAe,EACrBL,EAAc,EAAK,EACfH,EAAY,SACd,OAEF,IAAMW,EAAa,MAAM,MAAKlB,EAAAe,EAAM,aAAa,QAAnB,KAAAf,EAA4B,CAAC,CAAC,EAC5DE,EAAYgB,CAAU,CACxB,EAEC,SAAAP,EACH,EAEAA,CAEJ,CAEA,IAAOQ,EAAQpB,GC1Hf,IAAAqB,GAAuB,2CACvBC,GAAgB,kCAChBC,GAAuB,yCACvBC,GAAiB,mCACjBC,GAAqB,uCACrBC,GAAyB,2CAsBrB,IAAAC,EAAA,6BAbJ,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,OAI7B,QAAC,GAAAG,QAAA,CACC,oBAACC,EAAAF,EAAA,GAAcF,EAAmB,KAClC,OAAC,GAAAK,QAAA,CACE,SAAAZ,EAAM,IAAKa,MAER,OAAC,GAAAC,QAAA,CAEC,mBACE,OAAC,GAAAC,QAAA,CACC,aAAW,SACX,KAAK,MACL,QAAS,IAAM,CACbd,EAAUK,GACDA,EAAS,OAAQU,GACfA,IAAiBH,CACzB,CACF,CACH,EAEA,mBAAC,GAAAI,QAAA,EAAW,EACd,EAGF,mBAAC,GAAAC,QAAA,CAAa,QAASL,EAAK,KAAM,GAjB7BA,EAAK,IAkBZ,CAEH,EACH,GACF,CAEJ,CAEA,IAAOM,GAAQtB,GC1Df,IAAAuB,GAAgB,kCAChBC,GAAoB,sCACpBC,EAAgC,iBAwC5B,IAAAC,EAAA,6BA1BJ,SAASC,GAAgB,CACvB,KAAMC,EACN,OAAAC,EACA,QAAAC,EACA,UAAAC,EACA,SAAAC,CACF,EAAyB,CACvB,GAAM,CAACC,EAAeC,CAAgB,KAAI,YAAyB,IAAI,EACjEC,EAAgB,CAAC,CAACF,EAClBG,KAAY,SAAM,EAExB,SAASC,EAAWC,EAAmD,CACrEJ,EAAiBI,EAAM,aAAa,EAChCT,GACFA,EAAO,CAEX,CAEA,SAASU,GAAc,CACrBL,EAAiB,IAAI,EACjBJ,GACFA,EAAQ,CAEZ,CAEA,SACE,QAAC,GAAAU,QAAA,CACC,oBAACZ,EAAAa,EAAA,CACC,YAAWN,EAAgBC,EAAY,OACvC,gBAAc,OACd,aAAcC,EACd,aAAcE,GACVR,EACN,KACA,OAAC,GAAAW,QAAA,CACC,GAAIN,EACJ,GAAI,CAAE,cAAe,MAAO,EAC5B,KAAMD,EACN,SAAUF,EACV,aAAc,CACZ,SAAU,SACV,WAAY,MACd,EACA,gBAAiB,CACf,SAAU,MACV,WAAY,MACd,EACA,QAASM,EACT,oBAAmB,GAElB,SAAAP,EACH,GACF,CAEJ,CAEA,IAAOW,GAAQhB,GCzEf,IAAAiB,GAAiB,mCACjBC,GAAqC,4BASjC,IAAAC,GAAA,6BAFJ,SAASC,GAAaC,EAAmD,CAAnD,IAAAC,EAAAD,EAAE,IAAAE,EAAI,SAAAC,CAX5B,EAWsBF,EAAmBG,EAAAC,EAAnBJ,EAAmB,CAAjB,KAAI,aAC1B,SACE,QAAC,GAAAK,QAAAC,EAAAC,EAAA,CAAK,UAAW,GAAAC,KAAc,GAAIP,GAAQE,GAA1C,CACE,SAAAD,GACH,CAEJ,CAEA,IAAOO,EAAQX,GChBf,IAAAY,GAA2B,6CAWvB,IAAAC,GAAA,6BAFJ,SAASC,GAAqBC,EAAiE,CAAjE,IAAAC,EAAAD,EAAE,UAAAE,CAZhC,EAY8BD,EAAeE,EAAAC,EAAfH,EAAe,CAAb,aAC9B,SACE,QAAC,GAAAI,QAAAC,EAAAC,EAAA,CAAe,UAAWC,GAAkBL,GAA5C,CACE,SAAAD,GACH,CAEJ,CAEA,IAAOO,GAAQV,GClBf,IAAAW,GAA6B,+CAC7BC,GAAmC,qDACnCC,GAAgB,kCAChBC,GAAkB,oCAClBC,GAAyB,iBACzBC,GAAqB,4BAiBjB,IAAAC,EAAA,6BAHJ,SAASC,GAAiB,CAAE,SAAAC,EAAU,SAAAC,CAAS,EAA0B,CACvE,GAAM,CAACC,EAAOC,CAAQ,KAAI,aAAiB,EAAE,EAC7C,SACE,oBACE,oBAAC,GAAAC,QAAA,CAAI,GAAI,CAAE,cAAe,CAAE,EAAI,SAAAJ,EAAS,KACzC,OAAC,GAAAK,QAAA,CAAM,GAAI,CAAE,SAAU,QAAS,OAAQ,EAAG,KAAM,EAAG,MAAO,CAAE,EAC3D,mBAAC,GAAAC,QAAA,CACC,WAAU,GACV,MAAOJ,EACP,SAAU,CAACK,EAAGL,IAAU,CACtBC,EAASD,CAAK,CAChB,EAEC,SAAAD,EAAS,IAAKO,MACN,OAAC,GAAAC,QAAAC,EAAAC,EAAA,GAA4CH,GAA5C,CAAkD,UAAW,UAAjCA,EAAK,KAAkC,CAC5E,EACH,EACF,GACF,CAEJ,CAEA,IAAOI,GAAQb,GCvCf,IAAAc,GAAyB,+BACzBC,GAA4B,gDAC5BC,GAA6B,iDAC7BC,GAAqB,yCACrBC,GAAsB,qCACtBC,GAAgB,kCAChBC,GAAwB,0CACxBC,GAAoB,sCACpBC,GAAsB,qCACtBC,GAAuB,yCACvBC,GAAiB,mCACjBC,GAAqB,uCACrBC,GAA2B,6CAC3BC,GAAyB,2CACzBC,GAAyB,2CACzBC,EAAiC,gCACjCC,GAAoB,sCACpBC,EAAuB,yCACvBC,EAAmC,iBACnCC,EAAkC,4BAyI5B,IAAAC,EAAA,6BAvIAC,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,MAAe,UAAO,KAAK,EAAE,CAAC,CAAE,MAAAF,CAAM,IACnCG,EAAA,CACL,QAAS,OACT,WAAY,SACZ,eAAgB,WAChB,QAASH,EAAM,QAAQ,EAAG,CAAC,GAExBA,EAAM,OAAO,QAEnB,EAMKI,MAAS,UAAO,GAAAC,QAAW,CAC/B,kBAAoBC,GACXA,IAAS,MAEpB,CAAC,EAAe,CAAC,CAAE,MAAAN,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,KAAAO,CAAK,IACNA,EAET,MAAO,CACL,WAAYT,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,EAEKQ,MAAS,UAAO,GAAAC,QAAW,CAC/B,kBAAoBH,GACXA,IAAS,MAEpB,CAAC,EAAE,CAAC,CAAE,MAAAN,CAAM,KACH,CACL,MAAOF,EACP,WAAY,EACZ,WAAY,SACZ,UAAW,aACX,SAAU,CACR,CACE,MAAO,CAAC,CAAE,KAAAS,CAAK,IACNA,EAET,MAAOG,EAAAP,EAAA,GACFJ,GAAYC,CAAK,GADf,CAEL,qBAAsBD,GAAYC,CAAK,CACzC,EACF,EACA,CACE,MAAO,CAAC,CAAE,KAAAO,CAAK,IACN,CAACA,EAEV,MAAOG,EAAAP,EAAA,GACFF,GAAYD,CAAK,GADf,CAEL,qBAAsBC,GAAYD,CAAK,CACzC,EACF,CACF,CACF,EACD,EAkBD,SAASW,GAAiB,CAAE,MAAAC,EAAO,SAAAC,EAAU,SAAAC,EAAU,eAAAC,CAAe,EAA0B,CAC9F,IAAMf,KAAQ,YAAS,EACjB,CAACO,EAAMS,CAAO,KAAI,YAAS,EAAI,EAC/BC,KAAW,eAAY,EAE7B,SAASC,GAAmB,CAC1BF,EAAQ,EAAI,CACd,CAEA,SAASG,GAAoB,CAC3BH,EAAQ,EAAK,CACf,CAEA,SACE,QAAC,GAAAI,QAAA,CAAI,GAAI,CAAE,QAAS,MAAO,EACzB,oBAAC,GAAAC,QAAA,EAAY,KACb,OAACjB,GAAA,CAAO,SAAS,QAAQ,KAAMG,EAC7B,oBAAC,GAAAe,QAAA,CACC,oBAAC,GAAAC,QAAA,CACC,MAAM,UACN,aAAW,cACX,QAASL,EACT,KAAK,QACL,GAAI,CACF,CACE,YAAa,CACf,EACAX,GAAQ,CAAE,QAAS,MAAO,CAC5B,EAEA,mBAAC,GAAAiB,QAAA,EAAS,EACZ,KACA,OAAC,EAAAC,QAAA,CAAW,QAAQ,KAAK,OAAM,GAAC,UAAU,MACvC,SAAAb,EACH,EACCG,GACH,EACF,KACA,QAACP,GAAA,CAAO,QAAQ,YAAY,KAAMD,EAChC,oBAACL,GAAA,CACC,mBAAC,GAAAqB,QAAA,CAAW,QAASJ,EAClB,SAAAnB,EAAM,YAAc,SAAQ,OAAC,GAAA0B,QAAA,EAAiB,KAAK,OAAC,GAAAC,QAAA,EAAgB,EACvE,EACF,KACA,OAAC,GAAAC,QAAA,EAAQ,EACRf,EAAS,IAAKgB,MAEX,QAAC,YACC,qBAAC,GAAAC,QAAA,CACC,oBAAC,EAAAL,QAAA,CAAW,QAASlB,EAAO,KAAO,KAAM,YAAaA,EAAO,EAAI,EAC9D,SAAAA,EAAOsB,EAAK,YAAW,aAASA,EAAK,SAAU,CAAC,EACnD,EACCA,EAAK,QAAQ,IAAKE,MAEf,OAAC,GAAAC,QAAA,CAAyB,eAAc,GAAC,GAAI,CAAE,QAAS,OAAQ,EAC9D,oBAAC,GAAAC,QAAA,CACC,GAAI,CACF,CACE,UAAW,GACX,GAAI,GACN,EACA1B,EACI,CACE,eAAgB,SAClB,EACA,CACE,eAAgB,QAClB,CACN,EACA,UAAW,OACX,GAAIwB,EAAO,GACX,SAAUd,EAAS,WAAac,EAAO,GAEvC,oBAAC,GAAAG,QAAA,CACC,GAAI,CACF,CACE,SAAU,EACV,eAAgB,QAClB,EACA3B,EACI,CACE,GAAI,CACN,EACA,CACE,GAAI,MACN,CACN,EAEC,SAAAwB,EAAO,KACNA,EAAO,KACJxB,EAED,QADF,OAAC,EAAAkB,QAAA,CAAY,yBAASM,EAAO,MAAO,CAAC,EAAE,EAE3C,KACA,OAAC,GAAAI,QAAA,CACC,QAASJ,EAAO,MAChB,GAAI,CACFxB,EACI,CACE,QAAS,CACX,EACA,CACE,QAAS,CACX,CACN,EACF,GACF,GApDawB,EAAO,EAqDtB,CAEH,GACH,KACA,OAAC,GAAAH,QAAA,EAAQ,IAhEIC,EAAK,QAiEpB,CAEH,GACH,KACA,QAAC,GAAAT,QAAA,CAAI,UAAU,OAAO,GAAI,CAAE,SAAU,EAAG,EAAG,CAAE,EAC5C,oBAAClB,GAAA,EAAa,EACbY,GACH,GACF,CAEJ,CAEA,IAAOsB,GAAQzB,GC3Qf,IAAA0B,GAAuB,yCAQnB,IAAAC,EAAA,6BAFJ,SAASC,GAAYC,EAAoD,CAApD,IAAAC,EAAAD,EAAE,MAAAE,EAAM,GAAAC,CAR7B,EAQqBF,EAAeG,EAAAC,EAAfJ,EAAe,CAAb,OAAM,OAC3B,SACE,mBACG,SAAAC,EAAK,MAAM;AAAA,CAAI,EAAE,IAAI,CAACI,EAAMC,OAEzB,OAAC,GAAAC,QAAAC,EAAAC,EAAA,CAAuB,GAAIA,EAAA,CAAE,OAAQ,GAAMP,IAAUC,GAArD,CACE,SAAAE,IADcC,CAEjB,CAEH,EACH,CAEJ,CAEA,IAAOI,GAAQZ,GCpBf,IAAAa,EAAgB,kCAChBC,GAAuB,yCACvBC,GAA4B,uBAC5BC,EAAiE,sBAyCzD,IAAAC,EAAA,6BA5BR,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,SACE,OAAC,EAAAG,QAAA,CAAI,GAAI,CAAE,aAAc,EAAG,OAAQ,GAAK,QAAS,CAAE,EAClD,oBAAC,gBACC,QAAM,gBAAYX,CAAI,EACtB,MAAOC,EACP,SAAUE,EACV,iBAAkBC,EAClB,SAAUC,EAEV,oBAAC,GAAAO,QAAA,CAAW,QAAQ,KAAK,gBAAI,KAC7B,OAAC,EAAAD,QAAA,CACC,GAAI,CACF,OAAQ,GACR,aAAc,GACd,YAAa,UACf,EAEA,mBAAC,eAAW,EACd,KACA,OAAC,OAAG,KACJ,OAAC,GAAAC,QAAA,CAAW,QAAQ,KAAK,kBAAM,KAC/B,QAAC,EAAAD,QAAA,CAAI,GAAIF,EACP,oBAAC,gBAAY,KACb,OAAC,cAAU,GACb,GACF,EACF,CAEJ,CAEA,IAAOI,GAAQd,GC/Df,IAAAe,GAAgB,kCAChBC,GAAuB,gCACvBC,GAAmB,qCAgDT,IAAAC,EAAA,6BAvCJC,MAAe,WAAO,GAAAC,OAAM,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,SACE,OAACZ,GAAAa,EAAA,CACC,eACE,OAAC,GAAAC,QAAA,CAAI,GAAIH,EACP,mBAACN,EAAA,CAAY,MAAOQ,IAAA,GAAKD,GAAsBN,GAAqB,EACtE,EAEF,QACE,OAAC,GAAAQ,QAAA,CAAI,GAAIH,EACP,mBAACJ,EAAA,CAAc,MAAOM,IAAA,GAAKD,GAAsBJ,GAAuB,EAC1E,GAEEC,EACN,CAEJ,CAEA,IAAOM,GAAQb,GCjEf,IAAAc,EAAiD,iBAEjD,SAASC,GAA0BC,EAA8D,CAC/F,GAAM,CAACC,EAAMC,CAAO,KAAI,YAAY,IAAM,CACxC,IAAMD,EAAU,OAAO,SAAS,KAAK,QAAQ,IAAK,EAAE,EACpD,OAAQD,GAAqBC,IAAS,GAAKD,EAArBC,CACxB,CAAC,EACKE,KAAoB,eAAY,IAAM,CAC1C,IAAMF,EAAU,OAAO,SAAS,KAAK,QAAQ,IAAK,EAAE,EACpDC,EAASF,GAAqBC,IAAS,GAAKD,EAArBC,CAAuC,CAChE,EAAG,CAACC,EAASF,CAAW,CAAC,KAEzB,aAAU,KACR,OAAO,iBAAiB,aAAcG,CAAiB,EAChD,IAAM,CACX,OAAO,oBAAoB,aAAcA,CAAiB,CAC5D,GACC,CAACA,CAAiB,CAAC,EAEtB,IAAMC,KAAa,eAChBC,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":["index_exports","__export","CollapsableItem_default","DarkModeToggle_default","DropdownMenu_default","ExternalLink_default","FileInput_default","FileInputList_default","FileType","IconWithPopover_default","InternalLink_default","ListItemInternalLink_default","ModeContext","ModeProvider_default","NavigationBottom_default","NavigationDrawer_default","PopoverText_default","ReactPlayground_default","ScreenSizeContext","ScreenSizeProvider_default","SwitchWithIcons_default","useHash_default","useMode","useScreenSize","__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_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_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","target","rel","linkProps","__objRest","Link","__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","Link","__spreadProps","__spreadValues","ReactDOMLink","InternalLink_default","import_ListItemButton","import_jsx_runtime","ListItemInternalLink","_a","_b","children","listItemButtonProps","__objRest","ListItemButton","__spreadProps","__spreadValues","InternalLink_default","ListItemInternalLink_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_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
|
@@ -151,10 +151,19 @@ interface SwitchWithIconsProps extends Omit<SwitchProps, "icon" | "checkedIcon">
|
|
|
151
151
|
}
|
|
152
152
|
declare function SwitchWithIcons({ checkedIcon: CheckedIcon, checkedIconStyles, uncheckedIcon: UncheckedIcon, uncheckedIconStyles, ...switchProps }: SwitchWithIconsProps): react_jsx_runtime.JSX.Element;
|
|
153
153
|
|
|
154
|
+
declare function useHash<S extends string>(initialHash: S | undefined): [S, Dispatch<SetStateAction<S>>];
|
|
155
|
+
|
|
156
|
+
/**
|
|
157
|
+
* @deprecated Direct use of ModeContext is deprecated. Please use useMode hook instead.
|
|
158
|
+
*/
|
|
154
159
|
declare const ModeContext: react.Context<{
|
|
155
160
|
toggleMode: () => void;
|
|
156
161
|
mode: string;
|
|
157
162
|
}>;
|
|
163
|
+
declare function useMode(): {
|
|
164
|
+
toggleMode: () => void;
|
|
165
|
+
mode: string;
|
|
166
|
+
};
|
|
158
167
|
type Mode = "light" | "dark";
|
|
159
168
|
interface ModeProviderProps {
|
|
160
169
|
children: ReactNode;
|
|
@@ -172,7 +181,11 @@ interface ScreenSizeContextValue {
|
|
|
172
181
|
windowWidth: number;
|
|
173
182
|
windowHeight: number;
|
|
174
183
|
}
|
|
184
|
+
/**
|
|
185
|
+
* @deprecated Direct use of ScreenSizeContext is deprecated. Please use useScreenSize hook instead.
|
|
186
|
+
*/
|
|
175
187
|
declare const ScreenSizeContext: react.Context<ScreenSizeContextValue>;
|
|
188
|
+
declare function useScreenSize(): ScreenSizeContextValue;
|
|
176
189
|
declare function ScreenSizeProvider({ children, largeScreenWidth, largeScreenHeight }: ScreenSizeProps): react_jsx_runtime.JSX.Element;
|
|
177
190
|
|
|
178
|
-
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, type Mode, ModeContext, ModeProvider, type ModeProviderProps, type NavItemBottom, type NavMenuItem, NavigationBottom, type NavigationBottomProps, NavigationDrawer, type NavigationDrawerProps, PopoverText, type PopoverTextProps, ReactPlayground, type ReactPlaygroundProps, ScreenSizeContext, type ScreenSizeContextValue, type ScreenSizeProps, ScreenSizeProvider, SwitchWithIcons, type SwitchWithIconsProps };
|
|
191
|
+
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, type Mode, ModeContext, ModeProvider, type ModeProviderProps, type NavItemBottom, type NavMenuItem, NavigationBottom, type NavigationBottomProps, NavigationDrawer, type NavigationDrawerProps, PopoverText, type PopoverTextProps, ReactPlayground, type ReactPlaygroundProps, ScreenSizeContext, type ScreenSizeContextValue, type ScreenSizeProps, ScreenSizeProvider, SwitchWithIcons, type SwitchWithIconsProps, useHash, useMode, useScreenSize };
|
package/dist/index.d.ts
CHANGED
|
@@ -151,10 +151,19 @@ interface SwitchWithIconsProps extends Omit<SwitchProps, "icon" | "checkedIcon">
|
|
|
151
151
|
}
|
|
152
152
|
declare function SwitchWithIcons({ checkedIcon: CheckedIcon, checkedIconStyles, uncheckedIcon: UncheckedIcon, uncheckedIconStyles, ...switchProps }: SwitchWithIconsProps): react_jsx_runtime.JSX.Element;
|
|
153
153
|
|
|
154
|
+
declare function useHash<S extends string>(initialHash: S | undefined): [S, Dispatch<SetStateAction<S>>];
|
|
155
|
+
|
|
156
|
+
/**
|
|
157
|
+
* @deprecated Direct use of ModeContext is deprecated. Please use useMode hook instead.
|
|
158
|
+
*/
|
|
154
159
|
declare const ModeContext: react.Context<{
|
|
155
160
|
toggleMode: () => void;
|
|
156
161
|
mode: string;
|
|
157
162
|
}>;
|
|
163
|
+
declare function useMode(): {
|
|
164
|
+
toggleMode: () => void;
|
|
165
|
+
mode: string;
|
|
166
|
+
};
|
|
158
167
|
type Mode = "light" | "dark";
|
|
159
168
|
interface ModeProviderProps {
|
|
160
169
|
children: ReactNode;
|
|
@@ -172,7 +181,11 @@ interface ScreenSizeContextValue {
|
|
|
172
181
|
windowWidth: number;
|
|
173
182
|
windowHeight: number;
|
|
174
183
|
}
|
|
184
|
+
/**
|
|
185
|
+
* @deprecated Direct use of ScreenSizeContext is deprecated. Please use useScreenSize hook instead.
|
|
186
|
+
*/
|
|
175
187
|
declare const ScreenSizeContext: react.Context<ScreenSizeContextValue>;
|
|
188
|
+
declare function useScreenSize(): ScreenSizeContextValue;
|
|
176
189
|
declare function ScreenSizeProvider({ children, largeScreenWidth, largeScreenHeight }: ScreenSizeProps): react_jsx_runtime.JSX.Element;
|
|
177
190
|
|
|
178
|
-
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, type Mode, ModeContext, ModeProvider, type ModeProviderProps, type NavItemBottom, type NavMenuItem, NavigationBottom, type NavigationBottomProps, NavigationDrawer, type NavigationDrawerProps, PopoverText, type PopoverTextProps, ReactPlayground, type ReactPlaygroundProps, ScreenSizeContext, type ScreenSizeContextValue, type ScreenSizeProps, ScreenSizeProvider, SwitchWithIcons, type SwitchWithIconsProps };
|
|
191
|
+
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, type Mode, ModeContext, ModeProvider, type ModeProviderProps, type NavItemBottom, type NavMenuItem, NavigationBottom, type NavigationBottomProps, NavigationDrawer, type NavigationDrawerProps, PopoverText, type PopoverTextProps, ReactPlayground, type ReactPlaygroundProps, ScreenSizeContext, type ScreenSizeContextValue, type ScreenSizeProps, ScreenSizeProvider, SwitchWithIcons, type SwitchWithIconsProps, useHash, useMode, useScreenSize };
|
package/dist/index.js
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
var ae=Object.defineProperty,pe=Object.defineProperties;var se=Object.getOwnPropertyDescriptors;var k=Object.getOwnPropertySymbols;var z=Object.prototype.hasOwnProperty,H=Object.prototype.propertyIsEnumerable;var W=(e,o,t)=>o in e?ae(e,o,{enumerable:!0,configurable:!0,writable:!0,value:t}):e[o]=t,i=(e,o)=>{for(var t in o||(o={}))z.call(o,t)&&W(e,t,o[t]);if(k)for(var t of k(o))H.call(o,t)&&W(e,t,o[t]);return e},c=(e,o)=>pe(e,se(o));var x=(e,o)=>{var t={};for(var r in e)z.call(e,r)&&o.indexOf(r)<0&&(t[r]=e[r]);if(e!=null&&k)for(var r of k(e))o.indexOf(r)<0&&H.call(e,r)&&(t[r]=e[r]);return t};import me from"@mui/icons-material/ArrowDropDown";import le from"@mui/icons-material/ArrowDropUp";import de from"@mui/material/Box";import M from"@mui/material/ButtonBase";import ce from"@mui/material/Collapse";import{useEffect as ue,useState as fe}from"react";import{jsx as T,jsxs as V}from"react/jsx-runtime";function ge({isInitiallyOpen:e,onOpen:o,onClose:t,children:r,buttonStyles:a,buttonContents:n,buttonComponent:p=M,collapseProps:s,openIcon:d=T(le,{}),closedIcon:f=T(me,{}),useDefaultStyling:m=p===M}){let[l,u]=fe(!!e);return ue(()=>{l&&o?o():!l&&t&&t()},[l]),V(de,{children:[V(p,{onClick:()=>{u(y=>!y)},sx:m?i({width:"100%",display:"flex",alignItems:"center",justifyContent:"center",paddingY:1.5,paddingX:2,textAlign:"center","&:hover":p===M?{backgroundColor:"action.hover"}:null},a):a,"aria-expanded":l,children:[n,l?d:f]}),T(ce,c(i({in:l},s),{children:r}))]})}var xe=ge;import Le from"@mui/icons-material/DarkMode";import Ce from"@mui/icons-material/LightMode";import Be from"@mui/material/IconButton";import Me from"@mui/material/Tooltip";import{useContext as Te}from"react";import ye from"@mui/material/CssBaseline";import{createTheme as he,ThemeProvider as ve}from"@mui/material/styles";import{createContext as Ie,useMemo as Pe,useState as we}from"react";import{jsx as X,jsxs as ke}from"react/jsx-runtime";var I=Ie({toggleMode:()=>{},mode:"dark"});function be({children:e,mode:o="dark"}){let[t,r]=we(o),a=Pe(()=>he({palette:{mode:t}}),[t]);return X(I.Provider,{value:{mode:t,toggleMode:()=>{r(n=>n==="light"?"dark":"light")}},children:ke(ve,{theme:a,children:[X(ye,{}),e]})})}var Se=be;import{jsx as L}from"react/jsx-runtime";function De(){let{mode:e,toggleMode:o}=Te(I);return L(Me,{title:`Enable ${e==="dark"?"light":"dark"} mode`,children:L(Be,{sx:{marginLeft:"auto"},onClick:o,"aria-label":`Enable ${e==="dark"?"light":"dark"} mode`,children:e==="dark"?L(Ce,{}):L(Le,{})})})}var Ne=De;import Re from"@mui/icons-material/ArrowDropDown";import Ee from"@mui/icons-material/ArrowDropUp";import G from"@mui/material/Box";import $ from"@mui/material/Button";import Fe from"@mui/material/Menu";import{useEffect as Oe,useMemo as Ae,useState as We}from"react";import{jsx as b,jsxs as Ve}from"react/jsx-runtime";function ze({children:e,button:o=$,buttonChildren:t="Menu",buttonProps:r,isOpenIcon:a=b(Ee,{}),isClosedIcon:n=b(Re,{}),onOpen:p,onClose:s}){let[d,f]=We(null),m=Ae(()=>!!d,[d]),l=c(i({},r),{onClick:u=>{f(u.currentTarget)},"aria-controls":m?"dropdown-menu":void 0,"aria-haspopup":"true","aria-expanded":m});return o===$&&(l.endIcon=m?a:n),Oe(()=>{m&&p?p():!m&&s&&s()},[m,p,s]),Ve(G,{children:[b(o,c(i({},l),{children:t})),b(Fe,{id:"dropdown-menu",anchorEl:d,open:m,onClose:()=>{f(null)},children:typeof e=="function"?b(G,{children:e(()=>{f(null)})}):e})]})}var He=ze;import Xe from"@mui/material/Link";import{jsx as Ue}from"react/jsx-runtime";function Ge(n){var p=n,{href:e,children:o,target:t="_blank",rel:r="noopener noreferrer"}=p,a=x(p,["href","children","target","rel"]);return Ue(Xe,c(i({component:"a",href:e,target:t,rel:r},a),{children:o}))}var $e=Ge;import Je from"@mui/icons-material/CloudUpload";import Ye from"@mui/material/Button";import{styled as U}from"@mui/material/styles";import{useState as _e}from"react";import{jsx as D,jsxs as je}from"react/jsx-runtime";var Ke={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"},qe=U("input")({clip:"rect(0 0 0 0)",clipPath:"inset(50%)",height:1,overflow:"hidden",position:"absolute",bottom:0,left:0,whiteSpace:"nowrap",width:1}),Qe=U("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 Ze(p){var s=p,{onFileInput:e,label:o="Upload files",multiple:t,accept:r,useDropzone:a}=s,n=x(s,["onFileInput","label","multiple","accept","useDropzone"]);var l;let[d,f]=_e(!1),m=je(Ye,c(i({variant:"contained",component:"label","aria-label":"File upload button",onKeyDown:u=>{var y;(u.key==="Enter"||u.key===" ")&&(u.preventDefault(),(y=document.getElementById("file-input"))==null||y.click())}},n),{startIcon:(l=n.startIcon)!=null?l:D(Je,{}),children:[o,D(qe,{id:"file-input",type:"file",onChange:u=>{var w;let y=u.target;e(Array.from((w=y.files)!=null?w:[])),y.value=""},multiple:t,accept:r==null?void 0:r.join(","),disabled:n.disabled})]}));return a?D(Qe,{$dragging:d,onDragOver:u=>{u.preventDefault(),!n.disabled&&f(!0)},onDragLeave:u=>{u.preventDefault(),f(!1)},onDrop:u=>{var w;if(u.preventDefault(),f(!1),n.disabled)return;let y=Array.from((w=u.dataTransfer.files)!=null?w:[]);e(y)},children:m}):m}var N=Ze;import eo from"@mui/icons-material/Delete";import oo from"@mui/material/Box";import to from"@mui/material/IconButton";import ro from"@mui/material/List";import no from"@mui/material/ListItem";import io from"@mui/material/ListItemText";import{jsx as P,jsxs as so}from"react/jsx-runtime";function ao(r){var a=r,{files:e,setFiles:o}=a,t=x(a,["files","setFiles"]);function n(s){o(d=>[...d,...s])}let p=c(i({},t),{onFileInput:n});return(p==null?void 0:p.multiple)===void 0&&(p.multiple=!0),so(oo,{children:[P(N,i({},p)),P(ro,{children:e.map(s=>P(no,{secondaryAction:P(to,{"aria-label":"Delete",edge:"end",onClick:()=>{o(d=>d.filter(f=>f!==s))},children:P(eo,{})}),children:P(io,{primary:s.name})},s.name))})]})}var po=ao;import mo from"@mui/material/Box";import lo from"@mui/material/Popover";import{useId as co,useState as uo}from"react";import{jsx as J,jsxs as xo}from"react/jsx-runtime";function fo({icon:e,onOpen:o,onClose:t,iconProps:r,children:a}){let[n,p]=uo(null),s=!!n,d=co();function f(l){p(l.currentTarget),o&&o()}function m(){p(null),t&&t()}return xo(mo,{children:[J(e,i({"aria-owns":s?d:void 0,"aria-haspopup":"true",onMouseEnter:f,onMouseLeave:m},r)),J(lo,{id:d,sx:{pointerEvents:"none"},open:s,anchorEl:n,anchorOrigin:{vertical:"bottom",horizontal:"left"},transformOrigin:{vertical:"top",horizontal:"left"},onClose:m,disableRestoreFocus:!0,children:a})]})}var go=fo;import yo from"@mui/material/Link";import{Link as ho}from"react-router-dom";import{jsx as Io}from"react/jsx-runtime";function vo(r){var a=r,{to:e,children:o}=a,t=x(a,["to","children"]);return Io(yo,c(i({component:ho,to:e},t),{children:o}))}var R=vo;import Po from"@mui/material/ListItemButton";import{jsx as So}from"react/jsx-runtime";function wo(t){var r=t,{children:e}=r,o=x(r,["children"]);return So(Po,c(i({component:R},o),{children:e}))}var bo=wo;import ko from"@mui/material/BottomNavigation";import Lo from"@mui/material/BottomNavigationAction";import Co from"@mui/material/Box";import Bo from"@mui/material/Paper";import{useState as Mo}from"react";import{Link as To}from"react-router-dom";import{Fragment as Ro,jsx as C,jsxs as Eo}from"react/jsx-runtime";function Do({children:e,navItems:o}){let[t,r]=Mo("");return Eo(Ro,{children:[C(Co,{sx:{paddingBottom:7},children:e}),C(Bo,{sx:{position:"fixed",bottom:0,left:0,right:0},children:C(ko,{showLabels:!0,value:t,onChange:(a,n)=>{r(n)},children:o.map(a=>C(Lo,c(i({},a),{component:To}),a.value))})})]})}var No=Do;import{truncate as Y}from"@alextheman/utility";import Fo from"@mui/icons-material/ChevronLeft";import Oo from"@mui/icons-material/ChevronRight";import Ao from"@mui/icons-material/Menu";import Wo from"@mui/material/AppBar";import _ from"@mui/material/Box";import zo from"@mui/material/CssBaseline";import K from"@mui/material/Divider";import Ho from"@mui/material/Drawer";import q from"@mui/material/IconButton";import Vo from"@mui/material/List";import Xo from"@mui/material/ListItem";import Go from"@mui/material/ListItemButton";import $o from"@mui/material/ListItemIcon";import Uo from"@mui/material/ListItemText";import{styled as F,useTheme as Jo}from"@mui/material/styles";import Yo from"@mui/material/Toolbar";import E from"@mui/material/Typography";import{Fragment as _o,useState as Ko}from"react";import{Link as qo,useLocation as Qo}from"react-router-dom";import{jsx as g,jsxs as v}from"react/jsx-runtime";var B=240;function Q(e){return{width:B,transition:e.transitions.create("width",{easing:e.transitions.easing.sharp,duration:e.transitions.duration.enteringScreen}),overflowX:"hidden"}}function Z(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 j=F("div")(({theme:e})=>i({display:"flex",alignItems:"center",justifyContent:"flex-end",padding:e.spacing(0,1)},e.mixins.toolbar)),Zo=F(Wo,{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:B,width:`calc(100% - ${B}px)`,transition:e.transitions.create(["width","margin"],{easing:e.transitions.easing.sharp,duration:e.transitions.duration.enteringScreen})}}]})),jo=F(Ho,{shouldForwardProp:e=>e!=="open"})(({theme:e})=>({width:B,flexShrink:0,whiteSpace:"nowrap",boxSizing:"border-box",variants:[{props:({open:o})=>o,style:c(i({},Q(e)),{"& .MuiDrawer-paper":Q(e)})},{props:({open:o})=>!o,style:c(i({},Z(e)),{"& .MuiDrawer-paper":Z(e)})}]}));function et({title:e,navItems:o,children:t,headerElements:r}){let a=Jo(),[n,p]=Ko(!0),s=Qo();function d(){p(!0)}function f(){p(!1)}return v(_,{sx:{display:"flex"},children:[g(zo,{}),g(Zo,{position:"fixed",open:n,children:v(Yo,{children:[g(q,{color:"inherit","aria-label":"open drawer",onClick:d,edge:"start",sx:[{marginRight:5},n&&{display:"none"}],children:g(Ao,{})}),g(E,{variant:"h6",noWrap:!0,component:"div",children:e}),r]})}),v(jo,{variant:"permanent",open:n,children:[g(j,{children:g(q,{onClick:f,children:a.direction==="rtl"?g(Oo,{}):g(Fo,{})})}),g(K,{}),o.map(m=>v(_o,{children:[v(Vo,{children:[g(E,{variant:n?"h5":"h6",paddingLeft:n?2:1,children:n?m.category:Y(m.category,4)}),m.options.map(l=>g(Xo,{disablePadding:!0,sx:{display:"block"},children:v(Go,{sx:[{minHeight:48,px:2.5},n?{justifyContent:"initial"}:{justifyContent:"center"}],component:qo,to:l.to,selected:s.pathname===l.to,children:[g($o,{sx:[{minWidth:0,justifyContent:"center"},n?{mr:3}:{mr:"auto"}],children:l.icon?l.icon:n?null:g(E,{children:Y(l.label,4)})}),g(Uo,{primary:l.label,sx:[n?{opacity:1}:{opacity:0}]})]})},l.to))]}),g(K,{})]},m.category))]}),v(_,{component:"main",sx:{flexGrow:1,p:3},children:[g(j,{}),t]})]})}var ot=et;import tt from"@mui/material/Typography";import{Fragment as it,jsx as ee}from"react/jsx-runtime";function rt(r){var a=r,{text:e,sx:o}=a,t=x(a,["text","sx"]);return ee(it,{children:e.split(`
|
|
2
|
-
`).map((
|
|
1
|
+
var se=Object.defineProperty,me=Object.defineProperties;var le=Object.getOwnPropertyDescriptors;var L=Object.getOwnPropertySymbols;var V=Object.prototype.hasOwnProperty,X=Object.prototype.propertyIsEnumerable;var H=(e,o,t)=>o in e?se(e,o,{enumerable:!0,configurable:!0,writable:!0,value:t}):e[o]=t,i=(e,o)=>{for(var t in o||(o={}))V.call(o,t)&&H(e,t,o[t]);if(L)for(var t of L(o))X.call(o,t)&&H(e,t,o[t]);return e},d=(e,o)=>me(e,le(o));var x=(e,o)=>{var t={};for(var n in e)V.call(e,n)&&o.indexOf(n)<0&&(t[n]=e[n]);if(e!=null&&L)for(var n of L(e))o.indexOf(n)<0&&X.call(e,n)&&(t[n]=e[n]);return t};import ce from"@mui/icons-material/ArrowDropDown";import de from"@mui/icons-material/ArrowDropUp";import ue from"@mui/material/Box";import M from"@mui/material/ButtonBase";import fe from"@mui/material/Collapse";import{useEffect as ge,useState as xe}from"react";import{jsx as T,jsxs as G}from"react/jsx-runtime";function he({isInitiallyOpen:e,onOpen:o,onClose:t,children:n,buttonStyles:a,buttonContents:r,buttonComponent:p=M,collapseProps:s,openIcon:c=T(de,{}),closedIcon:f=T(ce,{}),useDefaultStyling:m=p===M}){let[l,u]=xe(!!e);return ge(()=>{l&&o?o():!l&&t&&t()},[l]),G(ue,{children:[G(p,{onClick:()=>{u(h=>!h)},sx:m?i({width:"100%",display:"flex",alignItems:"center",justifyContent:"center",paddingY:1.5,paddingX:2,textAlign:"center","&:hover":p===M?{backgroundColor:"action.hover"}:null},a):a,"aria-expanded":l,children:[r,l?c:f]}),T(fe,d(i({in:l},s),{children:n}))]})}var ye=he;import Fe from"@mui/icons-material/DarkMode";import Oe from"@mui/icons-material/LightMode";import Ae from"@mui/material/IconButton";import ze from"@mui/material/Tooltip";import ve from"@mui/material/CssBaseline";import{createTheme as Ie,ThemeProvider as Pe}from"@mui/material/styles";import{createContext as we,useContext as Se,useMemo as be,useState as Le}from"react";import{jsx as $,jsxs as Be}from"react/jsx-runtime";var D=we({toggleMode:()=>{},mode:"dark"});function w(){return Se(D)}function ke({children:e,mode:o="dark"}){let[t,n]=Le(o),a=be(()=>Ie({palette:{mode:t}}),[t]);return $(D.Provider,{value:{mode:t,toggleMode:()=>{n(r=>r==="light"?"dark":"light")}},children:Be(Pe,{theme:a,children:[$(ve,{}),e]})})}var Ce=ke;import{createContext as Me,useContext as Te,useEffect as U,useState as N}from"react";import{jsx as Ee}from"react/jsx-runtime";var R=Me({windowWidth:0,windowHeight:0,isLargeScreen:!1});function De(){return Te(R)}function Ne({children:e,largeScreenWidth:o,largeScreenHeight:t}){let[n,a]=N(window.innerWidth),[r,p]=N(window.innerHeight);function s(m,l,u=669,h=600){return m>u&&l>h}let[c,f]=N(s(window.innerWidth,window.innerHeight,o,t));return U(()=>{function m(){a(window.innerWidth),p(window.innerHeight)}return m(),window.addEventListener("resize",m),()=>{window.removeEventListener("resize",m)}},[]),U(()=>{f(s(n,r,o,t))},[n,r,o,t]),Ee(R.Provider,{value:{isLargeScreen:c,windowWidth:n,windowHeight:r},children:e})}var Re=Ne;import{jsx as k}from"react/jsx-runtime";function We(){let{mode:e,toggleMode:o}=w();return k(ze,{title:`Enable ${e==="dark"?"light":"dark"} mode`,children:k(Ae,{sx:{marginLeft:"auto"},onClick:o,"aria-label":`Enable ${e==="dark"?"light":"dark"} mode`,children:e==="dark"?k(Oe,{}):k(Fe,{})})})}var He=We;import Ve from"@mui/icons-material/ArrowDropDown";import Xe from"@mui/icons-material/ArrowDropUp";import J from"@mui/material/Box";import Y from"@mui/material/Button";import Ge from"@mui/material/Menu";import{useEffect as $e,useMemo as Ue,useState as Je}from"react";import{jsx as S,jsxs as Ke}from"react/jsx-runtime";function Ye({children:e,button:o=Y,buttonChildren:t="Menu",buttonProps:n,isOpenIcon:a=S(Xe,{}),isClosedIcon:r=S(Ve,{}),onOpen:p,onClose:s}){let[c,f]=Je(null),m=Ue(()=>!!c,[c]),l=d(i({},n),{onClick:u=>{f(u.currentTarget)},"aria-controls":m?"dropdown-menu":void 0,"aria-haspopup":"true","aria-expanded":m});return o===Y&&(l.endIcon=m?a:r),$e(()=>{m&&p?p():!m&&s&&s()},[m,p,s]),Ke(J,{children:[S(o,d(i({},l),{children:t})),S(Ge,{id:"dropdown-menu",anchorEl:c,open:m,onClose:()=>{f(null)},children:typeof e=="function"?S(J,{children:e(()=>{f(null)})}):e})]})}var _e=Ye;import qe from"@mui/material/Link";import{jsx as je}from"react/jsx-runtime";function Qe(r){var p=r,{href:e,children:o,target:t="_blank",rel:n="noopener noreferrer"}=p,a=x(p,["href","children","target","rel"]);return je(qe,d(i({component:"a",href:e,target:t,rel:n},a),{children:o}))}var Ze=Qe;import eo from"@mui/icons-material/CloudUpload";import oo from"@mui/material/Button";import{styled as _}from"@mui/material/styles";import{useState as to}from"react";import{jsx as E,jsxs as po}from"react/jsx-runtime";var ro={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"},no=_("input")({clip:"rect(0 0 0 0)",clipPath:"inset(50%)",height:1,overflow:"hidden",position:"absolute",bottom:0,left:0,whiteSpace:"nowrap",width:1}),io=_("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 ao(p){var s=p,{onFileInput:e,label:o="Upload files",multiple:t,accept:n,useDropzone:a}=s,r=x(s,["onFileInput","label","multiple","accept","useDropzone"]);var l;let[c,f]=to(!1),m=po(oo,d(i({variant:"contained",component:"label","aria-label":"File upload button",onKeyDown:u=>{var h;(u.key==="Enter"||u.key===" ")&&(u.preventDefault(),(h=document.getElementById("file-input"))==null||h.click())}},r),{startIcon:(l=r.startIcon)!=null?l:E(eo,{}),children:[o,E(no,{id:"file-input",type:"file",onChange:u=>{var P;let h=u.target;e(Array.from((P=h.files)!=null?P:[])),h.value=""},multiple:t,accept:n==null?void 0:n.join(","),disabled:r.disabled})]}));return a?E(io,{$dragging:c,onDragOver:u=>{u.preventDefault(),!r.disabled&&f(!0)},onDragLeave:u=>{u.preventDefault(),f(!1)},onDrop:u=>{var P;if(u.preventDefault(),f(!1),r.disabled)return;let h=Array.from((P=u.dataTransfer.files)!=null?P:[]);e(h)},children:m}):m}var F=ao;import so from"@mui/icons-material/Delete";import mo from"@mui/material/Box";import lo from"@mui/material/IconButton";import co from"@mui/material/List";import uo from"@mui/material/ListItem";import fo from"@mui/material/ListItemText";import{jsx as I,jsxs as ho}from"react/jsx-runtime";function go(n){var a=n,{files:e,setFiles:o}=a,t=x(a,["files","setFiles"]);function r(s){o(c=>[...c,...s])}let p=d(i({},t),{onFileInput:r});return(p==null?void 0:p.multiple)===void 0&&(p.multiple=!0),ho(mo,{children:[I(F,i({},p)),I(co,{children:e.map(s=>I(uo,{secondaryAction:I(lo,{"aria-label":"Delete",edge:"end",onClick:()=>{o(c=>c.filter(f=>f!==s))},children:I(so,{})}),children:I(fo,{primary:s.name})},s.name))})]})}var xo=go;import yo from"@mui/material/Box";import vo from"@mui/material/Popover";import{useId as Io,useState as Po}from"react";import{jsx as K,jsxs as bo}from"react/jsx-runtime";function wo({icon:e,onOpen:o,onClose:t,iconProps:n,children:a}){let[r,p]=Po(null),s=!!r,c=Io();function f(l){p(l.currentTarget),o&&o()}function m(){p(null),t&&t()}return bo(yo,{children:[K(e,i({"aria-owns":s?c:void 0,"aria-haspopup":"true",onMouseEnter:f,onMouseLeave:m},n)),K(vo,{id:c,sx:{pointerEvents:"none"},open:s,anchorEl:r,anchorOrigin:{vertical:"bottom",horizontal:"left"},transformOrigin:{vertical:"top",horizontal:"left"},onClose:m,disableRestoreFocus:!0,children:a})]})}var So=wo;import Lo from"@mui/material/Link";import{Link as ko}from"react-router-dom";import{jsx as Bo}from"react/jsx-runtime";function Co(n){var a=n,{to:e,children:o}=a,t=x(a,["to","children"]);return Bo(Lo,d(i({component:ko,to:e},t),{children:o}))}var O=Co;import Mo from"@mui/material/ListItemButton";import{jsx as No}from"react/jsx-runtime";function To(t){var n=t,{children:e}=n,o=x(n,["children"]);return No(Mo,d(i({component:O},o),{children:e}))}var Do=To;import Ro from"@mui/material/BottomNavigation";import Eo from"@mui/material/BottomNavigationAction";import Fo from"@mui/material/Box";import Oo from"@mui/material/Paper";import{useState as Ao}from"react";import{Link as zo}from"react-router-dom";import{Fragment as Vo,jsx as C,jsxs as Xo}from"react/jsx-runtime";function Wo({children:e,navItems:o}){let[t,n]=Ao("");return Xo(Vo,{children:[C(Fo,{sx:{paddingBottom:7},children:e}),C(Oo,{sx:{position:"fixed",bottom:0,left:0,right:0},children:C(Ro,{showLabels:!0,value:t,onChange:(a,r)=>{n(r)},children:o.map(a=>C(Eo,d(i({},a),{component:zo}),a.value))})})]})}var Ho=Wo;import{truncate as q}from"@alextheman/utility";import Go from"@mui/icons-material/ChevronLeft";import $o from"@mui/icons-material/ChevronRight";import Uo from"@mui/icons-material/Menu";import Jo from"@mui/material/AppBar";import Q from"@mui/material/Box";import Yo from"@mui/material/CssBaseline";import Z from"@mui/material/Divider";import _o from"@mui/material/Drawer";import j from"@mui/material/IconButton";import Ko from"@mui/material/List";import qo from"@mui/material/ListItem";import Qo from"@mui/material/ListItemButton";import Zo from"@mui/material/ListItemIcon";import jo from"@mui/material/ListItemText";import{styled as z,useTheme as et}from"@mui/material/styles";import ot from"@mui/material/Toolbar";import A from"@mui/material/Typography";import{Fragment as tt,useState as rt}from"react";import{Link as nt,useLocation as it}from"react-router-dom";import{jsx as g,jsxs as v}from"react/jsx-runtime";var B=240;function ee(e){return{width:B,transition:e.transitions.create("width",{easing:e.transitions.easing.sharp,duration:e.transitions.duration.enteringScreen}),overflowX:"hidden"}}function oe(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 te=z("div")(({theme:e})=>i({display:"flex",alignItems:"center",justifyContent:"flex-end",padding:e.spacing(0,1)},e.mixins.toolbar)),at=z(Jo,{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:B,width:`calc(100% - ${B}px)`,transition:e.transitions.create(["width","margin"],{easing:e.transitions.easing.sharp,duration:e.transitions.duration.enteringScreen})}}]})),pt=z(_o,{shouldForwardProp:e=>e!=="open"})(({theme:e})=>({width:B,flexShrink:0,whiteSpace:"nowrap",boxSizing:"border-box",variants:[{props:({open:o})=>o,style:d(i({},ee(e)),{"& .MuiDrawer-paper":ee(e)})},{props:({open:o})=>!o,style:d(i({},oe(e)),{"& .MuiDrawer-paper":oe(e)})}]}));function st({title:e,navItems:o,children:t,headerElements:n}){let a=et(),[r,p]=rt(!0),s=it();function c(){p(!0)}function f(){p(!1)}return v(Q,{sx:{display:"flex"},children:[g(Yo,{}),g(at,{position:"fixed",open:r,children:v(ot,{children:[g(j,{color:"inherit","aria-label":"open drawer",onClick:c,edge:"start",sx:[{marginRight:5},r&&{display:"none"}],children:g(Uo,{})}),g(A,{variant:"h6",noWrap:!0,component:"div",children:e}),n]})}),v(pt,{variant:"permanent",open:r,children:[g(te,{children:g(j,{onClick:f,children:a.direction==="rtl"?g($o,{}):g(Go,{})})}),g(Z,{}),o.map(m=>v(tt,{children:[v(Ko,{children:[g(A,{variant:r?"h5":"h6",paddingLeft:r?2:1,children:r?m.category:q(m.category,4)}),m.options.map(l=>g(qo,{disablePadding:!0,sx:{display:"block"},children:v(Qo,{sx:[{minHeight:48,px:2.5},r?{justifyContent:"initial"}:{justifyContent:"center"}],component:nt,to:l.to,selected:s.pathname===l.to,children:[g(Zo,{sx:[{minWidth:0,justifyContent:"center"},r?{mr:3}:{mr:"auto"}],children:l.icon?l.icon:r?null:g(A,{children:q(l.label,4)})}),g(jo,{primary:l.label,sx:[r?{opacity:1}:{opacity:0}]})]})},l.to))]}),g(Z,{})]},m.category))]}),v(Q,{component:"main",sx:{flexGrow:1,p:3},children:[g(te,{}),t]})]})}var mt=st;import lt from"@mui/material/Typography";import{Fragment as ut,jsx as re}from"react/jsx-runtime";function ct(n){var a=n,{text:e,sx:o}=a,t=x(a,["text","sx"]);return re(ut,{children:e.split(`
|
|
2
|
+
`).map((r,p)=>re(lt,d(i({sx:i({margin:1},o)},t),{children:r}),p))})}var dt=ct;import W from"@mui/material/Box";import ne from"@mui/material/Typography";import{stripIndent as ft}from"common-tags";import{LiveEditor as gt,LiveError as xt,LivePreview as ht,LiveProvider as yt}from"react-live";import{jsx as y,jsxs as ie}from"react/jsx-runtime";function vt({code:e,scope:o,previewStyles:t,noInline:n,enableTypeScript:a,language:r}){let{mode:p}=w(),s={backgroundColor:p==="dark"?"black":"white",border:.3,borderRadius:1,padding:2,borderColor:"darkgray"},c=t?i(i({},s),t):i({},s);return y(W,{sx:{borderRadius:1,border:.5,padding:2},children:ie(yt,{code:ft(e),scope:o,noInline:n,enableTypeScript:a,language:r,children:[y(ne,{variant:"h5",children:"Code"}),y(W,{sx:{border:.3,borderRadius:.3,borderColor:"darkgray"},children:y(gt,{})}),y("br",{}),y(ne,{variant:"h5",children:"Result"}),ie(W,{sx:c,children:[y(ht,{}),y(xt,{})]})]})})}var It=vt;import ae from"@mui/material/Box";import{styled as Pt}from"@mui/material/styles";import wt from"@mui/material/Switch";import{jsx as b}from"react/jsx-runtime";var St=Pt(wt)(()=>({padding:8,"& .MuiSwitch-track":{borderRadius:11,"&::before, &::after":{content:'""',position:"absolute",top:"50%",transform:"translateY(-50%)",fontSize:16,width:28,height:28}}}));function bt(r){var p=r,{checkedIcon:e,checkedIconStyles:o,uncheckedIcon:t,uncheckedIconStyles:n}=p,a=x(p,["checkedIcon","checkedIconStyles","uncheckedIcon","uncheckedIconStyles"]);let s={borderRadius:"50%",borderColor:"white",backgroundColor:"white",display:"flex",alignItems:"center",justifyContent:"center",padding:.25},c={color:"black",maxWidth:16.5,maxHeight:16.5};return b(St,i({checkedIcon:b(ae,{sx:s,children:b(e,{style:i(i({},c),o)})}),icon:b(ae,{sx:s,children:b(t,{style:i(i({},c),n)})})},a))}var Lt=bt;import{useCallback as pe,useEffect as kt,useState as Ct}from"react";function Bt(e){let[o,t]=Ct(()=>{let r=window.location.hash.replace("#","");return e&&r===""?e:r}),n=pe(()=>{let r=window.location.hash.replace("#","");t(e&&r===""?e:r)},[t,e]);kt(()=>(window.addEventListener("hashchange",n),()=>{window.removeEventListener("hashchange",n)}),[n]);let a=pe(r=>{let p=typeof r=="function"?r(o):r;p!==o&&(window.location.hash=p)},[o]);return[o,a]}var Mt=Bt;export{ye as CollapsableItem,He as DarkModeToggle,_e as DropdownMenu,Ze as ExternalLink,F as FileInput,xo as FileInputList,ro as FileType,So as IconWithPopover,O as InternalLink,Do as ListItemInternalLink,D as ModeContext,Ce as ModeProvider,Ho as NavigationBottom,mt as NavigationDrawer,dt as PopoverText,It as ReactPlayground,R as ScreenSizeContext,Re as ScreenSizeProvider,Lt as SwitchWithIcons,Mt as useHash,w as useMode,De as useScreenSize};
|
|
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/ModeProvider.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/NavigationBottom.tsx","../src/components/NavigationDrawer.tsx","../src/components/PopoverText.tsx","../src/components/ReactPlayground.tsx","../src/providers/ScreenSizeProvider.tsx","../src/components/SwitchWithIcons.tsx"],"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\";\nimport { useContext } from \"react\";\n\nimport { ModeContext } from \"src/providers/ModeProvider\";\n\nfunction DarkModeToggle() {\n const { mode, toggleMode } = useContext(ModeContext);\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 CssBaseline from \"@mui/material/CssBaseline\";\nimport { createTheme, ThemeProvider } from \"@mui/material/styles\";\nimport { createContext, useMemo, useState } from \"react\";\n\nexport const ModeContext = createContext({\n toggleMode: () => {},\n mode: \"dark\",\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 { 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 Link from \"@mui/material/Link\";\n\nexport interface ExternalLinkProps extends Omit<LinkProps, \"to\"> {\n href: string;\n children: ReactNode;\n}\n\nfunction ExternalLink({\n href,\n children,\n target = \"_blank\",\n rel = \"noopener noreferrer\",\n ...linkProps\n}: ExternalLinkProps) {\n return (\n <Link component={\"a\"} href={href} target={target} rel={rel} {...linkProps}>\n {children}\n </Link>\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 Link from \"@mui/material/Link\";\nimport { Link as ReactDOMLink } from \"react-router-dom\";\n\nexport interface InternalLinkProps extends Omit<LinkProps, \"href\"> {\n to: string;\n children: ReactNode;\n}\n\nfunction InternalLink({ to, children, ...linkProps }: InternalLinkProps) {\n return (\n <Link component={ReactDOMLink} to={to} {...linkProps}>\n {children}\n </Link>\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 { 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 { useContext } from \"react\";\nimport { LiveEditor, LiveError, LivePreview, LiveProvider } from \"react-live\";\n\nimport { ModeContext } 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 } = useContext(ModeContext);\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 { ReactNode } from \"react\";\n\nimport { createContext, 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\nexport const ScreenSizeContext = createContext<ScreenSizeContextValue>({\n windowWidth: 0,\n windowHeight: 0,\n isLargeScreen: false,\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 { 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"],"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","useContext","CssBaseline","createTheme","ThemeProvider","createContext","useMemo","useState","jsx","jsxs","ModeContext","ModeProvider","children","modeProp","mode","setMode","theme","prev","ModeProvider_default","jsx","DarkModeToggle","mode","toggleMode","useContext","ModeContext","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","Link","jsx","ExternalLink","_a","_b","href","children","target","rel","linkProps","__objRest","Link","__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","Link","ReactDOMLink","jsx","InternalLink","_a","_b","to","children","linkProps","__objRest","Link","__spreadProps","__spreadValues","ReactDOMLink","InternalLink_default","ListItemButton","jsx","ListItemInternalLink","_a","_b","children","listItemButtonProps","__objRest","ListItemButton","__spreadProps","__spreadValues","InternalLink_default","ListItemInternalLink_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","useContext","LiveEditor","LiveError","LivePreview","LiveProvider","createContext","useEffect","useState","jsx","ScreenSizeContext","ScreenSizeProvider","children","largeScreenWidth","largeScreenHeight","windowWidth","setWindowWidth","windowHeight","setWindowHeight","largeScreenCondition","width","height","isLargeScreen","setIsLargeScreen","setDimensions","ScreenSizeProvider_default","jsx","jsxs","ReactPlayground","code","scope","previewStyles","noInline","enableTypeScript","language","mode","useContext","ModeContext","defaultPreviewStyles","allPreviewStyles","__spreadValues","Box","LiveProvider","stripIndent","Typography","LiveEditor","LivePreview","LiveError","ReactPlayground_default","Box","styled","Switch","jsx","StyledSwitch","styled","Switch","SwitchWithIcons","_a","_b","CheckedIcon","checkedIconStyles","UncheckedIcon","uncheckedIconStyles","switchProps","__objRest","boxSx","defaultIconStyles","__spreadValues","Box","SwitchWithIcons_default"]}
|
|
1
|
+
{"version":3,"sources":["../src/components/CollapsableItem.tsx","../src/components/DarkModeToggle.tsx","../src/providers/ModeProvider.tsx","../src/providers/ScreenSizeProvider.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/NavigationBottom.tsx","../src/components/NavigationDrawer.tsx","../src/components/PopoverText.tsx","../src/components/ReactPlayground.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","/* eslint-disable @typescript-eslint/no-deprecated */\nimport 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\n/**\n * @deprecated Direct use of ModeContext is deprecated. Please use useMode hook instead.\n */\nexport const 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","/* eslint-disable @typescript-eslint/no-deprecated */\nimport 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\n/**\n * @deprecated Direct use of ScreenSizeContext is deprecated. Please use useScreenSize hook instead.\n */\nexport const 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 { 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 Link from \"@mui/material/Link\";\n\nexport interface ExternalLinkProps extends Omit<LinkProps, \"to\"> {\n href: string;\n children: ReactNode;\n}\n\nfunction ExternalLink({\n href,\n children,\n target = \"_blank\",\n rel = \"noopener noreferrer\",\n ...linkProps\n}: ExternalLinkProps) {\n return (\n <Link component={\"a\"} href={href} target={target} rel={rel} {...linkProps}>\n {children}\n </Link>\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 Link from \"@mui/material/Link\";\nimport { Link as ReactDOMLink } from \"react-router-dom\";\n\nexport interface InternalLinkProps extends Omit<LinkProps, \"href\"> {\n to: string;\n children: ReactNode;\n}\n\nfunction InternalLink({ to, children, ...linkProps }: InternalLinkProps) {\n return (\n <Link component={ReactDOMLink} to={to} {...linkProps}>\n {children}\n </Link>\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 { 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 { 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","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","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","Link","jsx","ExternalLink","_a","_b","href","children","target","rel","linkProps","__objRest","Link","__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","Link","ReactDOMLink","jsx","InternalLink","_a","_b","to","children","linkProps","__objRest","Link","__spreadProps","__spreadValues","ReactDOMLink","InternalLink_default","ListItemButton","jsx","ListItemInternalLink","_a","_b","children","listItemButtonProps","__objRest","ListItemButton","__spreadProps","__spreadValues","InternalLink_default","ListItemInternalLink_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","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": "4.0
|
|
3
|
+
"version": "4.2.0",
|
|
4
4
|
"description": "A package containing common React components used across my projects",
|
|
5
5
|
"license": "ISC",
|
|
6
6
|
"author": "alextheman",
|
|
@@ -18,33 +18,42 @@
|
|
|
18
18
|
"change-minor": "npm version minor -m \"Change version number to v%s\"",
|
|
19
19
|
"change-patch": "npm version patch -m \"Change version number to v%s\"",
|
|
20
20
|
"create-local-package": "npm run build && rm -f alextheman-components-*.tgz && npm pack",
|
|
21
|
-
"format": "
|
|
22
|
-
"
|
|
21
|
+
"format": "npm run format-prettier && npm run format-eslint",
|
|
22
|
+
"format-eslint": "eslint --fix --suppress-all \"src/**/*.{ts,tsx}\" \"package.json\" && rm -f eslint-suppressions.json",
|
|
23
|
+
"format-prettier": "npm run format-prettier-typescript && npm run format-prettier-javascript",
|
|
24
|
+
"format-prettier-javascript": "prettier --write \"./**/*.js\"",
|
|
25
|
+
"format-prettier-typescript": "prettier --write --parser typescript \"./**/*.{ts,tsx}\"",
|
|
26
|
+
"lint": "npm run lint-tsc && npm run lint-eslint && npm run lint-prettier",
|
|
27
|
+
"lint-eslint": "eslint \"src/**/*.{ts,tsx}\" \"package.json\"",
|
|
28
|
+
"lint-prettier": "npm run lint-prettier-typescript && npm run lint-prettier-javascript",
|
|
29
|
+
"lint-prettier-javascript": "prettier --check \"./**/*.js\"",
|
|
30
|
+
"lint-prettier-typescript": "prettier --check --parser typescript \"./**/*.{ts,tsx}\"",
|
|
31
|
+
"lint-tsc": "tsc --noEmit",
|
|
23
32
|
"storybook": "storybook dev -p 6006",
|
|
24
33
|
"test": "echo \"Error: no test specified\" && exit 1",
|
|
25
34
|
"update-dependencies": "bash -c 'npx npm-check-updates -u \"$@\" && npm install' --"
|
|
26
35
|
},
|
|
27
36
|
"dependencies": {
|
|
28
|
-
"@alextheman/utility": "^1.
|
|
37
|
+
"@alextheman/utility": "^1.19.1",
|
|
29
38
|
"common-tags": "^1.8.2",
|
|
30
39
|
"react-live": "^4.1.8"
|
|
31
40
|
},
|
|
32
41
|
"devDependencies": {
|
|
33
|
-
"@alextheman/eslint-plugin": "^1.14.
|
|
34
|
-
"@eslint/compat": "^1.
|
|
42
|
+
"@alextheman/eslint-plugin": "^1.14.2",
|
|
43
|
+
"@eslint/compat": "^1.4.0",
|
|
35
44
|
"@eslint/eslintrc": "^3.3.1",
|
|
36
|
-
"@eslint/js": "^9.
|
|
45
|
+
"@eslint/js": "^9.37.0",
|
|
37
46
|
"@types/common-tags": "^1.8.4",
|
|
38
|
-
"@types/node": "^24.
|
|
39
|
-
"@types/react": "^19.
|
|
40
|
-
"eslint": "^9.
|
|
47
|
+
"@types/node": "^24.6.2",
|
|
48
|
+
"@types/react": "^19.2.0",
|
|
49
|
+
"eslint": "^9.37.0",
|
|
41
50
|
"globals": "^16.4.0",
|
|
42
51
|
"husky": "^9.1.7",
|
|
43
52
|
"prettier": "^3.6.2",
|
|
44
53
|
"styled-components": "^6.1.19",
|
|
45
54
|
"tsup": "^8.5.0",
|
|
46
|
-
"typescript": "^5.9.
|
|
47
|
-
"typescript-eslint": "^8.
|
|
55
|
+
"typescript": "^5.9.3",
|
|
56
|
+
"typescript-eslint": "^8.45.0"
|
|
48
57
|
},
|
|
49
58
|
"peerDependencies": {
|
|
50
59
|
"@emotion/react": "^11.14.0",
|