codeforlife 2.14.6 → 2.14.8

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 (87) hide show
  1. package/dist/{Countdown-B1ilD_qY.js → Countdown-B4alF-zt.js} +2 -2
  2. package/dist/{Countdown-B1ilD_qY.js.map → Countdown-B4alF-zt.js.map} +1 -1
  3. package/dist/{Countdown-DJ5b4A3w.cjs → Countdown-B8t-gwPp.cjs} +2 -2
  4. package/dist/{Countdown-DJ5b4A3w.cjs.map → Countdown-B8t-gwPp.cjs.map} +1 -1
  5. package/dist/{LinkButton-BbGJHgCY.cjs → LinkButton-C_pRNvqs.cjs} +2 -2
  6. package/dist/{LinkButton-BbGJHgCY.cjs.map → LinkButton-C_pRNvqs.cjs.map} +1 -1
  7. package/dist/{LinkButton-BVU_MF2a.js → LinkButton-EQvTNtbi.js} +2 -2
  8. package/dist/{LinkButton-BVU_MF2a.js.map → LinkButton-EQvTNtbi.js.map} +1 -1
  9. package/dist/{Navigate-DfeA_eki.js → Navigate-CmvxpGu9.js} +2 -2
  10. package/dist/{Navigate-DfeA_eki.js.map → Navigate-CmvxpGu9.js.map} +1 -1
  11. package/dist/{Navigate-CioAG5Y-.cjs → Navigate-N_lhvJqc.cjs} +2 -2
  12. package/dist/{Navigate-CioAG5Y-.cjs.map → Navigate-N_lhvJqc.cjs.map} +1 -1
  13. package/dist/auth--UJpsJx8.cjs +2 -0
  14. package/dist/auth--UJpsJx8.cjs.map +1 -0
  15. package/dist/{auth-D-8t6wfR.js → auth-C3UdJFcP.js} +25 -25
  16. package/dist/auth-C3UdJFcP.js.map +1 -0
  17. package/dist/common-BQDBPfA-.js +23 -0
  18. package/dist/common-BQDBPfA-.js.map +1 -0
  19. package/dist/common-Cxc7W70B.cjs +2 -0
  20. package/dist/common-Cxc7W70B.cjs.map +1 -0
  21. package/dist/components/form/index.cjs.js +1 -1
  22. package/dist/components/form/index.es.js +1 -1
  23. package/dist/components/index.cjs.js +1 -1
  24. package/dist/components/index.es.js +5 -5
  25. package/dist/components/page/index.cjs.js +1 -1
  26. package/dist/components/page/index.es.js +1 -1
  27. package/dist/components/router/index.cjs.js +1 -1
  28. package/dist/components/router/index.es.js +2 -2
  29. package/dist/features/index.cjs.js +1 -1
  30. package/dist/features/index.cjs.js.map +1 -1
  31. package/dist/features/index.es.js +3 -3
  32. package/dist/hooks/index.cjs.js +1 -1
  33. package/dist/hooks/index.es.js +1 -1
  34. package/dist/{index-C8T09ieQ.cjs → index-BUG2k4XI.cjs} +2 -2
  35. package/dist/{index-C8T09ieQ.cjs.map → index-BUG2k4XI.cjs.map} +1 -1
  36. package/dist/index-BhTYGZm3.cjs +2 -0
  37. package/dist/{index-Da4T5FYK.cjs.map → index-BhTYGZm3.cjs.map} +1 -1
  38. package/dist/{index-Cxq_P-ni.js → index-CYI_rUWI.js} +3 -3
  39. package/dist/{index-Cxq_P-ni.js.map → index-CYI_rUWI.js.map} +1 -1
  40. package/dist/{index-De-EwYmr.js → index-Uk65JJpc.js} +2 -2
  41. package/dist/{index-De-EwYmr.js.map → index-Uk65JJpc.js.map} +1 -1
  42. package/dist/server/entry/client.cjs.js +2 -0
  43. package/dist/server/entry/client.cjs.js.map +1 -0
  44. package/dist/server/entry/client.d.ts +4 -0
  45. package/dist/server/entry/client.es.js +23 -0
  46. package/dist/server/entry/client.es.js.map +1 -0
  47. package/dist/server/entry/index.cjs.js +2 -0
  48. package/dist/server/entry/index.cjs.js.map +1 -0
  49. package/dist/server/entry/index.d.ts +2 -0
  50. package/dist/server/entry/index.es.js +9 -0
  51. package/dist/server/entry/index.es.js.map +1 -0
  52. package/dist/server/entry/server.cjs.js +2 -0
  53. package/dist/server/entry/server.cjs.js.map +1 -0
  54. package/dist/server/entry/server.d.ts +4 -0
  55. package/dist/server/entry/server.es.js +37 -0
  56. package/dist/server/entry/server.es.js.map +1 -0
  57. package/dist/slices/index.cjs.js +1 -1
  58. package/dist/slices/index.cjs.js.map +1 -1
  59. package/dist/slices/index.es.js +5 -5
  60. package/dist/slices/index.es.js.map +1 -1
  61. package/dist/src/server/entry/client.d.ts +2 -0
  62. package/dist/src/server/entry/common.d.ts +19 -0
  63. package/dist/src/server/entry/index.d.ts +1 -0
  64. package/dist/src/server/entry/server.d.ts +7 -0
  65. package/dist/src/utils/cookies.test.d.ts +1 -0
  66. package/dist/utils/auth.cjs.js +1 -1
  67. package/dist/utils/auth.cjs.js.map +1 -1
  68. package/dist/utils/auth.es.js +7 -7
  69. package/dist/utils/auth.es.js.map +1 -1
  70. package/dist/utils/cookies.cjs.js +2 -0
  71. package/dist/utils/cookies.cjs.js.map +1 -0
  72. package/dist/utils/cookies.d.ts +1 -0
  73. package/dist/utils/cookies.es.js +15 -0
  74. package/dist/utils/cookies.es.js.map +1 -0
  75. package/dist/utils/router.cjs.js +1 -1
  76. package/dist/utils/router.es.js +1 -1
  77. package/package.json +19 -4
  78. package/dist/auth-D-8t6wfR.js.map +0 -1
  79. package/dist/auth-uyv8Mv88.cjs +0 -2
  80. package/dist/auth-uyv8Mv88.cjs.map +0 -1
  81. package/dist/index-Da4T5FYK.cjs +0 -2
  82. package/dist/server/entry.cjs.js +0 -2
  83. package/dist/server/entry.cjs.js.map +0 -1
  84. package/dist/server/entry.d.ts +0 -2
  85. package/dist/server/entry.es.js +0 -62
  86. package/dist/server/entry.es.js.map +0 -1
  87. package/dist/src/server/entry.d.ts +0 -18
@@ -1,7 +1,7 @@
1
1
  import { jsx as u, Fragment as a, jsxs as f } from "react/jsx-runtime";
2
2
  import { useState as s } from "react";
3
3
  import { Typography as h } from "@mui/material";
4
- import "./auth-D-8t6wfR.js";
4
+ import "./auth-C3UdJFcP.js";
5
5
  import { u as l } from "./general-D7Hqi3gj.js";
6
6
  import "react-router";
7
7
  import "yup";
@@ -25,4 +25,4 @@ const d = ({
25
25
  export {
26
26
  d as C
27
27
  };
28
- //# sourceMappingURL=Countdown-B1ilD_qY.js.map
28
+ //# sourceMappingURL=Countdown-B4alF-zt.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Countdown-B1ilD_qY.js","sources":["../src/components/Countdown.tsx"],"sourcesContent":["import { type FC, useState } from \"react\"\nimport { Typography, type TypographyProps } from \"@mui/material\"\n\nimport { useCountdown } from \"../hooks\"\n\nexport interface CountdownProps extends Omit<TypographyProps, \"children\"> {\n seconds: number\n start?: boolean\n onEnd: () => void\n}\n\nconst Countdown: FC<CountdownProps> = ({\n seconds,\n start = true,\n onEnd,\n ...typographyProps\n}) => {\n seconds = Math.floor(seconds)\n const _seconds = useCountdown(seconds)[0]\n const [end, setEnd] = useState(!start)\n\n if (_seconds === 0 && !end) {\n setEnd(true)\n onEnd()\n }\n\n seconds = Math.floor(_seconds % 60)\n const minutes = Math.floor(_seconds / 60)\n\n return (\n <>\n {_seconds > 0 && (\n <Typography {...typographyProps}>\n {minutes > 0 && `${minutes} ${minutes > 1 ? \"mins\" : \"min\"} `}\n {seconds > 0 && `${seconds} ${seconds > 1 ? \"secs\" : \"sec\"}`}\n </Typography>\n )}\n </>\n )\n}\n\nexport default Countdown\n"],"names":["Countdown","seconds","start","onEnd","typographyProps","_seconds","useCountdown","end","setEnd","useState","minutes","jsxs","Typography"],"mappings":";;;;;;;;;AAWA,MAAMA,IAAgC,CAAC;AAAA,EACrC,SAAAC;AAAA,EACA,OAAAC,IAAQ;AAAA,EACR,OAAAC;AAAA,EACA,GAAGC;AACL,MAAM;AACJ,EAAAH,IAAU,KAAK,MAAMA,CAAO;AAC5B,QAAMI,IAAWC,EAAaL,CAAO,EAAE,CAAC,GAClC,CAACM,GAAKC,CAAM,IAAIC,EAAS,CAACP,CAAK;AAErC,EAAIG,MAAa,KAAK,CAACE,MACrBC,EAAO,EAAI,GACXL,EAAA,IAGFF,IAAU,KAAK,MAAMI,IAAW,EAAE;AAClC,QAAMK,IAAU,KAAK,MAAML,IAAW,EAAE;AAExC,gCAEK,UAAAA,IAAW,KACV,gBAAAM,EAACC,GAAA,EAAY,GAAGR,GACb,UAAA;AAAA,IAAAM,IAAU,KAAK,GAAGA,CAAO,IAAIA,IAAU,IAAI,SAAS,KAAK;AAAA,IACzDT,IAAU,KAAK,GAAGA,CAAO,IAAIA,IAAU,IAAI,SAAS,KAAK;AAAA,EAAA,EAAA,CAC5D,EAAA,CAEJ;AAEJ;"}
1
+ {"version":3,"file":"Countdown-B4alF-zt.js","sources":["../src/components/Countdown.tsx"],"sourcesContent":["import { type FC, useState } from \"react\"\nimport { Typography, type TypographyProps } from \"@mui/material\"\n\nimport { useCountdown } from \"../hooks\"\n\nexport interface CountdownProps extends Omit<TypographyProps, \"children\"> {\n seconds: number\n start?: boolean\n onEnd: () => void\n}\n\nconst Countdown: FC<CountdownProps> = ({\n seconds,\n start = true,\n onEnd,\n ...typographyProps\n}) => {\n seconds = Math.floor(seconds)\n const _seconds = useCountdown(seconds)[0]\n const [end, setEnd] = useState(!start)\n\n if (_seconds === 0 && !end) {\n setEnd(true)\n onEnd()\n }\n\n seconds = Math.floor(_seconds % 60)\n const minutes = Math.floor(_seconds / 60)\n\n return (\n <>\n {_seconds > 0 && (\n <Typography {...typographyProps}>\n {minutes > 0 && `${minutes} ${minutes > 1 ? \"mins\" : \"min\"} `}\n {seconds > 0 && `${seconds} ${seconds > 1 ? \"secs\" : \"sec\"}`}\n </Typography>\n )}\n </>\n )\n}\n\nexport default Countdown\n"],"names":["Countdown","seconds","start","onEnd","typographyProps","_seconds","useCountdown","end","setEnd","useState","minutes","jsxs","Typography"],"mappings":";;;;;;;;;AAWA,MAAMA,IAAgC,CAAC;AAAA,EACrC,SAAAC;AAAA,EACA,OAAAC,IAAQ;AAAA,EACR,OAAAC;AAAA,EACA,GAAGC;AACL,MAAM;AACJ,EAAAH,IAAU,KAAK,MAAMA,CAAO;AAC5B,QAAMI,IAAWC,EAAaL,CAAO,EAAE,CAAC,GAClC,CAACM,GAAKC,CAAM,IAAIC,EAAS,CAACP,CAAK;AAErC,EAAIG,MAAa,KAAK,CAACE,MACrBC,EAAO,EAAI,GACXL,EAAA,IAGFF,IAAU,KAAK,MAAMI,IAAW,EAAE;AAClC,QAAMK,IAAU,KAAK,MAAML,IAAW,EAAE;AAExC,gCAEK,UAAAA,IAAW,KACV,gBAAAM,EAACC,GAAA,EAAY,GAAGR,GACb,UAAA;AAAA,IAAAM,IAAU,KAAK,GAAGA,CAAO,IAAIA,IAAU,IAAI,SAAS,KAAK;AAAA,IACzDT,IAAU,KAAK,GAAGA,CAAO,IAAIA,IAAU,IAAI,SAAS,KAAK;AAAA,EAAA,EAAA,CAC5D,EAAA,CAEJ;AAEJ;"}
@@ -1,2 +1,2 @@
1
- "use strict";const n=require("react/jsx-runtime"),c=require("react"),q=require("@mui/material");require("./auth-uyv8Mv88.cjs");const l=require("./general-BPbbmkeX.cjs");require("react-router");require("yup");require("@mui/icons-material");require("./palette-BnIdHKDE.cjs");const h=({seconds:e,start:u=!0,onEnd:i,...o})=>{e=Math.floor(e);const r=l.useCountdown(e)[0],[s,a]=c.useState(!u);r===0&&!s&&(a(!0),i()),e=Math.floor(r%60);const t=Math.floor(r/60);return n.jsx(n.Fragment,{children:r>0&&n.jsxs(q.Typography,{...o,children:[t>0&&`${t} ${t>1?"mins":"min"} `,e>0&&`${e} ${e>1?"secs":"sec"}`]})})};exports.Countdown=h;
2
- //# sourceMappingURL=Countdown-DJ5b4A3w.cjs.map
1
+ "use strict";const n=require("react/jsx-runtime"),c=require("react"),q=require("@mui/material");require("./auth--UJpsJx8.cjs");const l=require("./general-BPbbmkeX.cjs");require("react-router");require("yup");require("@mui/icons-material");require("./palette-BnIdHKDE.cjs");const h=({seconds:e,start:u=!0,onEnd:i,...o})=>{e=Math.floor(e);const r=l.useCountdown(e)[0],[s,a]=c.useState(!u);r===0&&!s&&(a(!0),i()),e=Math.floor(r%60);const t=Math.floor(r/60);return n.jsx(n.Fragment,{children:r>0&&n.jsxs(q.Typography,{...o,children:[t>0&&`${t} ${t>1?"mins":"min"} `,e>0&&`${e} ${e>1?"secs":"sec"}`]})})};exports.Countdown=h;
2
+ //# sourceMappingURL=Countdown-B8t-gwPp.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"Countdown-DJ5b4A3w.cjs","sources":["../src/components/Countdown.tsx"],"sourcesContent":["import { type FC, useState } from \"react\"\nimport { Typography, type TypographyProps } from \"@mui/material\"\n\nimport { useCountdown } from \"../hooks\"\n\nexport interface CountdownProps extends Omit<TypographyProps, \"children\"> {\n seconds: number\n start?: boolean\n onEnd: () => void\n}\n\nconst Countdown: FC<CountdownProps> = ({\n seconds,\n start = true,\n onEnd,\n ...typographyProps\n}) => {\n seconds = Math.floor(seconds)\n const _seconds = useCountdown(seconds)[0]\n const [end, setEnd] = useState(!start)\n\n if (_seconds === 0 && !end) {\n setEnd(true)\n onEnd()\n }\n\n seconds = Math.floor(_seconds % 60)\n const minutes = Math.floor(_seconds / 60)\n\n return (\n <>\n {_seconds > 0 && (\n <Typography {...typographyProps}>\n {minutes > 0 && `${minutes} ${minutes > 1 ? \"mins\" : \"min\"} `}\n {seconds > 0 && `${seconds} ${seconds > 1 ? \"secs\" : \"sec\"}`}\n </Typography>\n )}\n </>\n )\n}\n\nexport default Countdown\n"],"names":["Countdown","seconds","start","onEnd","typographyProps","_seconds","useCountdown","end","setEnd","useState","minutes","jsxs","Typography"],"mappings":"iRAWA,MAAMA,EAAgC,CAAC,CACrC,QAAAC,EACA,MAAAC,EAAQ,GACR,MAAAC,EACA,GAAGC,CACL,IAAM,CACJH,EAAU,KAAK,MAAMA,CAAO,EAC5B,MAAMI,EAAWC,EAAAA,aAAaL,CAAO,EAAE,CAAC,EAClC,CAACM,EAAKC,CAAM,EAAIC,EAAAA,SAAS,CAACP,CAAK,EAEjCG,IAAa,GAAK,CAACE,IACrBC,EAAO,EAAI,EACXL,EAAA,GAGFF,EAAU,KAAK,MAAMI,EAAW,EAAE,EAClC,MAAMK,EAAU,KAAK,MAAML,EAAW,EAAE,EAExC,yBAEK,SAAAA,EAAW,GACVM,EAAAA,KAACC,EAAAA,WAAA,CAAY,GAAGR,EACb,SAAA,CAAAM,EAAU,GAAK,GAAGA,CAAO,IAAIA,EAAU,EAAI,OAAS,KAAK,IACzDT,EAAU,GAAK,GAAGA,CAAO,IAAIA,EAAU,EAAI,OAAS,KAAK,EAAA,CAAA,CAC5D,CAAA,CAEJ,CAEJ"}
1
+ {"version":3,"file":"Countdown-B8t-gwPp.cjs","sources":["../src/components/Countdown.tsx"],"sourcesContent":["import { type FC, useState } from \"react\"\nimport { Typography, type TypographyProps } from \"@mui/material\"\n\nimport { useCountdown } from \"../hooks\"\n\nexport interface CountdownProps extends Omit<TypographyProps, \"children\"> {\n seconds: number\n start?: boolean\n onEnd: () => void\n}\n\nconst Countdown: FC<CountdownProps> = ({\n seconds,\n start = true,\n onEnd,\n ...typographyProps\n}) => {\n seconds = Math.floor(seconds)\n const _seconds = useCountdown(seconds)[0]\n const [end, setEnd] = useState(!start)\n\n if (_seconds === 0 && !end) {\n setEnd(true)\n onEnd()\n }\n\n seconds = Math.floor(_seconds % 60)\n const minutes = Math.floor(_seconds / 60)\n\n return (\n <>\n {_seconds > 0 && (\n <Typography {...typographyProps}>\n {minutes > 0 && `${minutes} ${minutes > 1 ? \"mins\" : \"min\"} `}\n {seconds > 0 && `${seconds} ${seconds > 1 ? \"secs\" : \"sec\"}`}\n </Typography>\n )}\n </>\n )\n}\n\nexport default Countdown\n"],"names":["Countdown","seconds","start","onEnd","typographyProps","_seconds","useCountdown","end","setEnd","useState","minutes","jsxs","Typography"],"mappings":"iRAWA,MAAMA,EAAgC,CAAC,CACrC,QAAAC,EACA,MAAAC,EAAQ,GACR,MAAAC,EACA,GAAGC,CACL,IAAM,CACJH,EAAU,KAAK,MAAMA,CAAO,EAC5B,MAAMI,EAAWC,EAAAA,aAAaL,CAAO,EAAE,CAAC,EAClC,CAACM,EAAKC,CAAM,EAAIC,EAAAA,SAAS,CAACP,CAAK,EAEjCG,IAAa,GAAK,CAACE,IACrBC,EAAO,EAAI,EACXL,EAAA,GAGFF,EAAU,KAAK,MAAMI,EAAW,EAAE,EAClC,MAAMK,EAAU,KAAK,MAAML,EAAW,EAAE,EAExC,yBAEK,SAAAA,EAAW,GACVM,EAAAA,KAACC,EAAAA,WAAA,CAAY,GAAGR,EACb,SAAA,CAAAM,EAAU,GAAK,GAAGA,CAAO,IAAIA,EAAU,EAAI,OAAS,KAAK,IACzDT,EAAU,GAAK,GAAGA,CAAO,IAAIA,EAAU,EAAI,OAAS,KAAK,EAAA,CAAA,CAC5D,CAAA,CAEJ,CAEJ"}
@@ -1,2 +1,2 @@
1
- "use strict";const r=require("react/jsx-runtime"),t=require("@mui/material");require("react");const n=require("react-router");require("@mui/icons-material");require("./palette-BnIdHKDE.cjs");require("./auth-uyv8Mv88.cjs");const u=e=>r.jsx(t.Button,{...e,component:n.Link});exports.LinkButton=u;
2
- //# sourceMappingURL=LinkButton-BbGJHgCY.cjs.map
1
+ "use strict";const r=require("react/jsx-runtime"),t=require("@mui/material");require("react");const n=require("react-router");require("@mui/icons-material");require("./palette-BnIdHKDE.cjs");require("./auth--UJpsJx8.cjs");const u=e=>r.jsx(t.Button,{...e,component:n.Link});exports.LinkButton=u;
2
+ //# sourceMappingURL=LinkButton-C_pRNvqs.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"LinkButton-BbGJHgCY.cjs","sources":["../src/components/router/LinkButton.tsx"],"sourcesContent":["import { Button, type ButtonProps } from \"@mui/material\"\nimport { type JSX } from \"react\"\nimport { Link } from \"react-router\"\n\nimport { type LinkProps } from \"../../utils/router\"\n\nexport type LinkButtonProps<\n Override extends \"delta\" | \"to\",\n State extends Record<string, any> = Record<string, any>,\n> = Omit<ButtonProps, \"component\"> & LinkProps<Override, State>\n\n// https://mui.com/material-ui/integrations/routing/#button\nconst LinkButton: {\n (props: LinkButtonProps<\"delta\">): JSX.Element\n <State extends Record<string, any> = Record<string, any>>(\n props: LinkButtonProps<\"to\", State>,\n ): JSX.Element\n} = (props: LinkButtonProps<\"delta\"> | LinkButtonProps<\"to\">) => {\n return <Button {...{ ...props, component: Link }} />\n}\n\nexport default LinkButton\n"],"names":["LinkButton","props","jsx","Button","Link"],"mappings":"8NAYA,MAAMA,EAKDC,GACIC,EAAAA,IAACC,EAAAA,QAAa,GAAGF,EAAO,UAAWG,EAAAA,KAAQ"}
1
+ {"version":3,"file":"LinkButton-C_pRNvqs.cjs","sources":["../src/components/router/LinkButton.tsx"],"sourcesContent":["import { Button, type ButtonProps } from \"@mui/material\"\nimport { type JSX } from \"react\"\nimport { Link } from \"react-router\"\n\nimport { type LinkProps } from \"../../utils/router\"\n\nexport type LinkButtonProps<\n Override extends \"delta\" | \"to\",\n State extends Record<string, any> = Record<string, any>,\n> = Omit<ButtonProps, \"component\"> & LinkProps<Override, State>\n\n// https://mui.com/material-ui/integrations/routing/#button\nconst LinkButton: {\n (props: LinkButtonProps<\"delta\">): JSX.Element\n <State extends Record<string, any> = Record<string, any>>(\n props: LinkButtonProps<\"to\", State>,\n ): JSX.Element\n} = (props: LinkButtonProps<\"delta\"> | LinkButtonProps<\"to\">) => {\n return <Button {...{ ...props, component: Link }} />\n}\n\nexport default LinkButton\n"],"names":["LinkButton","props","jsx","Button","Link"],"mappings":"8NAYA,MAAMA,EAKDC,GACIC,EAAAA,IAACC,EAAAA,QAAa,GAAGF,EAAO,UAAWG,EAAAA,KAAQ"}
@@ -4,9 +4,9 @@ import "react";
4
4
  import { Link as m } from "react-router";
5
5
  import "@mui/icons-material";
6
6
  import "./palette-CYwuLBW7.js";
7
- import "./auth-D-8t6wfR.js";
7
+ import "./auth-C3UdJFcP.js";
8
8
  const L = (o) => /* @__PURE__ */ t(r, { ...o, component: m });
9
9
  export {
10
10
  L
11
11
  };
12
- //# sourceMappingURL=LinkButton-BVU_MF2a.js.map
12
+ //# sourceMappingURL=LinkButton-EQvTNtbi.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"LinkButton-BVU_MF2a.js","sources":["../src/components/router/LinkButton.tsx"],"sourcesContent":["import { Button, type ButtonProps } from \"@mui/material\"\nimport { type JSX } from \"react\"\nimport { Link } from \"react-router\"\n\nimport { type LinkProps } from \"../../utils/router\"\n\nexport type LinkButtonProps<\n Override extends \"delta\" | \"to\",\n State extends Record<string, any> = Record<string, any>,\n> = Omit<ButtonProps, \"component\"> & LinkProps<Override, State>\n\n// https://mui.com/material-ui/integrations/routing/#button\nconst LinkButton: {\n (props: LinkButtonProps<\"delta\">): JSX.Element\n <State extends Record<string, any> = Record<string, any>>(\n props: LinkButtonProps<\"to\", State>,\n ): JSX.Element\n} = (props: LinkButtonProps<\"delta\"> | LinkButtonProps<\"to\">) => {\n return <Button {...{ ...props, component: Link }} />\n}\n\nexport default LinkButton\n"],"names":["LinkButton","props","jsx","Button","Link"],"mappings":";;;;;;;AAYA,MAAMA,IAKF,CAACC,MACI,gBAAAC,EAACC,KAAa,GAAGF,GAAO,WAAWG,GAAQ;"}
1
+ {"version":3,"file":"LinkButton-EQvTNtbi.js","sources":["../src/components/router/LinkButton.tsx"],"sourcesContent":["import { Button, type ButtonProps } from \"@mui/material\"\nimport { type JSX } from \"react\"\nimport { Link } from \"react-router\"\n\nimport { type LinkProps } from \"../../utils/router\"\n\nexport type LinkButtonProps<\n Override extends \"delta\" | \"to\",\n State extends Record<string, any> = Record<string, any>,\n> = Omit<ButtonProps, \"component\"> & LinkProps<Override, State>\n\n// https://mui.com/material-ui/integrations/routing/#button\nconst LinkButton: {\n (props: LinkButtonProps<\"delta\">): JSX.Element\n <State extends Record<string, any> = Record<string, any>>(\n props: LinkButtonProps<\"to\", State>,\n ): JSX.Element\n} = (props: LinkButtonProps<\"delta\"> | LinkButtonProps<\"to\">) => {\n return <Button {...{ ...props, component: Link }} />\n}\n\nexport default LinkButton\n"],"names":["LinkButton","props","jsx","Button","Link"],"mappings":";;;;;;;AAYA,MAAMA,IAKF,CAACC,MACI,gBAAAC,EAACC,KAAa,GAAGF,GAAO,WAAWG,GAAQ;"}
@@ -4,7 +4,7 @@ import { useEffect as L } from "react";
4
4
  import { Link as o } from "react-router";
5
5
  import "@mui/icons-material";
6
6
  import "./palette-CYwuLBW7.js";
7
- import { e as u } from "./auth-D-8t6wfR.js";
7
+ import { e as u } from "./auth-C3UdJFcP.js";
8
8
  const x = (n) => /* @__PURE__ */ t(s, { component: o, ...n }), B = (n) => /* @__PURE__ */ t(a, { ...n, component: o }), T = (n) => /* @__PURE__ */ t(c, { ...n, component: o }), $ = (n) => /* @__PURE__ */ t(p, { ...n, component: o }), j = ({
9
9
  delta: n,
10
10
  to: e,
@@ -22,4 +22,4 @@ export {
22
22
  T as b,
23
23
  $ as c
24
24
  };
25
- //# sourceMappingURL=Navigate-DfeA_eki.js.map
25
+ //# sourceMappingURL=Navigate-CmvxpGu9.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Navigate-DfeA_eki.js","sources":["../src/components/router/Link.tsx","../src/components/router/LinkIconButton.tsx","../src/components/router/LinkListItem.tsx","../src/components/router/LinkTab.tsx","../src/components/router/Navigate.tsx"],"sourcesContent":["import { Link as MuiLink, type LinkProps as MuiLinkProps } from \"@mui/material\"\nimport { type JSX } from \"react\"\nimport { Link as RouterLink } from \"react-router\"\n\nimport { type LinkProps as RouterLinkProps } from \"../../utils/router\"\n\nexport type LinkProps<\n Override extends \"delta\" | \"to\",\n State extends Record<string, any> = Record<string, any>,\n> = Omit<MuiLinkProps, \"component\"> & RouterLinkProps<Override, State>\n\n// https://mui.com/material-ui/integrations/routing/#link\nconst Link: {\n (props: LinkProps<\"delta\">): JSX.Element\n <State extends Record<string, any> = Record<string, any>>(\n props: LinkProps<\"to\", State>,\n ): JSX.Element\n} = (props: LinkProps<\"delta\"> | LinkProps<\"to\">) => {\n // @ts-expect-error props are assignable\n return <MuiLink component={RouterLink} {...props} />\n}\n\nexport default Link\n","import { IconButton, type IconButtonProps } from \"@mui/material\"\nimport { type JSX } from \"react\"\nimport { Link } from \"react-router\"\n\nimport { type LinkProps } from \"../../utils/router\"\n\nexport type LinkIconButtonProps<\n Override extends \"delta\" | \"to\",\n State extends Record<string, any> = Record<string, any>,\n> = Omit<IconButtonProps, \"component\"> & LinkProps<Override, State>\n\n// https://mui.com/material-ui/integrations/routing/#button\nconst LinkIconButton: {\n (props: LinkIconButtonProps<\"delta\">): JSX.Element\n <State extends Record<string, any> = Record<string, any>>(\n props: LinkIconButtonProps<\"to\", State>,\n ): JSX.Element\n} = (props: LinkIconButtonProps<\"delta\"> | LinkIconButtonProps<\"to\">) => {\n return <IconButton {...{ ...props, component: Link }} />\n}\n\nexport default LinkIconButton\n","import { ListItem, type ListItemProps } from \"@mui/material\"\nimport { type JSX } from \"react\"\nimport { Link } from \"react-router\"\n\nimport { type LinkProps } from \"../../utils/router\"\n\nexport type LinkListItemProps<\n Override extends \"delta\" | \"to\",\n State extends Record<string, any> = Record<string, any>,\n> = Omit<ListItemProps, \"component\"> & LinkProps<Override, State>\n\n// https://mui.com/material-ui/integrations/routing/#list\nconst LinkListItem: {\n (props: LinkListItemProps<\"delta\">): JSX.Element\n <State extends Record<string, any> = Record<string, any>>(\n props: LinkListItemProps<\"to\", State>,\n ): JSX.Element\n} = (props: LinkListItemProps<\"delta\"> | LinkListItemProps<\"to\">) => {\n return <ListItem {...{ ...props, component: Link }} />\n}\n\nexport default LinkListItem\n","import { Tab, type TabProps } from \"@mui/material\"\nimport { type JSX } from \"react\"\nimport { Link } from \"react-router\"\n\nimport { type LinkProps } from \"../../utils/router\"\n\nexport type LinkTabProps<\n Override extends \"delta\" | \"to\",\n State extends Record<string, any> = Record<string, any>,\n> = Omit<TabProps, \"component\"> & LinkProps<Override, State>\n\n// https://mui.com/material-ui/integrations/routing/#tabs\nconst LinkTab: {\n (props: LinkTabProps<\"delta\">): JSX.Element\n <State extends Record<string, any> = Record<string, any>>(\n props: LinkTabProps<\"to\", State>,\n ): JSX.Element\n} = (props: LinkTabProps<\"delta\"> | LinkTabProps<\"to\">) => {\n return <Tab {...{ ...props, component: Link }} />\n}\n\nexport default LinkTab\n","import { type JSX, useEffect } from \"react\"\nimport { type To } from \"react-router\"\n\nimport { type NavigateOptions, useNavigate } from \"../../hooks\"\n\nexport type NavigateProps<\n Override extends \"delta\" | \"to\",\n State extends Record<string, any> = Record<string, any>,\n> = Override extends \"delta\"\n ? { delta: number; to?: undefined }\n : { delta?: undefined; to: To } & NavigateOptions<State>\n\nconst Navigate: {\n (props: NavigateProps<\"delta\">): JSX.Element\n <State extends Record<string, any> = Record<string, any>>(\n props: NavigateProps<\"to\", State>,\n ): JSX.Element\n} = ({\n delta,\n to,\n ...options\n}: NavigateProps<\"delta\"> | NavigateProps<\"to\">) => {\n const navigate = useNavigate()\n\n useEffect(() => {\n if (typeof delta === \"number\") navigate(delta)\n else navigate(to, options)\n }, [navigate, delta, to, options])\n\n return <></>\n}\n\nexport default Navigate\n"],"names":["Link","props","jsx","MuiLink","RouterLink","LinkIconButton","IconButton","LinkListItem","ListItem","LinkTab","Tab","Navigate","delta","to","options","navigate","useNavigate","useEffect","Fragment"],"mappings":";;;;;;;AAYA,MAAMA,IAKF,CAACC,MAEI,gBAAAC,EAACC,GAAA,EAAQ,WAAWC,GAAa,GAAGH,GAAO,GCP9CI,IAKF,CAACJ,MACI,gBAAAC,EAACI,KAAiB,GAAGL,GAAO,WAAWD,GAAQ,GCNlDO,IAKF,CAACN,MACI,gBAAAC,EAACM,KAAe,GAAGP,GAAO,WAAWD,GAAQ,GCNhDS,IAKF,CAACR,MACI,gBAAAC,EAACQ,KAAU,GAAGT,GAAO,WAAWD,GAAQ,GCN3CW,IAKF,CAAC;AAAA,EACH,OAAAC;AAAA,EACA,IAAAC;AAAA,EACA,GAAGC;AACL,MAAoD;AAClD,QAAMC,IAAWC,EAAA;AAEjB,SAAAC,EAAU,MAAM;AACd,IAAI,OAAOL,KAAU,WAAUG,EAASH,CAAK,IACxCG,EAASF,GAAIC,CAAO;AAAA,EAC3B,GAAG,CAACC,GAAUH,GAAOC,GAAIC,CAAO,CAAC,GAE1B,gBAAAZ,EAAAgB,GAAA,EAAE;AACX;"}
1
+ {"version":3,"file":"Navigate-CmvxpGu9.js","sources":["../src/components/router/Link.tsx","../src/components/router/LinkIconButton.tsx","../src/components/router/LinkListItem.tsx","../src/components/router/LinkTab.tsx","../src/components/router/Navigate.tsx"],"sourcesContent":["import { Link as MuiLink, type LinkProps as MuiLinkProps } from \"@mui/material\"\nimport { type JSX } from \"react\"\nimport { Link as RouterLink } from \"react-router\"\n\nimport { type LinkProps as RouterLinkProps } from \"../../utils/router\"\n\nexport type LinkProps<\n Override extends \"delta\" | \"to\",\n State extends Record<string, any> = Record<string, any>,\n> = Omit<MuiLinkProps, \"component\"> & RouterLinkProps<Override, State>\n\n// https://mui.com/material-ui/integrations/routing/#link\nconst Link: {\n (props: LinkProps<\"delta\">): JSX.Element\n <State extends Record<string, any> = Record<string, any>>(\n props: LinkProps<\"to\", State>,\n ): JSX.Element\n} = (props: LinkProps<\"delta\"> | LinkProps<\"to\">) => {\n // @ts-expect-error props are assignable\n return <MuiLink component={RouterLink} {...props} />\n}\n\nexport default Link\n","import { IconButton, type IconButtonProps } from \"@mui/material\"\nimport { type JSX } from \"react\"\nimport { Link } from \"react-router\"\n\nimport { type LinkProps } from \"../../utils/router\"\n\nexport type LinkIconButtonProps<\n Override extends \"delta\" | \"to\",\n State extends Record<string, any> = Record<string, any>,\n> = Omit<IconButtonProps, \"component\"> & LinkProps<Override, State>\n\n// https://mui.com/material-ui/integrations/routing/#button\nconst LinkIconButton: {\n (props: LinkIconButtonProps<\"delta\">): JSX.Element\n <State extends Record<string, any> = Record<string, any>>(\n props: LinkIconButtonProps<\"to\", State>,\n ): JSX.Element\n} = (props: LinkIconButtonProps<\"delta\"> | LinkIconButtonProps<\"to\">) => {\n return <IconButton {...{ ...props, component: Link }} />\n}\n\nexport default LinkIconButton\n","import { ListItem, type ListItemProps } from \"@mui/material\"\nimport { type JSX } from \"react\"\nimport { Link } from \"react-router\"\n\nimport { type LinkProps } from \"../../utils/router\"\n\nexport type LinkListItemProps<\n Override extends \"delta\" | \"to\",\n State extends Record<string, any> = Record<string, any>,\n> = Omit<ListItemProps, \"component\"> & LinkProps<Override, State>\n\n// https://mui.com/material-ui/integrations/routing/#list\nconst LinkListItem: {\n (props: LinkListItemProps<\"delta\">): JSX.Element\n <State extends Record<string, any> = Record<string, any>>(\n props: LinkListItemProps<\"to\", State>,\n ): JSX.Element\n} = (props: LinkListItemProps<\"delta\"> | LinkListItemProps<\"to\">) => {\n return <ListItem {...{ ...props, component: Link }} />\n}\n\nexport default LinkListItem\n","import { Tab, type TabProps } from \"@mui/material\"\nimport { type JSX } from \"react\"\nimport { Link } from \"react-router\"\n\nimport { type LinkProps } from \"../../utils/router\"\n\nexport type LinkTabProps<\n Override extends \"delta\" | \"to\",\n State extends Record<string, any> = Record<string, any>,\n> = Omit<TabProps, \"component\"> & LinkProps<Override, State>\n\n// https://mui.com/material-ui/integrations/routing/#tabs\nconst LinkTab: {\n (props: LinkTabProps<\"delta\">): JSX.Element\n <State extends Record<string, any> = Record<string, any>>(\n props: LinkTabProps<\"to\", State>,\n ): JSX.Element\n} = (props: LinkTabProps<\"delta\"> | LinkTabProps<\"to\">) => {\n return <Tab {...{ ...props, component: Link }} />\n}\n\nexport default LinkTab\n","import { type JSX, useEffect } from \"react\"\nimport { type To } from \"react-router\"\n\nimport { type NavigateOptions, useNavigate } from \"../../hooks\"\n\nexport type NavigateProps<\n Override extends \"delta\" | \"to\",\n State extends Record<string, any> = Record<string, any>,\n> = Override extends \"delta\"\n ? { delta: number; to?: undefined }\n : { delta?: undefined; to: To } & NavigateOptions<State>\n\nconst Navigate: {\n (props: NavigateProps<\"delta\">): JSX.Element\n <State extends Record<string, any> = Record<string, any>>(\n props: NavigateProps<\"to\", State>,\n ): JSX.Element\n} = ({\n delta,\n to,\n ...options\n}: NavigateProps<\"delta\"> | NavigateProps<\"to\">) => {\n const navigate = useNavigate()\n\n useEffect(() => {\n if (typeof delta === \"number\") navigate(delta)\n else navigate(to, options)\n }, [navigate, delta, to, options])\n\n return <></>\n}\n\nexport default Navigate\n"],"names":["Link","props","jsx","MuiLink","RouterLink","LinkIconButton","IconButton","LinkListItem","ListItem","LinkTab","Tab","Navigate","delta","to","options","navigate","useNavigate","useEffect","Fragment"],"mappings":";;;;;;;AAYA,MAAMA,IAKF,CAACC,MAEI,gBAAAC,EAACC,GAAA,EAAQ,WAAWC,GAAa,GAAGH,GAAO,GCP9CI,IAKF,CAACJ,MACI,gBAAAC,EAACI,KAAiB,GAAGL,GAAO,WAAWD,GAAQ,GCNlDO,IAKF,CAACN,MACI,gBAAAC,EAACM,KAAe,GAAGP,GAAO,WAAWD,GAAQ,GCNhDS,IAKF,CAACR,MACI,gBAAAC,EAACQ,KAAU,GAAGT,GAAO,WAAWD,GAAQ,GCN3CW,IAKF,CAAC;AAAA,EACH,OAAAC;AAAA,EACA,IAAAC;AAAA,EACA,GAAGC;AACL,MAAoD;AAClD,QAAMC,IAAWC,EAAA;AAEjB,SAAAC,EAAU,MAAM;AACd,IAAI,OAAOL,KAAU,WAAUG,EAASH,CAAK,IACxCG,EAASF,GAAIC,CAAO;AAAA,EAC3B,GAAG,CAACC,GAAUH,GAAOC,GAAIC,CAAO,CAAC,GAE1B,gBAAAZ,EAAAgB,GAAA,EAAE;AACX;"}
@@ -1,2 +1,2 @@
1
- "use strict";const t=require("react/jsx-runtime"),e=require("@mui/material"),c=require("react"),i=require("react-router");require("@mui/icons-material");require("./palette-BnIdHKDE.cjs");const u=require("./auth-uyv8Mv88.cjs"),L=n=>t.jsx(e.Link,{component:i.Link,...n}),a=n=>t.jsx(e.IconButton,{...n,component:i.Link}),k=n=>t.jsx(e.ListItem,{...n,component:i.Link}),m=n=>t.jsx(e.Tab,{...n,component:i.Link}),q=({delta:n,to:o,...s})=>{const r=u.useNavigate();return c.useEffect(()=>{typeof n=="number"?r(n):r(o,s)},[r,n,o,s]),t.jsx(t.Fragment,{})};exports.Link=L;exports.LinkIconButton=a;exports.LinkListItem=k;exports.LinkTab=m;exports.Navigate=q;
2
- //# sourceMappingURL=Navigate-CioAG5Y-.cjs.map
1
+ "use strict";const t=require("react/jsx-runtime"),e=require("@mui/material"),c=require("react"),i=require("react-router");require("@mui/icons-material");require("./palette-BnIdHKDE.cjs");const u=require("./auth--UJpsJx8.cjs"),L=n=>t.jsx(e.Link,{component:i.Link,...n}),a=n=>t.jsx(e.IconButton,{...n,component:i.Link}),k=n=>t.jsx(e.ListItem,{...n,component:i.Link}),m=n=>t.jsx(e.Tab,{...n,component:i.Link}),q=({delta:n,to:o,...s})=>{const r=u.useNavigate();return c.useEffect(()=>{typeof n=="number"?r(n):r(o,s)},[r,n,o,s]),t.jsx(t.Fragment,{})};exports.Link=L;exports.LinkIconButton=a;exports.LinkListItem=k;exports.LinkTab=m;exports.Navigate=q;
2
+ //# sourceMappingURL=Navigate-N_lhvJqc.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"Navigate-CioAG5Y-.cjs","sources":["../src/components/router/Link.tsx","../src/components/router/LinkIconButton.tsx","../src/components/router/LinkListItem.tsx","../src/components/router/LinkTab.tsx","../src/components/router/Navigate.tsx"],"sourcesContent":["import { Link as MuiLink, type LinkProps as MuiLinkProps } from \"@mui/material\"\nimport { type JSX } from \"react\"\nimport { Link as RouterLink } from \"react-router\"\n\nimport { type LinkProps as RouterLinkProps } from \"../../utils/router\"\n\nexport type LinkProps<\n Override extends \"delta\" | \"to\",\n State extends Record<string, any> = Record<string, any>,\n> = Omit<MuiLinkProps, \"component\"> & RouterLinkProps<Override, State>\n\n// https://mui.com/material-ui/integrations/routing/#link\nconst Link: {\n (props: LinkProps<\"delta\">): JSX.Element\n <State extends Record<string, any> = Record<string, any>>(\n props: LinkProps<\"to\", State>,\n ): JSX.Element\n} = (props: LinkProps<\"delta\"> | LinkProps<\"to\">) => {\n // @ts-expect-error props are assignable\n return <MuiLink component={RouterLink} {...props} />\n}\n\nexport default Link\n","import { IconButton, type IconButtonProps } from \"@mui/material\"\nimport { type JSX } from \"react\"\nimport { Link } from \"react-router\"\n\nimport { type LinkProps } from \"../../utils/router\"\n\nexport type LinkIconButtonProps<\n Override extends \"delta\" | \"to\",\n State extends Record<string, any> = Record<string, any>,\n> = Omit<IconButtonProps, \"component\"> & LinkProps<Override, State>\n\n// https://mui.com/material-ui/integrations/routing/#button\nconst LinkIconButton: {\n (props: LinkIconButtonProps<\"delta\">): JSX.Element\n <State extends Record<string, any> = Record<string, any>>(\n props: LinkIconButtonProps<\"to\", State>,\n ): JSX.Element\n} = (props: LinkIconButtonProps<\"delta\"> | LinkIconButtonProps<\"to\">) => {\n return <IconButton {...{ ...props, component: Link }} />\n}\n\nexport default LinkIconButton\n","import { ListItem, type ListItemProps } from \"@mui/material\"\nimport { type JSX } from \"react\"\nimport { Link } from \"react-router\"\n\nimport { type LinkProps } from \"../../utils/router\"\n\nexport type LinkListItemProps<\n Override extends \"delta\" | \"to\",\n State extends Record<string, any> = Record<string, any>,\n> = Omit<ListItemProps, \"component\"> & LinkProps<Override, State>\n\n// https://mui.com/material-ui/integrations/routing/#list\nconst LinkListItem: {\n (props: LinkListItemProps<\"delta\">): JSX.Element\n <State extends Record<string, any> = Record<string, any>>(\n props: LinkListItemProps<\"to\", State>,\n ): JSX.Element\n} = (props: LinkListItemProps<\"delta\"> | LinkListItemProps<\"to\">) => {\n return <ListItem {...{ ...props, component: Link }} />\n}\n\nexport default LinkListItem\n","import { Tab, type TabProps } from \"@mui/material\"\nimport { type JSX } from \"react\"\nimport { Link } from \"react-router\"\n\nimport { type LinkProps } from \"../../utils/router\"\n\nexport type LinkTabProps<\n Override extends \"delta\" | \"to\",\n State extends Record<string, any> = Record<string, any>,\n> = Omit<TabProps, \"component\"> & LinkProps<Override, State>\n\n// https://mui.com/material-ui/integrations/routing/#tabs\nconst LinkTab: {\n (props: LinkTabProps<\"delta\">): JSX.Element\n <State extends Record<string, any> = Record<string, any>>(\n props: LinkTabProps<\"to\", State>,\n ): JSX.Element\n} = (props: LinkTabProps<\"delta\"> | LinkTabProps<\"to\">) => {\n return <Tab {...{ ...props, component: Link }} />\n}\n\nexport default LinkTab\n","import { type JSX, useEffect } from \"react\"\nimport { type To } from \"react-router\"\n\nimport { type NavigateOptions, useNavigate } from \"../../hooks\"\n\nexport type NavigateProps<\n Override extends \"delta\" | \"to\",\n State extends Record<string, any> = Record<string, any>,\n> = Override extends \"delta\"\n ? { delta: number; to?: undefined }\n : { delta?: undefined; to: To } & NavigateOptions<State>\n\nconst Navigate: {\n (props: NavigateProps<\"delta\">): JSX.Element\n <State extends Record<string, any> = Record<string, any>>(\n props: NavigateProps<\"to\", State>,\n ): JSX.Element\n} = ({\n delta,\n to,\n ...options\n}: NavigateProps<\"delta\"> | NavigateProps<\"to\">) => {\n const navigate = useNavigate()\n\n useEffect(() => {\n if (typeof delta === \"number\") navigate(delta)\n else navigate(to, options)\n }, [navigate, delta, to, options])\n\n return <></>\n}\n\nexport default Navigate\n"],"names":["Link","props","jsx","MuiLink","RouterLink","LinkIconButton","IconButton","LinkListItem","ListItem","LinkTab","Tab","Navigate","delta","to","options","navigate","useNavigate","useEffect","Fragment"],"mappings":"kOAYMA,EAKDC,GAEIC,EAAAA,IAACC,EAAAA,KAAA,CAAQ,UAAWC,EAAAA,KAAa,GAAGH,EAAO,ECP9CI,EAKDJ,GACIC,EAAAA,IAACI,EAAAA,YAAiB,GAAGL,EAAO,UAAWD,EAAAA,KAAQ,ECNlDO,EAKDN,GACIC,EAAAA,IAACM,EAAAA,UAAe,GAAGP,EAAO,UAAWD,EAAAA,KAAQ,ECNhDS,EAKDR,GACIC,EAAAA,IAACQ,EAAAA,KAAU,GAAGT,EAAO,UAAWD,EAAAA,KAAQ,ECN3CW,EAKF,CAAC,CACH,MAAAC,EACA,GAAAC,EACA,GAAGC,CACL,IAAoD,CAClD,MAAMC,EAAWC,EAAAA,YAAA,EAEjBC,OAAAA,EAAAA,UAAU,IAAM,CACV,OAAOL,GAAU,SAAUG,EAASH,CAAK,EACxCG,EAASF,EAAIC,CAAO,CAC3B,EAAG,CAACC,EAAUH,EAAOC,EAAIC,CAAO,CAAC,EAE1BZ,EAAAA,IAAAgB,EAAAA,SAAA,EAAE,CACX"}
1
+ {"version":3,"file":"Navigate-N_lhvJqc.cjs","sources":["../src/components/router/Link.tsx","../src/components/router/LinkIconButton.tsx","../src/components/router/LinkListItem.tsx","../src/components/router/LinkTab.tsx","../src/components/router/Navigate.tsx"],"sourcesContent":["import { Link as MuiLink, type LinkProps as MuiLinkProps } from \"@mui/material\"\nimport { type JSX } from \"react\"\nimport { Link as RouterLink } from \"react-router\"\n\nimport { type LinkProps as RouterLinkProps } from \"../../utils/router\"\n\nexport type LinkProps<\n Override extends \"delta\" | \"to\",\n State extends Record<string, any> = Record<string, any>,\n> = Omit<MuiLinkProps, \"component\"> & RouterLinkProps<Override, State>\n\n// https://mui.com/material-ui/integrations/routing/#link\nconst Link: {\n (props: LinkProps<\"delta\">): JSX.Element\n <State extends Record<string, any> = Record<string, any>>(\n props: LinkProps<\"to\", State>,\n ): JSX.Element\n} = (props: LinkProps<\"delta\"> | LinkProps<\"to\">) => {\n // @ts-expect-error props are assignable\n return <MuiLink component={RouterLink} {...props} />\n}\n\nexport default Link\n","import { IconButton, type IconButtonProps } from \"@mui/material\"\nimport { type JSX } from \"react\"\nimport { Link } from \"react-router\"\n\nimport { type LinkProps } from \"../../utils/router\"\n\nexport type LinkIconButtonProps<\n Override extends \"delta\" | \"to\",\n State extends Record<string, any> = Record<string, any>,\n> = Omit<IconButtonProps, \"component\"> & LinkProps<Override, State>\n\n// https://mui.com/material-ui/integrations/routing/#button\nconst LinkIconButton: {\n (props: LinkIconButtonProps<\"delta\">): JSX.Element\n <State extends Record<string, any> = Record<string, any>>(\n props: LinkIconButtonProps<\"to\", State>,\n ): JSX.Element\n} = (props: LinkIconButtonProps<\"delta\"> | LinkIconButtonProps<\"to\">) => {\n return <IconButton {...{ ...props, component: Link }} />\n}\n\nexport default LinkIconButton\n","import { ListItem, type ListItemProps } from \"@mui/material\"\nimport { type JSX } from \"react\"\nimport { Link } from \"react-router\"\n\nimport { type LinkProps } from \"../../utils/router\"\n\nexport type LinkListItemProps<\n Override extends \"delta\" | \"to\",\n State extends Record<string, any> = Record<string, any>,\n> = Omit<ListItemProps, \"component\"> & LinkProps<Override, State>\n\n// https://mui.com/material-ui/integrations/routing/#list\nconst LinkListItem: {\n (props: LinkListItemProps<\"delta\">): JSX.Element\n <State extends Record<string, any> = Record<string, any>>(\n props: LinkListItemProps<\"to\", State>,\n ): JSX.Element\n} = (props: LinkListItemProps<\"delta\"> | LinkListItemProps<\"to\">) => {\n return <ListItem {...{ ...props, component: Link }} />\n}\n\nexport default LinkListItem\n","import { Tab, type TabProps } from \"@mui/material\"\nimport { type JSX } from \"react\"\nimport { Link } from \"react-router\"\n\nimport { type LinkProps } from \"../../utils/router\"\n\nexport type LinkTabProps<\n Override extends \"delta\" | \"to\",\n State extends Record<string, any> = Record<string, any>,\n> = Omit<TabProps, \"component\"> & LinkProps<Override, State>\n\n// https://mui.com/material-ui/integrations/routing/#tabs\nconst LinkTab: {\n (props: LinkTabProps<\"delta\">): JSX.Element\n <State extends Record<string, any> = Record<string, any>>(\n props: LinkTabProps<\"to\", State>,\n ): JSX.Element\n} = (props: LinkTabProps<\"delta\"> | LinkTabProps<\"to\">) => {\n return <Tab {...{ ...props, component: Link }} />\n}\n\nexport default LinkTab\n","import { type JSX, useEffect } from \"react\"\nimport { type To } from \"react-router\"\n\nimport { type NavigateOptions, useNavigate } from \"../../hooks\"\n\nexport type NavigateProps<\n Override extends \"delta\" | \"to\",\n State extends Record<string, any> = Record<string, any>,\n> = Override extends \"delta\"\n ? { delta: number; to?: undefined }\n : { delta?: undefined; to: To } & NavigateOptions<State>\n\nconst Navigate: {\n (props: NavigateProps<\"delta\">): JSX.Element\n <State extends Record<string, any> = Record<string, any>>(\n props: NavigateProps<\"to\", State>,\n ): JSX.Element\n} = ({\n delta,\n to,\n ...options\n}: NavigateProps<\"delta\"> | NavigateProps<\"to\">) => {\n const navigate = useNavigate()\n\n useEffect(() => {\n if (typeof delta === \"number\") navigate(delta)\n else navigate(to, options)\n }, [navigate, delta, to, options])\n\n return <></>\n}\n\nexport default Navigate\n"],"names":["Link","props","jsx","MuiLink","RouterLink","LinkIconButton","IconButton","LinkListItem","ListItem","LinkTab","Tab","Navigate","delta","to","options","navigate","useNavigate","useEffect","Fragment"],"mappings":"kOAYMA,EAKDC,GAEIC,EAAAA,IAACC,EAAAA,KAAA,CAAQ,UAAWC,EAAAA,KAAa,GAAGH,EAAO,ECP9CI,EAKDJ,GACIC,EAAAA,IAACI,EAAAA,YAAiB,GAAGL,EAAO,UAAWD,EAAAA,KAAQ,ECNlDO,EAKDN,GACIC,EAAAA,IAACM,EAAAA,UAAe,GAAGP,EAAO,UAAWD,EAAAA,KAAQ,ECNhDS,EAKDR,GACIC,EAAAA,IAACQ,EAAAA,KAAU,GAAGT,EAAO,UAAWD,EAAAA,KAAQ,ECN3CW,EAKF,CAAC,CACH,MAAAC,EACA,GAAAC,EACA,GAAGC,CACL,IAAoD,CAClD,MAAMC,EAAWC,EAAAA,YAAA,EAEjBC,OAAAA,EAAAA,UAAU,IAAM,CACV,OAAOL,GAAU,SAAUG,EAASH,CAAK,EACxCG,EAASF,EAAIC,CAAO,CAC3B,EAAG,CAACC,EAAUH,EAAOC,EAAIC,CAAO,CAAC,EAE1BZ,EAAAA,IAAAgB,EAAAA,SAAA,EAAE,CACX"}
@@ -0,0 +1,2 @@
1
+ "use strict";const y=require("react/jsx-runtime"),P=require("yup"),l=require("react"),S=require("react-router"),w=require("react-redux");require("@reduxjs/toolkit/query/react");require("@reduxjs/toolkit");const O=require("./utils/auth.cjs.js");require("@mui/material");const z=require("./utils/general.cjs.js");require("@mui/icons-material");require("./schemas-hIW9-H6-.cjs");require("./urls-2gheISSO.cjs");const J=require("./utils/schema.cjs.js");require("./palette-BnIdHKDE.cjs");const B=require("./utils/cookies.cjs.js"),D=require("./utils/settings.cjs.js");function G(e){const s=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(e){for(const r in e)if(r!=="default"){const t=Object.getOwnPropertyDescriptor(e,r);Object.defineProperty(s,r,t.get?t:{enumerable:!0,get:()=>e[r]})}}return s.default=e,Object.freeze(s)}const k=G(P);function v(){const e=S.useNavigate(),s=b();return(r,t=void 0)=>{if(typeof r=="number")e(r);else{const{next:a=!0,...o}=t||{};e(a&&"next"in s?s.next:r,o)}}}function A(){return S.useLocation()}function b(e,s){const r=Object.fromEntries(S.useSearchParams()[0].entries());return e?J.tryValidateSync(r,P.object(e),s):r}function K(e,s){const r=S.useParams();return e?J.tryValidateSync(r,P.object(e),s):r}function H({shape:e,children:s,onValidationError:r,onValidationSuccess:t=()=>{},validateOptions:a}){const o=K(e,a),c=v();return l.useEffect(()=>{o?t(o):r(c)},[]),o?s(o):y.jsx(y.Fragment,{})}function m(e){return w.useSelector(e)?JSON.parse(B.get(D.getSessionMetadataCookieName())):void 0}m.predefine=e=>()=>m(e);function Q(e,s,r={}){const{userType:t,next:a=!0}=r,{pathname:o}=A(),c=v(),u=m(e),i=t&&(!u||u.user_type!==t);return l.useEffect(()=>{i&&c({pathname:"/login"+{teacher:"/teacher",student:"/student",indy:"/independent"}[t],search:a?S.createSearchParams({next:o}).toString():void 0})},[c,i,t,a,o]),i?y.jsx(y.Fragment,{}):typeof s=="function"?s(u):s}function F(e,s=32,r="state"){const t=O.makeOAuth2StorageKey(e,r),a=sessionStorage.getItem(t),[o,c]=l.useState();l.useEffect(()=>{let i;a&&a.length===s?i=a:(i=z.generateSecureRandomString(s),sessionStorage.setItem(t,i)),c(i)},[t,a,s]);const u=l.useCallback(()=>{sessionStorage.removeItem(t),c(void 0)},[t]);return[o,u]}function T(e,s=128,r="codeChallenge"){const t=O.makeOAuth2StorageKey(e,r),a=sessionStorage.getItem(t),[o,c]=l.useState();l.useEffect(()=>{let i;if(a){const n=JSON.parse(a);typeof n=="object"&&n&&"verifier"in n&&typeof n.verifier=="string"&&n.verifier.length===s&&"challenge"in n&&typeof n.challenge=="string"&&"method"in n&&n.method==="S256"&&(i={verifier:n.verifier,challenge:n.challenge,method:n.method})}i?c(i):O.generateOAuth2CodeChallenge(s).then(n=>{sessionStorage.setItem(t,JSON.stringify(n)),c(n)}).catch(n=>{n&&console.error(n)})},[t,a,s]);const u=l.useCallback(()=>{sessionStorage.removeItem(t),c(void 0)},[t]);return[o,u]}function W({provider:e,authUri:s,clientId:r,redirectUri:t,scope:a,responseType:o="code",accessType:c="offline",prompt:u,useSessionMetadata:i,useLoginMutation:n,onCreateSession:j,onRetrieveSession:x}){const[h,E]=F(e),[{verifier:p,challenge:I,method:M}={},N]=T(e),[R,{originalArgs:f={},isLoading:L,isError:V}]=n(),q=i(),_=v(),d=b({code:k.string(),state:k.string()})||{},g=A().state||{};if(l.useEffect(()=>{d.code&&d.state&&_(".",{replace:!0,next:!1,state:{code:d.code,state:d.state}})},[d.code,d.state,_]),l.useEffect(()=>{q?x(q):h&&p&&g.code&&g.state===h&&(f.code!==g.code||f.code_verifier!==p||f.redirect_uri!==t||!V)&&!L&&R({code:g.code,code_verifier:p,redirect_uri:t}).unwrap().then(j).catch(()=>{_(".",{replace:!0,state:{notifications:[{props:{error:!0,children:"Failed to login. Please try again."}}]}})}).finally(()=>{E(),N()})},[_,t,h,g.state,E,p,g.code,N,R,L,V,f.code,f.code_verifier,f.redirect_uri,q,j,x]),h&&I&&M){const C={client_id:r,redirect_uri:t,scope:a,response_type:o,access_type:c,state:h,code_challenge:I,code_challenge_method:M};return u&&(C.prompt=u),[s+"?"+new URLSearchParams(C).toString(),C]}return[]}const X=e=>W("useSessionMetadata"in e?e:{...e,useSessionMetadata:m});exports.useLocation=A;exports.useNavigate=v;exports.useOAuth2=X;exports.useOAuth2CodeChallenge=T;exports.useOAuth2State=F;exports.useParams=K;exports.useParamsRequired=H;exports.useSearchParams=b;exports.useSession=Q;exports.useSessionMetadata=m;
2
+ //# sourceMappingURL=auth--UJpsJx8.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth--UJpsJx8.cjs","sources":["../src/hooks/router.tsx","../src/hooks/auth.tsx"],"sourcesContent":["import {\n type Location,\n type Params,\n type To,\n type NavigateOptions as _NavigateOptions,\n useLocation as _useLocation,\n useNavigate as _useNavigate,\n useParams as _useParams,\n useSearchParams as _useSearchParams,\n} from \"react-router\"\nimport { type ObjectShape, object as objectSchema } from \"yup\"\nimport { type ReactNode, useEffect } from \"react\"\n\nimport {\n type ObjectSchemaFromShape,\n type TryValidateSyncOnErrorRT,\n type TryValidateSyncOptions,\n type TryValidateSyncRT,\n tryValidateSync,\n} from \"../utils/schema\"\nimport { type PageState } from \"../components/page\"\nimport { type ReadOnly } from \"../utils/router\"\n\nexport type NavigateOptions<\n State extends Record<string, any> = Record<string, any>,\n> = Omit<_NavigateOptions, \"state\"> & {\n state?: State & Partial<PageState>\n next?: boolean\n}\n\nexport type Navigate = {\n <State extends Record<string, any> = Record<string, any>>(\n to: To,\n options?: NavigateOptions<State>,\n ): void\n (delta: number): void\n}\n\nexport function useNavigate(): Navigate {\n const navigate = _useNavigate()\n const searchParams = useSearchParams()\n\n return (\n toOrDelta: To | number,\n options: (NavigateOptions & { next?: boolean }) | undefined = undefined,\n ) => {\n if (typeof toOrDelta === \"number\") void navigate(toOrDelta)\n else {\n const { next = true, ..._options } = options || {}\n\n void navigate(\n next && \"next\" in searchParams ? searchParams.next : toOrDelta,\n _options,\n )\n }\n }\n}\n\nexport function useLocation<State = {}>() {\n return _useLocation() as Location<null | Partial<PageState & State>>\n}\n\n// -----------------------------------------------------------------------------\n// Use Search Params\n// -----------------------------------------------------------------------------\n\nexport function useSearchParams(): { [k: string]: string }\n\nexport function useSearchParams<\n OnErrorRT extends TryValidateSyncOnErrorRT<ObjectSchemaFromShape<Shape>>,\n Shape extends ObjectShape = {},\n>(\n shape: Shape,\n validateOptions?: TryValidateSyncOptions<\n ObjectSchemaFromShape<Shape>,\n OnErrorRT\n >,\n): TryValidateSyncRT<ObjectSchemaFromShape<Shape>, OnErrorRT>\n\nexport function useSearchParams<\n OnErrorRT extends TryValidateSyncOnErrorRT<ObjectSchemaFromShape<Shape>>,\n Shape extends ObjectShape = {},\n>(\n shape?: Shape,\n validateOptions?: TryValidateSyncOptions<\n ObjectSchemaFromShape<Shape>,\n OnErrorRT\n >,\n) {\n const searchParams = Object.fromEntries(_useSearchParams()[0].entries())\n if (!shape) return searchParams\n\n return tryValidateSync(searchParams, objectSchema(shape), validateOptions)\n}\n\n// -----------------------------------------------------------------------------\n// Use Params\n// -----------------------------------------------------------------------------\n\nexport function useParams(): ReadOnly<Params<string>>\n\nexport function useParams<\n OnErrorRT extends TryValidateSyncOnErrorRT<ObjectSchemaFromShape<Shape>>,\n Shape extends ObjectShape = {},\n>(\n shape: Shape,\n validateOptions?: TryValidateSyncOptions<\n ObjectSchemaFromShape<Shape>,\n OnErrorRT\n >,\n): TryValidateSyncRT<ObjectSchemaFromShape<Shape>, OnErrorRT>\n\nexport function useParams<\n OnErrorRT extends TryValidateSyncOnErrorRT<ObjectSchemaFromShape<Shape>>,\n Shape extends ObjectShape = {},\n>(\n shape?: Shape,\n validateOptions?: TryValidateSyncOptions<\n ObjectSchemaFromShape<Shape>,\n OnErrorRT\n >,\n) {\n const params = _useParams()\n if (!shape) return params\n\n return tryValidateSync(params, objectSchema(shape), validateOptions)\n}\n\nexport function useParamsRequired<\n OnErrorRT extends TryValidateSyncOnErrorRT<ObjectSchemaFromShape<Shape>>,\n Shape extends ObjectShape = {},\n>({\n shape,\n children,\n onValidationError,\n onValidationSuccess = () => {},\n validateOptions,\n}: {\n shape: Shape\n children: (\n data: NonNullable<\n TryValidateSyncRT<ObjectSchemaFromShape<Shape>, OnErrorRT>\n >,\n ) => ReactNode\n onValidationError: (navigate: Navigate) => void\n onValidationSuccess?: (\n params: NonNullable<\n TryValidateSyncRT<ObjectSchemaFromShape<Shape>, OnErrorRT>\n >,\n ) => void\n validateOptions?: TryValidateSyncOptions<\n ObjectSchemaFromShape<Shape>,\n OnErrorRT\n >\n}) {\n const params = useParams(shape, validateOptions)\n const navigate = useNavigate()\n\n useEffect(\n () => {\n if (params) onValidationSuccess(params)\n else onValidationError(navigate)\n },\n [], // eslint-disable-line react-hooks/exhaustive-deps\n )\n\n return params ? children(params) : <></>\n}\n","import * as yup from \"yup\"\nimport { type ReactNode, useCallback, useEffect, useState } from \"react\"\nimport type { TypedUseMutation } from \"@reduxjs/toolkit/query/react\"\nimport { createSearchParams } from \"react-router\"\n// eslint-disable-next-line @typescript-eslint/no-restricted-imports\nimport { useSelector } from \"react-redux\"\n\nimport { type AuthFactor, type User } from \"../api\"\nimport {\n type OAuth2CodeChallenge,\n type OAuth2CodeChallengeLengths,\n type OAuth2ReceiveCodeUrlSearchParams,\n type OAuth2RequestCodeUrlSearchParams,\n generateOAuth2CodeChallenge,\n makeOAuth2StorageKey,\n} from \"../utils/auth\"\nimport { useLocation, useNavigate, useSearchParams } from \"./router\"\nimport { type ExchangeOAuth2CodeArg } from \"../api/endpoints/session\"\nimport cookies from \"../utils/cookies\"\nimport { generateSecureRandomString } from \"../utils/general\"\nimport { getSessionMetadataCookieName } from \"../utils/settings\"\n\n// -----------------------------------------------------------------------------\n// Session\n// -----------------------------------------------------------------------------\n\nexport type SelectIsLoggedIn = (state: any) => boolean\n\nexport interface SessionMetadata {\n user_id: User[\"id\"]\n user_type: \"teacher\" | \"student\" | \"indy\"\n auth_factors: Array<AuthFactor[\"type\"]>\n otp_bypass_token_exists: boolean\n}\n\nexport function useSessionMetadata<T = SessionMetadata>(\n selectIsLoggedIn: SelectIsLoggedIn,\n): T | undefined {\n return useSelector(selectIsLoggedIn)\n ? (JSON.parse(cookies.get(getSessionMetadataCookieName()) as string) as T)\n : undefined\n}\n\n/**\n * A utility function to predefine a useSessionMetadata hook.\n * @param cookieName The name of the session metadata cookie.\n * @returns An object containing the session metadata.\n */\nuseSessionMetadata.predefine = <SessionMetadata,>(\n selectIsLoggedIn: SelectIsLoggedIn,\n) => {\n return () => useSessionMetadata<SessionMetadata>(selectIsLoggedIn)\n}\n\nexport type UseSessionChildrenFunction<Required extends boolean> = (\n metadata: Required extends true\n ? SessionMetadata\n : SessionMetadata | undefined,\n) => ReactNode\n\nexport type UseSessionChildren<\n UserType extends SessionMetadata[\"user_type\"] | undefined,\n> =\n | ReactNode\n | (UserType extends undefined\n ? UseSessionChildrenFunction<false>\n : UseSessionChildrenFunction<true>)\n\nexport type UseSessionOptions<\n UserType extends SessionMetadata[\"user_type\"] | undefined,\n> = Partial<{\n userType: UserType\n next: boolean\n}>\n\nexport function useSession<\n UserType extends SessionMetadata[\"user_type\"] | undefined = undefined,\n>(\n selectIsLoggedIn: SelectIsLoggedIn,\n children: UseSessionChildren<UserType>,\n options: UseSessionOptions<UserType> = {},\n) {\n const { userType, next = true } = options\n\n const { pathname } = useLocation()\n const navigate = useNavigate()\n const sessionMetadata = useSessionMetadata(selectIsLoggedIn)\n\n const loginRequired =\n userType && (!sessionMetadata || sessionMetadata.user_type !== userType)\n\n useEffect(() => {\n if (loginRequired) {\n navigate({\n pathname:\n \"/login\" +\n {\n teacher: \"/teacher\",\n student: \"/student\",\n indy: \"/independent\",\n }[userType],\n search: next\n ? createSearchParams({ next: pathname }).toString()\n : undefined,\n })\n }\n }, [navigate, loginRequired, userType, next, pathname])\n\n if (loginRequired) return <></>\n\n if (typeof children === \"function\") {\n return sessionMetadata\n ? (children as UseSessionChildrenFunction<true>)(sessionMetadata)\n : (children as UseSessionChildrenFunction<false>)(sessionMetadata)\n }\n\n return children\n}\n\n// -----------------------------------------------------------------------------\n// OAuth2\n// -----------------------------------------------------------------------------\n\nexport function useOAuth2State(\n provider: string,\n length: number = 32,\n storageKey: string = \"state\",\n): [string | undefined, () => void] {\n const oAuth2StorageKey = makeOAuth2StorageKey(provider, storageKey)\n const storageValue = sessionStorage.getItem(oAuth2StorageKey)\n\n const [_state, _setState] = useState<string>()\n\n useEffect(() => {\n let state: string\n if (storageValue && storageValue.length === length) {\n state = storageValue\n } else {\n state = generateSecureRandomString(length)\n sessionStorage.setItem(oAuth2StorageKey, state)\n }\n\n _setState(state)\n }, [oAuth2StorageKey, storageValue, length])\n\n const resetState = useCallback(() => {\n sessionStorage.removeItem(oAuth2StorageKey)\n _setState(undefined)\n }, [oAuth2StorageKey])\n\n return [_state, resetState]\n}\n\nexport function useOAuth2CodeChallenge(\n provider: string,\n length: OAuth2CodeChallengeLengths = 128,\n storageKey: string = \"codeChallenge\",\n): [OAuth2CodeChallenge | undefined, () => void] {\n const oAuth2StorageKey = makeOAuth2StorageKey(provider, storageKey)\n const storageValue = sessionStorage.getItem(oAuth2StorageKey)\n\n const [_codeChallenge, _setCodeChallenge] = useState<OAuth2CodeChallenge>()\n\n useEffect(() => {\n let codeChallenge: OAuth2CodeChallenge | undefined\n if (storageValue) {\n const storageJsonValue: unknown = JSON.parse(storageValue)\n if (\n typeof storageJsonValue === \"object\" &&\n storageJsonValue &&\n \"verifier\" in storageJsonValue &&\n typeof storageJsonValue.verifier == \"string\" &&\n storageJsonValue.verifier.length === length &&\n \"challenge\" in storageJsonValue &&\n typeof storageJsonValue.challenge === \"string\" &&\n \"method\" in storageJsonValue &&\n storageJsonValue.method === \"S256\"\n ) {\n codeChallenge = {\n verifier: storageJsonValue.verifier,\n challenge: storageJsonValue.challenge,\n method: storageJsonValue.method,\n }\n }\n }\n\n if (codeChallenge) _setCodeChallenge(codeChallenge)\n else {\n generateOAuth2CodeChallenge(length)\n .then(codeChallenge => {\n sessionStorage.setItem(\n oAuth2StorageKey,\n JSON.stringify(codeChallenge),\n )\n\n _setCodeChallenge(codeChallenge)\n })\n .catch(error => {\n if (error) console.error(error)\n })\n }\n }, [oAuth2StorageKey, storageValue, length])\n\n const resetCodeChallenge = useCallback(() => {\n sessionStorage.removeItem(oAuth2StorageKey)\n _setCodeChallenge(undefined)\n }, [oAuth2StorageKey])\n\n return [_codeChallenge, resetCodeChallenge]\n}\n\ninterface BaseUseOAuth2KwArgs<SessionMetadata> {\n provider: string\n authUri: string\n clientId: string\n redirectUri: string\n scope: string\n responseType?: \"code\"\n accessType?: \"offline\"\n prompt?: string\n useLoginMutation: TypedUseMutation<\n SessionMetadata,\n ExchangeOAuth2CodeArg,\n any\n >\n onCreateSession: (result: SessionMetadata) => void\n onRetrieveSession: (metadata: SessionMetadata) => void\n}\n\ninterface UseOAuth2KwArgs<SessionMetadata>\n extends BaseUseOAuth2KwArgs<SessionMetadata> {\n useSessionMetadata: () => SessionMetadata | undefined\n}\n\nexport type OAuth2 = [string, OAuth2RequestCodeUrlSearchParams] | []\n\n// https://datatracker.ietf.org/doc/html/rfc7636\nfunction useOAuth2Internal<SessionMetadata>({\n provider,\n authUri,\n clientId,\n redirectUri,\n scope,\n responseType = \"code\",\n accessType = \"offline\",\n prompt,\n useSessionMetadata,\n useLoginMutation,\n onCreateSession,\n onRetrieveSession,\n}: UseOAuth2KwArgs<SessionMetadata>): OAuth2 {\n const [state, resetState] = useOAuth2State(provider)\n const [\n {\n verifier: codeVerifier,\n challenge: codeChallenge,\n method: codeChallengeMethod,\n } = {},\n resetCodeChallenge,\n ] = useOAuth2CodeChallenge(provider)\n const [\n login,\n {\n originalArgs: loginArgs = {} as ExchangeOAuth2CodeArg,\n isLoading: loginIsLoading,\n isError: loginIsError,\n },\n ] = useLoginMutation()\n const sessionMetadata = useSessionMetadata()\n const navigate = useNavigate()\n const searchParams =\n useSearchParams({ code: yup.string(), state: yup.string() }) || {}\n const location = useLocation<OAuth2ReceiveCodeUrlSearchParams>()\n\n const locationState = location.state || {}\n\n useEffect(() => {\n // If the the auth provider has redirected back to our site with the\n // expected search params, we redirect to the current page to remove them.\n if (searchParams.code && searchParams.state) {\n navigate<OAuth2ReceiveCodeUrlSearchParams>(\".\", {\n // Removes the URL containing the search params from the history stack.\n replace: true,\n // Ensure we don't break the auth flow by navigating to another page.\n next: false,\n // Store the search params in the page's state instead.\n state: { code: searchParams.code, state: searchParams.state },\n })\n }\n }, [searchParams.code, searchParams.state, navigate])\n\n useEffect(() => {\n // If we're already logged in, no need to log in again.\n if (sessionMetadata) onRetrieveSession(sessionMetadata)\n else if (\n // If the state and code verifier have been generated...\n state &&\n codeVerifier &&\n // ...and the page's state contains a code...\n locationState.code &&\n // ...and the page's state contains the stored state...\n locationState.state === state &&\n // ...and the login endpoint was not called with the current values or has\n // not returned an error...\n (loginArgs.code !== locationState.code ||\n loginArgs.code_verifier !== codeVerifier ||\n loginArgs.redirect_uri !== redirectUri ||\n !loginIsError) &&\n // ...and the login endpoint is not currently being called...\n !loginIsLoading\n ) {\n // ...call the login endpoint.\n login({\n code: locationState.code,\n code_verifier: codeVerifier,\n redirect_uri: redirectUri,\n })\n .unwrap()\n .then(onCreateSession)\n .catch(() => {\n navigate(\".\", {\n replace: true,\n state: {\n notifications: [\n {\n props: {\n error: true,\n children: \"Failed to login. Please try again.\",\n },\n },\n ],\n },\n })\n })\n .finally(() => {\n resetState()\n resetCodeChallenge()\n })\n }\n }, [\n navigate,\n redirectUri,\n // State\n state,\n locationState.state,\n resetState,\n // Code\n codeVerifier,\n locationState.code,\n resetCodeChallenge,\n // Login\n login,\n loginIsLoading,\n loginIsError,\n loginArgs.code,\n loginArgs.code_verifier,\n loginArgs.redirect_uri,\n // Session\n sessionMetadata,\n onCreateSession,\n onRetrieveSession,\n ])\n\n if (state && codeChallenge && codeChallengeMethod) {\n const urlSearchParams: OAuth2RequestCodeUrlSearchParams = {\n client_id: clientId,\n redirect_uri: redirectUri,\n scope,\n response_type: responseType,\n access_type: accessType,\n state,\n code_challenge: codeChallenge,\n code_challenge_method: codeChallengeMethod,\n }\n\n if (prompt) urlSearchParams[\"prompt\"] = prompt\n\n return [\n authUri + \"?\" + new URLSearchParams(urlSearchParams).toString(),\n urlSearchParams,\n ]\n }\n\n return []\n}\n\nexport const useOAuth2: {\n <SessionMetadata>(kwargs: UseOAuth2KwArgs<SessionMetadata>): OAuth2\n (kwargs: BaseUseOAuth2KwArgs<SessionMetadata>): OAuth2\n} = <_SessionMetadata,>(\n kwargs:\n | UseOAuth2KwArgs<_SessionMetadata>\n | BaseUseOAuth2KwArgs<SessionMetadata>,\n): OAuth2 => {\n return useOAuth2Internal(\n // @ts-expect-error value is assignable\n \"useSessionMetadata\" in kwargs ? kwargs : { ...kwargs, useSessionMetadata },\n )\n}\n"],"names":["useNavigate","navigate","_useNavigate","searchParams","useSearchParams","toOrDelta","options","next","_options","useLocation","_useLocation","shape","validateOptions","_useSearchParams","tryValidateSync","objectSchema","useParams","params","_useParams","useParamsRequired","children","onValidationError","onValidationSuccess","useEffect","jsx","Fragment","useSessionMetadata","selectIsLoggedIn","useSelector","cookies","getSessionMetadataCookieName","useSession","userType","pathname","sessionMetadata","loginRequired","createSearchParams","useOAuth2State","provider","length","storageKey","oAuth2StorageKey","makeOAuth2StorageKey","storageValue","_state","_setState","useState","state","generateSecureRandomString","resetState","useCallback","useOAuth2CodeChallenge","_codeChallenge","_setCodeChallenge","codeChallenge","storageJsonValue","generateOAuth2CodeChallenge","error","resetCodeChallenge","useOAuth2Internal","authUri","clientId","redirectUri","scope","responseType","accessType","prompt","useLoginMutation","onCreateSession","onRetrieveSession","codeVerifier","codeChallengeMethod","login","loginArgs","loginIsLoading","loginIsError","yup","locationState","urlSearchParams","useOAuth2","kwargs"],"mappings":"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"}
@@ -1,23 +1,23 @@
1
- import { jsx as V, Fragment as j } from "react/jsx-runtime";
1
+ import { jsx as E, Fragment as V } from "react/jsx-runtime";
2
2
  import * as L from "yup";
3
- import { object as E } from "yup";
3
+ import { object as j } from "yup";
4
4
  import { useEffect as d, useState as J, useCallback as $ } from "react";
5
- import F from "js-cookie";
6
- import { useNavigate as T, useLocation as w, useSearchParams as z, useParams as B, createSearchParams as G } from "react-router";
7
- import { useSelector as H } from "react-redux";
5
+ import { useNavigate as F, useLocation as T, useSearchParams as w, useParams as z, createSearchParams as B } from "react-router";
6
+ import { useSelector as G } from "react-redux";
8
7
  import "@reduxjs/toolkit/query/react";
9
8
  import "@reduxjs/toolkit";
10
- import { makeOAuth2StorageKey as K, generateOAuth2CodeChallenge as Q } from "./utils/auth.es.js";
9
+ import { makeOAuth2StorageKey as K, generateOAuth2CodeChallenge as H } from "./utils/auth.es.js";
11
10
  import "@mui/material";
12
- import { generateSecureRandomString as W } from "./utils/general.es.js";
11
+ import { generateSecureRandomString as Q } from "./utils/general.es.js";
13
12
  import "@mui/icons-material";
14
13
  import "./schemas-UIk-meAN.js";
15
14
  import "./urls-BG788CnL.js";
16
15
  import { tryValidateSync as R } from "./utils/schema.es.js";
17
16
  import "./palette-CYwuLBW7.js";
17
+ import W from "./utils/cookies.es.js";
18
18
  import { getSessionMetadataCookieName as X } from "./utils/settings.es.js";
19
19
  function _() {
20
- const e = T(), o = q();
20
+ const e = F(), o = q();
21
21
  return (a, t = void 0) => {
22
22
  if (typeof a == "number") e(a);
23
23
  else {
@@ -30,15 +30,15 @@ function _() {
30
30
  };
31
31
  }
32
32
  function k() {
33
- return w();
33
+ return T();
34
34
  }
35
35
  function q(e, o) {
36
- const a = Object.fromEntries(z()[0].entries());
37
- return e ? R(a, E(e), o) : a;
36
+ const a = Object.fromEntries(w()[0].entries());
37
+ return e ? R(a, j(e), o) : a;
38
38
  }
39
39
  function Y(e, o) {
40
- const a = B();
41
- return e ? R(a, E(e), o) : a;
40
+ const a = z();
41
+ return e ? R(a, j(e), o) : a;
42
42
  }
43
43
  function ve({
44
44
  shape: e,
@@ -55,10 +55,10 @@ function ve({
55
55
  },
56
56
  []
57
57
  // eslint-disable-line react-hooks/exhaustive-deps
58
- ), n ? o(n) : /* @__PURE__ */ V(j, {});
58
+ ), n ? o(n) : /* @__PURE__ */ E(V, {});
59
59
  }
60
60
  function S(e) {
61
- return H(e) ? JSON.parse(F.get(X())) : void 0;
61
+ return G(e) ? JSON.parse(W.get(X())) : void 0;
62
62
  }
63
63
  S.predefine = (e) => () => S(e);
64
64
  function ye(e, o, a = {}) {
@@ -70,15 +70,15 @@ function ye(e, o, a = {}) {
70
70
  student: "/student",
71
71
  indy: "/independent"
72
72
  }[t],
73
- search: r ? G({ next: n }).toString() : void 0
73
+ search: r ? B({ next: n }).toString() : void 0
74
74
  });
75
- }, [c, i, t, r, n]), i ? /* @__PURE__ */ V(j, {}) : typeof o == "function" ? o(u) : o;
75
+ }, [c, i, t, r, n]), i ? /* @__PURE__ */ E(V, {}) : typeof o == "function" ? o(u) : o;
76
76
  }
77
77
  function Z(e, o = 32, a = "state") {
78
78
  const t = K(e, a), r = sessionStorage.getItem(t), [n, c] = J();
79
79
  d(() => {
80
80
  let i;
81
- r && r.length === o ? i = r : (i = W(o), sessionStorage.setItem(t, i)), c(i);
81
+ r && r.length === o ? i = r : (i = Q(o), sessionStorage.setItem(t, i)), c(i);
82
82
  }, [t, r, o]);
83
83
  const u = $(() => {
84
84
  sessionStorage.removeItem(t), c(void 0);
@@ -97,7 +97,7 @@ function D(e, o = 128, a = "codeChallenge") {
97
97
  method: s.method
98
98
  });
99
99
  }
100
- i ? c(i) : Q(o).then((s) => {
100
+ i ? c(i) : H(o).then((s) => {
101
101
  sessionStorage.setItem(
102
102
  t,
103
103
  JSON.stringify(s)
@@ -128,8 +128,8 @@ function U({
128
128
  const [g, A] = Z(e), [
129
129
  {
130
130
  verifier: h,
131
- challenge: I,
132
- method: x
131
+ challenge: x,
132
+ method: I
133
133
  } = {},
134
134
  O
135
135
  ] = D(e), [
@@ -201,7 +201,7 @@ function U({
201
201
  v,
202
202
  C,
203
203
  P
204
- ]), g && I && x) {
204
+ ]), g && x && I) {
205
205
  const y = {
206
206
  client_id: a,
207
207
  redirect_uri: t,
@@ -209,8 +209,8 @@ function U({
209
209
  response_type: n,
210
210
  access_type: c,
211
211
  state: g,
212
- code_challenge: I,
213
- code_challenge_method: x
212
+ code_challenge: x,
213
+ code_challenge_method: I
214
214
  };
215
215
  return u && (y.prompt = u), [
216
216
  o + "?" + new URLSearchParams(y).toString(),
@@ -235,4 +235,4 @@ export {
235
235
  ve as i,
236
236
  S as u
237
237
  };
238
- //# sourceMappingURL=auth-D-8t6wfR.js.map
238
+ //# sourceMappingURL=auth-C3UdJFcP.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth-C3UdJFcP.js","sources":["../src/hooks/router.tsx","../src/hooks/auth.tsx"],"sourcesContent":["import {\n type Location,\n type Params,\n type To,\n type NavigateOptions as _NavigateOptions,\n useLocation as _useLocation,\n useNavigate as _useNavigate,\n useParams as _useParams,\n useSearchParams as _useSearchParams,\n} from \"react-router\"\nimport { type ObjectShape, object as objectSchema } from \"yup\"\nimport { type ReactNode, useEffect } from \"react\"\n\nimport {\n type ObjectSchemaFromShape,\n type TryValidateSyncOnErrorRT,\n type TryValidateSyncOptions,\n type TryValidateSyncRT,\n tryValidateSync,\n} from \"../utils/schema\"\nimport { type PageState } from \"../components/page\"\nimport { type ReadOnly } from \"../utils/router\"\n\nexport type NavigateOptions<\n State extends Record<string, any> = Record<string, any>,\n> = Omit<_NavigateOptions, \"state\"> & {\n state?: State & Partial<PageState>\n next?: boolean\n}\n\nexport type Navigate = {\n <State extends Record<string, any> = Record<string, any>>(\n to: To,\n options?: NavigateOptions<State>,\n ): void\n (delta: number): void\n}\n\nexport function useNavigate(): Navigate {\n const navigate = _useNavigate()\n const searchParams = useSearchParams()\n\n return (\n toOrDelta: To | number,\n options: (NavigateOptions & { next?: boolean }) | undefined = undefined,\n ) => {\n if (typeof toOrDelta === \"number\") void navigate(toOrDelta)\n else {\n const { next = true, ..._options } = options || {}\n\n void navigate(\n next && \"next\" in searchParams ? searchParams.next : toOrDelta,\n _options,\n )\n }\n }\n}\n\nexport function useLocation<State = {}>() {\n return _useLocation() as Location<null | Partial<PageState & State>>\n}\n\n// -----------------------------------------------------------------------------\n// Use Search Params\n// -----------------------------------------------------------------------------\n\nexport function useSearchParams(): { [k: string]: string }\n\nexport function useSearchParams<\n OnErrorRT extends TryValidateSyncOnErrorRT<ObjectSchemaFromShape<Shape>>,\n Shape extends ObjectShape = {},\n>(\n shape: Shape,\n validateOptions?: TryValidateSyncOptions<\n ObjectSchemaFromShape<Shape>,\n OnErrorRT\n >,\n): TryValidateSyncRT<ObjectSchemaFromShape<Shape>, OnErrorRT>\n\nexport function useSearchParams<\n OnErrorRT extends TryValidateSyncOnErrorRT<ObjectSchemaFromShape<Shape>>,\n Shape extends ObjectShape = {},\n>(\n shape?: Shape,\n validateOptions?: TryValidateSyncOptions<\n ObjectSchemaFromShape<Shape>,\n OnErrorRT\n >,\n) {\n const searchParams = Object.fromEntries(_useSearchParams()[0].entries())\n if (!shape) return searchParams\n\n return tryValidateSync(searchParams, objectSchema(shape), validateOptions)\n}\n\n// -----------------------------------------------------------------------------\n// Use Params\n// -----------------------------------------------------------------------------\n\nexport function useParams(): ReadOnly<Params<string>>\n\nexport function useParams<\n OnErrorRT extends TryValidateSyncOnErrorRT<ObjectSchemaFromShape<Shape>>,\n Shape extends ObjectShape = {},\n>(\n shape: Shape,\n validateOptions?: TryValidateSyncOptions<\n ObjectSchemaFromShape<Shape>,\n OnErrorRT\n >,\n): TryValidateSyncRT<ObjectSchemaFromShape<Shape>, OnErrorRT>\n\nexport function useParams<\n OnErrorRT extends TryValidateSyncOnErrorRT<ObjectSchemaFromShape<Shape>>,\n Shape extends ObjectShape = {},\n>(\n shape?: Shape,\n validateOptions?: TryValidateSyncOptions<\n ObjectSchemaFromShape<Shape>,\n OnErrorRT\n >,\n) {\n const params = _useParams()\n if (!shape) return params\n\n return tryValidateSync(params, objectSchema(shape), validateOptions)\n}\n\nexport function useParamsRequired<\n OnErrorRT extends TryValidateSyncOnErrorRT<ObjectSchemaFromShape<Shape>>,\n Shape extends ObjectShape = {},\n>({\n shape,\n children,\n onValidationError,\n onValidationSuccess = () => {},\n validateOptions,\n}: {\n shape: Shape\n children: (\n data: NonNullable<\n TryValidateSyncRT<ObjectSchemaFromShape<Shape>, OnErrorRT>\n >,\n ) => ReactNode\n onValidationError: (navigate: Navigate) => void\n onValidationSuccess?: (\n params: NonNullable<\n TryValidateSyncRT<ObjectSchemaFromShape<Shape>, OnErrorRT>\n >,\n ) => void\n validateOptions?: TryValidateSyncOptions<\n ObjectSchemaFromShape<Shape>,\n OnErrorRT\n >\n}) {\n const params = useParams(shape, validateOptions)\n const navigate = useNavigate()\n\n useEffect(\n () => {\n if (params) onValidationSuccess(params)\n else onValidationError(navigate)\n },\n [], // eslint-disable-line react-hooks/exhaustive-deps\n )\n\n return params ? children(params) : <></>\n}\n","import * as yup from \"yup\"\nimport { type ReactNode, useCallback, useEffect, useState } from \"react\"\nimport type { TypedUseMutation } from \"@reduxjs/toolkit/query/react\"\nimport { createSearchParams } from \"react-router\"\n// eslint-disable-next-line @typescript-eslint/no-restricted-imports\nimport { useSelector } from \"react-redux\"\n\nimport { type AuthFactor, type User } from \"../api\"\nimport {\n type OAuth2CodeChallenge,\n type OAuth2CodeChallengeLengths,\n type OAuth2ReceiveCodeUrlSearchParams,\n type OAuth2RequestCodeUrlSearchParams,\n generateOAuth2CodeChallenge,\n makeOAuth2StorageKey,\n} from \"../utils/auth\"\nimport { useLocation, useNavigate, useSearchParams } from \"./router\"\nimport { type ExchangeOAuth2CodeArg } from \"../api/endpoints/session\"\nimport cookies from \"../utils/cookies\"\nimport { generateSecureRandomString } from \"../utils/general\"\nimport { getSessionMetadataCookieName } from \"../utils/settings\"\n\n// -----------------------------------------------------------------------------\n// Session\n// -----------------------------------------------------------------------------\n\nexport type SelectIsLoggedIn = (state: any) => boolean\n\nexport interface SessionMetadata {\n user_id: User[\"id\"]\n user_type: \"teacher\" | \"student\" | \"indy\"\n auth_factors: Array<AuthFactor[\"type\"]>\n otp_bypass_token_exists: boolean\n}\n\nexport function useSessionMetadata<T = SessionMetadata>(\n selectIsLoggedIn: SelectIsLoggedIn,\n): T | undefined {\n return useSelector(selectIsLoggedIn)\n ? (JSON.parse(cookies.get(getSessionMetadataCookieName()) as string) as T)\n : undefined\n}\n\n/**\n * A utility function to predefine a useSessionMetadata hook.\n * @param cookieName The name of the session metadata cookie.\n * @returns An object containing the session metadata.\n */\nuseSessionMetadata.predefine = <SessionMetadata,>(\n selectIsLoggedIn: SelectIsLoggedIn,\n) => {\n return () => useSessionMetadata<SessionMetadata>(selectIsLoggedIn)\n}\n\nexport type UseSessionChildrenFunction<Required extends boolean> = (\n metadata: Required extends true\n ? SessionMetadata\n : SessionMetadata | undefined,\n) => ReactNode\n\nexport type UseSessionChildren<\n UserType extends SessionMetadata[\"user_type\"] | undefined,\n> =\n | ReactNode\n | (UserType extends undefined\n ? UseSessionChildrenFunction<false>\n : UseSessionChildrenFunction<true>)\n\nexport type UseSessionOptions<\n UserType extends SessionMetadata[\"user_type\"] | undefined,\n> = Partial<{\n userType: UserType\n next: boolean\n}>\n\nexport function useSession<\n UserType extends SessionMetadata[\"user_type\"] | undefined = undefined,\n>(\n selectIsLoggedIn: SelectIsLoggedIn,\n children: UseSessionChildren<UserType>,\n options: UseSessionOptions<UserType> = {},\n) {\n const { userType, next = true } = options\n\n const { pathname } = useLocation()\n const navigate = useNavigate()\n const sessionMetadata = useSessionMetadata(selectIsLoggedIn)\n\n const loginRequired =\n userType && (!sessionMetadata || sessionMetadata.user_type !== userType)\n\n useEffect(() => {\n if (loginRequired) {\n navigate({\n pathname:\n \"/login\" +\n {\n teacher: \"/teacher\",\n student: \"/student\",\n indy: \"/independent\",\n }[userType],\n search: next\n ? createSearchParams({ next: pathname }).toString()\n : undefined,\n })\n }\n }, [navigate, loginRequired, userType, next, pathname])\n\n if (loginRequired) return <></>\n\n if (typeof children === \"function\") {\n return sessionMetadata\n ? (children as UseSessionChildrenFunction<true>)(sessionMetadata)\n : (children as UseSessionChildrenFunction<false>)(sessionMetadata)\n }\n\n return children\n}\n\n// -----------------------------------------------------------------------------\n// OAuth2\n// -----------------------------------------------------------------------------\n\nexport function useOAuth2State(\n provider: string,\n length: number = 32,\n storageKey: string = \"state\",\n): [string | undefined, () => void] {\n const oAuth2StorageKey = makeOAuth2StorageKey(provider, storageKey)\n const storageValue = sessionStorage.getItem(oAuth2StorageKey)\n\n const [_state, _setState] = useState<string>()\n\n useEffect(() => {\n let state: string\n if (storageValue && storageValue.length === length) {\n state = storageValue\n } else {\n state = generateSecureRandomString(length)\n sessionStorage.setItem(oAuth2StorageKey, state)\n }\n\n _setState(state)\n }, [oAuth2StorageKey, storageValue, length])\n\n const resetState = useCallback(() => {\n sessionStorage.removeItem(oAuth2StorageKey)\n _setState(undefined)\n }, [oAuth2StorageKey])\n\n return [_state, resetState]\n}\n\nexport function useOAuth2CodeChallenge(\n provider: string,\n length: OAuth2CodeChallengeLengths = 128,\n storageKey: string = \"codeChallenge\",\n): [OAuth2CodeChallenge | undefined, () => void] {\n const oAuth2StorageKey = makeOAuth2StorageKey(provider, storageKey)\n const storageValue = sessionStorage.getItem(oAuth2StorageKey)\n\n const [_codeChallenge, _setCodeChallenge] = useState<OAuth2CodeChallenge>()\n\n useEffect(() => {\n let codeChallenge: OAuth2CodeChallenge | undefined\n if (storageValue) {\n const storageJsonValue: unknown = JSON.parse(storageValue)\n if (\n typeof storageJsonValue === \"object\" &&\n storageJsonValue &&\n \"verifier\" in storageJsonValue &&\n typeof storageJsonValue.verifier == \"string\" &&\n storageJsonValue.verifier.length === length &&\n \"challenge\" in storageJsonValue &&\n typeof storageJsonValue.challenge === \"string\" &&\n \"method\" in storageJsonValue &&\n storageJsonValue.method === \"S256\"\n ) {\n codeChallenge = {\n verifier: storageJsonValue.verifier,\n challenge: storageJsonValue.challenge,\n method: storageJsonValue.method,\n }\n }\n }\n\n if (codeChallenge) _setCodeChallenge(codeChallenge)\n else {\n generateOAuth2CodeChallenge(length)\n .then(codeChallenge => {\n sessionStorage.setItem(\n oAuth2StorageKey,\n JSON.stringify(codeChallenge),\n )\n\n _setCodeChallenge(codeChallenge)\n })\n .catch(error => {\n if (error) console.error(error)\n })\n }\n }, [oAuth2StorageKey, storageValue, length])\n\n const resetCodeChallenge = useCallback(() => {\n sessionStorage.removeItem(oAuth2StorageKey)\n _setCodeChallenge(undefined)\n }, [oAuth2StorageKey])\n\n return [_codeChallenge, resetCodeChallenge]\n}\n\ninterface BaseUseOAuth2KwArgs<SessionMetadata> {\n provider: string\n authUri: string\n clientId: string\n redirectUri: string\n scope: string\n responseType?: \"code\"\n accessType?: \"offline\"\n prompt?: string\n useLoginMutation: TypedUseMutation<\n SessionMetadata,\n ExchangeOAuth2CodeArg,\n any\n >\n onCreateSession: (result: SessionMetadata) => void\n onRetrieveSession: (metadata: SessionMetadata) => void\n}\n\ninterface UseOAuth2KwArgs<SessionMetadata>\n extends BaseUseOAuth2KwArgs<SessionMetadata> {\n useSessionMetadata: () => SessionMetadata | undefined\n}\n\nexport type OAuth2 = [string, OAuth2RequestCodeUrlSearchParams] | []\n\n// https://datatracker.ietf.org/doc/html/rfc7636\nfunction useOAuth2Internal<SessionMetadata>({\n provider,\n authUri,\n clientId,\n redirectUri,\n scope,\n responseType = \"code\",\n accessType = \"offline\",\n prompt,\n useSessionMetadata,\n useLoginMutation,\n onCreateSession,\n onRetrieveSession,\n}: UseOAuth2KwArgs<SessionMetadata>): OAuth2 {\n const [state, resetState] = useOAuth2State(provider)\n const [\n {\n verifier: codeVerifier,\n challenge: codeChallenge,\n method: codeChallengeMethod,\n } = {},\n resetCodeChallenge,\n ] = useOAuth2CodeChallenge(provider)\n const [\n login,\n {\n originalArgs: loginArgs = {} as ExchangeOAuth2CodeArg,\n isLoading: loginIsLoading,\n isError: loginIsError,\n },\n ] = useLoginMutation()\n const sessionMetadata = useSessionMetadata()\n const navigate = useNavigate()\n const searchParams =\n useSearchParams({ code: yup.string(), state: yup.string() }) || {}\n const location = useLocation<OAuth2ReceiveCodeUrlSearchParams>()\n\n const locationState = location.state || {}\n\n useEffect(() => {\n // If the the auth provider has redirected back to our site with the\n // expected search params, we redirect to the current page to remove them.\n if (searchParams.code && searchParams.state) {\n navigate<OAuth2ReceiveCodeUrlSearchParams>(\".\", {\n // Removes the URL containing the search params from the history stack.\n replace: true,\n // Ensure we don't break the auth flow by navigating to another page.\n next: false,\n // Store the search params in the page's state instead.\n state: { code: searchParams.code, state: searchParams.state },\n })\n }\n }, [searchParams.code, searchParams.state, navigate])\n\n useEffect(() => {\n // If we're already logged in, no need to log in again.\n if (sessionMetadata) onRetrieveSession(sessionMetadata)\n else if (\n // If the state and code verifier have been generated...\n state &&\n codeVerifier &&\n // ...and the page's state contains a code...\n locationState.code &&\n // ...and the page's state contains the stored state...\n locationState.state === state &&\n // ...and the login endpoint was not called with the current values or has\n // not returned an error...\n (loginArgs.code !== locationState.code ||\n loginArgs.code_verifier !== codeVerifier ||\n loginArgs.redirect_uri !== redirectUri ||\n !loginIsError) &&\n // ...and the login endpoint is not currently being called...\n !loginIsLoading\n ) {\n // ...call the login endpoint.\n login({\n code: locationState.code,\n code_verifier: codeVerifier,\n redirect_uri: redirectUri,\n })\n .unwrap()\n .then(onCreateSession)\n .catch(() => {\n navigate(\".\", {\n replace: true,\n state: {\n notifications: [\n {\n props: {\n error: true,\n children: \"Failed to login. Please try again.\",\n },\n },\n ],\n },\n })\n })\n .finally(() => {\n resetState()\n resetCodeChallenge()\n })\n }\n }, [\n navigate,\n redirectUri,\n // State\n state,\n locationState.state,\n resetState,\n // Code\n codeVerifier,\n locationState.code,\n resetCodeChallenge,\n // Login\n login,\n loginIsLoading,\n loginIsError,\n loginArgs.code,\n loginArgs.code_verifier,\n loginArgs.redirect_uri,\n // Session\n sessionMetadata,\n onCreateSession,\n onRetrieveSession,\n ])\n\n if (state && codeChallenge && codeChallengeMethod) {\n const urlSearchParams: OAuth2RequestCodeUrlSearchParams = {\n client_id: clientId,\n redirect_uri: redirectUri,\n scope,\n response_type: responseType,\n access_type: accessType,\n state,\n code_challenge: codeChallenge,\n code_challenge_method: codeChallengeMethod,\n }\n\n if (prompt) urlSearchParams[\"prompt\"] = prompt\n\n return [\n authUri + \"?\" + new URLSearchParams(urlSearchParams).toString(),\n urlSearchParams,\n ]\n }\n\n return []\n}\n\nexport const useOAuth2: {\n <SessionMetadata>(kwargs: UseOAuth2KwArgs<SessionMetadata>): OAuth2\n (kwargs: BaseUseOAuth2KwArgs<SessionMetadata>): OAuth2\n} = <_SessionMetadata,>(\n kwargs:\n | UseOAuth2KwArgs<_SessionMetadata>\n | BaseUseOAuth2KwArgs<SessionMetadata>,\n): OAuth2 => {\n return useOAuth2Internal(\n // @ts-expect-error value is assignable\n \"useSessionMetadata\" in kwargs ? kwargs : { ...kwargs, useSessionMetadata },\n )\n}\n"],"names":["useNavigate","navigate","_useNavigate","searchParams","useSearchParams","toOrDelta","options","next","_options","useLocation","_useLocation","shape","validateOptions","_useSearchParams","tryValidateSync","objectSchema","useParams","params","_useParams","useParamsRequired","children","onValidationError","onValidationSuccess","useEffect","jsx","Fragment","useSessionMetadata","selectIsLoggedIn","useSelector","cookies","getSessionMetadataCookieName","useSession","userType","pathname","sessionMetadata","loginRequired","createSearchParams","useOAuth2State","provider","length","storageKey","oAuth2StorageKey","makeOAuth2StorageKey","storageValue","_state","_setState","useState","state","generateSecureRandomString","resetState","useCallback","useOAuth2CodeChallenge","_codeChallenge","_setCodeChallenge","codeChallenge","storageJsonValue","generateOAuth2CodeChallenge","error","resetCodeChallenge","useOAuth2Internal","authUri","clientId","redirectUri","scope","responseType","accessType","prompt","useLoginMutation","onCreateSession","onRetrieveSession","codeVerifier","codeChallengeMethod","login","loginArgs","loginIsLoading","loginIsError","yup","locationState","urlSearchParams","useOAuth2","kwargs"],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ import e from "@emotion/cache";
2
+ import "react";
3
+ import "react/jsx-runtime";
4
+ import "@mui/material";
5
+ import "@emotion/react";
6
+ import "react-redux";
7
+ /* empty css */
8
+ import "react-router";
9
+ function C({
10
+ key: t = "css",
11
+ // ensures all styles are generated with this prefix
12
+ prepend: r = !0,
13
+ // loads MUI-styles first so we can override them easily
14
+ ...o
15
+ } = {}) {
16
+ return e({ key: t, prepend: r, ...o });
17
+ }
18
+ const A = !0;
19
+ export {
20
+ A as D,
21
+ C as c
22
+ };
23
+ //# sourceMappingURL=common-BQDBPfA-.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"common-BQDBPfA-.js","sources":["../src/server/entry/common.ts"],"sourcesContent":["import createCache, {\n type Options as CreateEmotionCacheOptions,\n} from \"@emotion/cache\"\nimport { type FC } from \"react\"\n\nimport { type AppProps } from \"../App\"\nimport { type DefaultRoutesProps } from \"../DefaultRoutes\"\n\n/**\n * Creates a new Emotion cache instance.\n */\nexport function createEmotionCache(\n {\n key = \"css\", // ensures all styles are generated with this prefix\n prepend = true, // loads MUI-styles first so we can override them easily\n ...otherOptions\n } = {} as CreateEmotionCacheOptions,\n) {\n return createCache({ key, prepend, ...otherOptions })\n}\n\nexport type EntryAppProps = Pick<AppProps, \"emotionCache\" | \"children\">\n\nexport type EntryKwArgs = {\n App: FC<EntryAppProps>\n routes: DefaultRoutesProps[\"children\"]\n catchAllRoute?: DefaultRoutesProps[\"catchAll\"]\n createEmotionCacheOptions?: CreateEmotionCacheOptions\n}\n\nexport const DEFAULT_CATCH_ALL: DefaultRoutesProps[\"catchAll\"] = true\n"],"names":["createEmotionCache","key","prepend","otherOptions","createCache","DEFAULT_CATCH_ALL"],"mappings":";;;;;;;;AAWO,SAASA,EACd;AAAA,EACE,KAAAC,IAAM;AAAA;AAAA,EACN,SAAAC,IAAU;AAAA;AAAA,EACV,GAAGC;AACL,IAAI,IACJ;AACA,SAAOC,EAAY,EAAE,KAAAH,GAAK,SAAAC,GAAS,GAAGC,GAAc;AACtD;AAWO,MAAME,IAAoD;"}
@@ -0,0 +1,2 @@
1
+ "use strict";const u=require("@emotion/cache");require("react");require("react/jsx-runtime");require("@mui/material");require("@emotion/react");require("react-redux");;/* empty css */require("react-router");function i({key:e="css",prepend:r=!0,...t}={}){return u({key:e,prepend:r,...t})}const c=!0;exports.DEFAULT_CATCH_ALL=c;exports.createEmotionCache=i;
2
+ //# sourceMappingURL=common-Cxc7W70B.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"common-Cxc7W70B.cjs","sources":["../src/server/entry/common.ts"],"sourcesContent":["import createCache, {\n type Options as CreateEmotionCacheOptions,\n} from \"@emotion/cache\"\nimport { type FC } from \"react\"\n\nimport { type AppProps } from \"../App\"\nimport { type DefaultRoutesProps } from \"../DefaultRoutes\"\n\n/**\n * Creates a new Emotion cache instance.\n */\nexport function createEmotionCache(\n {\n key = \"css\", // ensures all styles are generated with this prefix\n prepend = true, // loads MUI-styles first so we can override them easily\n ...otherOptions\n } = {} as CreateEmotionCacheOptions,\n) {\n return createCache({ key, prepend, ...otherOptions })\n}\n\nexport type EntryAppProps = Pick<AppProps, \"emotionCache\" | \"children\">\n\nexport type EntryKwArgs = {\n App: FC<EntryAppProps>\n routes: DefaultRoutesProps[\"children\"]\n catchAllRoute?: DefaultRoutesProps[\"catchAll\"]\n createEmotionCacheOptions?: CreateEmotionCacheOptions\n}\n\nexport const DEFAULT_CATCH_ALL: DefaultRoutesProps[\"catchAll\"] = true\n"],"names":["createEmotionCache","key","prepend","otherOptions","createCache","DEFAULT_CATCH_ALL"],"mappings":"6NAWO,SAASA,EACd,CACE,IAAAC,EAAM,MACN,QAAAC,EAAU,GACV,GAAGC,CACL,EAAI,GACJ,CACA,OAAOC,EAAY,CAAE,IAAAH,EAAK,QAAAC,EAAS,GAAGC,EAAc,CACtD,CAWO,MAAME,EAAoD"}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("../../index-Da4T5FYK.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-BhTYGZm3.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-De-EwYmr.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-Uk65JJpc.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 w=require("../index-Da4T5FYK.cjs"),z=require("../index-C8T09ieQ.cjs"),x=require("../Navigate-CioAG5Y-.cjs"),R=require("../LinkButton-BbGJHgCY.cjs"),S=require("../index-JY2Et3RQ.cjs"),o=require("react/jsx-runtime"),a=require("@mui/material"),f=require("react"),_=require("../utils/general.cjs.js"),b=require("@mui/icons-material"),O=require("../Countdown-DJ5b4A3w.cjs"),E=require("../Image-B_6DmnVe.cjs"),q=require("../api-G8CV5bUa.cjs"),M=require("../api-DIgp_6Vr.cjs"),U=({open:e=!1,onClick:n,...t})=>{const[s,i]=f.useState(e);return f.useEffect(()=>{i(e)},[e]),o.jsx(a.Tooltip,{open:s,onMouseOver:()=>{s||i(!0)},onMouseLeave:()=>{i(!1)},onClick:_.wrap({after:()=>{i(!s)}},n),...t})},$=({content:e,children:n=o.jsx(b.ContentCopy,{}),...t})=>o.jsx(a.IconButton,{"data-testid":"copy-icon-button",onClick:()=>{navigator.clipboard.writeText(e)},...t,children:n}),D=({children:e="Download",endIcon:n=o.jsx(b.Download,{}),file:t,...s})=>{let i,c;if("mimeType"in t){const{text:u,mimeType:d,name:r,charset:p="utf-8"}=t;let{extension:g}=t;g||(g="."+{plain:"txt",csv:"csv"}[d]),c={download:r+g,href:`data:text/${d};charset=${p},${encodeURIComponent(u)}`}}else i=URL.createObjectURL(t),c={href:i};return f.useEffect(()=>()=>{i&&URL.revokeObjectURL(i)},[i]),o.jsx(a.Button,{endIcon:n,...s,...c,children:e})},F=({containerProps:e,toolbarProps:n,elevation:t=4,children:s,...i})=>{const c=a.useScrollTrigger({disableHysteresis:!0,threshold:0});return f.cloneElement(o.jsx(a.AppBar,{elevation:t,...i,children:o.jsx(a.Container,{...e,children:o.jsx(a.Toolbar,{...n,children:s})})}),{position:c?"fixed":"sticky"})},G=({children:e,inputProps:n,...t})=>o.jsxs(a.Button,{component:"label",...t,children:[e,o.jsx("input",{type:"file",hidden:!0,...n})]}),N=({styleType:e,listProps:n={},pl:t=4,children:s})=>{const{sx:i,...c}=n,u={display:"list-item"};return o.jsx(a.List,{sx:{listStyleType:e,pl:t,".MuiListItem-root":u,".MuiListItemText-root":u,...i},...c,children:s})},V=({rows:e,containerProps:n={},globalItemProps:t})=>{const s=Number(n.columns??12),i=d=>Math.floor(s/d),c=(d,r,p)=>Math.floor(r/i(p))*e.length+d,u=(d,r)=>{const p=e[0].length%i(r);return p!==0&&d===e[0].length-1?(s-p*r)/2:0};return o.jsx(a.Grid,{container:!0,...n,children:e.map((d,r)=>d.map(({element:p,itemProps:g={}},l)=>o.jsx(a.Grid,{order:{xs:c(r,l,t.size.xs),sm:c(r,l,t.size.sm),md:c(r,l,t.size.md),lg:c(r,l,t.size.lg),xl:c(r,l,t.size.xl)},offset:{xs:u(l,t.size.xs),sm:u(l,t.size.sm),md:u(l,t.size.md),lg:u(l,t.size.lg),xl:u(l,t.size.xl)},...t,...g,children:p},`${r}-${l}`)))})},A=({elementId:e,options:n,...t})=>o.jsx(a.Link,{...t,onClick:()=>{document.getElementById(e)?.scrollIntoView(n)}}),Y=({children:e,useLazyListQuery:n,preferCacheValue:t,filters:s,page:i=0,rowsPerPage:c=50,rowsPerPageOptions:u=[50,100,150],stackProps:d,onRowsPerPageChange:r,onPageChange:p,...g})=>{const[l,y]=n(),[{limit:L,page:v,offset:j},B]=M.usePagination({page:i,limit:c});f.useEffect(()=>{l({limit:L,offset:j,...s},t)},[l,L,j,...Object.values(s||{}),t]);const{count:T,max_limit:k}=y.data||{};return k&&(u=u.filter(m=>m<=k)),o.jsxs(a.Stack,{...d,children:[q.handleResultState(y,({data:m})=>e(m,{limit:L,page:v,offset:j,count:T,maxLimit:k})),o.jsx(a.TablePagination,{component:"div",count:T??0,rowsPerPage:L,onRowsPerPageChange:m=>{B({limit:parseInt(m.target.value),page:0}),r&&r(m)},page:v,onPageChange:(m,h)=>{B(({limit:C})=>({limit:C,page:h})),p&&p(m,h)},rowsPerPageOptions:u.sort((m,h)=>m-h),...g})]})},H=({src:e,style:n={},...t})=>o.jsx(a.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=w.index;exports.pages=z.index;exports.Link=x.Link;exports.LinkIconButton=x.LinkIconButton;exports.LinkListItem=x.LinkListItem;exports.LinkTab=x.LinkTab;exports.Navigate=x.Navigate;exports.LinkButton=R.LinkButton;exports.tables=S.index;exports.Countdown=O.Countdown;exports.Image=E.Image;exports.SyncError=q.SyncError;exports.ClickableTooltip=U;exports.CopyIconButton=$;exports.DownloadFileButton=D;exports.ElevatedAppBar=F;exports.InputFileButton=G;exports.ItemizedList=N;exports.OrderedGrid=V;exports.ScrollIntoViewLink=A;exports.TablePagination=Y;exports.YouTubeVideo=H;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const w=require("../index-BhTYGZm3.cjs"),z=require("../index-BUG2k4XI.cjs"),x=require("../Navigate-N_lhvJqc.cjs"),R=require("../LinkButton-C_pRNvqs.cjs"),S=require("../index-JY2Et3RQ.cjs"),o=require("react/jsx-runtime"),a=require("@mui/material"),f=require("react"),_=require("../utils/general.cjs.js"),b=require("@mui/icons-material"),O=require("../Countdown-B8t-gwPp.cjs"),E=require("../Image-B_6DmnVe.cjs"),q=require("../api-G8CV5bUa.cjs"),M=require("../api-DIgp_6Vr.cjs"),U=({open:e=!1,onClick:n,...t})=>{const[s,i]=f.useState(e);return f.useEffect(()=>{i(e)},[e]),o.jsx(a.Tooltip,{open:s,onMouseOver:()=>{s||i(!0)},onMouseLeave:()=>{i(!1)},onClick:_.wrap({after:()=>{i(!s)}},n),...t})},$=({content:e,children:n=o.jsx(b.ContentCopy,{}),...t})=>o.jsx(a.IconButton,{"data-testid":"copy-icon-button",onClick:()=>{navigator.clipboard.writeText(e)},...t,children:n}),D=({children:e="Download",endIcon:n=o.jsx(b.Download,{}),file:t,...s})=>{let i,c;if("mimeType"in t){const{text:u,mimeType:d,name:r,charset:p="utf-8"}=t;let{extension:g}=t;g||(g="."+{plain:"txt",csv:"csv"}[d]),c={download:r+g,href:`data:text/${d};charset=${p},${encodeURIComponent(u)}`}}else i=URL.createObjectURL(t),c={href:i};return f.useEffect(()=>()=>{i&&URL.revokeObjectURL(i)},[i]),o.jsx(a.Button,{endIcon:n,...s,...c,children:e})},F=({containerProps:e,toolbarProps:n,elevation:t=4,children:s,...i})=>{const c=a.useScrollTrigger({disableHysteresis:!0,threshold:0});return f.cloneElement(o.jsx(a.AppBar,{elevation:t,...i,children:o.jsx(a.Container,{...e,children:o.jsx(a.Toolbar,{...n,children:s})})}),{position:c?"fixed":"sticky"})},G=({children:e,inputProps:n,...t})=>o.jsxs(a.Button,{component:"label",...t,children:[e,o.jsx("input",{type:"file",hidden:!0,...n})]}),N=({styleType:e,listProps:n={},pl:t=4,children:s})=>{const{sx:i,...c}=n,u={display:"list-item"};return o.jsx(a.List,{sx:{listStyleType:e,pl:t,".MuiListItem-root":u,".MuiListItemText-root":u,...i},...c,children:s})},V=({rows:e,containerProps:n={},globalItemProps:t})=>{const s=Number(n.columns??12),i=d=>Math.floor(s/d),c=(d,r,p)=>Math.floor(r/i(p))*e.length+d,u=(d,r)=>{const p=e[0].length%i(r);return p!==0&&d===e[0].length-1?(s-p*r)/2:0};return o.jsx(a.Grid,{container:!0,...n,children:e.map((d,r)=>d.map(({element:p,itemProps:g={}},l)=>o.jsx(a.Grid,{order:{xs:c(r,l,t.size.xs),sm:c(r,l,t.size.sm),md:c(r,l,t.size.md),lg:c(r,l,t.size.lg),xl:c(r,l,t.size.xl)},offset:{xs:u(l,t.size.xs),sm:u(l,t.size.sm),md:u(l,t.size.md),lg:u(l,t.size.lg),xl:u(l,t.size.xl)},...t,...g,children:p},`${r}-${l}`)))})},A=({elementId:e,options:n,...t})=>o.jsx(a.Link,{...t,onClick:()=>{document.getElementById(e)?.scrollIntoView(n)}}),Y=({children:e,useLazyListQuery:n,preferCacheValue:t,filters:s,page:i=0,rowsPerPage:c=50,rowsPerPageOptions:u=[50,100,150],stackProps:d,onRowsPerPageChange:r,onPageChange:p,...g})=>{const[l,y]=n(),[{limit:L,page:v,offset:j},B]=M.usePagination({page:i,limit:c});f.useEffect(()=>{l({limit:L,offset:j,...s},t)},[l,L,j,...Object.values(s||{}),t]);const{count:T,max_limit:k}=y.data||{};return k&&(u=u.filter(m=>m<=k)),o.jsxs(a.Stack,{...d,children:[q.handleResultState(y,({data:m})=>e(m,{limit:L,page:v,offset:j,count:T,maxLimit:k})),o.jsx(a.TablePagination,{component:"div",count:T??0,rowsPerPage:L,onRowsPerPageChange:m=>{B({limit:parseInt(m.target.value),page:0}),r&&r(m)},page:v,onPageChange:(m,h)=>{B(({limit:C})=>({limit:C,page:h})),p&&p(m,h)},rowsPerPageOptions:u.sort((m,h)=>m-h),...g})]})},H=({src:e,style:n={},...t})=>o.jsx(a.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=w.index;exports.pages=z.index;exports.Link=x.Link;exports.LinkIconButton=x.LinkIconButton;exports.LinkListItem=x.LinkListItem;exports.LinkTab=x.LinkTab;exports.Navigate=x.Navigate;exports.LinkButton=R.LinkButton;exports.tables=S.index;exports.Countdown=O.Countdown;exports.Image=E.Image;exports.SyncError=q.SyncError;exports.ClickableTooltip=U;exports.CopyIconButton=$;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,14 +1,14 @@
1
- import { i as ut } from "../index-De-EwYmr.js";
2
- import { i as pt } from "../index-Cxq_P-ni.js";
3
- import { L as dt, a as gt, b as ht, c as Lt, N as yt } from "../Navigate-DfeA_eki.js";
4
- import { L as vt } from "../LinkButton-BVU_MF2a.js";
1
+ import { i as ut } from "../index-Uk65JJpc.js";
2
+ import { i as pt } from "../index-CYI_rUWI.js";
3
+ import { L as dt, a as gt, b as ht, c as Lt, N as yt } from "../Navigate-CmvxpGu9.js";
4
+ import { L as vt } from "../LinkButton-EQvTNtbi.js";
5
5
  import { i as kt } from "../index-IXGAdLKG.js";
6
6
  import { jsx as a, jsxs as B } from "react/jsx-runtime";
7
7
  import { Tooltip as w, IconButton as O, Button as z, useScrollTrigger as S, AppBar as E, Container as M, Toolbar as $, List as j, Grid as k, Link as U, Stack as D, TablePagination as N, Box as _ } from "@mui/material";
8
8
  import b, { useEffect as C, cloneElement as A } from "react";
9
9
  import { wrap as F } from "../utils/general.es.js";
10
10
  import { ContentCopy as G, Download as V } from "@mui/icons-material";
11
- import { C as Bt } from "../Countdown-B1ilD_qY.js";
11
+ import { C as Bt } from "../Countdown-B4alF-zt.js";
12
12
  import { I as Ct } from "../Image-mkNhOo5p.js";
13
13
  import { h as Y } from "../api-uh8UKwsU.js";
14
14
  import { S as wt } from "../api-uh8UKwsU.js";
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("../../index-C8T09ieQ.cjs");exports.Banner=e.Banner;exports.Notification=e.Notification;exports.Page=e.Page;exports.Section=e.Section;exports.TabBar=e.TabBar;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("../../index-BUG2k4XI.cjs");exports.Banner=e.Banner;exports.Notification=e.Notification;exports.Page=e.Page;exports.Section=e.Section;exports.TabBar=e.TabBar;
2
2
  //# sourceMappingURL=index.cjs.js.map
@@ -1,4 +1,4 @@
1
- import { B as s, N as e, P as i, S as n, T as r } from "../../index-Cxq_P-ni.js";
1
+ import { B as s, N as e, P as i, S as n, T as r } from "../../index-CYI_rUWI.js";
2
2
  export {
3
3
  s as Banner,
4
4
  e as Notification,
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const t=require("../../Navigate-CioAG5Y-.cjs"),n=require("../../LinkButton-BbGJHgCY.cjs");exports.Link=t.Link;exports.LinkIconButton=t.LinkIconButton;exports.LinkListItem=t.LinkListItem;exports.LinkTab=t.LinkTab;exports.Navigate=t.Navigate;exports.LinkButton=n.LinkButton;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const t=require("../../Navigate-N_lhvJqc.cjs"),n=require("../../LinkButton-C_pRNvqs.cjs");exports.Link=t.Link;exports.LinkIconButton=t.LinkIconButton;exports.LinkListItem=t.LinkListItem;exports.LinkTab=t.LinkTab;exports.Navigate=t.Navigate;exports.LinkButton=n.LinkButton;
2
2
  //# sourceMappingURL=index.cjs.js.map
@@ -1,5 +1,5 @@
1
- import { L as n, a as L, b as i, c as o, N as s } from "../../Navigate-DfeA_eki.js";
2
- import { L as e } from "../../LinkButton-BVU_MF2a.js";
1
+ import { L as n, a as L, b as i, c as o, N as s } from "../../Navigate-CmvxpGu9.js";
2
+ import { L as e } from "../../LinkButton-EQvTNtbi.js";
3
3
  export {
4
4
  n as Link,
5
5
  e as LinkButton,