@axium/server 0.19.7 → 0.19.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/client/_app/immutable/assets/3.B53jfNY9.css +1 -0
- package/build/client/_app/immutable/assets/3.B53jfNY9.css.br +0 -0
- package/build/client/_app/immutable/assets/3.B53jfNY9.css.gz +0 -0
- package/build/client/_app/immutable/assets/_page.dJj6MsMM.css +1 -0
- package/build/client/_app/immutable/assets/_page.dJj6MsMM.css.br +0 -0
- package/build/client/_app/immutable/assets/_page.dJj6MsMM.css.gz +0 -0
- package/build/client/_app/immutable/chunks/BJss2F7v.js +31 -0
- package/build/client/_app/immutable/chunks/BJss2F7v.js.br +0 -0
- package/build/client/_app/immutable/chunks/BJss2F7v.js.gz +0 -0
- package/build/client/_app/immutable/chunks/{BYEtX5Az.js → BK1-xGGj.js} +1 -1
- package/build/client/_app/immutable/chunks/BK1-xGGj.js.br +0 -0
- package/build/client/_app/immutable/chunks/BK1-xGGj.js.gz +0 -0
- package/build/client/_app/immutable/chunks/{IgiyYk6u.js → BZOe2Jko.js} +1 -1
- package/build/client/_app/immutable/chunks/BZOe2Jko.js.br +0 -0
- package/build/client/_app/immutable/chunks/BZOe2Jko.js.gz +0 -0
- package/build/client/_app/immutable/chunks/{DY1x3fBx.js → DEcO6BQR.js} +1 -1
- package/build/client/_app/immutable/chunks/DEcO6BQR.js.br +5 -0
- package/build/client/_app/immutable/chunks/DEcO6BQR.js.gz +0 -0
- package/build/client/_app/immutable/chunks/{FWeOBoAM.js → DGhIdZ_j.js} +1 -1
- package/build/client/_app/immutable/chunks/DGhIdZ_j.js.br +0 -0
- package/build/client/_app/immutable/chunks/DGhIdZ_j.js.gz +0 -0
- package/build/client/_app/immutable/chunks/DQaZ7GJF.js +3 -0
- package/build/client/_app/immutable/chunks/DQaZ7GJF.js.br +0 -0
- package/build/client/_app/immutable/chunks/DQaZ7GJF.js.gz +0 -0
- package/build/client/_app/immutable/chunks/{p-F-zYzk.js → sfKJ2mhH.js} +1 -1
- package/build/client/_app/immutable/chunks/sfKJ2mhH.js.br +0 -0
- package/build/client/_app/immutable/chunks/sfKJ2mhH.js.gz +0 -0
- package/build/client/_app/immutable/chunks/uU8Mt6Mg.js +1 -0
- package/build/client/_app/immutable/chunks/uU8Mt6Mg.js.br +0 -0
- package/build/client/_app/immutable/chunks/uU8Mt6Mg.js.gz +0 -0
- package/build/client/_app/immutable/entry/{app.CAgyUG0l.js → app.CtLxdB3j.js} +2 -2
- package/build/client/_app/immutable/entry/app.CtLxdB3j.js.br +0 -0
- package/build/client/_app/immutable/entry/app.CtLxdB3j.js.gz +0 -0
- package/build/client/_app/immutable/entry/start.BHoGWGCr.js +1 -0
- package/build/client/_app/immutable/entry/start.BHoGWGCr.js.br +0 -0
- package/build/client/_app/immutable/entry/start.BHoGWGCr.js.gz +0 -0
- package/build/client/_app/immutable/nodes/{0.fU2Fkia3.js → 0.DuvLHQ5N.js} +1 -1
- package/build/client/_app/immutable/nodes/0.DuvLHQ5N.js.br +0 -0
- package/build/client/_app/immutable/nodes/0.DuvLHQ5N.js.gz +0 -0
- package/build/client/_app/immutable/nodes/{1.DuyZ1f2y.js → 1.wyN-TXT3.js} +1 -1
- package/build/client/_app/immutable/nodes/1.wyN-TXT3.js.br +0 -0
- package/build/client/_app/immutable/nodes/1.wyN-TXT3.js.gz +0 -0
- package/build/client/_app/immutable/nodes/{2.Cczp5_pl.js → 2.CiWhhaCq.js} +1 -1
- package/build/client/_app/immutable/nodes/2.CiWhhaCq.js.br +0 -0
- package/build/client/_app/immutable/nodes/2.CiWhhaCq.js.gz +0 -0
- package/build/client/_app/immutable/nodes/3.Cs-6XQLG.js +1 -0
- package/build/client/_app/immutable/nodes/3.Cs-6XQLG.js.br +0 -0
- package/build/client/_app/immutable/nodes/3.Cs-6XQLG.js.gz +0 -0
- package/build/client/_app/immutable/nodes/{4.DFZa97F0.js → 4.CYhOOrTZ.js} +1 -1
- package/build/client/_app/immutable/nodes/4.CYhOOrTZ.js.br +0 -0
- package/build/client/_app/immutable/nodes/4.CYhOOrTZ.js.gz +0 -0
- package/build/client/_app/immutable/nodes/5.CZtEsvvr.js +1 -0
- package/build/client/_app/immutable/nodes/5.CZtEsvvr.js.br +0 -0
- package/build/client/_app/immutable/nodes/5.CZtEsvvr.js.gz +0 -0
- package/build/client/_app/immutable/nodes/{6.ezb4muQm.js → 6.DpkTCLEe.js} +1 -1
- package/build/client/_app/immutable/nodes/6.DpkTCLEe.js.br +0 -0
- package/build/client/_app/immutable/nodes/6.DpkTCLEe.js.gz +0 -0
- package/build/client/_app/version.json +1 -1
- package/build/client/_app/version.json.br +0 -0
- package/build/client/_app/version.json.gz +0 -0
- package/build/server/chunks/{0-BwO1RCtn.js → 0-B8fDicB8.js} +2 -2
- package/build/server/chunks/{0-BwO1RCtn.js.map → 0-B8fDicB8.js.map} +1 -1
- package/build/server/chunks/1-CZaQz0kM.js +9 -0
- package/build/server/chunks/{1-CHeaiyyB.js.map → 1-CZaQz0kM.js.map} +1 -1
- package/build/server/chunks/{2-BwMXZ3uH.js → 2-CVTt4PZM.js} +2 -2
- package/build/server/chunks/{2-BwMXZ3uH.js.map → 2-CVTt4PZM.js.map} +1 -1
- package/build/server/chunks/3-CYzzOoBn.js +13 -0
- package/build/server/chunks/3-CYzzOoBn.js.map +1 -0
- package/build/server/chunks/4-jbfAhnSm.js +9 -0
- package/build/server/chunks/4-jbfAhnSm.js.map +1 -0
- package/build/server/chunks/5-CfXowMzQ.js +9 -0
- package/build/server/chunks/5-CfXowMzQ.js.map +1 -0
- package/build/server/chunks/6-BRekt1OA.js +9 -0
- package/build/server/chunks/6-BRekt1OA.js.map +1 -0
- package/build/server/chunks/{user-BxKya_IG.js → FormDialog-qGzPcWE3.js} +779 -806
- package/build/server/chunks/FormDialog-qGzPcWE3.js.map +1 -0
- package/build/server/chunks/{Logout-Bn4ION8s.js → Logout-DWwALPvt.js} +3 -3
- package/build/server/chunks/Logout-DWwALPvt.js.map +1 -0
- package/build/server/chunks/{_page.svelte-C5WDLp_N.js → _page.svelte-BypU2Yzj.js} +3 -3
- package/build/server/chunks/_page.svelte-BypU2Yzj.js.map +1 -0
- package/build/server/chunks/{_page.svelte-Cajk6qyo.js → _page.svelte-CYPwBw0g.js} +3 -3
- package/build/server/chunks/_page.svelte-CYPwBw0g.js.map +1 -0
- package/build/server/chunks/_page.svelte-Dz_KPYcN.js +299 -0
- package/build/server/chunks/_page.svelte-Dz_KPYcN.js.map +1 -0
- package/build/server/chunks/_page.svelte-Fe_xIcJF.js +11 -0
- package/build/server/chunks/{_page.svelte-DfGguJ-z.js.map → _page.svelte-Fe_xIcJF.js.map} +1 -1
- package/build/server/chunks/{error.svelte-DkJRpKga.js → error.svelte-CZg-BdYa.js} +3 -3
- package/build/server/chunks/error.svelte-CZg-BdYa.js.map +1 -0
- package/build/server/chunks/{exports-Cc9yggiy.js → exports-Cy4FWdYs.js} +27 -4
- package/build/server/chunks/exports-Cy4FWdYs.js.map +1 -0
- package/build/server/chunks/{hooks.server-B6C3vGPN.js → hooks.server-Cpa72VJw.js} +3 -3
- package/build/server/chunks/{hooks.server-B6C3vGPN.js.map → hooks.server-Cpa72VJw.js.map} +1 -1
- package/build/server/chunks/{index-CBVFb-Fk.js → index-CNBqpMEu.js} +4 -42
- package/build/server/chunks/index-CNBqpMEu.js.map +1 -0
- package/build/server/index.js +3206 -2745
- package/build/server/index.js.map +1 -1
- package/build/server/manifest.js +11 -8
- package/build/server/manifest.js.map +1 -1
- package/dist/requests.d.ts +1 -2
- package/package.json +1 -1
- package/routes/account/+page.svelte +156 -177
- package/routes/account/+page.ts +20 -0
- package/web/lib/WithContextMenu.svelte +56 -15
- package/build/client/_app/immutable/assets/3.C2J9FN5q.css +0 -1
- package/build/client/_app/immutable/assets/3.C2J9FN5q.css.br +0 -0
- package/build/client/_app/immutable/assets/3.C2J9FN5q.css.gz +0 -0
- package/build/client/_app/immutable/assets/_page.CAgJ6UBm.css +0 -1
- package/build/client/_app/immutable/assets/_page.CAgJ6UBm.css.br +0 -0
- package/build/client/_app/immutable/assets/_page.CAgJ6UBm.css.gz +0 -0
- package/build/client/_app/immutable/chunks/BYEtX5Az.js.br +0 -0
- package/build/client/_app/immutable/chunks/BYEtX5Az.js.gz +0 -0
- package/build/client/_app/immutable/chunks/D9BNd75C.js +0 -3
- package/build/client/_app/immutable/chunks/D9BNd75C.js.br +0 -0
- package/build/client/_app/immutable/chunks/D9BNd75C.js.gz +0 -0
- package/build/client/_app/immutable/chunks/DCUM25og.js +0 -1
- package/build/client/_app/immutable/chunks/DCUM25og.js.br +0 -0
- package/build/client/_app/immutable/chunks/DCUM25og.js.gz +0 -0
- package/build/client/_app/immutable/chunks/DY1x3fBx.js.br +0 -0
- package/build/client/_app/immutable/chunks/DY1x3fBx.js.gz +0 -0
- package/build/client/_app/immutable/chunks/DYZBB-Ix.js +0 -31
- package/build/client/_app/immutable/chunks/DYZBB-Ix.js.br +0 -0
- package/build/client/_app/immutable/chunks/DYZBB-Ix.js.gz +0 -0
- package/build/client/_app/immutable/chunks/FWeOBoAM.js.br +0 -0
- package/build/client/_app/immutable/chunks/FWeOBoAM.js.gz +0 -0
- package/build/client/_app/immutable/chunks/IgiyYk6u.js.br +0 -0
- package/build/client/_app/immutable/chunks/IgiyYk6u.js.gz +0 -0
- package/build/client/_app/immutable/chunks/p-F-zYzk.js.br +0 -0
- package/build/client/_app/immutable/chunks/p-F-zYzk.js.gz +0 -0
- package/build/client/_app/immutable/entry/app.CAgyUG0l.js.br +0 -0
- package/build/client/_app/immutable/entry/app.CAgyUG0l.js.gz +0 -0
- package/build/client/_app/immutable/entry/start.CxTr3r7v.js +0 -1
- package/build/client/_app/immutable/entry/start.CxTr3r7v.js.br +0 -2
- package/build/client/_app/immutable/entry/start.CxTr3r7v.js.gz +0 -0
- package/build/client/_app/immutable/nodes/0.fU2Fkia3.js.br +0 -0
- package/build/client/_app/immutable/nodes/0.fU2Fkia3.js.gz +0 -0
- package/build/client/_app/immutable/nodes/1.DuyZ1f2y.js.br +0 -0
- package/build/client/_app/immutable/nodes/1.DuyZ1f2y.js.gz +0 -0
- package/build/client/_app/immutable/nodes/2.Cczp5_pl.js.br +0 -0
- package/build/client/_app/immutable/nodes/2.Cczp5_pl.js.gz +0 -0
- package/build/client/_app/immutable/nodes/3.BwwptDiR.js +0 -1
- package/build/client/_app/immutable/nodes/3.BwwptDiR.js.br +0 -0
- package/build/client/_app/immutable/nodes/3.BwwptDiR.js.gz +0 -0
- package/build/client/_app/immutable/nodes/4.DFZa97F0.js.br +0 -0
- package/build/client/_app/immutable/nodes/4.DFZa97F0.js.gz +0 -0
- package/build/client/_app/immutable/nodes/5.CObFvODa.js +0 -1
- package/build/client/_app/immutable/nodes/5.CObFvODa.js.br +0 -0
- package/build/client/_app/immutable/nodes/5.CObFvODa.js.gz +0 -0
- package/build/client/_app/immutable/nodes/6.ezb4muQm.js.br +0 -0
- package/build/client/_app/immutable/nodes/6.ezb4muQm.js.gz +0 -0
- package/build/server/chunks/1-CHeaiyyB.js +0 -9
- package/build/server/chunks/3-BI9EEPQX.js +0 -9
- package/build/server/chunks/3-BI9EEPQX.js.map +0 -1
- package/build/server/chunks/4-B4PHWuxx.js +0 -9
- package/build/server/chunks/4-B4PHWuxx.js.map +0 -1
- package/build/server/chunks/5-CIWzJq4D.js +0 -9
- package/build/server/chunks/5-CIWzJq4D.js.map +0 -1
- package/build/server/chunks/6-BQsBMa_q.js +0 -9
- package/build/server/chunks/6-BQsBMa_q.js.map +0 -1
- package/build/server/chunks/Logout-Bn4ION8s.js.map +0 -1
- package/build/server/chunks/_page.svelte-C5WDLp_N.js.map +0 -1
- package/build/server/chunks/_page.svelte-Cajk6qyo.js.map +0 -1
- package/build/server/chunks/_page.svelte-DfGguJ-z.js +0 -11
- package/build/server/chunks/_page.svelte-WTcgrDKD.js +0 -312
- package/build/server/chunks/_page.svelte-WTcgrDKD.js.map +0 -1
- package/build/server/chunks/error.svelte-DkJRpKga.js.map +0 -1
- package/build/server/chunks/exports-Cc9yggiy.js.map +0 -1
- package/build/server/chunks/index-CBVFb-Fk.js.map +0 -1
- package/build/server/chunks/user-BxKya_IG.js.map +0 -1
- /package/build/client/_app/immutable/assets/{user.Cbakz6hh.css → FormDialog.Cbakz6hh.css} +0 -0
- /package/build/client/_app/immutable/assets/{user.Cbakz6hh.css.br → FormDialog.Cbakz6hh.css.br} +0 -0
- /package/build/client/_app/immutable/assets/{user.Cbakz6hh.css.gz → FormDialog.Cbakz6hh.css.gz} +0 -0
package/build/server/manifest.js
CHANGED
|
@@ -10,16 +10,19 @@ return {
|
|
|
10
10
|
assets: new Set(["icons/brands.svg","icons/light.svg","icons/regular.svg","icons/solid.svg","styles.css"]),
|
|
11
11
|
mimeTypes: {".svg":"image/svg+xml",".css":"text/css"},
|
|
12
12
|
_: {
|
|
13
|
-
client: {start:"_app/immutable/entry/start.
|
|
13
|
+
client: {start:"_app/immutable/entry/start.BHoGWGCr.js",app:"_app/immutable/entry/app.CtLxdB3j.js",imports:["_app/immutable/entry/start.BHoGWGCr.js","_app/immutable/chunks/DQaZ7GJF.js","_app/immutable/chunks/BZOe2Jko.js","_app/immutable/chunks/uU8Mt6Mg.js","_app/immutable/chunks/BK1-xGGj.js","_app/immutable/chunks/sfKJ2mhH.js","_app/immutable/entry/app.CtLxdB3j.js","_app/immutable/chunks/uU8Mt6Mg.js","_app/immutable/chunks/BK1-xGGj.js","_app/immutable/chunks/DsnmJJEf.js","_app/immutable/chunks/BZOe2Jko.js","_app/immutable/chunks/sfKJ2mhH.js","_app/immutable/chunks/DGhIdZ_j.js"],stylesheets:[],fonts:[],uses_env_dynamic_public:false},
|
|
14
14
|
nodes: [
|
|
15
|
-
__memo(() => import('./chunks/0-
|
|
16
|
-
__memo(() => import('./chunks/1-
|
|
17
|
-
__memo(() => import('./chunks/2-
|
|
18
|
-
__memo(() => import('./chunks/3-
|
|
19
|
-
__memo(() => import('./chunks/4-
|
|
20
|
-
__memo(() => import('./chunks/5-
|
|
21
|
-
__memo(() => import('./chunks/6-
|
|
15
|
+
__memo(() => import('./chunks/0-B8fDicB8.js')),
|
|
16
|
+
__memo(() => import('./chunks/1-CZaQz0kM.js')),
|
|
17
|
+
__memo(() => import('./chunks/2-CVTt4PZM.js')),
|
|
18
|
+
__memo(() => import('./chunks/3-CYzzOoBn.js')),
|
|
19
|
+
__memo(() => import('./chunks/4-jbfAhnSm.js')),
|
|
20
|
+
__memo(() => import('./chunks/5-CfXowMzQ.js')),
|
|
21
|
+
__memo(() => import('./chunks/6-BRekt1OA.js'))
|
|
22
22
|
],
|
|
23
|
+
remotes: {
|
|
24
|
+
|
|
25
|
+
},
|
|
23
26
|
routes: [
|
|
24
27
|
{
|
|
25
28
|
id: "/_axium/default",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"manifest.js","sources":["../../.svelte-kit/adapter-node/manifest.js"],"sourcesContent":["export const manifest = (() => {\nfunction __memo(fn) {\n\tlet value;\n\treturn () => value ??= (value = fn());\n}\n\nreturn {\n\tappDir: \"_app\",\n\tappPath: \"_app\",\n\tassets: new Set([\"icons/brands.svg\",\"icons/light.svg\",\"icons/regular.svg\",\"icons/solid.svg\",\"styles.css\"]),\n\tmimeTypes: {\".svg\":\"image/svg+xml\",\".css\":\"text/css\"},\n\t_: {\n\t\tclient: {start:\"_app/immutable/entry/start.
|
|
1
|
+
{"version":3,"file":"manifest.js","sources":["../../.svelte-kit/adapter-node/manifest.js"],"sourcesContent":["export const manifest = (() => {\nfunction __memo(fn) {\n\tlet value;\n\treturn () => value ??= (value = fn());\n}\n\nreturn {\n\tappDir: \"_app\",\n\tappPath: \"_app\",\n\tassets: new Set([\"icons/brands.svg\",\"icons/light.svg\",\"icons/regular.svg\",\"icons/solid.svg\",\"styles.css\"]),\n\tmimeTypes: {\".svg\":\"image/svg+xml\",\".css\":\"text/css\"},\n\t_: {\n\t\tclient: {start:\"_app/immutable/entry/start.BHoGWGCr.js\",app:\"_app/immutable/entry/app.CtLxdB3j.js\",imports:[\"_app/immutable/entry/start.BHoGWGCr.js\",\"_app/immutable/chunks/DQaZ7GJF.js\",\"_app/immutable/chunks/BZOe2Jko.js\",\"_app/immutable/chunks/uU8Mt6Mg.js\",\"_app/immutable/chunks/BK1-xGGj.js\",\"_app/immutable/chunks/sfKJ2mhH.js\",\"_app/immutable/entry/app.CtLxdB3j.js\",\"_app/immutable/chunks/uU8Mt6Mg.js\",\"_app/immutable/chunks/BK1-xGGj.js\",\"_app/immutable/chunks/DsnmJJEf.js\",\"_app/immutable/chunks/BZOe2Jko.js\",\"_app/immutable/chunks/sfKJ2mhH.js\",\"_app/immutable/chunks/DGhIdZ_j.js\"],stylesheets:[],fonts:[],uses_env_dynamic_public:false},\n\t\tnodes: [\n\t\t\t__memo(() => import('./nodes/0.js')),\n\t\t\t__memo(() => import('./nodes/1.js')),\n\t\t\t__memo(() => import('./nodes/2.js')),\n\t\t\t__memo(() => import('./nodes/3.js')),\n\t\t\t__memo(() => import('./nodes/4.js')),\n\t\t\t__memo(() => import('./nodes/5.js')),\n\t\t\t__memo(() => import('./nodes/6.js'))\n\t\t],\n\t\tremotes: {\n\t\t\t\n\t\t},\n\t\troutes: [\n\t\t\t{\n\t\t\t\tid: \"/_axium/default\",\n\t\t\t\tpattern: /^\\/_axium\\/default\\/?$/,\n\t\t\t\tparams: [],\n\t\t\t\tpage: { layouts: [0,], errors: [1,], leaf: 2 },\n\t\t\t\tendpoint: null\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: \"/account\",\n\t\t\t\tpattern: /^\\/account\\/?$/,\n\t\t\t\tparams: [],\n\t\t\t\tpage: { layouts: [0,], errors: [1,], leaf: 3 },\n\t\t\t\tendpoint: null\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: \"/login\",\n\t\t\t\tpattern: /^\\/login\\/?$/,\n\t\t\t\tparams: [],\n\t\t\t\tpage: { layouts: [0,], errors: [1,], leaf: 4 },\n\t\t\t\tendpoint: null\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: \"/logout\",\n\t\t\t\tpattern: /^\\/logout\\/?$/,\n\t\t\t\tparams: [],\n\t\t\t\tpage: { layouts: [0,], errors: [1,], leaf: 5 },\n\t\t\t\tendpoint: null\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: \"/register\",\n\t\t\t\tpattern: /^\\/register\\/?$/,\n\t\t\t\tparams: [],\n\t\t\t\tpage: { layouts: [0,], errors: [1,], leaf: 6 },\n\t\t\t\tendpoint: null\n\t\t\t}\n\t\t],\n\t\tprerendered_routes: new Set([]),\n\t\tmatchers: async () => {\n\t\t\t\n\t\t\treturn { };\n\t\t},\n\t\tserver_assets: {}\n\t}\n}\n})();\n\nexport const prerendered = new Set([]);\n\nexport const base = \"\";"],"names":[],"mappings":"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"}
|
package/dist/requests.d.ts
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import { type User } from '@axium/core/user';
|
|
2
|
-
import type { Cookies as SK_Cookies } from '@sveltejs/kit';
|
|
3
2
|
import * as z from 'zod';
|
|
4
3
|
import { type UserInternal } from './auth.js';
|
|
5
4
|
import type { ServerRoute } from './routes.js';
|
|
@@ -14,7 +13,7 @@ export interface RequestEvent<Params extends Partial<Record<string, string>> = P
|
|
|
14
13
|
request: Request;
|
|
15
14
|
url: URL;
|
|
16
15
|
params: Params;
|
|
17
|
-
cookies:
|
|
16
|
+
cookies: any;
|
|
18
17
|
}
|
|
19
18
|
export interface ResponseError extends Error {
|
|
20
19
|
status: number;
|
package/package.json
CHANGED
|
@@ -1,44 +1,28 @@
|
|
|
1
1
|
<script lang="ts">
|
|
2
|
-
import { ClipboardCopy, FormDialog, Icon, Logout } from '@axium/server/components';
|
|
3
2
|
import {
|
|
4
3
|
createPasskey,
|
|
5
4
|
deletePasskey,
|
|
6
5
|
deleteUser,
|
|
7
|
-
emailVerificationEnabled,
|
|
8
|
-
getCurrentSession,
|
|
9
|
-
getPasskeys,
|
|
10
|
-
getSessions,
|
|
11
6
|
logout,
|
|
12
7
|
logoutAll,
|
|
13
8
|
sendVerificationEmail,
|
|
14
9
|
updatePasskey,
|
|
15
10
|
updateUser,
|
|
16
11
|
} from '@axium/client/user';
|
|
17
|
-
import
|
|
18
|
-
import {
|
|
12
|
+
import { getUserImage } from '@axium/core/user';
|
|
13
|
+
import { ClipboardCopy, FormDialog, Icon, Logout } from '@axium/server/components';
|
|
14
|
+
import type { PageProps } from './$types';
|
|
15
|
+
|
|
16
|
+
const { data }: PageProps = $props();
|
|
17
|
+
const { canVerify } = data;
|
|
19
18
|
|
|
20
19
|
const dialogs = $state<Record<string, HTMLDialogElement>>({});
|
|
21
20
|
|
|
22
21
|
let verificationSent = $state(false);
|
|
23
|
-
let currentSession = $state
|
|
24
|
-
let user = $state
|
|
25
|
-
let
|
|
26
|
-
let
|
|
27
|
-
let sessions = $state<Session[]>([]);
|
|
28
|
-
|
|
29
|
-
async function ready() {
|
|
30
|
-
currentSession = await getCurrentSession().catch(() => {
|
|
31
|
-
window.location.href = '/login?after=/account';
|
|
32
|
-
return null;
|
|
33
|
-
})!;
|
|
34
|
-
user = currentSession.user;
|
|
35
|
-
|
|
36
|
-
passkeys = await getPasskeys(user.id);
|
|
37
|
-
|
|
38
|
-
sessions = await getSessions(user.id);
|
|
39
|
-
|
|
40
|
-
canVerify = await emailVerificationEnabled(user.id);
|
|
41
|
-
}
|
|
22
|
+
let currentSession = $state(data.currentSession);
|
|
23
|
+
let user = $state(data.user);
|
|
24
|
+
let passkeys = $state(data.passkeys);
|
|
25
|
+
let sessions = $state(data.sessions);
|
|
42
26
|
|
|
43
27
|
async function _editUser(data) {
|
|
44
28
|
const result = await updateUser(user.id, data);
|
|
@@ -56,171 +40,164 @@
|
|
|
56
40
|
</button>
|
|
57
41
|
{/snippet}
|
|
58
42
|
|
|
59
|
-
|
|
60
|
-
<div
|
|
61
|
-
<
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
<p class="greeting">Welcome, {user.name}</p>
|
|
43
|
+
<div class="Account flex-content">
|
|
44
|
+
<div id="pfp-container">
|
|
45
|
+
<img id="pfp" src={getUserImage(user)} alt="User profile" width="100px" height="100px" />
|
|
46
|
+
</div>
|
|
47
|
+
<p class="greeting">Welcome, {user.name}</p>
|
|
65
48
|
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
49
|
+
<div class="section main">
|
|
50
|
+
<h3>Personal Information</h3>
|
|
51
|
+
<div class="item info">
|
|
52
|
+
<p class="subtle">Name</p>
|
|
53
|
+
<p>{user.name}</p>
|
|
54
|
+
{@render action('edit_name')}
|
|
55
|
+
</div>
|
|
56
|
+
<FormDialog bind:dialog={dialogs.edit_name} submit={_editUser} submitText="Change">
|
|
57
|
+
<div>
|
|
58
|
+
<label for="name">What do you want to be called?</label>
|
|
59
|
+
<input name="name" type="text" value={user.name || ''} required />
|
|
72
60
|
</div>
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
61
|
+
</FormDialog>
|
|
62
|
+
<div class="item info">
|
|
63
|
+
<p class="subtle">Email</p>
|
|
64
|
+
<p>
|
|
65
|
+
{user.email}
|
|
66
|
+
{#if user.emailVerified}
|
|
67
|
+
<dfn title="Email verified on {user.emailVerified.toLocaleDateString()}">
|
|
68
|
+
<Icon i="regular/circle-check" />
|
|
69
|
+
</dfn>
|
|
70
|
+
{:else if canVerify}
|
|
71
|
+
<button onclick={() => sendVerificationEmail(user.id).then(() => (verificationSent = true))}>
|
|
72
|
+
{verificationSent ? 'Verification email sent' : 'Verify'}
|
|
73
|
+
</button>
|
|
74
|
+
{/if}
|
|
75
|
+
</p>
|
|
76
|
+
{@render action('edit_email')}
|
|
77
|
+
</div>
|
|
78
|
+
<FormDialog bind:dialog={dialogs.edit_email} submit={_editUser} submitText="Change">
|
|
79
|
+
<div>
|
|
80
|
+
<label for="email">Email Address</label>
|
|
81
|
+
<input name="email" type="email" value={user.email || ''} required />
|
|
82
|
+
</div>
|
|
83
|
+
</FormDialog>
|
|
84
|
+
|
|
85
|
+
<div class="item info">
|
|
86
|
+
<p class="subtle">User ID <dfn title="This is your UUID. It can't be changed."><Icon i="regular/circle-info" /></dfn></p>
|
|
87
|
+
<p>{user.id}</p>
|
|
88
|
+
<ClipboardCopy value={user.id} --size="16px" />
|
|
89
|
+
</div>
|
|
90
|
+
<span>
|
|
91
|
+
<button class="signout" onclick={() => dialogs.logout.showModal()}>Sign Out</button>
|
|
92
|
+
<button style:cursor="pointer" onclick={() => dialogs.delete.showModal()} class="danger">Delete Account</button>
|
|
93
|
+
<Logout bind:dialog={dialogs.logout} />
|
|
94
|
+
<FormDialog
|
|
95
|
+
bind:dialog={dialogs.delete}
|
|
96
|
+
submit={() => deleteUser(user.id).then(() => (window.location.href = '/'))}
|
|
97
|
+
submitText="Delete Account"
|
|
98
|
+
submitDanger
|
|
99
|
+
>
|
|
100
|
+
<p>Are you sure you want to delete your account?<br />This action can't be undone.</p>
|
|
78
101
|
</FormDialog>
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
{:
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
102
|
+
</span>
|
|
103
|
+
</div>
|
|
104
|
+
|
|
105
|
+
<div class="section main">
|
|
106
|
+
<h3>Passkeys</h3>
|
|
107
|
+
{#each passkeys as passkey}
|
|
108
|
+
<div class="item passkey">
|
|
109
|
+
<dfn title={passkey.deviceType == 'multiDevice' ? 'Multiple devices' : 'Single device'}>
|
|
110
|
+
<Icon i={passkey.deviceType == 'multiDevice' ? 'laptop-mobile' : 'mobile'} --size="16px" />
|
|
111
|
+
</dfn>
|
|
112
|
+
<dfn title="This passkey is {passkey.backedUp ? '' : 'not '}backed up">
|
|
113
|
+
<Icon i={passkey.backedUp ? 'circle-check' : 'circle-xmark'} --size="16px" />
|
|
114
|
+
</dfn>
|
|
115
|
+
{#if passkey.name}
|
|
116
|
+
<p>{passkey.name}</p>
|
|
117
|
+
{:else}
|
|
118
|
+
<p class="subtle"><i>Unnamed</i></p>
|
|
119
|
+
{/if}
|
|
120
|
+
<p>Created {passkey.createdAt.toLocaleString()}</p>
|
|
121
|
+
{@render action('edit_passkey#' + passkey.id)}
|
|
122
|
+
{#if passkeys.length > 1}
|
|
123
|
+
{@render action('delete_passkey#' + passkey.id, 'trash')}
|
|
124
|
+
{:else}
|
|
125
|
+
<dfn title="You must have at least one passkey" class="disabled">
|
|
126
|
+
<Icon i="trash-slash" --fill="#888" --size="16px" />
|
|
127
|
+
</dfn>
|
|
128
|
+
{/if}
|
|
94
129
|
</div>
|
|
95
|
-
<FormDialog
|
|
130
|
+
<FormDialog
|
|
131
|
+
bind:dialog={dialogs['edit_passkey#' + passkey.id]}
|
|
132
|
+
submit={data => {
|
|
133
|
+
if (typeof data.name != 'string') throw 'Passkey name must be a string';
|
|
134
|
+
passkey.name = data.name;
|
|
135
|
+
return updatePasskey(passkey.id, data);
|
|
136
|
+
}}
|
|
137
|
+
submitText="Change"
|
|
138
|
+
>
|
|
96
139
|
<div>
|
|
97
|
-
<label for="
|
|
98
|
-
<input name="
|
|
140
|
+
<label for="name">Passkey Name</label>
|
|
141
|
+
<input name="name" type="text" value={passkey.name || ''} />
|
|
99
142
|
</div>
|
|
100
143
|
</FormDialog>
|
|
144
|
+
<FormDialog
|
|
145
|
+
bind:dialog={dialogs['delete_passkey#' + passkey.id]}
|
|
146
|
+
submit={() => deletePasskey(passkey.id).then(() => passkeys.splice(passkeys.indexOf(passkey), 1))}
|
|
147
|
+
submitText="Delete"
|
|
148
|
+
submitDanger={true}
|
|
149
|
+
>
|
|
150
|
+
<p>Are you sure you want to delete this passkey?<br />This action can't be undone.</p>
|
|
151
|
+
</FormDialog>
|
|
152
|
+
{/each}
|
|
153
|
+
<span>
|
|
154
|
+
<button onclick={() => createPasskey(user.id).then(passkeys.push.bind(passkeys))}><Icon i="plus" /> Create</button>
|
|
155
|
+
</span>
|
|
156
|
+
</div>
|
|
101
157
|
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
<Logout bind:dialog={dialogs.logout} />
|
|
111
|
-
<FormDialog
|
|
112
|
-
bind:dialog={dialogs.delete}
|
|
113
|
-
submit={() => deleteUser(user.id).then(() => (window.location.href = '/'))}
|
|
114
|
-
submitText="Delete Account"
|
|
115
|
-
submitDanger
|
|
116
|
-
>
|
|
117
|
-
<p>Are you sure you want to delete your account?<br />This action can't be undone.</p>
|
|
118
|
-
</FormDialog>
|
|
119
|
-
</span>
|
|
120
|
-
</div>
|
|
121
|
-
|
|
122
|
-
<div class="section main">
|
|
123
|
-
<h3>Passkeys</h3>
|
|
124
|
-
{#each passkeys as passkey}
|
|
125
|
-
<div class="item passkey">
|
|
126
|
-
<dfn title={passkey.deviceType == 'multiDevice' ? 'Multiple devices' : 'Single device'}>
|
|
127
|
-
<Icon i={passkey.deviceType == 'multiDevice' ? 'laptop-mobile' : 'mobile'} --size="16px" />
|
|
128
|
-
</dfn>
|
|
129
|
-
<dfn title="This passkey is {passkey.backedUp ? '' : 'not '}backed up">
|
|
130
|
-
<Icon i={passkey.backedUp ? 'circle-check' : 'circle-xmark'} --size="16px" />
|
|
131
|
-
</dfn>
|
|
132
|
-
{#if passkey.name}
|
|
133
|
-
<p>{passkey.name}</p>
|
|
134
|
-
{:else}
|
|
135
|
-
<p class="subtle"><i>Unnamed</i></p>
|
|
158
|
+
<div class="section main">
|
|
159
|
+
<h3>Sessions</h3>
|
|
160
|
+
{#each sessions as session}
|
|
161
|
+
<div class="item session">
|
|
162
|
+
<p>
|
|
163
|
+
{session.id.slice(0, 4)}...{session.id.slice(-4)}
|
|
164
|
+
{#if session.id == currentSession.id}
|
|
165
|
+
<span class="current">Current</span>
|
|
136
166
|
{/if}
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
{#if passkeys.length > 1}
|
|
140
|
-
{@render action('delete_passkey#' + passkey.id, 'trash')}
|
|
141
|
-
{:else}
|
|
142
|
-
<dfn title="You must have at least one passkey" class="disabled">
|
|
143
|
-
<Icon i="trash-slash" --fill="#888" --size="16px" />
|
|
144
|
-
</dfn>
|
|
167
|
+
{#if session.elevated}
|
|
168
|
+
<span class="elevated">Elevated</span>
|
|
145
169
|
{/if}
|
|
146
|
-
</
|
|
147
|
-
<
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
passkey.name = data.name;
|
|
152
|
-
return updatePasskey(passkey.id, data);
|
|
153
|
-
}}
|
|
154
|
-
submitText="Change"
|
|
155
|
-
>
|
|
156
|
-
<div>
|
|
157
|
-
<label for="name">Passkey Name</label>
|
|
158
|
-
<input name="name" type="text" value={passkey.name || ''} />
|
|
159
|
-
</div>
|
|
160
|
-
</FormDialog>
|
|
161
|
-
<FormDialog
|
|
162
|
-
bind:dialog={dialogs['delete_passkey#' + passkey.id]}
|
|
163
|
-
submit={() => deletePasskey(passkey.id).then(() => passkeys.splice(passkeys.indexOf(passkey), 1))}
|
|
164
|
-
submitText="Delete"
|
|
165
|
-
submitDanger={true}
|
|
166
|
-
>
|
|
167
|
-
<p>Are you sure you want to delete this passkey?<br />This action can't be undone.</p>
|
|
168
|
-
</FormDialog>
|
|
169
|
-
{/each}
|
|
170
|
-
<span>
|
|
171
|
-
<button onclick={() => createPasskey(user.id).then(passkeys.push.bind(passkeys))}><Icon i="plus" /> Create</button>
|
|
172
|
-
</span>
|
|
173
|
-
</div>
|
|
174
|
-
|
|
175
|
-
<div class="section main">
|
|
176
|
-
<h3>Sessions</h3>
|
|
177
|
-
{#each sessions as session}
|
|
178
|
-
<div class="item session">
|
|
179
|
-
<p>
|
|
180
|
-
{session.id.slice(0, 4)}...{session.id.slice(-4)}
|
|
181
|
-
{#if session.id == currentSession.id}
|
|
182
|
-
<span class="current">Current</span>
|
|
183
|
-
{/if}
|
|
184
|
-
{#if session.elevated}
|
|
185
|
-
<span class="elevated">Elevated</span>
|
|
186
|
-
{/if}
|
|
187
|
-
</p>
|
|
188
|
-
<p>Created {session.created.toLocaleString()}</p>
|
|
189
|
-
<p>Expires {session.expires.toLocaleString()}</p>
|
|
190
|
-
{@render action('logout#' + session.id, 'right-from-bracket')}
|
|
191
|
-
</div>
|
|
192
|
-
<FormDialog
|
|
193
|
-
bind:dialog={dialogs['logout#' + session.id]}
|
|
194
|
-
submit={async () => {
|
|
195
|
-
await logout(user.id, session.id);
|
|
196
|
-
dialogs['logout#' + session.id].remove();
|
|
197
|
-
sessions.splice(sessions.indexOf(session), 1);
|
|
198
|
-
if (session.id == currentSession.id) window.location.href = '/';
|
|
199
|
-
}}
|
|
200
|
-
submitText="Logout"
|
|
201
|
-
>
|
|
202
|
-
<p>Are you sure you want to log out this session?</p>
|
|
203
|
-
</FormDialog>
|
|
204
|
-
{/each}
|
|
205
|
-
<span>
|
|
206
|
-
<button onclick={() => dialogs.logout_all.showModal()} class="danger">Logout All</button>
|
|
207
|
-
</span>
|
|
170
|
+
</p>
|
|
171
|
+
<p>Created {session.created.toLocaleString()}</p>
|
|
172
|
+
<p>Expires {session.expires.toLocaleString()}</p>
|
|
173
|
+
{@render action('logout#' + session.id, 'right-from-bracket')}
|
|
174
|
+
</div>
|
|
208
175
|
<FormDialog
|
|
209
|
-
bind:dialog={dialogs['
|
|
210
|
-
submit={
|
|
211
|
-
|
|
212
|
-
|
|
176
|
+
bind:dialog={dialogs['logout#' + session.id]}
|
|
177
|
+
submit={async () => {
|
|
178
|
+
await logout(user.id, session.id);
|
|
179
|
+
dialogs['logout#' + session.id].remove();
|
|
180
|
+
sessions.splice(sessions.indexOf(session), 1);
|
|
181
|
+
if (session.id == currentSession.id) window.location.href = '/';
|
|
182
|
+
}}
|
|
183
|
+
submitText="Logout"
|
|
213
184
|
>
|
|
214
|
-
<p>Are you sure you want to log out
|
|
185
|
+
<p>Are you sure you want to log out this session?</p>
|
|
215
186
|
</FormDialog>
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
{
|
|
219
|
-
|
|
220
|
-
<
|
|
221
|
-
|
|
187
|
+
{/each}
|
|
188
|
+
<span>
|
|
189
|
+
<button onclick={() => dialogs.logout_all.showModal()} class="danger">Logout All</button>
|
|
190
|
+
</span>
|
|
191
|
+
<FormDialog
|
|
192
|
+
bind:dialog={dialogs['logout_all']}
|
|
193
|
+
submit={() => logoutAll(user.id).then(() => (window.location.href = '/'))}
|
|
194
|
+
submitText="Logout All Sessions"
|
|
195
|
+
submitDanger
|
|
196
|
+
>
|
|
197
|
+
<p>Are you sure you want to log out all sessions?</p>
|
|
198
|
+
</FormDialog>
|
|
222
199
|
</div>
|
|
223
|
-
|
|
200
|
+
</div>
|
|
224
201
|
|
|
225
202
|
<style>
|
|
226
203
|
#pfp-container {
|
|
@@ -254,9 +231,11 @@
|
|
|
254
231
|
width: 50%;
|
|
255
232
|
padding-top: 4em;
|
|
256
233
|
|
|
234
|
+
/* This is causing duplicate separators when removing sessions/passkeys
|
|
257
235
|
> div:has(+ div) {
|
|
258
236
|
border-bottom: 1px solid #8888;
|
|
259
237
|
}
|
|
238
|
+
*/
|
|
260
239
|
}
|
|
261
240
|
|
|
262
241
|
.section .item {
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { emailVerificationEnabled, getCurrentSession, getPasskeys, getSessions } from '@axium/client/user';
|
|
2
|
+
|
|
3
|
+
export const ssr = false;
|
|
4
|
+
|
|
5
|
+
export async function load() {
|
|
6
|
+
const currentSession = await getCurrentSession().catch(() => {
|
|
7
|
+
window.location.href = '/login?after=/account';
|
|
8
|
+
return null;
|
|
9
|
+
})!;
|
|
10
|
+
|
|
11
|
+
const user = currentSession.user;
|
|
12
|
+
|
|
13
|
+
return {
|
|
14
|
+
currentSession,
|
|
15
|
+
user,
|
|
16
|
+
passkeys: await getPasskeys(user.id),
|
|
17
|
+
sessions: await getSessions(user.id),
|
|
18
|
+
canVerify: await emailVerificationEnabled(user.id),
|
|
19
|
+
};
|
|
20
|
+
}
|
|
@@ -1,32 +1,73 @@
|
|
|
1
1
|
<script lang="ts">
|
|
2
|
-
|
|
2
|
+
import type { HTMLAttributes } from 'svelte/elements';
|
|
3
|
+
import Icon from './Icon.svelte';
|
|
3
4
|
|
|
4
|
-
|
|
5
|
+
interface Props extends HTMLAttributes<HTMLDivElement> {
|
|
6
|
+
children(): any;
|
|
7
|
+
menu(
|
|
8
|
+
/**
|
|
9
|
+
* Shortcut to quickly create a generic action in the context menu.
|
|
10
|
+
*/
|
|
11
|
+
action: (icon: string, text: string, action: (event: MouseEvent) => void) => any
|
|
12
|
+
): any;
|
|
13
|
+
actions: Record<string, () => void>;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
let { children, menu, actions, ...rest }: Props = $props();
|
|
17
|
+
|
|
18
|
+
let popover = $state<HTMLDivElement>();
|
|
5
19
|
|
|
6
|
-
function oncontextmenu(
|
|
7
|
-
|
|
8
|
-
|
|
20
|
+
function oncontextmenu(e: MouseEvent) {
|
|
21
|
+
e.preventDefault();
|
|
22
|
+
e.stopPropagation();
|
|
23
|
+
popover!.togglePopover();
|
|
24
|
+
_forcePopover = true;
|
|
9
25
|
}
|
|
10
26
|
|
|
11
|
-
|
|
12
|
-
|
|
27
|
+
let _forcePopover = false;
|
|
28
|
+
|
|
29
|
+
/**
|
|
30
|
+
* Workaround for https://github.com/whatwg/html/issues/10905
|
|
31
|
+
* @todo Remove when the problem is fixed.
|
|
32
|
+
*/
|
|
33
|
+
function onpointerup(e: PointerEvent) {
|
|
34
|
+
if (!_forcePopover) return;
|
|
35
|
+
e.stopPropagation();
|
|
36
|
+
e.preventDefault();
|
|
37
|
+
popover!.togglePopover();
|
|
38
|
+
_forcePopover = false;
|
|
13
39
|
}
|
|
14
40
|
</script>
|
|
15
41
|
|
|
16
|
-
|
|
17
|
-
|
|
42
|
+
{#snippet action(i: string, text: string, action: (event: MouseEvent) => void)}
|
|
43
|
+
<div
|
|
44
|
+
onclick={e => {
|
|
45
|
+
e.stopPropagation();
|
|
46
|
+
e.preventDefault();
|
|
47
|
+
action(e);
|
|
48
|
+
}}
|
|
49
|
+
class="action"
|
|
50
|
+
>
|
|
51
|
+
{#if i}<Icon {i} --size="14px" />{/if}
|
|
52
|
+
{text}
|
|
53
|
+
</div>
|
|
54
|
+
{/snippet}
|
|
18
55
|
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
{
|
|
56
|
+
<div data-axium-context-menu {oncontextmenu} {onpointerup} {...rest}>
|
|
57
|
+
{@render children()}
|
|
58
|
+
<div popover bind:this={popover}>
|
|
59
|
+
{@render menu(action)}
|
|
60
|
+
</div>
|
|
22
61
|
</div>
|
|
23
62
|
|
|
24
63
|
<style>
|
|
25
|
-
|
|
64
|
+
[data-axium-context-menu] {
|
|
26
65
|
display: contents;
|
|
27
66
|
}
|
|
28
67
|
|
|
29
|
-
.
|
|
30
|
-
|
|
68
|
+
div.action:hover {
|
|
69
|
+
cursor: pointer;
|
|
70
|
+
background-color: #223;
|
|
71
|
+
border-radius: 0.25em;
|
|
31
72
|
}
|
|
32
73
|
</style>
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
svg.svelte-ylmrta{width:var(--size, 1em);height:var(--size, 1em);display:inline-block;fill:var(--fill, #bbb)}button.svelte-g409dh{position:relative;display:inline-block;width:1em;height:1em;border:none;background:transparent}span.svelte-g409dh{position:absolute;inset:0}#pfp-container.svelte-11mz0yj{width:100px;height:100px;margin-top:3em}#pfp-container.svelte-11mz0yj .MenuToggle{float:right;position:relative;top:-24px}#pfp.svelte-11mz0yj{width:100px;height:100px;border-radius:50%;border:1px solid #8888}.greeting.svelte-11mz0yj{font-size:2em}.signout.svelte-11mz0yj{margin-top:2em}.section.svelte-11mz0yj{width:50%;padding-top:4em}.section.svelte-11mz0yj>div:where(.svelte-11mz0yj):has(+div:where(.svelte-11mz0yj)){border-bottom:1px solid #8888}.section.svelte-11mz0yj .item:where(.svelte-11mz0yj){display:grid;align-items:center;width:100%;gap:1em;text-wrap:nowrap;border-top:1px solid #8888;padding-bottom:1em}.info.svelte-11mz0yj{grid-template-columns:10em 1fr 2em}.info.svelte-11mz0yj>:where(.svelte-11mz0yj):first-child{margin-left:1em}.info.svelte-11mz0yj>:where(.svelte-11mz0yj):nth-child(2){text-overflow:ellipsis;overflow:hidden}.passkey.svelte-11mz0yj{grid-template-columns:1em 1em 1fr 1fr 1em 1em}.passkey.svelte-11mz0yj dfn:where(.svelte-11mz0yj):not(.disabled){cursor:help}.session.svelte-11mz0yj{grid-template-columns:1fr 1fr 1fr 1em}.session.svelte-11mz0yj .current:where(.svelte-11mz0yj){border-radius:2em;padding:0 .5em;background-color:#337}.session.svelte-11mz0yj .elevated:where(.svelte-11mz0yj){border-radius:2em;padding:0 .5em;background-color:#733}
|
|
Binary file
|
|
Binary file
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
svg.svelte-ylmrta{width:var(--size, 1em);height:var(--size, 1em);display:inline-block;fill:var(--fill, #bbb)}button.svelte-g409dh{position:relative;display:inline-block;width:1em;height:1em;border:none;background:transparent}span.svelte-g409dh{position:absolute;inset:0}#pfp-container.svelte-11mz0yj{width:100px;height:100px;margin-top:3em;.MenuToggle{float:right;position:relative;top:-24px}}#pfp.svelte-11mz0yj{width:100px;height:100px;border-radius:50%;border:1px solid #8888}.greeting.svelte-11mz0yj{font-size:2em}.signout.svelte-11mz0yj{margin-top:2em}.section.svelte-11mz0yj{width:50%;padding-top:4em;>div:where(.svelte-11mz0yj):has(+div:where(.svelte-11mz0yj)){border-bottom:1px solid #8888}}.section.svelte-11mz0yj .item:where(.svelte-11mz0yj){display:grid;align-items:center;width:100%;gap:1em;text-wrap:nowrap;border-top:1px solid #8888;padding-bottom:1em}.info.svelte-11mz0yj{grid-template-columns:10em 1fr 2em;>:where(.svelte-11mz0yj):first-child{margin-left:1em}>:where(.svelte-11mz0yj):nth-child(2){text-overflow:ellipsis;overflow:hidden}}.passkey.svelte-11mz0yj{grid-template-columns:1em 1em 1fr 1fr 1em 1em;dfn:where(.svelte-11mz0yj):not(.disabled){cursor:help}}.session.svelte-11mz0yj{grid-template-columns:1fr 1fr 1fr 1em;.current:where(.svelte-11mz0yj){border-radius:2em;padding:0 .5em;background-color:#337}.elevated:where(.svelte-11mz0yj){border-radius:2em;padding:0 .5em;background-color:#733}}
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|