codeforlife 2.12.8 → 2.14.4

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 (96) hide show
  1. package/dist/{Countdown-snRYiLrs.js → Countdown-B1ilD_qY.js} +2 -2
  2. package/dist/{Countdown-snRYiLrs.js.map → Countdown-B1ilD_qY.js.map} +1 -1
  3. package/dist/{Countdown-CL7dyZrl.cjs → Countdown-DJ5b4A3w.cjs} +2 -2
  4. package/dist/{Countdown-CL7dyZrl.cjs.map → Countdown-DJ5b4A3w.cjs.map} +1 -1
  5. package/dist/{LinkButton-CRDs950E.js → LinkButton-BVU_MF2a.js} +2 -2
  6. package/dist/{LinkButton-CRDs950E.js.map → LinkButton-BVU_MF2a.js.map} +1 -1
  7. package/dist/{LinkButton-BQMG96aQ.cjs → LinkButton-BbGJHgCY.cjs} +2 -2
  8. package/dist/{LinkButton-BQMG96aQ.cjs.map → LinkButton-BbGJHgCY.cjs.map} +1 -1
  9. package/dist/{Navigate-Ch0ljYa-.cjs → Navigate-CioAG5Y-.cjs} +2 -2
  10. package/dist/{Navigate-Ch0ljYa-.cjs.map → Navigate-CioAG5Y-.cjs.map} +1 -1
  11. package/dist/{Navigate-Zt9DRJve.js → Navigate-DfeA_eki.js} +2 -2
  12. package/dist/{Navigate-Zt9DRJve.js.map → Navigate-DfeA_eki.js.map} +1 -1
  13. package/dist/api/endpoints/index.cjs.js +1 -1
  14. package/dist/api/endpoints/index.es.js +1 -1
  15. package/dist/api/index.cjs.js +1 -1
  16. package/dist/api/index.cjs.js.map +1 -1
  17. package/dist/api/index.es.js +21 -19
  18. package/dist/api/index.es.js.map +1 -1
  19. package/dist/auth-D-8t6wfR.js +238 -0
  20. package/dist/auth-D-8t6wfR.js.map +1 -0
  21. package/dist/auth-uyv8Mv88.cjs +2 -0
  22. package/dist/auth-uyv8Mv88.cjs.map +1 -0
  23. package/dist/components/form/index.cjs.js +1 -1
  24. package/dist/components/form/index.es.js +1 -1
  25. package/dist/components/index.cjs.js +1 -1
  26. package/dist/components/index.es.js +5 -5
  27. package/dist/components/page/index.cjs.js +1 -1
  28. package/dist/components/page/index.es.js +1 -1
  29. package/dist/components/router/index.cjs.js +1 -1
  30. package/dist/components/router/index.es.js +2 -2
  31. package/dist/features/index.cjs.js +1 -1
  32. package/dist/features/index.cjs.js.map +1 -1
  33. package/dist/features/index.es.js +13 -14
  34. package/dist/features/index.es.js.map +1 -1
  35. package/dist/hooks/index.cjs.js +1 -1
  36. package/dist/hooks/index.es.js +1 -1
  37. package/dist/index-C8T09ieQ.cjs +2 -0
  38. package/dist/index-C8T09ieQ.cjs.map +1 -0
  39. package/dist/index-Cxq_P-ni.js +242 -0
  40. package/dist/index-Cxq_P-ni.js.map +1 -0
  41. package/dist/index-Da4T5FYK.cjs +2 -0
  42. package/dist/{index-BsxcGeQL.cjs.map → index-Da4T5FYK.cjs.map} +1 -1
  43. package/dist/{index-uvqsz6fM.js → index-De-EwYmr.js} +4 -5
  44. package/dist/{index-uvqsz6fM.js.map → index-De-EwYmr.js.map} +1 -1
  45. package/dist/session-CJM1Czfv.js +33 -0
  46. package/dist/session-CJM1Czfv.js.map +1 -0
  47. package/dist/session-J-ezj9cg.cjs +2 -0
  48. package/dist/session-J-ezj9cg.cjs.map +1 -0
  49. package/dist/slices/index.cjs.js +1 -1
  50. package/dist/slices/index.cjs.js.map +1 -1
  51. package/dist/slices/index.es.js +27 -3
  52. package/dist/slices/index.es.js.map +1 -1
  53. package/dist/src/api/createApi.d.ts +4 -1
  54. package/dist/src/api/endpoints/session.d.ts +3 -2
  55. package/dist/src/components/page/Page.d.ts +3 -2
  56. package/dist/src/hooks/auth.d.ts +4 -3
  57. package/dist/src/slices/index.d.ts +1 -1
  58. package/dist/src/slices/session.d.ts +2 -10
  59. package/dist/src/utils/settings.d.ts +37 -0
  60. package/dist/utils/auth.cjs.js +1 -1
  61. package/dist/utils/auth.cjs.js.map +1 -1
  62. package/dist/utils/auth.es.js +18 -18
  63. package/dist/utils/auth.es.js.map +1 -1
  64. package/dist/utils/router.cjs.js +1 -1
  65. package/dist/utils/router.es.js +1 -1
  66. package/dist/utils/settings.cjs.js +2 -0
  67. package/dist/utils/settings.cjs.js.map +1 -0
  68. package/dist/utils/settings.d.ts +2 -0
  69. package/dist/utils/settings.es.js +37 -0
  70. package/dist/utils/settings.es.js.map +1 -0
  71. package/package.json +9 -9
  72. package/dist/auth-B6anBtxF.js +0 -238
  73. package/dist/auth-B6anBtxF.js.map +0 -1
  74. package/dist/auth-C2OUeLmQ.cjs +0 -2
  75. package/dist/auth-C2OUeLmQ.cjs.map +0 -1
  76. package/dist/index-B3QkMBQe.cjs +0 -2
  77. package/dist/index-B3QkMBQe.cjs.map +0 -1
  78. package/dist/index-BsxcGeQL.cjs +0 -2
  79. package/dist/index-C08WO83n.js +0 -237
  80. package/dist/index-C08WO83n.js.map +0 -1
  81. package/dist/session-CE2U7oL1.cjs +0 -2
  82. package/dist/session-CE2U7oL1.cjs.map +0 -1
  83. package/dist/session-COyN01K0.js +0 -33
  84. package/dist/session-COyN01K0.js.map +0 -1
  85. package/dist/session-eOp0H-EC.cjs +0 -2
  86. package/dist/session-eOp0H-EC.cjs.map +0 -1
  87. package/dist/session-oI-Ht2C8.js +0 -30
  88. package/dist/session-oI-Ht2C8.js.map +0 -1
  89. package/dist/settings/index.cjs.js +0 -2
  90. package/dist/settings/index.cjs.js.map +0 -1
  91. package/dist/settings/index.d.ts +0 -2
  92. package/dist/settings/index.es.js +0 -18
  93. package/dist/settings/index.es.js.map +0 -1
  94. package/dist/src/settings/custom.d.ts +0 -12
  95. package/dist/src/settings/index.d.ts +0 -3
  96. package/dist/src/settings/vite.d.ts +0 -10
@@ -1,237 +0,0 @@
1
- import { jsx as r, Fragment as d, jsxs as p } from "react/jsx-runtime";
2
- import { Box as B, Container as L, Stack as h, Typography as x, IconButton as T, Tabs as j, Tab as I } from "@mui/material";
3
- import { I as N } from "./Image-mkNhOo5p.js";
4
- import { useState as S, useEffect as g, Children as k } from "react";
5
- import { useLocation as P, useParams as Y, useNavigate as E, generatePath as R } from "react-router";
6
- import { ErrorOutline as A, InfoOutlined as V, CloseOutlined as q, ChevronLeft as z, ChevronRight as F } from "@mui/icons-material";
7
- import { p as _, t as M, s as W, a as v } from "./palette-CYwuLBW7.js";
8
- import { a as D } from "./auth-B6anBtxF.js";
9
- import { L as C } from "./LinkButton-CRDs950E.js";
10
- import { object as G, string as H } from "yup";
11
- import { tryValidateSync as J } from "./utils/schema.es.js";
12
- const m = ({ boxProps: o, ...e }) => /* @__PURE__ */ r(B, { ...o, children: /* @__PURE__ */ r(L, { ...e }) }), O = ({
13
- open: o = !0,
14
- error: e = !1,
15
- onClose: l,
16
- children: t,
17
- bgcolor: n = "secondary"
18
- }) => {
19
- const [c, s] = S(o);
20
- if (g(() => {
21
- s(o);
22
- }, [o]), !c) return /* @__PURE__ */ r(d, {});
23
- const a = _[n].contrastText;
24
- return /* @__PURE__ */ r(
25
- m,
26
- {
27
- boxProps: {
28
- bgcolor: {
29
- secondary: "#ffd23b",
30
- tertiary: "#08bafc"
31
- }[n]
32
- },
33
- sx: { paddingY: "5px" },
34
- children: /* @__PURE__ */ p(h, { direction: "row", alignItems: "center", gap: 2, children: [
35
- e ? /* @__PURE__ */ r(A, { htmlColor: a }) : /* @__PURE__ */ r(V, { htmlColor: a }),
36
- /* @__PURE__ */ r(x, { variant: "body2", color: a, mb: 0, children: t }),
37
- /* @__PURE__ */ r(
38
- T,
39
- {
40
- style: { marginLeft: "auto" },
41
- onClick: () => {
42
- s(!1), l !== void 0 && l();
43
- },
44
- children: /* @__PURE__ */ r(q, { htmlColor: a })
45
- }
46
- )
47
- ] })
48
- }
49
- );
50
- }, K = ({
51
- children: o,
52
- session: e
53
- }) => {
54
- const { state: l } = P();
55
- let { scroll: t, notifications: n } = l || {};
56
- return t = t || { x: 0, y: 0 }, n = n || [], g(() => {
57
- window.scroll(t.x, t.y);
58
- }, [t.x, t.y]), /* @__PURE__ */ r(d, { children: D((c) => {
59
- if (typeof o == "function" && (o = o(c)), n.length) {
60
- const s = k.toArray(o);
61
- return n.forEach((a, y) => {
62
- s.splice(
63
- a.index ?? y,
64
- 0,
65
- /* @__PURE__ */ r(O, { ...a.props })
66
- );
67
- }), s;
68
- }
69
- return o;
70
- }, e) });
71
- }, Q = ({
72
- header: o,
73
- subheader: e,
74
- textAlign: l = "start",
75
- imageProps: t,
76
- button1Props: n,
77
- button2Props: c,
78
- bgcolor: s = "primary"
79
- }) => {
80
- const a = _[s].contrastText;
81
- return /* @__PURE__ */ r(
82
- m,
83
- {
84
- boxProps: {
85
- bgcolor: {
86
- primary: v[500],
87
- secondary: W[500],
88
- tertiary: M[500]
89
- }[s]
90
- },
91
- sx: { paddingY: 0 },
92
- children: /* @__PURE__ */ p(
93
- h,
94
- {
95
- direction: "row",
96
- alignItems: "center",
97
- justifyContent: l,
98
- gap: 2,
99
- children: [
100
- /* @__PURE__ */ p(
101
- h,
102
- {
103
- py: {
104
- xs: "80px",
105
- md: t !== void 0 ? 0 : "100px"
106
- },
107
- textAlign: l,
108
- children: [
109
- /* @__PURE__ */ r(
110
- x,
111
- {
112
- variant: "h2",
113
- color: a,
114
- mb: e !== void 0 ? void 0 : 0,
115
- children: o
116
- }
117
- ),
118
- e !== void 0 && /* @__PURE__ */ r(
119
- x,
120
- {
121
- color: a,
122
- variant: "h4",
123
- mb: n !== void 0 ? void 0 : 0,
124
- children: e
125
- }
126
- ),
127
- /* @__PURE__ */ p(h, { direction: "row", gap: 2, children: [
128
- n !== void 0 && /* @__PURE__ */ r(C, { ...n }),
129
- c !== void 0 && /* @__PURE__ */ r(C, { ...c })
130
- ] })
131
- ]
132
- }
133
- ),
134
- t !== void 0 && /* @__PURE__ */ r(
135
- N,
136
- {
137
- ...t,
138
- display: { xs: "none", md: "block" },
139
- maxWidth: "320px",
140
- marginLeft: "auto"
141
- }
142
- )
143
- ]
144
- }
145
- )
146
- }
147
- );
148
- }, U = ({ header: o, tabs: e, originalPath: l, value: t = 0 }) => {
149
- const n = Y(), c = E(), [s, a] = S(
150
- t < 0 ? 0 : t >= e.length ? e.length - 1 : t
151
- ), y = e.map((i) => i.label), w = e.map((i) => i.children), f = e.map((i) => i.path);
152
- return g(() => {
153
- a(t);
154
- }, [t]), g(() => {
155
- const i = J(
156
- n,
157
- G({
158
- tab: H().oneOf(f).required()
159
- })
160
- )?.tab;
161
- i !== void 0 && a(f.indexOf(i));
162
- }, [n, f]), /* @__PURE__ */ p(d, { children: [
163
- /* @__PURE__ */ r(
164
- m,
165
- {
166
- boxProps: { bgcolor: v[500] },
167
- sx: { paddingY: "100px" },
168
- className: "flex-center",
169
- children: /* @__PURE__ */ r(
170
- x,
171
- {
172
- textAlign: "center",
173
- variant: "h2",
174
- style: { color: "white" },
175
- mb: 0,
176
- children: o
177
- }
178
- )
179
- }
180
- ),
181
- /* @__PURE__ */ r(
182
- m,
183
- {
184
- boxProps: { bgcolor: v[300] },
185
- sx: { paddingY: "6px" },
186
- className: "flex-center",
187
- children: /* @__PURE__ */ r(
188
- j,
189
- {
190
- value: s,
191
- onChange: (i, u) => {
192
- c(
193
- R(l, {
194
- tab: f[u]
195
- })
196
- );
197
- },
198
- ScrollButtonComponent: ({
199
- disabled: i,
200
- onClick: u,
201
- direction: b
202
- }) => /* @__PURE__ */ r(d, { children: i === !1 && /* @__PURE__ */ r(
203
- T,
204
- {
205
- onClick: u,
206
- style: {
207
- padding: 0,
208
- [b === "left" ? "marginRight" : "marginLeft"]: "15px",
209
- color: "white"
210
- },
211
- children: b === "left" ? /* @__PURE__ */ r(d, { children: /* @__PURE__ */ r(z, {}) }) : /* @__PURE__ */ r(d, { children: /* @__PURE__ */ r(F, {}) })
212
- }
213
- ) }),
214
- children: y.map((i) => /* @__PURE__ */ r(I, { disableRipple: !0, label: i }, i))
215
- }
216
- )
217
- }
218
- ),
219
- w[s]
220
- ] });
221
- }, cr = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
222
- __proto__: null,
223
- Banner: Q,
224
- Notification: O,
225
- Page: K,
226
- Section: m,
227
- TabBar: U
228
- }, Symbol.toStringTag, { value: "Module" }));
229
- export {
230
- Q as B,
231
- O as N,
232
- K as P,
233
- m as S,
234
- U as T,
235
- cr as i
236
- };
237
- //# sourceMappingURL=index-C08WO83n.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index-C08WO83n.js","sources":["../src/components/page/Section.tsx","../src/components/page/Notification.tsx","../src/components/page/Page.tsx","../src/components/page/Banner.tsx","../src/components/page/TabBar.tsx"],"sourcesContent":["import {\n Box,\n type BoxProps,\n Container,\n type ContainerProps,\n} from \"@mui/material\"\nimport type { FC } from \"react\"\n\nexport interface SectionProps extends ContainerProps {\n boxProps?: Omit<BoxProps, \"children\">\n}\n\nconst Section: FC<SectionProps> = ({ boxProps, ...containerProps }) => {\n return (\n <Box {...boxProps}>\n <Container {...containerProps} />\n </Box>\n )\n}\n\nexport default Section\n","import {\n CloseOutlined as CloseOutlinedIcon,\n ErrorOutline as ErrorOutlineIcon,\n InfoOutlined as InfoOutlinedIcon,\n} from \"@mui/icons-material\"\nimport { type FC, type ReactNode, useEffect, useState } from \"react\"\nimport { IconButton, Stack, Typography } from \"@mui/material\"\n\nimport Section from \"./Section\"\nimport palette from \"../../theme/palette\"\n\nexport interface NotificationProps {\n open?: boolean\n error?: boolean\n onClose?: () => void\n children: ReactNode\n bgcolor?: \"secondary\" | \"tertiary\"\n}\n\nconst Notification: FC<NotificationProps> = ({\n open = true,\n error = false,\n onClose,\n children,\n bgcolor = \"secondary\",\n}) => {\n const [_open, _setOpen] = useState(open)\n\n useEffect(() => {\n _setOpen(open)\n }, [open])\n\n if (!_open) return <></>\n\n // @ts-expect-error guaranteed to be in palette\n const contrastText = palette[bgcolor].contrastText as string\n\n return (\n <Section\n boxProps={{\n bgcolor: {\n secondary: \"#ffd23b\",\n tertiary: \"#08bafc\",\n }[bgcolor],\n }}\n sx={{ paddingY: \"5px\" }}\n >\n <Stack direction=\"row\" alignItems=\"center\" gap={2}>\n {error ? (\n <ErrorOutlineIcon htmlColor={contrastText} />\n ) : (\n <InfoOutlinedIcon htmlColor={contrastText} />\n )}\n <Typography variant=\"body2\" color={contrastText} mb={0}>\n {children}\n </Typography>\n <IconButton\n style={{ marginLeft: \"auto\" }}\n onClick={() => {\n _setOpen(false)\n if (onClose !== undefined) onClose()\n }}\n >\n <CloseOutlinedIcon htmlColor={contrastText} />\n </IconButton>\n </Stack>\n </Section>\n )\n}\n\nexport default Notification\n","import { Children, type JSX, useEffect } from \"react\"\nimport { type Location, useLocation } from \"react-router\"\n\nimport Notification, { type NotificationProps } from \"./Notification\"\nimport {\n type SessionMetadata,\n type UseSessionChildren,\n type UseSessionChildrenFunction,\n type UseSessionOptions,\n useSession,\n} from \"../../hooks/auth\"\n\nexport type PageState = {\n notifications: Array<{\n index?: number\n props: NotificationProps\n }>\n scroll: { x: number; y: number }\n}\n\nexport interface PageProps<\n SessionUserType extends SessionMetadata[\"user_type\"] | undefined,\n> {\n children: UseSessionChildren<SessionUserType>\n session?: UseSessionOptions<SessionUserType>\n}\n\nconst Page = <\n SessionUserType extends SessionMetadata[\"user_type\"] | undefined = undefined,\n>({\n children,\n session,\n}: PageProps<SessionUserType>): JSX.Element => {\n const { state } = useLocation() as Location<null | Partial<PageState>>\n\n let { scroll, notifications } = state || {}\n scroll = scroll || { x: 0, y: 0 }\n notifications = notifications || []\n\n useEffect(() => {\n window.scroll(scroll.x, scroll.y)\n }, [scroll.x, scroll.y])\n\n return (\n <>\n {useSession((metadata?: SessionMetadata) => {\n if (typeof children === \"function\") {\n children = metadata\n ? (children as UseSessionChildrenFunction<true>)(metadata)\n : (children as UseSessionChildrenFunction<false>)(metadata)\n }\n\n if (notifications.length) {\n const childrenArray = Children.toArray(children)\n\n notifications.forEach((notification, index) => {\n void childrenArray.splice(\n notification.index ?? index,\n 0,\n <Notification {...notification.props} />,\n )\n })\n\n return childrenArray\n }\n\n return children\n }, session)}\n </>\n )\n}\n\nexport default Page\n","import { Stack, Typography } from \"@mui/material\"\n\nimport Image, { type ImageProps } from \"../Image\"\nimport { LinkButton, type LinkButtonProps } from \"../router\"\nimport { primary, secondary, tertiary } from \"../../theme/colors\"\nimport Section from \"./Section\"\nimport palette from \"../../theme/palette\"\n\nexport interface BannerProps<\n Button1State extends Record<string, any> = Record<string, any>,\n Button2State extends Record<string, any> = Record<string, any>,\n> {\n header: string\n subheader?: string\n textAlign?: \"start\" | \"center\"\n imageProps?: ImageProps\n button1Props?: LinkButtonProps<\"to\", Button1State>\n button2Props?: LinkButtonProps<\"to\", Button2State>\n bgcolor?: \"primary\" | \"secondary\" | \"tertiary\"\n}\n\nconst Banner = <\n Button1State extends Record<string, any> = Record<string, any>,\n Button2State extends Record<string, any> = Record<string, any>,\n>({\n header,\n subheader,\n textAlign = \"start\",\n imageProps,\n button1Props,\n button2Props,\n bgcolor = \"primary\",\n}: BannerProps<Button1State, Button2State>) => {\n // @ts-expect-error guaranteed to be in palette\n const contrastText = palette[bgcolor].contrastText as string\n\n return (\n <Section\n boxProps={{\n bgcolor: {\n primary: primary[500],\n secondary: secondary[500],\n tertiary: tertiary[500],\n }[bgcolor],\n }}\n sx={{ paddingY: 0 }}\n >\n <Stack\n direction=\"row\"\n alignItems=\"center\"\n justifyContent={textAlign}\n gap={2}\n >\n <Stack\n py={{\n xs: \"80px\",\n md: imageProps !== undefined ? 0 : \"100px\",\n }}\n textAlign={textAlign}\n >\n <Typography\n variant=\"h2\"\n color={contrastText}\n mb={subheader !== undefined ? undefined : 0}\n >\n {header}\n </Typography>\n {subheader !== undefined && (\n <Typography\n color={contrastText}\n variant=\"h4\"\n mb={button1Props !== undefined ? undefined : 0}\n >\n {subheader}\n </Typography>\n )}\n <Stack direction=\"row\" gap={2}>\n {button1Props !== undefined && <LinkButton {...button1Props} />}\n {button2Props !== undefined && <LinkButton {...button2Props} />}\n </Stack>\n </Stack>\n {imageProps !== undefined && (\n <Image\n {...imageProps}\n display={{ xs: \"none\", md: \"block\" }}\n maxWidth=\"320px\"\n marginLeft=\"auto\"\n />\n )}\n </Stack>\n </Section>\n )\n}\n\nexport default Banner\n","import {\n ChevronLeft as ChevronLeftIcon,\n ChevronRight as ChevronRightIcon,\n} from \"@mui/icons-material\"\nimport { type FC, type ReactNode, useEffect, useState } from \"react\"\nimport {\n IconButton,\n Tab,\n type TabScrollButtonProps,\n Tabs,\n Typography,\n} from \"@mui/material\"\nimport { object as YupObject, string as YupString } from \"yup\"\nimport { generatePath, useNavigate, useParams } from \"react-router\"\n\nimport Section from \"./Section\"\nimport { primary } from \"../../theme/colors\"\nimport { tryValidateSync } from \"../../utils/schema\"\n\nexport interface TabBarProps {\n header: string\n tabs: Array<{\n label: string\n children: ReactNode\n path: string\n }>\n originalPath: string\n value?: number\n}\n\nconst TabBar: FC<TabBarProps> = ({ header, tabs, originalPath, value = 0 }) => {\n const params = useParams()\n const navigate = useNavigate()\n const [_value, _setValue] = useState(\n value < 0 ? 0 : value >= tabs.length ? tabs.length - 1 : value,\n )\n\n const labels = tabs.map(tab => tab.label)\n const children = tabs.map(tab => tab.children)\n const paths = tabs.map(tab => tab.path)\n\n useEffect(() => {\n _setValue(value)\n }, [value])\n\n useEffect(() => {\n const tab = tryValidateSync(\n params,\n YupObject({\n tab: YupString().oneOf(paths).required(),\n }),\n )?.tab\n\n if (tab !== undefined) {\n _setValue(paths.indexOf(tab))\n }\n }, [params, paths])\n\n return (\n <>\n <Section\n boxProps={{ bgcolor: primary[500] }}\n sx={{ paddingY: \"100px\" }}\n className=\"flex-center\"\n >\n <Typography\n textAlign=\"center\"\n variant=\"h2\"\n style={{ color: \"white\" }}\n mb={0}\n >\n {header}\n </Typography>\n </Section>\n <Section\n boxProps={{ bgcolor: primary[300] }}\n sx={{ paddingY: \"6px\" }}\n className=\"flex-center\"\n >\n <Tabs\n value={_value}\n onChange={(_, value: number) => {\n void navigate(\n generatePath(originalPath, {\n tab: paths[value],\n }),\n )\n }}\n ScrollButtonComponent={({\n disabled,\n onClick,\n direction,\n }: TabScrollButtonProps) => {\n return (\n <>\n {disabled === false && (\n <IconButton\n onClick={onClick}\n style={{\n padding: 0,\n [direction === \"left\" ? \"marginRight\" : \"marginLeft\"]:\n \"15px\",\n color: \"white\",\n }}\n >\n {direction === \"left\" ? (\n <>\n <ChevronLeftIcon />\n </>\n ) : (\n <>\n <ChevronRightIcon />\n </>\n )}\n </IconButton>\n )}\n </>\n )\n }}\n >\n {labels.map(label => (\n <Tab disableRipple key={label} label={label} />\n ))}\n </Tabs>\n </Section>\n {children[_value]}\n </>\n )\n}\n\nexport default TabBar\n"],"names":["Section","boxProps","containerProps","jsx","Box","Container","Notification","open","error","onClose","children","bgcolor","_open","_setOpen","useState","useEffect","Fragment","contrastText","palette","Stack","ErrorOutlineIcon","InfoOutlinedIcon","Typography","IconButton","CloseOutlinedIcon","Page","session","state","useLocation","scroll","notifications","useSession","metadata","childrenArray","Children","notification","index","Banner","header","subheader","textAlign","imageProps","button1Props","button2Props","primary","secondary","tertiary","jsxs","LinkButton","Image","TabBar","tabs","originalPath","value","params","useParams","navigate","useNavigate","_value","_setValue","labels","tab","paths","tryValidateSync","YupObject","YupString","Tabs","_","generatePath","disabled","onClick","direction","ChevronLeftIcon","ChevronRightIcon","label","Tab"],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- "use strict";const i=require("js-cookie"),c=require("./settings/index.cjs.js"),t=require("@reduxjs/toolkit"),n=t.buildCreateSlice({creators:{asyncThunk:t.asyncThunkCreator}}),g={isLoggedIn:!!i.get(c.SESSION_METADATA_COOKIE_NAME)},o=n({name:"session",initialState:g,reducers:e=>({login:e.reducer(s=>{s.isLoggedIn=!0}),logout:e.reducer(s=>{s.isLoggedIn=!1})}),selectors:{selectIsLoggedIn:e=>e.isLoggedIn}}),{login:r,logout:l}=o.actions,{selectIsLoggedIn:u}=o.selectors;exports.createSlice=n;exports.login=r;exports.logout=l;exports.selectIsLoggedIn=u;exports.sessionSlice=o;
2
- //# sourceMappingURL=session-CE2U7oL1.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"session-CE2U7oL1.cjs","sources":["../src/slices/createSlice.ts","../src/slices/session.ts"],"sourcesContent":["import { asyncThunkCreator, buildCreateSlice } from \"@reduxjs/toolkit\"\n\n// `buildCreateSlice` allows us to create a slice with async thunks.\nconst createSlice = buildCreateSlice({\n creators: { asyncThunk: asyncThunkCreator },\n})\n\nexport default createSlice\n","import Cookies from \"js-cookie\"\n\nimport { SESSION_METADATA_COOKIE_NAME } from \"../settings\"\nimport createSlice from \"./createSlice\"\n\nexport interface SessionState {\n isLoggedIn: boolean\n}\n\nconst initialState: SessionState = {\n isLoggedIn: Boolean(Cookies.get(SESSION_METADATA_COOKIE_NAME)),\n}\n\nconst sessionSlice = createSlice({\n name: \"session\",\n initialState,\n reducers: create => ({\n login: create.reducer(state => {\n state.isLoggedIn = true\n }),\n logout: create.reducer(state => {\n state.isLoggedIn = false\n }),\n }),\n selectors: {\n selectIsLoggedIn: session => session.isLoggedIn,\n },\n})\n\nexport default sessionSlice\nexport const { login, logout } = sessionSlice.actions\nexport const { selectIsLoggedIn } = sessionSlice.selectors\n"],"names":["createSlice","buildCreateSlice","asyncThunkCreator","initialState","Cookies","SESSION_METADATA_COOKIE_NAME","sessionSlice","create","state","session","login","logout","selectIsLoggedIn"],"mappings":"6GAGMA,EAAcC,EAAAA,iBAAiB,CACnC,SAAU,CAAE,WAAYC,EAAAA,iBAAA,CAC1B,CAAC,ECIKC,EAA6B,CACjC,WAAY,EAAQC,EAAQ,IAAIC,EAAAA,4BAA4B,CAC9D,EAEMC,EAAeN,EAAY,CAC/B,KAAM,UACN,aAAAG,EACA,SAAUI,IAAW,CACnB,MAAOA,EAAO,QAAQC,GAAS,CAC7BA,EAAM,WAAa,EACrB,CAAC,EACD,OAAQD,EAAO,QAAQC,GAAS,CAC9BA,EAAM,WAAa,EACrB,CAAC,CAAA,GAEH,UAAW,CACT,oBAA6BC,EAAQ,UAAA,CAEzC,CAAC,EAGY,CAAE,MAAAC,EAAO,OAAAC,CAAA,EAAWL,EAAa,QACjC,CAAE,iBAAAM,CAAA,EAAqBN,EAAa"}
@@ -1,33 +0,0 @@
1
- import "@reduxjs/toolkit/query/react";
2
- import { l, a as u } from "./session-oI-Ht2C8.js";
3
- function d(n, r = "session/login/") {
4
- return n.mutation({
5
- query: (o) => ({ url: r, method: "POST", body: o }),
6
- async onQueryStarted(o, { dispatch: i, queryFulfilled: t }) {
7
- try {
8
- await t, i(u());
9
- } catch (e) {
10
- console.error("Failed to call login endpoint...", e);
11
- }
12
- }
13
- });
14
- }
15
- function y(n, r, o = "session/logout/") {
16
- return r.mutation({
17
- query: () => ({ url: o, method: "POST" }),
18
- async onQueryStarted(i, { dispatch: t, queryFulfilled: e }) {
19
- try {
20
- await e;
21
- } catch (a) {
22
- console.error("Failed to call logout endpoint...", a);
23
- } finally {
24
- t(l()), t(n.util.resetApiState());
25
- }
26
- }
27
- });
28
- }
29
- export {
30
- d as a,
31
- y as b
32
- };
33
- //# sourceMappingURL=session-COyN01K0.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"session-COyN01K0.js","sources":["../src/api/endpoints/session.ts"],"sourcesContent":["import { type Api, type EndpointBuilder } from \"@reduxjs/toolkit/query/react\"\n\nimport { login, logout } from \"../../slices/session\"\n\nexport type ExchangeOAuth2CodeArg = {\n code: string\n code_verifier: string\n redirect_uri: string\n}\n\nexport function buildLoginEndpoint<ResultType, QueryArg>(\n build: EndpointBuilder<any, any, any>,\n url: string = \"session/login/\",\n) {\n return build.mutation<ResultType, QueryArg>({\n query: body => ({ url, method: \"POST\", body }),\n async onQueryStarted(_, { dispatch, queryFulfilled }) {\n try {\n await queryFulfilled\n dispatch(login())\n } catch (error) {\n console.error(\"Failed to call login endpoint...\", error)\n }\n },\n })\n}\n\nexport function buildLogoutEndpoint<ResultType, QueryArg>(\n api: Api<any, any, any, any, any>,\n build: EndpointBuilder<any, any, any>,\n url: string = \"session/logout/\",\n) {\n return build.mutation<ResultType, QueryArg>({\n query: () => ({ url, method: \"POST\" }),\n async onQueryStarted(_, { dispatch, queryFulfilled }) {\n try {\n await queryFulfilled\n } catch (error) {\n console.error(\"Failed to call logout endpoint...\", error)\n } finally {\n dispatch(logout())\n // eslint-disable-next-line @typescript-eslint/no-unsafe-call,@typescript-eslint/no-unsafe-member-access\n dispatch(api.util.resetApiState())\n }\n },\n })\n}\n"],"names":["buildLoginEndpoint","build","url","body","_","dispatch","queryFulfilled","login","error","buildLogoutEndpoint","api","logout"],"mappings":";;AAUO,SAASA,EACdC,GACAC,IAAc,kBACd;AACA,SAAOD,EAAM,SAA+B;AAAA,IAC1C,OAAO,CAAAE,OAAS,EAAE,KAAAD,GAAK,QAAQ,QAAQ,MAAAC;IACvC,MAAM,eAAeC,GAAG,EAAE,UAAAC,GAAU,gBAAAC,KAAkB;AACpD,UAAI;AACF,cAAMA,GACND,EAASE,GAAO;AAAA,MAClB,SAASC,GAAO;AACd,gBAAQ,MAAM,oCAAoCA,CAAK;AAAA,MACzD;AAAA,IACF;AAAA,EAAA,CACD;AACH;AAEO,SAASC,EACdC,GACAT,GACAC,IAAc,mBACd;AACA,SAAOD,EAAM,SAA+B;AAAA,IAC1C,OAAO,OAAO,EAAE,KAAAC,GAAK,QAAQ,OAAA;AAAA,IAC7B,MAAM,eAAeE,GAAG,EAAE,UAAAC,GAAU,gBAAAC,KAAkB;AACpD,UAAI;AACF,cAAMA;AAAA,MACR,SAASE,GAAO;AACd,gBAAQ,MAAM,qCAAqCA,CAAK;AAAA,MAC1D,UAAA;AACE,QAAAH,EAASM,GAAQ,GAEjBN,EAASK,EAAI,KAAK,eAAe;AAAA,MACnC;AAAA,IACF;AAAA,EAAA,CACD;AACH;"}
@@ -1,2 +0,0 @@
1
- "use strict";require("@reduxjs/toolkit/query/react");const u=require("./session-CE2U7oL1.cjs");function a(n,e="session/login/"){return n.mutation({query:o=>({url:e,method:"POST",body:o}),async onQueryStarted(o,{dispatch:r,queryFulfilled:t}){try{await t,r(u.login())}catch(i){console.error("Failed to call login endpoint...",i)}}})}function s(n,e,o="session/logout/"){return e.mutation({query:()=>({url:o,method:"POST"}),async onQueryStarted(r,{dispatch:t,queryFulfilled:i}){try{await i}catch(l){console.error("Failed to call logout endpoint...",l)}finally{t(u.logout()),t(n.util.resetApiState())}}})}exports.buildLoginEndpoint=a;exports.buildLogoutEndpoint=s;
2
- //# sourceMappingURL=session-eOp0H-EC.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"session-eOp0H-EC.cjs","sources":["../src/api/endpoints/session.ts"],"sourcesContent":["import { type Api, type EndpointBuilder } from \"@reduxjs/toolkit/query/react\"\n\nimport { login, logout } from \"../../slices/session\"\n\nexport type ExchangeOAuth2CodeArg = {\n code: string\n code_verifier: string\n redirect_uri: string\n}\n\nexport function buildLoginEndpoint<ResultType, QueryArg>(\n build: EndpointBuilder<any, any, any>,\n url: string = \"session/login/\",\n) {\n return build.mutation<ResultType, QueryArg>({\n query: body => ({ url, method: \"POST\", body }),\n async onQueryStarted(_, { dispatch, queryFulfilled }) {\n try {\n await queryFulfilled\n dispatch(login())\n } catch (error) {\n console.error(\"Failed to call login endpoint...\", error)\n }\n },\n })\n}\n\nexport function buildLogoutEndpoint<ResultType, QueryArg>(\n api: Api<any, any, any, any, any>,\n build: EndpointBuilder<any, any, any>,\n url: string = \"session/logout/\",\n) {\n return build.mutation<ResultType, QueryArg>({\n query: () => ({ url, method: \"POST\" }),\n async onQueryStarted(_, { dispatch, queryFulfilled }) {\n try {\n await queryFulfilled\n } catch (error) {\n console.error(\"Failed to call logout endpoint...\", error)\n } finally {\n dispatch(logout())\n // eslint-disable-next-line @typescript-eslint/no-unsafe-call,@typescript-eslint/no-unsafe-member-access\n dispatch(api.util.resetApiState())\n }\n },\n })\n}\n"],"names":["buildLoginEndpoint","build","url","body","_","dispatch","queryFulfilled","login","error","buildLogoutEndpoint","api","logout"],"mappings":"+FAUO,SAASA,EACdC,EACAC,EAAc,iBACd,CACA,OAAOD,EAAM,SAA+B,CAC1C,MAAOE,IAAS,CAAE,IAAAD,EAAK,OAAQ,OAAQ,KAAAC,IACvC,MAAM,eAAeC,EAAG,CAAE,SAAAC,EAAU,eAAAC,GAAkB,CACpD,GAAI,CACF,MAAMA,EACND,EAASE,EAAAA,OAAO,CAClB,OAASC,EAAO,CACd,QAAQ,MAAM,mCAAoCA,CAAK,CACzD,CACF,CAAA,CACD,CACH,CAEO,SAASC,EACdC,EACAT,EACAC,EAAc,kBACd,CACA,OAAOD,EAAM,SAA+B,CAC1C,MAAO,KAAO,CAAE,IAAAC,EAAK,OAAQ,MAAA,GAC7B,MAAM,eAAeE,EAAG,CAAE,SAAAC,EAAU,eAAAC,GAAkB,CACpD,GAAI,CACF,MAAMA,CACR,OAASE,EAAO,CACd,QAAQ,MAAM,oCAAqCA,CAAK,CAC1D,QAAA,CACEH,EAASM,EAAAA,QAAQ,EAEjBN,EAASK,EAAI,KAAK,eAAe,CACnC,CACF,CAAA,CACD,CACH"}
@@ -1,30 +0,0 @@
1
- import t from "js-cookie";
2
- import { SESSION_METADATA_COOKIE_NAME as n } from "./settings/index.es.js";
3
- import { buildCreateSlice as r, asyncThunkCreator as c } from "@reduxjs/toolkit";
4
- const i = r({
5
- creators: { asyncThunk: c }
6
- }), a = {
7
- isLoggedIn: !!t.get(n)
8
- }, o = i({
9
- name: "session",
10
- initialState: a,
11
- reducers: (e) => ({
12
- login: e.reducer((s) => {
13
- s.isLoggedIn = !0;
14
- }),
15
- logout: e.reducer((s) => {
16
- s.isLoggedIn = !1;
17
- })
18
- }),
19
- selectors: {
20
- selectIsLoggedIn: (e) => e.isLoggedIn
21
- }
22
- }), { login: I, logout: u } = o.actions, { selectIsLoggedIn: m } = o.selectors;
23
- export {
24
- I as a,
25
- m as b,
26
- i as c,
27
- u as l,
28
- o as s
29
- };
30
- //# sourceMappingURL=session-oI-Ht2C8.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"session-oI-Ht2C8.js","sources":["../src/slices/createSlice.ts","../src/slices/session.ts"],"sourcesContent":["import { asyncThunkCreator, buildCreateSlice } from \"@reduxjs/toolkit\"\n\n// `buildCreateSlice` allows us to create a slice with async thunks.\nconst createSlice = buildCreateSlice({\n creators: { asyncThunk: asyncThunkCreator },\n})\n\nexport default createSlice\n","import Cookies from \"js-cookie\"\n\nimport { SESSION_METADATA_COOKIE_NAME } from \"../settings\"\nimport createSlice from \"./createSlice\"\n\nexport interface SessionState {\n isLoggedIn: boolean\n}\n\nconst initialState: SessionState = {\n isLoggedIn: Boolean(Cookies.get(SESSION_METADATA_COOKIE_NAME)),\n}\n\nconst sessionSlice = createSlice({\n name: \"session\",\n initialState,\n reducers: create => ({\n login: create.reducer(state => {\n state.isLoggedIn = true\n }),\n logout: create.reducer(state => {\n state.isLoggedIn = false\n }),\n }),\n selectors: {\n selectIsLoggedIn: session => session.isLoggedIn,\n },\n})\n\nexport default sessionSlice\nexport const { login, logout } = sessionSlice.actions\nexport const { selectIsLoggedIn } = sessionSlice.selectors\n"],"names":["createSlice","buildCreateSlice","asyncThunkCreator","initialState","Cookies","SESSION_METADATA_COOKIE_NAME","sessionSlice","create","state","session","login","logout","selectIsLoggedIn"],"mappings":";;;AAGA,MAAMA,IAAcC,EAAiB;AAAA,EACnC,UAAU,EAAE,YAAYC,EAAA;AAC1B,CAAC,GCIKC,IAA6B;AAAA,EACjC,YAAY,EAAQC,EAAQ,IAAIC,CAA4B;AAC9D,GAEMC,IAAeN,EAAY;AAAA,EAC/B,MAAM;AAAA,EACN,cAAAG;AAAA,EACA,UAAU,CAAAI,OAAW;AAAA,IACnB,OAAOA,EAAO,QAAQ,CAAAC,MAAS;AAC7B,MAAAA,EAAM,aAAa;AAAA,IACrB,CAAC;AAAA,IACD,QAAQD,EAAO,QAAQ,CAAAC,MAAS;AAC9B,MAAAA,EAAM,aAAa;AAAA,IACrB,CAAC;AAAA,EAAA;AAAA,EAEH,WAAW;AAAA,IACT,kBAAkB,OAAWC,EAAQ;AAAA,EAAA;AAEzC,CAAC,GAGY,EAAE,OAAAC,GAAO,QAAAC,EAAA,IAAWL,EAAa,SACjC,EAAE,kBAAAM,EAAA,IAAqBN,EAAa;"}
@@ -1,2 +0,0 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e={},E=e,S=E.VITE_SERVICE_NAME??"REPLACE_ME",I=E.VITE_SERVICE_TITLE??`Code for Life | ${S}`,O=E.VITE_SERVICE_API_URL??"http://localhost:8000",s=`${S}_csrftoken`,n=E.VITE_SESSION_COOKIE_NAME??"session_key",R=E.VITE_SESSION_METADATA_COOKIE_NAME??"session_metadata",A={BASE_URL:"/",DEV:!1,MODE:"production",PROD:!0,SSR:!1},_=A,c=_.MODE,C=_.BASE_URL,M=_.PROD,V=_.DEV,T=_.SSR,D={BASE_URL:"/",DEV:!1,MODE:"production",PROD:!0,SSR:!1},N=new Proxy(D,{get:(t,o)=>t[`VITE_${o}`]});exports.BASE_URL=C;exports.CSRF_COOKIE_NAME=s;exports.DEV=V;exports.MODE=c;exports.PROD=M;exports.SERVICE_API_URL=O;exports.SERVICE_NAME=S;exports.SERVICE_TITLE=I;exports.SESSION_COOKIE_NAME=n;exports.SESSION_METADATA_COOKIE_NAME=R;exports.SSR=T;exports.vite=N;
2
- //# sourceMappingURL=index.cjs.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.cjs.js","sources":["../../src/settings/custom.ts","../../src/settings/vite.ts","../../src/settings/index.ts"],"sourcesContent":["/**\n * This file contains all of our custom settings we define for our own purposes.\n *\n * This file is based on:\n * https://github.com/ocadotechnology/codeforlife-package-python/blob/main/codeforlife/settings/custom.py\n */\n\n// Shorthand to access environment variables.\nconst env = import.meta.env as Record<string, string | undefined>\n\n// The name of the current service.\nexport const SERVICE_NAME = env.VITE_SERVICE_NAME ?? \"REPLACE_ME\"\n\n// The title of the current service. Used in the <title/> within the <head/>.\nexport const SERVICE_TITLE =\n env.VITE_SERVICE_TITLE ?? `Code for Life | ${SERVICE_NAME}`\n\n// The api url of the current service.\nexport const SERVICE_API_URL =\n env.VITE_SERVICE_API_URL ?? \"http://localhost:8000\"\n\n// The names of cookies.\nexport const CSRF_COOKIE_NAME = `${SERVICE_NAME}_csrftoken`\nexport const SESSION_COOKIE_NAME = env.VITE_SESSION_COOKIE_NAME ?? \"session_key\"\nexport const SESSION_METADATA_COOKIE_NAME =\n env.VITE_SESSION_METADATA_COOKIE_NAME ?? \"session_metadata\"\n","/**\n * This file contains all of vite's environment variables.\n *\n * https://vite.dev/guide/env-and-mode#env-variables\n */\n\n// Shorthand to access environment variables.\nconst env = import.meta.env\n\n// The mode the app is running in.\nexport const MODE = env.MODE\n\n// The base url the app is being served from.\n// This is determined by the base config option.\nexport const BASE_URL = env.BASE_URL\n\n// Whether the app is running in production (running the dev server with\n// NODE_ENV='production' or running an app built with NODE_ENV='production').\nexport const PROD = env.PROD\n\n// Whether the app is running in development (always the opposite of\n// import.meta.env.PROD)\nexport const DEV = env.DEV\n\n// Whether the app is running in the server.\nexport const SSR = env.SSR\n","// Shorthand to access environment variables.\nexport const vite = new Proxy(import.meta.env, {\n get: (target, name: string) => target[`VITE_${name}`] as string,\n}) as Record<string, string>\n\nexport * from \"./custom\"\nexport * from \"./vite\"\n"],"names":["env","__vite_import_meta_env__","SERVICE_NAME","SERVICE_TITLE","SERVICE_API_URL","CSRF_COOKIE_NAME","SESSION_COOKIE_NAME","SESSION_METADATA_COOKIE_NAME","MODE","BASE_URL","PROD","DEV","SSR","vite","target","name"],"mappings":"2FAQMA,EAAMC,EAGCC,EAAeF,EAAI,mBAAqB,aAGxCG,EACXH,EAAI,oBAAsB,mBAAmBE,CAAY,GAG9CE,EACXJ,EAAI,sBAAwB,wBAGjBK,EAAmB,GAAGH,CAAY,aAClCI,EAAsBN,EAAI,0BAA4B,cACtDO,EACXP,EAAI,mCAAqC,4EClBrCA,EAAMC,EAGCO,EAAOR,EAAI,KAIXS,EAAWT,EAAI,SAIfU,EAAOV,EAAI,KAIXW,EAAMX,EAAI,IAGVY,EAAMZ,EAAI,6DCxBVa,EAAO,IAAI,MAAMZ,EAAiB,CAC7C,IAAK,CAACa,EAAQC,IAAiBD,EAAO,QAAQC,CAAI,EAAE,CACtD,CAAC"}
@@ -1,2 +0,0 @@
1
- export * from '../src/settings/index'
2
- export {}
@@ -1,18 +0,0 @@
1
- const s = {}, _ = s, t = _.VITE_SERVICE_NAME ?? "REPLACE_ME", I = _.VITE_SERVICE_TITLE ?? `Code for Life | ${t}`, O = _.VITE_SERVICE_API_URL ?? "http://localhost:8000", R = `${t}_csrftoken`, c = _.VITE_SESSION_COOKIE_NAME ?? "session_key", A = _.VITE_SESSION_METADATA_COOKIE_NAME ?? "session_metadata", e = { BASE_URL: "/", DEV: !1, MODE: "production", PROD: !0, SSR: !1 }, E = e, V = E.MODE, C = E.BASE_URL, D = E.PROD, M = E.DEV, T = E.SSR, n = { BASE_URL: "/", DEV: !1, MODE: "production", PROD: !0, SSR: !1 }, i = new Proxy(n, {
2
- get: (o, S) => o[`VITE_${S}`]
3
- });
4
- export {
5
- C as BASE_URL,
6
- R as CSRF_COOKIE_NAME,
7
- M as DEV,
8
- V as MODE,
9
- D as PROD,
10
- O as SERVICE_API_URL,
11
- t as SERVICE_NAME,
12
- I as SERVICE_TITLE,
13
- c as SESSION_COOKIE_NAME,
14
- A as SESSION_METADATA_COOKIE_NAME,
15
- T as SSR,
16
- i as vite
17
- };
18
- //# sourceMappingURL=index.es.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.es.js","sources":["../../src/settings/custom.ts","../../src/settings/vite.ts","../../src/settings/index.ts"],"sourcesContent":["/**\n * This file contains all of our custom settings we define for our own purposes.\n *\n * This file is based on:\n * https://github.com/ocadotechnology/codeforlife-package-python/blob/main/codeforlife/settings/custom.py\n */\n\n// Shorthand to access environment variables.\nconst env = import.meta.env as Record<string, string | undefined>\n\n// The name of the current service.\nexport const SERVICE_NAME = env.VITE_SERVICE_NAME ?? \"REPLACE_ME\"\n\n// The title of the current service. Used in the <title/> within the <head/>.\nexport const SERVICE_TITLE =\n env.VITE_SERVICE_TITLE ?? `Code for Life | ${SERVICE_NAME}`\n\n// The api url of the current service.\nexport const SERVICE_API_URL =\n env.VITE_SERVICE_API_URL ?? \"http://localhost:8000\"\n\n// The names of cookies.\nexport const CSRF_COOKIE_NAME = `${SERVICE_NAME}_csrftoken`\nexport const SESSION_COOKIE_NAME = env.VITE_SESSION_COOKIE_NAME ?? \"session_key\"\nexport const SESSION_METADATA_COOKIE_NAME =\n env.VITE_SESSION_METADATA_COOKIE_NAME ?? \"session_metadata\"\n","/**\n * This file contains all of vite's environment variables.\n *\n * https://vite.dev/guide/env-and-mode#env-variables\n */\n\n// Shorthand to access environment variables.\nconst env = import.meta.env\n\n// The mode the app is running in.\nexport const MODE = env.MODE\n\n// The base url the app is being served from.\n// This is determined by the base config option.\nexport const BASE_URL = env.BASE_URL\n\n// Whether the app is running in production (running the dev server with\n// NODE_ENV='production' or running an app built with NODE_ENV='production').\nexport const PROD = env.PROD\n\n// Whether the app is running in development (always the opposite of\n// import.meta.env.PROD)\nexport const DEV = env.DEV\n\n// Whether the app is running in the server.\nexport const SSR = env.SSR\n","// Shorthand to access environment variables.\nexport const vite = new Proxy(import.meta.env, {\n get: (target, name: string) => target[`VITE_${name}`] as string,\n}) as Record<string, string>\n\nexport * from \"./custom\"\nexport * from \"./vite\"\n"],"names":["env","__vite_import_meta_env__","SERVICE_NAME","SERVICE_TITLE","SERVICE_API_URL","CSRF_COOKIE_NAME","SESSION_COOKIE_NAME","SESSION_METADATA_COOKIE_NAME","MODE","BASE_URL","PROD","DEV","SSR","vite","target","name"],"mappings":"cAQMA,IAAMC,GAGCC,IAAeF,EAAI,qBAAqB,cAGxCG,IACXH,EAAI,sBAAsB,mBAAmBE,CAAY,IAG9CE,IACXJ,EAAI,wBAAwB,yBAGjBK,IAAmB,GAAGH,CAAY,cAClCI,IAAsBN,EAAI,4BAA4B,eACtDO,IACXP,EAAI,qCAAqC,2FClBrCA,IAAMC,GAGCO,IAAOR,EAAI,MAIXS,IAAWT,EAAI,UAIfU,IAAOV,EAAI,MAIXW,IAAMX,EAAI,KAGVY,IAAMZ,EAAI,4ECxBVa,IAAO,IAAI,MAAMZ,GAAiB;AAAA,EAC7C,KAAK,CAACa,GAAQC,MAAiBD,EAAO,QAAQC,CAAI,EAAE;AACtD,CAAC;"}
@@ -1,12 +0,0 @@
1
- /**
2
- * This file contains all of our custom settings we define for our own purposes.
3
- *
4
- * This file is based on:
5
- * https://github.com/ocadotechnology/codeforlife-package-python/blob/main/codeforlife/settings/custom.py
6
- */
7
- export declare const SERVICE_NAME: string;
8
- export declare const SERVICE_TITLE: string;
9
- export declare const SERVICE_API_URL: string;
10
- export declare const CSRF_COOKIE_NAME: string;
11
- export declare const SESSION_COOKIE_NAME: string;
12
- export declare const SESSION_METADATA_COOKIE_NAME: string;
@@ -1,3 +0,0 @@
1
- export declare const vite: Record<string, string>;
2
- export * from './custom';
3
- export * from './vite';
@@ -1,10 +0,0 @@
1
- /**
2
- * This file contains all of vite's environment variables.
3
- *
4
- * https://vite.dev/guide/env-and-mode#env-variables
5
- */
6
- export declare const MODE: string;
7
- export declare const BASE_URL: string;
8
- export declare const PROD: boolean;
9
- export declare const DEV: boolean;
10
- export declare const SSR: boolean;