zudoku 0.46.3 → 0.47.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/config/config.d.ts +11 -0
- package/dist/config/validators/InputSidebarSchema.d.ts +1 -1
- package/dist/config/validators/validate.d.ts +47 -47
- package/dist/config/validators/validate.js +11 -1
- package/dist/config/validators/validate.js.map +1 -1
- package/dist/config/validators/validate.test.d.ts +1 -0
- package/dist/config/validators/validate.test.js +80 -0
- package/dist/config/validators/validate.test.js.map +1 -0
- package/dist/lib/auth/issuer.d.ts +2 -0
- package/dist/lib/auth/issuer.js +34 -0
- package/dist/lib/auth/issuer.js.map +1 -0
- package/dist/lib/auth/issuer.test.d.ts +1 -0
- package/dist/lib/auth/issuer.test.js +81 -0
- package/dist/lib/auth/issuer.test.js.map +1 -0
- package/dist/lib/authentication/hook.d.ts +6 -0
- package/dist/lib/authentication/providers/auth0.js +1 -1
- package/dist/lib/authentication/providers/auth0.js.map +1 -1
- package/dist/lib/authentication/providers/azureb2c.d.ts +28 -0
- package/dist/lib/authentication/providers/azureb2c.js +145 -0
- package/dist/lib/authentication/providers/azureb2c.js.map +1 -0
- package/dist/lib/authentication/providers/clerk.js +3 -12
- package/dist/lib/authentication/providers/clerk.js.map +1 -1
- package/dist/lib/authentication/providers/openid.d.ts +1 -0
- package/dist/lib/authentication/providers/openid.js +38 -0
- package/dist/lib/authentication/providers/openid.js.map +1 -1
- package/dist/lib/authentication/providers/supabase.js +2 -9
- package/dist/lib/authentication/providers/supabase.js.map +1 -1
- package/dist/lib/authentication/state.d.ts +6 -5
- package/dist/lib/authentication/state.js +19 -6
- package/dist/lib/authentication/state.js.map +1 -1
- package/dist/lib/components/context/ZudokuProvider.d.ts +1 -1
- package/dist/lib/components/index.d.ts +6 -0
- package/dist/lib/hooks/index.d.ts +6 -0
- package/dist/lib/plugins/openapi/PlaygroundDialogWrapper.d.ts +1 -1
- package/dist/lib/plugins/openapi/playground/Headers.d.ts +2 -2
- package/dist/lib/plugins/openapi/playground/fileUtils.js +1 -1
- package/dist/lib/plugins/openapi/playground/fileUtils.js.map +1 -1
- package/dist/lib/util/MdxComponents.js +1 -1
- package/dist/lib/util/MdxComponents.js.map +1 -1
- package/dist/vite/build.js +1 -28
- package/dist/vite/build.js.map +1 -1
- package/lib/{Markdown-D81l28Ib.js → Markdown-BUE2ViaD.js} +37 -37
- package/lib/{Markdown-D81l28Ib.js.map → Markdown-BUE2ViaD.js.map} +1 -1
- package/lib/{MdxPage-S_CxlNmX.js → MdxPage-By4UkRkI.js} +4 -4
- package/lib/{MdxPage-S_CxlNmX.js.map → MdxPage-By4UkRkI.js.map} +1 -1
- package/lib/{OasProvider-D5rt6WMb.js → OasProvider-C6_Kx5O7.js} +2 -2
- package/lib/{OasProvider-D5rt6WMb.js.map → OasProvider-C6_Kx5O7.js.map} +1 -1
- package/lib/{OperationList-CNhg654C.js → OperationList-BISd29LY.js} +6 -6
- package/lib/OperationList-BISd29LY.js.map +1 -0
- package/lib/{RouteGuard-CZ_uLv3g.js → RouteGuard-CgmsSw7T.js} +2 -2
- package/lib/{RouteGuard-CZ_uLv3g.js.map → RouteGuard-CgmsSw7T.js.map} +1 -1
- package/lib/{SchemaList-BvzCrTYg.js → SchemaList-BqnRo5ov.js} +6 -6
- package/lib/{SchemaList-BvzCrTYg.js.map → SchemaList-BqnRo5ov.js.map} +1 -1
- package/lib/{SchemaView-Br1RupCp.js → SchemaView-CtYJpxQI.js} +3 -3
- package/lib/{SchemaView-Br1RupCp.js.map → SchemaView-CtYJpxQI.js.map} +1 -1
- package/lib/{SignUp-B-1Pvc-8.js → SignUp-CrjeBbqN.js} +2 -2
- package/lib/{SignUp-B-1Pvc-8.js.map → SignUp-CrjeBbqN.js.map} +1 -1
- package/lib/{Slot-T8NJUkm4.js → Slot-DANV2b7_.js} +4 -4
- package/lib/{Slot-T8NJUkm4.js.map → Slot-DANV2b7_.js.map} +1 -1
- package/lib/{SyntaxHighlight-Cz6Me7-F.js → SyntaxHighlight-DtvR7RLF.js} +1291 -1265
- package/lib/SyntaxHighlight-DtvR7RLF.js.map +1 -0
- package/lib/{Toc-PA-j0gEu.js → Toc-ClJBmdtI.js} +2 -2
- package/lib/{Toc-PA-j0gEu.js.map → Toc-ClJBmdtI.js.map} +1 -1
- package/lib/{circular-5FeDWJOn.js → circular-pOdgLzpG.js} +2 -2
- package/lib/{circular-5FeDWJOn.js.map → circular-pOdgLzpG.js.map} +1 -1
- package/lib/clerk-yAKDC3Qz.js +24812 -0
- package/lib/clerk-yAKDC3Qz.js.map +1 -0
- package/lib/{createServer-BC2RZgmW.js → createServer-qAtUf99r.js} +2625 -2615
- package/lib/createServer-qAtUf99r.js.map +1 -0
- package/lib/errors-Bpodza84.js +78 -0
- package/lib/errors-Bpodza84.js.map +1 -0
- package/lib/{hook-k7PfUIsj.js → hook-wIlTGE-2.js} +52 -31
- package/lib/{hook-k7PfUIsj.js.map → hook-wIlTGE-2.js.map} +1 -1
- package/lib/{index-CJZthJSj.js → index-RFzRn4fM.js} +10 -10
- package/lib/index-RFzRn4fM.js.map +1 -0
- package/lib/{mutation-BSeQ8pEK.js → mutation-C-kdA_1r.js} +2 -2
- package/lib/{mutation-BSeQ8pEK.js.map → mutation-C-kdA_1r.js.map} +1 -1
- package/lib/ui/SyntaxHighlight.js +2 -2
- package/lib/{useMutation-CZSmsIGW.js → useMutation-3Ph3x6En.js} +3 -3
- package/lib/{useMutation-CZSmsIGW.js.map → useMutation-3Ph3x6En.js.map} +1 -1
- package/lib/zudoku.auth-auth0.js +2 -2
- package/lib/zudoku.auth-auth0.js.map +1 -1
- package/lib/zudoku.auth-azureb2c.js +9974 -0
- package/lib/zudoku.auth-azureb2c.js.map +1 -0
- package/lib/zudoku.auth-clerk.js +39 -48
- package/lib/zudoku.auth-clerk.js.map +1 -1
- package/lib/zudoku.auth-openid.js +291 -316
- package/lib/zudoku.auth-openid.js.map +1 -1
- package/lib/zudoku.components.js +1222 -1594
- package/lib/zudoku.components.js.map +1 -1
- package/lib/zudoku.hooks.js +2 -2
- package/lib/zudoku.plugin-api-catalog.js +2 -2
- package/lib/zudoku.plugin-api-keys.js +3 -3
- package/lib/zudoku.plugin-api-keys.js.map +1 -1
- package/lib/zudoku.plugin-custom-pages.js +1 -1
- package/lib/zudoku.plugin-markdown.js +1 -1
- package/lib/zudoku.plugin-openapi.js +2 -2
- package/lib/zudoku.plugin-search-pagefind.js +2 -2
- package/package.json +37 -19
- package/src/lib/auth/issuer.test.ts +104 -0
- package/src/lib/auth/issuer.ts +38 -0
- package/src/lib/authentication/providers/auth0.tsx +1 -1
- package/src/lib/authentication/providers/azureb2c.tsx +196 -0
- package/src/lib/authentication/providers/clerk.tsx +3 -12
- package/src/lib/authentication/providers/openid.tsx +53 -0
- package/src/lib/authentication/providers/supabase.tsx +2 -9
- package/src/lib/authentication/state.ts +37 -7
- package/src/lib/components/context/ZudokuProvider.tsx +1 -1
- package/src/lib/plugins/api-keys/SettingsApiKeys.tsx +1 -1
- package/src/lib/plugins/openapi/PlaygroundDialogWrapper.tsx +1 -1
- package/src/lib/plugins/openapi/playground/Headers.tsx +2 -2
- package/src/lib/plugins/openapi/playground/fileUtils.ts +1 -1
- package/src/lib/util/MdxComponents.tsx +1 -1
- package/lib/OperationList-CNhg654C.js.map +0 -1
- package/lib/SyntaxHighlight-Cz6Me7-F.js.map +0 -1
- package/lib/createServer-BC2RZgmW.js.map +0 -1
- package/lib/index-CJZthJSj.js.map +0 -1
package/lib/zudoku.auth-clerk.js
CHANGED
|
@@ -1,69 +1,67 @@
|
|
|
1
1
|
import { j as l } from "./jsx-runtime-C5mzlN2N.js";
|
|
2
|
-
import { LogOutIcon as
|
|
3
|
-
import { S as
|
|
4
|
-
import { u as
|
|
2
|
+
import { LogOutIcon as g } from "lucide-react";
|
|
3
|
+
import { S as f, a as w, b as p } from "./SignUp-CrjeBbqN.js";
|
|
4
|
+
import { u as n } from "./hook-wIlTGE-2.js";
|
|
5
5
|
const y = ({
|
|
6
6
|
clerkPubKey: d,
|
|
7
7
|
redirectToAfterSignOut: c = "/",
|
|
8
8
|
redirectToAfterSignUp: t,
|
|
9
|
-
redirectToAfterSignIn:
|
|
9
|
+
redirectToAfterSignIn: r
|
|
10
10
|
}) => {
|
|
11
|
-
let
|
|
11
|
+
let s;
|
|
12
12
|
const a = (async () => {
|
|
13
13
|
if (typeof window > "u") return;
|
|
14
|
-
const { Clerk: e } = await import("
|
|
15
|
-
if (
|
|
16
|
-
const
|
|
14
|
+
const { Clerk: e } = await import("./clerk-yAKDC3Qz.js");
|
|
15
|
+
if (s = new e(d), await s.load(), s.user) {
|
|
16
|
+
const i = s.user.emailAddresses.find(
|
|
17
17
|
(o) => o.verification.status === "verified"
|
|
18
18
|
);
|
|
19
|
-
|
|
20
|
-
isAuthenticated: !0,
|
|
21
|
-
isPending: !1,
|
|
19
|
+
n.getState().setLoggedIn({
|
|
22
20
|
profile: {
|
|
23
|
-
sub:
|
|
24
|
-
name:
|
|
25
|
-
email:
|
|
26
|
-
emailVerified:
|
|
27
|
-
pictureUrl:
|
|
21
|
+
sub: s.user.id,
|
|
22
|
+
name: s.user.fullName ?? void 0,
|
|
23
|
+
email: i?.emailAddress ?? s.user.emailAddresses[0]?.emailAddress,
|
|
24
|
+
emailVerified: i !== void 0,
|
|
25
|
+
pictureUrl: s.user.imageUrl
|
|
28
26
|
},
|
|
29
27
|
providerData: {
|
|
30
28
|
user: {
|
|
31
|
-
publicMetadata:
|
|
32
|
-
id:
|
|
33
|
-
emailAddresses:
|
|
34
|
-
imageUrl:
|
|
35
|
-
fullName:
|
|
29
|
+
publicMetadata: s.user.publicMetadata,
|
|
30
|
+
id: s.user.id,
|
|
31
|
+
emailAddresses: s.user.emailAddresses,
|
|
32
|
+
imageUrl: s.user.imageUrl,
|
|
33
|
+
fullName: s.user.fullName
|
|
36
34
|
}
|
|
37
35
|
}
|
|
38
36
|
});
|
|
39
37
|
}
|
|
40
|
-
return
|
|
38
|
+
return s;
|
|
41
39
|
})();
|
|
42
40
|
async function u() {
|
|
43
|
-
if (await a, !
|
|
41
|
+
if (await a, !s?.session)
|
|
44
42
|
throw new Error("No session available");
|
|
45
|
-
const e = await
|
|
43
|
+
const e = await s.session.getToken();
|
|
46
44
|
if (!e)
|
|
47
45
|
throw new Error("Could not get access token from Clerk");
|
|
48
46
|
return e;
|
|
49
47
|
}
|
|
50
48
|
async function m(e) {
|
|
51
|
-
const
|
|
52
|
-
return e.headers.set("Authorization", `Bearer ${
|
|
49
|
+
const i = await u();
|
|
50
|
+
return e.headers.set("Authorization", `Bearer ${i}`), e;
|
|
53
51
|
}
|
|
54
52
|
return {
|
|
55
53
|
getRoutes: () => [
|
|
56
54
|
{
|
|
57
55
|
path: "/signout",
|
|
58
|
-
element: /* @__PURE__ */ l.jsx(
|
|
56
|
+
element: /* @__PURE__ */ l.jsx(f, {})
|
|
59
57
|
},
|
|
60
58
|
{
|
|
61
59
|
path: "/signin",
|
|
62
|
-
element: /* @__PURE__ */ l.jsx(
|
|
60
|
+
element: /* @__PURE__ */ l.jsx(w, {})
|
|
63
61
|
},
|
|
64
62
|
{
|
|
65
63
|
path: "/signup",
|
|
66
|
-
element: /* @__PURE__ */ l.jsx(
|
|
64
|
+
element: /* @__PURE__ */ l.jsx(p, {})
|
|
67
65
|
}
|
|
68
66
|
],
|
|
69
67
|
getProfileMenuItems() {
|
|
@@ -72,7 +70,7 @@ const y = ({
|
|
|
72
70
|
label: "Logout",
|
|
73
71
|
path: "/signout",
|
|
74
72
|
category: "bottom",
|
|
75
|
-
icon:
|
|
73
|
+
icon: g
|
|
76
74
|
}
|
|
77
75
|
];
|
|
78
76
|
},
|
|
@@ -80,17 +78,15 @@ const y = ({
|
|
|
80
78
|
const e = await a;
|
|
81
79
|
if (e)
|
|
82
80
|
if (e.session) {
|
|
83
|
-
const
|
|
81
|
+
const i = e.session.user.emailAddresses.find(
|
|
84
82
|
(o) => o.verification.status === "verified"
|
|
85
83
|
);
|
|
86
|
-
|
|
87
|
-
isAuthenticated: !0,
|
|
88
|
-
isPending: !1,
|
|
84
|
+
n.getState().setLoggedIn({
|
|
89
85
|
profile: {
|
|
90
86
|
sub: e.session.user.id,
|
|
91
87
|
name: e.session.user.fullName ?? void 0,
|
|
92
|
-
email:
|
|
93
|
-
emailVerified:
|
|
88
|
+
email: i?.emailAddress ?? e.session.user.emailAddresses[0]?.emailAddress,
|
|
89
|
+
emailVerified: i !== void 0,
|
|
94
90
|
pictureUrl: e.session.user.imageUrl
|
|
95
91
|
},
|
|
96
92
|
providerData: {
|
|
@@ -98,7 +94,7 @@ const y = ({
|
|
|
98
94
|
}
|
|
99
95
|
});
|
|
100
96
|
} else
|
|
101
|
-
|
|
97
|
+
n.setState({
|
|
102
98
|
isAuthenticated: !1,
|
|
103
99
|
isPending: !1,
|
|
104
100
|
profile: void 0
|
|
@@ -107,24 +103,19 @@ const y = ({
|
|
|
107
103
|
getAccessToken: u,
|
|
108
104
|
signRequest: m,
|
|
109
105
|
signOut: async () => {
|
|
110
|
-
await a, await
|
|
106
|
+
await a, await s?.signOut({
|
|
111
107
|
redirectUrl: window.location.origin + c
|
|
112
|
-
}),
|
|
113
|
-
isAuthenticated: !1,
|
|
114
|
-
isPending: !1,
|
|
115
|
-
profile: null,
|
|
116
|
-
providerData: null
|
|
117
|
-
});
|
|
108
|
+
}), n.getState().setLoggedOut();
|
|
118
109
|
},
|
|
119
110
|
signIn: async ({ redirectTo: e } = {}) => {
|
|
120
|
-
await a, await
|
|
121
|
-
signInForceRedirectUrl:
|
|
111
|
+
await a, await s?.redirectToSignIn({
|
|
112
|
+
signInForceRedirectUrl: r ? window.location.origin + r : e,
|
|
122
113
|
signUpForceRedirectUrl: t ? window.location.origin + t : e
|
|
123
114
|
});
|
|
124
115
|
},
|
|
125
116
|
signUp: async ({ redirectTo: e } = {}) => {
|
|
126
|
-
await a, await
|
|
127
|
-
signInForceRedirectUrl:
|
|
117
|
+
await a, await s?.redirectToSignUp({
|
|
118
|
+
signInForceRedirectUrl: r ? window.location.origin + r : e,
|
|
128
119
|
signUpForceRedirectUrl: t ? window.location.origin + t : e
|
|
129
120
|
});
|
|
130
121
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"zudoku.auth-clerk.js","sources":["../src/lib/authentication/providers/clerk.tsx"],"sourcesContent":["import type { Clerk } from \"@clerk/clerk-js\";\nimport { LogOutIcon } from \"lucide-react\";\nimport { type ZudokuPlugin } from \"zudoku/plugins\";\nimport { type ClerkAuthenticationConfig } from \"../../../config/config.js\";\nimport {\n type AuthenticationPlugin,\n type AuthenticationProviderInitializer,\n} from \"../authentication.js\";\nimport { SignIn } from \"../components/SignIn.js\";\nimport { SignOut } from \"../components/SignOut.js\";\nimport { SignUp } from \"../components/SignUp.js\";\nimport { useAuthState } from \"../state.js\";\n\nconst clerkAuth: AuthenticationProviderInitializer<\n ClerkAuthenticationConfig\n> = ({\n clerkPubKey,\n redirectToAfterSignOut = \"/\",\n redirectToAfterSignUp,\n redirectToAfterSignIn,\n}): AuthenticationPlugin & ZudokuPlugin => {\n let clerkApi: Clerk | undefined;\n const ensureLoaded = (async () => {\n if (typeof window === \"undefined\") return;\n const { Clerk } = await import(\"@clerk/clerk-js\");\n clerkApi = new Clerk(clerkPubKey);\n\n await clerkApi.load();\n\n if (clerkApi.user) {\n const verifiedEmail = clerkApi.user.emailAddresses.find(\n (email) => email.verification.status === \"verified\",\n );\n useAuthState.
|
|
1
|
+
{"version":3,"file":"zudoku.auth-clerk.js","sources":["../src/lib/authentication/providers/clerk.tsx"],"sourcesContent":["import type { Clerk } from \"@clerk/clerk-js\";\nimport { LogOutIcon } from \"lucide-react\";\nimport { type ZudokuPlugin } from \"zudoku/plugins\";\nimport { type ClerkAuthenticationConfig } from \"../../../config/config.js\";\nimport {\n type AuthenticationPlugin,\n type AuthenticationProviderInitializer,\n} from \"../authentication.js\";\nimport { SignIn } from \"../components/SignIn.js\";\nimport { SignOut } from \"../components/SignOut.js\";\nimport { SignUp } from \"../components/SignUp.js\";\nimport { useAuthState } from \"../state.js\";\n\nconst clerkAuth: AuthenticationProviderInitializer<\n ClerkAuthenticationConfig\n> = ({\n clerkPubKey,\n redirectToAfterSignOut = \"/\",\n redirectToAfterSignUp,\n redirectToAfterSignIn,\n}): AuthenticationPlugin & ZudokuPlugin => {\n let clerkApi: Clerk | undefined;\n const ensureLoaded = (async () => {\n if (typeof window === \"undefined\") return;\n const { Clerk } = await import(\"@clerk/clerk-js\");\n clerkApi = new Clerk(clerkPubKey);\n\n await clerkApi.load();\n\n if (clerkApi.user) {\n const verifiedEmail = clerkApi.user.emailAddresses.find(\n (email) => email.verification.status === \"verified\",\n );\n useAuthState.getState().setLoggedIn({\n profile: {\n sub: clerkApi.user.id,\n name: clerkApi.user.fullName ?? undefined,\n email:\n verifiedEmail?.emailAddress ??\n clerkApi.user.emailAddresses[0]?.emailAddress,\n emailVerified: verifiedEmail !== undefined,\n pictureUrl: clerkApi.user.imageUrl,\n },\n providerData: {\n user: {\n publicMetadata: clerkApi.user.publicMetadata,\n id: clerkApi.user.id,\n emailAddresses: clerkApi.user.emailAddresses,\n imageUrl: clerkApi.user.imageUrl,\n fullName: clerkApi.user.fullName,\n },\n },\n });\n }\n\n return clerkApi;\n })();\n\n async function getAccessToken() {\n await ensureLoaded;\n if (!clerkApi?.session) {\n throw new Error(\"No session available\");\n }\n const response = await clerkApi.session.getToken();\n if (!response) {\n throw new Error(\"Could not get access token from Clerk\");\n }\n return response;\n }\n\n async function signRequest(request: Request): Promise<Request> {\n const response = await getAccessToken();\n request.headers.set(\"Authorization\", `Bearer ${response}`);\n return request;\n }\n\n return {\n getRoutes: () => {\n return [\n {\n path: \"/signout\",\n element: <SignOut />,\n },\n {\n path: \"/signin\",\n element: <SignIn />,\n },\n {\n path: \"/signup\",\n element: <SignUp />,\n },\n ];\n },\n\n getProfileMenuItems() {\n return [\n {\n label: \"Logout\",\n path: \"/signout\",\n category: \"bottom\",\n icon: LogOutIcon,\n } as const,\n ];\n },\n initialize: async () => {\n const clerk = await ensureLoaded;\n\n if (!clerk) {\n return;\n }\n\n if (clerk.session) {\n const verifiedEmail = clerk.session.user.emailAddresses.find(\n (email) => email.verification.status === \"verified\",\n );\n useAuthState.getState().setLoggedIn({\n profile: {\n sub: clerk.session.user.id,\n name: clerk.session.user.fullName ?? undefined,\n email:\n verifiedEmail?.emailAddress ??\n clerk.session.user.emailAddresses[0]?.emailAddress,\n emailVerified: verifiedEmail !== undefined,\n pictureUrl: clerk.session.user.imageUrl,\n },\n providerData: {\n user: clerk.session.user,\n },\n });\n } else {\n useAuthState.setState({\n isAuthenticated: false,\n isPending: false,\n profile: undefined,\n });\n }\n },\n getAccessToken,\n signRequest,\n signOut: async () => {\n await ensureLoaded;\n await clerkApi?.signOut({\n redirectUrl: window.location.origin + redirectToAfterSignOut,\n });\n useAuthState.getState().setLoggedOut();\n },\n signIn: async ({ redirectTo }: { redirectTo?: string } = {}) => {\n await ensureLoaded;\n await clerkApi?.redirectToSignIn({\n signInForceRedirectUrl: redirectToAfterSignIn\n ? window.location.origin + redirectToAfterSignIn\n : redirectTo,\n signUpForceRedirectUrl: redirectToAfterSignUp\n ? window.location.origin + redirectToAfterSignUp\n : redirectTo,\n });\n },\n signUp: async ({ redirectTo }: { redirectTo?: string } = {}) => {\n await ensureLoaded;\n await clerkApi?.redirectToSignUp({\n signInForceRedirectUrl: redirectToAfterSignIn\n ? window.location.origin + redirectToAfterSignIn\n : redirectTo,\n signUpForceRedirectUrl: redirectToAfterSignUp\n ? window.location.origin + redirectToAfterSignUp\n : redirectTo,\n });\n },\n };\n};\n\nexport default clerkAuth;\n"],"names":["clerkAuth","clerkPubKey","redirectToAfterSignOut","redirectToAfterSignUp","redirectToAfterSignIn","clerkApi","ensureLoaded","Clerk","verifiedEmail","email","useAuthState","getAccessToken","response","signRequest","request","SignOut","SignIn","SignUp","LogOutIcon","clerk","redirectTo"],"mappings":";;;;AAaA,MAAMA,IAEF,CAAC;AAAA,EACH,aAAAC;AAAA,EACA,wBAAAC,IAAyB;AAAA,EACzB,uBAAAC;AAAA,EACA,uBAAAC;AACF,MAA2C;AACrC,MAAAC;AACJ,QAAMC,KAAgB,YAAY;AAC5B,QAAA,OAAO,SAAW,IAAa;AACnC,UAAM,EAAE,OAAAC,EAAA,IAAU,MAAM,OAAO,qBAAiB;AAKhD,QAJWF,IAAA,IAAIE,EAAMN,CAAW,GAEhC,MAAMI,EAAS,KAAK,GAEhBA,EAAS,MAAM;AACX,YAAAG,IAAgBH,EAAS,KAAK,eAAe;AAAA,QACjD,CAACI,MAAUA,EAAM,aAAa,WAAW;AAAA,MAC3C;AACa,MAAAC,EAAA,WAAW,YAAY;AAAA,QAClC,SAAS;AAAA,UACP,KAAKL,EAAS,KAAK;AAAA,UACnB,MAAMA,EAAS,KAAK,YAAY;AAAA,UAChC,OACEG,GAAe,gBACfH,EAAS,KAAK,eAAe,CAAC,GAAG;AAAA,UACnC,eAAeG,MAAkB;AAAA,UACjC,YAAYH,EAAS,KAAK;AAAA,QAC5B;AAAA,QACA,cAAc;AAAA,UACZ,MAAM;AAAA,YACJ,gBAAgBA,EAAS,KAAK;AAAA,YAC9B,IAAIA,EAAS,KAAK;AAAA,YAClB,gBAAgBA,EAAS,KAAK;AAAA,YAC9B,UAAUA,EAAS,KAAK;AAAA,YACxB,UAAUA,EAAS,KAAK;AAAA,UAAA;AAAA,QAC1B;AAAA,MACF,CACD;AAAA,IAAA;AAGI,WAAAA;AAAA,EAAA,GACN;AAEH,iBAAeM,IAAiB;AAE1B,QADE,MAAAL,GACF,CAACD,GAAU;AACP,YAAA,IAAI,MAAM,sBAAsB;AAExC,UAAMO,IAAW,MAAMP,EAAS,QAAQ,SAAS;AACjD,QAAI,CAACO;AACG,YAAA,IAAI,MAAM,uCAAuC;AAElD,WAAAA;AAAA,EAAA;AAGT,iBAAeC,EAAYC,GAAoC;AACvD,UAAAF,IAAW,MAAMD,EAAe;AACtC,WAAAG,EAAQ,QAAQ,IAAI,iBAAiB,UAAUF,CAAQ,EAAE,GAClDE;AAAA,EAAA;AAGF,SAAA;AAAA,IACL,WAAW,MACF;AAAA,MACL;AAAA,QACE,MAAM;AAAA,QACN,+BAAUC,GAAQ,CAAA,CAAA;AAAA,MACpB;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,+BAAUC,GAAO,CAAA,CAAA;AAAA,MACnB;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,+BAAUC,GAAO,CAAA,CAAA;AAAA,MAAA;AAAA,IAErB;AAAA,IAGF,sBAAsB;AACb,aAAA;AAAA,QACL;AAAA,UACE,OAAO;AAAA,UACP,MAAM;AAAA,UACN,UAAU;AAAA,UACV,MAAMC;AAAA,QAAA;AAAA,MAEV;AAAA,IACF;AAAA,IACA,YAAY,YAAY;AACtB,YAAMC,IAAQ,MAAMb;AAEpB,UAAKa;AAIL,YAAIA,EAAM,SAAS;AACjB,gBAAMX,IAAgBW,EAAM,QAAQ,KAAK,eAAe;AAAA,YACtD,CAACV,MAAUA,EAAM,aAAa,WAAW;AAAA,UAC3C;AACa,UAAAC,EAAA,WAAW,YAAY;AAAA,YAClC,SAAS;AAAA,cACP,KAAKS,EAAM,QAAQ,KAAK;AAAA,cACxB,MAAMA,EAAM,QAAQ,KAAK,YAAY;AAAA,cACrC,OACEX,GAAe,gBACfW,EAAM,QAAQ,KAAK,eAAe,CAAC,GAAG;AAAA,cACxC,eAAeX,MAAkB;AAAA,cACjC,YAAYW,EAAM,QAAQ,KAAK;AAAA,YACjC;AAAA,YACA,cAAc;AAAA,cACZ,MAAMA,EAAM,QAAQ;AAAA,YAAA;AAAA,UACtB,CACD;AAAA,QAAA;AAED,UAAAT,EAAa,SAAS;AAAA,YACpB,iBAAiB;AAAA,YACjB,WAAW;AAAA,YACX,SAAS;AAAA,UAAA,CACV;AAAA,IAEL;AAAA,IACA,gBAAAC;AAAA,IACA,aAAAE;AAAA,IACA,SAAS,YAAY;AACb,YAAAP,GACN,MAAMD,GAAU,QAAQ;AAAA,QACtB,aAAa,OAAO,SAAS,SAASH;AAAA,MAAA,CACvC,GACYQ,EAAA,WAAW,aAAa;AAAA,IACvC;AAAA,IACA,QAAQ,OAAO,EAAE,YAAAU,EAAW,IAA6B,OAAO;AACxD,YAAAd,GACN,MAAMD,GAAU,iBAAiB;AAAA,QAC/B,wBAAwBD,IACpB,OAAO,SAAS,SAASA,IACzBgB;AAAA,QACJ,wBAAwBjB,IACpB,OAAO,SAAS,SAASA,IACzBiB;AAAA,MAAA,CACL;AAAA,IACH;AAAA,IACA,QAAQ,OAAO,EAAE,YAAAA,EAAW,IAA6B,OAAO;AACxD,YAAAd,GACN,MAAMD,GAAU,iBAAiB;AAAA,QAC/B,wBAAwBD,IACpB,OAAO,SAAS,SAASA,IACzBgB;AAAA,QACJ,wBAAwBjB,IACpB,OAAO,SAAS,SAASA,IACzBiB;AAAA,MAAA,CACL;AAAA,IAAA;AAAA,EAEL;AACF;"}
|