codeforlife 2.10.6 → 2.11.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (142) hide show
  1. package/README.md +10 -6
  2. package/dist/App-3VkR-ZEZ.js +27 -0
  3. package/dist/App-3VkR-ZEZ.js.map +1 -0
  4. package/dist/App-UfeajXtp.cjs +2 -0
  5. package/dist/App-UfeajXtp.cjs.map +1 -0
  6. package/dist/Countdown-BtUbr1J_.cjs +2 -0
  7. package/dist/{Countdown-CyJ-01oU.cjs.map → Countdown-BtUbr1J_.cjs.map} +1 -1
  8. package/dist/{Countdown-BTyB1rrK.js → Countdown-DhjAmB0u.js} +9 -9
  9. package/dist/{Countdown-BTyB1rrK.js.map → Countdown-DhjAmB0u.js.map} +1 -1
  10. package/dist/{Image-CgYjq-tA.cjs → Image-CgRVUblT.cjs} +2 -2
  11. package/dist/{Image-CgYjq-tA.cjs.map → Image-CgRVUblT.cjs.map} +1 -1
  12. package/dist/{Image-C-f2ChBh.js → Image-DTOu0h-V.js} +2 -2
  13. package/dist/{Image-C-f2ChBh.js.map → Image-DTOu0h-V.js.map} +1 -1
  14. package/dist/{LinkButton-BOPjG7_2.cjs → LinkButton-Kw2brLTK.cjs} +2 -2
  15. package/dist/{LinkButton-BOPjG7_2.cjs.map → LinkButton-Kw2brLTK.cjs.map} +1 -1
  16. package/dist/{LinkButton-Bk50AHHg.js → LinkButton-sQ5jgHnX.js} +3 -3
  17. package/dist/{LinkButton-Bk50AHHg.js.map → LinkButton-sQ5jgHnX.js.map} +1 -1
  18. package/dist/{Navigate-SL_oMjPc.js → Navigate-ClPcw87e.js} +3 -3
  19. package/dist/{Navigate-SL_oMjPc.js.map → Navigate-ClPcw87e.js.map} +1 -1
  20. package/dist/Navigate-CrMwdIBB.cjs +2 -0
  21. package/dist/{Navigate-C_sgy8Xs.cjs.map → Navigate-CrMwdIBB.cjs.map} +1 -1
  22. package/dist/_commonjsHelpers-DKOUU3wS.cjs +2 -0
  23. package/dist/_commonjsHelpers-DKOUU3wS.cjs.map +1 -0
  24. package/dist/_commonjsHelpers-DaMA6jEr.js +9 -0
  25. package/dist/_commonjsHelpers-DaMA6jEr.js.map +1 -0
  26. package/dist/api/endpoints/index.cjs.js +1 -1
  27. package/dist/api/endpoints/index.es.js +2 -2
  28. package/dist/api/index.cjs.js +3 -3
  29. package/dist/api/index.es.js +3 -3
  30. package/dist/api-9cnyvZj7.cjs +2 -0
  31. package/dist/{api-DIgp_6Vr.cjs.map → api-9cnyvZj7.cjs.map} +1 -1
  32. package/dist/{api-BvUiTeR7.js → api-BFYu8ZvQ.js} +2 -2
  33. package/dist/{api-BvUiTeR7.js.map → api-BFYu8ZvQ.js.map} +1 -1
  34. package/dist/{api-CaeeoZaI.cjs → api-CAH3GT1O.cjs} +2 -2
  35. package/dist/{api-CaeeoZaI.cjs.map → api-CAH3GT1O.cjs.map} +1 -1
  36. package/dist/{auth-CQ1InCxP.js → auth-Bb8WkZGN.js} +4 -4
  37. package/dist/{auth-CQ1InCxP.js.map → auth-Bb8WkZGN.js.map} +1 -1
  38. package/dist/auth-BwpsrTko.cjs +2 -0
  39. package/dist/{auth-B7Vdot4N.cjs.map → auth-BwpsrTko.cjs.map} +1 -1
  40. package/dist/client-BK9NlSVR.js +25208 -0
  41. package/dist/client-BK9NlSVR.js.map +1 -0
  42. package/dist/client-CmAMc2Wj.cjs +251 -0
  43. package/dist/client-CmAMc2Wj.cjs.map +1 -0
  44. package/dist/components/form/index.cjs.js +1 -1
  45. package/dist/components/form/index.es.js +1 -1
  46. package/dist/components/index.cjs.js +1 -1
  47. package/dist/components/index.cjs.js.map +1 -1
  48. package/dist/components/index.d.ts +0 -1
  49. package/dist/components/index.es.js +146 -182
  50. package/dist/components/index.es.js.map +1 -1
  51. package/dist/components/page/index.cjs.js +1 -1
  52. package/dist/components/page/index.es.js +1 -1
  53. package/dist/components/router/index.cjs.js +1 -1
  54. package/dist/components/router/index.es.js +2 -2
  55. package/dist/components/table/index.cjs.js +1 -1
  56. package/dist/components/table/index.es.js +1 -1
  57. package/dist/features/index.cjs.js +1 -1
  58. package/dist/features/index.cjs.js.map +1 -1
  59. package/dist/features/index.es.js +10 -11
  60. package/dist/features/index.es.js.map +1 -1
  61. package/dist/general-Bo6JGvKB.cjs +2 -0
  62. package/dist/{general-BPbbmkeX.cjs.map → general-Bo6JGvKB.cjs.map} +1 -1
  63. package/dist/{general-CtTJPCJn.js → general-D7Hqi3gj.js} +3 -3
  64. package/dist/{general-CtTJPCJn.js.map → general-D7Hqi3gj.js.map} +1 -1
  65. package/dist/hooks/index.cjs.js +1 -1
  66. package/dist/hooks/index.es.js +2 -2
  67. package/dist/{index-CBPn0wyX.cjs → index-5C9hpxRF.cjs} +2 -2
  68. package/dist/{index-CBPn0wyX.cjs.map → index-5C9hpxRF.cjs.map} +1 -1
  69. package/dist/{index-Dfo744Sb.js → index-B3e_XaVG.js} +2 -2
  70. package/dist/{index-Dfo744Sb.js.map → index-B3e_XaVG.js.map} +1 -1
  71. package/dist/{index-CXYppxE3.cjs → index-B89FjK7v.cjs} +2 -2
  72. package/dist/{index-CXYppxE3.cjs.map → index-B89FjK7v.cjs.map} +1 -1
  73. package/dist/{index-CI5O_yH6.js → index-BRHFlEjS.js} +37 -39
  74. package/dist/{index-CI5O_yH6.js.map → index-BRHFlEjS.js.map} +1 -1
  75. package/dist/{index-D8Gc0IWi.js → index-CHboZsxD.js} +2 -2
  76. package/dist/{index-D8Gc0IWi.js.map → index-CHboZsxD.js.map} +1 -1
  77. package/dist/index-CwC9mpb3.cjs +2 -0
  78. package/dist/{index-B6aNVvMr.cjs.map → index-CwC9mpb3.cjs.map} +1 -1
  79. package/dist/{index-DCI-3m7f.cjs → index-DuArGzQE.cjs} +3 -3
  80. package/dist/{index-DCI-3m7f.cjs.map → index-DuArGzQE.cjs.map} +1 -1
  81. package/dist/{index-DcmDxIXA.js → index-hdS8RgRc.js} +5 -5
  82. package/dist/{index-DcmDxIXA.js.map → index-hdS8RgRc.js.map} +1 -1
  83. package/dist/index.cjs.js +1 -1
  84. package/dist/index.d.ts +1 -1
  85. package/dist/index.es.js +6 -6
  86. package/dist/{jsx-runtime-Dszzpdy0.cjs → jsx-runtime-B2pbW5Fp.cjs} +3 -3
  87. package/dist/{jsx-runtime-Dszzpdy0.cjs.map → jsx-runtime-B2pbW5Fp.cjs.map} +1 -1
  88. package/dist/{jsx-runtime-C7wFtzyj.js → jsx-runtime-lzYHhGH3.js} +15 -15
  89. package/dist/{jsx-runtime-C7wFtzyj.js.map → jsx-runtime-lzYHhGH3.js.map} +1 -1
  90. package/dist/{schemas-D3tO0rys.js → schemas-BMQZbhti.js} +2 -2
  91. package/dist/{schemas-D3tO0rys.js.map → schemas-BMQZbhti.js.map} +1 -1
  92. package/dist/{schemas-CpAWhNsP.cjs → schemas-DXX4rh8i.cjs} +2 -2
  93. package/dist/{schemas-CpAWhNsP.cjs.map → schemas-DXX4rh8i.cjs.map} +1 -1
  94. package/dist/server/App.d.ts +15 -0
  95. package/dist/server/entry.cjs.js +209 -0
  96. package/dist/server/entry.cjs.js.map +1 -0
  97. package/dist/server/entry.d.ts +14 -0
  98. package/dist/server/entry.es.js +21885 -0
  99. package/dist/server/entry.es.js.map +1 -0
  100. package/dist/server/index.cjs.js +6 -0
  101. package/dist/server/index.cjs.js.map +1 -0
  102. package/dist/server/index.d.ts +6 -0
  103. package/dist/{server.es.js → server/index.es.js} +19 -17
  104. package/dist/server/index.es.js.map +1 -0
  105. package/dist/settings/index.cjs.js +1 -1
  106. package/dist/settings/index.cjs.js.map +1 -1
  107. package/dist/settings/index.d.ts +1 -2
  108. package/dist/settings/index.es.js +5 -5
  109. package/dist/settings/index.es.js.map +1 -1
  110. package/dist/theme/components/index.cjs.js +1 -1
  111. package/dist/theme/components/index.es.js +1 -1
  112. package/dist/theme/index.cjs.js +1 -1
  113. package/dist/theme/index.cjs.js.map +1 -1
  114. package/dist/theme/index.d.ts +1 -2
  115. package/dist/theme/index.es.js +5 -5
  116. package/dist/theme/index.es.js.map +1 -1
  117. package/dist/{urls-RtSTEZfW.cjs → urls-CGZI0f1w.cjs} +2 -2
  118. package/dist/{urls-RtSTEZfW.cjs.map → urls-CGZI0f1w.cjs.map} +1 -1
  119. package/dist/{urls-5m9PgoEX.js → urls-DP4a8kxP.js} +2 -2
  120. package/dist/{urls-5m9PgoEX.js.map → urls-DP4a8kxP.js.map} +1 -1
  121. package/dist/utils/api.cjs.js +1 -1
  122. package/dist/utils/api.es.js +2 -2
  123. package/dist/utils/router.cjs.js +1 -1
  124. package/dist/utils/router.es.js +2 -2
  125. package/dist/utils/test.cjs.js +1 -250
  126. package/dist/utils/test.cjs.js.map +1 -1
  127. package/dist/utils/test.es.js +20 -25223
  128. package/dist/utils/test.es.js.map +1 -1
  129. package/dist/utils/theme.cjs.js +1 -1
  130. package/dist/utils/theme.es.js +2 -2
  131. package/package.json +16 -9
  132. package/dist/Countdown-CyJ-01oU.cjs +0 -2
  133. package/dist/Navigate-C_sgy8Xs.cjs +0 -2
  134. package/dist/api-DIgp_6Vr.cjs +0 -2
  135. package/dist/auth-B7Vdot4N.cjs +0 -2
  136. package/dist/components/App.d.ts +0 -18
  137. package/dist/general-BPbbmkeX.cjs +0 -2
  138. package/dist/index-B6aNVvMr.cjs +0 -2
  139. package/dist/server.cjs.js +0 -6
  140. package/dist/server.cjs.js.map +0 -1
  141. package/dist/server.es.js.map +0 -1
  142. /package/dist/{server.d.ts → server/server.d.ts} +0 -0
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("../../index-DCI-3m7f.cjs");exports.ApiAutocompleteField=e.ApiAutocompleteField;exports.AutocompleteField=e.AutocompleteField;exports.CheckboxField=e.CheckboxField;exports.CountryField=e.CountryField;exports.DatePickerField=e.DatePickerField;exports.EmailField=e.EmailField;exports.FirstNameField=e.FirstNameField;exports.Form=e.Form;exports.OtpField=e.OtpField;exports.PasswordField=e.PasswordField;exports.RepeatField=e.RepeatField;exports.SubmitButton=e.SubmitButton;exports.TextField=e.TextField;exports.UkCountyField=e.UkCountyField;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("../../index-DuArGzQE.cjs");exports.ApiAutocompleteField=e.ApiAutocompleteField;exports.AutocompleteField=e.AutocompleteField;exports.CheckboxField=e.CheckboxField;exports.CountryField=e.CountryField;exports.DatePickerField=e.DatePickerField;exports.EmailField=e.EmailField;exports.FirstNameField=e.FirstNameField;exports.Form=e.Form;exports.OtpField=e.OtpField;exports.PasswordField=e.PasswordField;exports.RepeatField=e.RepeatField;exports.SubmitButton=e.SubmitButton;exports.TextField=e.TextField;exports.UkCountyField=e.UkCountyField;
2
2
  //# sourceMappingURL=index.cjs.js.map
@@ -1,4 +1,4 @@
1
- import { A as i, a as s, C as l, b as t, D as F, E as d, F as o, c as m, O as r, P as p, R as u, S as c, T as A, U as C } from "../../index-CI5O_yH6.js";
1
+ import { A as i, a as s, C as l, b as t, D as F, E as d, F as o, c as m, O as r, P as p, R as u, S as c, T as A, U as C } from "../../index-BRHFlEjS.js";
2
2
  export {
3
3
  i as ApiAutocompleteField,
4
4
  s as AutocompleteField,
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const C=require("../index-DCI-3m7f.cjs"),S=require("../index-CBPn0wyX.cjs"),R=require("../Navigate-C_sgy8Xs.cjs"),z=require("../LinkButton-BOPjG7_2.cjs"),_=require("../index-B6aNVvMr.cjs"),s=require("../jsx-runtime-Dszzpdy0.cjs"),L=require("react-router"),u=require("@mui/material"),j=require("react"),O=require("react-redux"),M=require("../Countdown-CyJ-01oU.cjs"),F=require("../auth-B7Vdot4N.cjs"),A=require("../utils/general.cjs.js"),T=require("@mui/icons-material"),U=require("../Image-CgYjq-tA.cjs"),q=require("../api-CaeeoZaI.cjs"),$=require("../api-DIgp_6Vr.cjs"),b=({path:e,routes:n,header:t=s.jsxRuntimeExports.jsx(s.jsxRuntimeExports.Fragment,{}),footer:r=s.jsxRuntimeExports.jsx(s.jsxRuntimeExports.Fragment,{}),headerExcludePaths:o=[],footerExcludePaths:i=[]})=>s.jsxRuntimeExports.jsxs(s.jsxRuntimeExports.Fragment,{children:[!o.includes(e)&&t,s.jsxRuntimeExports.jsx(L.Routes,{children:n}),!i.includes(e)&&r]}),D=e=>{const{pathname:n}=F.useLocation();return s.jsxRuntimeExports.jsx(b,{path:n,...e})},G=({path:e,theme:n,store:t,maxIdleSeconds:r=3600,maxTotalSeconds:o=3600,...i})=>s.jsxRuntimeExports.jsxs(u.ThemeProvider,{theme:n,children:[s.jsxRuntimeExports.jsx(u.CssBaseline,{}),s.jsxRuntimeExports.jsx(O.Provider,{store:t,children:e!==void 0?s.jsxRuntimeExports.jsx(L.StaticRouter,{location:e,children:s.jsxRuntimeExports.jsx(b,{path:e,...i})}):s.jsxRuntimeExports.jsx(L.BrowserRouter,{children:s.jsxRuntimeExports.jsx(D,{...i})})})]}),N=({open:e=!1,onClick:n,...t})=>{const[r,o]=j.useState(e);return j.useEffect(()=>{o(e)},[e]),s.jsxRuntimeExports.jsx(u.Tooltip,{open:r,onMouseOver:()=>{r||o(!0)},onMouseLeave:()=>{o(!1)},onClick:A.wrap({after:()=>{o(!r)}},n),...t})},V=({content:e,children:n=s.jsxRuntimeExports.jsx(T.ContentCopy,{}),...t})=>s.jsxRuntimeExports.jsx(u.IconButton,{"data-testid":"copy-icon-button",onClick:()=>{navigator.clipboard.writeText(e)},...t,children:n}),Y=({children:e="Download",endIcon:n=s.jsxRuntimeExports.jsx(T.Download,{}),file:t,...r})=>{let o,i;if("mimeType"in t){const{text:x,mimeType:l,name:c,charset:m="utf-8"}=t;let{extension:d}=t;d||(d="."+{plain:"txt",csv:"csv"}[l]),i={download:c+d,href:`data:text/${l};charset=${m},${encodeURIComponent(x)}`}}else o=URL.createObjectURL(t),i={href:o};return j.useEffect(()=>()=>{o&&URL.revokeObjectURL(o)},[o]),s.jsxRuntimeExports.jsx(u.Button,{endIcon:n,...r,...i,children:e})},P=({containerProps:e,toolbarProps:n,elevation:t=4,children:r,...o})=>{const i=u.useScrollTrigger({disableHysteresis:!0,threshold:0});return j.cloneElement(s.jsxRuntimeExports.jsx(u.AppBar,{elevation:t,...o,children:s.jsxRuntimeExports.jsx(u.Container,{...e,children:s.jsxRuntimeExports.jsx(u.Toolbar,{...n,children:r})})}),{position:i?"fixed":"sticky"})},H=({children:e,inputProps:n,...t})=>s.jsxRuntimeExports.jsxs(u.Button,{component:"label",...t,children:[e,s.jsxRuntimeExports.jsx("input",{type:"file",hidden:!0,...n})]}),I=({styleType:e,listProps:n={},pl:t=4,children:r})=>{const{sx:o,...i}=n,x={display:"list-item"};return s.jsxRuntimeExports.jsx(u.List,{sx:{listStyleType:e,pl:t,".MuiListItem-root":x,".MuiListItemText-root":x,...o},...i,children:r})},J=({rows:e,containerProps:n={},globalItemProps:t})=>{const r=Number(n.columns??12),o=l=>Math.floor(r/l),i=(l,c,m)=>Math.floor(c/o(m))*e.length+l,x=(l,c)=>{const m=e[0].length%o(c);return m!==0&&l===e[0].length-1?(r-m*c)/2:0};return s.jsxRuntimeExports.jsx(u.Grid,{container:!0,...n,children:e.map((l,c)=>l.map(({element:m,itemProps:d={}},a)=>s.jsxRuntimeExports.jsx(u.Grid,{order:{xs:i(c,a,t.size.xs),sm:i(c,a,t.size.sm),md:i(c,a,t.size.md),lg:i(c,a,t.size.lg),xl:i(c,a,t.size.xl)},offset:{xs:x(a,t.size.xs),sm:x(a,t.size.sm),md:x(a,t.size.md),lg:x(a,t.size.lg),xl:x(a,t.size.xl)},...t,...d,children:m},`${c}-${a}`)))})},K=({elementId:e,options:n,...t})=>s.jsxRuntimeExports.jsx(u.Link,{...t,onClick:()=>{document.getElementById(e)?.scrollIntoView(n)}}),Q=({children:e,useLazyListQuery:n,preferCacheValue:t,filters:r,page:o=0,rowsPerPage:i=50,rowsPerPageOptions:x=[50,100,150],stackProps:l,onRowsPerPageChange:c,onPageChange:m,...d})=>{const[a,k]=n(),[{limit:E,page:v,offset:f},y]=$.usePagination({page:o,limit:i});j.useEffect(()=>{a({limit:E,offset:f,...r},t)},[a,E,f,...Object.values(r||{}),t]);const{count:B,max_limit:h}=k.data||{};return h&&(x=x.filter(p=>p<=h)),s.jsxRuntimeExports.jsxs(u.Stack,{...l,children:[q.handleResultState(k,({data:p})=>e(p,{limit:E,page:v,offset:f,count:B,maxLimit:h})),s.jsxRuntimeExports.jsx(u.TablePagination,{component:"div",count:B??0,rowsPerPage:E,onRowsPerPageChange:p=>{y({limit:parseInt(p.target.value),page:0}),c&&c(p)},page:v,onPageChange:(p,g)=>{y(({limit:w})=>({limit:w,page:g})),m&&m(p,g)},rowsPerPageOptions:x.sort((p,g)=>p-g),...d})]})},W=({src:e,style:n={},...t})=>s.jsxRuntimeExports.jsx(u.Box,{component:"iframe",width:"100%",src:e,title:"YouTube video player",allow:"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen",style:{border:"0px",aspectRatio:"16 / 9",...n},...t});exports.forms=C.index;exports.pages=S.index;exports.Link=R.Link;exports.LinkIconButton=R.LinkIconButton;exports.LinkListItem=R.LinkListItem;exports.LinkTab=R.LinkTab;exports.Navigate=R.Navigate;exports.LinkButton=z.LinkButton;exports.tables=_.index;exports.Countdown=M.Countdown;exports.Image=U.Image;exports.SyncError=q.SyncError;exports.App=G;exports.ClickableTooltip=N;exports.CopyIconButton=V;exports.DownloadFileButton=Y;exports.ElevatedAppBar=P;exports.InputFileButton=H;exports.ItemizedList=I;exports.OrderedGrid=J;exports.ScrollIntoViewLink=K;exports.TablePagination=Q;exports.YouTubeVideo=W;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const q=require("../index-DuArGzQE.cjs"),C=require("../index-5C9hpxRF.cjs"),g=require("../Navigate-CrMwdIBB.cjs"),w=require("../LinkButton-Kw2brLTK.cjs"),z=require("../index-CwC9mpb3.cjs"),o=require("../jsx-runtime-B2pbW5Fp.cjs"),c=require("@mui/material"),j=require("react"),S=require("../utils/general.cjs.js"),B=require("@mui/icons-material"),_=require("../Countdown-BtUbr1J_.cjs"),O=require("../Image-CgRVUblT.cjs"),T=require("../api-CAH3GT1O.cjs"),M=require("../api-9cnyvZj7.cjs"),$=({open:e=!1,onClick:n,...t})=>{const[s,i]=j.useState(e);return j.useEffect(()=>{i(e)},[e]),o.jsxRuntimeExports.jsx(c.Tooltip,{open:s,onMouseOver:()=>{s||i(!0)},onMouseLeave:()=>{i(!1)},onClick:S.wrap({after:()=>{i(!s)}},n),...t})},U=({content:e,children:n=o.jsxRuntimeExports.jsx(B.ContentCopy,{}),...t})=>o.jsxRuntimeExports.jsx(c.IconButton,{"data-testid":"copy-icon-button",onClick:()=>{navigator.clipboard.writeText(e)},...t,children:n}),D=({children:e="Download",endIcon:n=o.jsxRuntimeExports.jsx(B.Download,{}),file:t,...s})=>{let i,u;if("mimeType"in t){const{text:a,mimeType:x,name:r,charset:p="utf-8"}=t;let{extension:d}=t;d||(d="."+{plain:"txt",csv:"csv"}[x]),u={download:r+d,href:`data:text/${x};charset=${p},${encodeURIComponent(a)}`}}else i=URL.createObjectURL(t),u={href:i};return j.useEffect(()=>()=>{i&&URL.revokeObjectURL(i)},[i]),o.jsxRuntimeExports.jsx(c.Button,{endIcon:n,...s,...u,children:e})},F=({containerProps:e,toolbarProps:n,elevation:t=4,children:s,...i})=>{const u=c.useScrollTrigger({disableHysteresis:!0,threshold:0});return j.cloneElement(o.jsxRuntimeExports.jsx(c.AppBar,{elevation:t,...i,children:o.jsxRuntimeExports.jsx(c.Container,{...e,children:o.jsxRuntimeExports.jsx(c.Toolbar,{...n,children:s})})}),{position:u?"fixed":"sticky"})},G=({children:e,inputProps:n,...t})=>o.jsxRuntimeExports.jsxs(c.Button,{component:"label",...t,children:[e,o.jsxRuntimeExports.jsx("input",{type:"file",hidden:!0,...n})]}),N=({styleType:e,listProps:n={},pl:t=4,children:s})=>{const{sx:i,...u}=n,a={display:"list-item"};return o.jsxRuntimeExports.jsx(c.List,{sx:{listStyleType:e,pl:t,".MuiListItem-root":a,".MuiListItemText-root":a,...i},...u,children:s})},V=({rows:e,containerProps:n={},globalItemProps:t})=>{const s=Number(n.columns??12),i=x=>Math.floor(s/x),u=(x,r,p)=>Math.floor(r/i(p))*e.length+x,a=(x,r)=>{const p=e[0].length%i(r);return p!==0&&x===e[0].length-1?(s-p*r)/2:0};return o.jsxRuntimeExports.jsx(c.Grid,{container:!0,...n,children:e.map((x,r)=>x.map(({element:p,itemProps:d={}},l)=>o.jsxRuntimeExports.jsx(c.Grid,{order:{xs:u(r,l,t.size.xs),sm:u(r,l,t.size.sm),md:u(r,l,t.size.md),lg:u(r,l,t.size.lg),xl:u(r,l,t.size.xl)},offset:{xs:a(l,t.size.xs),sm:a(l,t.size.sm),md:a(l,t.size.md),lg:a(l,t.size.lg),xl:a(l,t.size.xl)},...t,...d,children:p},`${r}-${l}`)))})},A=({elementId:e,options:n,...t})=>o.jsxRuntimeExports.jsx(c.Link,{...t,onClick:()=>{document.getElementById(e)?.scrollIntoView(n)}}),Y=({children:e,useLazyListQuery:n,preferCacheValue:t,filters:s,page:i=0,rowsPerPage:u=50,rowsPerPageOptions:a=[50,100,150],stackProps:x,onRowsPerPageChange:r,onPageChange:p,...d})=>{const[l,h]=n(),[{limit:f,page:k,offset:R},y]=M.usePagination({page:i,limit:u});j.useEffect(()=>{l({limit:f,offset:R,...s},t)},[l,f,R,...Object.values(s||{}),t]);const{count:v,max_limit:E}=h.data||{};return E&&(a=a.filter(m=>m<=E)),o.jsxRuntimeExports.jsxs(c.Stack,{...x,children:[T.handleResultState(h,({data:m})=>e(m,{limit:f,page:k,offset:R,count:v,maxLimit:E})),o.jsxRuntimeExports.jsx(c.TablePagination,{component:"div",count:v??0,rowsPerPage:f,onRowsPerPageChange:m=>{y({limit:parseInt(m.target.value),page:0}),r&&r(m)},page:k,onPageChange:(m,L)=>{y(({limit:b})=>({limit:b,page:L})),p&&p(m,L)},rowsPerPageOptions:a.sort((m,L)=>m-L),...d})]})},H=({src:e,style:n={},...t})=>o.jsxRuntimeExports.jsx(c.Box,{component:"iframe",width:"100%",src:e,title:"YouTube video player",allow:"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen",style:{border:"0px",aspectRatio:"16 / 9",...n},...t});exports.forms=q.index;exports.pages=C.index;exports.Link=g.Link;exports.LinkIconButton=g.LinkIconButton;exports.LinkListItem=g.LinkListItem;exports.LinkTab=g.LinkTab;exports.Navigate=g.Navigate;exports.LinkButton=w.LinkButton;exports.tables=z.index;exports.Countdown=_.Countdown;exports.Image=O.Image;exports.SyncError=T.SyncError;exports.ClickableTooltip=$;exports.CopyIconButton=U;exports.DownloadFileButton=D;exports.ElevatedAppBar=F;exports.InputFileButton=G;exports.ItemizedList=N;exports.OrderedGrid=V;exports.ScrollIntoViewLink=A;exports.TablePagination=Y;exports.YouTubeVideo=H;
2
2
  //# sourceMappingURL=index.cjs.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs.js","sources":["../../src/components/App.tsx","../../src/components/ClickableTooltip.tsx","../../src/components/CopyIconButton.tsx","../../src/components/DownloadFileButton.tsx","../../src/components/ElevatedAppBar.tsx","../../src/components/InputFileButton.tsx","../../src/components/ItemizedList.tsx","../../src/components/OrderedGrid.tsx","../../src/components/ScrollIntoViewLink.tsx","../../src/components/TablePagination.tsx","../../src/components/YouTubeVideo.tsx"],"sourcesContent":["import { BrowserRouter, Routes as RouterRoutes } from \"react-router\"\nimport { CssBaseline, ThemeProvider } from \"@mui/material\"\nimport { type FC, type JSX, type ReactNode } from \"react\"\nimport { Provider, type ProviderProps } from \"react-redux\"\nimport { type Action } from \"redux\"\nimport { StaticRouter } from \"react-router\"\nimport { type ThemeProviderProps } from \"@mui/material\"\n\nimport \"./App.css\"\nimport { useLocation } from \"../hooks\"\n// import { InactiveDialog, ScreenTimeDialog } from \"../features\"\n// import { useCountdown, useEventListener } from \"../hooks\"\n// import \"../scripts\"\n// import {\n// configureFreshworksWidget,\n// toggleOneTrustInfoDisplay,\n// } from \"../utils/window\"\n\nexport interface AppProps<A extends Action = Action, S = unknown> {\n path?: string\n theme: ThemeProviderProps[\"theme\"]\n store: ProviderProps<A, S>[\"store\"]\n routes: ReactNode\n header?: ReactNode\n footer?: ReactNode\n headerExcludePaths?: string[]\n footerExcludePaths?: string[]\n maxIdleSeconds?: number\n maxTotalSeconds?: number\n}\n\ntype BaseRoutesProps = Pick<\n AppProps,\n \"routes\" | \"header\" | \"footer\" | \"headerExcludePaths\" | \"footerExcludePaths\"\n>\n\nconst Routes: FC<BaseRoutesProps & { path: string }> = ({\n path,\n routes,\n header = <></>, // TODO: \"header = <Header />\"\n footer = <></>, // TODO: \"footer = <Footer />\"\n headerExcludePaths = [],\n footerExcludePaths = [],\n}) => (\n <>\n {!headerExcludePaths.includes(path) && header}\n <RouterRoutes>{routes}</RouterRoutes>\n {!footerExcludePaths.includes(path) && footer}\n </>\n)\n\nconst BrowserRoutes: FC<BaseRoutesProps> = props => {\n const { pathname } = useLocation()\n\n return <Routes path={pathname} {...props} />\n}\n\nconst App = <A extends Action = Action, S = unknown>({\n path,\n theme,\n store,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n maxIdleSeconds = 60 * 60,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n maxTotalSeconds = 60 * 60,\n ...routesProps\n}: AppProps<A, S>): JSX.Element => {\n // TODO: cannot use document during SSR\n // const root = document.getElementById(\"root\") as HTMLElement\n\n // const [idleSeconds, setIdleSeconds] = useCountdown(maxIdleSeconds)\n // const [totalSeconds, setTotalSeconds] = useCountdown(maxTotalSeconds)\n // const resetIdleSeconds = useCallback(() => {\n // setIdleSeconds(maxIdleSeconds)\n // }, [setIdleSeconds, maxIdleSeconds])\n\n // const isIdle = idleSeconds === 0\n // const tooMuchScreenTime = totalSeconds === 0\n\n // useEventListener(root, \"mousemove\", resetIdleSeconds)\n // useEventListener(root, \"keypress\", resetIdleSeconds)\n\n // React.useEffect(() => {\n // configureFreshworksWidget(\"hide\")\n // }, [])\n\n // if (import.meta.env.PROD) {\n // toggleOneTrustInfoDisplay()\n // }\n\n return (\n <ThemeProvider theme={theme}>\n <CssBaseline />\n <Provider store={store}>\n {/* <InactiveDialog open={isIdle} onClose={resetIdleSeconds} />\n <ScreenTimeDialog\n open={!isIdle && tooMuchScreenTime}\n onClose={() => {\n setTotalSeconds(maxTotalSeconds)\n }}\n /> */}\n {\n // https://github.com/remix-run/react-router/tree/main/examples/ssr\n path !== undefined ? (\n <StaticRouter location={path}>\n <Routes path={path} {...routesProps} />\n </StaticRouter>\n ) : (\n <BrowserRouter>\n <BrowserRoutes {...routesProps} />\n </BrowserRouter>\n )\n }\n </Provider>\n </ThemeProvider>\n )\n}\n\nexport default App\n\n// TODO: figure out what to do with this\n// function useOneTrustScripts(): void {\n// const oneTrustEventTypes = [\n// useExternalScript({\n// props: {\n// src: \"https://cdn-ukwest.onetrust.com/consent/5da42396-cb12-4493-8d04-5179033cfbad/OtAutoBlock.js\",\n// type: \"text/javascript\",\n// },\n// eventTypes: [\"load\", \"error\"],\n// }),\n// useExternalScript({\n// props: {\n// src: \"https://cdn-ukwest.onetrust.com/scripttemplates/otSDKStub.js\",\n// type: \"text/javascript\",\n// charset: \"UTF-8\",\n// },\n// attrs: {\n// \"data-domain-script\": \"5da42396-cb12-4493-8d04-5179033cfbad\",\n// },\n// eventTypes: [\"load\", \"error\"],\n// }),\n// useExternalScript({\n// props: {\n// src: \"https://cdn-ukwest.onetrust.com/scripttemplates/202302.1.0/otBannerSdk.js\",\n// async: true,\n// type: \"text/javascript\",\n// },\n// eventTypes: [\"load\", \"error\"],\n// }),\n// ]\n// if (oneTrustEventTypes.some(t => t === \"error\")) {\n// alert(\"OneTrust failed to load!\")\n// }\n// }\n","import { Tooltip, type TooltipProps } from \"@mui/material\"\nimport React from \"react\"\n\nimport { wrap } from \"../utils/general\"\n\nexport interface ClickableTooltipProps extends TooltipProps {}\n\nconst ClickableTooltip: React.FC<ClickableTooltipProps> = ({\n open = false,\n onClick,\n ...otherTooltipProps\n}) => {\n const [_open, _setOpen] = React.useState(open)\n\n React.useEffect(() => {\n _setOpen(open)\n }, [open])\n\n return (\n <Tooltip\n open={_open}\n onMouseOver={() => {\n if (!_open) {\n _setOpen(true)\n }\n }}\n onMouseLeave={() => {\n _setOpen(false)\n }}\n onClick={wrap(\n {\n after: () => {\n _setOpen(!_open)\n },\n },\n onClick,\n )}\n {...otherTooltipProps}\n />\n )\n}\n\nexport default ClickableTooltip\n","import { IconButton, type IconButtonProps } from \"@mui/material\"\nimport { ContentCopy as ContentCopyIcon } from \"@mui/icons-material\"\nimport type { FC } from \"react\"\n\nexport interface CopyIconButtonProps extends Omit<IconButtonProps, \"onClick\"> {\n content: string\n}\n\nconst CopyIconButton: FC<CopyIconButtonProps> = ({\n content,\n children = <ContentCopyIcon />,\n ...otherIconButtonProps\n}) => {\n return (\n <IconButton\n data-testid=\"copy-icon-button\"\n onClick={() => {\n void navigator.clipboard.writeText(content)\n }}\n {...otherIconButtonProps}\n >\n {children}\n </IconButton>\n )\n}\n\nexport default CopyIconButton\n","import { Button, type ButtonProps } from \"@mui/material\"\nimport { type FC, useEffect } from \"react\"\nimport { Download as DownloadIcon } from \"@mui/icons-material\"\n\nexport type DownloadFileButtonProps = ButtonProps & {\n file:\n | Blob\n | MediaSource\n | {\n text: string\n mimeType: \"plain\" | \"csv\"\n name: string\n charset?: string\n extension?: string\n }\n}\n\nconst DownloadFileButton: FC<DownloadFileButtonProps> = ({\n children = \"Download\",\n endIcon = <DownloadIcon />,\n file,\n ...otherButtonProps\n}) => {\n let url: undefined | string = undefined\n let anchorProps: undefined | { download?: string; href: string } = undefined\n if (\"mimeType\" in file) {\n const { text, mimeType, name, charset = \"utf-8\" } = file\n let { extension } = file\n\n if (!extension) extension = \".\" + { plain: \"txt\", csv: \"csv\" }[mimeType]\n\n anchorProps = {\n download: name + extension,\n href: `data:text/${mimeType};charset=${charset},${encodeURIComponent(text)}`,\n }\n } else {\n url = URL.createObjectURL(file)\n\n anchorProps = { href: url }\n }\n\n useEffect(() => {\n return () => {\n if (url) URL.revokeObjectURL(url)\n }\n }, [url])\n\n return (\n <Button endIcon={endIcon} {...otherButtonProps} {...anchorProps}>\n {children}\n </Button>\n )\n}\n\nexport default DownloadFileButton\n","import {\n AppBar,\n type AppBarProps,\n Container,\n type ContainerProps,\n Toolbar,\n type ToolbarProps,\n useScrollTrigger,\n} from \"@mui/material\"\nimport { type FC, cloneElement } from \"react\"\n\nexport interface ElevatedAppBarProps extends Omit<AppBarProps, \"position\"> {\n containerProps: ContainerProps\n toolbarProps?: ToolbarProps\n}\n\nconst ElevatedAppBar: FC<ElevatedAppBarProps> = ({\n containerProps,\n toolbarProps,\n elevation = 4,\n children,\n ...otherProps\n}) => {\n const trigger = useScrollTrigger({\n disableHysteresis: true,\n threshold: 0,\n })\n\n return cloneElement(\n <AppBar elevation={elevation} {...otherProps}>\n <Container {...containerProps}>\n <Toolbar {...toolbarProps}>{children}</Toolbar>\n </Container>\n </AppBar>,\n {\n position: trigger ? \"fixed\" : \"sticky\",\n },\n )\n}\n\nexport default ElevatedAppBar\n","import { Button, type ButtonProps } from \"@mui/material\"\nimport {\n type DetailedHTMLProps,\n type FC,\n type InputHTMLAttributes,\n} from \"react\"\n\nexport interface InputFileButtonProps\n extends Omit<ButtonProps<\"label\">, \"component\"> {\n inputProps?: Omit<\n DetailedHTMLProps<InputHTMLAttributes<HTMLInputElement>, HTMLInputElement>,\n \"type\" | \"hidden\"\n >\n}\n\nconst InputFileButton: FC<InputFileButtonProps> = ({\n children,\n inputProps,\n ...otherButtonProps\n}) => (\n <Button component=\"label\" {...otherButtonProps}>\n {children}\n <input type=\"file\" hidden {...inputProps} />\n </Button>\n)\n\nexport default InputFileButton\n","import { type FC, type ReactElement } from \"react\"\nimport {\n List,\n type ListItem,\n type ListItemText,\n type ListProps,\n} from \"@mui/material\"\n\ntype ListItemElement =\n | ReactElement<typeof ListItem | typeof ListItemText>\n | string\n\nexport interface ItemizedListProps {\n styleType:\n | \"unset\"\n | \"initial\"\n | \"inherit\"\n | \"upper-roman\"\n | \"upper-latin\"\n | \"upper-alpha\"\n | \"square\"\n | \"none\"\n | \"lower-roman\"\n | \"lower-latin\"\n | \"lower-greek\"\n | \"lower-alpha\"\n | \"georgian\"\n | \"disc\"\n | \"decimal-leading-zero\"\n | \"decimal\"\n | \"armenian\"\n | \"circle\"\n listProps?: ListProps\n pl?: number\n children: ListItemElement | ListItemElement[]\n}\n\nconst ItemizedList: FC<ItemizedListProps> = ({\n styleType,\n listProps = {},\n pl = 4,\n children,\n}) => {\n const { sx, ...otherProps } = listProps\n const listItemProps = { display: \"list-item\" }\n\n return (\n <List\n sx={{\n listStyleType: styleType,\n pl,\n \".MuiListItem-root\": listItemProps,\n \".MuiListItemText-root\": listItemProps,\n ...sx,\n }}\n {...otherProps}\n >\n {children}\n </List>\n )\n}\n\nexport default ItemizedList\n","import { type FC, type ReactElement } from \"react\"\nimport { Grid, type GridProps } from \"@mui/material\"\n\ninterface ItemProps\n extends Omit<GridProps, \"key\" | \"order\" | \"size\" | \"offset\"> {}\n\ninterface GlobalItemProps extends ItemProps {\n size: {\n xs: number\n sm: number\n md: number\n lg: number\n xl: number\n }\n}\n\nexport interface OrderedGridProps {\n rows: Array<\n Array<{\n element: ReactElement\n itemProps?: ItemProps\n }>\n >\n containerProps?: Omit<GridProps, \"container\">\n globalItemProps: GlobalItemProps\n}\n\nconst OrderedGrid: FC<OrderedGridProps> = ({\n rows,\n containerProps = {},\n globalItemProps,\n}) => {\n const columns = Number(containerProps.columns ?? 12)\n\n const getItemsPerRow = (size: number): number => Math.floor(columns / size)\n\n const getOrder = (\n rowIndex: number,\n itemIndex: number,\n size: number,\n ): number =>\n Math.floor(itemIndex / getItemsPerRow(size)) * rows.length + rowIndex\n\n const getOffset = (itemIndex: number, size: number): number => {\n const itemsOnLastRow = rows[0].length % getItemsPerRow(size)\n return itemsOnLastRow !== 0 && itemIndex === rows[0].length - 1\n ? (columns - itemsOnLastRow * size) / 2\n : 0\n }\n\n return (\n <Grid container {...containerProps}>\n {rows.map((row, rowIndex) =>\n row.map(({ element, itemProps = {} }, itemIndex) => (\n <Grid\n key={`${rowIndex}-${itemIndex}`}\n order={{\n xs: getOrder(rowIndex, itemIndex, globalItemProps.size.xs),\n sm: getOrder(rowIndex, itemIndex, globalItemProps.size.sm),\n md: getOrder(rowIndex, itemIndex, globalItemProps.size.md),\n lg: getOrder(rowIndex, itemIndex, globalItemProps.size.lg),\n xl: getOrder(rowIndex, itemIndex, globalItemProps.size.xl),\n }}\n offset={{\n xs: getOffset(itemIndex, globalItemProps.size.xs),\n sm: getOffset(itemIndex, globalItemProps.size.sm),\n md: getOffset(itemIndex, globalItemProps.size.md),\n lg: getOffset(itemIndex, globalItemProps.size.lg),\n xl: getOffset(itemIndex, globalItemProps.size.xl),\n }}\n {...globalItemProps}\n {...itemProps}\n >\n {element}\n </Grid>\n )),\n )}\n </Grid>\n )\n}\n\nexport default OrderedGrid\n","import { Link, type LinkProps } from \"@mui/material\"\nimport { type FC } from \"react\"\nexport interface ScrollIntoViewLinkProps extends Omit<LinkProps, \"onClick\"> {\n elementId: string\n options?: ScrollIntoViewOptions\n}\n\nconst ScrollIntoViewLink: FC<ScrollIntoViewLinkProps> = ({\n elementId,\n options,\n ...linkProps\n}) => (\n <Link\n {...linkProps}\n onClick={() => {\n const element = document.getElementById(elementId)\n element?.scrollIntoView(options)\n }}\n />\n)\n\nexport default ScrollIntoViewLink\n","import {\n type ElementType,\n type JSX,\n type JSXElementConstructor,\n type ReactNode,\n useEffect,\n} from \"react\"\nimport {\n TablePagination as MuiTablePagination,\n type TablePaginationProps as MuiTablePaginationProps,\n Stack,\n type StackProps,\n type TablePaginationBaseProps,\n} from \"@mui/material\"\nimport type { TypedUseLazyQuery } from \"@reduxjs/toolkit/query/react\"\n\nimport { type ListArg, type ListResult, handleResultState } from \"../utils/api\"\nimport { type Pagination, usePagination } from \"../hooks/api\"\n\nexport type TablePaginationProps<\n QueryArg extends ListArg,\n ResultType extends ListResult<any>,\n RootComponent extends\n ElementType = JSXElementConstructor<TablePaginationBaseProps>,\n AdditionalProps = {},\n> = Omit<\n MuiTablePaginationProps<RootComponent, AdditionalProps>,\n | \"component\"\n | \"count\"\n | \"rowsPerPage\"\n | \"onRowsPerPageChange\"\n | \"rowsPerPageOptions\"\n | \"page\"\n | \"onPageChange\"\n> &\n Partial<\n Pick<\n MuiTablePaginationProps<RootComponent, AdditionalProps>,\n \"onRowsPerPageChange\" | \"onPageChange\"\n >\n > & {\n children: (\n data: ResultType[\"data\"],\n pagination: Pagination & { count?: number; maxLimit?: number },\n ) => ReactNode\n useLazyListQuery: TypedUseLazyQuery<ResultType, QueryArg, any>\n preferCacheValue?: boolean\n filters?: Omit<QueryArg, \"limit\" | \"offset\">\n rowsPerPageOptions?: number[]\n stackProps?: StackProps\n page?: number\n rowsPerPage?: number\n }\n\nconst TablePagination = <\n QueryArg extends ListArg,\n ResultType extends ListResult<any>,\n RootComponent extends\n ElementType = JSXElementConstructor<TablePaginationBaseProps>,\n AdditionalProps = {},\n>({\n children,\n useLazyListQuery,\n preferCacheValue,\n filters,\n page: initialPage = 0,\n rowsPerPage: initialLimit = 50,\n rowsPerPageOptions = [50, 100, 150],\n stackProps,\n onRowsPerPageChange,\n onPageChange,\n ...tablePaginationProps\n}: TablePaginationProps<\n QueryArg,\n ResultType,\n RootComponent,\n AdditionalProps\n>): JSX.Element => {\n const [trigger, result] = useLazyListQuery()\n const [{ limit, page, offset }, setPagination] = usePagination({\n page: initialPage,\n limit: initialLimit,\n })\n\n useEffect(\n () => {\n void trigger({ limit, offset, ...filters } as QueryArg, preferCacheValue)\n },\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [\n trigger,\n limit,\n offset,\n // eslint-disable-next-line react-hooks/exhaustive-deps,@typescript-eslint/no-unsafe-assignment\n ...Object.values(filters || {}),\n preferCacheValue,\n ],\n )\n\n const { count, max_limit } = result.data || {}\n\n if (max_limit) {\n rowsPerPageOptions = rowsPerPageOptions.filter(\n option => option <= max_limit,\n )\n }\n\n return (\n <Stack {...stackProps}>\n {handleResultState(result, ({ data }) =>\n children(data, {\n limit,\n page,\n offset,\n count,\n maxLimit: max_limit,\n }),\n )}\n <MuiTablePagination\n component=\"div\"\n count={count ?? 0}\n rowsPerPage={limit}\n onRowsPerPageChange={event => {\n setPagination({ limit: parseInt(event.target.value), page: 0 })\n // eslint-disable-next-line @typescript-eslint/no-unsafe-call\n if (onRowsPerPageChange) onRowsPerPageChange(event)\n }}\n page={page}\n onPageChange={(event, page) => {\n setPagination(({ limit }) => ({ limit, page }))\n // eslint-disable-next-line @typescript-eslint/no-unsafe-call\n if (onPageChange) onPageChange(event, page)\n }}\n // ascending order\n rowsPerPageOptions={rowsPerPageOptions.sort((a, b) => a - b)}\n {...tablePaginationProps}\n />\n </Stack>\n )\n}\n\nexport default TablePagination\n","import { Box, type BoxProps } from \"@mui/material\"\nimport { type FC } from \"react\"\n\nexport interface YouTubeVideoProps extends Omit<BoxProps, \"component\"> {\n src: string\n}\n\nconst YouTubeVideo: FC<YouTubeVideoProps> = ({\n src,\n style = {},\n ...otherProps\n}) => {\n return (\n <Box\n component=\"iframe\"\n width=\"100%\"\n src={src}\n title=\"YouTube video player\"\n allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen\"\n style={{ border: \"0px\", aspectRatio: \"16 / 9\", ...style }}\n {...otherProps}\n />\n )\n}\n\nexport default YouTubeVideo\n"],"names":["Routes","path","routes","header","jsx","Fragment","footer","headerExcludePaths","footerExcludePaths","jsxs","RouterRoutes","BrowserRoutes","props","pathname","useLocation","App","theme","store","maxIdleSeconds","maxTotalSeconds","routesProps","ThemeProvider","CssBaseline","Provider","StaticRouter","BrowserRouter","ClickableTooltip","open","onClick","otherTooltipProps","_open","_setOpen","React","Tooltip","wrap","CopyIconButton","content","children","ContentCopyIcon","otherIconButtonProps","IconButton","DownloadFileButton","endIcon","DownloadIcon","file","otherButtonProps","url","anchorProps","text","mimeType","name","charset","extension","useEffect","Button","ElevatedAppBar","containerProps","toolbarProps","elevation","otherProps","trigger","useScrollTrigger","cloneElement","AppBar","Container","Toolbar","InputFileButton","inputProps","ItemizedList","styleType","listProps","pl","sx","listItemProps","List","OrderedGrid","rows","globalItemProps","columns","getItemsPerRow","size","getOrder","rowIndex","itemIndex","getOffset","itemsOnLastRow","Grid","row","element","itemProps","ScrollIntoViewLink","elementId","options","linkProps","Link","TablePagination","useLazyListQuery","preferCacheValue","filters","initialPage","initialLimit","rowsPerPageOptions","stackProps","onRowsPerPageChange","onPageChange","tablePaginationProps","result","limit","page","offset","setPagination","usePagination","count","max_limit","option","Stack","handleResultState","data","MuiTablePagination","event","a","b","YouTubeVideo","src","style","Box"],"mappings":"2oBAoCMA,EAAiD,CAAC,CACtD,KAAAC,EACA,OAAAC,EACA,OAAAC,EAASC,EAAAA,kBAAAA,IAAAC,EAAAA,kBAAAA,SAAA,EAAE,EACX,OAAAC,EAASF,EAAAA,kBAAAA,IAAAC,EAAAA,kBAAAA,SAAA,EAAE,EACX,mBAAAE,EAAqB,CAAA,EACrB,mBAAAC,EAAqB,CAAA,CACvB,IACEC,EAAAA,kBAAAA,KAAAJ,6BAAA,CACG,SAAA,CAAA,CAACE,EAAmB,SAASN,CAAI,GAAKE,EACvCC,EAAAA,kBAAAA,IAACM,EAAAA,QAAc,SAAAR,CAAA,CAAO,EACrB,CAACM,EAAmB,SAASP,CAAI,GAAKK,CAAA,EACzC,EAGIK,EAAqCC,GAAS,CAClD,KAAM,CAAE,SAAAC,CAAA,EAAaC,cAAA,EAErB,OAAOV,EAAAA,kBAAAA,IAACJ,EAAA,CAAO,KAAMa,EAAW,GAAGD,EAAO,CAC5C,EAEMG,EAAM,CAAyC,CACnD,KAAAd,EACA,MAAAe,EACA,MAAAC,EAEA,eAAAC,EAAiB,KAEjB,gBAAAC,EAAkB,KAClB,GAAGC,CACL,IAyBIX,yBAACY,EAAAA,eAAc,MAAAL,EACb,SAAA,CAAAZ,EAAAA,kBAAAA,IAACkB,EAAAA,YAAA,EAAY,EACblB,EAAAA,kBAAAA,IAACmB,EAAAA,SAAA,CAAS,MAAAN,EAUN,aAAS,OACPb,EAAAA,kBAAAA,IAACoB,EAAAA,cAAa,SAAUvB,EACtB,iCAACD,EAAA,CAAO,KAAAC,EAAa,GAAGmB,EAAa,CAAA,CACvC,EAEAhB,EAAAA,kBAAAA,IAACqB,EAAAA,cAAA,CACC,iCAACd,EAAA,CAAe,GAAGS,EAAa,CAAA,CAClC,CAAA,CAGN,CAAA,EACF,EC3GEM,EAAoD,CAAC,CACzD,KAAAC,EAAO,GACP,QAAAC,EACA,GAAGC,CACL,IAAM,CACJ,KAAM,CAACC,EAAOC,CAAQ,EAAIC,EAAM,SAASL,CAAI,EAE7C,OAAAK,EAAM,UAAU,IAAM,CACpBD,EAASJ,CAAI,CACf,EAAG,CAACA,CAAI,CAAC,EAGPvB,EAAAA,kBAAAA,IAAC6B,EAAAA,QAAA,CACC,KAAMH,EACN,YAAa,IAAM,CACZA,GACHC,EAAS,EAAI,CAEjB,EACA,aAAc,IAAM,CAClBA,EAAS,EAAK,CAChB,EACA,QAASG,EAAAA,KACP,CACE,MAAO,IAAM,CACXH,EAAS,CAACD,CAAK,CACjB,CAAA,EAEFF,CAAA,EAED,GAAGC,CAAA,CAAA,CAGV,EChCMM,EAA0C,CAAC,CAC/C,QAAAC,EACA,SAAAC,0BAAYC,EAAAA,YAAA,EAAgB,EAC5B,GAAGC,CACL,IAEInC,EAAAA,kBAAAA,IAACoC,EAAAA,WAAA,CACC,cAAY,mBACZ,QAAS,IAAM,CACR,UAAU,UAAU,UAAUJ,CAAO,CAC5C,EACC,GAAGG,EAEH,SAAAF,CAAA,CAAA,ECJDI,EAAkD,CAAC,CACvD,SAAAJ,EAAW,WACX,QAAAK,0BAAWC,EAAAA,SAAA,EAAa,EACxB,KAAAC,EACA,GAAGC,CACL,IAAM,CACJ,IAAIC,EACAC,EACJ,GAAI,aAAcH,EAAM,CACtB,KAAM,CAAE,KAAAI,EAAM,SAAAC,EAAU,KAAAC,EAAM,QAAAC,EAAU,SAAYP,EACpD,GAAI,CAAE,UAAAQ,GAAcR,EAEfQ,IAAWA,EAAY,IAAM,CAAE,MAAO,MAAO,IAAK,KAAA,EAAQH,CAAQ,GAEvEF,EAAc,CACZ,SAAUG,EAAOE,EACjB,KAAM,aAAaH,CAAQ,YAAYE,CAAO,IAAI,mBAAmBH,CAAI,CAAC,EAAA,CAE9E,MACEF,EAAM,IAAI,gBAAgBF,CAAI,EAE9BG,EAAc,CAAE,KAAMD,CAAA,EAGxBO,OAAAA,EAAAA,UAAU,IACD,IAAM,CACPP,GAAK,IAAI,gBAAgBA,CAAG,CAClC,EACC,CAACA,CAAG,CAAC,0BAGLQ,EAAAA,OAAA,CAAO,QAAAZ,EAAmB,GAAGG,EAAmB,GAAGE,EACjD,SAAAV,EACH,CAEJ,ECpCMkB,EAA0C,CAAC,CAC/C,eAAAC,EACA,aAAAC,EACA,UAAAC,EAAY,EACZ,SAAArB,EACA,GAAGsB,CACL,IAAM,CACJ,MAAMC,EAAUC,EAAAA,iBAAiB,CAC/B,kBAAmB,GACnB,UAAW,CAAA,CACZ,EAED,OAAOC,EAAAA,aACL1D,wBAAC2D,EAAAA,OAAA,CAAO,UAAAL,EAAuB,GAAGC,EAChC,SAAAvD,EAAAA,kBAAAA,IAAC4D,EAAAA,UAAA,CAAW,GAAGR,EACb,iCAACS,EAAAA,QAAA,CAAS,GAAGR,EAAe,SAAApB,CAAA,CAAS,EACvC,EACF,EACA,CACE,SAAUuB,EAAU,QAAU,QAAA,CAChC,CAEJ,ECvBMM,EAA4C,CAAC,CACjD,SAAA7B,EACA,WAAA8B,EACA,GAAGtB,CACL,IACEpC,EAAAA,kBAAAA,KAAC6C,EAAAA,OAAA,CAAO,UAAU,QAAS,GAAGT,EAC3B,SAAA,CAAAR,0BACA,QAAA,CAAM,KAAK,OAAO,OAAM,GAAE,GAAG8B,CAAA,CAAY,CAAA,CAAA,CAC5C,ECcIC,EAAsC,CAAC,CAC3C,UAAAC,EACA,UAAAC,EAAY,CAAA,EACZ,GAAAC,EAAK,EACL,SAAAlC,CACF,IAAM,CACJ,KAAM,CAAE,GAAAmC,EAAI,GAAGb,CAAA,EAAeW,EACxBG,EAAgB,CAAE,QAAS,WAAA,EAEjC,OACErE,EAAAA,kBAAAA,IAACsE,EAAAA,KAAA,CACC,GAAI,CACF,cAAeL,EACf,GAAAE,EACA,oBAAqBE,EACrB,wBAAyBA,EACzB,GAAGD,CAAA,EAEJ,GAAGb,EAEH,SAAAtB,CAAA,CAAA,CAGP,ECjCMsC,EAAoC,CAAC,CACzC,KAAAC,EACA,eAAApB,EAAiB,CAAA,EACjB,gBAAAqB,CACF,IAAM,CACJ,MAAMC,EAAU,OAAOtB,EAAe,SAAW,EAAE,EAE7CuB,EAAkBC,GAAyB,KAAK,MAAMF,EAAUE,CAAI,EAEpEC,EAAW,CACfC,EACAC,EACAH,IAEA,KAAK,MAAMG,EAAYJ,EAAeC,CAAI,CAAC,EAAIJ,EAAK,OAASM,EAEzDE,EAAY,CAACD,EAAmBH,IAAyB,CAC7D,MAAMK,EAAiBT,EAAK,CAAC,EAAE,OAASG,EAAeC,CAAI,EAC3D,OAAOK,IAAmB,GAAKF,IAAcP,EAAK,CAAC,EAAE,OAAS,GACzDE,EAAUO,EAAiBL,GAAQ,EACpC,CACN,EAEA,+BACGM,EAAAA,KAAA,CAAK,UAAS,GAAE,GAAG9B,EACjB,SAAAoB,EAAK,IAAI,CAACW,EAAKL,IACdK,EAAI,IAAI,CAAC,CAAE,QAAAC,EAAS,UAAAC,EAAY,CAAA,GAAMN,IACpC/E,EAAAA,kBAAAA,IAACkF,EAAAA,KAAA,CAEC,MAAO,CACL,GAAIL,EAASC,EAAUC,EAAWN,EAAgB,KAAK,EAAE,EACzD,GAAII,EAASC,EAAUC,EAAWN,EAAgB,KAAK,EAAE,EACzD,GAAII,EAASC,EAAUC,EAAWN,EAAgB,KAAK,EAAE,EACzD,GAAII,EAASC,EAAUC,EAAWN,EAAgB,KAAK,EAAE,EACzD,GAAII,EAASC,EAAUC,EAAWN,EAAgB,KAAK,EAAE,CAAA,EAE3D,OAAQ,CACN,GAAIO,EAAUD,EAAWN,EAAgB,KAAK,EAAE,EAChD,GAAIO,EAAUD,EAAWN,EAAgB,KAAK,EAAE,EAChD,GAAIO,EAAUD,EAAWN,EAAgB,KAAK,EAAE,EAChD,GAAIO,EAAUD,EAAWN,EAAgB,KAAK,EAAE,EAChD,GAAIO,EAAUD,EAAWN,EAAgB,KAAK,EAAE,CAAA,EAEjD,GAAGA,EACH,GAAGY,EAEH,SAAAD,CAAA,EAlBI,GAAGN,CAAQ,IAAIC,CAAS,EAAA,CAoBhC,CAAA,EAEL,CAEJ,ECxEMO,EAAkD,CAAC,CACvD,UAAAC,EACA,QAAAC,EACA,GAAGC,CACL,IACEzF,EAAAA,kBAAAA,IAAC0F,EAAAA,KAAA,CACE,GAAGD,EACJ,QAAS,IAAM,CACG,SAAS,eAAeF,CAAS,GACxC,eAAeC,CAAO,CACjC,CAAA,CACF,ECoCIG,EAAkB,CAMtB,CACA,SAAA1D,EACA,iBAAA2D,EACA,iBAAAC,EACA,QAAAC,EACA,KAAMC,EAAc,EACpB,YAAaC,EAAe,GAC5B,mBAAAC,EAAqB,CAAC,GAAI,IAAK,GAAG,EAClC,WAAAC,EACA,oBAAAC,EACA,aAAAC,EACA,GAAGC,CACL,IAKmB,CACjB,KAAM,CAAC7C,EAAS8C,CAAM,EAAIV,EAAA,EACpB,CAAC,CAAE,MAAAW,EAAO,KAAAC,EAAM,OAAAC,GAAUC,CAAa,EAAIC,gBAAc,CAC7D,KAAMZ,EACN,MAAOC,CAAA,CACR,EAED/C,EAAAA,UACE,IAAM,CACCO,EAAQ,CAAE,MAAA+C,EAAO,OAAAE,EAAQ,GAAGX,CAAA,EAAuBD,CAAgB,CAC1E,EAEA,CACErC,EACA+C,EACAE,EAEA,GAAG,OAAO,OAAOX,GAAW,EAAE,EAC9BD,CAAA,CACF,EAGF,KAAM,CAAE,MAAAe,EAAO,UAAAC,CAAA,EAAcP,EAAO,MAAQ,CAAA,EAE5C,OAAIO,IACFZ,EAAqBA,EAAmB,UAC5Ba,GAAUD,CAAA,GAKtBxG,EAAAA,kBAAAA,KAAC0G,EAAAA,MAAA,CAAO,GAAGb,EACR,SAAA,CAAAc,EAAAA,kBAAkBV,EAAQ,CAAC,CAAE,KAAAW,CAAA,IAC5BhF,EAASgF,EAAM,CACb,MAAAV,EACA,KAAAC,EACA,OAAAC,EACA,MAAAG,EACA,SAAUC,CAAA,CACX,CAAA,EAEH7G,EAAAA,kBAAAA,IAACkH,EAAAA,gBAAA,CACC,UAAU,MACV,MAAON,GAAS,EAChB,YAAaL,EACb,oBAAqBY,GAAS,CAC5BT,EAAc,CAAE,MAAO,SAASS,EAAM,OAAO,KAAK,EAAG,KAAM,EAAG,EAE1DhB,KAAyCgB,CAAK,CACpD,EACA,KAAAX,EACA,aAAc,CAACW,EAAOX,IAAS,CAC7BE,EAAc,CAAC,CAAE,MAAAH,CAAAA,KAAa,CAAE,MAAAA,EAAO,KAAAC,CAAAA,EAAO,EAE1CJ,GAAcA,EAAae,EAAOX,CAAI,CAC5C,EAEA,mBAAoBP,EAAmB,KAAK,CAACmB,EAAGC,IAAMD,EAAIC,CAAC,EAC1D,GAAGhB,CAAA,CAAA,CACN,EACF,CAEJ,ECpIMiB,EAAsC,CAAC,CAC3C,IAAAC,EACA,MAAAC,EAAQ,CAAA,EACR,GAAGjE,CACL,IAEIvD,EAAAA,kBAAAA,IAACyH,EAAAA,IAAA,CACC,UAAU,SACV,MAAM,OACN,IAAAF,EACA,MAAM,uBACN,MAAM,kHACN,MAAO,CAAE,OAAQ,MAAO,YAAa,SAAU,GAAGC,CAAA,EACjD,GAAGjE,CAAA,CAAA"}
1
+ {"version":3,"file":"index.cjs.js","sources":["../../src/components/ClickableTooltip.tsx","../../src/components/CopyIconButton.tsx","../../src/components/DownloadFileButton.tsx","../../src/components/ElevatedAppBar.tsx","../../src/components/InputFileButton.tsx","../../src/components/ItemizedList.tsx","../../src/components/OrderedGrid.tsx","../../src/components/ScrollIntoViewLink.tsx","../../src/components/TablePagination.tsx","../../src/components/YouTubeVideo.tsx"],"sourcesContent":["import { Tooltip, type TooltipProps } from \"@mui/material\"\nimport React from \"react\"\n\nimport { wrap } from \"../utils/general\"\n\nexport interface ClickableTooltipProps extends TooltipProps {}\n\nconst ClickableTooltip: React.FC<ClickableTooltipProps> = ({\n open = false,\n onClick,\n ...otherTooltipProps\n}) => {\n const [_open, _setOpen] = React.useState(open)\n\n React.useEffect(() => {\n _setOpen(open)\n }, [open])\n\n return (\n <Tooltip\n open={_open}\n onMouseOver={() => {\n if (!_open) {\n _setOpen(true)\n }\n }}\n onMouseLeave={() => {\n _setOpen(false)\n }}\n onClick={wrap(\n {\n after: () => {\n _setOpen(!_open)\n },\n },\n onClick,\n )}\n {...otherTooltipProps}\n />\n )\n}\n\nexport default ClickableTooltip\n","import { IconButton, type IconButtonProps } from \"@mui/material\"\nimport { ContentCopy as ContentCopyIcon } from \"@mui/icons-material\"\nimport type { FC } from \"react\"\n\nexport interface CopyIconButtonProps extends Omit<IconButtonProps, \"onClick\"> {\n content: string\n}\n\nconst CopyIconButton: FC<CopyIconButtonProps> = ({\n content,\n children = <ContentCopyIcon />,\n ...otherIconButtonProps\n}) => {\n return (\n <IconButton\n data-testid=\"copy-icon-button\"\n onClick={() => {\n void navigator.clipboard.writeText(content)\n }}\n {...otherIconButtonProps}\n >\n {children}\n </IconButton>\n )\n}\n\nexport default CopyIconButton\n","import { Button, type ButtonProps } from \"@mui/material\"\nimport { type FC, useEffect } from \"react\"\nimport { Download as DownloadIcon } from \"@mui/icons-material\"\n\nexport type DownloadFileButtonProps = ButtonProps & {\n file:\n | Blob\n | MediaSource\n | {\n text: string\n mimeType: \"plain\" | \"csv\"\n name: string\n charset?: string\n extension?: string\n }\n}\n\nconst DownloadFileButton: FC<DownloadFileButtonProps> = ({\n children = \"Download\",\n endIcon = <DownloadIcon />,\n file,\n ...otherButtonProps\n}) => {\n let url: undefined | string = undefined\n let anchorProps: undefined | { download?: string; href: string } = undefined\n if (\"mimeType\" in file) {\n const { text, mimeType, name, charset = \"utf-8\" } = file\n let { extension } = file\n\n if (!extension) extension = \".\" + { plain: \"txt\", csv: \"csv\" }[mimeType]\n\n anchorProps = {\n download: name + extension,\n href: `data:text/${mimeType};charset=${charset},${encodeURIComponent(text)}`,\n }\n } else {\n url = URL.createObjectURL(file)\n\n anchorProps = { href: url }\n }\n\n useEffect(() => {\n return () => {\n if (url) URL.revokeObjectURL(url)\n }\n }, [url])\n\n return (\n <Button endIcon={endIcon} {...otherButtonProps} {...anchorProps}>\n {children}\n </Button>\n )\n}\n\nexport default DownloadFileButton\n","import {\n AppBar,\n type AppBarProps,\n Container,\n type ContainerProps,\n Toolbar,\n type ToolbarProps,\n useScrollTrigger,\n} from \"@mui/material\"\nimport { type FC, cloneElement } from \"react\"\n\nexport interface ElevatedAppBarProps extends Omit<AppBarProps, \"position\"> {\n containerProps: ContainerProps\n toolbarProps?: ToolbarProps\n}\n\nconst ElevatedAppBar: FC<ElevatedAppBarProps> = ({\n containerProps,\n toolbarProps,\n elevation = 4,\n children,\n ...otherProps\n}) => {\n const trigger = useScrollTrigger({\n disableHysteresis: true,\n threshold: 0,\n })\n\n return cloneElement(\n <AppBar elevation={elevation} {...otherProps}>\n <Container {...containerProps}>\n <Toolbar {...toolbarProps}>{children}</Toolbar>\n </Container>\n </AppBar>,\n {\n position: trigger ? \"fixed\" : \"sticky\",\n },\n )\n}\n\nexport default ElevatedAppBar\n","import { Button, type ButtonProps } from \"@mui/material\"\nimport {\n type DetailedHTMLProps,\n type FC,\n type InputHTMLAttributes,\n} from \"react\"\n\nexport interface InputFileButtonProps\n extends Omit<ButtonProps<\"label\">, \"component\"> {\n inputProps?: Omit<\n DetailedHTMLProps<InputHTMLAttributes<HTMLInputElement>, HTMLInputElement>,\n \"type\" | \"hidden\"\n >\n}\n\nconst InputFileButton: FC<InputFileButtonProps> = ({\n children,\n inputProps,\n ...otherButtonProps\n}) => (\n <Button component=\"label\" {...otherButtonProps}>\n {children}\n <input type=\"file\" hidden {...inputProps} />\n </Button>\n)\n\nexport default InputFileButton\n","import { type FC, type ReactElement } from \"react\"\nimport {\n List,\n type ListItem,\n type ListItemText,\n type ListProps,\n} from \"@mui/material\"\n\ntype ListItemElement =\n | ReactElement<typeof ListItem | typeof ListItemText>\n | string\n\nexport interface ItemizedListProps {\n styleType:\n | \"unset\"\n | \"initial\"\n | \"inherit\"\n | \"upper-roman\"\n | \"upper-latin\"\n | \"upper-alpha\"\n | \"square\"\n | \"none\"\n | \"lower-roman\"\n | \"lower-latin\"\n | \"lower-greek\"\n | \"lower-alpha\"\n | \"georgian\"\n | \"disc\"\n | \"decimal-leading-zero\"\n | \"decimal\"\n | \"armenian\"\n | \"circle\"\n listProps?: ListProps\n pl?: number\n children: ListItemElement | ListItemElement[]\n}\n\nconst ItemizedList: FC<ItemizedListProps> = ({\n styleType,\n listProps = {},\n pl = 4,\n children,\n}) => {\n const { sx, ...otherProps } = listProps\n const listItemProps = { display: \"list-item\" }\n\n return (\n <List\n sx={{\n listStyleType: styleType,\n pl,\n \".MuiListItem-root\": listItemProps,\n \".MuiListItemText-root\": listItemProps,\n ...sx,\n }}\n {...otherProps}\n >\n {children}\n </List>\n )\n}\n\nexport default ItemizedList\n","import { type FC, type ReactElement } from \"react\"\nimport { Grid, type GridProps } from \"@mui/material\"\n\ninterface ItemProps\n extends Omit<GridProps, \"key\" | \"order\" | \"size\" | \"offset\"> {}\n\ninterface GlobalItemProps extends ItemProps {\n size: {\n xs: number\n sm: number\n md: number\n lg: number\n xl: number\n }\n}\n\nexport interface OrderedGridProps {\n rows: Array<\n Array<{\n element: ReactElement\n itemProps?: ItemProps\n }>\n >\n containerProps?: Omit<GridProps, \"container\">\n globalItemProps: GlobalItemProps\n}\n\nconst OrderedGrid: FC<OrderedGridProps> = ({\n rows,\n containerProps = {},\n globalItemProps,\n}) => {\n const columns = Number(containerProps.columns ?? 12)\n\n const getItemsPerRow = (size: number): number => Math.floor(columns / size)\n\n const getOrder = (\n rowIndex: number,\n itemIndex: number,\n size: number,\n ): number =>\n Math.floor(itemIndex / getItemsPerRow(size)) * rows.length + rowIndex\n\n const getOffset = (itemIndex: number, size: number): number => {\n const itemsOnLastRow = rows[0].length % getItemsPerRow(size)\n return itemsOnLastRow !== 0 && itemIndex === rows[0].length - 1\n ? (columns - itemsOnLastRow * size) / 2\n : 0\n }\n\n return (\n <Grid container {...containerProps}>\n {rows.map((row, rowIndex) =>\n row.map(({ element, itemProps = {} }, itemIndex) => (\n <Grid\n key={`${rowIndex}-${itemIndex}`}\n order={{\n xs: getOrder(rowIndex, itemIndex, globalItemProps.size.xs),\n sm: getOrder(rowIndex, itemIndex, globalItemProps.size.sm),\n md: getOrder(rowIndex, itemIndex, globalItemProps.size.md),\n lg: getOrder(rowIndex, itemIndex, globalItemProps.size.lg),\n xl: getOrder(rowIndex, itemIndex, globalItemProps.size.xl),\n }}\n offset={{\n xs: getOffset(itemIndex, globalItemProps.size.xs),\n sm: getOffset(itemIndex, globalItemProps.size.sm),\n md: getOffset(itemIndex, globalItemProps.size.md),\n lg: getOffset(itemIndex, globalItemProps.size.lg),\n xl: getOffset(itemIndex, globalItemProps.size.xl),\n }}\n {...globalItemProps}\n {...itemProps}\n >\n {element}\n </Grid>\n )),\n )}\n </Grid>\n )\n}\n\nexport default OrderedGrid\n","import { Link, type LinkProps } from \"@mui/material\"\nimport { type FC } from \"react\"\nexport interface ScrollIntoViewLinkProps extends Omit<LinkProps, \"onClick\"> {\n elementId: string\n options?: ScrollIntoViewOptions\n}\n\nconst ScrollIntoViewLink: FC<ScrollIntoViewLinkProps> = ({\n elementId,\n options,\n ...linkProps\n}) => (\n <Link\n {...linkProps}\n onClick={() => {\n const element = document.getElementById(elementId)\n element?.scrollIntoView(options)\n }}\n />\n)\n\nexport default ScrollIntoViewLink\n","import {\n type ElementType,\n type JSX,\n type JSXElementConstructor,\n type ReactNode,\n useEffect,\n} from \"react\"\nimport {\n TablePagination as MuiTablePagination,\n type TablePaginationProps as MuiTablePaginationProps,\n Stack,\n type StackProps,\n type TablePaginationBaseProps,\n} from \"@mui/material\"\nimport type { TypedUseLazyQuery } from \"@reduxjs/toolkit/query/react\"\n\nimport { type ListArg, type ListResult, handleResultState } from \"../utils/api\"\nimport { type Pagination, usePagination } from \"../hooks/api\"\n\nexport type TablePaginationProps<\n QueryArg extends ListArg,\n ResultType extends ListResult<any>,\n RootComponent extends\n ElementType = JSXElementConstructor<TablePaginationBaseProps>,\n AdditionalProps = {},\n> = Omit<\n MuiTablePaginationProps<RootComponent, AdditionalProps>,\n | \"component\"\n | \"count\"\n | \"rowsPerPage\"\n | \"onRowsPerPageChange\"\n | \"rowsPerPageOptions\"\n | \"page\"\n | \"onPageChange\"\n> &\n Partial<\n Pick<\n MuiTablePaginationProps<RootComponent, AdditionalProps>,\n \"onRowsPerPageChange\" | \"onPageChange\"\n >\n > & {\n children: (\n data: ResultType[\"data\"],\n pagination: Pagination & { count?: number; maxLimit?: number },\n ) => ReactNode\n useLazyListQuery: TypedUseLazyQuery<ResultType, QueryArg, any>\n preferCacheValue?: boolean\n filters?: Omit<QueryArg, \"limit\" | \"offset\">\n rowsPerPageOptions?: number[]\n stackProps?: StackProps\n page?: number\n rowsPerPage?: number\n }\n\nconst TablePagination = <\n QueryArg extends ListArg,\n ResultType extends ListResult<any>,\n RootComponent extends\n ElementType = JSXElementConstructor<TablePaginationBaseProps>,\n AdditionalProps = {},\n>({\n children,\n useLazyListQuery,\n preferCacheValue,\n filters,\n page: initialPage = 0,\n rowsPerPage: initialLimit = 50,\n rowsPerPageOptions = [50, 100, 150],\n stackProps,\n onRowsPerPageChange,\n onPageChange,\n ...tablePaginationProps\n}: TablePaginationProps<\n QueryArg,\n ResultType,\n RootComponent,\n AdditionalProps\n>): JSX.Element => {\n const [trigger, result] = useLazyListQuery()\n const [{ limit, page, offset }, setPagination] = usePagination({\n page: initialPage,\n limit: initialLimit,\n })\n\n useEffect(\n () => {\n void trigger({ limit, offset, ...filters } as QueryArg, preferCacheValue)\n },\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [\n trigger,\n limit,\n offset,\n // eslint-disable-next-line react-hooks/exhaustive-deps,@typescript-eslint/no-unsafe-assignment\n ...Object.values(filters || {}),\n preferCacheValue,\n ],\n )\n\n const { count, max_limit } = result.data || {}\n\n if (max_limit) {\n rowsPerPageOptions = rowsPerPageOptions.filter(\n option => option <= max_limit,\n )\n }\n\n return (\n <Stack {...stackProps}>\n {handleResultState(result, ({ data }) =>\n children(data, {\n limit,\n page,\n offset,\n count,\n maxLimit: max_limit,\n }),\n )}\n <MuiTablePagination\n component=\"div\"\n count={count ?? 0}\n rowsPerPage={limit}\n onRowsPerPageChange={event => {\n setPagination({ limit: parseInt(event.target.value), page: 0 })\n // eslint-disable-next-line @typescript-eslint/no-unsafe-call\n if (onRowsPerPageChange) onRowsPerPageChange(event)\n }}\n page={page}\n onPageChange={(event, page) => {\n setPagination(({ limit }) => ({ limit, page }))\n // eslint-disable-next-line @typescript-eslint/no-unsafe-call\n if (onPageChange) onPageChange(event, page)\n }}\n // ascending order\n rowsPerPageOptions={rowsPerPageOptions.sort((a, b) => a - b)}\n {...tablePaginationProps}\n />\n </Stack>\n )\n}\n\nexport default TablePagination\n","import { Box, type BoxProps } from \"@mui/material\"\nimport { type FC } from \"react\"\n\nexport interface YouTubeVideoProps extends Omit<BoxProps, \"component\"> {\n src: string\n}\n\nconst YouTubeVideo: FC<YouTubeVideoProps> = ({\n src,\n style = {},\n ...otherProps\n}) => {\n return (\n <Box\n component=\"iframe\"\n width=\"100%\"\n src={src}\n title=\"YouTube video player\"\n allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen\"\n style={{ border: \"0px\", aspectRatio: \"16 / 9\", ...style }}\n {...otherProps}\n />\n )\n}\n\nexport default YouTubeVideo\n"],"names":["ClickableTooltip","open","onClick","otherTooltipProps","_open","_setOpen","React","jsx","Tooltip","wrap","CopyIconButton","content","children","ContentCopyIcon","otherIconButtonProps","IconButton","DownloadFileButton","endIcon","DownloadIcon","file","otherButtonProps","url","anchorProps","text","mimeType","name","charset","extension","useEffect","Button","ElevatedAppBar","containerProps","toolbarProps","elevation","otherProps","trigger","useScrollTrigger","cloneElement","AppBar","Container","Toolbar","InputFileButton","inputProps","jsxs","ItemizedList","styleType","listProps","pl","sx","listItemProps","List","OrderedGrid","rows","globalItemProps","columns","getItemsPerRow","size","getOrder","rowIndex","itemIndex","getOffset","itemsOnLastRow","Grid","row","element","itemProps","ScrollIntoViewLink","elementId","options","linkProps","Link","TablePagination","useLazyListQuery","preferCacheValue","filters","initialPage","initialLimit","rowsPerPageOptions","stackProps","onRowsPerPageChange","onPageChange","tablePaginationProps","result","limit","page","offset","setPagination","usePagination","count","max_limit","option","Stack","handleResultState","data","MuiTablePagination","event","a","b","YouTubeVideo","src","style","Box"],"mappings":"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"}
@@ -2,7 +2,6 @@ export * as forms from './form';
2
2
  export * as pages from './page';
3
3
  export * from './router';
4
4
  export * as tables from './table';
5
- export { default as App, type AppProps } from './App';
6
5
  export { default as ClickableTooltip, type ClickableTooltipProps, } from './ClickableTooltip';
7
6
  export { default as CopyIconButton, type CopyIconButtonProps, } from './CopyIconButton';
8
7
  export { default as Countdown, type CountdownProps } from './Countdown';