@australiangreens/ag-internal-components 0.0.27 → 0.0.28
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/cjs/index.js +1 -1
- package/dist/cjs/index.js.map +1 -1
- package/dist/components/NavBar/index.d.ts.map +1 -1
- package/dist/esm/index.js +80 -78
- package/dist/esm/index.js.map +1 -1
- package/dist/providers/SaladBar/testWrappers.d.ts +2 -1
- package/dist/providers/SaladBar/testWrappers.d.ts.map +1 -1
- package/package.json +1 -1
package/dist/cjs/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";var Le=Object.defineProperty,$e=Object.defineProperties;var Re=Object.getOwnPropertyDescriptors;var z=Object.getOwnPropertySymbols;var le=Object.prototype.hasOwnProperty,de=Object.prototype.propertyIsEnumerable;var Y=(e,t,n)=>t in e?Le(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,o=(e,t)=>{for(var n in t||(t={}))le.call(t,n)&&Y(e,n,t[n]);if(z)for(var n of z(t))de.call(t,n)&&Y(e,n,t[n]);return e},T=(e,t)=>$e(e,Re(t));var ce=(e,t)=>{var n={};for(var a in e)le.call(e,a)&&t.indexOf(a)<0&&(n[a]=e[a]);if(e!=null&&z)for(var a of z(e))t.indexOf(a)<0&&de.call(e,a)&&(n[a]=e[a]);return n};var ue=(e,t,n)=>(Y(e,typeof t!="symbol"?t+"":t,n),n);Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const r=require("react/jsx-runtime"),l=require("react"),Me=require("@mui/material/Button"),qe=require("@mui/material/Paper"),He=require("@mui/material/Typography"),ze=require("@mui/material/CssBaseline"),B=require("@mui/material/styles"),We=require("@mui/material/Drawer"),Ge=require("@australiangreens/ag-error"),we=require("souvlaki"),Ue=require("@mui/material/List"),C=require("@mui/material"),Ve=require("@mui/icons-material/ArrowForward"),Xe=require("@mui/icons-material/ArrowBack"),Qe=require("@mui/material/Box"),Ke=require("@mui/material/IconButton"),Je=require("@mui/material/Container"),Ye=require("@mui/material/Snackbar"),Ze=require("@mui/material/Alert"),et=require("@mui/material/LinearProgress"),tt=require("@mui/material/CircularProgress"),u=e=>e&&e.__esModule?e:{default:e},nt=u(Me),rt=u(qe),L=u(He),ot=u(ze),Be=u(We),at=u(Ue),Ce=u(Ve),me=u(Xe),it=u(Qe),pe=u(Ke),st=u(Je),lt=u(Ye),dt=u(Ze),ct=u(et),ut=u(tt);function pt({text:e}){const[t,n]=l.useState(0);return r.jsxs(r.Fragment,{children:[r.jsx(L.default,{variant:"h6",color:"inherit",component:"div",sx:{fontSize:"22px"},children:"Hello world"}),r.jsx(L.default,{variant:"caption",display:"block",children:r.jsx("span",{children:"Just ensuring MUI is working as planned as a peer dependency. v0.0.11"})}),r.jsx(nt.default,{variant:"outlined",onClick:()=>n(a=>a+1),"aria-label":"Increment",children:"Hello I am a button"}),r.jsxs("p",{children:["This is some text: ",r.jsx("span",{children:e})]}),r.jsxs(rt.default,{children:["This number will incremember when button pressed: ",t]})]})}const te=330,ne=73,O="Navbar",I={root:`${O}-root`,menuButton:`${O}-menuButton`,hide:`${O}-hide`,content:`${O}-content`,userInfoHolder:`${O}-userInfoHolder`,settings:`${O}-settings`,pieChartIcon:`${O}-pieChartIcon`},ft=B.styled("div",{name:"NavBar"})(({theme:e})=>({[`&.${I.root}`]:{display:"flex"},[`& .${I.menuButton}`]:{marginRight:36},[`& .${I.hide}`]:{display:"none"},[`& .${I.content}`]:{flexGrow:1,padding:e.spacing(3)},[`& .${I.userInfoHolder}`]:{height:"148px",marginTop:"64px",marginBottom:"16px"}})),Se=()=>({position:"absolute",height:"100%",overflowX:"hidden",overflowY:"hidden",color:"white",backgroundColor:"black"}),gt=()=>o({width:te},Se()),ht=()=>o({width:ne},Se()),xt=B.styled(Be.default,{shouldForwardProp:e=>e!=="open"})(({theme:e,open:t})=>o(o({width:t?te:ne,flexShrink:0,whiteSpace:"nowrap",boxSizing:"border-box",zIndex:e.zIndex.drawer+100},t&&{"& .MuiDrawer-paper":gt()}),!t&&{"& .MuiDrawer-paper":ht()}));class G extends Ge.AgError{}ue(G,"errorName","ContextError");const ye=l.createContext(null),vt={},wt={},Te=({overrideState:e=vt,overrideActions:t=wt,children:n})=>{const[{open:a},d]=l.useState({open:!0}),g=l.useCallback(m=>{d({open:m})},[]),h=o(o({open:a,setOpen:g},e),t);return r.jsx(ye.Provider,{value:h,children:n})},Oe=()=>{const e=l.useContext(ye);if(e===null)throw new G("Error: Tried to useNavBar outside of a <NavBarProvider>");return e},be=(e={})=>o({open:!0},e),Bt=we.createHelper((e=be(),t={})=>({children:n})=>r.jsx(Te,{overrideState:e,overrideActions:t,children:n})),fe=7,Ct=B.styled(at.default)(({theme:e})=>({backgroundColor:"black",color:"white","& .MuiListItem-root":{padding:"unset"},"& .MuiListItemButton-root":{" .MuiListItemIcon-root":{color:"white",padding:`${fe}px`},"&.Mui-focusVisible":{backgroundColor:e.palette.grey[700]},"&.Mui-selected":{borderLeftStyle:"solid",borderLeftWidth:"7px",borderLeftColor:e.palette.primary.main,paddingLeft:`calc(${e.spacing(2)} - ${fe}px)`},"&:hover":{backgroundColor:e.palette.primary.dark},"&.Mui-selected.Mui-focusVisible":{backgroundColor:e.palette.grey[700]},"&.Mui-selected:hover":{backgroundColor:e.palette.primary.dark}}}));function mt({"data-testid":e,children:t}){const{open:n}=Oe();return r.jsxs(ft,{className:I.root,"data-testid":e,children:[r.jsx(ot.default,{}),r.jsx(xt,{variant:"permanent",anchor:"left",transitionDuration:null,open:n,children:t})]})}const St=24,yt=64,b="TopBar",f={topStripe:`${b}-topStripe`,titleBar:`${b}-titleBar`,titleSlider:`${b}-titleSlider`,titleText:`${b}-titleText`,leftPanelButton:`${b}-leftPanelButton`,rightPanelButton:`${b}-leftPanelButton`},Tt=C.styled("div",{shouldForwardProp:e=>!["leftPanel","rightPanel"].includes(e),name:b})(({theme:e,leftPanel:t,rightPanel:n})=>{var a,d;return{width:"100%",[`& .${f.topStripe}`]:{width:"100%",height:`${St}px`,backgroundColor:e.palette.primary.main},[`& .${f.titleBar}`]:{backgroundColor:e.palette.primary.light,height:`${yt}px`,padding:e.spacing(0,3),width:"100%"},[`& .${f.titleSlider}`]:o(o({height:"100%",display:"flex",alignItems:"center",color:"white",transition:e.transitions.create("margin",{easing:e.transitions.easing.sharp,duration:e.transitions.duration.leavingScreen}),[`& .${f.leftPanelButton}`]:{marginRight:e.spacing(2),flexGrow:0},[`& .${f.titleText}`]:{flexGrow:1},[`& .${f.rightPanelButton}`]:{flexGrow:0}},(t==null?void 0:t.open)&&{transition:e.transitions.create("margin",{easing:e.transitions.easing.easeOut,duration:e.transitions.duration.enteringScreen}),marginLeft:`${(a=t==null?void 0:t.width)!=null?a:0}px`}),(n==null?void 0:n.open)&&{transition:e.transitions.create("margin",{easing:e.transitions.easing.easeOut,duration:e.transitions.duration.enteringScreen}),marginRight:`${(d=n==null?void 0:n.width)!=null?d:0}px`})}});function Ot({titleText:e="",leftPanel:t,rightPanel:n,"data-testid":a}){return r.jsxs(Tt,{leftPanel:t,rightPanel:n,"data-testid":a,children:[r.jsx("div",{className:f.topStripe}),r.jsx("div",{className:f.titleBar,children:r.jsxs(C.Box,{className:f.titleSlider,children:[t!==void 0&&!t.open&&t.showOpenArrow&&r.jsxs(C.IconButton,{className:f.leftPanelButton,color:"inherit","aria-label":"Open left side panel",onClick:t==null?void 0:t.onOpen,edge:"start",size:"large",children:[" ",r.jsx(Ce.default,{})]}),r.jsx(L.default,{className:f.titleText,variant:"h6",noWrap:!0,children:e}),n!==void 0&&!n.open&&n.showOpenArrow&&r.jsxs(C.IconButton,{className:f.rightPanelButton,color:"inherit","aria-label":"Open right side panel",onClick:n==null?void 0:n.onOpen,edge:"end",size:"large",children:[" ",r.jsx(me.default,{})]})]})})]})}const Ie=400,bt=C.styled(Be.default,{shouldForwardProp:e=>!["width","debug","debugOpacity","navBarOpen","navBarWidthOpen","navBarWidthClosed"].includes(e),name:"SidePanelDrawer"})(({width:e,debugOpacity:t=!1,anchor:n,navBarOpen:a,navBarWidthOpen:d,navBarWidthClosed:g})=>({width:e,"& .MuiDrawer-paper":o(o({position:"absolute",width:e,boxSizing:"border-box",border:"unset",boxShadow:"0px 4px 5px rgba(0, 0, 0, 0.14), 0px 1px 10px rgba(0, 0, 0, 0.12), 0px 2px 4px rgba(0, 0, 0, 0.2)"},t&&{opacity:"50%"}),n==="left"&&o({marginLeft:`${g}px`},a&&{marginLeft:`${d}px`}))})),It=C.styled(it.default,{shouldForwardProp:e=>!["anchor"].includes(e)})(({theme:e,anchor:t})=>T(o({display:"flex",alignItems:"center",padding:e.spacing(2)},e.mixins.toolbar),{justifyContent:t==="left"?"space-between":"flex-start",backgroundColor:e.palette.primary.light,height:"88px","&,*":{color:"white"}," .MuiTypography-root":{fontSize:"22px"}," .MuiButtonBase-root":{marginRight:t==="right"?e.spacing(2):0}}));function ge({children:e,anchor:t="left",open:n,onClose:a=()=>{},titleText:d="",width:g=Ie,showCloseArrow:h=!0,debugOpacity:m=!1,headerBoxProps:x={},onOpened:c,onClosed:v,"data-testid":S,navBarOpen:_=!1,navBarWidthOpen:p=0,navBarWidthClosed:F=0}){return r.jsxs(bt,{SlideProps:{onEntered:()=>c==null?void 0:c(),onExited:()=>v==null?void 0:v()},variant:"persistent",anchor:t,open:n,width:g,debugOpacity:m,"data-testid":S,navBarOpen:_,navBarWidthOpen:p,navBarWidthClosed:F,children:[r.jsx(It,T(o({anchor:t},x),{children:t==="left"?r.jsxs(r.Fragment,{children:[r.jsx(L.default,{variant:"h6",color:"inherit",component:"div",children:d}),h&&r.jsxs(pe.default,{onClick:a,size:"large","aria-label":"Close left side panel",children:[r.jsx(me.default,{"data-testid":"arrowbackicon"})," "]})]}):r.jsxs(r.Fragment,{children:[h&&r.jsxs(pe.default,{onClick:a,size:"large","aria-label":"Close right side panel",children:[r.jsx(Ce.default,{})," "]}),r.jsx(L.default,{variant:"h6",color:"inherit",component:"div",children:d})]})})),e]})}const _t=C.styled("div",{shouldForwardProp:e=>!["leftPanel","rightPanel"].includes(e),name:"PanelAwareMargins"})(({theme:e,leftPanel:t,rightPanel:n})=>{var a,d;return o(o({transition:e.transitions.create("margin",{easing:e.transitions.easing.sharp,duration:e.transitions.duration.leavingScreen})},(t==null?void 0:t.open)&&{transition:e.transitions.create("margin",{easing:e.transitions.easing.easeOut,duration:e.transitions.duration.enteringScreen}),marginLeft:`${(a=t==null?void 0:t.width)!=null?a:0}px`}),(n==null?void 0:n.open)&&{transition:e.transitions.create("margin",{easing:e.transitions.easing.easeOut,duration:e.transitions.duration.enteringScreen}),marginRight:`${(d=n==null?void 0:n.width)!=null?d:0}px`})}),Ft=C.styled(st.default,{name:"PageContainer"})(({theme:e})=>({paddingTop:e.spacing(3),paddingBottom:e.spacing(3)})),Z=!1,ee=!1,W={titleText:"",flavour:"push",width:Ie,arrowButtons:"both",startOpen:!1,open:void 0,onChangeOpen:void 0,content:r.jsx(r.Fragment,{}),onOpened:void 0,onClosed:void 0,dataTestId:void 0};function Pt({children:e,titleText:t="",leftPanel:n,rightPanel:a,sidePanelsAreMutuallyExclusive:d=!0,debugOpacity:g=!1,pageContainerProps:h,pageContentDataTestId:m,topBarDataTestId:x,navBarOpen:c,navBarWidthOpen:v,navBarWidthClosed:S}){const[_,p]=l.useState(Z),[F,P]=l.useState(ee),[U,$]=l.useState(Z),[V,E]=l.useState(ee),N=n!==void 0,k=a!==void 0,{titleText:w,content:R,flavour:M,open:D,onChangeOpen:j,width:i,arrowButtons:s,startOpen:A,onOpened:Fe,onClosed:Pe,dataTestId:Ae}=n?o(o({},W),n):o({},W),{titleText:Ee,content:Ne,flavour:oe,open:X,onChangeOpen:ae,width:Q,arrowButtons:q,startOpen:H,onOpened:ke,onClosed:De,dataTestId:je}=a?o(o({},W),a):o({},W);l.useEffect(()=>{A!==Z&&(p(A),$(A))},[A]),l.useEffect(()=>{H!==ee&&(P(H),E(H))},[H]);const K=D===void 0?_:D,J=X===void 0?F:X,ie=y=>{D===void 0&&(p(y),d&&k&&(y?(P(!1),E(F)):P(V))),j&&j(y)},se=y=>{X===void 0&&(P(y),d&&N&&(y?(p(!1),$(_)):p(U))),ae&&ae(y)};return r.jsxs(C.Box,{children:[N&&r.jsx(ge,{"data-testid":Ae,anchor:"left",open:K,onClose:()=>ie(!1),width:i,titleText:w,debugOpacity:g,showCloseArrow:s==="both"||s==="close",onOpened:Fe,onClosed:Pe,navBarOpen:c,navBarWidthOpen:v,navBarWidthClosed:S,children:R}),k&&r.jsx(ge,{"data-testid":je,anchor:"right",open:J,onClose:()=>se(!1),width:Q,titleText:Ee,debugOpacity:g,showCloseArrow:q==="both"||q==="close",onOpened:ke,onClosed:De,navBarOpen:c,navBarWidthOpen:v,navBarWidthClosed:S,children:Ne}),r.jsx(Ot,o(o({titleText:t,"data-testid":x},N&&M==="push"?{leftPanel:{open:K,width:i,onOpen:()=>ie(!0),showOpenArrow:s==="both"||s==="open"}}:{}),k&&oe==="push"?{rightPanel:{open:J,width:Q,onOpen:()=>se(!0),showOpenArrow:q==="both"||q==="open"}}:{})),r.jsx(_t,T(o(o({},M==="push"?{leftPanel:{open:K,width:i}}:{}),oe==="push"?{rightPanel:{open:J,width:Q}}:{}),{children:r.jsx(Ft,T(o({"data-testid":m},h),{children:e}))}))]})}const At=B.createTheme({palette:{primary:{main:"#007236",dark:"#005221",light:"#00A04E",contrastText:"#FFFFFF"},secondary:{main:"#662D91",dark:"#440E62",light:"#93268F",contrastText:"#FFFFFF"},error:{main:"#D32F2F",dark:"#C62828",light:"#EF5350"},info:{main:"#0288D1",dark:"#01579B",light:"#03A9F4"},success:{main:"#0288D1",dark:"#01579B",light:"#03A9F4"}},components:{MuiTextField:{defaultProps:{color:"secondary"}},MuiToggleButtonGroup:{defaultProps:{color:"secondary"}},MuiCheckbox:{defaultProps:{color:"secondary"}},MuiSelect:{defaultProps:{color:"secondary"}},MuiSwitch:{defaultProps:{color:"secondary"}},MuiFormControl:{defaultProps:{color:"secondary"}},MuiMenuItem:{styleOverrides:{root:({theme:e})=>({"&.Mui-selected":{backgroundColor:B.alpha(e.palette.secondary.main,e.palette.action.selectedOpacity),"&:hover":{backgroundColor:B.alpha(e.palette.secondary.main,e.palette.action.selectedOpacity)},"&.Mui-focusVisible":{backgroundColor:B.alpha(e.palette.secondary.main,e.palette.action.focusOpacity)}}})}}},typography:{explainer:{fontSize:"14px",marginBlockStart:"1em"},h3:{fontSize:"1rem",fontWeight:700}}}),Et=B.createTheme({palette:{primary:{dark:"#00A651",light:"#A3D39C",main:"#007236",contrastText:"#FFF"},warning:{main:"#F5871F",light:"#FCC589",dark:"#A2590A",contrastText:"#FFF"},secondary:{main:"#662D91",light:"#BD8CBF",dark:"#440E62",contrastText:"#FFF"},error:{main:"#D43C95",light:"#8F2064",dark:"#F9CDE0",contrastText:"#FFF"},info:{main:"#00A88D",light:"#ADDCCF",dark:"#005243",contrastText:"#FFF"},success:{main:"#00A651",light:"#A3D39C",dark:"#007236",contrastText:"#FFF"}},typography:{explainer:{fontSize:"14px",marginBlockStart:"1em"}}});function Nt({name:e="internal",children:t}){const n=e==="internal"?At:e==="fed21"?Et:void 0;return r.jsx(B.ThemeProvider,{theme:n,children:t})}const kt={autoHideDuration:6e3,anchorOrigin:{vertical:"top",horizontal:"center"},disableWindowBlurListener:!1},Dt={shouldClose:(e,t)=>t!=="clickaway"},he={message:"",severity:"info",variant:"standard",progressIndicator:void 0},xe=100,ve=2e3,jt=2e3,Lt=(()=>{let e=0;return()=>(e+=1,e)})(),$t={borderBottomLeftRadius:"0px",borderBottomRightRadius:"0px"},Rt={},Mt={},re=l.createContext(null);function _e(g){var h=g,{overrideState:e=Rt,overrideActions:t=Mt,shouldClose:n=Dt.shouldClose,children:a}=h,d=ce(h,["overrideState","overrideActions","shouldClose","children"]);var j;const[{open:m},x]=l.useState({open:!1}),c=l.useRef([]),v=l.useRef(Date.now()),S=l.useRef(0),_=l.useCallback(i=>{x({open:i})},[]),p=l.useCallback((i={})=>{S.current+=1,c.current.length>=xe&&Date.now()-v.current>=ve&&(v.current=Date.now(),console.error(`SaladBarProvider: MAX_QUEUE_LENGTH (${xe}) hit ${S.current} times in last ${ve}ms)`),S.current=0);const s=o(T(o({},he),{key:Lt()}),i);return c.current.push(s),c.current.length===1&&x({open:!0}),s.key},[]),F=(i="",s={})=>p(o({message:i,severity:"success"},s)),P=(i="",s={})=>p(o({message:i,severity:"info"},s)),U=(i="",s={})=>p(o({message:i,severity:"warning"},s)),$=(i="",s={})=>p(o({message:i,severity:"error"},s)),V=i=>{const s=c.current.findIndex(A=>A.key===i);if(s!==-1)return s===0?(x({open:!1}),c.current[0]):c.current.splice(s,1)},E=(i,s)=>{n(i,s)&&x({open:!1})},N=()=>{},k=()=>{c.current.shift(),c.current.length>0&&x({open:!0})},w=(j=c.current[0])!=null?j:o({},he),R={};"autoHideDuration"in w&&(R.autoHideDuration=w.autoHideDuration);const M=o(o({},kt),d),D=o(o({open:m,setOpen:_,enqueueNotification:p,enqueueSuccessNotification:F,enqueueInfoNotification:P,enqueueWarningNotification:U,enqueueErrorNotification:$,removeNotification:V},e),t);return r.jsxs(re.Provider,{value:D,children:[a,r.jsx(lt.default,T(o(o({},M),R),{open:m,onClose:E,TransitionProps:{onExited:k,onExit:N},sx:{zIndex:jt},children:r.jsxs("div",{children:[r.jsx(dt.default,{onClose:i=>E(i,"closeAlert"),severity:w.severity,variant:"filled",icon:w.progressIndicator==="circular"?r.jsx(ut.default,{size:"1em"}):void 0,style:w.progressIndicator==="linear"?$t:void 0,children:w.message}),w.progressIndicator==="linear"&&r.jsx(ct.default,{color:"primary"})]})}))]})}function qt(){const e=l.useContext(re);if(e===null)throw new G("Error: Tried to useSaladBar outside of a <SaladBarProvider>");return e}const Ht=we.createHelper(()=>({children:e})=>r.jsx(_e,{children:e}));exports.AgThemeProvider=Nt;exports.Context=re;exports.ContextError=G;exports.ExampleComponent=pt;exports.NAVBAR_WIDTH_CLOSED=ne;exports.NAVBAR_WIDTH_OPENED=te;exports.NavBar=mt;exports.NavBarDarkStyledList=Ct;exports.NavBarProvider=Te;exports.PageLayout=Pt;exports.SaladBarProvider=_e;exports.buildNavBarState=be;exports.navBarClasses=I;exports.useNavBar=Oe;exports.useSaladBar=qt;exports.withNavBarProvider=Bt;exports.withSaladBarProvider=Ht;
|
|
1
|
+
"use strict";var Le=Object.defineProperty,$e=Object.defineProperties;var Re=Object.getOwnPropertyDescriptors;var z=Object.getOwnPropertySymbols;var le=Object.prototype.hasOwnProperty,de=Object.prototype.propertyIsEnumerable;var Y=(e,t,n)=>t in e?Le(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,o=(e,t)=>{for(var n in t||(t={}))le.call(t,n)&&Y(e,n,t[n]);if(z)for(var n of z(t))de.call(t,n)&&Y(e,n,t[n]);return e},y=(e,t)=>$e(e,Re(t));var ce=(e,t)=>{var n={};for(var a in e)le.call(e,a)&&t.indexOf(a)<0&&(n[a]=e[a]);if(e!=null&&z)for(var a of z(e))t.indexOf(a)<0&&de.call(e,a)&&(n[a]=e[a]);return n};var ue=(e,t,n)=>(Y(e,typeof t!="symbol"?t+"":t,n),n);Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const r=require("react/jsx-runtime"),l=require("react"),Me=require("@mui/material/Button"),He=require("@mui/material/Paper"),qe=require("@mui/material/Typography"),ze=require("@mui/material/CssBaseline"),B=require("@mui/material/styles"),We=require("@mui/material/Drawer"),Ge=require("@australiangreens/ag-error"),we=require("souvlaki"),Ue=require("@mui/material/List"),C=require("@mui/material"),Ve=require("@mui/icons-material/ArrowForward"),Xe=require("@mui/icons-material/ArrowBack"),Qe=require("@mui/material/Box"),Ke=require("@mui/material/IconButton"),Je=require("@mui/material/Container"),Ye=require("@mui/material/Snackbar"),Ze=require("@mui/material/Alert"),et=require("@mui/material/LinearProgress"),tt=require("@mui/material/CircularProgress"),u=e=>e&&e.__esModule?e:{default:e},nt=u(Me),rt=u(He),L=u(qe),ot=u(ze),Be=u(We),at=u(Ue),Ce=u(Ve),me=u(Xe),it=u(Qe),pe=u(Ke),st=u(Je),lt=u(Ye),dt=u(Ze),ct=u(et),ut=u(tt);function pt({text:e}){const[t,n]=l.useState(0);return r.jsxs(r.Fragment,{children:[r.jsx(L.default,{variant:"h6",color:"inherit",component:"div",sx:{fontSize:"22px"},children:"Hello world"}),r.jsx(L.default,{variant:"caption",display:"block",children:r.jsx("span",{children:"Just ensuring MUI is working as planned as a peer dependency. v0.0.11"})}),r.jsx(nt.default,{variant:"outlined",onClick:()=>n(a=>a+1),"aria-label":"Increment",children:"Hello I am a button"}),r.jsxs("p",{children:["This is some text: ",r.jsx("span",{children:e})]}),r.jsxs(rt.default,{children:["This number will incremember when button pressed: ",t]})]})}const te=330,ne=73,O="Navbar",I={root:`${O}-root`,menuButton:`${O}-menuButton`,hide:`${O}-hide`,content:`${O}-content`,userInfoHolder:`${O}-userInfoHolder`,settings:`${O}-settings`,pieChartIcon:`${O}-pieChartIcon`},ft=B.styled("div",{name:"NavBar"})(({theme:e})=>({[`&.${I.root}`]:{display:"flex"},[`& .${I.menuButton}`]:{marginRight:36},[`& .${I.hide}`]:{display:"none"},[`& .${I.content}`]:{flexGrow:1,padding:e.spacing(3)},[`& .${I.userInfoHolder}`]:{height:"148px",marginTop:"64px",marginBottom:"16px"}})),Se=()=>({position:"absolute",height:"100%",overflowX:"hidden",overflowY:"hidden",color:"white",backgroundColor:"black"}),gt=()=>o({width:te},Se()),ht=()=>o({width:ne},Se()),xt=B.styled(Be.default,{shouldForwardProp:e=>e!=="open"})(({theme:e,open:t})=>o(o({width:t?te:ne,flexShrink:0,whiteSpace:"nowrap",boxSizing:"border-box",zIndex:e.zIndex.drawer+100},t&&{"& .MuiDrawer-paper":gt()}),!t&&{"& .MuiDrawer-paper":ht()}));class G extends Ge.AgError{}ue(G,"errorName","ContextError");const ye=l.createContext(null),vt={},wt={},Te=({overrideState:e=vt,overrideActions:t=wt,children:n})=>{const[{open:a},d]=l.useState({open:!0}),g=l.useCallback(m=>{d({open:m})},[]),h=o(o({open:a,setOpen:g},e),t);return r.jsx(ye.Provider,{value:h,children:n})},Oe=()=>{const e=l.useContext(ye);if(e===null)throw new G("Error: Tried to useNavBar outside of a <NavBarProvider>");return e},be=(e={})=>o({open:!0},e),Bt=we.createHelper((e=be(),t={})=>({children:n})=>r.jsx(Te,{overrideState:e,overrideActions:t,children:n})),fe=7,Ct=B.styled(at.default)(({theme:e})=>({backgroundColor:"black",color:"white","& .MuiListItem-root":{padding:"unset"},"& .MuiListItemButton-root":{" .MuiListItemIcon-root":{color:"white",padding:`${fe}px`},"&.Mui-focusVisible":{backgroundColor:e.palette.grey[700]},"&.Mui-selected":{borderLeftStyle:"solid",borderLeftWidth:"7px",borderLeftColor:e.palette.primary.main,paddingLeft:`calc(${e.spacing(2)} - ${fe}px)`},"&:hover":{backgroundColor:e.palette.primary.dark},"&.Mui-selected.Mui-focusVisible":{backgroundColor:e.palette.grey[700]},"&.Mui-selected:hover":{backgroundColor:e.palette.primary.dark}}}));function mt({"data-testid":e,children:t}){const{open:n}=Oe();return r.jsxs(ft,{className:I.root,"data-testid":e,children:[r.jsx(ot.default,{}),r.jsx(xt,{variant:"permanent",anchor:"left",transitionDuration:null,open:n,children:t})]})}const St=24,yt=64,b="TopBar",f={topStripe:`${b}-topStripe`,titleBar:`${b}-titleBar`,titleSlider:`${b}-titleSlider`,titleText:`${b}-titleText`,leftPanelButton:`${b}-leftPanelButton`,rightPanelButton:`${b}-leftPanelButton`},Tt=C.styled("div",{shouldForwardProp:e=>!["leftPanel","rightPanel"].includes(e),name:b})(({theme:e,leftPanel:t,rightPanel:n})=>{var a,d;return{width:"100%",[`& .${f.topStripe}`]:{width:"100%",height:`${St}px`,backgroundColor:e.palette.primary.main},[`& .${f.titleBar}`]:{backgroundColor:e.palette.primary.light,height:`${yt}px`,padding:e.spacing(0,3),width:"100%"},[`& .${f.titleSlider}`]:o(o({height:"100%",display:"flex",alignItems:"center",color:"white",transition:e.transitions.create("margin",{easing:e.transitions.easing.sharp,duration:e.transitions.duration.leavingScreen}),[`& .${f.leftPanelButton}`]:{marginRight:e.spacing(2),flexGrow:0},[`& .${f.titleText}`]:{flexGrow:1},[`& .${f.rightPanelButton}`]:{flexGrow:0}},(t==null?void 0:t.open)&&{transition:e.transitions.create("margin",{easing:e.transitions.easing.easeOut,duration:e.transitions.duration.enteringScreen}),marginLeft:`${(a=t==null?void 0:t.width)!=null?a:0}px`}),(n==null?void 0:n.open)&&{transition:e.transitions.create("margin",{easing:e.transitions.easing.easeOut,duration:e.transitions.duration.enteringScreen}),marginRight:`${(d=n==null?void 0:n.width)!=null?d:0}px`})}});function Ot({titleText:e="",leftPanel:t,rightPanel:n,"data-testid":a}){return r.jsxs(Tt,{leftPanel:t,rightPanel:n,"data-testid":a,children:[r.jsx("div",{className:f.topStripe}),r.jsx("div",{className:f.titleBar,children:r.jsxs(C.Box,{className:f.titleSlider,children:[t!==void 0&&!t.open&&t.showOpenArrow&&r.jsxs(C.IconButton,{className:f.leftPanelButton,color:"inherit","aria-label":"Open left side panel",onClick:t==null?void 0:t.onOpen,edge:"start",size:"large",children:[" ",r.jsx(Ce.default,{})]}),r.jsx(L.default,{className:f.titleText,variant:"h6",noWrap:!0,children:e}),n!==void 0&&!n.open&&n.showOpenArrow&&r.jsxs(C.IconButton,{className:f.rightPanelButton,color:"inherit","aria-label":"Open right side panel",onClick:n==null?void 0:n.onOpen,edge:"end",size:"large",children:[" ",r.jsx(me.default,{})]})]})})]})}const Ie=400,bt=C.styled(Be.default,{shouldForwardProp:e=>!["width","debug","debugOpacity","navBarOpen","navBarWidthOpen","navBarWidthClosed"].includes(e),name:"SidePanelDrawer"})(({width:e,debugOpacity:t=!1,anchor:n,navBarOpen:a,navBarWidthOpen:d,navBarWidthClosed:g})=>({width:e,"& .MuiDrawer-paper":o(o({position:"absolute",width:e,boxSizing:"border-box",border:"unset",boxShadow:"0px 4px 5px rgba(0, 0, 0, 0.14), 0px 1px 10px rgba(0, 0, 0, 0.12), 0px 2px 4px rgba(0, 0, 0, 0.2)"},t&&{opacity:"50%"}),n==="left"&&o({marginLeft:`${g}px`},a&&{marginLeft:`${d}px`}))})),It=C.styled(it.default,{shouldForwardProp:e=>!["anchor"].includes(e)})(({theme:e,anchor:t})=>y(o({display:"flex",alignItems:"center",padding:e.spacing(2)},e.mixins.toolbar),{justifyContent:t==="left"?"space-between":"flex-start",backgroundColor:e.palette.primary.light,height:"88px","&,*":{color:"white"}," .MuiTypography-root":{fontSize:"22px"}," .MuiButtonBase-root":{marginRight:t==="right"?e.spacing(2):0}}));function ge({children:e,anchor:t="left",open:n,onClose:a=()=>{},titleText:d="",width:g=Ie,showCloseArrow:h=!0,debugOpacity:m=!1,headerBoxProps:x={},onOpened:c,onClosed:v,"data-testid":S,navBarOpen:_=!1,navBarWidthOpen:p=0,navBarWidthClosed:F=0}){return r.jsxs(bt,{SlideProps:{onEntered:()=>c==null?void 0:c(),onExited:()=>v==null?void 0:v()},variant:"persistent",anchor:t,open:n,width:g,debugOpacity:m,"data-testid":S,navBarOpen:_,navBarWidthOpen:p,navBarWidthClosed:F,children:[r.jsx(It,y(o({anchor:t},x),{children:t==="left"?r.jsxs(r.Fragment,{children:[r.jsx(L.default,{variant:"h6",color:"inherit",component:"div",children:d}),h&&r.jsxs(pe.default,{onClick:a,size:"large","aria-label":"Close left side panel",children:[r.jsx(me.default,{"data-testid":"arrowbackicon"})," "]})]}):r.jsxs(r.Fragment,{children:[h&&r.jsxs(pe.default,{onClick:a,size:"large","aria-label":"Close right side panel",children:[r.jsx(Ce.default,{})," "]}),r.jsx(L.default,{variant:"h6",color:"inherit",component:"div",children:d})]})})),e]})}const _t=C.styled("div",{shouldForwardProp:e=>!["leftPanel","rightPanel"].includes(e),name:"PanelAwareMargins"})(({theme:e,leftPanel:t,rightPanel:n})=>{var a,d;return o(o({transition:e.transitions.create("margin",{easing:e.transitions.easing.sharp,duration:e.transitions.duration.leavingScreen})},(t==null?void 0:t.open)&&{transition:e.transitions.create("margin",{easing:e.transitions.easing.easeOut,duration:e.transitions.duration.enteringScreen}),marginLeft:`${(a=t==null?void 0:t.width)!=null?a:0}px`}),(n==null?void 0:n.open)&&{transition:e.transitions.create("margin",{easing:e.transitions.easing.easeOut,duration:e.transitions.duration.enteringScreen}),marginRight:`${(d=n==null?void 0:n.width)!=null?d:0}px`})}),Ft=C.styled(st.default,{name:"PageContainer"})(({theme:e})=>({paddingTop:e.spacing(3),paddingBottom:e.spacing(3)})),Z=!1,ee=!1,W={titleText:"",flavour:"push",width:Ie,arrowButtons:"both",startOpen:!1,open:void 0,onChangeOpen:void 0,content:r.jsx(r.Fragment,{}),onOpened:void 0,onClosed:void 0,dataTestId:void 0};function Pt({children:e,titleText:t="",leftPanel:n,rightPanel:a,sidePanelsAreMutuallyExclusive:d=!0,debugOpacity:g=!1,pageContainerProps:h,pageContentDataTestId:m,topBarDataTestId:x,navBarOpen:c,navBarWidthOpen:v,navBarWidthClosed:S}){const[_,p]=l.useState(Z),[F,P]=l.useState(ee),[U,$]=l.useState(Z),[V,E]=l.useState(ee),N=n!==void 0,k=a!==void 0,{titleText:w,content:R,flavour:M,open:D,onChangeOpen:j,width:i,arrowButtons:s,startOpen:A,onOpened:Fe,onClosed:Pe,dataTestId:Ae}=n?o(o({},W),n):o({},W),{titleText:Ee,content:Ne,flavour:oe,open:X,onChangeOpen:ae,width:Q,arrowButtons:H,startOpen:q,onOpened:ke,onClosed:De,dataTestId:je}=a?o(o({},W),a):o({},W);l.useEffect(()=>{A!==Z&&(p(A),$(A))},[A]),l.useEffect(()=>{q!==ee&&(P(q),E(q))},[q]);const K=D===void 0?_:D,J=X===void 0?F:X,ie=T=>{D===void 0&&(p(T),d&&k&&(T?(P(!1),E(F)):P(V))),j&&j(T)},se=T=>{X===void 0&&(P(T),d&&N&&(T?(p(!1),$(_)):p(U))),ae&&ae(T)};return r.jsxs(C.Box,{children:[N&&r.jsx(ge,{"data-testid":Ae,anchor:"left",open:K,onClose:()=>ie(!1),width:i,titleText:w,debugOpacity:g,showCloseArrow:s==="both"||s==="close",onOpened:Fe,onClosed:Pe,navBarOpen:c,navBarWidthOpen:v,navBarWidthClosed:S,children:R}),k&&r.jsx(ge,{"data-testid":je,anchor:"right",open:J,onClose:()=>se(!1),width:Q,titleText:Ee,debugOpacity:g,showCloseArrow:H==="both"||H==="close",onOpened:ke,onClosed:De,navBarOpen:c,navBarWidthOpen:v,navBarWidthClosed:S,children:Ne}),r.jsx(Ot,o(o({titleText:t,"data-testid":x},N&&M==="push"?{leftPanel:{open:K,width:i,onOpen:()=>ie(!0),showOpenArrow:s==="both"||s==="open"}}:{}),k&&oe==="push"?{rightPanel:{open:J,width:Q,onOpen:()=>se(!0),showOpenArrow:H==="both"||H==="open"}}:{})),r.jsx(_t,y(o(o({},M==="push"?{leftPanel:{open:K,width:i}}:{}),oe==="push"?{rightPanel:{open:J,width:Q}}:{}),{children:r.jsx(Ft,y(o({"data-testid":m},h),{children:e}))}))]})}const At=B.createTheme({palette:{primary:{main:"#007236",dark:"#005221",light:"#00A04E",contrastText:"#FFFFFF"},secondary:{main:"#662D91",dark:"#440E62",light:"#93268F",contrastText:"#FFFFFF"},error:{main:"#D32F2F",dark:"#C62828",light:"#EF5350"},info:{main:"#0288D1",dark:"#01579B",light:"#03A9F4"},success:{main:"#0288D1",dark:"#01579B",light:"#03A9F4"}},components:{MuiTextField:{defaultProps:{color:"secondary"}},MuiToggleButtonGroup:{defaultProps:{color:"secondary"}},MuiCheckbox:{defaultProps:{color:"secondary"}},MuiSelect:{defaultProps:{color:"secondary"}},MuiSwitch:{defaultProps:{color:"secondary"}},MuiFormControl:{defaultProps:{color:"secondary"}},MuiMenuItem:{styleOverrides:{root:({theme:e})=>({"&.Mui-selected":{backgroundColor:B.alpha(e.palette.secondary.main,e.palette.action.selectedOpacity),"&:hover":{backgroundColor:B.alpha(e.palette.secondary.main,e.palette.action.selectedOpacity)},"&.Mui-focusVisible":{backgroundColor:B.alpha(e.palette.secondary.main,e.palette.action.focusOpacity)}}})}}},typography:{explainer:{fontSize:"14px",marginBlockStart:"1em"},h3:{fontSize:"1rem",fontWeight:700}}}),Et=B.createTheme({palette:{primary:{dark:"#00A651",light:"#A3D39C",main:"#007236",contrastText:"#FFF"},warning:{main:"#F5871F",light:"#FCC589",dark:"#A2590A",contrastText:"#FFF"},secondary:{main:"#662D91",light:"#BD8CBF",dark:"#440E62",contrastText:"#FFF"},error:{main:"#D43C95",light:"#8F2064",dark:"#F9CDE0",contrastText:"#FFF"},info:{main:"#00A88D",light:"#ADDCCF",dark:"#005243",contrastText:"#FFF"},success:{main:"#00A651",light:"#A3D39C",dark:"#007236",contrastText:"#FFF"}},typography:{explainer:{fontSize:"14px",marginBlockStart:"1em"}}});function Nt({name:e="internal",children:t}){const n=e==="internal"?At:e==="fed21"?Et:void 0;return r.jsx(B.ThemeProvider,{theme:n,children:t})}const kt={autoHideDuration:6e3,anchorOrigin:{vertical:"top",horizontal:"center"},disableWindowBlurListener:!1},Dt={shouldClose:(e,t)=>t!=="clickaway"},he={message:"",severity:"info",variant:"standard",progressIndicator:void 0},xe=100,ve=2e3,jt=2e3,Lt=(()=>{let e=0;return()=>(e+=1,e)})(),$t={borderBottomLeftRadius:"0px",borderBottomRightRadius:"0px"},Rt={},Mt={},re=l.createContext(null);function _e(g){var h=g,{overrideState:e=Rt,overrideActions:t=Mt,shouldClose:n=Dt.shouldClose,children:a}=h,d=ce(h,["overrideState","overrideActions","shouldClose","children"]);var j;const[{open:m},x]=l.useState({open:!1}),c=l.useRef([]),v=l.useRef(Date.now()),S=l.useRef(0),_=l.useCallback(i=>{x({open:i})},[]),p=l.useCallback((i={})=>{S.current+=1,c.current.length>=xe&&Date.now()-v.current>=ve&&(v.current=Date.now(),console.error(`SaladBarProvider: MAX_QUEUE_LENGTH (${xe}) hit ${S.current} times in last ${ve}ms)`),S.current=0);const s=o(y(o({},he),{key:Lt()}),i);return c.current.push(s),c.current.length===1&&x({open:!0}),s.key},[]),F=(i="",s={})=>p(o({message:i,severity:"success"},s)),P=(i="",s={})=>p(o({message:i,severity:"info"},s)),U=(i="",s={})=>p(o({message:i,severity:"warning"},s)),$=(i="",s={})=>p(o({message:i,severity:"error"},s)),V=i=>{const s=c.current.findIndex(A=>A.key===i);if(s!==-1)return s===0?(x({open:!1}),c.current[0]):c.current.splice(s,1)},E=(i,s)=>{n(i,s)&&x({open:!1})},N=()=>{},k=()=>{c.current.shift(),c.current.length>0&&x({open:!0})},w=(j=c.current[0])!=null?j:o({},he),R={};"autoHideDuration"in w&&(R.autoHideDuration=w.autoHideDuration);const M=o(o({},kt),d),D=o(o({open:m,setOpen:_,enqueueNotification:p,enqueueSuccessNotification:F,enqueueInfoNotification:P,enqueueWarningNotification:U,enqueueErrorNotification:$,removeNotification:V},e),t);return r.jsxs(re.Provider,{value:D,children:[a,r.jsx(lt.default,y(o(o({},M),R),{open:m,onClose:E,TransitionProps:{onExited:k,onExit:N},sx:{zIndex:jt},children:r.jsxs("div",{children:[r.jsx(dt.default,{onClose:i=>E(i,"closeAlert"),severity:w.severity,variant:"filled",icon:w.progressIndicator==="circular"?r.jsx(ut.default,{size:"1em"}):void 0,style:w.progressIndicator==="linear"?$t:void 0,children:w.message}),w.progressIndicator==="linear"&&r.jsx(ct.default,{color:"primary"})]})}))]})}function Ht(){const e=l.useContext(re);if(e===null)throw new G("Error: Tried to useSaladBar outside of a <SaladBarProvider>");return e}const qt=we.createHelper((e={autoHideDuration:1},t={},n={})=>({children:a})=>r.jsx(_e,y(o({},e),{overrideState:t,overrideActions:n,children:a})));exports.AgThemeProvider=Nt;exports.Context=re;exports.ContextError=G;exports.ExampleComponent=pt;exports.NAVBAR_WIDTH_CLOSED=ne;exports.NAVBAR_WIDTH_OPENED=te;exports.NavBar=mt;exports.NavBarDarkStyledList=Ct;exports.NavBarProvider=Te;exports.PageLayout=Pt;exports.SaladBarProvider=_e;exports.buildNavBarState=be;exports.navBarClasses=I;exports.useNavBar=Oe;exports.useSaladBar=Ht;exports.withNavBarProvider=Bt;exports.withSaladBarProvider=qt;
|
|
2
2
|
//# sourceMappingURL=index.js.map
|
package/dist/cjs/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../src/components/ExampleComponent/index.tsx","../../src/components/NavBar/Styling.tsx","../../src/errors/ContextError.ts","../../src/components/NavBar/NavBarContext.tsx","../../src/components/NavBar/testWrappers.tsx","../../src/components/NavBar/NavBarDarkStyledList.tsx","../../src/components/NavBar/index.tsx","../../src/layouts/PageLayout/TopBar.tsx","../../src/layouts/PageLayout/SidePanel.tsx","../../src/layouts/PageLayout/PanelAwareMargins.tsx","../../src/layouts/PageLayout/PageContainer.tsx","../../src/layouts/PageLayout/index.tsx","../../src/providers/AgTheme/themes.ts","../../src/providers/AgTheme/index.tsx","../../src/providers/SaladBar/defaults.ts","../../src/providers/SaladBar/SaladBarContext.tsx","../../src/providers/SaladBar/useSaladBar.ts","../../src/providers/SaladBar/testWrappers.tsx"],"sourcesContent":["import { useState } from 'react';\nimport Button from '@mui/material/Button';\nimport Paper from '@mui/material/Paper';\nimport Typography from '@mui/material/Typography';\n\nexport interface ExampleComponentProps {\n /** Test */\n text: string;\n}\n\nexport default function ExampleComponent({ text }: ExampleComponentProps) {\n const [num, setNum] = useState(0);\n\n return (\n <>\n <Typography variant=\"h6\" color=\"inherit\" component=\"div\" sx={{ fontSize: '22px' }}>\n Hello world\n </Typography>\n\n <Typography variant=\"caption\" display=\"block\">\n <span>Just ensuring MUI is working as planned as a peer dependency. v0.0.11</span>\n </Typography>\n <Button\n variant=\"outlined\"\n onClick={() => setNum((oldNum) => oldNum + 1)}\n aria-label=\"Increment\"\n >\n Hello I am a button\n </Button>\n <p>\n This is some text: <span>{text}</span>\n </p>\n <Paper>This number will incremember when button pressed: {num}</Paper>\n </>\n );\n}\n","import { styled, CSSObject } from '@mui/material/styles';\nimport Drawer from '@mui/material/Drawer';\n\nexport const NAVBAR_WIDTH_OPENED = 330;\nexport const NAVBAR_WIDTH_CLOSED = 73;\n\nconst PREFIX = 'Navbar';\n\nexport const classes = {\n root: `${PREFIX}-root`,\n menuButton: `${PREFIX}-menuButton`,\n hide: `${PREFIX}-hide`,\n content: `${PREFIX}-content`,\n userInfoHolder: `${PREFIX}-userInfoHolder`,\n settings: `${PREFIX}-settings`,\n pieChartIcon: `${PREFIX}-pieChartIcon`,\n};\n\nexport const Root = styled('div', { name: 'NavBar' })(({ theme }) => ({\n [`&.${classes.root}`]: {\n display: 'flex',\n },\n\n [`& .${classes.menuButton}`]: {\n marginRight: 36,\n },\n\n [`& .${classes.hide}`]: {\n display: 'none',\n },\n\n [`& .${classes.content}`]: {\n flexGrow: 1,\n padding: theme.spacing(3),\n },\n\n [`& .${classes.userInfoHolder}`]: {\n height: '148px',\n marginTop: '64px',\n marginBottom: '16px',\n },\n}));\n\n// The starting point for this was the \"Mini variant drawer\" of\n// https://mui.com/components/drawers/#main-content\n\nconst sharedOverrides = (): CSSObject => ({\n position: 'absolute',\n height: '100%',\n overflowX: 'hidden',\n overflowY: 'hidden',\n color: 'white',\n backgroundColor: 'black',\n});\n\nconst openedMixin = (): CSSObject => ({\n width: NAVBAR_WIDTH_OPENED,\n ...sharedOverrides(),\n});\n\nconst closedMixin = (): CSSObject => ({\n width: NAVBAR_WIDTH_CLOSED,\n ...sharedOverrides(),\n});\n\nexport const NavDrawer = styled(Drawer, {\n shouldForwardProp: (prop) => prop !== 'open',\n})(({ theme, open }) => ({\n width: open ? NAVBAR_WIDTH_OPENED : NAVBAR_WIDTH_CLOSED,\n flexShrink: 0,\n whiteSpace: 'nowrap',\n boxSizing: 'border-box',\n zIndex: theme.zIndex.drawer + 100,\n\n ...(open && {\n '& .MuiDrawer-paper': openedMixin(),\n }),\n ...(!open && {\n '& .MuiDrawer-paper': closedMixin(),\n }),\n}));\n","import { AgError } from '@australiangreens/ag-error';\n\n// Superclass for errors involving React context.\nexport class ContextError extends AgError {\n static errorName = 'ContextError';\n}\n","import { createContext, useContext, PropsWithChildren, useState, useCallback } from 'react';\nimport { ContextError } from '../../errors/ContextError';\n\nexport type NavBarState = {\n open: boolean;\n};\n\nexport type NavBarActions = {\n setOpen: (newVal: boolean) => void;\n};\n\ntype NavBarContext = NavBarState & NavBarActions;\n\nconst Context = createContext<NavBarContext | null>(null);\n\ntype NavBarProviderProps = {\n overrideState?: Partial<NavBarState>;\n overrideActions?: Partial<NavBarActions>;\n};\n\n// Note: Must be at at this scope, otherwise useEffect will loop infinitely\nconst defaultOverrideState = {};\nconst defaultOverrideActions = {};\n\nexport const NavBarProvider = ({\n overrideState = defaultOverrideState,\n overrideActions = defaultOverrideActions,\n children,\n}: PropsWithChildren<NavBarProviderProps>) => {\n const [{ open }, setNavBarState] = useState<NavBarState>({ open: true });\n\n const setOpen = useCallback((newVal: boolean) => {\n setNavBarState({ open: newVal });\n }, []);\n\n const value: NavBarContext = {\n open,\n setOpen,\n ...overrideState,\n ...overrideActions,\n };\n\n return <Context.Provider value={value}>{children}</Context.Provider>;\n};\n\nexport const useNavBar = () => {\n const context = useContext(Context);\n\n if (context === null) {\n throw new ContextError('Error: Tried to useNavBar outside of a <NavBarProvider>');\n }\n\n return context;\n};\n","/* eslint-disable react/prop-types */\n/* eslint-disable react/display-name */\nimport { createHelper } from 'souvlaki';\n\nimport { NavBarProvider, NavBarActions, NavBarState } from './NavBarContext';\n\nexport type Builder<T> = (overrides?: Partial<T>) => T;\n\nexport const buildNavBarState: Builder<NavBarState> = (overrides = {}) => ({\n open: true,\n ...overrides,\n});\n\nexport const withNavBarProvider = createHelper(\n (state: Partial<NavBarState> = buildNavBarState(), actions: Partial<NavBarActions> = {}) =>\n ({ children }) => {\n return (\n <NavBarProvider overrideState={state} overrideActions={actions}>\n {children}\n </NavBarProvider>\n );\n }\n);\n","import { styled } from '@mui/material/styles';\nimport List, { ListProps } from '@mui/material/List';\n\nconst SELECTED_INDICATOR_WIDTH = 7;\n\nexport const NavBarDarkStyledList = styled(List)<ListProps>(({ theme }) => ({\n backgroundColor: 'black',\n color: 'white',\n\n '& .MuiListItem-root': {\n padding: 'unset',\n },\n\n '& .MuiListItemButton-root': {\n ' .MuiListItemIcon-root': {\n color: 'white',\n padding: `${SELECTED_INDICATOR_WIDTH}px`,\n },\n\n // Focus state\n '&.Mui-focusVisible': {\n backgroundColor: theme.palette.grey[700],\n },\n\n // Selected state\n '&.Mui-selected': {\n borderLeftStyle: 'solid',\n borderLeftWidth: '7px',\n borderLeftColor: theme.palette.primary.main,\n paddingLeft: `calc(${theme.spacing(2)} - ${SELECTED_INDICATOR_WIDTH}px)`,\n },\n\n // Hover state\n '&:hover': {\n backgroundColor: theme.palette.primary.dark,\n },\n\n // Focus+Selected state\n '&.Mui-selected.Mui-focusVisible': {\n backgroundColor: theme.palette.grey[700],\n },\n\n // Hover+Selected state\n '&.Mui-selected:hover': {\n backgroundColor: theme.palette.primary.dark,\n },\n\n // Focus+Hover+Selected state doesn't need to be specified\n // '&.Mui-selected.Mui-focusVisible:hover': {\n // },\n },\n})) as typeof List;\n","import { PropsWithChildren } from 'react';\nimport CssBaseline from '@mui/material/CssBaseline';\n\nimport { classes, Root, NavDrawer } from './Styling';\nimport { useNavBar } from './NavBarContext';\n\nexport { NAVBAR_WIDTH_OPENED, NAVBAR_WIDTH_CLOSED } from './Styling';\n\nexport type NavbarProps = {\n /** Set the datatest-id on the root element for using reactdom's getByTestId()\n * function */\n 'data-testid'?: string;\n};\n\n// TODO: Add in more common elements (or make another component) for user/organisations/logout etc?\n// TODO: Should there be two sets of 'children', one for the list and one for dialogs etc?\n\n/**\n * A (currently uncontrolled) styled navigation bar wth a context provider to\n * retrieve its current open/closed state. At this point in time its pretty\n * unopinionated, it just renders whatever children it is given. THe\n * NavBarDarkStyledList component can be used for consistent styling against the\n * background. We'll be changing the way we use NavBars soon anyway, so not much\n * point solidying the patterns yet.\n */\nexport default function NavBar({\n 'data-testid': dataTestId,\n children,\n}: PropsWithChildren<NavbarProps>) {\n const { open } = useNavBar();\n\n return (\n <Root className={classes.root} data-testid={dataTestId}>\n <CssBaseline />\n <NavDrawer\n variant=\"permanent\"\n anchor=\"left\"\n // We aren't using transitions, and {0} will still create an unwanted timeout\n transitionDuration={null as unknown as number}\n open={open}\n >\n {children}\n </NavDrawer>\n </Root>\n );\n}\n\nexport * from './NavBarContext';\nexport * from './testWrappers';\n\nexport * from './NavBarDarkStyledList';\n\n// TODO: This is a temporary fix, library clients shouldn't need this\nexport { classes as navBarClasses } from './Styling';\n","import { Box, IconButton, styled } from '@mui/material';\nimport Typography from '@mui/material/Typography';\nimport ArrowForwardIcon from '@mui/icons-material/ArrowForward';\nimport ArrowBackIcon from '@mui/icons-material/ArrowBack';\n\nconst TOP_STRIPE_HEIGHT = 24;\nconst TITLE_BAR_HEIGHT = 64;\n\nconst PREFIX = 'TopBar';\n\ninterface PanelProps {\n open: boolean;\n width: number;\n showOpenArrow: boolean;\n\n /** Called when the arrow button is pressed (if showOpenButton is true) */\n onOpen?: () => void;\n\n showOpenButton?: boolean;\n}\n\nexport interface TopBarProps {\n titleText?: string;\n leftPanel?: PanelProps;\n rightPanel?: PanelProps;\n 'data-testid'?: string;\n}\n\nexport const classes = {\n topStripe: `${PREFIX}-topStripe`,\n titleBar: `${PREFIX}-titleBar`,\n titleSlider: `${PREFIX}-titleSlider`,\n\n titleText: `${PREFIX}-titleText`,\n leftPanelButton: `${PREFIX}-leftPanelButton`,\n rightPanelButton: `${PREFIX}-leftPanelButton`,\n};\n\ninterface RootProps {\n leftPanel?: PanelProps;\n rightPanel?: PanelProps;\n}\n\nconst Root = styled('div', {\n shouldForwardProp: (prop) => !(['leftPanel', 'rightPanel'] as Array<PropertyKey>).includes(prop),\n name: PREFIX,\n})<RootProps>(({ theme, leftPanel, rightPanel }) => ({\n width: '100%',\n\n [`& .${classes.topStripe}`]: {\n width: '100%',\n height: `${TOP_STRIPE_HEIGHT}px`,\n backgroundColor: theme.palette.primary.main,\n },\n\n [`& .${classes.titleBar}`]: {\n backgroundColor: theme.palette.primary.light,\n height: `${TITLE_BAR_HEIGHT}px`,\n padding: theme.spacing(0, 3),\n width: '100%',\n },\n\n [`& .${classes.titleSlider}`]: {\n height: '100%',\n display: 'flex',\n alignItems: 'center',\n color: 'white',\n\n transition: theme.transitions.create('margin', {\n easing: theme.transitions.easing.sharp,\n duration: theme.transitions.duration.leavingScreen,\n }),\n\n [`& .${classes.leftPanelButton}`]: {\n marginRight: theme.spacing(2),\n flexGrow: 0,\n },\n\n [`& .${classes.titleText}`]: {\n flexGrow: 1,\n },\n\n [`& .${classes.rightPanelButton}`]: {\n flexGrow: 0,\n },\n\n ...(leftPanel?.open && {\n transition: theme.transitions.create('margin', {\n easing: theme.transitions.easing.easeOut,\n duration: theme.transitions.duration.enteringScreen,\n }),\n marginLeft: `${leftPanel?.width ?? 0}px`,\n }),\n\n ...(rightPanel?.open && {\n transition: theme.transitions.create('margin', {\n easing: theme.transitions.easing.easeOut,\n duration: theme.transitions.duration.enteringScreen,\n }),\n marginRight: `${rightPanel?.width ?? 0}px`,\n }),\n },\n}));\n\n/**\n * Goes at the top of every page. Wasn't feeling creative in naming it.\n *\n * This differs from the typical appbar with a toolbar used in most MUI apps in\n * that it has to interact with a sliding side panel that is not the main\n * navbar.\n */\nexport default function TopBar({\n titleText = '',\n leftPanel,\n rightPanel,\n 'data-testid': dataTestId,\n}: TopBarProps) {\n return (\n <Root leftPanel={leftPanel} rightPanel={rightPanel} data-testid={dataTestId}>\n <div className={classes.topStripe} />\n <div className={classes.titleBar}>\n <Box className={classes.titleSlider}>\n {leftPanel !== undefined && !leftPanel.open && leftPanel.showOpenArrow && (\n <IconButton\n className={classes.leftPanelButton}\n color=\"inherit\"\n aria-label=\"Open left side panel\"\n onClick={leftPanel?.onOpen}\n edge=\"start\"\n size=\"large\"\n >\n {' '}\n <ArrowForwardIcon />\n </IconButton>\n )}\n\n <Typography className={classes.titleText} variant=\"h6\" noWrap>\n {titleText}\n </Typography>\n\n {rightPanel !== undefined && !rightPanel.open && rightPanel.showOpenArrow && (\n <IconButton\n className={classes.rightPanelButton}\n color=\"inherit\"\n aria-label=\"Open right side panel\"\n onClick={rightPanel?.onOpen}\n edge=\"end\"\n size=\"large\"\n >\n {' '}\n <ArrowBackIcon />\n </IconButton>\n )}\n </Box>\n </div>\n </Root>\n );\n}\n","import { PropsWithChildren } from 'react';\nimport ArrowBackIcon from '@mui/icons-material/ArrowBack';\nimport ArrowForwardIcon from '@mui/icons-material/ArrowForward';\nimport Drawer, { DrawerProps } from '@mui/material/Drawer';\nimport Box, { BoxProps } from '@mui/material/Box';\nimport Typography from '@mui/material/Typography';\nimport IconButton from '@mui/material/IconButton';\nimport { styled } from '@mui/material';\n\nexport const DEFAULT_PANEL_WIDTH = 400;\n\ninterface SidePanelDrawerProps extends DrawerProps {\n anchor: 'left' | 'right';\n width?: number;\n debugOpacity?: boolean;\n navBarOpen: boolean;\n navBarWidthOpen: number;\n navBarWidthClosed: number;\n}\n\nconst SidePanelDrawer = styled(Drawer, {\n shouldForwardProp: (prop) =>\n // Note we do want anchor to be forwarded to the Drawer component\n !(\n [\n 'width',\n 'debug',\n 'debugOpacity',\n 'navBarOpen',\n 'navBarWidthOpen',\n 'navBarWidthClosed',\n ] as Array<PropertyKey>\n ).includes(prop),\n name: 'SidePanelDrawer',\n})<SidePanelDrawerProps>(\n ({ width, debugOpacity = false, anchor, navBarOpen, navBarWidthOpen, navBarWidthClosed }) => ({\n width,\n\n '& .MuiDrawer-paper': {\n position: 'absolute',\n width,\n boxSizing: 'border-box',\n border: 'unset',\n boxShadow:\n '0px 4px 5px rgba(0, 0, 0, 0.14), 0px 1px 10px rgba(0, 0, 0, 0.12), 0px 2px 4px rgba(0, 0, 0, 0.2)',\n\n ...(debugOpacity && {\n opacity: '50%',\n }),\n\n ...(anchor === 'left' && {\n marginLeft: `${navBarWidthClosed}px`,\n ...(navBarOpen && {\n marginLeft: `${navBarWidthOpen}px`,\n }),\n }),\n },\n })\n);\n\ninterface DrawerHeaderBoxProps {\n anchor: 'left' | 'right';\n}\n\nconst DrawerHeaderBox = styled(Box, {\n shouldForwardProp: (prop) => !(['anchor'] as Array<PropertyKey>).includes(prop),\n})<DrawerHeaderBoxProps>(({ theme, anchor }) => ({\n display: 'flex',\n alignItems: 'center',\n padding: theme.spacing(2),\n ...theme.mixins.toolbar,\n justifyContent: anchor === 'left' ? 'space-between' : 'flex-start',\n backgroundColor: theme.palette.primary.light,\n height: '88px',\n\n '&,*': {\n color: 'white',\n },\n\n ' .MuiTypography-root': {\n fontSize: '22px',\n },\n\n ' .MuiButtonBase-root': {\n marginRight: anchor === 'right' ? theme.spacing(2) : 0,\n },\n}));\n\ntype SidePanelProps = PropsWithChildren<{\n open: boolean;\n anchor?: 'left' | 'right';\n onClose?: React.MouseEventHandler<HTMLElement>;\n titleText?: string;\n width?: number;\n showCloseArrow?: boolean;\n debugOpacity?: boolean;\n headerBoxProps?: BoxProps;\n onOpened?: () => void;\n onClosed?: () => void;\n 'data-testid'?: string;\n navBarOpen?: boolean;\n navBarWidthOpen?: number;\n navBarWidthClosed?: number;\n}>;\n\n/**\n * The SidePanel is designed to be used along with the TopBar component for a\n * consistent look and feel.\n */\nexport default function SidePanel({\n children,\n anchor = 'left',\n open,\n onClose = () => {},\n titleText = '',\n width = DEFAULT_PANEL_WIDTH,\n showCloseArrow = true,\n debugOpacity = false,\n headerBoxProps = {},\n onOpened,\n onClosed,\n 'data-testid': dataTestId,\n navBarOpen = false,\n navBarWidthOpen = 0,\n navBarWidthClosed = 0,\n}: SidePanelProps) {\n return (\n <SidePanelDrawer\n SlideProps={{\n onEntered: () => onOpened?.(),\n onExited: () => onClosed?.(),\n }}\n variant=\"persistent\"\n anchor={anchor}\n open={open}\n width={width}\n debugOpacity={debugOpacity}\n data-testid={dataTestId}\n navBarOpen={navBarOpen}\n navBarWidthOpen={navBarWidthOpen}\n navBarWidthClosed={navBarWidthClosed}\n >\n <DrawerHeaderBox anchor={anchor} {...headerBoxProps}>\n {/* Might be a cleaner way to do this, but it does the job */}\n {anchor === 'left' ? (\n <>\n <Typography variant=\"h6\" color=\"inherit\" component=\"div\">\n {titleText}\n </Typography>\n\n {showCloseArrow && (\n <IconButton onClick={onClose} size=\"large\" aria-label=\"Close left side panel\">\n <ArrowBackIcon data-testid=\"arrowbackicon\" />{' '}\n </IconButton>\n )}\n </>\n ) : (\n <>\n {showCloseArrow && (\n <IconButton onClick={onClose} size=\"large\" aria-label=\"Close right side panel\">\n <ArrowForwardIcon />{' '}\n </IconButton>\n )}\n\n <Typography variant=\"h6\" color=\"inherit\" component=\"div\">\n {titleText}\n </Typography>\n </>\n )}\n </DrawerHeaderBox>\n {children}\n </SidePanelDrawer>\n );\n}\n","import { styled } from '@mui/material';\n\ninterface PanelProps {\n width: number;\n open: boolean;\n}\n\ninterface PanelAwareMarginsProps {\n /** If the leftPanel prop is omitted but a left panel is still in use on the\n * page, it will slide over the top instead of the default pushing */\n leftPanel?: PanelProps;\n\n /** If the rightPanel prop is omitted but a right panel is still in use on the\n * page, it will slide over the top instead of the default pushing */\n rightPanel?: PanelProps;\n}\n\n/** With the optional leftPanel and rightPanel props providing state and width,\n * the children of of the PanelAwareMargins will looks like they is pushed aside\n * by the panels by transitioning the margins. */\nconst PanelAwareMargins = styled('div', {\n shouldForwardProp: (prop) => !(['leftPanel', 'rightPanel'] as Array<PropertyKey>).includes(prop),\n name: 'PanelAwareMargins',\n})<PanelAwareMarginsProps>(({ theme, leftPanel, rightPanel }) => ({\n transition: theme.transitions.create('margin', {\n easing: theme.transitions.easing.sharp,\n duration: theme.transitions.duration.leavingScreen,\n }),\n\n ...(leftPanel?.open && {\n transition: theme.transitions.create('margin', {\n easing: theme.transitions.easing.easeOut,\n duration: theme.transitions.duration.enteringScreen,\n }),\n marginLeft: `${leftPanel?.width ?? 0}px`,\n }),\n ...(rightPanel?.open && {\n transition: theme.transitions.create('margin', {\n easing: theme.transitions.easing.easeOut,\n duration: theme.transitions.duration.enteringScreen,\n }),\n marginRight: `${rightPanel?.width ?? 0}px`,\n }),\n}));\n\nexport default PanelAwareMargins;\n","import { styled } from '@mui/material';\nimport Container from '@mui/material/Container';\n\n/** Just a simple styled container applying our spacings*/\nconst PageContainer = styled(Container, {\n name: 'PageContainer',\n})(({ theme }) => ({\n // Horizontal padding comes from the Container's gutter\n paddingTop: theme.spacing(3),\n paddingBottom: theme.spacing(3),\n}));\n\nexport default PageContainer;\n","import { ComponentProps, PropsWithChildren, ReactNode, useEffect, useState } from 'react';\nimport { Box } from '@mui/material';\n\nimport TopBar from './TopBar';\nimport SidePanel, { DEFAULT_PANEL_WIDTH } from './SidePanel';\nimport PanelAwareMargins from './PanelAwareMargins';\nimport PageContainer from './PageContainer';\n\nconst INITIAL_LEFT_PANEL_OPEN = false;\nconst INITIAL_RIGHT_PANEL_OPEN = false;\n\nconst PANEL_DEFAULTS = {\n titleText: '',\n flavour: 'push',\n width: DEFAULT_PANEL_WIDTH,\n arrowButtons: 'both',\n startOpen: false,\n open: undefined,\n onChangeOpen: undefined,\n content: <></>,\n onOpened: undefined,\n onClosed: undefined,\n dataTestId: undefined,\n};\n\ninterface SidePanelProps {\n titleText?: string;\n content?: ReactNode;\n flavour?: 'push' | 'overlay';\n arrowButtons?: 'open' | 'close' | 'both' | 'none';\n width?: number;\n startOpen?: boolean;\n\n /** Use this and onChangeOpen if you want to use component as a controlled component */\n open?: boolean;\n onChangeOpen?: (open: boolean) => void;\n\n /** Called when the sliding transition to open has finished */\n onOpened?: () => void;\n\n /** Called when the sliding transition to open has finished */\n onClosed?: () => void;\n\n dataTestId?: string;\n}\n\ninterface BasePageLayoutProps {\n titleText?: string;\n\n leftPanel?: SidePanelProps;\n rightPanel?: SidePanelProps;\n\n /** This will only have an effect for panels whose state is not controlled by\n * parent */\n sidePanelsAreMutuallyExclusive?: boolean;\n\n /** Temporary, get rid of later */\n debugOpacity?: boolean;\n\n /** Props applied to the PageContainer component, which is a styled MUI Container */\n pageContainerProps?: ComponentProps<typeof PageContainer>;\n\n topBarDataTestId?: string;\n pageContentDataTestId?: string;\n}\n\ninterface PageLayoutWithNavBarProps extends BasePageLayoutProps {\n navBarOpen: boolean;\n navBarWidthOpen: number;\n navBarWidthClosed: number;\n}\n\ninterface PagelayoutWithoutNavBarProps extends BasePageLayoutProps {\n navBarOpen?: never;\n navBarWidthOpen?: never;\n navBarWidthClosed?: never;\n}\n\nexport type PageLayoutProps = PropsWithChildren<\n PageLayoutWithNavBarProps | PagelayoutWithoutNavBarProps\n>;\n\nexport default function PageLayout({\n children,\n titleText = '',\n leftPanel,\n rightPanel,\n sidePanelsAreMutuallyExclusive = true,\n debugOpacity = false,\n pageContainerProps,\n pageContentDataTestId,\n topBarDataTestId,\n navBarOpen,\n navBarWidthOpen,\n navBarWidthClosed,\n}: PageLayoutProps) {\n const [leftPanelOpenInternal, setLeftPanelOpenInternal] = useState(INITIAL_LEFT_PANEL_OPEN);\n const [rightPanelOpenInternal, setRightPanelOpenInternal] = useState(INITIAL_RIGHT_PANEL_OPEN);\n const [leftPanelOpenInternalPrevious, setLeftPanelOpenInternalPrevious] =\n useState(INITIAL_LEFT_PANEL_OPEN);\n const [rightPanelOpenInternalPrevious, setRightPanelOpenInternalPrevious] =\n useState(INITIAL_RIGHT_PANEL_OPEN);\n\n const includeLeftPanel = leftPanel !== undefined;\n const includeRightPanel = rightPanel !== undefined;\n\n const {\n titleText: leftPanelTitleText,\n content: leftPanelContent,\n flavour: leftPanelFlavour,\n open: leftPanelOpen,\n onChangeOpen: leftPanelOnChangeOpen,\n width: leftPanelWidth,\n arrowButtons: leftPanelArrowButtons,\n startOpen: leftPanelStartOpen,\n onOpened: leftPanelOnOpened,\n onClosed: leftPanelOnClosed,\n dataTestId: leftPanelDataTestId,\n } = leftPanel ? { ...PANEL_DEFAULTS, ...leftPanel } : { ...PANEL_DEFAULTS };\n\n const {\n titleText: rightPanelTitleText,\n content: rightPanelContent,\n flavour: rightPanelFlavour,\n open: rightPanelOpen,\n onChangeOpen: rightPanelOnChangeOpen,\n width: rightPanelWidth,\n arrowButtons: rightPanelArrowButtons,\n startOpen: rightPanelStartOpen,\n onOpened: rightPanelOnOpened,\n onClosed: rightPanelOnClosed,\n dataTestId: rightPanelDataTestId,\n } = rightPanel ? { ...PANEL_DEFAULTS, ...rightPanel } : { ...PANEL_DEFAULTS };\n\n useEffect(() => {\n if (leftPanelStartOpen !== INITIAL_LEFT_PANEL_OPEN) {\n setLeftPanelOpenInternal(leftPanelStartOpen);\n setLeftPanelOpenInternalPrevious(leftPanelStartOpen);\n }\n }, [leftPanelStartOpen]);\n\n useEffect(() => {\n if (rightPanelStartOpen !== INITIAL_RIGHT_PANEL_OPEN) {\n setRightPanelOpenInternal(rightPanelStartOpen);\n setRightPanelOpenInternalPrevious(rightPanelStartOpen);\n }\n }, [rightPanelStartOpen]);\n\n const leftPanelOpenCurrent = leftPanelOpen === undefined ? leftPanelOpenInternal : leftPanelOpen;\n\n const rightPanelOpenCurrent =\n rightPanelOpen === undefined ? rightPanelOpenInternal : rightPanelOpen;\n\n const handleLeftPanelChangeOpen = (open: boolean) => {\n if (leftPanelOpen === undefined) {\n // If not in controlled mode, update the internal state\n setLeftPanelOpenInternal(open);\n\n if (sidePanelsAreMutuallyExclusive && includeRightPanel) {\n if (open) {\n setRightPanelOpenInternal(false);\n setRightPanelOpenInternalPrevious(rightPanelOpenInternal);\n } else {\n setRightPanelOpenInternal(rightPanelOpenInternalPrevious);\n }\n }\n }\n // Likewise, if callback provided, call it\n if (leftPanelOnChangeOpen) leftPanelOnChangeOpen(open);\n };\n\n const handleRightPanelChangeOpen = (open: boolean) => {\n if (rightPanelOpen === undefined) {\n setRightPanelOpenInternal(open);\n if (sidePanelsAreMutuallyExclusive && includeLeftPanel) {\n if (open) {\n setLeftPanelOpenInternal(false);\n setLeftPanelOpenInternalPrevious(leftPanelOpenInternal);\n } else {\n setLeftPanelOpenInternal(leftPanelOpenInternalPrevious);\n }\n }\n }\n if (rightPanelOnChangeOpen) rightPanelOnChangeOpen(open);\n };\n\n return (\n <Box>\n {includeLeftPanel && (\n <SidePanel\n data-testid={leftPanelDataTestId}\n anchor=\"left\"\n open={leftPanelOpenCurrent}\n onClose={() => handleLeftPanelChangeOpen(false)}\n width={leftPanelWidth}\n titleText={leftPanelTitleText}\n debugOpacity={debugOpacity}\n showCloseArrow={leftPanelArrowButtons === 'both' || leftPanelArrowButtons === 'close'}\n onOpened={leftPanelOnOpened}\n onClosed={leftPanelOnClosed}\n navBarOpen={navBarOpen}\n navBarWidthOpen={navBarWidthOpen}\n navBarWidthClosed={navBarWidthClosed}\n >\n {leftPanelContent}\n </SidePanel>\n )}\n\n {includeRightPanel && (\n <SidePanel\n data-testid={rightPanelDataTestId}\n anchor=\"right\"\n open={rightPanelOpenCurrent}\n onClose={() => handleRightPanelChangeOpen(false)}\n width={rightPanelWidth}\n titleText={rightPanelTitleText}\n debugOpacity={debugOpacity}\n showCloseArrow={rightPanelArrowButtons === 'both' || rightPanelArrowButtons === 'close'}\n onOpened={rightPanelOnOpened}\n onClosed={rightPanelOnClosed}\n navBarOpen={navBarOpen}\n navBarWidthOpen={navBarWidthOpen}\n navBarWidthClosed={navBarWidthClosed}\n >\n {rightPanelContent}\n </SidePanel>\n )}\n\n <TopBar\n titleText={titleText}\n data-testid={topBarDataTestId}\n {...(includeLeftPanel && leftPanelFlavour === 'push'\n ? {\n leftPanel: {\n open: leftPanelOpenCurrent,\n width: leftPanelWidth,\n onOpen: () => handleLeftPanelChangeOpen(true),\n showOpenArrow: leftPanelArrowButtons === 'both' || leftPanelArrowButtons === 'open',\n },\n }\n : {})}\n {...(includeRightPanel && rightPanelFlavour === 'push'\n ? {\n rightPanel: {\n open: rightPanelOpenCurrent,\n width: rightPanelWidth,\n onOpen: () => handleRightPanelChangeOpen(true),\n showOpenArrow:\n rightPanelArrowButtons === 'both' || rightPanelArrowButtons === 'open',\n },\n }\n : {})}\n />\n\n <PanelAwareMargins\n {...(leftPanelFlavour === 'push'\n ? {\n leftPanel: {\n open: leftPanelOpenCurrent,\n width: leftPanelWidth,\n },\n }\n : {})}\n {...(rightPanelFlavour === 'push'\n ? {\n rightPanel: {\n open: rightPanelOpenCurrent,\n width: rightPanelWidth,\n },\n }\n : {})}\n >\n <PageContainer data-testid={pageContentDataTestId} {...pageContainerProps}>\n {children}\n </PageContainer>\n </PanelAwareMargins>\n </Box>\n );\n}\n","import { alpha, createTheme } from '@mui/material/styles';\n\nexport const internalAGSystemsTheme = createTheme({\n palette: {\n primary: {\n main: '#007236',\n dark: '#005221',\n light: '#00A04E',\n contrastText: '#FFFFFF',\n },\n secondary: {\n main: '#662D91',\n dark: '#440E62',\n light: '#93268F',\n contrastText: '#FFFFFF',\n },\n error: {\n main: '#D32F2F',\n dark: '#C62828',\n light: '#EF5350',\n },\n info: {\n main: '#0288D1',\n dark: '#01579B',\n light: '#03A9F4',\n },\n success: {\n main: '#0288D1',\n dark: '#01579B',\n light: '#03A9F4',\n },\n },\n components: {\n MuiTextField: {\n defaultProps: { color: 'secondary' },\n },\n MuiToggleButtonGroup: {\n defaultProps: { color: 'secondary' },\n },\n MuiCheckbox: {\n defaultProps: { color: 'secondary' },\n },\n MuiSelect: {\n defaultProps: { color: 'secondary' },\n },\n MuiSwitch: {\n defaultProps: { color: 'secondary' },\n },\n MuiFormControl: {\n defaultProps: { color: 'secondary' },\n },\n MuiMenuItem: {\n // Setting defaultProps for color on MenuItem does not work, so update manually\n styleOverrides: {\n root: ({ theme }) => ({\n '&.Mui-selected': {\n backgroundColor: alpha(\n theme.palette.secondary.main,\n theme.palette.action.selectedOpacity\n ),\n '&:hover': {\n backgroundColor: alpha(\n theme.palette.secondary.main,\n theme.palette.action.selectedOpacity\n ),\n },\n '&.Mui-focusVisible': {\n backgroundColor: alpha(\n theme.palette.secondary.main,\n theme.palette.action.focusOpacity\n ),\n },\n },\n }),\n },\n },\n },\n typography: {\n // I couldn't think of what to call this. It is an attempt to match\n // https://www.figma.com/file/atonRPl2YD9A1NCntbDtKR/List-Filter-and-Product-Concept?node-id=1187%3A43730\n // but not sure if line height should be changed\n explainer: {\n fontSize: '14px',\n marginBlockStart: '1em',\n },\n h3: {\n fontSize: '1rem',\n fontWeight: 700,\n },\n },\n});\n\nexport const fed21Theme = createTheme({\n palette: {\n primary: {\n dark: '#00A651',\n light: '#A3D39C',\n main: '#007236',\n contrastText: '#FFF',\n },\n warning: {\n main: '#F5871F',\n light: '#FCC589',\n dark: '#A2590A',\n contrastText: '#FFF',\n },\n secondary: {\n main: '#662D91',\n light: '#BD8CBF',\n dark: '#440E62',\n contrastText: '#FFF',\n },\n error: {\n main: '#D43C95',\n light: '#8F2064',\n dark: '#F9CDE0',\n contrastText: '#FFF',\n },\n info: {\n main: '#00A88D',\n light: '#ADDCCF',\n dark: '#005243',\n contrastText: '#FFF',\n },\n success: {\n main: '#00A651',\n light: '#A3D39C',\n dark: '#007236',\n contrastText: '#FFF',\n },\n },\n typography: {\n // I couldn't think of what to call this. It is an attempt to match\n // https://www.figma.com/file/atonRPl2YD9A1NCntbDtKR/List-Filter-and-Product-Concept?node-id=1187%3A43730\n // but not sure if line height should be changed\n explainer: {\n fontSize: '14px',\n marginBlockStart: '1em',\n },\n },\n});\n","import { PropsWithChildren } from 'react';\nimport { ThemeProvider } from '@mui/material/styles';\n\nimport { internalAGSystemsTheme, fed21Theme } from './themes';\n\nexport type AgThemeName = 'internal' | 'fed21';\n\nexport interface AgThemeProviderProps {\n name?: AgThemeName;\n}\n\nexport default function AgThemeProvider({\n name = 'internal',\n children,\n}: PropsWithChildren<AgThemeProviderProps>) {\n const theme =\n name === 'internal' ? internalAGSystemsTheme : name === 'fed21' ? fed21Theme : undefined;\n\n // Should be resolved when we move to React >= 18\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n return <ThemeProvider theme={theme}>{children}</ThemeProvider>;\n}\n","// The default props passed to the underlying Snackbar component\nimport { SnackbarOrigin } from '@mui/material/Snackbar';\n\nexport const defaultSnackbarProps = {\n autoHideDuration: 6000,\n anchorOrigin: { vertical: 'top', horizontal: 'center' } as SnackbarOrigin,\n\n // The default is false. If we prefer timer to continue when window loses\n // focus, change to true\n disableWindowBlurListener: false,\n};\n\nexport const defaultSaladBarProps = {\n shouldClose: (_event: Event | React.SyntheticEvent<Element, Event>, reason: string) => {\n return reason !== 'clickaway';\n },\n};\n\nexport const defaultEnqueueNotificationOptions = {\n message: '',\n severity: 'info',\n variant: 'standard',\n progressIndicator: undefined, // Can use 'circular' or 'linear'\n};\n","import React, { useRef, useState, createContext, useCallback } from 'react';\nimport Snackbar, { SnackbarProps } from '@mui/material/Snackbar';\nimport Alert from '@mui/material/Alert';\nimport LinearProgress from '@mui/material/LinearProgress';\nimport CircularProgress from '@mui/material/CircularProgress';\n\nimport {\n Notification,\n SaladBarCloseReason,\n SaladBarState,\n SaladBarActions,\n SaladBarContext,\n} from './types';\nimport {\n defaultSaladBarProps,\n defaultSnackbarProps,\n defaultEnqueueNotificationOptions,\n} from './defaults';\n\nconst MAX_QUEUE_LENGTH = 100;\nconst MAX_QUEUE_HIT_REPORT_INTERVAL = 2000;\nconst SALADBAR_INDEX = 2000;\n\n// No need to use uuids, just use an incremented value\nconst generateNotificationKey = (() => {\n let previousKey = 0;\n return () => {\n previousKey += 1;\n return previousKey;\n };\n})();\n\nconst alertWithLinearProgressStyle = {\n borderBottomLeftRadius: '0px',\n borderBottomRightRadius: '0px',\n};\n\n// Note: Must be at at this scope, otherwise useEffect will loop infinitely\nconst defaultOverrideState = {};\nconst defaultOverrideActions = {};\n\nexport const Context = createContext<SaladBarContext | null>(null);\n\nexport interface SaladBarProviderProps extends SnackbarProps {\n /** Allow overriding the state of the SaladBar (for tests etc)*/\n overrideState?: Partial<SaladBarState>;\n\n /** Allow overriding the actions of the SaladBar (for tests etc)*/\n overrideActions?: Partial<SaladBarActions>;\n\n /** Called when an event triggers closing of currently displayed snackbar.\n * Default implementation returns false if reason is 'clickaway', otherwise\n * true.*/\n shouldClose?: (\n event: Event | React.SyntheticEvent<Element, Event>,\n reason: SaladBarCloseReason\n ) => boolean;\n}\n\nexport default function SaladBarProvider({\n overrideState = defaultOverrideState,\n overrideActions = defaultOverrideActions,\n shouldClose = defaultSaladBarProps.shouldClose,\n children,\n ...snackbarProps\n}: SaladBarProviderProps) {\n const [{ open }, setSaladBarState] = useState({ open: false });\n\n // We use a ref instead of a state to store the actual data, because we want\n // queue to be persistent across the whole lifetime of component. I considered\n // using yocto-queue because it would be O(1) instead of O(n), but its not\n // designed to access the head without removing it and its not going to make\n // much difference anyway.\n const queueRef = useRef<Notification[]>([]);\n\n const limitLastHitAt = useRef(Date.now());\n const limitHitCountSinceLastReport = useRef(0);\n\n const setOpen = useCallback((newVal: boolean) => {\n setSaladBarState({ open: newVal });\n }, []);\n\n const enqueueNotification = useCallback((notification: Notification = {}) => {\n limitHitCountSinceLastReport.current += 1;\n if (queueRef.current.length >= MAX_QUEUE_LENGTH) {\n // If the queue length is hit, probably stuck in some sort of loop, so\n // don't want to spam logs instantly so space it out\n if (Date.now() - limitLastHitAt.current >= MAX_QUEUE_HIT_REPORT_INTERVAL) {\n limitLastHitAt.current = Date.now();\n console.error(\n `SaladBarProvider: MAX_QUEUE_LENGTH (${MAX_QUEUE_LENGTH}) hit ${limitHitCountSinceLastReport.current} times in last ${MAX_QUEUE_HIT_REPORT_INTERVAL}ms)`\n );\n limitHitCountSinceLastReport.current = 0;\n }\n }\n\n const newNotification = {\n ...defaultEnqueueNotificationOptions,\n key: generateNotificationKey(), // Can be overridden.\n ...notification, // This could result in collisons, but unlikely.\n };\n\n // Add to the end of queue\n queueRef.current.push(newNotification as Notification);\n\n // If the queue was previously empty, then open the snackbar. We don't do it\n // whenever enqueueNotification is called since it will mess up transitions\n if (queueRef.current.length === 1) setSaladBarState({ open: true });\n\n return newNotification.key;\n }, []);\n\n const enqueueSuccessNotification = (message = '', options = {}) =>\n enqueueNotification({ message, severity: 'success', ...options });\n\n const enqueueInfoNotification = (message = '', options = {}) =>\n enqueueNotification({ message, severity: 'info', ...options });\n\n const enqueueWarningNotification = (message = '', options = {}) =>\n enqueueNotification({ message, severity: 'warning', ...options });\n\n const enqueueErrorNotification = (message = '', options = {}) =>\n enqueueNotification({ message, severity: 'error', ...options });\n\n /**\n * Remove the notification with specified key from the queue. If the key is\n * not found, immediately returns null.\n *\n * @param key - The key as returned from enqueue...() function.\n *\n * @returns The removed notification\n */\n const removeNotification = (key: Notification['key']) => {\n const index = queueRef.current.findIndex((x) => x.key === key);\n if (index === -1) return;\n\n if (index === 0) {\n // If its at the front of the queue, it is either currently being\n // displayed or in process of being closed. Either way, we can just set\n // open to false\n setSaladBarState({ open: false });\n return queueRef.current[0];\n }\n // Otherwise we just remove it from the queue, it won't need to transition\n return queueRef.current.splice(index, 1);\n };\n\n const handleClose = (\n event: Event | React.SyntheticEvent<Element, Event>,\n reason: SaladBarCloseReason\n ) => {\n if (shouldClose(event, reason)) setSaladBarState({ open: false });\n };\n\n // Callback fired before the transition is exiting.\n const handleExit = () => {};\n\n // Callback fired when the transition has exited.\n const handleExited = () => {\n // Remove head of queue\n queueRef.current.shift();\n\n // If there is still something on the queue, then re-open\n if (queueRef.current.length > 0) setSaladBarState({ open: true });\n };\n\n // The notification to display is the one at head of queue\n const currentNotification = queueRef.current[0] ?? {\n ...defaultEnqueueNotificationOptions,\n };\n\n // Can also override certain props on a notification level\n const currentNotificationSnackbarProps: { autoHideDuration?: number } = {};\n // Probably a better way of doing this\n if ('autoHideDuration' in currentNotification) {\n currentNotificationSnackbarProps.autoHideDuration = currentNotification.autoHideDuration;\n }\n\n // Note the order of props in Snackbar, we don't allow overriding open and\n // onClose directly.\n const snackbarFinalProps = {\n ...defaultSnackbarProps,\n ...snackbarProps,\n };\n\n const value: SaladBarContext = {\n open,\n setOpen,\n enqueueNotification,\n enqueueSuccessNotification,\n enqueueInfoNotification,\n enqueueWarningNotification,\n enqueueErrorNotification,\n removeNotification,\n ...overrideState,\n ...overrideActions,\n };\n\n return (\n <Context.Provider value={value}>\n {children}\n <Snackbar\n {...snackbarFinalProps}\n {...currentNotificationSnackbarProps}\n open={open}\n onClose={handleClose}\n TransitionProps={{\n onExited: handleExited,\n onExit: handleExit,\n }}\n sx={{ zIndex: SALADBAR_INDEX }}\n >\n <div>\n <Alert\n onClose={(event) => handleClose(event, 'closeAlert')}\n severity={currentNotification.severity}\n variant={'filled'}\n icon={\n currentNotification.progressIndicator === 'circular' ? (\n <CircularProgress size=\"1em\" />\n ) : undefined\n }\n style={\n currentNotification.progressIndicator === 'linear'\n ? alertWithLinearProgressStyle\n : undefined\n }\n >\n {currentNotification.message}\n </Alert>\n {currentNotification.progressIndicator === 'linear' && <LinearProgress color=\"primary\" />}\n </div>\n </Snackbar>\n </Context.Provider>\n );\n}\n","import { useContext } from 'react';\n\nimport { Context } from './SaladBarContext';\nimport { ContextError } from '../../errors/ContextError';\n\n/**\n * Use the `useSaladBar` hook in components to access the enqueueNotification()\n * method to add a snackbar message to queue.\n *\n * Must be used inside a <SaladBarProvider>\n *\n * Example:\n *\n * ```js\n * const {\n * enqueueNotification,\n * enqueueSuccessNotification,\n * enqueueInfoNotification,\n * enqueueWarningNotification,\n * enqueueErrorNotification,\n * } = useSaladBar();\n * ...\n * enqueueNotification({message: 'hello', severity: 'info'});\n * // or\n * enqueueInfoNotification('hello');\n * ```\n */\nexport function useSaladBar() {\n const context = useContext(Context);\n\n if (context === null) {\n throw new ContextError('Error: Tried to useSaladBar outside of a <SaladBarProvider>');\n }\n\n return context;\n}\n","/* eslint-disable react/prop-types */\n/* eslint-disable react/display-name */\nimport { createHelper } from 'souvlaki';\n\nimport SaladBarProvider from './SaladBarContext';\n\nexport const withSaladBarProvider = createHelper(() => ({ children }) => (\n <SaladBarProvider>{children}</SaladBarProvider>\n));\n"],"names":["ExampleComponent","text","num","setNum","useState","jsxs","Fragment","jsx","Typography","Button","oldNum","Paper","NAVBAR_WIDTH_OPENED","NAVBAR_WIDTH_CLOSED","PREFIX","classes","Root","styled","theme","sharedOverrides","openedMixin","__spreadValues","closedMixin","NavDrawer","Drawer","prop","open","ContextError","AgError","__publicField","Context","createContext","defaultOverrideState","defaultOverrideActions","NavBarProvider","overrideState","overrideActions","children","setNavBarState","setOpen","useCallback","newVal","value","useNavBar","context","useContext","buildNavBarState","overrides","withNavBarProvider","createHelper","state","actions","SELECTED_INDICATOR_WIDTH","NavBarDarkStyledList","List","NavBar","dataTestId","CssBaseline","TOP_STRIPE_HEIGHT","TITLE_BAR_HEIGHT","leftPanel","rightPanel","_a","_b","TopBar","titleText","Box","IconButton","ArrowForwardIcon","ArrowBackIcon","DEFAULT_PANEL_WIDTH","SidePanelDrawer","width","debugOpacity","anchor","navBarOpen","navBarWidthOpen","navBarWidthClosed","DrawerHeaderBox","__spreadProps","SidePanel","onClose","showCloseArrow","headerBoxProps","onOpened","onClosed","PanelAwareMargins","PageContainer","Container","INITIAL_LEFT_PANEL_OPEN","INITIAL_RIGHT_PANEL_OPEN","PANEL_DEFAULTS","PageLayout","sidePanelsAreMutuallyExclusive","pageContainerProps","pageContentDataTestId","topBarDataTestId","leftPanelOpenInternal","setLeftPanelOpenInternal","rightPanelOpenInternal","setRightPanelOpenInternal","leftPanelOpenInternalPrevious","setLeftPanelOpenInternalPrevious","rightPanelOpenInternalPrevious","setRightPanelOpenInternalPrevious","includeLeftPanel","includeRightPanel","leftPanelTitleText","leftPanelContent","leftPanelFlavour","leftPanelOpen","leftPanelOnChangeOpen","leftPanelWidth","leftPanelArrowButtons","leftPanelStartOpen","leftPanelOnOpened","leftPanelOnClosed","leftPanelDataTestId","rightPanelTitleText","rightPanelContent","rightPanelFlavour","rightPanelOpen","rightPanelOnChangeOpen","rightPanelWidth","rightPanelArrowButtons","rightPanelStartOpen","rightPanelOnOpened","rightPanelOnClosed","rightPanelDataTestId","useEffect","leftPanelOpenCurrent","rightPanelOpenCurrent","handleLeftPanelChangeOpen","handleRightPanelChangeOpen","internalAGSystemsTheme","createTheme","alpha","fed21Theme","AgThemeProvider","name","ThemeProvider","defaultSnackbarProps","defaultSaladBarProps","_event","reason","defaultEnqueueNotificationOptions","MAX_QUEUE_LENGTH","MAX_QUEUE_HIT_REPORT_INTERVAL","SALADBAR_INDEX","generateNotificationKey","previousKey","alertWithLinearProgressStyle","SaladBarProvider","shouldClose","snackbarProps","__objRest","setSaladBarState","queueRef","useRef","limitLastHitAt","limitHitCountSinceLastReport","enqueueNotification","notification","newNotification","enqueueSuccessNotification","message","options","enqueueInfoNotification","enqueueWarningNotification","enqueueErrorNotification","removeNotification","key","index","x","handleClose","event","handleExit","handleExited","currentNotification","currentNotificationSnackbarProps","snackbarFinalProps","Snackbar","Alert","CircularProgress","LinearProgress","useSaladBar","withSaladBarProvider"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../src/components/ExampleComponent/index.tsx","../../src/components/NavBar/Styling.tsx","../../src/errors/ContextError.ts","../../src/components/NavBar/NavBarContext.tsx","../../src/components/NavBar/testWrappers.tsx","../../src/components/NavBar/NavBarDarkStyledList.tsx","../../src/components/NavBar/index.tsx","../../src/layouts/PageLayout/TopBar.tsx","../../src/layouts/PageLayout/SidePanel.tsx","../../src/layouts/PageLayout/PanelAwareMargins.tsx","../../src/layouts/PageLayout/PageContainer.tsx","../../src/layouts/PageLayout/index.tsx","../../src/providers/AgTheme/themes.ts","../../src/providers/AgTheme/index.tsx","../../src/providers/SaladBar/defaults.ts","../../src/providers/SaladBar/SaladBarContext.tsx","../../src/providers/SaladBar/useSaladBar.ts","../../src/providers/SaladBar/testWrappers.tsx"],"sourcesContent":["import { useState } from 'react';\nimport Button from '@mui/material/Button';\nimport Paper from '@mui/material/Paper';\nimport Typography from '@mui/material/Typography';\n\nexport interface ExampleComponentProps {\n /** Test */\n text: string;\n}\n\nexport default function ExampleComponent({ text }: ExampleComponentProps) {\n const [num, setNum] = useState(0);\n\n return (\n <>\n <Typography variant=\"h6\" color=\"inherit\" component=\"div\" sx={{ fontSize: '22px' }}>\n Hello world\n </Typography>\n\n <Typography variant=\"caption\" display=\"block\">\n <span>Just ensuring MUI is working as planned as a peer dependency. v0.0.11</span>\n </Typography>\n <Button\n variant=\"outlined\"\n onClick={() => setNum((oldNum) => oldNum + 1)}\n aria-label=\"Increment\"\n >\n Hello I am a button\n </Button>\n <p>\n This is some text: <span>{text}</span>\n </p>\n <Paper>This number will incremember when button pressed: {num}</Paper>\n </>\n );\n}\n","import { styled, CSSObject } from '@mui/material/styles';\nimport Drawer from '@mui/material/Drawer';\n\nexport const NAVBAR_WIDTH_OPENED = 330;\nexport const NAVBAR_WIDTH_CLOSED = 73;\n\nconst PREFIX = 'Navbar';\n\nexport const classes = {\n root: `${PREFIX}-root`,\n menuButton: `${PREFIX}-menuButton`,\n hide: `${PREFIX}-hide`,\n content: `${PREFIX}-content`,\n userInfoHolder: `${PREFIX}-userInfoHolder`,\n settings: `${PREFIX}-settings`,\n pieChartIcon: `${PREFIX}-pieChartIcon`,\n};\n\nexport const Root = styled('div', { name: 'NavBar' })(({ theme }) => ({\n [`&.${classes.root}`]: {\n display: 'flex',\n },\n\n [`& .${classes.menuButton}`]: {\n marginRight: 36,\n },\n\n [`& .${classes.hide}`]: {\n display: 'none',\n },\n\n [`& .${classes.content}`]: {\n flexGrow: 1,\n padding: theme.spacing(3),\n },\n\n [`& .${classes.userInfoHolder}`]: {\n height: '148px',\n marginTop: '64px',\n marginBottom: '16px',\n },\n}));\n\n// The starting point for this was the \"Mini variant drawer\" of\n// https://mui.com/components/drawers/#main-content\n\nconst sharedOverrides = (): CSSObject => ({\n position: 'absolute',\n height: '100%',\n overflowX: 'hidden',\n overflowY: 'hidden',\n color: 'white',\n backgroundColor: 'black',\n});\n\nconst openedMixin = (): CSSObject => ({\n width: NAVBAR_WIDTH_OPENED,\n ...sharedOverrides(),\n});\n\nconst closedMixin = (): CSSObject => ({\n width: NAVBAR_WIDTH_CLOSED,\n ...sharedOverrides(),\n});\n\nexport const NavDrawer = styled(Drawer, {\n shouldForwardProp: (prop) => prop !== 'open',\n})(({ theme, open }) => ({\n width: open ? NAVBAR_WIDTH_OPENED : NAVBAR_WIDTH_CLOSED,\n flexShrink: 0,\n whiteSpace: 'nowrap',\n boxSizing: 'border-box',\n zIndex: theme.zIndex.drawer + 100,\n\n ...(open && {\n '& .MuiDrawer-paper': openedMixin(),\n }),\n ...(!open && {\n '& .MuiDrawer-paper': closedMixin(),\n }),\n}));\n","import { AgError } from '@australiangreens/ag-error';\n\n// Superclass for errors involving React context.\nexport class ContextError extends AgError {\n static errorName = 'ContextError';\n}\n","import { createContext, useContext, PropsWithChildren, useState, useCallback } from 'react';\nimport { ContextError } from '../../errors/ContextError';\n\nexport type NavBarState = {\n open: boolean;\n};\n\nexport type NavBarActions = {\n setOpen: (newVal: boolean) => void;\n};\n\ntype NavBarContext = NavBarState & NavBarActions;\n\nconst Context = createContext<NavBarContext | null>(null);\n\ntype NavBarProviderProps = {\n overrideState?: Partial<NavBarState>;\n overrideActions?: Partial<NavBarActions>;\n};\n\n// Note: Must be at at this scope, otherwise useEffect will loop infinitely\nconst defaultOverrideState = {};\nconst defaultOverrideActions = {};\n\nexport const NavBarProvider = ({\n overrideState = defaultOverrideState,\n overrideActions = defaultOverrideActions,\n children,\n}: PropsWithChildren<NavBarProviderProps>) => {\n const [{ open }, setNavBarState] = useState<NavBarState>({ open: true });\n\n const setOpen = useCallback((newVal: boolean) => {\n setNavBarState({ open: newVal });\n }, []);\n\n const value: NavBarContext = {\n open,\n setOpen,\n ...overrideState,\n ...overrideActions,\n };\n\n return <Context.Provider value={value}>{children}</Context.Provider>;\n};\n\nexport const useNavBar = () => {\n const context = useContext(Context);\n\n if (context === null) {\n throw new ContextError('Error: Tried to useNavBar outside of a <NavBarProvider>');\n }\n\n return context;\n};\n","/* eslint-disable react/prop-types */\n/* eslint-disable react/display-name */\nimport { createHelper } from 'souvlaki';\n\nimport { NavBarProvider, NavBarActions, NavBarState } from './NavBarContext';\n\nexport type Builder<T> = (overrides?: Partial<T>) => T;\n\nexport const buildNavBarState: Builder<NavBarState> = (overrides = {}) => ({\n open: true,\n ...overrides,\n});\n\nexport const withNavBarProvider = createHelper(\n (state: Partial<NavBarState> = buildNavBarState(), actions: Partial<NavBarActions> = {}) =>\n ({ children }) => {\n return (\n <NavBarProvider overrideState={state} overrideActions={actions}>\n {children}\n </NavBarProvider>\n );\n }\n);\n","import { styled } from '@mui/material/styles';\nimport List, { ListProps } from '@mui/material/List';\n\nconst SELECTED_INDICATOR_WIDTH = 7;\n\nexport const NavBarDarkStyledList = styled(List)<ListProps>(({ theme }) => ({\n backgroundColor: 'black',\n color: 'white',\n\n '& .MuiListItem-root': {\n padding: 'unset',\n },\n\n '& .MuiListItemButton-root': {\n ' .MuiListItemIcon-root': {\n color: 'white',\n padding: `${SELECTED_INDICATOR_WIDTH}px`,\n },\n\n // Focus state\n '&.Mui-focusVisible': {\n backgroundColor: theme.palette.grey[700],\n },\n\n // Selected state\n '&.Mui-selected': {\n borderLeftStyle: 'solid',\n borderLeftWidth: '7px',\n borderLeftColor: theme.palette.primary.main,\n paddingLeft: `calc(${theme.spacing(2)} - ${SELECTED_INDICATOR_WIDTH}px)`,\n },\n\n // Hover state\n '&:hover': {\n backgroundColor: theme.palette.primary.dark,\n },\n\n // Focus+Selected state\n '&.Mui-selected.Mui-focusVisible': {\n backgroundColor: theme.palette.grey[700],\n },\n\n // Hover+Selected state\n '&.Mui-selected:hover': {\n backgroundColor: theme.palette.primary.dark,\n },\n\n // Focus+Hover+Selected state doesn't need to be specified\n // '&.Mui-selected.Mui-focusVisible:hover': {\n // },\n },\n})) as typeof List;\n","import { PropsWithChildren } from 'react';\nimport CssBaseline from '@mui/material/CssBaseline';\n\nimport { classes, Root, NavDrawer } from './Styling';\nimport { useNavBar } from './NavBarContext';\n\nexport { NAVBAR_WIDTH_OPENED, NAVBAR_WIDTH_CLOSED } from './Styling';\n\nexport type NavbarProps = {\n /** Set the datatest-id on the root element for using reactdom's getByTestId()\n * function */\n 'data-testid'?: string;\n};\n\n// TODO: Add in more common elements (or make another component) for user/organisations/logout etc?\n// TODO: Should there be two sets of 'children', one for the list and one for dialogs etc?\n\n// TODO: Rather than exporting the min and max widths, would it make more sense\n// TODO: to just share them via the context provider?\n\n/**\n * A (currently uncontrolled) styled navigation bar wth a context provider to\n * retrieve its current open/closed state. At this point in time its pretty\n * unopinionated, it just renders whatever children it is given. THe\n * NavBarDarkStyledList component can be used for consistent styling against the\n * background. We'll be changing the way we use NavBars soon anyway, so not much\n * point solidying the patterns yet.\n */\nexport default function NavBar({\n 'data-testid': dataTestId,\n children,\n}: PropsWithChildren<NavbarProps>) {\n const { open } = useNavBar();\n\n return (\n <Root className={classes.root} data-testid={dataTestId}>\n <CssBaseline />\n <NavDrawer\n variant=\"permanent\"\n anchor=\"left\"\n // We aren't using transitions, and {0} will still create an unwanted timeout\n transitionDuration={null as unknown as number}\n open={open}\n >\n {children}\n </NavDrawer>\n </Root>\n );\n}\n\nexport * from './NavBarContext';\nexport * from './testWrappers';\n\nexport * from './NavBarDarkStyledList';\n\n// TODO: This is a temporary fix, library clients shouldn't need this\nexport { classes as navBarClasses } from './Styling';\n","import { Box, IconButton, styled } from '@mui/material';\nimport Typography from '@mui/material/Typography';\nimport ArrowForwardIcon from '@mui/icons-material/ArrowForward';\nimport ArrowBackIcon from '@mui/icons-material/ArrowBack';\n\nconst TOP_STRIPE_HEIGHT = 24;\nconst TITLE_BAR_HEIGHT = 64;\n\nconst PREFIX = 'TopBar';\n\ninterface PanelProps {\n open: boolean;\n width: number;\n showOpenArrow: boolean;\n\n /** Called when the arrow button is pressed (if showOpenButton is true) */\n onOpen?: () => void;\n\n showOpenButton?: boolean;\n}\n\nexport interface TopBarProps {\n titleText?: string;\n leftPanel?: PanelProps;\n rightPanel?: PanelProps;\n 'data-testid'?: string;\n}\n\nexport const classes = {\n topStripe: `${PREFIX}-topStripe`,\n titleBar: `${PREFIX}-titleBar`,\n titleSlider: `${PREFIX}-titleSlider`,\n\n titleText: `${PREFIX}-titleText`,\n leftPanelButton: `${PREFIX}-leftPanelButton`,\n rightPanelButton: `${PREFIX}-leftPanelButton`,\n};\n\ninterface RootProps {\n leftPanel?: PanelProps;\n rightPanel?: PanelProps;\n}\n\nconst Root = styled('div', {\n shouldForwardProp: (prop) => !(['leftPanel', 'rightPanel'] as Array<PropertyKey>).includes(prop),\n name: PREFIX,\n})<RootProps>(({ theme, leftPanel, rightPanel }) => ({\n width: '100%',\n\n [`& .${classes.topStripe}`]: {\n width: '100%',\n height: `${TOP_STRIPE_HEIGHT}px`,\n backgroundColor: theme.palette.primary.main,\n },\n\n [`& .${classes.titleBar}`]: {\n backgroundColor: theme.palette.primary.light,\n height: `${TITLE_BAR_HEIGHT}px`,\n padding: theme.spacing(0, 3),\n width: '100%',\n },\n\n [`& .${classes.titleSlider}`]: {\n height: '100%',\n display: 'flex',\n alignItems: 'center',\n color: 'white',\n\n transition: theme.transitions.create('margin', {\n easing: theme.transitions.easing.sharp,\n duration: theme.transitions.duration.leavingScreen,\n }),\n\n [`& .${classes.leftPanelButton}`]: {\n marginRight: theme.spacing(2),\n flexGrow: 0,\n },\n\n [`& .${classes.titleText}`]: {\n flexGrow: 1,\n },\n\n [`& .${classes.rightPanelButton}`]: {\n flexGrow: 0,\n },\n\n ...(leftPanel?.open && {\n transition: theme.transitions.create('margin', {\n easing: theme.transitions.easing.easeOut,\n duration: theme.transitions.duration.enteringScreen,\n }),\n marginLeft: `${leftPanel?.width ?? 0}px`,\n }),\n\n ...(rightPanel?.open && {\n transition: theme.transitions.create('margin', {\n easing: theme.transitions.easing.easeOut,\n duration: theme.transitions.duration.enteringScreen,\n }),\n marginRight: `${rightPanel?.width ?? 0}px`,\n }),\n },\n}));\n\n/**\n * Goes at the top of every page. Wasn't feeling creative in naming it.\n *\n * This differs from the typical appbar with a toolbar used in most MUI apps in\n * that it has to interact with a sliding side panel that is not the main\n * navbar.\n */\nexport default function TopBar({\n titleText = '',\n leftPanel,\n rightPanel,\n 'data-testid': dataTestId,\n}: TopBarProps) {\n return (\n <Root leftPanel={leftPanel} rightPanel={rightPanel} data-testid={dataTestId}>\n <div className={classes.topStripe} />\n <div className={classes.titleBar}>\n <Box className={classes.titleSlider}>\n {leftPanel !== undefined && !leftPanel.open && leftPanel.showOpenArrow && (\n <IconButton\n className={classes.leftPanelButton}\n color=\"inherit\"\n aria-label=\"Open left side panel\"\n onClick={leftPanel?.onOpen}\n edge=\"start\"\n size=\"large\"\n >\n {' '}\n <ArrowForwardIcon />\n </IconButton>\n )}\n\n <Typography className={classes.titleText} variant=\"h6\" noWrap>\n {titleText}\n </Typography>\n\n {rightPanel !== undefined && !rightPanel.open && rightPanel.showOpenArrow && (\n <IconButton\n className={classes.rightPanelButton}\n color=\"inherit\"\n aria-label=\"Open right side panel\"\n onClick={rightPanel?.onOpen}\n edge=\"end\"\n size=\"large\"\n >\n {' '}\n <ArrowBackIcon />\n </IconButton>\n )}\n </Box>\n </div>\n </Root>\n );\n}\n","import { PropsWithChildren } from 'react';\nimport ArrowBackIcon from '@mui/icons-material/ArrowBack';\nimport ArrowForwardIcon from '@mui/icons-material/ArrowForward';\nimport Drawer, { DrawerProps } from '@mui/material/Drawer';\nimport Box, { BoxProps } from '@mui/material/Box';\nimport Typography from '@mui/material/Typography';\nimport IconButton from '@mui/material/IconButton';\nimport { styled } from '@mui/material';\n\nexport const DEFAULT_PANEL_WIDTH = 400;\n\ninterface SidePanelDrawerProps extends DrawerProps {\n anchor: 'left' | 'right';\n width?: number;\n debugOpacity?: boolean;\n navBarOpen: boolean;\n navBarWidthOpen: number;\n navBarWidthClosed: number;\n}\n\nconst SidePanelDrawer = styled(Drawer, {\n shouldForwardProp: (prop) =>\n // Note we do want anchor to be forwarded to the Drawer component\n !(\n [\n 'width',\n 'debug',\n 'debugOpacity',\n 'navBarOpen',\n 'navBarWidthOpen',\n 'navBarWidthClosed',\n ] as Array<PropertyKey>\n ).includes(prop),\n name: 'SidePanelDrawer',\n})<SidePanelDrawerProps>(\n ({ width, debugOpacity = false, anchor, navBarOpen, navBarWidthOpen, navBarWidthClosed }) => ({\n width,\n\n '& .MuiDrawer-paper': {\n position: 'absolute',\n width,\n boxSizing: 'border-box',\n border: 'unset',\n boxShadow:\n '0px 4px 5px rgba(0, 0, 0, 0.14), 0px 1px 10px rgba(0, 0, 0, 0.12), 0px 2px 4px rgba(0, 0, 0, 0.2)',\n\n ...(debugOpacity && {\n opacity: '50%',\n }),\n\n ...(anchor === 'left' && {\n marginLeft: `${navBarWidthClosed}px`,\n ...(navBarOpen && {\n marginLeft: `${navBarWidthOpen}px`,\n }),\n }),\n },\n })\n);\n\ninterface DrawerHeaderBoxProps {\n anchor: 'left' | 'right';\n}\n\nconst DrawerHeaderBox = styled(Box, {\n shouldForwardProp: (prop) => !(['anchor'] as Array<PropertyKey>).includes(prop),\n})<DrawerHeaderBoxProps>(({ theme, anchor }) => ({\n display: 'flex',\n alignItems: 'center',\n padding: theme.spacing(2),\n ...theme.mixins.toolbar,\n justifyContent: anchor === 'left' ? 'space-between' : 'flex-start',\n backgroundColor: theme.palette.primary.light,\n height: '88px',\n\n '&,*': {\n color: 'white',\n },\n\n ' .MuiTypography-root': {\n fontSize: '22px',\n },\n\n ' .MuiButtonBase-root': {\n marginRight: anchor === 'right' ? theme.spacing(2) : 0,\n },\n}));\n\ntype SidePanelProps = PropsWithChildren<{\n open: boolean;\n anchor?: 'left' | 'right';\n onClose?: React.MouseEventHandler<HTMLElement>;\n titleText?: string;\n width?: number;\n showCloseArrow?: boolean;\n debugOpacity?: boolean;\n headerBoxProps?: BoxProps;\n onOpened?: () => void;\n onClosed?: () => void;\n 'data-testid'?: string;\n navBarOpen?: boolean;\n navBarWidthOpen?: number;\n navBarWidthClosed?: number;\n}>;\n\n/**\n * The SidePanel is designed to be used along with the TopBar component for a\n * consistent look and feel.\n */\nexport default function SidePanel({\n children,\n anchor = 'left',\n open,\n onClose = () => {},\n titleText = '',\n width = DEFAULT_PANEL_WIDTH,\n showCloseArrow = true,\n debugOpacity = false,\n headerBoxProps = {},\n onOpened,\n onClosed,\n 'data-testid': dataTestId,\n navBarOpen = false,\n navBarWidthOpen = 0,\n navBarWidthClosed = 0,\n}: SidePanelProps) {\n return (\n <SidePanelDrawer\n SlideProps={{\n onEntered: () => onOpened?.(),\n onExited: () => onClosed?.(),\n }}\n variant=\"persistent\"\n anchor={anchor}\n open={open}\n width={width}\n debugOpacity={debugOpacity}\n data-testid={dataTestId}\n navBarOpen={navBarOpen}\n navBarWidthOpen={navBarWidthOpen}\n navBarWidthClosed={navBarWidthClosed}\n >\n <DrawerHeaderBox anchor={anchor} {...headerBoxProps}>\n {/* Might be a cleaner way to do this, but it does the job */}\n {anchor === 'left' ? (\n <>\n <Typography variant=\"h6\" color=\"inherit\" component=\"div\">\n {titleText}\n </Typography>\n\n {showCloseArrow && (\n <IconButton onClick={onClose} size=\"large\" aria-label=\"Close left side panel\">\n <ArrowBackIcon data-testid=\"arrowbackicon\" />{' '}\n </IconButton>\n )}\n </>\n ) : (\n <>\n {showCloseArrow && (\n <IconButton onClick={onClose} size=\"large\" aria-label=\"Close right side panel\">\n <ArrowForwardIcon />{' '}\n </IconButton>\n )}\n\n <Typography variant=\"h6\" color=\"inherit\" component=\"div\">\n {titleText}\n </Typography>\n </>\n )}\n </DrawerHeaderBox>\n {children}\n </SidePanelDrawer>\n );\n}\n","import { styled } from '@mui/material';\n\ninterface PanelProps {\n width: number;\n open: boolean;\n}\n\ninterface PanelAwareMarginsProps {\n /** If the leftPanel prop is omitted but a left panel is still in use on the\n * page, it will slide over the top instead of the default pushing */\n leftPanel?: PanelProps;\n\n /** If the rightPanel prop is omitted but a right panel is still in use on the\n * page, it will slide over the top instead of the default pushing */\n rightPanel?: PanelProps;\n}\n\n/** With the optional leftPanel and rightPanel props providing state and width,\n * the children of of the PanelAwareMargins will looks like they is pushed aside\n * by the panels by transitioning the margins. */\nconst PanelAwareMargins = styled('div', {\n shouldForwardProp: (prop) => !(['leftPanel', 'rightPanel'] as Array<PropertyKey>).includes(prop),\n name: 'PanelAwareMargins',\n})<PanelAwareMarginsProps>(({ theme, leftPanel, rightPanel }) => ({\n transition: theme.transitions.create('margin', {\n easing: theme.transitions.easing.sharp,\n duration: theme.transitions.duration.leavingScreen,\n }),\n\n ...(leftPanel?.open && {\n transition: theme.transitions.create('margin', {\n easing: theme.transitions.easing.easeOut,\n duration: theme.transitions.duration.enteringScreen,\n }),\n marginLeft: `${leftPanel?.width ?? 0}px`,\n }),\n ...(rightPanel?.open && {\n transition: theme.transitions.create('margin', {\n easing: theme.transitions.easing.easeOut,\n duration: theme.transitions.duration.enteringScreen,\n }),\n marginRight: `${rightPanel?.width ?? 0}px`,\n }),\n}));\n\nexport default PanelAwareMargins;\n","import { styled } from '@mui/material';\nimport Container from '@mui/material/Container';\n\n/** Just a simple styled container applying our spacings*/\nconst PageContainer = styled(Container, {\n name: 'PageContainer',\n})(({ theme }) => ({\n // Horizontal padding comes from the Container's gutter\n paddingTop: theme.spacing(3),\n paddingBottom: theme.spacing(3),\n}));\n\nexport default PageContainer;\n","import { ComponentProps, PropsWithChildren, ReactNode, useEffect, useState } from 'react';\nimport { Box } from '@mui/material';\n\nimport TopBar from './TopBar';\nimport SidePanel, { DEFAULT_PANEL_WIDTH } from './SidePanel';\nimport PanelAwareMargins from './PanelAwareMargins';\nimport PageContainer from './PageContainer';\n\nconst INITIAL_LEFT_PANEL_OPEN = false;\nconst INITIAL_RIGHT_PANEL_OPEN = false;\n\nconst PANEL_DEFAULTS = {\n titleText: '',\n flavour: 'push',\n width: DEFAULT_PANEL_WIDTH,\n arrowButtons: 'both',\n startOpen: false,\n open: undefined,\n onChangeOpen: undefined,\n content: <></>,\n onOpened: undefined,\n onClosed: undefined,\n dataTestId: undefined,\n};\n\ninterface SidePanelProps {\n titleText?: string;\n content?: ReactNode;\n flavour?: 'push' | 'overlay';\n arrowButtons?: 'open' | 'close' | 'both' | 'none';\n width?: number;\n startOpen?: boolean;\n\n /** Use this and onChangeOpen if you want to use component as a controlled component */\n open?: boolean;\n onChangeOpen?: (open: boolean) => void;\n\n /** Called when the sliding transition to open has finished */\n onOpened?: () => void;\n\n /** Called when the sliding transition to open has finished */\n onClosed?: () => void;\n\n dataTestId?: string;\n}\n\ninterface BasePageLayoutProps {\n titleText?: string;\n\n leftPanel?: SidePanelProps;\n rightPanel?: SidePanelProps;\n\n /** This will only have an effect for panels whose state is not controlled by\n * parent */\n sidePanelsAreMutuallyExclusive?: boolean;\n\n /** Temporary, get rid of later */\n debugOpacity?: boolean;\n\n /** Props applied to the PageContainer component, which is a styled MUI Container */\n pageContainerProps?: ComponentProps<typeof PageContainer>;\n\n topBarDataTestId?: string;\n pageContentDataTestId?: string;\n}\n\ninterface PageLayoutWithNavBarProps extends BasePageLayoutProps {\n navBarOpen: boolean;\n navBarWidthOpen: number;\n navBarWidthClosed: number;\n}\n\ninterface PagelayoutWithoutNavBarProps extends BasePageLayoutProps {\n navBarOpen?: never;\n navBarWidthOpen?: never;\n navBarWidthClosed?: never;\n}\n\nexport type PageLayoutProps = PropsWithChildren<\n PageLayoutWithNavBarProps | PagelayoutWithoutNavBarProps\n>;\n\nexport default function PageLayout({\n children,\n titleText = '',\n leftPanel,\n rightPanel,\n sidePanelsAreMutuallyExclusive = true,\n debugOpacity = false,\n pageContainerProps,\n pageContentDataTestId,\n topBarDataTestId,\n navBarOpen,\n navBarWidthOpen,\n navBarWidthClosed,\n}: PageLayoutProps) {\n const [leftPanelOpenInternal, setLeftPanelOpenInternal] = useState(INITIAL_LEFT_PANEL_OPEN);\n const [rightPanelOpenInternal, setRightPanelOpenInternal] = useState(INITIAL_RIGHT_PANEL_OPEN);\n const [leftPanelOpenInternalPrevious, setLeftPanelOpenInternalPrevious] =\n useState(INITIAL_LEFT_PANEL_OPEN);\n const [rightPanelOpenInternalPrevious, setRightPanelOpenInternalPrevious] =\n useState(INITIAL_RIGHT_PANEL_OPEN);\n\n const includeLeftPanel = leftPanel !== undefined;\n const includeRightPanel = rightPanel !== undefined;\n\n const {\n titleText: leftPanelTitleText,\n content: leftPanelContent,\n flavour: leftPanelFlavour,\n open: leftPanelOpen,\n onChangeOpen: leftPanelOnChangeOpen,\n width: leftPanelWidth,\n arrowButtons: leftPanelArrowButtons,\n startOpen: leftPanelStartOpen,\n onOpened: leftPanelOnOpened,\n onClosed: leftPanelOnClosed,\n dataTestId: leftPanelDataTestId,\n } = leftPanel ? { ...PANEL_DEFAULTS, ...leftPanel } : { ...PANEL_DEFAULTS };\n\n const {\n titleText: rightPanelTitleText,\n content: rightPanelContent,\n flavour: rightPanelFlavour,\n open: rightPanelOpen,\n onChangeOpen: rightPanelOnChangeOpen,\n width: rightPanelWidth,\n arrowButtons: rightPanelArrowButtons,\n startOpen: rightPanelStartOpen,\n onOpened: rightPanelOnOpened,\n onClosed: rightPanelOnClosed,\n dataTestId: rightPanelDataTestId,\n } = rightPanel ? { ...PANEL_DEFAULTS, ...rightPanel } : { ...PANEL_DEFAULTS };\n\n useEffect(() => {\n if (leftPanelStartOpen !== INITIAL_LEFT_PANEL_OPEN) {\n setLeftPanelOpenInternal(leftPanelStartOpen);\n setLeftPanelOpenInternalPrevious(leftPanelStartOpen);\n }\n }, [leftPanelStartOpen]);\n\n useEffect(() => {\n if (rightPanelStartOpen !== INITIAL_RIGHT_PANEL_OPEN) {\n setRightPanelOpenInternal(rightPanelStartOpen);\n setRightPanelOpenInternalPrevious(rightPanelStartOpen);\n }\n }, [rightPanelStartOpen]);\n\n const leftPanelOpenCurrent = leftPanelOpen === undefined ? leftPanelOpenInternal : leftPanelOpen;\n\n const rightPanelOpenCurrent =\n rightPanelOpen === undefined ? rightPanelOpenInternal : rightPanelOpen;\n\n const handleLeftPanelChangeOpen = (open: boolean) => {\n if (leftPanelOpen === undefined) {\n // If not in controlled mode, update the internal state\n setLeftPanelOpenInternal(open);\n\n if (sidePanelsAreMutuallyExclusive && includeRightPanel) {\n if (open) {\n setRightPanelOpenInternal(false);\n setRightPanelOpenInternalPrevious(rightPanelOpenInternal);\n } else {\n setRightPanelOpenInternal(rightPanelOpenInternalPrevious);\n }\n }\n }\n // Likewise, if callback provided, call it\n if (leftPanelOnChangeOpen) leftPanelOnChangeOpen(open);\n };\n\n const handleRightPanelChangeOpen = (open: boolean) => {\n if (rightPanelOpen === undefined) {\n setRightPanelOpenInternal(open);\n if (sidePanelsAreMutuallyExclusive && includeLeftPanel) {\n if (open) {\n setLeftPanelOpenInternal(false);\n setLeftPanelOpenInternalPrevious(leftPanelOpenInternal);\n } else {\n setLeftPanelOpenInternal(leftPanelOpenInternalPrevious);\n }\n }\n }\n if (rightPanelOnChangeOpen) rightPanelOnChangeOpen(open);\n };\n\n return (\n <Box>\n {includeLeftPanel && (\n <SidePanel\n data-testid={leftPanelDataTestId}\n anchor=\"left\"\n open={leftPanelOpenCurrent}\n onClose={() => handleLeftPanelChangeOpen(false)}\n width={leftPanelWidth}\n titleText={leftPanelTitleText}\n debugOpacity={debugOpacity}\n showCloseArrow={leftPanelArrowButtons === 'both' || leftPanelArrowButtons === 'close'}\n onOpened={leftPanelOnOpened}\n onClosed={leftPanelOnClosed}\n navBarOpen={navBarOpen}\n navBarWidthOpen={navBarWidthOpen}\n navBarWidthClosed={navBarWidthClosed}\n >\n {leftPanelContent}\n </SidePanel>\n )}\n\n {includeRightPanel && (\n <SidePanel\n data-testid={rightPanelDataTestId}\n anchor=\"right\"\n open={rightPanelOpenCurrent}\n onClose={() => handleRightPanelChangeOpen(false)}\n width={rightPanelWidth}\n titleText={rightPanelTitleText}\n debugOpacity={debugOpacity}\n showCloseArrow={rightPanelArrowButtons === 'both' || rightPanelArrowButtons === 'close'}\n onOpened={rightPanelOnOpened}\n onClosed={rightPanelOnClosed}\n navBarOpen={navBarOpen}\n navBarWidthOpen={navBarWidthOpen}\n navBarWidthClosed={navBarWidthClosed}\n >\n {rightPanelContent}\n </SidePanel>\n )}\n\n <TopBar\n titleText={titleText}\n data-testid={topBarDataTestId}\n {...(includeLeftPanel && leftPanelFlavour === 'push'\n ? {\n leftPanel: {\n open: leftPanelOpenCurrent,\n width: leftPanelWidth,\n onOpen: () => handleLeftPanelChangeOpen(true),\n showOpenArrow: leftPanelArrowButtons === 'both' || leftPanelArrowButtons === 'open',\n },\n }\n : {})}\n {...(includeRightPanel && rightPanelFlavour === 'push'\n ? {\n rightPanel: {\n open: rightPanelOpenCurrent,\n width: rightPanelWidth,\n onOpen: () => handleRightPanelChangeOpen(true),\n showOpenArrow:\n rightPanelArrowButtons === 'both' || rightPanelArrowButtons === 'open',\n },\n }\n : {})}\n />\n\n <PanelAwareMargins\n {...(leftPanelFlavour === 'push'\n ? {\n leftPanel: {\n open: leftPanelOpenCurrent,\n width: leftPanelWidth,\n },\n }\n : {})}\n {...(rightPanelFlavour === 'push'\n ? {\n rightPanel: {\n open: rightPanelOpenCurrent,\n width: rightPanelWidth,\n },\n }\n : {})}\n >\n <PageContainer data-testid={pageContentDataTestId} {...pageContainerProps}>\n {children}\n </PageContainer>\n </PanelAwareMargins>\n </Box>\n );\n}\n","import { alpha, createTheme } from '@mui/material/styles';\n\nexport const internalAGSystemsTheme = createTheme({\n palette: {\n primary: {\n main: '#007236',\n dark: '#005221',\n light: '#00A04E',\n contrastText: '#FFFFFF',\n },\n secondary: {\n main: '#662D91',\n dark: '#440E62',\n light: '#93268F',\n contrastText: '#FFFFFF',\n },\n error: {\n main: '#D32F2F',\n dark: '#C62828',\n light: '#EF5350',\n },\n info: {\n main: '#0288D1',\n dark: '#01579B',\n light: '#03A9F4',\n },\n success: {\n main: '#0288D1',\n dark: '#01579B',\n light: '#03A9F4',\n },\n },\n components: {\n MuiTextField: {\n defaultProps: { color: 'secondary' },\n },\n MuiToggleButtonGroup: {\n defaultProps: { color: 'secondary' },\n },\n MuiCheckbox: {\n defaultProps: { color: 'secondary' },\n },\n MuiSelect: {\n defaultProps: { color: 'secondary' },\n },\n MuiSwitch: {\n defaultProps: { color: 'secondary' },\n },\n MuiFormControl: {\n defaultProps: { color: 'secondary' },\n },\n MuiMenuItem: {\n // Setting defaultProps for color on MenuItem does not work, so update manually\n styleOverrides: {\n root: ({ theme }) => ({\n '&.Mui-selected': {\n backgroundColor: alpha(\n theme.palette.secondary.main,\n theme.palette.action.selectedOpacity\n ),\n '&:hover': {\n backgroundColor: alpha(\n theme.palette.secondary.main,\n theme.palette.action.selectedOpacity\n ),\n },\n '&.Mui-focusVisible': {\n backgroundColor: alpha(\n theme.palette.secondary.main,\n theme.palette.action.focusOpacity\n ),\n },\n },\n }),\n },\n },\n },\n typography: {\n // I couldn't think of what to call this. It is an attempt to match\n // https://www.figma.com/file/atonRPl2YD9A1NCntbDtKR/List-Filter-and-Product-Concept?node-id=1187%3A43730\n // but not sure if line height should be changed\n explainer: {\n fontSize: '14px',\n marginBlockStart: '1em',\n },\n h3: {\n fontSize: '1rem',\n fontWeight: 700,\n },\n },\n});\n\nexport const fed21Theme = createTheme({\n palette: {\n primary: {\n dark: '#00A651',\n light: '#A3D39C',\n main: '#007236',\n contrastText: '#FFF',\n },\n warning: {\n main: '#F5871F',\n light: '#FCC589',\n dark: '#A2590A',\n contrastText: '#FFF',\n },\n secondary: {\n main: '#662D91',\n light: '#BD8CBF',\n dark: '#440E62',\n contrastText: '#FFF',\n },\n error: {\n main: '#D43C95',\n light: '#8F2064',\n dark: '#F9CDE0',\n contrastText: '#FFF',\n },\n info: {\n main: '#00A88D',\n light: '#ADDCCF',\n dark: '#005243',\n contrastText: '#FFF',\n },\n success: {\n main: '#00A651',\n light: '#A3D39C',\n dark: '#007236',\n contrastText: '#FFF',\n },\n },\n typography: {\n // I couldn't think of what to call this. It is an attempt to match\n // https://www.figma.com/file/atonRPl2YD9A1NCntbDtKR/List-Filter-and-Product-Concept?node-id=1187%3A43730\n // but not sure if line height should be changed\n explainer: {\n fontSize: '14px',\n marginBlockStart: '1em',\n },\n },\n});\n","import { PropsWithChildren } from 'react';\nimport { ThemeProvider } from '@mui/material/styles';\n\nimport { internalAGSystemsTheme, fed21Theme } from './themes';\n\nexport type AgThemeName = 'internal' | 'fed21';\n\nexport interface AgThemeProviderProps {\n name?: AgThemeName;\n}\n\nexport default function AgThemeProvider({\n name = 'internal',\n children,\n}: PropsWithChildren<AgThemeProviderProps>) {\n const theme =\n name === 'internal' ? internalAGSystemsTheme : name === 'fed21' ? fed21Theme : undefined;\n\n // Should be resolved when we move to React >= 18\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n return <ThemeProvider theme={theme}>{children}</ThemeProvider>;\n}\n","// The default props passed to the underlying Snackbar component\nimport { SnackbarOrigin } from '@mui/material/Snackbar';\n\nexport const defaultSnackbarProps = {\n autoHideDuration: 6000,\n anchorOrigin: { vertical: 'top', horizontal: 'center' } as SnackbarOrigin,\n\n // The default is false. If we prefer timer to continue when window loses\n // focus, change to true\n disableWindowBlurListener: false,\n};\n\nexport const defaultSaladBarProps = {\n shouldClose: (_event: Event | React.SyntheticEvent<Element, Event>, reason: string) => {\n return reason !== 'clickaway';\n },\n};\n\nexport const defaultEnqueueNotificationOptions = {\n message: '',\n severity: 'info',\n variant: 'standard',\n progressIndicator: undefined, // Can use 'circular' or 'linear'\n};\n","import React, { useRef, useState, createContext, useCallback } from 'react';\nimport Snackbar, { SnackbarProps } from '@mui/material/Snackbar';\nimport Alert from '@mui/material/Alert';\nimport LinearProgress from '@mui/material/LinearProgress';\nimport CircularProgress from '@mui/material/CircularProgress';\n\nimport {\n Notification,\n SaladBarCloseReason,\n SaladBarState,\n SaladBarActions,\n SaladBarContext,\n} from './types';\nimport {\n defaultSaladBarProps,\n defaultSnackbarProps,\n defaultEnqueueNotificationOptions,\n} from './defaults';\n\nconst MAX_QUEUE_LENGTH = 100;\nconst MAX_QUEUE_HIT_REPORT_INTERVAL = 2000;\nconst SALADBAR_INDEX = 2000;\n\n// No need to use uuids, just use an incremented value\nconst generateNotificationKey = (() => {\n let previousKey = 0;\n return () => {\n previousKey += 1;\n return previousKey;\n };\n})();\n\nconst alertWithLinearProgressStyle = {\n borderBottomLeftRadius: '0px',\n borderBottomRightRadius: '0px',\n};\n\n// Note: Must be at at this scope, otherwise useEffect will loop infinitely\nconst defaultOverrideState = {};\nconst defaultOverrideActions = {};\n\nexport const Context = createContext<SaladBarContext | null>(null);\n\nexport interface SaladBarProviderProps extends SnackbarProps {\n /** Allow overriding the state of the SaladBar (for tests etc)*/\n overrideState?: Partial<SaladBarState>;\n\n /** Allow overriding the actions of the SaladBar (for tests etc)*/\n overrideActions?: Partial<SaladBarActions>;\n\n /** Called when an event triggers closing of currently displayed snackbar.\n * Default implementation returns false if reason is 'clickaway', otherwise\n * true.*/\n shouldClose?: (\n event: Event | React.SyntheticEvent<Element, Event>,\n reason: SaladBarCloseReason\n ) => boolean;\n}\n\nexport default function SaladBarProvider({\n overrideState = defaultOverrideState,\n overrideActions = defaultOverrideActions,\n shouldClose = defaultSaladBarProps.shouldClose,\n children,\n ...snackbarProps\n}: SaladBarProviderProps) {\n const [{ open }, setSaladBarState] = useState({ open: false });\n\n // We use a ref instead of a state to store the actual data, because we want\n // queue to be persistent across the whole lifetime of component. I considered\n // using yocto-queue because it would be O(1) instead of O(n), but its not\n // designed to access the head without removing it and its not going to make\n // much difference anyway.\n const queueRef = useRef<Notification[]>([]);\n\n const limitLastHitAt = useRef(Date.now());\n const limitHitCountSinceLastReport = useRef(0);\n\n const setOpen = useCallback((newVal: boolean) => {\n setSaladBarState({ open: newVal });\n }, []);\n\n const enqueueNotification = useCallback((notification: Notification = {}) => {\n limitHitCountSinceLastReport.current += 1;\n if (queueRef.current.length >= MAX_QUEUE_LENGTH) {\n // If the queue length is hit, probably stuck in some sort of loop, so\n // don't want to spam logs instantly so space it out\n if (Date.now() - limitLastHitAt.current >= MAX_QUEUE_HIT_REPORT_INTERVAL) {\n limitLastHitAt.current = Date.now();\n console.error(\n `SaladBarProvider: MAX_QUEUE_LENGTH (${MAX_QUEUE_LENGTH}) hit ${limitHitCountSinceLastReport.current} times in last ${MAX_QUEUE_HIT_REPORT_INTERVAL}ms)`\n );\n limitHitCountSinceLastReport.current = 0;\n }\n }\n\n const newNotification = {\n ...defaultEnqueueNotificationOptions,\n key: generateNotificationKey(), // Can be overridden.\n ...notification, // This could result in collisons, but unlikely.\n };\n\n // Add to the end of queue\n queueRef.current.push(newNotification as Notification);\n\n // If the queue was previously empty, then open the snackbar. We don't do it\n // whenever enqueueNotification is called since it will mess up transitions\n if (queueRef.current.length === 1) setSaladBarState({ open: true });\n\n return newNotification.key;\n }, []);\n\n const enqueueSuccessNotification = (message = '', options = {}) =>\n enqueueNotification({ message, severity: 'success', ...options });\n\n const enqueueInfoNotification = (message = '', options = {}) =>\n enqueueNotification({ message, severity: 'info', ...options });\n\n const enqueueWarningNotification = (message = '', options = {}) =>\n enqueueNotification({ message, severity: 'warning', ...options });\n\n const enqueueErrorNotification = (message = '', options = {}) =>\n enqueueNotification({ message, severity: 'error', ...options });\n\n /**\n * Remove the notification with specified key from the queue. If the key is\n * not found, immediately returns null.\n *\n * @param key - The key as returned from enqueue...() function.\n *\n * @returns The removed notification\n */\n const removeNotification = (key: Notification['key']) => {\n const index = queueRef.current.findIndex((x) => x.key === key);\n if (index === -1) return;\n\n if (index === 0) {\n // If its at the front of the queue, it is either currently being\n // displayed or in process of being closed. Either way, we can just set\n // open to false\n setSaladBarState({ open: false });\n return queueRef.current[0];\n }\n // Otherwise we just remove it from the queue, it won't need to transition\n return queueRef.current.splice(index, 1);\n };\n\n const handleClose = (\n event: Event | React.SyntheticEvent<Element, Event>,\n reason: SaladBarCloseReason\n ) => {\n if (shouldClose(event, reason)) setSaladBarState({ open: false });\n };\n\n // Callback fired before the transition is exiting.\n const handleExit = () => {};\n\n // Callback fired when the transition has exited.\n const handleExited = () => {\n // Remove head of queue\n queueRef.current.shift();\n\n // If there is still something on the queue, then re-open\n if (queueRef.current.length > 0) setSaladBarState({ open: true });\n };\n\n // The notification to display is the one at head of queue\n const currentNotification = queueRef.current[0] ?? {\n ...defaultEnqueueNotificationOptions,\n };\n\n // Can also override certain props on a notification level\n const currentNotificationSnackbarProps: { autoHideDuration?: number } = {};\n // Probably a better way of doing this\n if ('autoHideDuration' in currentNotification) {\n currentNotificationSnackbarProps.autoHideDuration = currentNotification.autoHideDuration;\n }\n\n // Note the order of props in Snackbar, we don't allow overriding open and\n // onClose directly.\n const snackbarFinalProps = {\n ...defaultSnackbarProps,\n ...snackbarProps,\n };\n\n const value: SaladBarContext = {\n open,\n setOpen,\n enqueueNotification,\n enqueueSuccessNotification,\n enqueueInfoNotification,\n enqueueWarningNotification,\n enqueueErrorNotification,\n removeNotification,\n ...overrideState,\n ...overrideActions,\n };\n\n return (\n <Context.Provider value={value}>\n {children}\n <Snackbar\n {...snackbarFinalProps}\n {...currentNotificationSnackbarProps}\n open={open}\n onClose={handleClose}\n TransitionProps={{\n onExited: handleExited,\n onExit: handleExit,\n }}\n sx={{ zIndex: SALADBAR_INDEX }}\n >\n <div>\n <Alert\n onClose={(event) => handleClose(event, 'closeAlert')}\n severity={currentNotification.severity}\n variant={'filled'}\n icon={\n currentNotification.progressIndicator === 'circular' ? (\n <CircularProgress size=\"1em\" />\n ) : undefined\n }\n style={\n currentNotification.progressIndicator === 'linear'\n ? alertWithLinearProgressStyle\n : undefined\n }\n >\n {currentNotification.message}\n </Alert>\n {currentNotification.progressIndicator === 'linear' && <LinearProgress color=\"primary\" />}\n </div>\n </Snackbar>\n </Context.Provider>\n );\n}\n","import { useContext } from 'react';\n\nimport { Context } from './SaladBarContext';\nimport { ContextError } from '../../errors/ContextError';\n\n/**\n * Use the `useSaladBar` hook in components to access the enqueueNotification()\n * method to add a snackbar message to queue.\n *\n * Must be used inside a <SaladBarProvider>\n *\n * Example:\n *\n * ```js\n * const {\n * enqueueNotification,\n * enqueueSuccessNotification,\n * enqueueInfoNotification,\n * enqueueWarningNotification,\n * enqueueErrorNotification,\n * } = useSaladBar();\n * ...\n * enqueueNotification({message: 'hello', severity: 'info'});\n * // or\n * enqueueInfoNotification('hello');\n * ```\n */\nexport function useSaladBar() {\n const context = useContext(Context);\n\n if (context === null) {\n throw new ContextError('Error: Tried to useSaladBar outside of a <SaladBarProvider>');\n }\n\n return context;\n}\n","/* eslint-disable react/prop-types */\n/* eslint-disable react/display-name */\nimport { createHelper } from 'souvlaki';\n\nimport SaladBarProvider, { SaladBarProviderProps } from './SaladBarContext';\n\nexport const withSaladBarProvider = createHelper(\n (\n props: SaladBarProviderProps = { autoHideDuration: 1 },\n state: Partial<unknown> = {},\n actions: Partial<unknown> = {}\n ) =>\n ({ children }) => {\n return (\n <SaladBarProvider {...props} overrideState={state} overrideActions={actions}>\n {children}\n </SaladBarProvider>\n );\n }\n);\n"],"names":["ExampleComponent","text","num","setNum","useState","jsxs","Fragment","jsx","Typography","Button","oldNum","Paper","NAVBAR_WIDTH_OPENED","NAVBAR_WIDTH_CLOSED","PREFIX","classes","Root","styled","theme","sharedOverrides","openedMixin","__spreadValues","closedMixin","NavDrawer","Drawer","prop","open","ContextError","AgError","__publicField","Context","createContext","defaultOverrideState","defaultOverrideActions","NavBarProvider","overrideState","overrideActions","children","setNavBarState","setOpen","useCallback","newVal","value","useNavBar","context","useContext","buildNavBarState","overrides","withNavBarProvider","createHelper","state","actions","SELECTED_INDICATOR_WIDTH","NavBarDarkStyledList","List","NavBar","dataTestId","CssBaseline","TOP_STRIPE_HEIGHT","TITLE_BAR_HEIGHT","leftPanel","rightPanel","_a","_b","TopBar","titleText","Box","IconButton","ArrowForwardIcon","ArrowBackIcon","DEFAULT_PANEL_WIDTH","SidePanelDrawer","width","debugOpacity","anchor","navBarOpen","navBarWidthOpen","navBarWidthClosed","DrawerHeaderBox","__spreadProps","SidePanel","onClose","showCloseArrow","headerBoxProps","onOpened","onClosed","PanelAwareMargins","PageContainer","Container","INITIAL_LEFT_PANEL_OPEN","INITIAL_RIGHT_PANEL_OPEN","PANEL_DEFAULTS","PageLayout","sidePanelsAreMutuallyExclusive","pageContainerProps","pageContentDataTestId","topBarDataTestId","leftPanelOpenInternal","setLeftPanelOpenInternal","rightPanelOpenInternal","setRightPanelOpenInternal","leftPanelOpenInternalPrevious","setLeftPanelOpenInternalPrevious","rightPanelOpenInternalPrevious","setRightPanelOpenInternalPrevious","includeLeftPanel","includeRightPanel","leftPanelTitleText","leftPanelContent","leftPanelFlavour","leftPanelOpen","leftPanelOnChangeOpen","leftPanelWidth","leftPanelArrowButtons","leftPanelStartOpen","leftPanelOnOpened","leftPanelOnClosed","leftPanelDataTestId","rightPanelTitleText","rightPanelContent","rightPanelFlavour","rightPanelOpen","rightPanelOnChangeOpen","rightPanelWidth","rightPanelArrowButtons","rightPanelStartOpen","rightPanelOnOpened","rightPanelOnClosed","rightPanelDataTestId","useEffect","leftPanelOpenCurrent","rightPanelOpenCurrent","handleLeftPanelChangeOpen","handleRightPanelChangeOpen","internalAGSystemsTheme","createTheme","alpha","fed21Theme","AgThemeProvider","name","ThemeProvider","defaultSnackbarProps","defaultSaladBarProps","_event","reason","defaultEnqueueNotificationOptions","MAX_QUEUE_LENGTH","MAX_QUEUE_HIT_REPORT_INTERVAL","SALADBAR_INDEX","generateNotificationKey","previousKey","alertWithLinearProgressStyle","SaladBarProvider","shouldClose","snackbarProps","__objRest","setSaladBarState","queueRef","useRef","limitLastHitAt","limitHitCountSinceLastReport","enqueueNotification","notification","newNotification","enqueueSuccessNotification","message","options","enqueueInfoNotification","enqueueWarningNotification","enqueueErrorNotification","removeNotification","key","index","x","handleClose","event","handleExit","handleExited","currentNotification","currentNotificationSnackbarProps","snackbarFinalProps","Snackbar","Alert","CircularProgress","LinearProgress","useSaladBar","withSaladBarProvider","props"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/NavBar/index.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,OAAO,CAAC;AAM1C,OAAO,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC;AAErE,MAAM,MAAM,WAAW,GAAG;IACxB;kBACc;IACd,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/NavBar/index.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,OAAO,CAAC;AAM1C,OAAO,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC;AAErE,MAAM,MAAM,WAAW,GAAG;IACxB;kBACc;IACd,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB,CAAC;AAQF;;;;;;;GAOG;AACH,MAAM,CAAC,OAAO,UAAU,MAAM,CAAC,EAC7B,aAAa,EAAE,UAAU,EACzB,QAAQ,GACT,EAAE,iBAAiB,CAAC,WAAW,CAAC,eAiBhC;AAED,cAAc,iBAAiB,CAAC;AAChC,cAAc,gBAAgB,CAAC;AAE/B,cAAc,wBAAwB,CAAC;AAGvC,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,WAAW,CAAC"}
|
package/dist/esm/index.js
CHANGED
|
@@ -1,38 +1,38 @@
|
|
|
1
1
|
var Gt = Object.defineProperty, Ut = Object.defineProperties;
|
|
2
2
|
var qt = Object.getOwnPropertyDescriptors;
|
|
3
3
|
var W = Object.getOwnPropertySymbols;
|
|
4
|
-
var
|
|
4
|
+
var dt = Object.prototype.hasOwnProperty, ct = Object.prototype.propertyIsEnumerable;
|
|
5
5
|
var J = (t, e, n) => e in t ? Gt(t, e, { enumerable: !0, configurable: !0, writable: !0, value: n }) : t[e] = n, r = (t, e) => {
|
|
6
6
|
for (var n in e || (e = {}))
|
|
7
|
-
|
|
7
|
+
dt.call(e, n) && J(t, n, e[n]);
|
|
8
8
|
if (W)
|
|
9
9
|
for (var n of W(e))
|
|
10
|
-
|
|
10
|
+
ct.call(e, n) && J(t, n, e[n]);
|
|
11
11
|
return t;
|
|
12
|
-
},
|
|
12
|
+
}, C = (t, e) => Ut(t, qt(e));
|
|
13
13
|
var pt = (t, e) => {
|
|
14
14
|
var n = {};
|
|
15
15
|
for (var o in t)
|
|
16
|
-
|
|
16
|
+
dt.call(t, o) && e.indexOf(o) < 0 && (n[o] = t[o]);
|
|
17
17
|
if (t != null && W)
|
|
18
18
|
for (var o of W(t))
|
|
19
|
-
e.indexOf(o) < 0 &&
|
|
19
|
+
e.indexOf(o) < 0 && ct.call(t, o) && (n[o] = t[o]);
|
|
20
20
|
return n;
|
|
21
21
|
};
|
|
22
22
|
var ut = (t, e, n) => (J(t, typeof e != "symbol" ? e + "" : e, n), n);
|
|
23
|
-
import { jsxs as
|
|
24
|
-
import { useState as
|
|
23
|
+
import { jsxs as c, Fragment as U, jsx as i } from "react/jsx-runtime";
|
|
24
|
+
import { useState as S, createContext as Bt, useCallback as nt, useContext as Ot, useEffect as gt, useRef as Y } from "react";
|
|
25
25
|
import Xt from "@mui/material/Button";
|
|
26
26
|
import Vt from "@mui/material/Paper";
|
|
27
27
|
import D from "@mui/material/Typography";
|
|
28
28
|
import jt from "@mui/material/CssBaseline";
|
|
29
29
|
import { styled as rt, createTheme as Tt, alpha as Z, ThemeProvider as Qt } from "@mui/material/styles";
|
|
30
|
-
import
|
|
30
|
+
import St from "@mui/material/Drawer";
|
|
31
31
|
import { AgError as Kt } from "@australiangreens/ag-error";
|
|
32
|
-
import { createHelper as
|
|
32
|
+
import { createHelper as bt } from "souvlaki";
|
|
33
33
|
import Jt from "@mui/material/List";
|
|
34
|
-
import { styled as L, Box as
|
|
35
|
-
import
|
|
34
|
+
import { styled as L, Box as yt, IconButton as ft } from "@mui/material";
|
|
35
|
+
import It from "@mui/icons-material/ArrowForward";
|
|
36
36
|
import Ft from "@mui/icons-material/ArrowBack";
|
|
37
37
|
import Yt from "@mui/material/Box";
|
|
38
38
|
import ht from "@mui/material/IconButton";
|
|
@@ -42,8 +42,8 @@ import ee from "@mui/material/Alert";
|
|
|
42
42
|
import ne from "@mui/material/LinearProgress";
|
|
43
43
|
import re from "@mui/material/CircularProgress";
|
|
44
44
|
function Ze({ text: t }) {
|
|
45
|
-
const [e, n] =
|
|
46
|
-
return /* @__PURE__ */
|
|
45
|
+
const [e, n] = S(0);
|
|
46
|
+
return /* @__PURE__ */ c(U, { children: [
|
|
47
47
|
/* @__PURE__ */ i(D, { variant: "h6", color: "inherit", component: "div", sx: { fontSize: "22px" }, children: "Hello world" }),
|
|
48
48
|
/* @__PURE__ */ i(D, { variant: "caption", display: "block", children: /* @__PURE__ */ i("span", { children: "Just ensuring MUI is working as planned as a peer dependency. v0.0.11" }) }),
|
|
49
49
|
/* @__PURE__ */ i(
|
|
@@ -55,11 +55,11 @@ function Ze({ text: t }) {
|
|
|
55
55
|
children: "Hello I am a button"
|
|
56
56
|
}
|
|
57
57
|
),
|
|
58
|
-
/* @__PURE__ */
|
|
58
|
+
/* @__PURE__ */ c("p", { children: [
|
|
59
59
|
"This is some text: ",
|
|
60
60
|
/* @__PURE__ */ i("span", { children: t })
|
|
61
61
|
] }),
|
|
62
|
-
/* @__PURE__ */
|
|
62
|
+
/* @__PURE__ */ c(Vt, { children: [
|
|
63
63
|
"This number will incremember when button pressed: ",
|
|
64
64
|
e
|
|
65
65
|
] })
|
|
@@ -103,7 +103,7 @@ const At = 330, Pt = 73, O = "Navbar", A = {
|
|
|
103
103
|
width: At
|
|
104
104
|
}, kt()), ae = () => r({
|
|
105
105
|
width: Pt
|
|
106
|
-
}, kt()), se = rt(
|
|
106
|
+
}, kt()), se = rt(St, {
|
|
107
107
|
shouldForwardProp: (t) => t !== "open"
|
|
108
108
|
})(({ theme: t, open: e }) => r(r({
|
|
109
109
|
width: e ? At : Pt,
|
|
@@ -119,12 +119,12 @@ const At = 330, Pt = 73, O = "Navbar", A = {
|
|
|
119
119
|
class ot extends Kt {
|
|
120
120
|
}
|
|
121
121
|
ut(ot, "errorName", "ContextError");
|
|
122
|
-
const Et = Bt(null), le = {},
|
|
122
|
+
const Et = Bt(null), le = {}, de = {}, ce = ({
|
|
123
123
|
overrideState: t = le,
|
|
124
|
-
overrideActions: e =
|
|
124
|
+
overrideActions: e = de,
|
|
125
125
|
children: n
|
|
126
126
|
}) => {
|
|
127
|
-
const [{ open: o }, l] =
|
|
127
|
+
const [{ open: o }, l] = S({ open: !0 }), g = nt((x) => {
|
|
128
128
|
l({ open: x });
|
|
129
129
|
}, []), f = r(r({
|
|
130
130
|
open: o,
|
|
@@ -138,8 +138,8 @@ const Et = Bt(null), le = {}, ce = {}, de = ({
|
|
|
138
138
|
return t;
|
|
139
139
|
}, ue = (t = {}) => r({
|
|
140
140
|
open: !0
|
|
141
|
-
}, t), tn =
|
|
142
|
-
(t = ue(), e = {}) => ({ children: n }) => /* @__PURE__ */ i(
|
|
141
|
+
}, t), tn = bt(
|
|
142
|
+
(t = ue(), e = {}) => ({ children: n }) => /* @__PURE__ */ i(ce, { overrideState: t, overrideActions: e, children: n })
|
|
143
143
|
), mt = 7, en = rt(Jt)(({ theme: t }) => ({
|
|
144
144
|
backgroundColor: "black",
|
|
145
145
|
color: "white",
|
|
@@ -184,7 +184,7 @@ function nn({
|
|
|
184
184
|
children: e
|
|
185
185
|
}) {
|
|
186
186
|
const { open: n } = pe();
|
|
187
|
-
return /* @__PURE__ */
|
|
187
|
+
return /* @__PURE__ */ c(oe, { className: A.root, "data-testid": t, children: [
|
|
188
188
|
/* @__PURE__ */ i(jt, {}),
|
|
189
189
|
/* @__PURE__ */ i(
|
|
190
190
|
se,
|
|
@@ -263,10 +263,10 @@ function me({
|
|
|
263
263
|
rightPanel: n,
|
|
264
264
|
"data-testid": o
|
|
265
265
|
}) {
|
|
266
|
-
return /* @__PURE__ */
|
|
266
|
+
return /* @__PURE__ */ c(he, { leftPanel: e, rightPanel: n, "data-testid": o, children: [
|
|
267
267
|
/* @__PURE__ */ i("div", { className: u.topStripe }),
|
|
268
|
-
/* @__PURE__ */ i("div", { className: u.titleBar, children: /* @__PURE__ */
|
|
269
|
-
e !== void 0 && !e.open && e.showOpenArrow && /* @__PURE__ */
|
|
268
|
+
/* @__PURE__ */ i("div", { className: u.titleBar, children: /* @__PURE__ */ c(yt, { className: u.titleSlider, children: [
|
|
269
|
+
e !== void 0 && !e.open && e.showOpenArrow && /* @__PURE__ */ c(
|
|
270
270
|
ft,
|
|
271
271
|
{
|
|
272
272
|
className: u.leftPanelButton,
|
|
@@ -277,12 +277,12 @@ function me({
|
|
|
277
277
|
size: "large",
|
|
278
278
|
children: [
|
|
279
279
|
" ",
|
|
280
|
-
/* @__PURE__ */ i(
|
|
280
|
+
/* @__PURE__ */ i(It, {})
|
|
281
281
|
]
|
|
282
282
|
}
|
|
283
283
|
),
|
|
284
284
|
/* @__PURE__ */ i(D, { className: u.titleText, variant: "h6", noWrap: !0, children: t }),
|
|
285
|
-
n !== void 0 && !n.open && n.showOpenArrow && /* @__PURE__ */
|
|
285
|
+
n !== void 0 && !n.open && n.showOpenArrow && /* @__PURE__ */ c(
|
|
286
286
|
ft,
|
|
287
287
|
{
|
|
288
288
|
className: u.rightPanelButton,
|
|
@@ -300,7 +300,7 @@ function me({
|
|
|
300
300
|
] }) })
|
|
301
301
|
] });
|
|
302
302
|
}
|
|
303
|
-
const Nt = 400, ve = L(
|
|
303
|
+
const Nt = 400, ve = L(St, {
|
|
304
304
|
shouldForwardProp: (t) => (
|
|
305
305
|
// Note we do want anchor to be forwarded to the Drawer component
|
|
306
306
|
![
|
|
@@ -332,7 +332,7 @@ const Nt = 400, ve = L(bt, {
|
|
|
332
332
|
})
|
|
333
333
|
), xe = L(Yt, {
|
|
334
334
|
shouldForwardProp: (t) => !["anchor"].includes(t)
|
|
335
|
-
})(({ theme: t, anchor: e }) =>
|
|
335
|
+
})(({ theme: t, anchor: e }) => C(r({
|
|
336
336
|
display: "flex",
|
|
337
337
|
alignItems: "center",
|
|
338
338
|
padding: t.spacing(2)
|
|
@@ -361,18 +361,18 @@ function vt({
|
|
|
361
361
|
showCloseArrow: f = !0,
|
|
362
362
|
debugOpacity: x = !1,
|
|
363
363
|
headerBoxProps: h = {},
|
|
364
|
-
onOpened:
|
|
364
|
+
onOpened: d,
|
|
365
365
|
onClosed: m,
|
|
366
366
|
"data-testid": w,
|
|
367
|
-
navBarOpen:
|
|
367
|
+
navBarOpen: b = !1,
|
|
368
368
|
navBarWidthOpen: p = 0,
|
|
369
|
-
navBarWidthClosed:
|
|
369
|
+
navBarWidthClosed: y = 0
|
|
370
370
|
}) {
|
|
371
|
-
return /* @__PURE__ */
|
|
371
|
+
return /* @__PURE__ */ c(
|
|
372
372
|
ve,
|
|
373
373
|
{
|
|
374
374
|
SlideProps: {
|
|
375
|
-
onEntered: () =>
|
|
375
|
+
onEntered: () => d == null ? void 0 : d(),
|
|
376
376
|
onExited: () => m == null ? void 0 : m()
|
|
377
377
|
},
|
|
378
378
|
variant: "persistent",
|
|
@@ -381,19 +381,19 @@ function vt({
|
|
|
381
381
|
width: g,
|
|
382
382
|
debugOpacity: x,
|
|
383
383
|
"data-testid": w,
|
|
384
|
-
navBarOpen:
|
|
384
|
+
navBarOpen: b,
|
|
385
385
|
navBarWidthOpen: p,
|
|
386
|
-
navBarWidthClosed:
|
|
386
|
+
navBarWidthClosed: y,
|
|
387
387
|
children: [
|
|
388
|
-
/* @__PURE__ */ i(xe,
|
|
388
|
+
/* @__PURE__ */ i(xe, C(r({ anchor: e }, h), { children: e === "left" ? /* @__PURE__ */ c(U, { children: [
|
|
389
389
|
/* @__PURE__ */ i(D, { variant: "h6", color: "inherit", component: "div", children: l }),
|
|
390
|
-
f && /* @__PURE__ */
|
|
390
|
+
f && /* @__PURE__ */ c(ht, { onClick: o, size: "large", "aria-label": "Close left side panel", children: [
|
|
391
391
|
/* @__PURE__ */ i(Ft, { "data-testid": "arrowbackicon" }),
|
|
392
392
|
" "
|
|
393
393
|
] })
|
|
394
|
-
] }) : /* @__PURE__ */
|
|
395
|
-
f && /* @__PURE__ */
|
|
396
|
-
/* @__PURE__ */ i(
|
|
394
|
+
] }) : /* @__PURE__ */ c(U, { children: [
|
|
395
|
+
f && /* @__PURE__ */ c(ht, { onClick: o, size: "large", "aria-label": "Close right side panel", children: [
|
|
396
|
+
/* @__PURE__ */ i(It, {}),
|
|
397
397
|
" "
|
|
398
398
|
] }),
|
|
399
399
|
/* @__PURE__ */ i(D, { variant: "h6", color: "inherit", component: "div", children: l })
|
|
@@ -455,11 +455,11 @@ function rn({
|
|
|
455
455
|
pageContainerProps: f,
|
|
456
456
|
pageContentDataTestId: x,
|
|
457
457
|
topBarDataTestId: h,
|
|
458
|
-
navBarOpen:
|
|
458
|
+
navBarOpen: d,
|
|
459
459
|
navBarWidthOpen: m,
|
|
460
460
|
navBarWidthClosed: w
|
|
461
461
|
}) {
|
|
462
|
-
const [
|
|
462
|
+
const [b, p] = S(tt), [y, I] = S(et), [q, M] = S(tt), [X, P] = S(et), k = n !== void 0, E = o !== void 0, {
|
|
463
463
|
titleText: v,
|
|
464
464
|
content: R,
|
|
465
465
|
flavour: _,
|
|
@@ -487,14 +487,14 @@ function rn({
|
|
|
487
487
|
gt(() => {
|
|
488
488
|
F !== tt && (p(F), M(F));
|
|
489
489
|
}, [F]), gt(() => {
|
|
490
|
-
z !== et && (
|
|
490
|
+
z !== et && (I(z), P(z));
|
|
491
491
|
}, [z]);
|
|
492
|
-
const Q = N === void 0 ?
|
|
493
|
-
N === void 0 && (p(
|
|
494
|
-
}, lt = (
|
|
495
|
-
V === void 0 && (
|
|
492
|
+
const Q = N === void 0 ? b : N, K = V === void 0 ? y : V, st = (B) => {
|
|
493
|
+
N === void 0 && (p(B), l && E && (B ? (I(!1), P(y)) : I(X))), $ && $(B);
|
|
494
|
+
}, lt = (B) => {
|
|
495
|
+
V === void 0 && (I(B), l && k && (B ? (p(!1), M(b)) : p(q))), at && at(B);
|
|
496
496
|
};
|
|
497
|
-
return /* @__PURE__ */
|
|
497
|
+
return /* @__PURE__ */ c(yt, { children: [
|
|
498
498
|
k && /* @__PURE__ */ i(
|
|
499
499
|
vt,
|
|
500
500
|
{
|
|
@@ -508,7 +508,7 @@ function rn({
|
|
|
508
508
|
showCloseArrow: s === "both" || s === "close",
|
|
509
509
|
onOpened: Dt,
|
|
510
510
|
onClosed: Lt,
|
|
511
|
-
navBarOpen:
|
|
511
|
+
navBarOpen: d,
|
|
512
512
|
navBarWidthOpen: m,
|
|
513
513
|
navBarWidthClosed: w,
|
|
514
514
|
children: R
|
|
@@ -527,7 +527,7 @@ function rn({
|
|
|
527
527
|
showCloseArrow: H === "both" || H === "close",
|
|
528
528
|
onOpened: Ht,
|
|
529
529
|
onClosed: zt,
|
|
530
|
-
navBarOpen:
|
|
530
|
+
navBarOpen: d,
|
|
531
531
|
navBarWidthOpen: m,
|
|
532
532
|
navBarWidthClosed: w,
|
|
533
533
|
children: _t
|
|
@@ -556,7 +556,7 @@ function rn({
|
|
|
556
556
|
),
|
|
557
557
|
/* @__PURE__ */ i(
|
|
558
558
|
we,
|
|
559
|
-
|
|
559
|
+
C(r(r({}, _ === "push" ? {
|
|
560
560
|
leftPanel: {
|
|
561
561
|
open: Q,
|
|
562
562
|
width: a
|
|
@@ -567,7 +567,7 @@ function rn({
|
|
|
567
567
|
width: j
|
|
568
568
|
}
|
|
569
569
|
} : {}), {
|
|
570
|
-
children: /* @__PURE__ */ i(Ce,
|
|
570
|
+
children: /* @__PURE__ */ i(Ce, C(r({ "data-testid": x }, f), { children: t }))
|
|
571
571
|
})
|
|
572
572
|
)
|
|
573
573
|
] });
|
|
@@ -721,7 +721,7 @@ const Te = {
|
|
|
721
721
|
// The default is false. If we prefer timer to continue when window loses
|
|
722
722
|
// focus, change to true
|
|
723
723
|
disableWindowBlurListener: !1
|
|
724
|
-
},
|
|
724
|
+
}, Se = {
|
|
725
725
|
shouldClose: (t, e) => e !== "clickaway"
|
|
726
726
|
}, xt = {
|
|
727
727
|
message: "",
|
|
@@ -729,10 +729,10 @@ const Te = {
|
|
|
729
729
|
variant: "standard",
|
|
730
730
|
progressIndicator: void 0
|
|
731
731
|
// Can use 'circular' or 'linear'
|
|
732
|
-
}, wt = 100, Ct = 2e3,
|
|
732
|
+
}, wt = 100, Ct = 2e3, be = 2e3, ye = (() => {
|
|
733
733
|
let t = 0;
|
|
734
734
|
return () => (t += 1, t);
|
|
735
|
-
})(),
|
|
735
|
+
})(), Ie = {
|
|
736
736
|
borderBottomLeftRadius: "0px",
|
|
737
737
|
borderBottomRightRadius: "0px"
|
|
738
738
|
}, Fe = {}, Ae = {}, $t = Bt(null);
|
|
@@ -740,7 +740,7 @@ function Pe(g) {
|
|
|
740
740
|
var f = g, {
|
|
741
741
|
overrideState: t = Fe,
|
|
742
742
|
overrideActions: e = Ae,
|
|
743
|
-
shouldClose: n =
|
|
743
|
+
shouldClose: n = Se.shouldClose,
|
|
744
744
|
children: o
|
|
745
745
|
} = f, l = pt(f, [
|
|
746
746
|
"overrideState",
|
|
@@ -749,50 +749,50 @@ function Pe(g) {
|
|
|
749
749
|
"children"
|
|
750
750
|
]);
|
|
751
751
|
var $;
|
|
752
|
-
const [{ open: x }, h] =
|
|
752
|
+
const [{ open: x }, h] = S({ open: !1 }), d = Y([]), m = Y(Date.now()), w = Y(0), b = nt((a) => {
|
|
753
753
|
h({ open: a });
|
|
754
754
|
}, []), p = nt((a = {}) => {
|
|
755
|
-
w.current += 1,
|
|
755
|
+
w.current += 1, d.current.length >= wt && Date.now() - m.current >= Ct && (m.current = Date.now(), console.error(
|
|
756
756
|
`SaladBarProvider: MAX_QUEUE_LENGTH (${wt}) hit ${w.current} times in last ${Ct}ms)`
|
|
757
757
|
), w.current = 0);
|
|
758
|
-
const s = r(
|
|
759
|
-
key:
|
|
758
|
+
const s = r(C(r({}, xt), {
|
|
759
|
+
key: ye()
|
|
760
760
|
}), a);
|
|
761
|
-
return
|
|
762
|
-
}, []),
|
|
763
|
-
const s =
|
|
761
|
+
return d.current.push(s), d.current.length === 1 && h({ open: !0 }), s.key;
|
|
762
|
+
}, []), y = (a = "", s = {}) => p(r({ message: a, severity: "success" }, s)), I = (a = "", s = {}) => p(r({ message: a, severity: "info" }, s)), q = (a = "", s = {}) => p(r({ message: a, severity: "warning" }, s)), M = (a = "", s = {}) => p(r({ message: a, severity: "error" }, s)), X = (a) => {
|
|
763
|
+
const s = d.current.findIndex((F) => F.key === a);
|
|
764
764
|
if (s !== -1)
|
|
765
|
-
return s === 0 ? (h({ open: !1 }),
|
|
765
|
+
return s === 0 ? (h({ open: !1 }), d.current[0]) : d.current.splice(s, 1);
|
|
766
766
|
}, P = (a, s) => {
|
|
767
767
|
n(a, s) && h({ open: !1 });
|
|
768
768
|
}, k = () => {
|
|
769
769
|
}, E = () => {
|
|
770
|
-
|
|
771
|
-
}, v = ($ =
|
|
770
|
+
d.current.shift(), d.current.length > 0 && h({ open: !0 });
|
|
771
|
+
}, v = ($ = d.current[0]) != null ? $ : r({}, xt), R = {};
|
|
772
772
|
"autoHideDuration" in v && (R.autoHideDuration = v.autoHideDuration);
|
|
773
773
|
const _ = r(r({}, Te), l), N = r(r({
|
|
774
774
|
open: x,
|
|
775
|
-
setOpen:
|
|
775
|
+
setOpen: b,
|
|
776
776
|
enqueueNotification: p,
|
|
777
|
-
enqueueSuccessNotification:
|
|
778
|
-
enqueueInfoNotification:
|
|
777
|
+
enqueueSuccessNotification: y,
|
|
778
|
+
enqueueInfoNotification: I,
|
|
779
779
|
enqueueWarningNotification: q,
|
|
780
780
|
enqueueErrorNotification: M,
|
|
781
781
|
removeNotification: X
|
|
782
782
|
}, t), e);
|
|
783
|
-
return /* @__PURE__ */
|
|
783
|
+
return /* @__PURE__ */ c($t.Provider, { value: N, children: [
|
|
784
784
|
o,
|
|
785
785
|
/* @__PURE__ */ i(
|
|
786
786
|
te,
|
|
787
|
-
|
|
787
|
+
C(r(r({}, _), R), {
|
|
788
788
|
open: x,
|
|
789
789
|
onClose: P,
|
|
790
790
|
TransitionProps: {
|
|
791
791
|
onExited: E,
|
|
792
792
|
onExit: k
|
|
793
793
|
},
|
|
794
|
-
sx: { zIndex:
|
|
795
|
-
children: /* @__PURE__ */
|
|
794
|
+
sx: { zIndex: be },
|
|
795
|
+
children: /* @__PURE__ */ c("div", { children: [
|
|
796
796
|
/* @__PURE__ */ i(
|
|
797
797
|
ee,
|
|
798
798
|
{
|
|
@@ -800,7 +800,7 @@ function Pe(g) {
|
|
|
800
800
|
severity: v.severity,
|
|
801
801
|
variant: "filled",
|
|
802
802
|
icon: v.progressIndicator === "circular" ? /* @__PURE__ */ i(re, { size: "1em" }) : void 0,
|
|
803
|
-
style: v.progressIndicator === "linear" ?
|
|
803
|
+
style: v.progressIndicator === "linear" ? Ie : void 0,
|
|
804
804
|
children: v.message
|
|
805
805
|
}
|
|
806
806
|
),
|
|
@@ -816,7 +816,9 @@ function an() {
|
|
|
816
816
|
throw new ot("Error: Tried to useSaladBar outside of a <SaladBarProvider>");
|
|
817
817
|
return t;
|
|
818
818
|
}
|
|
819
|
-
const sn =
|
|
819
|
+
const sn = bt(
|
|
820
|
+
(t = { autoHideDuration: 1 }, e = {}, n = {}) => ({ children: o }) => /* @__PURE__ */ i(Pe, C(r({}, t), { overrideState: e, overrideActions: n, children: o }))
|
|
821
|
+
);
|
|
820
822
|
export {
|
|
821
823
|
on as AgThemeProvider,
|
|
822
824
|
$t as Context,
|
|
@@ -826,7 +828,7 @@ export {
|
|
|
826
828
|
At as NAVBAR_WIDTH_OPENED,
|
|
827
829
|
nn as NavBar,
|
|
828
830
|
en as NavBarDarkStyledList,
|
|
829
|
-
|
|
831
|
+
ce as NavBarProvider,
|
|
830
832
|
rn as PageLayout,
|
|
831
833
|
Pe as SaladBarProvider,
|
|
832
834
|
ue as buildNavBarState,
|
package/dist/esm/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../src/components/ExampleComponent/index.tsx","../../src/components/NavBar/Styling.tsx","../../src/errors/ContextError.ts","../../src/components/NavBar/NavBarContext.tsx","../../src/components/NavBar/testWrappers.tsx","../../src/components/NavBar/NavBarDarkStyledList.tsx","../../src/components/NavBar/index.tsx","../../src/layouts/PageLayout/TopBar.tsx","../../src/layouts/PageLayout/SidePanel.tsx","../../src/layouts/PageLayout/PanelAwareMargins.tsx","../../src/layouts/PageLayout/PageContainer.tsx","../../src/layouts/PageLayout/index.tsx","../../src/providers/AgTheme/themes.ts","../../src/providers/AgTheme/index.tsx","../../src/providers/SaladBar/defaults.ts","../../src/providers/SaladBar/SaladBarContext.tsx","../../src/providers/SaladBar/useSaladBar.ts","../../src/providers/SaladBar/testWrappers.tsx"],"sourcesContent":["import { useState } from 'react';\nimport Button from '@mui/material/Button';\nimport Paper from '@mui/material/Paper';\nimport Typography from '@mui/material/Typography';\n\nexport interface ExampleComponentProps {\n /** Test */\n text: string;\n}\n\nexport default function ExampleComponent({ text }: ExampleComponentProps) {\n const [num, setNum] = useState(0);\n\n return (\n <>\n <Typography variant=\"h6\" color=\"inherit\" component=\"div\" sx={{ fontSize: '22px' }}>\n Hello world\n </Typography>\n\n <Typography variant=\"caption\" display=\"block\">\n <span>Just ensuring MUI is working as planned as a peer dependency. v0.0.11</span>\n </Typography>\n <Button\n variant=\"outlined\"\n onClick={() => setNum((oldNum) => oldNum + 1)}\n aria-label=\"Increment\"\n >\n Hello I am a button\n </Button>\n <p>\n This is some text: <span>{text}</span>\n </p>\n <Paper>This number will incremember when button pressed: {num}</Paper>\n </>\n );\n}\n","import { styled, CSSObject } from '@mui/material/styles';\nimport Drawer from '@mui/material/Drawer';\n\nexport const NAVBAR_WIDTH_OPENED = 330;\nexport const NAVBAR_WIDTH_CLOSED = 73;\n\nconst PREFIX = 'Navbar';\n\nexport const classes = {\n root: `${PREFIX}-root`,\n menuButton: `${PREFIX}-menuButton`,\n hide: `${PREFIX}-hide`,\n content: `${PREFIX}-content`,\n userInfoHolder: `${PREFIX}-userInfoHolder`,\n settings: `${PREFIX}-settings`,\n pieChartIcon: `${PREFIX}-pieChartIcon`,\n};\n\nexport const Root = styled('div', { name: 'NavBar' })(({ theme }) => ({\n [`&.${classes.root}`]: {\n display: 'flex',\n },\n\n [`& .${classes.menuButton}`]: {\n marginRight: 36,\n },\n\n [`& .${classes.hide}`]: {\n display: 'none',\n },\n\n [`& .${classes.content}`]: {\n flexGrow: 1,\n padding: theme.spacing(3),\n },\n\n [`& .${classes.userInfoHolder}`]: {\n height: '148px',\n marginTop: '64px',\n marginBottom: '16px',\n },\n}));\n\n// The starting point for this was the \"Mini variant drawer\" of\n// https://mui.com/components/drawers/#main-content\n\nconst sharedOverrides = (): CSSObject => ({\n position: 'absolute',\n height: '100%',\n overflowX: 'hidden',\n overflowY: 'hidden',\n color: 'white',\n backgroundColor: 'black',\n});\n\nconst openedMixin = (): CSSObject => ({\n width: NAVBAR_WIDTH_OPENED,\n ...sharedOverrides(),\n});\n\nconst closedMixin = (): CSSObject => ({\n width: NAVBAR_WIDTH_CLOSED,\n ...sharedOverrides(),\n});\n\nexport const NavDrawer = styled(Drawer, {\n shouldForwardProp: (prop) => prop !== 'open',\n})(({ theme, open }) => ({\n width: open ? NAVBAR_WIDTH_OPENED : NAVBAR_WIDTH_CLOSED,\n flexShrink: 0,\n whiteSpace: 'nowrap',\n boxSizing: 'border-box',\n zIndex: theme.zIndex.drawer + 100,\n\n ...(open && {\n '& .MuiDrawer-paper': openedMixin(),\n }),\n ...(!open && {\n '& .MuiDrawer-paper': closedMixin(),\n }),\n}));\n","import { AgError } from '@australiangreens/ag-error';\n\n// Superclass for errors involving React context.\nexport class ContextError extends AgError {\n static errorName = 'ContextError';\n}\n","import { createContext, useContext, PropsWithChildren, useState, useCallback } from 'react';\nimport { ContextError } from '../../errors/ContextError';\n\nexport type NavBarState = {\n open: boolean;\n};\n\nexport type NavBarActions = {\n setOpen: (newVal: boolean) => void;\n};\n\ntype NavBarContext = NavBarState & NavBarActions;\n\nconst Context = createContext<NavBarContext | null>(null);\n\ntype NavBarProviderProps = {\n overrideState?: Partial<NavBarState>;\n overrideActions?: Partial<NavBarActions>;\n};\n\n// Note: Must be at at this scope, otherwise useEffect will loop infinitely\nconst defaultOverrideState = {};\nconst defaultOverrideActions = {};\n\nexport const NavBarProvider = ({\n overrideState = defaultOverrideState,\n overrideActions = defaultOverrideActions,\n children,\n}: PropsWithChildren<NavBarProviderProps>) => {\n const [{ open }, setNavBarState] = useState<NavBarState>({ open: true });\n\n const setOpen = useCallback((newVal: boolean) => {\n setNavBarState({ open: newVal });\n }, []);\n\n const value: NavBarContext = {\n open,\n setOpen,\n ...overrideState,\n ...overrideActions,\n };\n\n return <Context.Provider value={value}>{children}</Context.Provider>;\n};\n\nexport const useNavBar = () => {\n const context = useContext(Context);\n\n if (context === null) {\n throw new ContextError('Error: Tried to useNavBar outside of a <NavBarProvider>');\n }\n\n return context;\n};\n","/* eslint-disable react/prop-types */\n/* eslint-disable react/display-name */\nimport { createHelper } from 'souvlaki';\n\nimport { NavBarProvider, NavBarActions, NavBarState } from './NavBarContext';\n\nexport type Builder<T> = (overrides?: Partial<T>) => T;\n\nexport const buildNavBarState: Builder<NavBarState> = (overrides = {}) => ({\n open: true,\n ...overrides,\n});\n\nexport const withNavBarProvider = createHelper(\n (state: Partial<NavBarState> = buildNavBarState(), actions: Partial<NavBarActions> = {}) =>\n ({ children }) => {\n return (\n <NavBarProvider overrideState={state} overrideActions={actions}>\n {children}\n </NavBarProvider>\n );\n }\n);\n","import { styled } from '@mui/material/styles';\nimport List, { ListProps } from '@mui/material/List';\n\nconst SELECTED_INDICATOR_WIDTH = 7;\n\nexport const NavBarDarkStyledList = styled(List)<ListProps>(({ theme }) => ({\n backgroundColor: 'black',\n color: 'white',\n\n '& .MuiListItem-root': {\n padding: 'unset',\n },\n\n '& .MuiListItemButton-root': {\n ' .MuiListItemIcon-root': {\n color: 'white',\n padding: `${SELECTED_INDICATOR_WIDTH}px`,\n },\n\n // Focus state\n '&.Mui-focusVisible': {\n backgroundColor: theme.palette.grey[700],\n },\n\n // Selected state\n '&.Mui-selected': {\n borderLeftStyle: 'solid',\n borderLeftWidth: '7px',\n borderLeftColor: theme.palette.primary.main,\n paddingLeft: `calc(${theme.spacing(2)} - ${SELECTED_INDICATOR_WIDTH}px)`,\n },\n\n // Hover state\n '&:hover': {\n backgroundColor: theme.palette.primary.dark,\n },\n\n // Focus+Selected state\n '&.Mui-selected.Mui-focusVisible': {\n backgroundColor: theme.palette.grey[700],\n },\n\n // Hover+Selected state\n '&.Mui-selected:hover': {\n backgroundColor: theme.palette.primary.dark,\n },\n\n // Focus+Hover+Selected state doesn't need to be specified\n // '&.Mui-selected.Mui-focusVisible:hover': {\n // },\n },\n})) as typeof List;\n","import { PropsWithChildren } from 'react';\nimport CssBaseline from '@mui/material/CssBaseline';\n\nimport { classes, Root, NavDrawer } from './Styling';\nimport { useNavBar } from './NavBarContext';\n\nexport { NAVBAR_WIDTH_OPENED, NAVBAR_WIDTH_CLOSED } from './Styling';\n\nexport type NavbarProps = {\n /** Set the datatest-id on the root element for using reactdom's getByTestId()\n * function */\n 'data-testid'?: string;\n};\n\n// TODO: Add in more common elements (or make another component) for user/organisations/logout etc?\n// TODO: Should there be two sets of 'children', one for the list and one for dialogs etc?\n\n/**\n * A (currently uncontrolled) styled navigation bar wth a context provider to\n * retrieve its current open/closed state. At this point in time its pretty\n * unopinionated, it just renders whatever children it is given. THe\n * NavBarDarkStyledList component can be used for consistent styling against the\n * background. We'll be changing the way we use NavBars soon anyway, so not much\n * point solidying the patterns yet.\n */\nexport default function NavBar({\n 'data-testid': dataTestId,\n children,\n}: PropsWithChildren<NavbarProps>) {\n const { open } = useNavBar();\n\n return (\n <Root className={classes.root} data-testid={dataTestId}>\n <CssBaseline />\n <NavDrawer\n variant=\"permanent\"\n anchor=\"left\"\n // We aren't using transitions, and {0} will still create an unwanted timeout\n transitionDuration={null as unknown as number}\n open={open}\n >\n {children}\n </NavDrawer>\n </Root>\n );\n}\n\nexport * from './NavBarContext';\nexport * from './testWrappers';\n\nexport * from './NavBarDarkStyledList';\n\n// TODO: This is a temporary fix, library clients shouldn't need this\nexport { classes as navBarClasses } from './Styling';\n","import { Box, IconButton, styled } from '@mui/material';\nimport Typography from '@mui/material/Typography';\nimport ArrowForwardIcon from '@mui/icons-material/ArrowForward';\nimport ArrowBackIcon from '@mui/icons-material/ArrowBack';\n\nconst TOP_STRIPE_HEIGHT = 24;\nconst TITLE_BAR_HEIGHT = 64;\n\nconst PREFIX = 'TopBar';\n\ninterface PanelProps {\n open: boolean;\n width: number;\n showOpenArrow: boolean;\n\n /** Called when the arrow button is pressed (if showOpenButton is true) */\n onOpen?: () => void;\n\n showOpenButton?: boolean;\n}\n\nexport interface TopBarProps {\n titleText?: string;\n leftPanel?: PanelProps;\n rightPanel?: PanelProps;\n 'data-testid'?: string;\n}\n\nexport const classes = {\n topStripe: `${PREFIX}-topStripe`,\n titleBar: `${PREFIX}-titleBar`,\n titleSlider: `${PREFIX}-titleSlider`,\n\n titleText: `${PREFIX}-titleText`,\n leftPanelButton: `${PREFIX}-leftPanelButton`,\n rightPanelButton: `${PREFIX}-leftPanelButton`,\n};\n\ninterface RootProps {\n leftPanel?: PanelProps;\n rightPanel?: PanelProps;\n}\n\nconst Root = styled('div', {\n shouldForwardProp: (prop) => !(['leftPanel', 'rightPanel'] as Array<PropertyKey>).includes(prop),\n name: PREFIX,\n})<RootProps>(({ theme, leftPanel, rightPanel }) => ({\n width: '100%',\n\n [`& .${classes.topStripe}`]: {\n width: '100%',\n height: `${TOP_STRIPE_HEIGHT}px`,\n backgroundColor: theme.palette.primary.main,\n },\n\n [`& .${classes.titleBar}`]: {\n backgroundColor: theme.palette.primary.light,\n height: `${TITLE_BAR_HEIGHT}px`,\n padding: theme.spacing(0, 3),\n width: '100%',\n },\n\n [`& .${classes.titleSlider}`]: {\n height: '100%',\n display: 'flex',\n alignItems: 'center',\n color: 'white',\n\n transition: theme.transitions.create('margin', {\n easing: theme.transitions.easing.sharp,\n duration: theme.transitions.duration.leavingScreen,\n }),\n\n [`& .${classes.leftPanelButton}`]: {\n marginRight: theme.spacing(2),\n flexGrow: 0,\n },\n\n [`& .${classes.titleText}`]: {\n flexGrow: 1,\n },\n\n [`& .${classes.rightPanelButton}`]: {\n flexGrow: 0,\n },\n\n ...(leftPanel?.open && {\n transition: theme.transitions.create('margin', {\n easing: theme.transitions.easing.easeOut,\n duration: theme.transitions.duration.enteringScreen,\n }),\n marginLeft: `${leftPanel?.width ?? 0}px`,\n }),\n\n ...(rightPanel?.open && {\n transition: theme.transitions.create('margin', {\n easing: theme.transitions.easing.easeOut,\n duration: theme.transitions.duration.enteringScreen,\n }),\n marginRight: `${rightPanel?.width ?? 0}px`,\n }),\n },\n}));\n\n/**\n * Goes at the top of every page. Wasn't feeling creative in naming it.\n *\n * This differs from the typical appbar with a toolbar used in most MUI apps in\n * that it has to interact with a sliding side panel that is not the main\n * navbar.\n */\nexport default function TopBar({\n titleText = '',\n leftPanel,\n rightPanel,\n 'data-testid': dataTestId,\n}: TopBarProps) {\n return (\n <Root leftPanel={leftPanel} rightPanel={rightPanel} data-testid={dataTestId}>\n <div className={classes.topStripe} />\n <div className={classes.titleBar}>\n <Box className={classes.titleSlider}>\n {leftPanel !== undefined && !leftPanel.open && leftPanel.showOpenArrow && (\n <IconButton\n className={classes.leftPanelButton}\n color=\"inherit\"\n aria-label=\"Open left side panel\"\n onClick={leftPanel?.onOpen}\n edge=\"start\"\n size=\"large\"\n >\n {' '}\n <ArrowForwardIcon />\n </IconButton>\n )}\n\n <Typography className={classes.titleText} variant=\"h6\" noWrap>\n {titleText}\n </Typography>\n\n {rightPanel !== undefined && !rightPanel.open && rightPanel.showOpenArrow && (\n <IconButton\n className={classes.rightPanelButton}\n color=\"inherit\"\n aria-label=\"Open right side panel\"\n onClick={rightPanel?.onOpen}\n edge=\"end\"\n size=\"large\"\n >\n {' '}\n <ArrowBackIcon />\n </IconButton>\n )}\n </Box>\n </div>\n </Root>\n );\n}\n","import { PropsWithChildren } from 'react';\nimport ArrowBackIcon from '@mui/icons-material/ArrowBack';\nimport ArrowForwardIcon from '@mui/icons-material/ArrowForward';\nimport Drawer, { DrawerProps } from '@mui/material/Drawer';\nimport Box, { BoxProps } from '@mui/material/Box';\nimport Typography from '@mui/material/Typography';\nimport IconButton from '@mui/material/IconButton';\nimport { styled } from '@mui/material';\n\nexport const DEFAULT_PANEL_WIDTH = 400;\n\ninterface SidePanelDrawerProps extends DrawerProps {\n anchor: 'left' | 'right';\n width?: number;\n debugOpacity?: boolean;\n navBarOpen: boolean;\n navBarWidthOpen: number;\n navBarWidthClosed: number;\n}\n\nconst SidePanelDrawer = styled(Drawer, {\n shouldForwardProp: (prop) =>\n // Note we do want anchor to be forwarded to the Drawer component\n !(\n [\n 'width',\n 'debug',\n 'debugOpacity',\n 'navBarOpen',\n 'navBarWidthOpen',\n 'navBarWidthClosed',\n ] as Array<PropertyKey>\n ).includes(prop),\n name: 'SidePanelDrawer',\n})<SidePanelDrawerProps>(\n ({ width, debugOpacity = false, anchor, navBarOpen, navBarWidthOpen, navBarWidthClosed }) => ({\n width,\n\n '& .MuiDrawer-paper': {\n position: 'absolute',\n width,\n boxSizing: 'border-box',\n border: 'unset',\n boxShadow:\n '0px 4px 5px rgba(0, 0, 0, 0.14), 0px 1px 10px rgba(0, 0, 0, 0.12), 0px 2px 4px rgba(0, 0, 0, 0.2)',\n\n ...(debugOpacity && {\n opacity: '50%',\n }),\n\n ...(anchor === 'left' && {\n marginLeft: `${navBarWidthClosed}px`,\n ...(navBarOpen && {\n marginLeft: `${navBarWidthOpen}px`,\n }),\n }),\n },\n })\n);\n\ninterface DrawerHeaderBoxProps {\n anchor: 'left' | 'right';\n}\n\nconst DrawerHeaderBox = styled(Box, {\n shouldForwardProp: (prop) => !(['anchor'] as Array<PropertyKey>).includes(prop),\n})<DrawerHeaderBoxProps>(({ theme, anchor }) => ({\n display: 'flex',\n alignItems: 'center',\n padding: theme.spacing(2),\n ...theme.mixins.toolbar,\n justifyContent: anchor === 'left' ? 'space-between' : 'flex-start',\n backgroundColor: theme.palette.primary.light,\n height: '88px',\n\n '&,*': {\n color: 'white',\n },\n\n ' .MuiTypography-root': {\n fontSize: '22px',\n },\n\n ' .MuiButtonBase-root': {\n marginRight: anchor === 'right' ? theme.spacing(2) : 0,\n },\n}));\n\ntype SidePanelProps = PropsWithChildren<{\n open: boolean;\n anchor?: 'left' | 'right';\n onClose?: React.MouseEventHandler<HTMLElement>;\n titleText?: string;\n width?: number;\n showCloseArrow?: boolean;\n debugOpacity?: boolean;\n headerBoxProps?: BoxProps;\n onOpened?: () => void;\n onClosed?: () => void;\n 'data-testid'?: string;\n navBarOpen?: boolean;\n navBarWidthOpen?: number;\n navBarWidthClosed?: number;\n}>;\n\n/**\n * The SidePanel is designed to be used along with the TopBar component for a\n * consistent look and feel.\n */\nexport default function SidePanel({\n children,\n anchor = 'left',\n open,\n onClose = () => {},\n titleText = '',\n width = DEFAULT_PANEL_WIDTH,\n showCloseArrow = true,\n debugOpacity = false,\n headerBoxProps = {},\n onOpened,\n onClosed,\n 'data-testid': dataTestId,\n navBarOpen = false,\n navBarWidthOpen = 0,\n navBarWidthClosed = 0,\n}: SidePanelProps) {\n return (\n <SidePanelDrawer\n SlideProps={{\n onEntered: () => onOpened?.(),\n onExited: () => onClosed?.(),\n }}\n variant=\"persistent\"\n anchor={anchor}\n open={open}\n width={width}\n debugOpacity={debugOpacity}\n data-testid={dataTestId}\n navBarOpen={navBarOpen}\n navBarWidthOpen={navBarWidthOpen}\n navBarWidthClosed={navBarWidthClosed}\n >\n <DrawerHeaderBox anchor={anchor} {...headerBoxProps}>\n {/* Might be a cleaner way to do this, but it does the job */}\n {anchor === 'left' ? (\n <>\n <Typography variant=\"h6\" color=\"inherit\" component=\"div\">\n {titleText}\n </Typography>\n\n {showCloseArrow && (\n <IconButton onClick={onClose} size=\"large\" aria-label=\"Close left side panel\">\n <ArrowBackIcon data-testid=\"arrowbackicon\" />{' '}\n </IconButton>\n )}\n </>\n ) : (\n <>\n {showCloseArrow && (\n <IconButton onClick={onClose} size=\"large\" aria-label=\"Close right side panel\">\n <ArrowForwardIcon />{' '}\n </IconButton>\n )}\n\n <Typography variant=\"h6\" color=\"inherit\" component=\"div\">\n {titleText}\n </Typography>\n </>\n )}\n </DrawerHeaderBox>\n {children}\n </SidePanelDrawer>\n );\n}\n","import { styled } from '@mui/material';\n\ninterface PanelProps {\n width: number;\n open: boolean;\n}\n\ninterface PanelAwareMarginsProps {\n /** If the leftPanel prop is omitted but a left panel is still in use on the\n * page, it will slide over the top instead of the default pushing */\n leftPanel?: PanelProps;\n\n /** If the rightPanel prop is omitted but a right panel is still in use on the\n * page, it will slide over the top instead of the default pushing */\n rightPanel?: PanelProps;\n}\n\n/** With the optional leftPanel and rightPanel props providing state and width,\n * the children of of the PanelAwareMargins will looks like they is pushed aside\n * by the panels by transitioning the margins. */\nconst PanelAwareMargins = styled('div', {\n shouldForwardProp: (prop) => !(['leftPanel', 'rightPanel'] as Array<PropertyKey>).includes(prop),\n name: 'PanelAwareMargins',\n})<PanelAwareMarginsProps>(({ theme, leftPanel, rightPanel }) => ({\n transition: theme.transitions.create('margin', {\n easing: theme.transitions.easing.sharp,\n duration: theme.transitions.duration.leavingScreen,\n }),\n\n ...(leftPanel?.open && {\n transition: theme.transitions.create('margin', {\n easing: theme.transitions.easing.easeOut,\n duration: theme.transitions.duration.enteringScreen,\n }),\n marginLeft: `${leftPanel?.width ?? 0}px`,\n }),\n ...(rightPanel?.open && {\n transition: theme.transitions.create('margin', {\n easing: theme.transitions.easing.easeOut,\n duration: theme.transitions.duration.enteringScreen,\n }),\n marginRight: `${rightPanel?.width ?? 0}px`,\n }),\n}));\n\nexport default PanelAwareMargins;\n","import { styled } from '@mui/material';\nimport Container from '@mui/material/Container';\n\n/** Just a simple styled container applying our spacings*/\nconst PageContainer = styled(Container, {\n name: 'PageContainer',\n})(({ theme }) => ({\n // Horizontal padding comes from the Container's gutter\n paddingTop: theme.spacing(3),\n paddingBottom: theme.spacing(3),\n}));\n\nexport default PageContainer;\n","import { ComponentProps, PropsWithChildren, ReactNode, useEffect, useState } from 'react';\nimport { Box } from '@mui/material';\n\nimport TopBar from './TopBar';\nimport SidePanel, { DEFAULT_PANEL_WIDTH } from './SidePanel';\nimport PanelAwareMargins from './PanelAwareMargins';\nimport PageContainer from './PageContainer';\n\nconst INITIAL_LEFT_PANEL_OPEN = false;\nconst INITIAL_RIGHT_PANEL_OPEN = false;\n\nconst PANEL_DEFAULTS = {\n titleText: '',\n flavour: 'push',\n width: DEFAULT_PANEL_WIDTH,\n arrowButtons: 'both',\n startOpen: false,\n open: undefined,\n onChangeOpen: undefined,\n content: <></>,\n onOpened: undefined,\n onClosed: undefined,\n dataTestId: undefined,\n};\n\ninterface SidePanelProps {\n titleText?: string;\n content?: ReactNode;\n flavour?: 'push' | 'overlay';\n arrowButtons?: 'open' | 'close' | 'both' | 'none';\n width?: number;\n startOpen?: boolean;\n\n /** Use this and onChangeOpen if you want to use component as a controlled component */\n open?: boolean;\n onChangeOpen?: (open: boolean) => void;\n\n /** Called when the sliding transition to open has finished */\n onOpened?: () => void;\n\n /** Called when the sliding transition to open has finished */\n onClosed?: () => void;\n\n dataTestId?: string;\n}\n\ninterface BasePageLayoutProps {\n titleText?: string;\n\n leftPanel?: SidePanelProps;\n rightPanel?: SidePanelProps;\n\n /** This will only have an effect for panels whose state is not controlled by\n * parent */\n sidePanelsAreMutuallyExclusive?: boolean;\n\n /** Temporary, get rid of later */\n debugOpacity?: boolean;\n\n /** Props applied to the PageContainer component, which is a styled MUI Container */\n pageContainerProps?: ComponentProps<typeof PageContainer>;\n\n topBarDataTestId?: string;\n pageContentDataTestId?: string;\n}\n\ninterface PageLayoutWithNavBarProps extends BasePageLayoutProps {\n navBarOpen: boolean;\n navBarWidthOpen: number;\n navBarWidthClosed: number;\n}\n\ninterface PagelayoutWithoutNavBarProps extends BasePageLayoutProps {\n navBarOpen?: never;\n navBarWidthOpen?: never;\n navBarWidthClosed?: never;\n}\n\nexport type PageLayoutProps = PropsWithChildren<\n PageLayoutWithNavBarProps | PagelayoutWithoutNavBarProps\n>;\n\nexport default function PageLayout({\n children,\n titleText = '',\n leftPanel,\n rightPanel,\n sidePanelsAreMutuallyExclusive = true,\n debugOpacity = false,\n pageContainerProps,\n pageContentDataTestId,\n topBarDataTestId,\n navBarOpen,\n navBarWidthOpen,\n navBarWidthClosed,\n}: PageLayoutProps) {\n const [leftPanelOpenInternal, setLeftPanelOpenInternal] = useState(INITIAL_LEFT_PANEL_OPEN);\n const [rightPanelOpenInternal, setRightPanelOpenInternal] = useState(INITIAL_RIGHT_PANEL_OPEN);\n const [leftPanelOpenInternalPrevious, setLeftPanelOpenInternalPrevious] =\n useState(INITIAL_LEFT_PANEL_OPEN);\n const [rightPanelOpenInternalPrevious, setRightPanelOpenInternalPrevious] =\n useState(INITIAL_RIGHT_PANEL_OPEN);\n\n const includeLeftPanel = leftPanel !== undefined;\n const includeRightPanel = rightPanel !== undefined;\n\n const {\n titleText: leftPanelTitleText,\n content: leftPanelContent,\n flavour: leftPanelFlavour,\n open: leftPanelOpen,\n onChangeOpen: leftPanelOnChangeOpen,\n width: leftPanelWidth,\n arrowButtons: leftPanelArrowButtons,\n startOpen: leftPanelStartOpen,\n onOpened: leftPanelOnOpened,\n onClosed: leftPanelOnClosed,\n dataTestId: leftPanelDataTestId,\n } = leftPanel ? { ...PANEL_DEFAULTS, ...leftPanel } : { ...PANEL_DEFAULTS };\n\n const {\n titleText: rightPanelTitleText,\n content: rightPanelContent,\n flavour: rightPanelFlavour,\n open: rightPanelOpen,\n onChangeOpen: rightPanelOnChangeOpen,\n width: rightPanelWidth,\n arrowButtons: rightPanelArrowButtons,\n startOpen: rightPanelStartOpen,\n onOpened: rightPanelOnOpened,\n onClosed: rightPanelOnClosed,\n dataTestId: rightPanelDataTestId,\n } = rightPanel ? { ...PANEL_DEFAULTS, ...rightPanel } : { ...PANEL_DEFAULTS };\n\n useEffect(() => {\n if (leftPanelStartOpen !== INITIAL_LEFT_PANEL_OPEN) {\n setLeftPanelOpenInternal(leftPanelStartOpen);\n setLeftPanelOpenInternalPrevious(leftPanelStartOpen);\n }\n }, [leftPanelStartOpen]);\n\n useEffect(() => {\n if (rightPanelStartOpen !== INITIAL_RIGHT_PANEL_OPEN) {\n setRightPanelOpenInternal(rightPanelStartOpen);\n setRightPanelOpenInternalPrevious(rightPanelStartOpen);\n }\n }, [rightPanelStartOpen]);\n\n const leftPanelOpenCurrent = leftPanelOpen === undefined ? leftPanelOpenInternal : leftPanelOpen;\n\n const rightPanelOpenCurrent =\n rightPanelOpen === undefined ? rightPanelOpenInternal : rightPanelOpen;\n\n const handleLeftPanelChangeOpen = (open: boolean) => {\n if (leftPanelOpen === undefined) {\n // If not in controlled mode, update the internal state\n setLeftPanelOpenInternal(open);\n\n if (sidePanelsAreMutuallyExclusive && includeRightPanel) {\n if (open) {\n setRightPanelOpenInternal(false);\n setRightPanelOpenInternalPrevious(rightPanelOpenInternal);\n } else {\n setRightPanelOpenInternal(rightPanelOpenInternalPrevious);\n }\n }\n }\n // Likewise, if callback provided, call it\n if (leftPanelOnChangeOpen) leftPanelOnChangeOpen(open);\n };\n\n const handleRightPanelChangeOpen = (open: boolean) => {\n if (rightPanelOpen === undefined) {\n setRightPanelOpenInternal(open);\n if (sidePanelsAreMutuallyExclusive && includeLeftPanel) {\n if (open) {\n setLeftPanelOpenInternal(false);\n setLeftPanelOpenInternalPrevious(leftPanelOpenInternal);\n } else {\n setLeftPanelOpenInternal(leftPanelOpenInternalPrevious);\n }\n }\n }\n if (rightPanelOnChangeOpen) rightPanelOnChangeOpen(open);\n };\n\n return (\n <Box>\n {includeLeftPanel && (\n <SidePanel\n data-testid={leftPanelDataTestId}\n anchor=\"left\"\n open={leftPanelOpenCurrent}\n onClose={() => handleLeftPanelChangeOpen(false)}\n width={leftPanelWidth}\n titleText={leftPanelTitleText}\n debugOpacity={debugOpacity}\n showCloseArrow={leftPanelArrowButtons === 'both' || leftPanelArrowButtons === 'close'}\n onOpened={leftPanelOnOpened}\n onClosed={leftPanelOnClosed}\n navBarOpen={navBarOpen}\n navBarWidthOpen={navBarWidthOpen}\n navBarWidthClosed={navBarWidthClosed}\n >\n {leftPanelContent}\n </SidePanel>\n )}\n\n {includeRightPanel && (\n <SidePanel\n data-testid={rightPanelDataTestId}\n anchor=\"right\"\n open={rightPanelOpenCurrent}\n onClose={() => handleRightPanelChangeOpen(false)}\n width={rightPanelWidth}\n titleText={rightPanelTitleText}\n debugOpacity={debugOpacity}\n showCloseArrow={rightPanelArrowButtons === 'both' || rightPanelArrowButtons === 'close'}\n onOpened={rightPanelOnOpened}\n onClosed={rightPanelOnClosed}\n navBarOpen={navBarOpen}\n navBarWidthOpen={navBarWidthOpen}\n navBarWidthClosed={navBarWidthClosed}\n >\n {rightPanelContent}\n </SidePanel>\n )}\n\n <TopBar\n titleText={titleText}\n data-testid={topBarDataTestId}\n {...(includeLeftPanel && leftPanelFlavour === 'push'\n ? {\n leftPanel: {\n open: leftPanelOpenCurrent,\n width: leftPanelWidth,\n onOpen: () => handleLeftPanelChangeOpen(true),\n showOpenArrow: leftPanelArrowButtons === 'both' || leftPanelArrowButtons === 'open',\n },\n }\n : {})}\n {...(includeRightPanel && rightPanelFlavour === 'push'\n ? {\n rightPanel: {\n open: rightPanelOpenCurrent,\n width: rightPanelWidth,\n onOpen: () => handleRightPanelChangeOpen(true),\n showOpenArrow:\n rightPanelArrowButtons === 'both' || rightPanelArrowButtons === 'open',\n },\n }\n : {})}\n />\n\n <PanelAwareMargins\n {...(leftPanelFlavour === 'push'\n ? {\n leftPanel: {\n open: leftPanelOpenCurrent,\n width: leftPanelWidth,\n },\n }\n : {})}\n {...(rightPanelFlavour === 'push'\n ? {\n rightPanel: {\n open: rightPanelOpenCurrent,\n width: rightPanelWidth,\n },\n }\n : {})}\n >\n <PageContainer data-testid={pageContentDataTestId} {...pageContainerProps}>\n {children}\n </PageContainer>\n </PanelAwareMargins>\n </Box>\n );\n}\n","import { alpha, createTheme } from '@mui/material/styles';\n\nexport const internalAGSystemsTheme = createTheme({\n palette: {\n primary: {\n main: '#007236',\n dark: '#005221',\n light: '#00A04E',\n contrastText: '#FFFFFF',\n },\n secondary: {\n main: '#662D91',\n dark: '#440E62',\n light: '#93268F',\n contrastText: '#FFFFFF',\n },\n error: {\n main: '#D32F2F',\n dark: '#C62828',\n light: '#EF5350',\n },\n info: {\n main: '#0288D1',\n dark: '#01579B',\n light: '#03A9F4',\n },\n success: {\n main: '#0288D1',\n dark: '#01579B',\n light: '#03A9F4',\n },\n },\n components: {\n MuiTextField: {\n defaultProps: { color: 'secondary' },\n },\n MuiToggleButtonGroup: {\n defaultProps: { color: 'secondary' },\n },\n MuiCheckbox: {\n defaultProps: { color: 'secondary' },\n },\n MuiSelect: {\n defaultProps: { color: 'secondary' },\n },\n MuiSwitch: {\n defaultProps: { color: 'secondary' },\n },\n MuiFormControl: {\n defaultProps: { color: 'secondary' },\n },\n MuiMenuItem: {\n // Setting defaultProps for color on MenuItem does not work, so update manually\n styleOverrides: {\n root: ({ theme }) => ({\n '&.Mui-selected': {\n backgroundColor: alpha(\n theme.palette.secondary.main,\n theme.palette.action.selectedOpacity\n ),\n '&:hover': {\n backgroundColor: alpha(\n theme.palette.secondary.main,\n theme.palette.action.selectedOpacity\n ),\n },\n '&.Mui-focusVisible': {\n backgroundColor: alpha(\n theme.palette.secondary.main,\n theme.palette.action.focusOpacity\n ),\n },\n },\n }),\n },\n },\n },\n typography: {\n // I couldn't think of what to call this. It is an attempt to match\n // https://www.figma.com/file/atonRPl2YD9A1NCntbDtKR/List-Filter-and-Product-Concept?node-id=1187%3A43730\n // but not sure if line height should be changed\n explainer: {\n fontSize: '14px',\n marginBlockStart: '1em',\n },\n h3: {\n fontSize: '1rem',\n fontWeight: 700,\n },\n },\n});\n\nexport const fed21Theme = createTheme({\n palette: {\n primary: {\n dark: '#00A651',\n light: '#A3D39C',\n main: '#007236',\n contrastText: '#FFF',\n },\n warning: {\n main: '#F5871F',\n light: '#FCC589',\n dark: '#A2590A',\n contrastText: '#FFF',\n },\n secondary: {\n main: '#662D91',\n light: '#BD8CBF',\n dark: '#440E62',\n contrastText: '#FFF',\n },\n error: {\n main: '#D43C95',\n light: '#8F2064',\n dark: '#F9CDE0',\n contrastText: '#FFF',\n },\n info: {\n main: '#00A88D',\n light: '#ADDCCF',\n dark: '#005243',\n contrastText: '#FFF',\n },\n success: {\n main: '#00A651',\n light: '#A3D39C',\n dark: '#007236',\n contrastText: '#FFF',\n },\n },\n typography: {\n // I couldn't think of what to call this. It is an attempt to match\n // https://www.figma.com/file/atonRPl2YD9A1NCntbDtKR/List-Filter-and-Product-Concept?node-id=1187%3A43730\n // but not sure if line height should be changed\n explainer: {\n fontSize: '14px',\n marginBlockStart: '1em',\n },\n },\n});\n","import { PropsWithChildren } from 'react';\nimport { ThemeProvider } from '@mui/material/styles';\n\nimport { internalAGSystemsTheme, fed21Theme } from './themes';\n\nexport type AgThemeName = 'internal' | 'fed21';\n\nexport interface AgThemeProviderProps {\n name?: AgThemeName;\n}\n\nexport default function AgThemeProvider({\n name = 'internal',\n children,\n}: PropsWithChildren<AgThemeProviderProps>) {\n const theme =\n name === 'internal' ? internalAGSystemsTheme : name === 'fed21' ? fed21Theme : undefined;\n\n // Should be resolved when we move to React >= 18\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n return <ThemeProvider theme={theme}>{children}</ThemeProvider>;\n}\n","// The default props passed to the underlying Snackbar component\nimport { SnackbarOrigin } from '@mui/material/Snackbar';\n\nexport const defaultSnackbarProps = {\n autoHideDuration: 6000,\n anchorOrigin: { vertical: 'top', horizontal: 'center' } as SnackbarOrigin,\n\n // The default is false. If we prefer timer to continue when window loses\n // focus, change to true\n disableWindowBlurListener: false,\n};\n\nexport const defaultSaladBarProps = {\n shouldClose: (_event: Event | React.SyntheticEvent<Element, Event>, reason: string) => {\n return reason !== 'clickaway';\n },\n};\n\nexport const defaultEnqueueNotificationOptions = {\n message: '',\n severity: 'info',\n variant: 'standard',\n progressIndicator: undefined, // Can use 'circular' or 'linear'\n};\n","import React, { useRef, useState, createContext, useCallback } from 'react';\nimport Snackbar, { SnackbarProps } from '@mui/material/Snackbar';\nimport Alert from '@mui/material/Alert';\nimport LinearProgress from '@mui/material/LinearProgress';\nimport CircularProgress from '@mui/material/CircularProgress';\n\nimport {\n Notification,\n SaladBarCloseReason,\n SaladBarState,\n SaladBarActions,\n SaladBarContext,\n} from './types';\nimport {\n defaultSaladBarProps,\n defaultSnackbarProps,\n defaultEnqueueNotificationOptions,\n} from './defaults';\n\nconst MAX_QUEUE_LENGTH = 100;\nconst MAX_QUEUE_HIT_REPORT_INTERVAL = 2000;\nconst SALADBAR_INDEX = 2000;\n\n// No need to use uuids, just use an incremented value\nconst generateNotificationKey = (() => {\n let previousKey = 0;\n return () => {\n previousKey += 1;\n return previousKey;\n };\n})();\n\nconst alertWithLinearProgressStyle = {\n borderBottomLeftRadius: '0px',\n borderBottomRightRadius: '0px',\n};\n\n// Note: Must be at at this scope, otherwise useEffect will loop infinitely\nconst defaultOverrideState = {};\nconst defaultOverrideActions = {};\n\nexport const Context = createContext<SaladBarContext | null>(null);\n\nexport interface SaladBarProviderProps extends SnackbarProps {\n /** Allow overriding the state of the SaladBar (for tests etc)*/\n overrideState?: Partial<SaladBarState>;\n\n /** Allow overriding the actions of the SaladBar (for tests etc)*/\n overrideActions?: Partial<SaladBarActions>;\n\n /** Called when an event triggers closing of currently displayed snackbar.\n * Default implementation returns false if reason is 'clickaway', otherwise\n * true.*/\n shouldClose?: (\n event: Event | React.SyntheticEvent<Element, Event>,\n reason: SaladBarCloseReason\n ) => boolean;\n}\n\nexport default function SaladBarProvider({\n overrideState = defaultOverrideState,\n overrideActions = defaultOverrideActions,\n shouldClose = defaultSaladBarProps.shouldClose,\n children,\n ...snackbarProps\n}: SaladBarProviderProps) {\n const [{ open }, setSaladBarState] = useState({ open: false });\n\n // We use a ref instead of a state to store the actual data, because we want\n // queue to be persistent across the whole lifetime of component. I considered\n // using yocto-queue because it would be O(1) instead of O(n), but its not\n // designed to access the head without removing it and its not going to make\n // much difference anyway.\n const queueRef = useRef<Notification[]>([]);\n\n const limitLastHitAt = useRef(Date.now());\n const limitHitCountSinceLastReport = useRef(0);\n\n const setOpen = useCallback((newVal: boolean) => {\n setSaladBarState({ open: newVal });\n }, []);\n\n const enqueueNotification = useCallback((notification: Notification = {}) => {\n limitHitCountSinceLastReport.current += 1;\n if (queueRef.current.length >= MAX_QUEUE_LENGTH) {\n // If the queue length is hit, probably stuck in some sort of loop, so\n // don't want to spam logs instantly so space it out\n if (Date.now() - limitLastHitAt.current >= MAX_QUEUE_HIT_REPORT_INTERVAL) {\n limitLastHitAt.current = Date.now();\n console.error(\n `SaladBarProvider: MAX_QUEUE_LENGTH (${MAX_QUEUE_LENGTH}) hit ${limitHitCountSinceLastReport.current} times in last ${MAX_QUEUE_HIT_REPORT_INTERVAL}ms)`\n );\n limitHitCountSinceLastReport.current = 0;\n }\n }\n\n const newNotification = {\n ...defaultEnqueueNotificationOptions,\n key: generateNotificationKey(), // Can be overridden.\n ...notification, // This could result in collisons, but unlikely.\n };\n\n // Add to the end of queue\n queueRef.current.push(newNotification as Notification);\n\n // If the queue was previously empty, then open the snackbar. We don't do it\n // whenever enqueueNotification is called since it will mess up transitions\n if (queueRef.current.length === 1) setSaladBarState({ open: true });\n\n return newNotification.key;\n }, []);\n\n const enqueueSuccessNotification = (message = '', options = {}) =>\n enqueueNotification({ message, severity: 'success', ...options });\n\n const enqueueInfoNotification = (message = '', options = {}) =>\n enqueueNotification({ message, severity: 'info', ...options });\n\n const enqueueWarningNotification = (message = '', options = {}) =>\n enqueueNotification({ message, severity: 'warning', ...options });\n\n const enqueueErrorNotification = (message = '', options = {}) =>\n enqueueNotification({ message, severity: 'error', ...options });\n\n /**\n * Remove the notification with specified key from the queue. If the key is\n * not found, immediately returns null.\n *\n * @param key - The key as returned from enqueue...() function.\n *\n * @returns The removed notification\n */\n const removeNotification = (key: Notification['key']) => {\n const index = queueRef.current.findIndex((x) => x.key === key);\n if (index === -1) return;\n\n if (index === 0) {\n // If its at the front of the queue, it is either currently being\n // displayed or in process of being closed. Either way, we can just set\n // open to false\n setSaladBarState({ open: false });\n return queueRef.current[0];\n }\n // Otherwise we just remove it from the queue, it won't need to transition\n return queueRef.current.splice(index, 1);\n };\n\n const handleClose = (\n event: Event | React.SyntheticEvent<Element, Event>,\n reason: SaladBarCloseReason\n ) => {\n if (shouldClose(event, reason)) setSaladBarState({ open: false });\n };\n\n // Callback fired before the transition is exiting.\n const handleExit = () => {};\n\n // Callback fired when the transition has exited.\n const handleExited = () => {\n // Remove head of queue\n queueRef.current.shift();\n\n // If there is still something on the queue, then re-open\n if (queueRef.current.length > 0) setSaladBarState({ open: true });\n };\n\n // The notification to display is the one at head of queue\n const currentNotification = queueRef.current[0] ?? {\n ...defaultEnqueueNotificationOptions,\n };\n\n // Can also override certain props on a notification level\n const currentNotificationSnackbarProps: { autoHideDuration?: number } = {};\n // Probably a better way of doing this\n if ('autoHideDuration' in currentNotification) {\n currentNotificationSnackbarProps.autoHideDuration = currentNotification.autoHideDuration;\n }\n\n // Note the order of props in Snackbar, we don't allow overriding open and\n // onClose directly.\n const snackbarFinalProps = {\n ...defaultSnackbarProps,\n ...snackbarProps,\n };\n\n const value: SaladBarContext = {\n open,\n setOpen,\n enqueueNotification,\n enqueueSuccessNotification,\n enqueueInfoNotification,\n enqueueWarningNotification,\n enqueueErrorNotification,\n removeNotification,\n ...overrideState,\n ...overrideActions,\n };\n\n return (\n <Context.Provider value={value}>\n {children}\n <Snackbar\n {...snackbarFinalProps}\n {...currentNotificationSnackbarProps}\n open={open}\n onClose={handleClose}\n TransitionProps={{\n onExited: handleExited,\n onExit: handleExit,\n }}\n sx={{ zIndex: SALADBAR_INDEX }}\n >\n <div>\n <Alert\n onClose={(event) => handleClose(event, 'closeAlert')}\n severity={currentNotification.severity}\n variant={'filled'}\n icon={\n currentNotification.progressIndicator === 'circular' ? (\n <CircularProgress size=\"1em\" />\n ) : undefined\n }\n style={\n currentNotification.progressIndicator === 'linear'\n ? alertWithLinearProgressStyle\n : undefined\n }\n >\n {currentNotification.message}\n </Alert>\n {currentNotification.progressIndicator === 'linear' && <LinearProgress color=\"primary\" />}\n </div>\n </Snackbar>\n </Context.Provider>\n );\n}\n","import { useContext } from 'react';\n\nimport { Context } from './SaladBarContext';\nimport { ContextError } from '../../errors/ContextError';\n\n/**\n * Use the `useSaladBar` hook in components to access the enqueueNotification()\n * method to add a snackbar message to queue.\n *\n * Must be used inside a <SaladBarProvider>\n *\n * Example:\n *\n * ```js\n * const {\n * enqueueNotification,\n * enqueueSuccessNotification,\n * enqueueInfoNotification,\n * enqueueWarningNotification,\n * enqueueErrorNotification,\n * } = useSaladBar();\n * ...\n * enqueueNotification({message: 'hello', severity: 'info'});\n * // or\n * enqueueInfoNotification('hello');\n * ```\n */\nexport function useSaladBar() {\n const context = useContext(Context);\n\n if (context === null) {\n throw new ContextError('Error: Tried to useSaladBar outside of a <SaladBarProvider>');\n }\n\n return context;\n}\n","/* eslint-disable react/prop-types */\n/* eslint-disable react/display-name */\nimport { createHelper } from 'souvlaki';\n\nimport SaladBarProvider from './SaladBarContext';\n\nexport const withSaladBarProvider = createHelper(() => ({ children }) => (\n <SaladBarProvider>{children}</SaladBarProvider>\n));\n"],"names":["ExampleComponent","text","num","setNum","useState","jsxs","Fragment","jsx","Typography","Button","oldNum","Paper","NAVBAR_WIDTH_OPENED","NAVBAR_WIDTH_CLOSED","PREFIX","classes","Root","styled","theme","sharedOverrides","openedMixin","__spreadValues","closedMixin","NavDrawer","Drawer","prop","open","ContextError","AgError","__publicField","Context","createContext","defaultOverrideState","defaultOverrideActions","NavBarProvider","overrideState","overrideActions","children","setNavBarState","setOpen","useCallback","newVal","value","useNavBar","context","useContext","buildNavBarState","overrides","withNavBarProvider","createHelper","state","actions","SELECTED_INDICATOR_WIDTH","NavBarDarkStyledList","List","NavBar","dataTestId","CssBaseline","TOP_STRIPE_HEIGHT","TITLE_BAR_HEIGHT","leftPanel","rightPanel","_a","_b","TopBar","titleText","Box","IconButton","ArrowForwardIcon","ArrowBackIcon","DEFAULT_PANEL_WIDTH","SidePanelDrawer","width","debugOpacity","anchor","navBarOpen","navBarWidthOpen","navBarWidthClosed","DrawerHeaderBox","__spreadProps","SidePanel","onClose","showCloseArrow","headerBoxProps","onOpened","onClosed","PanelAwareMargins","PageContainer","Container","INITIAL_LEFT_PANEL_OPEN","INITIAL_RIGHT_PANEL_OPEN","PANEL_DEFAULTS","PageLayout","sidePanelsAreMutuallyExclusive","pageContainerProps","pageContentDataTestId","topBarDataTestId","leftPanelOpenInternal","setLeftPanelOpenInternal","rightPanelOpenInternal","setRightPanelOpenInternal","leftPanelOpenInternalPrevious","setLeftPanelOpenInternalPrevious","rightPanelOpenInternalPrevious","setRightPanelOpenInternalPrevious","includeLeftPanel","includeRightPanel","leftPanelTitleText","leftPanelContent","leftPanelFlavour","leftPanelOpen","leftPanelOnChangeOpen","leftPanelWidth","leftPanelArrowButtons","leftPanelStartOpen","leftPanelOnOpened","leftPanelOnClosed","leftPanelDataTestId","rightPanelTitleText","rightPanelContent","rightPanelFlavour","rightPanelOpen","rightPanelOnChangeOpen","rightPanelWidth","rightPanelArrowButtons","rightPanelStartOpen","rightPanelOnOpened","rightPanelOnClosed","rightPanelDataTestId","useEffect","leftPanelOpenCurrent","rightPanelOpenCurrent","handleLeftPanelChangeOpen","handleRightPanelChangeOpen","internalAGSystemsTheme","createTheme","alpha","fed21Theme","AgThemeProvider","name","ThemeProvider","defaultSnackbarProps","defaultSaladBarProps","_event","reason","defaultEnqueueNotificationOptions","MAX_QUEUE_LENGTH","MAX_QUEUE_HIT_REPORT_INTERVAL","SALADBAR_INDEX","generateNotificationKey","previousKey","alertWithLinearProgressStyle","SaladBarProvider","shouldClose","snackbarProps","__objRest","setSaladBarState","queueRef","useRef","limitLastHitAt","limitHitCountSinceLastReport","enqueueNotification","notification","newNotification","enqueueSuccessNotification","message","options","enqueueInfoNotification","enqueueWarningNotification","enqueueErrorNotification","removeNotification","key","index","x","handleClose","event","handleExit","handleExited","currentNotification","currentNotificationSnackbarProps","snackbarFinalProps","Snackbar","Alert","CircularProgress","LinearProgress","useSaladBar","withSaladBarProvider"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../src/components/ExampleComponent/index.tsx","../../src/components/NavBar/Styling.tsx","../../src/errors/ContextError.ts","../../src/components/NavBar/NavBarContext.tsx","../../src/components/NavBar/testWrappers.tsx","../../src/components/NavBar/NavBarDarkStyledList.tsx","../../src/components/NavBar/index.tsx","../../src/layouts/PageLayout/TopBar.tsx","../../src/layouts/PageLayout/SidePanel.tsx","../../src/layouts/PageLayout/PanelAwareMargins.tsx","../../src/layouts/PageLayout/PageContainer.tsx","../../src/layouts/PageLayout/index.tsx","../../src/providers/AgTheme/themes.ts","../../src/providers/AgTheme/index.tsx","../../src/providers/SaladBar/defaults.ts","../../src/providers/SaladBar/SaladBarContext.tsx","../../src/providers/SaladBar/useSaladBar.ts","../../src/providers/SaladBar/testWrappers.tsx"],"sourcesContent":["import { useState } from 'react';\nimport Button from '@mui/material/Button';\nimport Paper from '@mui/material/Paper';\nimport Typography from '@mui/material/Typography';\n\nexport interface ExampleComponentProps {\n /** Test */\n text: string;\n}\n\nexport default function ExampleComponent({ text }: ExampleComponentProps) {\n const [num, setNum] = useState(0);\n\n return (\n <>\n <Typography variant=\"h6\" color=\"inherit\" component=\"div\" sx={{ fontSize: '22px' }}>\n Hello world\n </Typography>\n\n <Typography variant=\"caption\" display=\"block\">\n <span>Just ensuring MUI is working as planned as a peer dependency. v0.0.11</span>\n </Typography>\n <Button\n variant=\"outlined\"\n onClick={() => setNum((oldNum) => oldNum + 1)}\n aria-label=\"Increment\"\n >\n Hello I am a button\n </Button>\n <p>\n This is some text: <span>{text}</span>\n </p>\n <Paper>This number will incremember when button pressed: {num}</Paper>\n </>\n );\n}\n","import { styled, CSSObject } from '@mui/material/styles';\nimport Drawer from '@mui/material/Drawer';\n\nexport const NAVBAR_WIDTH_OPENED = 330;\nexport const NAVBAR_WIDTH_CLOSED = 73;\n\nconst PREFIX = 'Navbar';\n\nexport const classes = {\n root: `${PREFIX}-root`,\n menuButton: `${PREFIX}-menuButton`,\n hide: `${PREFIX}-hide`,\n content: `${PREFIX}-content`,\n userInfoHolder: `${PREFIX}-userInfoHolder`,\n settings: `${PREFIX}-settings`,\n pieChartIcon: `${PREFIX}-pieChartIcon`,\n};\n\nexport const Root = styled('div', { name: 'NavBar' })(({ theme }) => ({\n [`&.${classes.root}`]: {\n display: 'flex',\n },\n\n [`& .${classes.menuButton}`]: {\n marginRight: 36,\n },\n\n [`& .${classes.hide}`]: {\n display: 'none',\n },\n\n [`& .${classes.content}`]: {\n flexGrow: 1,\n padding: theme.spacing(3),\n },\n\n [`& .${classes.userInfoHolder}`]: {\n height: '148px',\n marginTop: '64px',\n marginBottom: '16px',\n },\n}));\n\n// The starting point for this was the \"Mini variant drawer\" of\n// https://mui.com/components/drawers/#main-content\n\nconst sharedOverrides = (): CSSObject => ({\n position: 'absolute',\n height: '100%',\n overflowX: 'hidden',\n overflowY: 'hidden',\n color: 'white',\n backgroundColor: 'black',\n});\n\nconst openedMixin = (): CSSObject => ({\n width: NAVBAR_WIDTH_OPENED,\n ...sharedOverrides(),\n});\n\nconst closedMixin = (): CSSObject => ({\n width: NAVBAR_WIDTH_CLOSED,\n ...sharedOverrides(),\n});\n\nexport const NavDrawer = styled(Drawer, {\n shouldForwardProp: (prop) => prop !== 'open',\n})(({ theme, open }) => ({\n width: open ? NAVBAR_WIDTH_OPENED : NAVBAR_WIDTH_CLOSED,\n flexShrink: 0,\n whiteSpace: 'nowrap',\n boxSizing: 'border-box',\n zIndex: theme.zIndex.drawer + 100,\n\n ...(open && {\n '& .MuiDrawer-paper': openedMixin(),\n }),\n ...(!open && {\n '& .MuiDrawer-paper': closedMixin(),\n }),\n}));\n","import { AgError } from '@australiangreens/ag-error';\n\n// Superclass for errors involving React context.\nexport class ContextError extends AgError {\n static errorName = 'ContextError';\n}\n","import { createContext, useContext, PropsWithChildren, useState, useCallback } from 'react';\nimport { ContextError } from '../../errors/ContextError';\n\nexport type NavBarState = {\n open: boolean;\n};\n\nexport type NavBarActions = {\n setOpen: (newVal: boolean) => void;\n};\n\ntype NavBarContext = NavBarState & NavBarActions;\n\nconst Context = createContext<NavBarContext | null>(null);\n\ntype NavBarProviderProps = {\n overrideState?: Partial<NavBarState>;\n overrideActions?: Partial<NavBarActions>;\n};\n\n// Note: Must be at at this scope, otherwise useEffect will loop infinitely\nconst defaultOverrideState = {};\nconst defaultOverrideActions = {};\n\nexport const NavBarProvider = ({\n overrideState = defaultOverrideState,\n overrideActions = defaultOverrideActions,\n children,\n}: PropsWithChildren<NavBarProviderProps>) => {\n const [{ open }, setNavBarState] = useState<NavBarState>({ open: true });\n\n const setOpen = useCallback((newVal: boolean) => {\n setNavBarState({ open: newVal });\n }, []);\n\n const value: NavBarContext = {\n open,\n setOpen,\n ...overrideState,\n ...overrideActions,\n };\n\n return <Context.Provider value={value}>{children}</Context.Provider>;\n};\n\nexport const useNavBar = () => {\n const context = useContext(Context);\n\n if (context === null) {\n throw new ContextError('Error: Tried to useNavBar outside of a <NavBarProvider>');\n }\n\n return context;\n};\n","/* eslint-disable react/prop-types */\n/* eslint-disable react/display-name */\nimport { createHelper } from 'souvlaki';\n\nimport { NavBarProvider, NavBarActions, NavBarState } from './NavBarContext';\n\nexport type Builder<T> = (overrides?: Partial<T>) => T;\n\nexport const buildNavBarState: Builder<NavBarState> = (overrides = {}) => ({\n open: true,\n ...overrides,\n});\n\nexport const withNavBarProvider = createHelper(\n (state: Partial<NavBarState> = buildNavBarState(), actions: Partial<NavBarActions> = {}) =>\n ({ children }) => {\n return (\n <NavBarProvider overrideState={state} overrideActions={actions}>\n {children}\n </NavBarProvider>\n );\n }\n);\n","import { styled } from '@mui/material/styles';\nimport List, { ListProps } from '@mui/material/List';\n\nconst SELECTED_INDICATOR_WIDTH = 7;\n\nexport const NavBarDarkStyledList = styled(List)<ListProps>(({ theme }) => ({\n backgroundColor: 'black',\n color: 'white',\n\n '& .MuiListItem-root': {\n padding: 'unset',\n },\n\n '& .MuiListItemButton-root': {\n ' .MuiListItemIcon-root': {\n color: 'white',\n padding: `${SELECTED_INDICATOR_WIDTH}px`,\n },\n\n // Focus state\n '&.Mui-focusVisible': {\n backgroundColor: theme.palette.grey[700],\n },\n\n // Selected state\n '&.Mui-selected': {\n borderLeftStyle: 'solid',\n borderLeftWidth: '7px',\n borderLeftColor: theme.palette.primary.main,\n paddingLeft: `calc(${theme.spacing(2)} - ${SELECTED_INDICATOR_WIDTH}px)`,\n },\n\n // Hover state\n '&:hover': {\n backgroundColor: theme.palette.primary.dark,\n },\n\n // Focus+Selected state\n '&.Mui-selected.Mui-focusVisible': {\n backgroundColor: theme.palette.grey[700],\n },\n\n // Hover+Selected state\n '&.Mui-selected:hover': {\n backgroundColor: theme.palette.primary.dark,\n },\n\n // Focus+Hover+Selected state doesn't need to be specified\n // '&.Mui-selected.Mui-focusVisible:hover': {\n // },\n },\n})) as typeof List;\n","import { PropsWithChildren } from 'react';\nimport CssBaseline from '@mui/material/CssBaseline';\n\nimport { classes, Root, NavDrawer } from './Styling';\nimport { useNavBar } from './NavBarContext';\n\nexport { NAVBAR_WIDTH_OPENED, NAVBAR_WIDTH_CLOSED } from './Styling';\n\nexport type NavbarProps = {\n /** Set the datatest-id on the root element for using reactdom's getByTestId()\n * function */\n 'data-testid'?: string;\n};\n\n// TODO: Add in more common elements (or make another component) for user/organisations/logout etc?\n// TODO: Should there be two sets of 'children', one for the list and one for dialogs etc?\n\n// TODO: Rather than exporting the min and max widths, would it make more sense\n// TODO: to just share them via the context provider?\n\n/**\n * A (currently uncontrolled) styled navigation bar wth a context provider to\n * retrieve its current open/closed state. At this point in time its pretty\n * unopinionated, it just renders whatever children it is given. THe\n * NavBarDarkStyledList component can be used for consistent styling against the\n * background. We'll be changing the way we use NavBars soon anyway, so not much\n * point solidying the patterns yet.\n */\nexport default function NavBar({\n 'data-testid': dataTestId,\n children,\n}: PropsWithChildren<NavbarProps>) {\n const { open } = useNavBar();\n\n return (\n <Root className={classes.root} data-testid={dataTestId}>\n <CssBaseline />\n <NavDrawer\n variant=\"permanent\"\n anchor=\"left\"\n // We aren't using transitions, and {0} will still create an unwanted timeout\n transitionDuration={null as unknown as number}\n open={open}\n >\n {children}\n </NavDrawer>\n </Root>\n );\n}\n\nexport * from './NavBarContext';\nexport * from './testWrappers';\n\nexport * from './NavBarDarkStyledList';\n\n// TODO: This is a temporary fix, library clients shouldn't need this\nexport { classes as navBarClasses } from './Styling';\n","import { Box, IconButton, styled } from '@mui/material';\nimport Typography from '@mui/material/Typography';\nimport ArrowForwardIcon from '@mui/icons-material/ArrowForward';\nimport ArrowBackIcon from '@mui/icons-material/ArrowBack';\n\nconst TOP_STRIPE_HEIGHT = 24;\nconst TITLE_BAR_HEIGHT = 64;\n\nconst PREFIX = 'TopBar';\n\ninterface PanelProps {\n open: boolean;\n width: number;\n showOpenArrow: boolean;\n\n /** Called when the arrow button is pressed (if showOpenButton is true) */\n onOpen?: () => void;\n\n showOpenButton?: boolean;\n}\n\nexport interface TopBarProps {\n titleText?: string;\n leftPanel?: PanelProps;\n rightPanel?: PanelProps;\n 'data-testid'?: string;\n}\n\nexport const classes = {\n topStripe: `${PREFIX}-topStripe`,\n titleBar: `${PREFIX}-titleBar`,\n titleSlider: `${PREFIX}-titleSlider`,\n\n titleText: `${PREFIX}-titleText`,\n leftPanelButton: `${PREFIX}-leftPanelButton`,\n rightPanelButton: `${PREFIX}-leftPanelButton`,\n};\n\ninterface RootProps {\n leftPanel?: PanelProps;\n rightPanel?: PanelProps;\n}\n\nconst Root = styled('div', {\n shouldForwardProp: (prop) => !(['leftPanel', 'rightPanel'] as Array<PropertyKey>).includes(prop),\n name: PREFIX,\n})<RootProps>(({ theme, leftPanel, rightPanel }) => ({\n width: '100%',\n\n [`& .${classes.topStripe}`]: {\n width: '100%',\n height: `${TOP_STRIPE_HEIGHT}px`,\n backgroundColor: theme.palette.primary.main,\n },\n\n [`& .${classes.titleBar}`]: {\n backgroundColor: theme.palette.primary.light,\n height: `${TITLE_BAR_HEIGHT}px`,\n padding: theme.spacing(0, 3),\n width: '100%',\n },\n\n [`& .${classes.titleSlider}`]: {\n height: '100%',\n display: 'flex',\n alignItems: 'center',\n color: 'white',\n\n transition: theme.transitions.create('margin', {\n easing: theme.transitions.easing.sharp,\n duration: theme.transitions.duration.leavingScreen,\n }),\n\n [`& .${classes.leftPanelButton}`]: {\n marginRight: theme.spacing(2),\n flexGrow: 0,\n },\n\n [`& .${classes.titleText}`]: {\n flexGrow: 1,\n },\n\n [`& .${classes.rightPanelButton}`]: {\n flexGrow: 0,\n },\n\n ...(leftPanel?.open && {\n transition: theme.transitions.create('margin', {\n easing: theme.transitions.easing.easeOut,\n duration: theme.transitions.duration.enteringScreen,\n }),\n marginLeft: `${leftPanel?.width ?? 0}px`,\n }),\n\n ...(rightPanel?.open && {\n transition: theme.transitions.create('margin', {\n easing: theme.transitions.easing.easeOut,\n duration: theme.transitions.duration.enteringScreen,\n }),\n marginRight: `${rightPanel?.width ?? 0}px`,\n }),\n },\n}));\n\n/**\n * Goes at the top of every page. Wasn't feeling creative in naming it.\n *\n * This differs from the typical appbar with a toolbar used in most MUI apps in\n * that it has to interact with a sliding side panel that is not the main\n * navbar.\n */\nexport default function TopBar({\n titleText = '',\n leftPanel,\n rightPanel,\n 'data-testid': dataTestId,\n}: TopBarProps) {\n return (\n <Root leftPanel={leftPanel} rightPanel={rightPanel} data-testid={dataTestId}>\n <div className={classes.topStripe} />\n <div className={classes.titleBar}>\n <Box className={classes.titleSlider}>\n {leftPanel !== undefined && !leftPanel.open && leftPanel.showOpenArrow && (\n <IconButton\n className={classes.leftPanelButton}\n color=\"inherit\"\n aria-label=\"Open left side panel\"\n onClick={leftPanel?.onOpen}\n edge=\"start\"\n size=\"large\"\n >\n {' '}\n <ArrowForwardIcon />\n </IconButton>\n )}\n\n <Typography className={classes.titleText} variant=\"h6\" noWrap>\n {titleText}\n </Typography>\n\n {rightPanel !== undefined && !rightPanel.open && rightPanel.showOpenArrow && (\n <IconButton\n className={classes.rightPanelButton}\n color=\"inherit\"\n aria-label=\"Open right side panel\"\n onClick={rightPanel?.onOpen}\n edge=\"end\"\n size=\"large\"\n >\n {' '}\n <ArrowBackIcon />\n </IconButton>\n )}\n </Box>\n </div>\n </Root>\n );\n}\n","import { PropsWithChildren } from 'react';\nimport ArrowBackIcon from '@mui/icons-material/ArrowBack';\nimport ArrowForwardIcon from '@mui/icons-material/ArrowForward';\nimport Drawer, { DrawerProps } from '@mui/material/Drawer';\nimport Box, { BoxProps } from '@mui/material/Box';\nimport Typography from '@mui/material/Typography';\nimport IconButton from '@mui/material/IconButton';\nimport { styled } from '@mui/material';\n\nexport const DEFAULT_PANEL_WIDTH = 400;\n\ninterface SidePanelDrawerProps extends DrawerProps {\n anchor: 'left' | 'right';\n width?: number;\n debugOpacity?: boolean;\n navBarOpen: boolean;\n navBarWidthOpen: number;\n navBarWidthClosed: number;\n}\n\nconst SidePanelDrawer = styled(Drawer, {\n shouldForwardProp: (prop) =>\n // Note we do want anchor to be forwarded to the Drawer component\n !(\n [\n 'width',\n 'debug',\n 'debugOpacity',\n 'navBarOpen',\n 'navBarWidthOpen',\n 'navBarWidthClosed',\n ] as Array<PropertyKey>\n ).includes(prop),\n name: 'SidePanelDrawer',\n})<SidePanelDrawerProps>(\n ({ width, debugOpacity = false, anchor, navBarOpen, navBarWidthOpen, navBarWidthClosed }) => ({\n width,\n\n '& .MuiDrawer-paper': {\n position: 'absolute',\n width,\n boxSizing: 'border-box',\n border: 'unset',\n boxShadow:\n '0px 4px 5px rgba(0, 0, 0, 0.14), 0px 1px 10px rgba(0, 0, 0, 0.12), 0px 2px 4px rgba(0, 0, 0, 0.2)',\n\n ...(debugOpacity && {\n opacity: '50%',\n }),\n\n ...(anchor === 'left' && {\n marginLeft: `${navBarWidthClosed}px`,\n ...(navBarOpen && {\n marginLeft: `${navBarWidthOpen}px`,\n }),\n }),\n },\n })\n);\n\ninterface DrawerHeaderBoxProps {\n anchor: 'left' | 'right';\n}\n\nconst DrawerHeaderBox = styled(Box, {\n shouldForwardProp: (prop) => !(['anchor'] as Array<PropertyKey>).includes(prop),\n})<DrawerHeaderBoxProps>(({ theme, anchor }) => ({\n display: 'flex',\n alignItems: 'center',\n padding: theme.spacing(2),\n ...theme.mixins.toolbar,\n justifyContent: anchor === 'left' ? 'space-between' : 'flex-start',\n backgroundColor: theme.palette.primary.light,\n height: '88px',\n\n '&,*': {\n color: 'white',\n },\n\n ' .MuiTypography-root': {\n fontSize: '22px',\n },\n\n ' .MuiButtonBase-root': {\n marginRight: anchor === 'right' ? theme.spacing(2) : 0,\n },\n}));\n\ntype SidePanelProps = PropsWithChildren<{\n open: boolean;\n anchor?: 'left' | 'right';\n onClose?: React.MouseEventHandler<HTMLElement>;\n titleText?: string;\n width?: number;\n showCloseArrow?: boolean;\n debugOpacity?: boolean;\n headerBoxProps?: BoxProps;\n onOpened?: () => void;\n onClosed?: () => void;\n 'data-testid'?: string;\n navBarOpen?: boolean;\n navBarWidthOpen?: number;\n navBarWidthClosed?: number;\n}>;\n\n/**\n * The SidePanel is designed to be used along with the TopBar component for a\n * consistent look and feel.\n */\nexport default function SidePanel({\n children,\n anchor = 'left',\n open,\n onClose = () => {},\n titleText = '',\n width = DEFAULT_PANEL_WIDTH,\n showCloseArrow = true,\n debugOpacity = false,\n headerBoxProps = {},\n onOpened,\n onClosed,\n 'data-testid': dataTestId,\n navBarOpen = false,\n navBarWidthOpen = 0,\n navBarWidthClosed = 0,\n}: SidePanelProps) {\n return (\n <SidePanelDrawer\n SlideProps={{\n onEntered: () => onOpened?.(),\n onExited: () => onClosed?.(),\n }}\n variant=\"persistent\"\n anchor={anchor}\n open={open}\n width={width}\n debugOpacity={debugOpacity}\n data-testid={dataTestId}\n navBarOpen={navBarOpen}\n navBarWidthOpen={navBarWidthOpen}\n navBarWidthClosed={navBarWidthClosed}\n >\n <DrawerHeaderBox anchor={anchor} {...headerBoxProps}>\n {/* Might be a cleaner way to do this, but it does the job */}\n {anchor === 'left' ? (\n <>\n <Typography variant=\"h6\" color=\"inherit\" component=\"div\">\n {titleText}\n </Typography>\n\n {showCloseArrow && (\n <IconButton onClick={onClose} size=\"large\" aria-label=\"Close left side panel\">\n <ArrowBackIcon data-testid=\"arrowbackicon\" />{' '}\n </IconButton>\n )}\n </>\n ) : (\n <>\n {showCloseArrow && (\n <IconButton onClick={onClose} size=\"large\" aria-label=\"Close right side panel\">\n <ArrowForwardIcon />{' '}\n </IconButton>\n )}\n\n <Typography variant=\"h6\" color=\"inherit\" component=\"div\">\n {titleText}\n </Typography>\n </>\n )}\n </DrawerHeaderBox>\n {children}\n </SidePanelDrawer>\n );\n}\n","import { styled } from '@mui/material';\n\ninterface PanelProps {\n width: number;\n open: boolean;\n}\n\ninterface PanelAwareMarginsProps {\n /** If the leftPanel prop is omitted but a left panel is still in use on the\n * page, it will slide over the top instead of the default pushing */\n leftPanel?: PanelProps;\n\n /** If the rightPanel prop is omitted but a right panel is still in use on the\n * page, it will slide over the top instead of the default pushing */\n rightPanel?: PanelProps;\n}\n\n/** With the optional leftPanel and rightPanel props providing state and width,\n * the children of of the PanelAwareMargins will looks like they is pushed aside\n * by the panels by transitioning the margins. */\nconst PanelAwareMargins = styled('div', {\n shouldForwardProp: (prop) => !(['leftPanel', 'rightPanel'] as Array<PropertyKey>).includes(prop),\n name: 'PanelAwareMargins',\n})<PanelAwareMarginsProps>(({ theme, leftPanel, rightPanel }) => ({\n transition: theme.transitions.create('margin', {\n easing: theme.transitions.easing.sharp,\n duration: theme.transitions.duration.leavingScreen,\n }),\n\n ...(leftPanel?.open && {\n transition: theme.transitions.create('margin', {\n easing: theme.transitions.easing.easeOut,\n duration: theme.transitions.duration.enteringScreen,\n }),\n marginLeft: `${leftPanel?.width ?? 0}px`,\n }),\n ...(rightPanel?.open && {\n transition: theme.transitions.create('margin', {\n easing: theme.transitions.easing.easeOut,\n duration: theme.transitions.duration.enteringScreen,\n }),\n marginRight: `${rightPanel?.width ?? 0}px`,\n }),\n}));\n\nexport default PanelAwareMargins;\n","import { styled } from '@mui/material';\nimport Container from '@mui/material/Container';\n\n/** Just a simple styled container applying our spacings*/\nconst PageContainer = styled(Container, {\n name: 'PageContainer',\n})(({ theme }) => ({\n // Horizontal padding comes from the Container's gutter\n paddingTop: theme.spacing(3),\n paddingBottom: theme.spacing(3),\n}));\n\nexport default PageContainer;\n","import { ComponentProps, PropsWithChildren, ReactNode, useEffect, useState } from 'react';\nimport { Box } from '@mui/material';\n\nimport TopBar from './TopBar';\nimport SidePanel, { DEFAULT_PANEL_WIDTH } from './SidePanel';\nimport PanelAwareMargins from './PanelAwareMargins';\nimport PageContainer from './PageContainer';\n\nconst INITIAL_LEFT_PANEL_OPEN = false;\nconst INITIAL_RIGHT_PANEL_OPEN = false;\n\nconst PANEL_DEFAULTS = {\n titleText: '',\n flavour: 'push',\n width: DEFAULT_PANEL_WIDTH,\n arrowButtons: 'both',\n startOpen: false,\n open: undefined,\n onChangeOpen: undefined,\n content: <></>,\n onOpened: undefined,\n onClosed: undefined,\n dataTestId: undefined,\n};\n\ninterface SidePanelProps {\n titleText?: string;\n content?: ReactNode;\n flavour?: 'push' | 'overlay';\n arrowButtons?: 'open' | 'close' | 'both' | 'none';\n width?: number;\n startOpen?: boolean;\n\n /** Use this and onChangeOpen if you want to use component as a controlled component */\n open?: boolean;\n onChangeOpen?: (open: boolean) => void;\n\n /** Called when the sliding transition to open has finished */\n onOpened?: () => void;\n\n /** Called when the sliding transition to open has finished */\n onClosed?: () => void;\n\n dataTestId?: string;\n}\n\ninterface BasePageLayoutProps {\n titleText?: string;\n\n leftPanel?: SidePanelProps;\n rightPanel?: SidePanelProps;\n\n /** This will only have an effect for panels whose state is not controlled by\n * parent */\n sidePanelsAreMutuallyExclusive?: boolean;\n\n /** Temporary, get rid of later */\n debugOpacity?: boolean;\n\n /** Props applied to the PageContainer component, which is a styled MUI Container */\n pageContainerProps?: ComponentProps<typeof PageContainer>;\n\n topBarDataTestId?: string;\n pageContentDataTestId?: string;\n}\n\ninterface PageLayoutWithNavBarProps extends BasePageLayoutProps {\n navBarOpen: boolean;\n navBarWidthOpen: number;\n navBarWidthClosed: number;\n}\n\ninterface PagelayoutWithoutNavBarProps extends BasePageLayoutProps {\n navBarOpen?: never;\n navBarWidthOpen?: never;\n navBarWidthClosed?: never;\n}\n\nexport type PageLayoutProps = PropsWithChildren<\n PageLayoutWithNavBarProps | PagelayoutWithoutNavBarProps\n>;\n\nexport default function PageLayout({\n children,\n titleText = '',\n leftPanel,\n rightPanel,\n sidePanelsAreMutuallyExclusive = true,\n debugOpacity = false,\n pageContainerProps,\n pageContentDataTestId,\n topBarDataTestId,\n navBarOpen,\n navBarWidthOpen,\n navBarWidthClosed,\n}: PageLayoutProps) {\n const [leftPanelOpenInternal, setLeftPanelOpenInternal] = useState(INITIAL_LEFT_PANEL_OPEN);\n const [rightPanelOpenInternal, setRightPanelOpenInternal] = useState(INITIAL_RIGHT_PANEL_OPEN);\n const [leftPanelOpenInternalPrevious, setLeftPanelOpenInternalPrevious] =\n useState(INITIAL_LEFT_PANEL_OPEN);\n const [rightPanelOpenInternalPrevious, setRightPanelOpenInternalPrevious] =\n useState(INITIAL_RIGHT_PANEL_OPEN);\n\n const includeLeftPanel = leftPanel !== undefined;\n const includeRightPanel = rightPanel !== undefined;\n\n const {\n titleText: leftPanelTitleText,\n content: leftPanelContent,\n flavour: leftPanelFlavour,\n open: leftPanelOpen,\n onChangeOpen: leftPanelOnChangeOpen,\n width: leftPanelWidth,\n arrowButtons: leftPanelArrowButtons,\n startOpen: leftPanelStartOpen,\n onOpened: leftPanelOnOpened,\n onClosed: leftPanelOnClosed,\n dataTestId: leftPanelDataTestId,\n } = leftPanel ? { ...PANEL_DEFAULTS, ...leftPanel } : { ...PANEL_DEFAULTS };\n\n const {\n titleText: rightPanelTitleText,\n content: rightPanelContent,\n flavour: rightPanelFlavour,\n open: rightPanelOpen,\n onChangeOpen: rightPanelOnChangeOpen,\n width: rightPanelWidth,\n arrowButtons: rightPanelArrowButtons,\n startOpen: rightPanelStartOpen,\n onOpened: rightPanelOnOpened,\n onClosed: rightPanelOnClosed,\n dataTestId: rightPanelDataTestId,\n } = rightPanel ? { ...PANEL_DEFAULTS, ...rightPanel } : { ...PANEL_DEFAULTS };\n\n useEffect(() => {\n if (leftPanelStartOpen !== INITIAL_LEFT_PANEL_OPEN) {\n setLeftPanelOpenInternal(leftPanelStartOpen);\n setLeftPanelOpenInternalPrevious(leftPanelStartOpen);\n }\n }, [leftPanelStartOpen]);\n\n useEffect(() => {\n if (rightPanelStartOpen !== INITIAL_RIGHT_PANEL_OPEN) {\n setRightPanelOpenInternal(rightPanelStartOpen);\n setRightPanelOpenInternalPrevious(rightPanelStartOpen);\n }\n }, [rightPanelStartOpen]);\n\n const leftPanelOpenCurrent = leftPanelOpen === undefined ? leftPanelOpenInternal : leftPanelOpen;\n\n const rightPanelOpenCurrent =\n rightPanelOpen === undefined ? rightPanelOpenInternal : rightPanelOpen;\n\n const handleLeftPanelChangeOpen = (open: boolean) => {\n if (leftPanelOpen === undefined) {\n // If not in controlled mode, update the internal state\n setLeftPanelOpenInternal(open);\n\n if (sidePanelsAreMutuallyExclusive && includeRightPanel) {\n if (open) {\n setRightPanelOpenInternal(false);\n setRightPanelOpenInternalPrevious(rightPanelOpenInternal);\n } else {\n setRightPanelOpenInternal(rightPanelOpenInternalPrevious);\n }\n }\n }\n // Likewise, if callback provided, call it\n if (leftPanelOnChangeOpen) leftPanelOnChangeOpen(open);\n };\n\n const handleRightPanelChangeOpen = (open: boolean) => {\n if (rightPanelOpen === undefined) {\n setRightPanelOpenInternal(open);\n if (sidePanelsAreMutuallyExclusive && includeLeftPanel) {\n if (open) {\n setLeftPanelOpenInternal(false);\n setLeftPanelOpenInternalPrevious(leftPanelOpenInternal);\n } else {\n setLeftPanelOpenInternal(leftPanelOpenInternalPrevious);\n }\n }\n }\n if (rightPanelOnChangeOpen) rightPanelOnChangeOpen(open);\n };\n\n return (\n <Box>\n {includeLeftPanel && (\n <SidePanel\n data-testid={leftPanelDataTestId}\n anchor=\"left\"\n open={leftPanelOpenCurrent}\n onClose={() => handleLeftPanelChangeOpen(false)}\n width={leftPanelWidth}\n titleText={leftPanelTitleText}\n debugOpacity={debugOpacity}\n showCloseArrow={leftPanelArrowButtons === 'both' || leftPanelArrowButtons === 'close'}\n onOpened={leftPanelOnOpened}\n onClosed={leftPanelOnClosed}\n navBarOpen={navBarOpen}\n navBarWidthOpen={navBarWidthOpen}\n navBarWidthClosed={navBarWidthClosed}\n >\n {leftPanelContent}\n </SidePanel>\n )}\n\n {includeRightPanel && (\n <SidePanel\n data-testid={rightPanelDataTestId}\n anchor=\"right\"\n open={rightPanelOpenCurrent}\n onClose={() => handleRightPanelChangeOpen(false)}\n width={rightPanelWidth}\n titleText={rightPanelTitleText}\n debugOpacity={debugOpacity}\n showCloseArrow={rightPanelArrowButtons === 'both' || rightPanelArrowButtons === 'close'}\n onOpened={rightPanelOnOpened}\n onClosed={rightPanelOnClosed}\n navBarOpen={navBarOpen}\n navBarWidthOpen={navBarWidthOpen}\n navBarWidthClosed={navBarWidthClosed}\n >\n {rightPanelContent}\n </SidePanel>\n )}\n\n <TopBar\n titleText={titleText}\n data-testid={topBarDataTestId}\n {...(includeLeftPanel && leftPanelFlavour === 'push'\n ? {\n leftPanel: {\n open: leftPanelOpenCurrent,\n width: leftPanelWidth,\n onOpen: () => handleLeftPanelChangeOpen(true),\n showOpenArrow: leftPanelArrowButtons === 'both' || leftPanelArrowButtons === 'open',\n },\n }\n : {})}\n {...(includeRightPanel && rightPanelFlavour === 'push'\n ? {\n rightPanel: {\n open: rightPanelOpenCurrent,\n width: rightPanelWidth,\n onOpen: () => handleRightPanelChangeOpen(true),\n showOpenArrow:\n rightPanelArrowButtons === 'both' || rightPanelArrowButtons === 'open',\n },\n }\n : {})}\n />\n\n <PanelAwareMargins\n {...(leftPanelFlavour === 'push'\n ? {\n leftPanel: {\n open: leftPanelOpenCurrent,\n width: leftPanelWidth,\n },\n }\n : {})}\n {...(rightPanelFlavour === 'push'\n ? {\n rightPanel: {\n open: rightPanelOpenCurrent,\n width: rightPanelWidth,\n },\n }\n : {})}\n >\n <PageContainer data-testid={pageContentDataTestId} {...pageContainerProps}>\n {children}\n </PageContainer>\n </PanelAwareMargins>\n </Box>\n );\n}\n","import { alpha, createTheme } from '@mui/material/styles';\n\nexport const internalAGSystemsTheme = createTheme({\n palette: {\n primary: {\n main: '#007236',\n dark: '#005221',\n light: '#00A04E',\n contrastText: '#FFFFFF',\n },\n secondary: {\n main: '#662D91',\n dark: '#440E62',\n light: '#93268F',\n contrastText: '#FFFFFF',\n },\n error: {\n main: '#D32F2F',\n dark: '#C62828',\n light: '#EF5350',\n },\n info: {\n main: '#0288D1',\n dark: '#01579B',\n light: '#03A9F4',\n },\n success: {\n main: '#0288D1',\n dark: '#01579B',\n light: '#03A9F4',\n },\n },\n components: {\n MuiTextField: {\n defaultProps: { color: 'secondary' },\n },\n MuiToggleButtonGroup: {\n defaultProps: { color: 'secondary' },\n },\n MuiCheckbox: {\n defaultProps: { color: 'secondary' },\n },\n MuiSelect: {\n defaultProps: { color: 'secondary' },\n },\n MuiSwitch: {\n defaultProps: { color: 'secondary' },\n },\n MuiFormControl: {\n defaultProps: { color: 'secondary' },\n },\n MuiMenuItem: {\n // Setting defaultProps for color on MenuItem does not work, so update manually\n styleOverrides: {\n root: ({ theme }) => ({\n '&.Mui-selected': {\n backgroundColor: alpha(\n theme.palette.secondary.main,\n theme.palette.action.selectedOpacity\n ),\n '&:hover': {\n backgroundColor: alpha(\n theme.palette.secondary.main,\n theme.palette.action.selectedOpacity\n ),\n },\n '&.Mui-focusVisible': {\n backgroundColor: alpha(\n theme.palette.secondary.main,\n theme.palette.action.focusOpacity\n ),\n },\n },\n }),\n },\n },\n },\n typography: {\n // I couldn't think of what to call this. It is an attempt to match\n // https://www.figma.com/file/atonRPl2YD9A1NCntbDtKR/List-Filter-and-Product-Concept?node-id=1187%3A43730\n // but not sure if line height should be changed\n explainer: {\n fontSize: '14px',\n marginBlockStart: '1em',\n },\n h3: {\n fontSize: '1rem',\n fontWeight: 700,\n },\n },\n});\n\nexport const fed21Theme = createTheme({\n palette: {\n primary: {\n dark: '#00A651',\n light: '#A3D39C',\n main: '#007236',\n contrastText: '#FFF',\n },\n warning: {\n main: '#F5871F',\n light: '#FCC589',\n dark: '#A2590A',\n contrastText: '#FFF',\n },\n secondary: {\n main: '#662D91',\n light: '#BD8CBF',\n dark: '#440E62',\n contrastText: '#FFF',\n },\n error: {\n main: '#D43C95',\n light: '#8F2064',\n dark: '#F9CDE0',\n contrastText: '#FFF',\n },\n info: {\n main: '#00A88D',\n light: '#ADDCCF',\n dark: '#005243',\n contrastText: '#FFF',\n },\n success: {\n main: '#00A651',\n light: '#A3D39C',\n dark: '#007236',\n contrastText: '#FFF',\n },\n },\n typography: {\n // I couldn't think of what to call this. It is an attempt to match\n // https://www.figma.com/file/atonRPl2YD9A1NCntbDtKR/List-Filter-and-Product-Concept?node-id=1187%3A43730\n // but not sure if line height should be changed\n explainer: {\n fontSize: '14px',\n marginBlockStart: '1em',\n },\n },\n});\n","import { PropsWithChildren } from 'react';\nimport { ThemeProvider } from '@mui/material/styles';\n\nimport { internalAGSystemsTheme, fed21Theme } from './themes';\n\nexport type AgThemeName = 'internal' | 'fed21';\n\nexport interface AgThemeProviderProps {\n name?: AgThemeName;\n}\n\nexport default function AgThemeProvider({\n name = 'internal',\n children,\n}: PropsWithChildren<AgThemeProviderProps>) {\n const theme =\n name === 'internal' ? internalAGSystemsTheme : name === 'fed21' ? fed21Theme : undefined;\n\n // Should be resolved when we move to React >= 18\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n return <ThemeProvider theme={theme}>{children}</ThemeProvider>;\n}\n","// The default props passed to the underlying Snackbar component\nimport { SnackbarOrigin } from '@mui/material/Snackbar';\n\nexport const defaultSnackbarProps = {\n autoHideDuration: 6000,\n anchorOrigin: { vertical: 'top', horizontal: 'center' } as SnackbarOrigin,\n\n // The default is false. If we prefer timer to continue when window loses\n // focus, change to true\n disableWindowBlurListener: false,\n};\n\nexport const defaultSaladBarProps = {\n shouldClose: (_event: Event | React.SyntheticEvent<Element, Event>, reason: string) => {\n return reason !== 'clickaway';\n },\n};\n\nexport const defaultEnqueueNotificationOptions = {\n message: '',\n severity: 'info',\n variant: 'standard',\n progressIndicator: undefined, // Can use 'circular' or 'linear'\n};\n","import React, { useRef, useState, createContext, useCallback } from 'react';\nimport Snackbar, { SnackbarProps } from '@mui/material/Snackbar';\nimport Alert from '@mui/material/Alert';\nimport LinearProgress from '@mui/material/LinearProgress';\nimport CircularProgress from '@mui/material/CircularProgress';\n\nimport {\n Notification,\n SaladBarCloseReason,\n SaladBarState,\n SaladBarActions,\n SaladBarContext,\n} from './types';\nimport {\n defaultSaladBarProps,\n defaultSnackbarProps,\n defaultEnqueueNotificationOptions,\n} from './defaults';\n\nconst MAX_QUEUE_LENGTH = 100;\nconst MAX_QUEUE_HIT_REPORT_INTERVAL = 2000;\nconst SALADBAR_INDEX = 2000;\n\n// No need to use uuids, just use an incremented value\nconst generateNotificationKey = (() => {\n let previousKey = 0;\n return () => {\n previousKey += 1;\n return previousKey;\n };\n})();\n\nconst alertWithLinearProgressStyle = {\n borderBottomLeftRadius: '0px',\n borderBottomRightRadius: '0px',\n};\n\n// Note: Must be at at this scope, otherwise useEffect will loop infinitely\nconst defaultOverrideState = {};\nconst defaultOverrideActions = {};\n\nexport const Context = createContext<SaladBarContext | null>(null);\n\nexport interface SaladBarProviderProps extends SnackbarProps {\n /** Allow overriding the state of the SaladBar (for tests etc)*/\n overrideState?: Partial<SaladBarState>;\n\n /** Allow overriding the actions of the SaladBar (for tests etc)*/\n overrideActions?: Partial<SaladBarActions>;\n\n /** Called when an event triggers closing of currently displayed snackbar.\n * Default implementation returns false if reason is 'clickaway', otherwise\n * true.*/\n shouldClose?: (\n event: Event | React.SyntheticEvent<Element, Event>,\n reason: SaladBarCloseReason\n ) => boolean;\n}\n\nexport default function SaladBarProvider({\n overrideState = defaultOverrideState,\n overrideActions = defaultOverrideActions,\n shouldClose = defaultSaladBarProps.shouldClose,\n children,\n ...snackbarProps\n}: SaladBarProviderProps) {\n const [{ open }, setSaladBarState] = useState({ open: false });\n\n // We use a ref instead of a state to store the actual data, because we want\n // queue to be persistent across the whole lifetime of component. I considered\n // using yocto-queue because it would be O(1) instead of O(n), but its not\n // designed to access the head without removing it and its not going to make\n // much difference anyway.\n const queueRef = useRef<Notification[]>([]);\n\n const limitLastHitAt = useRef(Date.now());\n const limitHitCountSinceLastReport = useRef(0);\n\n const setOpen = useCallback((newVal: boolean) => {\n setSaladBarState({ open: newVal });\n }, []);\n\n const enqueueNotification = useCallback((notification: Notification = {}) => {\n limitHitCountSinceLastReport.current += 1;\n if (queueRef.current.length >= MAX_QUEUE_LENGTH) {\n // If the queue length is hit, probably stuck in some sort of loop, so\n // don't want to spam logs instantly so space it out\n if (Date.now() - limitLastHitAt.current >= MAX_QUEUE_HIT_REPORT_INTERVAL) {\n limitLastHitAt.current = Date.now();\n console.error(\n `SaladBarProvider: MAX_QUEUE_LENGTH (${MAX_QUEUE_LENGTH}) hit ${limitHitCountSinceLastReport.current} times in last ${MAX_QUEUE_HIT_REPORT_INTERVAL}ms)`\n );\n limitHitCountSinceLastReport.current = 0;\n }\n }\n\n const newNotification = {\n ...defaultEnqueueNotificationOptions,\n key: generateNotificationKey(), // Can be overridden.\n ...notification, // This could result in collisons, but unlikely.\n };\n\n // Add to the end of queue\n queueRef.current.push(newNotification as Notification);\n\n // If the queue was previously empty, then open the snackbar. We don't do it\n // whenever enqueueNotification is called since it will mess up transitions\n if (queueRef.current.length === 1) setSaladBarState({ open: true });\n\n return newNotification.key;\n }, []);\n\n const enqueueSuccessNotification = (message = '', options = {}) =>\n enqueueNotification({ message, severity: 'success', ...options });\n\n const enqueueInfoNotification = (message = '', options = {}) =>\n enqueueNotification({ message, severity: 'info', ...options });\n\n const enqueueWarningNotification = (message = '', options = {}) =>\n enqueueNotification({ message, severity: 'warning', ...options });\n\n const enqueueErrorNotification = (message = '', options = {}) =>\n enqueueNotification({ message, severity: 'error', ...options });\n\n /**\n * Remove the notification with specified key from the queue. If the key is\n * not found, immediately returns null.\n *\n * @param key - The key as returned from enqueue...() function.\n *\n * @returns The removed notification\n */\n const removeNotification = (key: Notification['key']) => {\n const index = queueRef.current.findIndex((x) => x.key === key);\n if (index === -1) return;\n\n if (index === 0) {\n // If its at the front of the queue, it is either currently being\n // displayed or in process of being closed. Either way, we can just set\n // open to false\n setSaladBarState({ open: false });\n return queueRef.current[0];\n }\n // Otherwise we just remove it from the queue, it won't need to transition\n return queueRef.current.splice(index, 1);\n };\n\n const handleClose = (\n event: Event | React.SyntheticEvent<Element, Event>,\n reason: SaladBarCloseReason\n ) => {\n if (shouldClose(event, reason)) setSaladBarState({ open: false });\n };\n\n // Callback fired before the transition is exiting.\n const handleExit = () => {};\n\n // Callback fired when the transition has exited.\n const handleExited = () => {\n // Remove head of queue\n queueRef.current.shift();\n\n // If there is still something on the queue, then re-open\n if (queueRef.current.length > 0) setSaladBarState({ open: true });\n };\n\n // The notification to display is the one at head of queue\n const currentNotification = queueRef.current[0] ?? {\n ...defaultEnqueueNotificationOptions,\n };\n\n // Can also override certain props on a notification level\n const currentNotificationSnackbarProps: { autoHideDuration?: number } = {};\n // Probably a better way of doing this\n if ('autoHideDuration' in currentNotification) {\n currentNotificationSnackbarProps.autoHideDuration = currentNotification.autoHideDuration;\n }\n\n // Note the order of props in Snackbar, we don't allow overriding open and\n // onClose directly.\n const snackbarFinalProps = {\n ...defaultSnackbarProps,\n ...snackbarProps,\n };\n\n const value: SaladBarContext = {\n open,\n setOpen,\n enqueueNotification,\n enqueueSuccessNotification,\n enqueueInfoNotification,\n enqueueWarningNotification,\n enqueueErrorNotification,\n removeNotification,\n ...overrideState,\n ...overrideActions,\n };\n\n return (\n <Context.Provider value={value}>\n {children}\n <Snackbar\n {...snackbarFinalProps}\n {...currentNotificationSnackbarProps}\n open={open}\n onClose={handleClose}\n TransitionProps={{\n onExited: handleExited,\n onExit: handleExit,\n }}\n sx={{ zIndex: SALADBAR_INDEX }}\n >\n <div>\n <Alert\n onClose={(event) => handleClose(event, 'closeAlert')}\n severity={currentNotification.severity}\n variant={'filled'}\n icon={\n currentNotification.progressIndicator === 'circular' ? (\n <CircularProgress size=\"1em\" />\n ) : undefined\n }\n style={\n currentNotification.progressIndicator === 'linear'\n ? alertWithLinearProgressStyle\n : undefined\n }\n >\n {currentNotification.message}\n </Alert>\n {currentNotification.progressIndicator === 'linear' && <LinearProgress color=\"primary\" />}\n </div>\n </Snackbar>\n </Context.Provider>\n );\n}\n","import { useContext } from 'react';\n\nimport { Context } from './SaladBarContext';\nimport { ContextError } from '../../errors/ContextError';\n\n/**\n * Use the `useSaladBar` hook in components to access the enqueueNotification()\n * method to add a snackbar message to queue.\n *\n * Must be used inside a <SaladBarProvider>\n *\n * Example:\n *\n * ```js\n * const {\n * enqueueNotification,\n * enqueueSuccessNotification,\n * enqueueInfoNotification,\n * enqueueWarningNotification,\n * enqueueErrorNotification,\n * } = useSaladBar();\n * ...\n * enqueueNotification({message: 'hello', severity: 'info'});\n * // or\n * enqueueInfoNotification('hello');\n * ```\n */\nexport function useSaladBar() {\n const context = useContext(Context);\n\n if (context === null) {\n throw new ContextError('Error: Tried to useSaladBar outside of a <SaladBarProvider>');\n }\n\n return context;\n}\n","/* eslint-disable react/prop-types */\n/* eslint-disable react/display-name */\nimport { createHelper } from 'souvlaki';\n\nimport SaladBarProvider, { SaladBarProviderProps } from './SaladBarContext';\n\nexport const withSaladBarProvider = createHelper(\n (\n props: SaladBarProviderProps = { autoHideDuration: 1 },\n state: Partial<unknown> = {},\n actions: Partial<unknown> = {}\n ) =>\n ({ children }) => {\n return (\n <SaladBarProvider {...props} overrideState={state} overrideActions={actions}>\n {children}\n </SaladBarProvider>\n );\n }\n);\n"],"names":["ExampleComponent","text","num","setNum","useState","jsxs","Fragment","jsx","Typography","Button","oldNum","Paper","NAVBAR_WIDTH_OPENED","NAVBAR_WIDTH_CLOSED","PREFIX","classes","Root","styled","theme","sharedOverrides","openedMixin","__spreadValues","closedMixin","NavDrawer","Drawer","prop","open","ContextError","AgError","__publicField","Context","createContext","defaultOverrideState","defaultOverrideActions","NavBarProvider","overrideState","overrideActions","children","setNavBarState","setOpen","useCallback","newVal","value","useNavBar","context","useContext","buildNavBarState","overrides","withNavBarProvider","createHelper","state","actions","SELECTED_INDICATOR_WIDTH","NavBarDarkStyledList","List","NavBar","dataTestId","CssBaseline","TOP_STRIPE_HEIGHT","TITLE_BAR_HEIGHT","leftPanel","rightPanel","_a","_b","TopBar","titleText","Box","IconButton","ArrowForwardIcon","ArrowBackIcon","DEFAULT_PANEL_WIDTH","SidePanelDrawer","width","debugOpacity","anchor","navBarOpen","navBarWidthOpen","navBarWidthClosed","DrawerHeaderBox","__spreadProps","SidePanel","onClose","showCloseArrow","headerBoxProps","onOpened","onClosed","PanelAwareMargins","PageContainer","Container","INITIAL_LEFT_PANEL_OPEN","INITIAL_RIGHT_PANEL_OPEN","PANEL_DEFAULTS","PageLayout","sidePanelsAreMutuallyExclusive","pageContainerProps","pageContentDataTestId","topBarDataTestId","leftPanelOpenInternal","setLeftPanelOpenInternal","rightPanelOpenInternal","setRightPanelOpenInternal","leftPanelOpenInternalPrevious","setLeftPanelOpenInternalPrevious","rightPanelOpenInternalPrevious","setRightPanelOpenInternalPrevious","includeLeftPanel","includeRightPanel","leftPanelTitleText","leftPanelContent","leftPanelFlavour","leftPanelOpen","leftPanelOnChangeOpen","leftPanelWidth","leftPanelArrowButtons","leftPanelStartOpen","leftPanelOnOpened","leftPanelOnClosed","leftPanelDataTestId","rightPanelTitleText","rightPanelContent","rightPanelFlavour","rightPanelOpen","rightPanelOnChangeOpen","rightPanelWidth","rightPanelArrowButtons","rightPanelStartOpen","rightPanelOnOpened","rightPanelOnClosed","rightPanelDataTestId","useEffect","leftPanelOpenCurrent","rightPanelOpenCurrent","handleLeftPanelChangeOpen","handleRightPanelChangeOpen","internalAGSystemsTheme","createTheme","alpha","fed21Theme","AgThemeProvider","name","ThemeProvider","defaultSnackbarProps","defaultSaladBarProps","_event","reason","defaultEnqueueNotificationOptions","MAX_QUEUE_LENGTH","MAX_QUEUE_HIT_REPORT_INTERVAL","SALADBAR_INDEX","generateNotificationKey","previousKey","alertWithLinearProgressStyle","SaladBarProvider","shouldClose","snackbarProps","__objRest","setSaladBarState","queueRef","useRef","limitLastHitAt","limitHitCountSinceLastReport","enqueueNotification","notification","newNotification","enqueueSuccessNotification","message","options","enqueueInfoNotification","enqueueWarningNotification","enqueueErrorNotification","removeNotification","key","index","x","handleClose","event","handleExit","handleExited","currentNotification","currentNotificationSnackbarProps","snackbarFinalProps","Snackbar","Alert","CircularProgress","LinearProgress","useSaladBar","withSaladBarProvider","props"],"mappings":"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"}
|
|
@@ -1,2 +1,3 @@
|
|
|
1
|
-
|
|
1
|
+
import { SaladBarProviderProps } from './SaladBarContext';
|
|
2
|
+
export declare const withSaladBarProvider: import("souvlaki").SimpleHelper<[props?: SaladBarProviderProps | undefined, state?: Partial<unknown> | undefined, actions?: Partial<unknown> | undefined]>;
|
|
2
3
|
//# sourceMappingURL=testWrappers.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"testWrappers.d.ts","sourceRoot":"","sources":["../../../../src/providers/SaladBar/testWrappers.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"testWrappers.d.ts","sourceRoot":"","sources":["../../../../src/providers/SaladBar/testWrappers.tsx"],"names":[],"mappings":"AAIA,OAAyB,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAE5E,eAAO,MAAM,oBAAoB,4JAahC,CAAC"}
|
package/package.json
CHANGED