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
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { j as e } from "./jsx-runtime-C5mzlN2N.js";
|
|
2
|
-
import { i as d, k as l, l as m } from "./hook-
|
|
2
|
+
import { i as d, k as l, l as m } from "./hook-wIlTGE-2.js";
|
|
3
3
|
import { H as h } from "./index.esm-BFcSKCe-.js";
|
|
4
4
|
import { createContext as p, use as g } from "react";
|
|
5
5
|
import { a as f, u as x, m as j, O as y } from "./chunk-DQRVZFIR-BblmKnHy.js";
|
|
@@ -52,4 +52,4 @@ export {
|
|
|
52
52
|
q as R,
|
|
53
53
|
T as S
|
|
54
54
|
};
|
|
55
|
-
//# sourceMappingURL=RouteGuard-
|
|
55
|
+
//# sourceMappingURL=RouteGuard-CgmsSw7T.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RouteGuard-
|
|
1
|
+
{"version":3,"file":"RouteGuard-CgmsSw7T.js","sources":["../src/lib/components/context/BypassProtectedRoutesContext.ts","../src/lib/core/RouteGuard.tsx"],"sourcesContent":["import { createContext } from \"react\";\n\nexport const BypassProtectedRoutesContext = createContext(false);\n","import { useQuery } from \"@tanstack/react-query\";\nimport { Helmet } from \"@zudoku/react-helmet-async\";\nimport { use } from \"react\";\nimport { matchPath, Outlet, useLocation, useNavigate } from \"react-router\";\nimport {\n Dialog,\n DialogContent,\n DialogDescription,\n DialogHeader,\n DialogTitle,\n} from \"zudoku/ui/Dialog.js\";\nimport { useAuth } from \"../authentication/hook.js\";\nimport { BypassProtectedRoutesContext } from \"../components/context/BypassProtectedRoutesContext.js\";\nimport { useZudoku } from \"../components/context/ZudokuContext.js\";\nimport { ZudokuError } from \"../util/invariant.js\";\nimport { useLatest } from \"../util/useLatest.js\";\n\nexport const SEARCH_PROTECTED_SECTION = \"protected\";\n\nexport const RouteGuard = () => {\n const auth = useAuth();\n const zudoku = useZudoku();\n const navigate = useNavigate();\n const location = useLocation();\n const latestPath = useLatest(location.pathname);\n const shouldBypass = use(BypassProtectedRoutesContext);\n\n const { protectedRoutes = [] } = zudoku.options;\n\n const isProtected =\n !shouldBypass &&\n protectedRoutes.some((path) =>\n matchPath({ path, end: true }, location.pathname),\n );\n\n useQuery({\n queryKey: [\"login-redirect\"],\n queryFn: async () => {\n await new Promise((resolve) => setTimeout(resolve, 1200));\n await zudoku.authentication?.signIn({\n redirectTo: latestPath.current,\n });\n return true;\n },\n enabled:\n typeof window !== \"undefined\" &&\n isProtected &&\n !auth.isPending &&\n !auth.isAuthenticated,\n });\n\n if (isProtected && !auth.isAuthenticated) {\n return (\n <Dialog\n open={true}\n onOpenChange={(open) => {\n if (!open) {\n void navigate(-1);\n }\n }}\n >\n <DialogContent>\n <DialogHeader>\n <DialogTitle>Logging you in...</DialogTitle>\n </DialogHeader>\n <DialogDescription>\n Please wait while we log you in.\n </DialogDescription>\n </DialogContent>\n </Dialog>\n );\n }\n\n if (isProtected && !auth.isAuthEnabled) {\n throw new ZudokuError(\"Authentication is not enabled\", {\n title: \"Authentication is not enabled\",\n developerHint:\n \"To use protectedRoutes you need authentication to be enabled\",\n });\n }\n\n return (\n <>\n {shouldBypass && (\n <Helmet>\n <meta\n name=\"pagefind\"\n data-pagefind-filter={`section:${SEARCH_PROTECTED_SECTION}`}\n content=\"true\"\n />\n </Helmet>\n )}\n <Outlet />\n </>\n );\n};\n"],"names":["BypassProtectedRoutesContext","createContext","SEARCH_PROTECTED_SECTION","RouteGuard","auth","useAuth","zudoku","useZudoku","navigate","useNavigate","location","useLocation","latestPath","useLatest","shouldBypass","use","protectedRoutes","isProtected","path","matchPath","useQuery","resolve","jsx","Dialog","open","DialogContent","DialogHeader","DialogTitle","DialogDescription","ZudokuError","jsxs","Fragment","Helmet","Outlet"],"mappings":";;;;;;;;AAEa,MAAAA,IAA+BC,EAAc,EAAK,GCelDC,IAA2B,aAE3BC,IAAa,MAAM;AAC9B,QAAMC,IAAOC,EAAQ,GACfC,IAASC,EAAU,GACnBC,IAAWC,EAAY,GACvBC,IAAWC,EAAY,GACvBC,IAAaC,EAAUH,EAAS,QAAQ,GACxCI,IAAeC,EAAIf,CAA4B,GAE/C,EAAE,iBAAAgB,IAAkB,OAAOV,EAAO,SAElCW,IACJ,CAACH,KACDE,EAAgB;AAAA,IAAK,CAACE,MACpBC,EAAU,EAAE,MAAAD,GAAM,KAAK,GAAA,GAAQR,EAAS,QAAQ;AAAA,EAClD;AAkBE,MAhBKU,EAAA;AAAA,IACP,UAAU,CAAC,gBAAgB;AAAA,IAC3B,SAAS,aACP,MAAM,IAAI,QAAQ,CAACC,MAAY,WAAWA,GAAS,IAAI,CAAC,GAClD,MAAAf,EAAO,gBAAgB,OAAO;AAAA,MAClC,YAAYM,EAAW;AAAA,IAAA,CACxB,GACM;AAAA,IAET,SACE,OAAO,SAAW,OAClBK,KACA,CAACb,EAAK,aACN,CAACA,EAAK;AAAA,EAAA,CACT,GAEGa,KAAe,CAACb,EAAK;AAErB,WAAAkB,gBAAAA,EAAA;AAAA,MAACC;AAAA,MAAA;AAAA,QACC,MAAM;AAAA,QACN,cAAc,CAACC,MAAS;AACtB,UAAKA,KACEhB,EAAS,EAAE;AAAA,QAEpB;AAAA,QAEA,iCAACiB,GACC,EAAA,UAAA;AAAA,UAAAH,gBAAAA,MAACI,GACC,EAAA,UAAAJ,gBAAAA,EAAA,IAACK,GAAY,EAAA,UAAA,oBAAiB,CAAA,GAChC;AAAA,UACAL,gBAAAA,EAAAA,IAACM,KAAkB,UAEnB,mCAAA,CAAA;AAAA,QAAA,EACF,CAAA;AAAA,MAAA;AAAA,IACF;AAIA,MAAAX,KAAe,CAACb,EAAK;AACjB,UAAA,IAAIyB,EAAY,iCAAiC;AAAA,MACrD,OAAO;AAAA,MACP,eACE;AAAA,IAAA,CACH;AAGH,SAEKC,gBAAAA,EAAA,KAAAC,YAAA,EAAA,UAAA;AAAA,IAAAjB,2BACEkB,GACC,EAAA,UAAAV,gBAAAA,EAAA;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,MAAK;AAAA,QACL,wBAAsB,WAAWpB,CAAwB;AAAA,QACzD,SAAQ;AAAA,MAAA;AAAA,IAAA,GAEZ;AAAA,0BAED+B,GAAO,CAAA,CAAA;AAAA,EAAA,GACV;AAEJ;"}
|
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
import { j as e } from "./jsx-runtime-C5mzlN2N.js";
|
|
2
2
|
import { s as o } from "./index-BvvmIczU.js";
|
|
3
|
-
import { d as g } from "./hook-
|
|
3
|
+
import { d as g } from "./hook-wIlTGE-2.js";
|
|
4
4
|
import { H as c } from "./index.esm-BFcSKCe-.js";
|
|
5
5
|
import { ChevronsUpDownIcon as y, ChevronsDownUpIcon as N, ChevronRightIcon as b } from "lucide-react";
|
|
6
6
|
import { B as C } from "./Button-BE9IVkWV.js";
|
|
7
|
-
import { u as v, a as S, C as m, b as l, c as d, d as w } from "./index-
|
|
7
|
+
import { u as v, a as S, C as m, b as l, c as d, d as w } from "./index-RFzRn4fM.js";
|
|
8
8
|
import { C as A } from "./CategoryHeading-Cu2RwgjC.js";
|
|
9
|
-
import { H as p, M as H, P as I } from "./Markdown-
|
|
10
|
-
import { T as z } from "./Toc-
|
|
9
|
+
import { H as p, M as H, P as I } from "./Markdown-BUE2ViaD.js";
|
|
10
|
+
import { T as z } from "./Toc-ClJBmdtI.js";
|
|
11
11
|
import { c as P } from "./cn-wvCW-ho6.js";
|
|
12
|
-
import { S as T } from "./SchemaView-
|
|
12
|
+
import { S as T } from "./SchemaView-CtYJpxQI.js";
|
|
13
13
|
const V = w(
|
|
14
14
|
/* GraphQL */
|
|
15
15
|
`
|
|
@@ -157,4 +157,4 @@ function k() {
|
|
|
157
157
|
export {
|
|
158
158
|
k as SchemaList
|
|
159
159
|
};
|
|
160
|
-
//# sourceMappingURL=SchemaList-
|
|
160
|
+
//# sourceMappingURL=SchemaList-BqnRo5ov.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SchemaList-
|
|
1
|
+
{"version":3,"file":"SchemaList-BqnRo5ov.js","sources":["../src/lib/plugins/openapi/SchemaList.tsx"],"sourcesContent":["import slugify from \"@sindresorhus/slugify\";\nimport { useSuspenseQuery } from \"@tanstack/react-query\";\nimport { Helmet } from \"@zudoku/react-helmet-async\";\nimport {\n ChevronRightIcon,\n ChevronsDownUpIcon,\n ChevronsUpDownIcon,\n} from \"lucide-react\";\nimport { Button } from \"zudoku/ui/Button.js\";\nimport {\n Collapsible,\n CollapsibleContent,\n CollapsibleTrigger,\n} from \"zudoku/ui/Collapsible.js\";\nimport { CategoryHeading } from \"../../components/CategoryHeading.js\";\nimport { Heading } from \"../../components/Heading.js\";\nimport { Markdown, ProseClasses } from \"../../components/Markdown.js\";\nimport { Toc } from \"../../components/navigation/Toc.js\";\nimport { cn } from \"../../util/cn.js\";\nimport { useCreateQuery } from \"./client/useCreateQuery.js\";\nimport { useOasConfig } from \"./context.js\";\nimport { graphql } from \"./graphql/gql.js\";\nimport { SchemaView } from \"./schema/SchemaView.js\";\n\nconst GET_SCHEMAS = graphql(/* GraphQL */ `\n query GetSchemas($input: JSON!, $type: SchemaType!) {\n schema(input: $input, type: $type) {\n title\n description\n summary\n components {\n schemas {\n name\n schema\n extensions\n }\n }\n }\n }\n`);\n\nexport function SchemaList() {\n const { input, type, versions, version, options } = useOasConfig();\n const schemasQuery = useCreateQuery(GET_SCHEMAS, {\n input,\n type,\n });\n const { data } = useSuspenseQuery(schemasQuery);\n\n const schemas = data.schema.components?.schemas ?? [];\n const hasMultipleVersions = Object.entries(versions).length > 1;\n const showVersions =\n options?.showVersionSelect === \"always\" ||\n (hasMultipleVersions && options?.showVersionSelect !== \"hide\");\n\n if (!schemas.length) {\n return (\n <div>\n <Helmet>\n <title>Schemas {showVersions ? version : \"\"}</title>\n <meta name=\"description\" content=\"List of schemas used by the API.\" />\n </Helmet>\n No schemas found\n </div>\n );\n }\n\n return (\n <div\n className=\"grid grid-cols-(--sidecar-grid-cols) gap-8 justify-between\"\n data-pagefind-filter=\"section:openapi\"\n data-pagefind-meta=\"section:openapi\"\n >\n <Helmet>\n <title>Schemas {showVersions ? version : \"\"}</title>\n <meta name=\"description\" content=\"List of schemas used by the API.\" />\n </Helmet>\n <div className=\"pt-(--padding-content-top) pb-(--padding-content-bottom)\">\n <Collapsible className=\"w-full\">\n <div className=\"flex flex-col gap-y-4 sm:flex-row justify-around items-start sm:items-end\">\n <div className=\"flex-1\">\n <CategoryHeading>{data.schema.title}</CategoryHeading>\n <Heading\n level={1}\n id=\"schemas\"\n registerSidebarAnchor\n className=\"mb-0\"\n >\n Schemas\n {showVersions && (\n <span className=\"text-xl text-muted-foreground ms-1.5\">\n ({version})\n </span>\n )}\n </Heading>\n </div>\n {data.schema.description && (\n <CollapsibleTrigger className=\"flex items-center gap-1 text-sm font-medium text-muted-foreground group\">\n <span>API information</span>\n <ChevronsUpDownIcon\n className=\"group-data-[state=open]:hidden translate-y-px\"\n size={14}\n />\n <ChevronsDownUpIcon\n className=\"group-data-[state=closed]:hidden translate-y-px\"\n size={13}\n />\n </CollapsibleTrigger>\n )}\n </div>\n {data.schema.description && (\n <CollapsibleContent className=\"CollapsibleContent\">\n <div\n className={cn(\n ProseClasses,\n \"pt-4 max-w-full prose-img:max-w-prose\",\n )}\n >\n <Markdown\n className=\"border rounded-sm bg-muted/25 border-border px-2.5 md:px-4\"\n content={data.schema.description}\n />\n </div>\n </CollapsibleContent>\n )}\n </Collapsible>\n <hr className=\"my-8\" />\n <div className=\"flex flex-col gap-y-5\">\n {schemas.map((schema) => (\n <Collapsible key={schema.name} className=\"group\" defaultOpen>\n <Heading\n registerSidebarAnchor\n level={2}\n className=\"flex items-center gap-1 justify-between w-fit\"\n id={slugify(schema.name)}\n >\n {schema.name}{\" \"}\n <CollapsibleTrigger asChild>\n <Button variant=\"ghost\" size=\"icon\" className=\"size-6\">\n <ChevronRightIcon\n size={16}\n className=\"group-data-[state=open]:rotate-90 transition cursor-pointer\"\n />\n </Button>\n </CollapsibleTrigger>\n </Heading>\n <CollapsibleContent className=\"mt-4 CollapsibleContent\">\n <SchemaView schema={schema.schema} />\n </CollapsibleContent>\n </Collapsible>\n ))}\n </div>\n </div>\n <Toc\n entries={schemas.map((schema) => ({\n id: slugify(schema.name),\n value: schema.name,\n depth: 1,\n }))}\n />\n </div>\n );\n}\n"],"names":["GET_SCHEMAS","graphql","SchemaList","input","type","versions","version","options","useOasConfig","schemasQuery","useCreateQuery","data","useSuspenseQuery","schemas","hasMultipleVersions","showVersions","jsxs","Helmet","jsx","Collapsible","CategoryHeading","Heading","CollapsibleTrigger","ChevronsUpDownIcon","ChevronsDownUpIcon","CollapsibleContent","cn","ProseClasses","Markdown","schema","slugify","Button","ChevronRightIcon","SchemaView","Toc"],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { j as s } from "./jsx-runtime-C5mzlN2N.js";
|
|
2
2
|
import { ChevronsLeftRightIcon as S, ChevronUpIcon as k, ChevronDownIcon as O, CircleIcon as z, CircleDotIcon as L, CircleFadingPlusIcon as $, SquareMinusIcon as D, SquarePlusIcon as B, MinusIcon as q, PlusIcon as M, RefreshCcwDotIcon as T, InfoIcon as G } from "lucide-react";
|
|
3
|
-
import { I as v, S as c, M as P, P as b } from "./Markdown-
|
|
3
|
+
import { I as v, S as c, M as P, P as b } from "./Markdown-BUE2ViaD.js";
|
|
4
4
|
import { Card as u } from "./ui/Card.js";
|
|
5
5
|
import { c as x } from "./cn-wvCW-ho6.js";
|
|
6
6
|
import { isValidElement as F, useState as m, useCallback as _ } from "react";
|
|
@@ -8,7 +8,7 @@ import { B as J } from "./Button-BE9IVkWV.js";
|
|
|
8
8
|
import * as d from "@radix-ui/react-collapsible";
|
|
9
9
|
import { Button as U } from "./ui/Button.js";
|
|
10
10
|
import { o as V } from "./objectEntries-yMIkr2mI.js";
|
|
11
|
-
import { C as K } from "./circular-
|
|
11
|
+
import { C as K } from "./circular-pOdgLzpG.js";
|
|
12
12
|
const W = (e, t) => e.reduce(
|
|
13
13
|
(r, n) => {
|
|
14
14
|
const i = t(n);
|
|
@@ -372,4 +372,4 @@ export {
|
|
|
372
372
|
W as g,
|
|
373
373
|
y as i
|
|
374
374
|
};
|
|
375
|
-
//# sourceMappingURL=SchemaView-
|
|
375
|
+
//# sourceMappingURL=SchemaView-CtYJpxQI.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SchemaView-Br1RupCp.js","sources":["../src/lib/util/groupBy.ts","../src/lib/plugins/openapi/ParamInfos.tsx","../src/lib/plugins/openapi/components/EnumValues.tsx","../src/lib/plugins/openapi/schema/SchemaExampleAndDefault.tsx","../src/lib/plugins/openapi/components/ConstValue.tsx","../src/lib/plugins/openapi/schema/LogicalGroup/LogicalGroupConnector.tsx","../src/lib/plugins/openapi/schema/LogicalGroup/LogicalGroupItem.tsx","../src/lib/plugins/openapi/schema/LogicalGroup/LogicalGroup.tsx","../src/lib/plugins/openapi/schema/utils.ts","../src/lib/plugins/openapi/schema/SchemaPropertyItem.tsx","../src/lib/plugins/openapi/schema/SchemaView.tsx"],"sourcesContent":["export const groupBy = <\n T extends Record<PropertyKey, any>,\n KeySelector extends (item: T) => PropertyKey,\n>(\n arr: T[],\n keySelector: KeySelector,\n): Partial<Record<ReturnType<KeySelector>, T[]>> => {\n return arr.reduce(\n (accumulator, val) => {\n const groupedKey = keySelector(val) as ReturnType<KeySelector>;\n if (!accumulator[groupedKey]) {\n accumulator[groupedKey] = [];\n }\n accumulator[groupedKey].push(val);\n return accumulator;\n },\n {} as Record<ReturnType<KeySelector>, T[]>,\n );\n};\n","import { ChevronsLeftRightIcon } from \"lucide-react\";\nimport { isValidElement, useState } from \"react\";\nimport { InlineCode } from \"../../components/InlineCode.js\";\nimport { type SchemaObject } from \"../../oas/parser/index.js\";\nimport { cn } from \"../../util/cn.js\";\n\nconst Pattern = ({ pattern }: { pattern: string }) => {\n const [isExpanded, setIsExpanded] = useState(false);\n const isExpandable = pattern.length > 20;\n const shortPattern = isExpandable ? `${pattern.slice(0, 20)}…` : pattern;\n\n return (\n <InlineCode\n className={cn(\"text-xs\", isExpandable && \"cursor-pointer\")}\n onClick={() => setIsExpanded(!isExpanded)}\n selectOnClick={false}\n >\n {isExpanded ? pattern : shortPattern}\n {isExpandable && (\n <button type=\"button\" className=\"p-1 translate-y-[2px]\">\n {!isExpanded && <ChevronsLeftRightIcon size={12} />}\n </button>\n )}\n </InlineCode>\n );\n};\n\nconst getSchemaInfos = (schema?: SchemaObject) => {\n if (!schema) return [];\n\n return [\n schema.type === \"array\" && schema.items.type\n ? Array.isArray(schema.items.type)\n ? `(${schema.items.type.join(\" | \")})[]`\n : `${schema.items.type}[]`\n : Array.isArray(schema.type)\n ? schema.type.join(\" | \")\n : schema.type,\n\n schema.enum && \"enum\",\n schema.const && \"const\",\n schema.format,\n schema.minimum && `min: ${schema.minimum}`,\n schema.maximum && `max: ${schema.maximum}`,\n schema.minLength && `minLength: ${schema.minLength}`,\n schema.maxLength && `maxLength: ${schema.maxLength}`,\n schema.minItems && `minItems: ${schema.minItems}`,\n schema.maxItems && `maxItems: ${schema.maxItems}`,\n schema.uniqueItems && \"unique\",\n schema.minProperties && `minProps: ${schema.minProperties}`,\n schema.maxProperties && `maxProps: ${schema.maxProperties}`,\n schema.readOnly && \"readOnly\",\n schema.writeOnly && \"writeOnly\",\n schema.deprecated && \"deprecated\",\n schema.pattern && (\n <>\n pattern: <Pattern pattern={schema.pattern} />\n </>\n ),\n ];\n};\n\nexport const ParamInfos = ({\n schema,\n extraItems = [],\n className,\n}: {\n schema?: SchemaObject;\n extraItems?: unknown[];\n className?: string;\n}) => {\n const filteredItems = [...getSchemaInfos(schema), ...extraItems].flatMap(\n (item) => (typeof item === \"string\" || isValidElement(item) ? item : []),\n );\n\n return (\n <span className={className}>\n {filteredItems.map((item, index) => (\n <span className=\"text-muted-foreground\" key={index}>\n {item}\n {index < filteredItems.length - 1 && (\n <span className=\"text-muted-foreground/50\">\n · \n </span>\n )}\n </span>\n ))}\n </span>\n );\n};\n","import { ChevronDownIcon, ChevronUpIcon } from \"lucide-react\";\nimport { useState } from \"react\";\nimport { Button } from \"zudoku/ui/Button.js\";\nimport { cn } from \"../../../util/cn.js\";\nimport { SelectOnClick } from \"./SelectOnClick.js\";\n\nexport const EnumValues = ({\n values,\n className,\n maxVisibleValues = 8,\n}: {\n values: Array<string | number>;\n className?: string;\n maxVisibleValues?: number;\n}) => {\n const [isOpen, setIsOpen] = useState(false);\n\n if (!values.length) return null;\n\n const shouldCollapse = values.length > maxVisibleValues;\n const visibleValues =\n shouldCollapse && !isOpen ? values.slice(0, maxVisibleValues) : values;\n\n return (\n <div className={cn(\"flex flex-wrap gap-1.5 text-xs\", className)}>\n <span className=\"text-muted-foreground\">Enum values: </span>\n {visibleValues.map((value) => (\n <div key={value}>\n <SelectOnClick className=\"border rounded-sm px-1 font-mono\">\n {value}\n </SelectOnClick>\n </div>\n ))}\n {shouldCollapse && (\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className=\"h-fit px-0\"\n onClick={() => setIsOpen(!isOpen)}\n >\n {isOpen ? (\n <div className=\"flex items-center gap-1\">\n <ChevronUpIcon size={12} />\n <span className=\"text-muted-foreground\">show less</span>\n </div>\n ) : (\n <div className=\"flex items-center gap-1\">\n <ChevronDownIcon size={12} />\n <span className=\"text-muted-foreground\">\n show {values.length - maxVisibleValues} more\n </span>\n </div>\n )}\n </Button>\n )}\n </div>\n );\n};\n","import type { SchemaObject } from \"../../../oas/parser/index.js\";\nimport { SelectOnClick } from \"../components/SelectOnClick.js\";\n\nexport const SchemaExampleAndDefault = ({\n schema,\n}: {\n schema: SchemaObject;\n}) => {\n const example = schema.examples?.at(0);\n const defaultValue = schema.default;\n\n if (!example && !defaultValue) return null;\n\n return (\n <div className=\"flex flex-col gap-1 text-xs\">\n {example && (\n <div>\n <span className=\"text-muted-foreground\">Example: </span>\n <SelectOnClick className=\"border rounded-sm px-1 font-mono\">\n {typeof example === \"object\" || typeof example === \"boolean\"\n ? JSON.stringify(example)\n : example}\n </SelectOnClick>\n </div>\n )}\n {defaultValue && (\n <div>\n <span className=\"text-muted-foreground\">Default: </span>\n <SelectOnClick className=\"border rounded-sm px-1 font-mono\">\n {typeof defaultValue === \"object\" ||\n typeof defaultValue === \"boolean\"\n ? JSON.stringify(defaultValue)\n : defaultValue}\n </SelectOnClick>\n </div>\n )}\n </div>\n );\n};\n","import type { SchemaObject } from \"../../../oas/parser/index.js\";\nimport { SelectOnClick } from \"./SelectOnClick.js\";\n\nexport const ConstValue = ({\n schema,\n hideDescription = false,\n}: {\n schema: SchemaObject;\n hideDescription?: boolean;\n}) => {\n return (\n <div className=\"flex flex-col gap-1 text-xs\">\n <div>\n <span className=\"text-muted-foreground\">Const value: </span>\n <SelectOnClick className=\"border rounded px-1 font-mono\">\n {schema.const}\n </SelectOnClick>\n {!hideDescription && schema.description && (\n <div className=\"text-muted-foreground\">{schema.description}</div>\n )}\n </div>\n </div>\n );\n};\n","import {\n ChevronDownIcon,\n CircleDotIcon,\n CircleFadingPlusIcon,\n CircleIcon,\n} from \"lucide-react\";\nimport { cn } from \"../../../../util/cn.js\";\n\nimport type { LogicalGroupType } from \"../utils.js\";\n\nconst iconMap = {\n AND: <CircleFadingPlusIcon size={16} className=\"fill-card\" />,\n OR: <CircleDotIcon size={16} className=\"fill-card\" />,\n ONE: <CircleIcon size={14} className=\"fill-card\" />,\n} as const;\n\nconst colorClass = {\n AND: \"text-green-500 dark:text-green-300/60\",\n OR: \"text-blue-400 dark:text-blue-500\",\n ONE: \"text-purple-500 dark:text-purple-300/60\",\n} as const;\n\nexport const LogicalGroupConnector = ({\n type,\n isOpen,\n className,\n schemeName,\n}: {\n type: LogicalGroupType;\n isOpen: boolean;\n className?: string;\n schemeName?: string;\n}) => {\n return (\n <div\n className={cn(\n colorClass[type],\n \"relative text-sm flex py-2\",\n \"before:border-l before:absolute before:-top-2 before:-bottom-2 before:border-border before:border-dashed before:content-['']\",\n className,\n )}\n >\n <div className=\"-translate-x-[7px] flex gap-1 items-center\">\n {iconMap[type]}\n <div\n className={cn(\n \"translate-y-px mx-px opacity-0 group-hover:opacity-100 transition\",\n !isOpen && \"-rotate-90\",\n )}\n >\n <ChevronDownIcon size={16} />\n </div>\n <span className=\"text-sm text-foreground\">{schemeName}</span>\n </div>\n </div>\n );\n};\n","import * as Collapsible from \"@radix-ui/react-collapsible\";\nimport { useState } from \"react\";\nimport type { SchemaObject } from \"../../../../oas/parser/index.js\";\nimport { SchemaView } from \"../SchemaView.js\";\nimport type { LogicalGroupType } from \"../utils.js\";\nimport { LogicalGroupConnector } from \"./LogicalGroupConnector.js\";\n\nexport const LogicalGroupItem = (props: {\n type: LogicalGroupType;\n schema: SchemaObject;\n}) => {\n const [isOpen, setIsOpen] = useState(true);\n\n return (\n <Collapsible.Root\n open={isOpen}\n onOpenChange={() => setIsOpen((prev) => !prev)}\n className=\"group\"\n >\n <Collapsible.Trigger>\n <LogicalGroupConnector\n type={props.type}\n isOpen={isOpen}\n schemeName={props.schema.title}\n />\n </Collapsible.Trigger>\n {!isOpen && <div className=\"wavy-line bg-border translate-y-1\" />}\n <Collapsible.Content>\n <SchemaView schema={props.schema} />\n </Collapsible.Content>\n </Collapsible.Root>\n );\n};\n","import * as Collapsible from \"@radix-ui/react-collapsible\";\nimport { SquareMinusIcon, SquarePlusIcon } from \"lucide-react\";\nimport type { SchemaObject } from \"../../../../oas/parser/index.js\";\nimport { Card } from \"../../../../ui/Card.js\";\nimport type { LogicalGroupType } from \"../utils.js\";\nimport { LogicalGroupItem } from \"./LogicalGroupItem.js\";\n\nconst typeLabel = {\n AND: \"All of\",\n OR: \"Any of\",\n ONE: \"One of\",\n};\n\nexport const LogicalGroup = ({\n schemas,\n type,\n isOpen,\n toggleOpen,\n}: {\n schemas: SchemaObject[];\n type: LogicalGroupType;\n isOpen: boolean;\n toggleOpen: () => void;\n}) => (\n <Collapsible.Root open={isOpen} onOpenChange={toggleOpen} asChild>\n <Card className=\"px-6\">\n <Collapsible.Trigger className=\"flex gap-2 items-center py-2 w-full text-sm text-muted-foreground -translate-x-1.5\">\n {isOpen ? <SquareMinusIcon size={14} /> : <SquarePlusIcon size={14} />}\n <span>{typeLabel[type]}</span>\n </Collapsible.Trigger>\n\n <Collapsible.Content className=\"pb-4\">\n {schemas.map((subSchema, index) => (\n // eslint-disable-next-line react/no-array-index-key\n <LogicalGroupItem key={index} type={type} schema={subSchema} />\n ))}\n </Collapsible.Content>\n </Card>\n </Collapsible.Root>\n);\n","import { CIRCULAR_REF } from \"../../../oas/graphql/circular.js\";\nimport type { SchemaObject } from \"../../../oas/parser/index.js\";\n\nexport const isBasicType = (\n type: unknown,\n): type is \"string\" | \"number\" | \"boolean\" | \"integer\" | \"null\" =>\n typeof type === \"string\" &&\n [\"string\", \"number\", \"boolean\", \"integer\", \"null\"].includes(type);\n\nexport const isArrayType = (value: SchemaObject) =>\n value.type === \"array\" ||\n // schema.type might be an array of types, so we need to check if \"array\" is one of them\n (Array.isArray(value.type) && value.type.includes(\"array\"));\n\nexport const isComplexType = (value?: SchemaObject) =>\n value &&\n ((value.type === \"object\" &&\n Object.keys(value.properties ?? {}).length > 0) ||\n (value.type === \"array\" &&\n typeof value.items === \"object\" &&\n (!value.items.type || value.items.type === \"object\")));\n\nexport const hasLogicalGroupings = (value: SchemaObject) =>\n Boolean(value.oneOf ?? value.allOf ?? value.anyOf);\n\nexport const LogicalSchemaTypeMap = {\n allOf: \"AND\",\n anyOf: \"OR\",\n oneOf: \"ONE\",\n} as const;\n\nexport type LogicalGroupType = \"AND\" | \"OR\" | \"ONE\";\n\nexport const isCircularRef = (schema: unknown): schema is string =>\n typeof schema === \"string\" && schema.startsWith(CIRCULAR_REF);\n\nexport const isArrayCircularRef = (\n schema: SchemaObject,\n): schema is SchemaObject & { items: SchemaObject } =>\n isArrayType(schema) && \"items\" in schema && isCircularRef(schema.items);\n\nexport const extractCircularRefInfo = (\n ref?: string | SchemaObject,\n): string | undefined =>\n typeof ref === \"string\" ? ref.split(\":\")[1] : undefined;\n","import * as Collapsible from \"@radix-ui/react-collapsible\";\nimport { MinusIcon, PlusIcon, RefreshCcwDotIcon } from \"lucide-react\";\nimport { useCallback, useState } from \"react\";\nimport { InlineCode } from \"../../../components/InlineCode.js\";\nimport { Markdown, ProseClasses } from \"../../../components/Markdown.js\";\nimport type { SchemaObject } from \"../../../oas/parser/index.js\";\nimport { Button } from \"../../../ui/Button.js\";\nimport { cn } from \"../../../util/cn.js\";\nimport { objectEntries } from \"../../../util/objectEntries.js\";\nimport { ConstValue } from \"../components/ConstValue.js\";\nimport { EnumValues } from \"../components/EnumValues.js\";\nimport { SelectOnClick } from \"../components/SelectOnClick.js\";\nimport { ParamInfos } from \"../ParamInfos.js\";\nimport { LogicalGroup } from \"./LogicalGroup/LogicalGroup.js\";\nimport { SchemaExampleAndDefault } from \"./SchemaExampleAndDefault.js\";\nimport { SchemaView } from \"./SchemaView.js\";\nimport {\n extractCircularRefInfo,\n hasLogicalGroupings,\n isArrayCircularRef,\n isArrayType,\n isCircularRef,\n isComplexType,\n LogicalSchemaTypeMap,\n} from \"./utils.js\";\n\nexport const SchemaLogicalGroup = ({ schema }: { schema: SchemaObject }) => {\n const [isOpen, setIsOpen] = useState(true);\n const toggleOpen = useCallback(() => setIsOpen((prev) => !prev), []);\n\n for (const [key, type] of objectEntries(LogicalSchemaTypeMap)) {\n if (!schema[key]) continue;\n\n return (\n <LogicalGroup\n schemas={schema[key]}\n type={type}\n isOpen={isOpen}\n toggleOpen={toggleOpen}\n />\n );\n }\n};\n\nconst RecursiveIndicator = ({ circularProp }: { circularProp?: string }) => (\n <InlineCode\n className=\"inline-flex items-center gap-1.5 italic text-xs translate-y-0.5\"\n selectOnClick={false}\n >\n <RefreshCcwDotIcon size={13} />\n <span>{circularProp ? `${circularProp} (circular)` : \"circular\"}</span>\n </InlineCode>\n);\n\nexport const SchemaPropertyItem = ({\n name,\n schema,\n group,\n defaultOpen = false,\n showCollapseButton = true,\n}: {\n name: string;\n schema: SchemaObject;\n group: \"required\" | \"optional\" | \"deprecated\";\n defaultOpen?: boolean;\n showCollapseButton?: boolean;\n}) => {\n const [isOpen, setIsOpen] = useState(defaultOpen);\n\n if (isCircularRef(schema)) {\n return (\n <li className=\"p-4 bg-border/20 hover:bg-border/30\">\n <div className=\"flex flex-col gap-2.5 justify-between text-sm\">\n <div className=\"space-x-2 rtl:space-x-reverse\">\n <code>{name}</code>\n <ParamInfos\n schema={schema}\n extraItems={[<RecursiveIndicator key=\"circular-ref\" />]}\n />\n </div>\n <SchemaExampleAndDefault schema={schema} />\n </div>\n </li>\n );\n }\n\n const isCollapsible = Boolean(\n (hasLogicalGroupings(schema) ||\n isComplexType(schema) ||\n (isArrayType(schema) &&\n \"items\" in schema &&\n isComplexType(schema.items)) ||\n schema.additionalProperties) &&\n !isArrayCircularRef(schema),\n );\n\n return (\n <li className=\"p-4 bg-border/20 hover:bg-border/30\">\n <div className=\"flex flex-col gap-2.5 justify-between text-sm\">\n <div className=\"space-x-2 rtl:space-x-reverse\">\n <SelectOnClick asChild>\n <code>{name}</code>\n </SelectOnClick>\n <ParamInfos\n schema={schema}\n extraItems={[\n group !== \"optional\" && (\n <span className=\"text-primary\">required</span>\n ),\n isArrayCircularRef(schema) && (\n <RecursiveIndicator\n circularProp={extractCircularRefInfo(schema.items)}\n />\n ),\n ]}\n />\n </div>\n {schema.description && (\n <Markdown\n className={cn(ProseClasses, \"text-sm leading-normal line-clamp-4\")}\n content={schema.description}\n />\n )}\n {schema.type === \"array\" && \"items\" in schema && schema.items.enum && (\n <EnumValues values={schema.items.enum} />\n )}\n {schema.const && <ConstValue schema={schema} hideDescription />}\n {schema.enum && <EnumValues values={schema.enum} />}\n <SchemaExampleAndDefault schema={schema} />\n {isCollapsible && (\n <Collapsible.Root\n defaultOpen={defaultOpen}\n open={isOpen}\n onOpenChange={() => setIsOpen(!isOpen)}\n >\n {showCollapseButton && (\n <Collapsible.Trigger asChild>\n <Button variant=\"expand\" size=\"sm\">\n {isOpen ? <MinusIcon size={12} /> : <PlusIcon size={12} />}\n {!isOpen ? \"Show properties\" : \"Hide properties\"}\n </Button>\n </Collapsible.Trigger>\n )}\n <Collapsible.Content>\n <div className=\"mt-2\">\n {hasLogicalGroupings(schema) ? (\n <SchemaLogicalGroup schema={schema} />\n ) : schema.type === \"object\" ? (\n <SchemaView schema={schema} />\n ) : isArrayType(schema) && \"items\" in schema ? (\n <SchemaView schema={schema.items} />\n ) : null}\n </div>\n </Collapsible.Content>\n </Collapsible.Root>\n )}\n </div>\n </li>\n );\n};\n","import { InfoIcon } from \"lucide-react\";\nimport { Markdown, ProseClasses } from \"../../../components/Markdown.js\";\nimport type { SchemaObject } from \"../../../oas/parser/index.js\";\nimport { Card } from \"../../../ui/Card.js\";\nimport { cn } from \"../../../util/cn.js\";\nimport { groupBy } from \"../../../util/groupBy.js\";\nimport { ConstValue } from \"../components/ConstValue.js\";\nimport { EnumValues } from \"../components/EnumValues.js\";\nimport { ParamInfos } from \"../ParamInfos.js\";\nimport { SchemaExampleAndDefault } from \"./SchemaExampleAndDefault.js\";\nimport {\n SchemaLogicalGroup,\n SchemaPropertyItem,\n} from \"./SchemaPropertyItem.js\";\nimport { hasLogicalGroupings, isBasicType } from \"./utils.js\";\n\nconst renderMarkdown = (content?: string) =>\n content && (\n <Markdown\n className={cn(ProseClasses, \"text-sm leading-normal line-clamp-4\")}\n content={content}\n />\n );\n\nconst renderBasicSchema = (schema: SchemaObject) => (\n <Card className=\"p-4 space-y-2\">\n <span className=\"text-sm text-muted-foreground\">\n <ParamInfos schema={schema} />\n </span>\n {schema.enum && <EnumValues values={schema.enum} />}\n {renderMarkdown(schema.description)}\n <SchemaExampleAndDefault schema={schema} />\n </Card>\n);\n\nexport const SchemaView = ({\n schema,\n defaultOpen = false,\n cardHeader,\n}: {\n schema?: SchemaObject | null;\n defaultOpen?: boolean;\n cardHeader?: React.ReactNode;\n}) => {\n if (!schema || Object.keys(schema).length === 0) {\n return (\n <Card className=\"overflow-hidden\">\n {cardHeader}\n <div className=\"text-sm text-muted-foreground italic p-4\">\n No schema specified\n </div>\n </Card>\n );\n }\n\n if (schema.const) {\n return <ConstValue schema={schema} />;\n }\n\n if (hasLogicalGroupings(schema)) {\n return <SchemaLogicalGroup schema={schema} />;\n }\n\n if (isBasicType(schema.type)) {\n return renderBasicSchema(schema);\n }\n\n if (schema.type === \"array\" && typeof schema.items === \"object\") {\n return <SchemaView schema={schema.items} />;\n }\n\n if (schema.type === \"object\") {\n const groupedProperties = groupBy(\n Object.entries(schema.properties ?? {}),\n ([propertyName, property]) => {\n return property.deprecated\n ? \"deprecated\"\n : schema.required?.includes(propertyName)\n ? \"required\"\n : \"optional\";\n },\n );\n const groupNames = [\"required\", \"optional\", \"deprecated\"] as const;\n\n const additionalProperties =\n typeof schema.additionalProperties === \"object\" ? (\n <SchemaView schema={schema.additionalProperties} />\n ) : schema.additionalProperties === true ? (\n <div\n className={cn(\n ProseClasses,\n \"text-sm p-4 bg-border/20 hover:bg-border/30 flex items-center gap-1\",\n )}\n >\n <span>Additional properties are allowed</span>\n <a\n className=\"p-0.5 -m-0.5\"\n href=\"https://swagger.io/docs/specification/v3_0/data-models/dictionaries/\"\n rel=\"noopener noreferrer\"\n target=\"_blank\"\n >\n <InfoIcon size={14} />\n </a>\n </div>\n ) : null;\n\n return (\n <Card className=\"divide-y overflow-hidden\">\n {cardHeader}\n {groupNames.map(\n (group) =>\n groupedProperties[group] && (\n <ul key={group} className=\"divide-y\">\n {groupedProperties[group].map(([name, schema]) => (\n <SchemaPropertyItem\n key={name}\n name={name}\n schema={schema}\n group={group}\n defaultOpen={defaultOpen}\n />\n ))}\n </ul>\n ),\n )}\n {additionalProperties}\n </Card>\n );\n }\n\n return null;\n};\n"],"names":["groupBy","arr","keySelector","accumulator","val","groupedKey","Pattern","pattern","isExpanded","setIsExpanded","useState","isExpandable","shortPattern","jsxs","InlineCode","cn","jsx","ChevronsLeftRightIcon","getSchemaInfos","schema","Fragment","ParamInfos","extraItems","className","filteredItems","item","isValidElement","index","EnumValues","values","maxVisibleValues","isOpen","setIsOpen","shouldCollapse","visibleValues","value","SelectOnClick","Button","ChevronUpIcon","ChevronDownIcon","SchemaExampleAndDefault","example","defaultValue","ConstValue","hideDescription","iconMap","CircleFadingPlusIcon","CircleDotIcon","CircleIcon","colorClass","LogicalGroupConnector","type","schemeName","LogicalGroupItem","props","Collapsible","prev","SchemaView","typeLabel","LogicalGroup","schemas","toggleOpen","Card","SquareMinusIcon","SquarePlusIcon","subSchema","isBasicType","isArrayType","isComplexType","hasLogicalGroupings","LogicalSchemaTypeMap","isCircularRef","CIRCULAR_REF","isArrayCircularRef","extractCircularRefInfo","ref","SchemaLogicalGroup","useCallback","key","objectEntries","RecursiveIndicator","circularProp","RefreshCcwDotIcon","SchemaPropertyItem","name","group","defaultOpen","showCollapseButton","isCollapsible","Markdown","ProseClasses","MinusIcon","PlusIcon","renderMarkdown","content","renderBasicSchema","cardHeader","groupedProperties","propertyName","property","groupNames","additionalProperties","InfoIcon"],"mappings":";;;;;;;;;;;AAAa,MAAAA,IAAU,CAIrBC,GACAC,MAEOD,EAAI;AAAA,EACT,CAACE,GAAaC,MAAQ;AACd,UAAAC,IAAaH,EAAYE,CAAG;AAC9B,WAACD,EAAYE,CAAU,MACbF,EAAAE,CAAU,IAAI,CAAC,IAEjBF,EAAAE,CAAU,EAAE,KAAKD,CAAG,GACzBD;AAAA,EACT;AAAA,EACA,CAAA;AACF,GCXIG,IAAU,CAAC,EAAE,SAAAC,QAAmC;AACpD,QAAM,CAACC,GAAYC,CAAa,IAAIC,EAAS,EAAK,GAC5CC,IAAeJ,EAAQ,SAAS,IAChCK,IAAeD,IAAe,GAAGJ,EAAQ,MAAM,GAAG,EAAE,CAAC,MAAMA;AAG/D,SAAAM,gBAAAA,EAAA;AAAA,IAACC;AAAA,IAAA;AAAA,MACC,WAAWC,EAAG,WAAWJ,KAAgB,gBAAgB;AAAA,MACzD,SAAS,MAAMF,EAAc,CAACD,CAAU;AAAA,MACxC,eAAe;AAAA,MAEd,UAAA;AAAA,QAAAA,IAAaD,IAAUK;AAAA,QACvBD,KACCK,gBAAAA,EAAA,IAAC,UAAO,EAAA,MAAK,UAAS,WAAU,yBAC7B,UAAA,CAACR,KAAcQ,gBAAAA,EAAAA,IAACC,GAAsB,EAAA,MAAM,IAAI,EACnD,CAAA;AAAA,MAAA;AAAA,IAAA;AAAA,EAEJ;AAEJ,GAEMC,IAAiB,CAACC,MACjBA,IAEE;AAAA,EACLA,EAAO,SAAS,WAAWA,EAAO,MAAM,OACpC,MAAM,QAAQA,EAAO,MAAM,IAAI,IAC7B,IAAIA,EAAO,MAAM,KAAK,KAAK,KAAK,CAAC,QACjC,GAAGA,EAAO,MAAM,IAAI,OACtB,MAAM,QAAQA,EAAO,IAAI,IACvBA,EAAO,KAAK,KAAK,KAAK,IACtBA,EAAO;AAAA,EAEbA,EAAO,QAAQ;AAAA,EACfA,EAAO,SAAS;AAAA,EAChBA,EAAO;AAAA,EACPA,EAAO,WAAW,QAAQA,EAAO,OAAO;AAAA,EACxCA,EAAO,WAAW,QAAQA,EAAO,OAAO;AAAA,EACxCA,EAAO,aAAa,cAAcA,EAAO,SAAS;AAAA,EAClDA,EAAO,aAAa,cAAcA,EAAO,SAAS;AAAA,EAClDA,EAAO,YAAY,aAAaA,EAAO,QAAQ;AAAA,EAC/CA,EAAO,YAAY,aAAaA,EAAO,QAAQ;AAAA,EAC/CA,EAAO,eAAe;AAAA,EACtBA,EAAO,iBAAiB,aAAaA,EAAO,aAAa;AAAA,EACzDA,EAAO,iBAAiB,aAAaA,EAAO,aAAa;AAAA,EACzDA,EAAO,YAAY;AAAA,EACnBA,EAAO,aAAa;AAAA,EACpBA,EAAO,cAAc;AAAA,EACrBA,EAAO,WACHN,gBAAAA,EAAAA,KAAAO,EAAA,UAAA,EAAA,UAAA;AAAA,IAAA;AAAA,IACUJ,gBAAAA,EAAAA,IAAAV,GAAA,EAAQ,SAASa,EAAO,QAAS,CAAA;AAAA,EAAA,EAC7C,CAAA;AAEJ,IA/BoB,CAAC,GAkCVE,IAAa,CAAC;AAAA,EACzB,QAAAF;AAAA,EACA,YAAAG,IAAa,CAAC;AAAA,EACd,WAAAC;AACF,MAIM;AACE,QAAAC,IAAgB,CAAC,GAAGN,EAAeC,CAAM,GAAG,GAAGG,CAAU,EAAE;AAAA,IAC/D,CAACG,MAAU,OAAOA,KAAS,YAAYC,EAAeD,CAAI,IAAIA,IAAO,CAAA;AAAA,EACvE;AAGE,SAAAT,gBAAAA,EAAAA,IAAC,QAAK,EAAA,WAAAO,GACH,UAAcC,EAAA,IAAI,CAACC,GAAME,MACxBd,gBAAAA,EAAAA,KAAC,QAAK,EAAA,WAAU,yBACb,UAAA;AAAA,IAAAY;AAAA,IACAE,IAAQH,EAAc,SAAS,2BAC7B,QAAK,EAAA,WAAU,4BAA2B,UAE3C,MAAA,CAAA;AAAA,EAAA,KALyCG,CAO7C,CACD,GACH;AAEJ,GCnFaC,IAAa,CAAC;AAAA,EACzB,QAAAC;AAAA,EACA,WAAAN;AAAA,EACA,kBAAAO,IAAmB;AACrB,MAIM;AACJ,QAAM,CAACC,GAAQC,CAAS,IAAItB,EAAS,EAAK;AAEtC,MAAA,CAACmB,EAAO,OAAe,QAAA;AAErB,QAAAI,IAAiBJ,EAAO,SAASC,GACjCI,IACJD,KAAkB,CAACF,IAASF,EAAO,MAAM,GAAGC,CAAgB,IAAID;AAElE,gCACG,OAAI,EAAA,WAAWd,EAAG,kCAAkCQ,CAAS,GAC5D,UAAA;AAAA,IAACP,gBAAAA,EAAA,IAAA,QAAA,EAAK,WAAU,yBAAwB,UAAa,iBAAA;AAAA,IACpDkB,EAAc,IAAI,CAACC,MACjBnB,gBAAAA,EAAA,IAAA,OAAA,EACC,UAACA,gBAAAA,EAAA,IAAAoB,GAAA,EAAc,WAAU,oCACtB,UACHD,EAAA,CAAA,EAAA,GAHQA,CAIV,CACD;AAAA,IACAF,KACCjB,gBAAAA,EAAA;AAAA,MAACqB;AAAA,MAAA;AAAA,QACC,SAAQ;AAAA,QACR,MAAK;AAAA,QACL,WAAU;AAAA,QACV,SAAS,MAAML,EAAU,CAACD,CAAM;AAAA,QAE/B,UACCA,IAAAlB,gBAAAA,OAAC,OAAI,EAAA,WAAU,2BACb,UAAA;AAAA,UAACG,gBAAAA,EAAAA,IAAAsB,GAAA,EAAc,MAAM,GAAI,CAAA;AAAA,UACxBtB,gBAAAA,EAAA,IAAA,QAAA,EAAK,WAAU,yBAAwB,UAAS,YAAA,CAAA;AAAA,QAAA,EACnD,CAAA,IAEAH,gBAAAA,EAAAA,KAAC,OAAI,EAAA,WAAU,2BACb,UAAA;AAAA,UAACG,gBAAAA,EAAAA,IAAAuB,GAAA,EAAgB,MAAM,GAAI,CAAA;AAAA,UAC3B1B,gBAAAA,EAAAA,KAAC,QAAK,EAAA,WAAU,yBAAwB,UAAA;AAAA,YAAA;AAAA,YAChCgB,EAAO,SAASC;AAAA,YAAiB;AAAA,UAAA,EACzC,CAAA;AAAA,QAAA,EACF,CAAA;AAAA,MAAA;AAAA,IAAA;AAAA,EAEJ,GAEJ;AAEJ,GCtDaU,IAA0B,CAAC;AAAA,EACtC,QAAArB;AACF,MAEM;AACJ,QAAMsB,IAAUtB,EAAO,UAAU,GAAG,CAAC,GAC/BuB,IAAevB,EAAO;AAE5B,SAAI,CAACsB,KAAW,CAACC,IAAqB,OAGpC7B,gBAAAA,EAAA,KAAC,OAAI,EAAA,WAAU,+BACZ,UAAA;AAAA,IAAA4B,4BACE,OACC,EAAA,UAAA;AAAA,MAACzB,gBAAAA,EAAA,IAAA,QAAA,EAAK,WAAU,yBAAwB,UAAS,aAAA;AAAA,MAChDA,gBAAAA,EAAA,IAAAoB,GAAA,EAAc,WAAU,oCACtB,iBAAOK,KAAY,YAAY,OAAOA,KAAY,YAC/C,KAAK,UAAUA,CAAO,IACtBA,EACN,CAAA;AAAA,IAAA,GACF;AAAA,IAEDC,4BACE,OACC,EAAA,UAAA;AAAA,MAAC1B,gBAAAA,EAAA,IAAA,QAAA,EAAK,WAAU,yBAAwB,UAAS,aAAA;AAAA,MAChDA,gBAAAA,EAAA,IAAAoB,GAAA,EAAc,WAAU,oCACtB,iBAAOM,KAAiB,YACzB,OAAOA,KAAiB,YACpB,KAAK,UAAUA,CAAY,IAC3BA,EACN,CAAA;AAAA,IAAA,EACF,CAAA;AAAA,EAAA,GAEJ;AAEJ,GCnCaC,IAAa,CAAC;AAAA,EACzB,QAAAxB;AAAA,EACA,iBAAAyB,IAAkB;AACpB,MAKK5B,gBAAAA,EAAA,IAAA,OAAA,EAAI,WAAU,+BACb,iCAAC,OACC,EAAA,UAAA;AAAA,EAACA,gBAAAA,EAAA,IAAA,QAAA,EAAK,WAAU,yBAAwB,UAAa,iBAAA;AAAA,EACpDA,gBAAAA,EAAA,IAAAoB,GAAA,EAAc,WAAU,iCACtB,YAAO,OACV;AAAA,EACC,CAACQ,KAAmBzB,EAAO,qCACzB,OAAI,EAAA,WAAU,yBAAyB,UAAAA,EAAO,YAAY,CAAA;AAAA,EAAA,CAE/D,EACF,CAAA,GCXE0B,IAAU;AAAA,EACd,KAAM7B,gBAAAA,EAAA,IAAA8B,GAAA,EAAqB,MAAM,IAAI,WAAU,aAAY;AAAA,EAC3D,IAAK9B,gBAAAA,EAAA,IAAA+B,GAAA,EAAc,MAAM,IAAI,WAAU,aAAY;AAAA,EACnD,KAAM/B,gBAAAA,EAAA,IAAAgC,GAAA,EAAW,MAAM,IAAI,WAAU,YAAY,CAAA;AACnD,GAEMC,IAAa;AAAA,EACjB,KAAK;AAAA,EACL,IAAI;AAAA,EACJ,KAAK;AACP,GAEaC,IAAwB,CAAC;AAAA,EACpC,MAAAC;AAAA,EACA,QAAApB;AAAA,EACA,WAAAR;AAAA,EACA,YAAA6B;AACF,MAOIpC,gBAAAA,EAAA;AAAA,EAAC;AAAA,EAAA;AAAA,IACC,WAAWD;AAAA,MACTkC,EAAWE,CAAI;AAAA,MACf;AAAA,MACA;AAAA,MACA5B;AAAA,IACF;AAAA,IAEA,UAAAV,gBAAAA,EAAA,KAAC,OAAI,EAAA,WAAU,8CACZ,UAAA;AAAA,MAAAgC,EAAQM,CAAI;AAAA,MACbnC,gBAAAA,EAAA;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,WAAWD;AAAA,YACT;AAAA,YACA,CAACgB,KAAU;AAAA,UACb;AAAA,UAEA,UAAAf,gBAAAA,EAAAA,IAACuB,GAAgB,EAAA,MAAM,GAAI,CAAA;AAAA,QAAA;AAAA,MAC7B;AAAA,MACCvB,gBAAAA,EAAA,IAAA,QAAA,EAAK,WAAU,2BAA2B,UAAWoC,EAAA,CAAA;AAAA,IAAA,EACxD,CAAA;AAAA,EAAA;AACF,GC/CSC,KAAmB,CAACC,MAG3B;AACJ,QAAM,CAACvB,GAAQC,CAAS,IAAItB,EAAS,EAAI;AAGvC,SAAAG,gBAAAA,EAAA;AAAA,IAAC0C,EAAY;AAAA,IAAZ;AAAA,MACC,MAAMxB;AAAA,MACN,cAAc,MAAMC,EAAU,CAACwB,MAAS,CAACA,CAAI;AAAA,MAC7C,WAAU;AAAA,MAEV,UAAA;AAAA,QAACxC,gBAAAA,EAAAA,IAAAuC,EAAY,SAAZ,EACC,UAAAvC,gBAAAA,EAAA;AAAA,UAACkC;AAAA,UAAA;AAAA,YACC,MAAMI,EAAM;AAAA,YACZ,QAAAvB;AAAA,YACA,YAAYuB,EAAM,OAAO;AAAA,UAAA;AAAA,QAAA,GAE7B;AAAA,QACC,CAACvB,KAAWf,gBAAAA,EAAAA,IAAA,OAAA,EAAI,WAAU,oCAAoC,CAAA;AAAA,QAC/DA,gBAAAA,EAAAA,IAACuC,EAAY,SAAZ,EACC,gCAACE,GAAW,EAAA,QAAQH,EAAM,OAAQ,CAAA,EACpC,CAAA;AAAA,MAAA;AAAA,IAAA;AAAA,EACF;AAEJ,GCzBMI,KAAY;AAAA,EAChB,KAAK;AAAA,EACL,IAAI;AAAA,EACJ,KAAK;AACP,GAEaC,KAAe,CAAC;AAAA,EAC3B,SAAAC;AAAA,EACA,MAAAT;AAAA,EACA,QAAApB;AAAA,EACA,YAAA8B;AACF,MAMG7C,gBAAAA,EAAAA,IAAAuC,EAAY,MAAZ,EAAiB,MAAMxB,GAAQ,cAAc8B,GAAY,SAAO,IAC/D,UAAChD,gBAAAA,OAAAiD,GAAA,EAAK,WAAU,QACd,UAAA;AAAA,EAAAjD,gBAAAA,EAAA,KAAC0C,EAAY,SAAZ,EAAoB,WAAU,sFAC5B,UAAA;AAAA,IAASxB,IAAAf,gBAAAA,EAAA,IAAC+C,KAAgB,MAAM,GAAA,CAAI,IAAM/C,gBAAAA,EAAAA,IAAAgD,GAAA,EAAe,MAAM,GAAI,CAAA;AAAA,IACnEhD,gBAAAA,EAAAA,IAAA,QAAA,EAAM,UAAU0C,GAAAP,CAAI,EAAE,CAAA;AAAA,EAAA,GACzB;AAAA,EAEAnC,gBAAAA,EAAAA,IAACuC,EAAY,SAAZ,EAAoB,WAAU,QAC5B,UAAAK,EAAQ,IAAI,CAACK,GAAWtC;AAAA;AAAA,IAEtBX,gBAAAA,EAAA,IAAAqC,IAAA,EAA6B,MAAAF,GAAY,QAAQc,KAA3BtC,CAAsC;AAAA,GAC9D,EACH,CAAA;AAAA,EAAA,CACF,EACF,CAAA,GCnCWuC,KAAc,CACzBf,MAEA,OAAOA,KAAS,YAChB,CAAC,UAAU,UAAU,WAAW,WAAW,MAAM,EAAE,SAASA,CAAI,GAErDgB,IAAc,CAAChC,MAC1BA,EAAM,SAAS;AAEd,MAAM,QAAQA,EAAM,IAAI,KAAKA,EAAM,KAAK,SAAS,OAAO,GAE9CiC,IAAgB,CAACjC,MAC5BA,MACEA,EAAM,SAAS,YACf,OAAO,KAAKA,EAAM,cAAc,CAAA,CAAE,EAAE,SAAS,KAC5CA,EAAM,SAAS,WACd,OAAOA,EAAM,SAAU,aACtB,CAACA,EAAM,MAAM,QAAQA,EAAM,MAAM,SAAS,YAEpCkC,IAAsB,CAAClC,MAClC,GAAQA,EAAM,SAASA,EAAM,SAASA,EAAM,QAEjCmC,KAAuB;AAAA,EAClC,OAAO;AAAA,EACP,OAAO;AAAA,EACP,OAAO;AACT,GAIaC,IAAgB,CAACpD,MAC5B,OAAOA,KAAW,YAAYA,EAAO,WAAWqD,CAAY,GAEjDC,IAAqB,CAChCtD,MAEAgD,EAAYhD,CAAM,KAAK,WAAWA,KAAUoD,EAAcpD,EAAO,KAAK,GAE3DuD,KAAyB,CACpCC,MAEA,OAAOA,KAAQ,WAAWA,EAAI,MAAM,GAAG,EAAE,CAAC,IAAI,QClBnCC,IAAqB,CAAC,EAAE,QAAAzD,QAAuC;AAC1E,QAAM,CAACY,GAAQC,CAAS,IAAItB,EAAS,EAAI,GACnCmD,IAAagB,EAAY,MAAM7C,EAAU,CAACwB,MAAS,CAACA,CAAI,GAAG,EAAE;AAEnE,aAAW,CAACsB,GAAK3B,CAAI,KAAK4B,EAAcT,EAAoB;AACtD,QAACnD,EAAO2D,CAAG;AAGb,aAAA9D,gBAAAA,EAAA;AAAA,QAAC2C;AAAA,QAAA;AAAA,UACC,SAASxC,EAAO2D,CAAG;AAAA,UACnB,MAAA3B;AAAA,UACA,QAAApB;AAAA,UACA,YAAA8B;AAAA,QAAA;AAAA,MACF;AAGN,GAEMmB,IAAqB,CAAC,EAAE,cAAAC,EAAA,MAC5BpE,gBAAAA,EAAA;AAAA,EAACC;AAAA,EAAA;AAAA,IACC,WAAU;AAAA,IACV,eAAe;AAAA,IAEf,UAAA;AAAA,MAACE,gBAAAA,EAAAA,IAAAkE,GAAA,EAAkB,MAAM,GAAI,CAAA;AAAA,4BAC5B,QAAM,EAAA,UAAAD,IAAe,GAAGA,CAAY,gBAAgB,WAAW,CAAA;AAAA,IAAA;AAAA,EAAA;AAClE,GAGWE,KAAqB,CAAC;AAAA,EACjC,MAAAC;AAAA,EACA,QAAAjE;AAAA,EACA,OAAAkE;AAAA,EACA,aAAAC,IAAc;AAAA,EACd,oBAAAC,IAAqB;AACvB,MAMM;AACJ,QAAM,CAACxD,GAAQC,CAAS,IAAItB,EAAS4E,CAAW;AAE5C,MAAAf,EAAcpD,CAAM;AACtB,iCACG,MAAG,EAAA,WAAU,uCACZ,UAACN,gBAAAA,EAAA,KAAA,OAAA,EAAI,WAAU,iDACb,UAAA;AAAA,MAACA,gBAAAA,EAAAA,KAAA,OAAA,EAAI,WAAU,iCACb,UAAA;AAAA,QAAAG,gBAAAA,EAAAA,IAAC,UAAM,UAAKoE,EAAA,CAAA;AAAA,QACZpE,gBAAAA,EAAA;AAAA,UAACK;AAAA,UAAA;AAAA,YACC,QAAAF;AAAA,YACA,YAAY,CAAEH,gBAAAA,EAAA,IAAAgE,GAAA,CAAA,GAAuB,cAAe,CAAE;AAAA,UAAA;AAAA,QAAA;AAAA,MACxD,GACF;AAAA,MACAhE,gBAAAA,MAACwB,KAAwB,QAAArB,EAAgB,CAAA;AAAA,IAAA,EAAA,CAC3C,EACF,CAAA;AAIJ,QAAMqE,IAAgB,IACnBnB,EAAoBlD,CAAM,KACzBiD,EAAcjD,CAAM,KACnBgD,EAAYhD,CAAM,KACjB,WAAWA,KACXiD,EAAcjD,EAAO,KAAK,KAC5BA,EAAO,yBACP,CAACsD,EAAmBtD,CAAM;AAG9B,+BACG,MAAG,EAAA,WAAU,uCACZ,UAACN,gBAAAA,EAAA,KAAA,OAAA,EAAI,WAAU,iDACb,UAAA;AAAA,IAACA,gBAAAA,EAAAA,KAAA,OAAA,EAAI,WAAU,iCACb,UAAA;AAAA,MAAAG,gBAAAA,EAAAA,IAACoB,KAAc,SAAO,IACpB,UAACpB,gBAAAA,MAAA,QAAA,EAAM,aAAK,EACd,CAAA;AAAA,MACAA,gBAAAA,EAAA;AAAA,QAACK;AAAA,QAAA;AAAA,UACC,QAAAF;AAAA,UACA,YAAY;AAAA,YACVkE,MAAU,cACRrE,gBAAAA,EAAAA,IAAC,QAAK,EAAA,WAAU,gBAAe,UAAQ,YAAA;AAAA,YAEzCyD,EAAmBtD,CAAM,KACvBH,gBAAAA,EAAA;AAAA,cAACgE;AAAA,cAAA;AAAA,gBACC,cAAcN,GAAuBvD,EAAO,KAAK;AAAA,cAAA;AAAA,YAAA;AAAA,UACnD;AAAA,QAEJ;AAAA,MAAA;AAAA,IACF,GACF;AAAA,IACCA,EAAO,eACNH,gBAAAA,EAAA;AAAA,MAACyE;AAAA,MAAA;AAAA,QACC,WAAW1E,EAAG2E,GAAc,qCAAqC;AAAA,QACjE,SAASvE,EAAO;AAAA,MAAA;AAAA,IAClB;AAAA,IAEDA,EAAO,SAAS,WAAW,WAAWA,KAAUA,EAAO,MAAM,QAC3DH,gBAAAA,EAAA,IAAAY,GAAA,EAAW,QAAQT,EAAO,MAAM,MAAM;AAAA,IAExCA,EAAO,SAASH,gBAAAA,MAAC2B,GAAW,EAAA,QAAAxB,GAAgB,iBAAe,IAAC;AAAA,IAC5DA,EAAO,QAAQH,gBAAAA,MAACY,GAAW,EAAA,QAAQT,EAAO,MAAM;AAAA,IACjDH,gBAAAA,MAACwB,KAAwB,QAAArB,GAAgB;AAAA,IACxCqE,KACC3E,gBAAAA,EAAA;AAAA,MAAC0C,EAAY;AAAA,MAAZ;AAAA,QACC,aAAA+B;AAAA,QACA,MAAMvD;AAAA,QACN,cAAc,MAAMC,EAAU,CAACD,CAAM;AAAA,QAEpC,UAAA;AAAA,UACCwD,KAAAvE,gBAAAA,EAAA,IAACuC,EAAY,SAAZ,EAAoB,SAAO,IAC1B,UAAA1C,gBAAAA,EAAAA,KAACwB,GAAO,EAAA,SAAQ,UAAS,MAAK,MAC3B,UAAA;AAAA,YAASN,IAAAf,gBAAAA,EAAA,IAAC2E,KAAU,MAAM,GAAA,CAAI,IAAM3E,gBAAAA,EAAAA,IAAA4E,GAAA,EAAS,MAAM,GAAI,CAAA;AAAA,YACtD7D,IAA6B,oBAApB;AAAA,UAAoB,EAAA,CACjC,EACF,CAAA;AAAA,UAEDf,gBAAAA,EAAA,IAAAuC,EAAY,SAAZ,EACC,gCAAC,OAAI,EAAA,WAAU,QACZ,UAAAc,EAAoBlD,CAAM,IACzBH,gBAAAA,EAAA,IAAC4D,GAAmB,EAAA,QAAAzD,EAAA,CAAgB,IAClCA,EAAO,SAAS,WAClBH,gBAAAA,EAAAA,IAACyC,GAAW,EAAA,QAAAtC,EAAgB,CAAA,IAC1BgD,EAAYhD,CAAM,KAAK,WAAWA,IACpCH,gBAAAA,MAACyC,KAAW,QAAQtC,EAAO,OAAO,IAChC,MACN,EACF,CAAA;AAAA,QAAA;AAAA,MAAA;AAAA,IAAA;AAAA,EACF,EAAA,CAEJ,EACF,CAAA;AAEJ,GC/IM0E,KAAiB,CAACC,MACtBA,KACE9E,gBAAAA,EAAA;AAAA,EAACyE;AAAA,EAAA;AAAA,IACC,WAAW1E,EAAG2E,GAAc,qCAAqC;AAAA,IACjE,SAAAI;AAAA,EAAA;AACF,GAGEC,KAAoB,CAAC5E,MACxBN,gBAAAA,EAAA,KAAAiD,GAAA,EAAK,WAAU,iBACd,UAAA;AAAA,EAAA9C,gBAAAA,EAAAA,IAAC,UAAK,WAAU,iCACd,UAACA,gBAAAA,EAAA,IAAAK,GAAA,EAAW,QAAAF,EAAgB,CAAA,GAC9B;AAAA,EACCA,EAAO,QAAQH,gBAAAA,MAACY,GAAW,EAAA,QAAQT,EAAO,MAAM;AAAA,EAChD0E,GAAe1E,EAAO,WAAW;AAAA,EAClCH,gBAAAA,MAACwB,KAAwB,QAAArB,EAAgB,CAAA;AAAA,GAC3C,GAGWsC,IAAa,CAAC;AAAA,EACzB,QAAAtC;AAAA,EACA,aAAAmE,IAAc;AAAA,EACd,YAAAU;AACF,MAIM;AACJ,MAAI,CAAC7E,KAAU,OAAO,KAAKA,CAAM,EAAE,WAAW;AAE1C,WAAAN,gBAAAA,EAAA,KAACiD,GAAK,EAAA,WAAU,mBACb,UAAA;AAAA,MAAAkC;AAAA,MACAhF,gBAAAA,EAAA,IAAA,OAAA,EAAI,WAAU,4CAA2C,UAE1D,sBAAA,CAAA;AAAA,IAAA,GACF;AAIJ,MAAIG,EAAO;AACF,WAAAH,gBAAAA,MAAC2B,KAAW,QAAAxB,GAAgB;AAGjC,MAAAkD,EAAoBlD,CAAM;AACrB,WAAAH,gBAAAA,MAAC4D,KAAmB,QAAAzD,GAAgB;AAGzC,MAAA+C,GAAY/C,EAAO,IAAI;AACzB,WAAO4E,GAAkB5E,CAAM;AAGjC,MAAIA,EAAO,SAAS,WAAW,OAAOA,EAAO,SAAU;AACrD,WAAQH,gBAAAA,EAAAA,IAAAyC,GAAA,EAAW,QAAQtC,EAAO,MAAO,CAAA;AAGvC,MAAAA,EAAO,SAAS,UAAU;AAC5B,UAAM8E,IAAoBjG;AAAA,MACxB,OAAO,QAAQmB,EAAO,cAAc,CAAA,CAAE;AAAA,MACtC,CAAC,CAAC+E,GAAcC,CAAQ,MACfA,EAAS,aACZ,eACAhF,EAAO,UAAU,SAAS+E,CAAY,IACpC,aACA;AAAA,IAEV,GACME,IAAa,CAAC,YAAY,YAAY,YAAY,GAElDC,IACJ,OAAOlF,EAAO,wBAAyB,WACrCH,gBAAAA,EAAA,IAACyC,GAAW,EAAA,QAAQtC,EAAO,qBAAsB,CAAA,IAC/CA,EAAO,yBAAyB,KAClCN,gBAAAA,EAAA;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,WAAWE;AAAA,UACT2E;AAAA,UACA;AAAA,QACF;AAAA,QAEA,UAAA;AAAA,UAAA1E,gBAAAA,EAAAA,IAAC,UAAK,UAAiC,oCAAA,CAAA;AAAA,UACvCA,gBAAAA,EAAA;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,WAAU;AAAA,cACV,MAAK;AAAA,cACL,KAAI;AAAA,cACJ,QAAO;AAAA,cAEP,UAAAA,gBAAAA,EAAAA,IAACsF,GAAS,EAAA,MAAM,GAAI,CAAA;AAAA,YAAA;AAAA,UAAA;AAAA,QACtB;AAAA,MAAA;AAAA,IAAA,IAEA;AAGJ,WAAAzF,gBAAAA,EAAA,KAACiD,GAAK,EAAA,WAAU,4BACb,UAAA;AAAA,MAAAkC;AAAA,MACAI,EAAW;AAAA,QACV,CAACf,MACCY,EAAkBZ,CAAK,2BACpB,MAAe,EAAA,WAAU,YACvB,UAAAY,EAAkBZ,CAAK,EAAE,IAAI,CAAC,CAACD,GAAMjE,CAAM,MAC1CH,gBAAAA,EAAA;AAAA,UAACmE;AAAA,UAAA;AAAA,YAEC,MAAAC;AAAA,YACA,QAAQjE;AAAAA,YACR,OAAAkE;AAAA,YACA,aAAAC;AAAA,UAAA;AAAA,UAJKF;AAAA,QAMR,CAAA,KATMC,CAUT;AAAA,MAEN;AAAA,MACCgB;AAAA,IAAA,GACH;AAAA,EAAA;AAIG,SAAA;AACT;"}
|
|
1
|
+
{"version":3,"file":"SchemaView-CtYJpxQI.js","sources":["../src/lib/util/groupBy.ts","../src/lib/plugins/openapi/ParamInfos.tsx","../src/lib/plugins/openapi/components/EnumValues.tsx","../src/lib/plugins/openapi/schema/SchemaExampleAndDefault.tsx","../src/lib/plugins/openapi/components/ConstValue.tsx","../src/lib/plugins/openapi/schema/LogicalGroup/LogicalGroupConnector.tsx","../src/lib/plugins/openapi/schema/LogicalGroup/LogicalGroupItem.tsx","../src/lib/plugins/openapi/schema/LogicalGroup/LogicalGroup.tsx","../src/lib/plugins/openapi/schema/utils.ts","../src/lib/plugins/openapi/schema/SchemaPropertyItem.tsx","../src/lib/plugins/openapi/schema/SchemaView.tsx"],"sourcesContent":["export const groupBy = <\n T extends Record<PropertyKey, any>,\n KeySelector extends (item: T) => PropertyKey,\n>(\n arr: T[],\n keySelector: KeySelector,\n): Partial<Record<ReturnType<KeySelector>, T[]>> => {\n return arr.reduce(\n (accumulator, val) => {\n const groupedKey = keySelector(val) as ReturnType<KeySelector>;\n if (!accumulator[groupedKey]) {\n accumulator[groupedKey] = [];\n }\n accumulator[groupedKey].push(val);\n return accumulator;\n },\n {} as Record<ReturnType<KeySelector>, T[]>,\n );\n};\n","import { ChevronsLeftRightIcon } from \"lucide-react\";\nimport { isValidElement, useState } from \"react\";\nimport { InlineCode } from \"../../components/InlineCode.js\";\nimport { type SchemaObject } from \"../../oas/parser/index.js\";\nimport { cn } from \"../../util/cn.js\";\n\nconst Pattern = ({ pattern }: { pattern: string }) => {\n const [isExpanded, setIsExpanded] = useState(false);\n const isExpandable = pattern.length > 20;\n const shortPattern = isExpandable ? `${pattern.slice(0, 20)}…` : pattern;\n\n return (\n <InlineCode\n className={cn(\"text-xs\", isExpandable && \"cursor-pointer\")}\n onClick={() => setIsExpanded(!isExpanded)}\n selectOnClick={false}\n >\n {isExpanded ? pattern : shortPattern}\n {isExpandable && (\n <button type=\"button\" className=\"p-1 translate-y-[2px]\">\n {!isExpanded && <ChevronsLeftRightIcon size={12} />}\n </button>\n )}\n </InlineCode>\n );\n};\n\nconst getSchemaInfos = (schema?: SchemaObject) => {\n if (!schema) return [];\n\n return [\n schema.type === \"array\" && schema.items.type\n ? Array.isArray(schema.items.type)\n ? `(${schema.items.type.join(\" | \")})[]`\n : `${schema.items.type}[]`\n : Array.isArray(schema.type)\n ? schema.type.join(\" | \")\n : schema.type,\n\n schema.enum && \"enum\",\n schema.const && \"const\",\n schema.format,\n schema.minimum && `min: ${schema.minimum}`,\n schema.maximum && `max: ${schema.maximum}`,\n schema.minLength && `minLength: ${schema.minLength}`,\n schema.maxLength && `maxLength: ${schema.maxLength}`,\n schema.minItems && `minItems: ${schema.minItems}`,\n schema.maxItems && `maxItems: ${schema.maxItems}`,\n schema.uniqueItems && \"unique\",\n schema.minProperties && `minProps: ${schema.minProperties}`,\n schema.maxProperties && `maxProps: ${schema.maxProperties}`,\n schema.readOnly && \"readOnly\",\n schema.writeOnly && \"writeOnly\",\n schema.deprecated && \"deprecated\",\n schema.pattern && (\n <>\n pattern: <Pattern pattern={schema.pattern} />\n </>\n ),\n ];\n};\n\nexport const ParamInfos = ({\n schema,\n extraItems = [],\n className,\n}: {\n schema?: SchemaObject;\n extraItems?: unknown[];\n className?: string;\n}) => {\n const filteredItems = [...getSchemaInfos(schema), ...extraItems].flatMap(\n (item) => (typeof item === \"string\" || isValidElement(item) ? item : []),\n );\n\n return (\n <span className={className}>\n {filteredItems.map((item, index) => (\n <span className=\"text-muted-foreground\" key={index}>\n {item}\n {index < filteredItems.length - 1 && (\n <span className=\"text-muted-foreground/50\">\n · \n </span>\n )}\n </span>\n ))}\n </span>\n );\n};\n","import { ChevronDownIcon, ChevronUpIcon } from \"lucide-react\";\nimport { useState } from \"react\";\nimport { Button } from \"zudoku/ui/Button.js\";\nimport { cn } from \"../../../util/cn.js\";\nimport { SelectOnClick } from \"./SelectOnClick.js\";\n\nexport const EnumValues = ({\n values,\n className,\n maxVisibleValues = 8,\n}: {\n values: Array<string | number>;\n className?: string;\n maxVisibleValues?: number;\n}) => {\n const [isOpen, setIsOpen] = useState(false);\n\n if (!values.length) return null;\n\n const shouldCollapse = values.length > maxVisibleValues;\n const visibleValues =\n shouldCollapse && !isOpen ? values.slice(0, maxVisibleValues) : values;\n\n return (\n <div className={cn(\"flex flex-wrap gap-1.5 text-xs\", className)}>\n <span className=\"text-muted-foreground\">Enum values: </span>\n {visibleValues.map((value) => (\n <div key={value}>\n <SelectOnClick className=\"border rounded-sm px-1 font-mono\">\n {value}\n </SelectOnClick>\n </div>\n ))}\n {shouldCollapse && (\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className=\"h-fit px-0\"\n onClick={() => setIsOpen(!isOpen)}\n >\n {isOpen ? (\n <div className=\"flex items-center gap-1\">\n <ChevronUpIcon size={12} />\n <span className=\"text-muted-foreground\">show less</span>\n </div>\n ) : (\n <div className=\"flex items-center gap-1\">\n <ChevronDownIcon size={12} />\n <span className=\"text-muted-foreground\">\n show {values.length - maxVisibleValues} more\n </span>\n </div>\n )}\n </Button>\n )}\n </div>\n );\n};\n","import type { SchemaObject } from \"../../../oas/parser/index.js\";\nimport { SelectOnClick } from \"../components/SelectOnClick.js\";\n\nexport const SchemaExampleAndDefault = ({\n schema,\n}: {\n schema: SchemaObject;\n}) => {\n const example = schema.examples?.at(0);\n const defaultValue = schema.default;\n\n if (!example && !defaultValue) return null;\n\n return (\n <div className=\"flex flex-col gap-1 text-xs\">\n {example && (\n <div>\n <span className=\"text-muted-foreground\">Example: </span>\n <SelectOnClick className=\"border rounded-sm px-1 font-mono\">\n {typeof example === \"object\" || typeof example === \"boolean\"\n ? JSON.stringify(example)\n : example}\n </SelectOnClick>\n </div>\n )}\n {defaultValue && (\n <div>\n <span className=\"text-muted-foreground\">Default: </span>\n <SelectOnClick className=\"border rounded-sm px-1 font-mono\">\n {typeof defaultValue === \"object\" ||\n typeof defaultValue === \"boolean\"\n ? JSON.stringify(defaultValue)\n : defaultValue}\n </SelectOnClick>\n </div>\n )}\n </div>\n );\n};\n","import type { SchemaObject } from \"../../../oas/parser/index.js\";\nimport { SelectOnClick } from \"./SelectOnClick.js\";\n\nexport const ConstValue = ({\n schema,\n hideDescription = false,\n}: {\n schema: SchemaObject;\n hideDescription?: boolean;\n}) => {\n return (\n <div className=\"flex flex-col gap-1 text-xs\">\n <div>\n <span className=\"text-muted-foreground\">Const value: </span>\n <SelectOnClick className=\"border rounded px-1 font-mono\">\n {schema.const}\n </SelectOnClick>\n {!hideDescription && schema.description && (\n <div className=\"text-muted-foreground\">{schema.description}</div>\n )}\n </div>\n </div>\n );\n};\n","import {\n ChevronDownIcon,\n CircleDotIcon,\n CircleFadingPlusIcon,\n CircleIcon,\n} from \"lucide-react\";\nimport { cn } from \"../../../../util/cn.js\";\n\nimport type { LogicalGroupType } from \"../utils.js\";\n\nconst iconMap = {\n AND: <CircleFadingPlusIcon size={16} className=\"fill-card\" />,\n OR: <CircleDotIcon size={16} className=\"fill-card\" />,\n ONE: <CircleIcon size={14} className=\"fill-card\" />,\n} as const;\n\nconst colorClass = {\n AND: \"text-green-500 dark:text-green-300/60\",\n OR: \"text-blue-400 dark:text-blue-500\",\n ONE: \"text-purple-500 dark:text-purple-300/60\",\n} as const;\n\nexport const LogicalGroupConnector = ({\n type,\n isOpen,\n className,\n schemeName,\n}: {\n type: LogicalGroupType;\n isOpen: boolean;\n className?: string;\n schemeName?: string;\n}) => {\n return (\n <div\n className={cn(\n colorClass[type],\n \"relative text-sm flex py-2\",\n \"before:border-l before:absolute before:-top-2 before:-bottom-2 before:border-border before:border-dashed before:content-['']\",\n className,\n )}\n >\n <div className=\"-translate-x-[7px] flex gap-1 items-center\">\n {iconMap[type]}\n <div\n className={cn(\n \"translate-y-px mx-px opacity-0 group-hover:opacity-100 transition\",\n !isOpen && \"-rotate-90\",\n )}\n >\n <ChevronDownIcon size={16} />\n </div>\n <span className=\"text-sm text-foreground\">{schemeName}</span>\n </div>\n </div>\n );\n};\n","import * as Collapsible from \"@radix-ui/react-collapsible\";\nimport { useState } from \"react\";\nimport type { SchemaObject } from \"../../../../oas/parser/index.js\";\nimport { SchemaView } from \"../SchemaView.js\";\nimport type { LogicalGroupType } from \"../utils.js\";\nimport { LogicalGroupConnector } from \"./LogicalGroupConnector.js\";\n\nexport const LogicalGroupItem = (props: {\n type: LogicalGroupType;\n schema: SchemaObject;\n}) => {\n const [isOpen, setIsOpen] = useState(true);\n\n return (\n <Collapsible.Root\n open={isOpen}\n onOpenChange={() => setIsOpen((prev) => !prev)}\n className=\"group\"\n >\n <Collapsible.Trigger>\n <LogicalGroupConnector\n type={props.type}\n isOpen={isOpen}\n schemeName={props.schema.title}\n />\n </Collapsible.Trigger>\n {!isOpen && <div className=\"wavy-line bg-border translate-y-1\" />}\n <Collapsible.Content>\n <SchemaView schema={props.schema} />\n </Collapsible.Content>\n </Collapsible.Root>\n );\n};\n","import * as Collapsible from \"@radix-ui/react-collapsible\";\nimport { SquareMinusIcon, SquarePlusIcon } from \"lucide-react\";\nimport type { SchemaObject } from \"../../../../oas/parser/index.js\";\nimport { Card } from \"../../../../ui/Card.js\";\nimport type { LogicalGroupType } from \"../utils.js\";\nimport { LogicalGroupItem } from \"./LogicalGroupItem.js\";\n\nconst typeLabel = {\n AND: \"All of\",\n OR: \"Any of\",\n ONE: \"One of\",\n};\n\nexport const LogicalGroup = ({\n schemas,\n type,\n isOpen,\n toggleOpen,\n}: {\n schemas: SchemaObject[];\n type: LogicalGroupType;\n isOpen: boolean;\n toggleOpen: () => void;\n}) => (\n <Collapsible.Root open={isOpen} onOpenChange={toggleOpen} asChild>\n <Card className=\"px-6\">\n <Collapsible.Trigger className=\"flex gap-2 items-center py-2 w-full text-sm text-muted-foreground -translate-x-1.5\">\n {isOpen ? <SquareMinusIcon size={14} /> : <SquarePlusIcon size={14} />}\n <span>{typeLabel[type]}</span>\n </Collapsible.Trigger>\n\n <Collapsible.Content className=\"pb-4\">\n {schemas.map((subSchema, index) => (\n // eslint-disable-next-line react/no-array-index-key\n <LogicalGroupItem key={index} type={type} schema={subSchema} />\n ))}\n </Collapsible.Content>\n </Card>\n </Collapsible.Root>\n);\n","import { CIRCULAR_REF } from \"../../../oas/graphql/circular.js\";\nimport type { SchemaObject } from \"../../../oas/parser/index.js\";\n\nexport const isBasicType = (\n type: unknown,\n): type is \"string\" | \"number\" | \"boolean\" | \"integer\" | \"null\" =>\n typeof type === \"string\" &&\n [\"string\", \"number\", \"boolean\", \"integer\", \"null\"].includes(type);\n\nexport const isArrayType = (value: SchemaObject) =>\n value.type === \"array\" ||\n // schema.type might be an array of types, so we need to check if \"array\" is one of them\n (Array.isArray(value.type) && value.type.includes(\"array\"));\n\nexport const isComplexType = (value?: SchemaObject) =>\n value &&\n ((value.type === \"object\" &&\n Object.keys(value.properties ?? {}).length > 0) ||\n (value.type === \"array\" &&\n typeof value.items === \"object\" &&\n (!value.items.type || value.items.type === \"object\")));\n\nexport const hasLogicalGroupings = (value: SchemaObject) =>\n Boolean(value.oneOf ?? value.allOf ?? value.anyOf);\n\nexport const LogicalSchemaTypeMap = {\n allOf: \"AND\",\n anyOf: \"OR\",\n oneOf: \"ONE\",\n} as const;\n\nexport type LogicalGroupType = \"AND\" | \"OR\" | \"ONE\";\n\nexport const isCircularRef = (schema: unknown): schema is string =>\n typeof schema === \"string\" && schema.startsWith(CIRCULAR_REF);\n\nexport const isArrayCircularRef = (\n schema: SchemaObject,\n): schema is SchemaObject & { items: SchemaObject } =>\n isArrayType(schema) && \"items\" in schema && isCircularRef(schema.items);\n\nexport const extractCircularRefInfo = (\n ref?: string | SchemaObject,\n): string | undefined =>\n typeof ref === \"string\" ? ref.split(\":\")[1] : undefined;\n","import * as Collapsible from \"@radix-ui/react-collapsible\";\nimport { MinusIcon, PlusIcon, RefreshCcwDotIcon } from \"lucide-react\";\nimport { useCallback, useState } from \"react\";\nimport { InlineCode } from \"../../../components/InlineCode.js\";\nimport { Markdown, ProseClasses } from \"../../../components/Markdown.js\";\nimport type { SchemaObject } from \"../../../oas/parser/index.js\";\nimport { Button } from \"../../../ui/Button.js\";\nimport { cn } from \"../../../util/cn.js\";\nimport { objectEntries } from \"../../../util/objectEntries.js\";\nimport { ConstValue } from \"../components/ConstValue.js\";\nimport { EnumValues } from \"../components/EnumValues.js\";\nimport { SelectOnClick } from \"../components/SelectOnClick.js\";\nimport { ParamInfos } from \"../ParamInfos.js\";\nimport { LogicalGroup } from \"./LogicalGroup/LogicalGroup.js\";\nimport { SchemaExampleAndDefault } from \"./SchemaExampleAndDefault.js\";\nimport { SchemaView } from \"./SchemaView.js\";\nimport {\n extractCircularRefInfo,\n hasLogicalGroupings,\n isArrayCircularRef,\n isArrayType,\n isCircularRef,\n isComplexType,\n LogicalSchemaTypeMap,\n} from \"./utils.js\";\n\nexport const SchemaLogicalGroup = ({ schema }: { schema: SchemaObject }) => {\n const [isOpen, setIsOpen] = useState(true);\n const toggleOpen = useCallback(() => setIsOpen((prev) => !prev), []);\n\n for (const [key, type] of objectEntries(LogicalSchemaTypeMap)) {\n if (!schema[key]) continue;\n\n return (\n <LogicalGroup\n schemas={schema[key]}\n type={type}\n isOpen={isOpen}\n toggleOpen={toggleOpen}\n />\n );\n }\n};\n\nconst RecursiveIndicator = ({ circularProp }: { circularProp?: string }) => (\n <InlineCode\n className=\"inline-flex items-center gap-1.5 italic text-xs translate-y-0.5\"\n selectOnClick={false}\n >\n <RefreshCcwDotIcon size={13} />\n <span>{circularProp ? `${circularProp} (circular)` : \"circular\"}</span>\n </InlineCode>\n);\n\nexport const SchemaPropertyItem = ({\n name,\n schema,\n group,\n defaultOpen = false,\n showCollapseButton = true,\n}: {\n name: string;\n schema: SchemaObject;\n group: \"required\" | \"optional\" | \"deprecated\";\n defaultOpen?: boolean;\n showCollapseButton?: boolean;\n}) => {\n const [isOpen, setIsOpen] = useState(defaultOpen);\n\n if (isCircularRef(schema)) {\n return (\n <li className=\"p-4 bg-border/20 hover:bg-border/30\">\n <div className=\"flex flex-col gap-2.5 justify-between text-sm\">\n <div className=\"space-x-2 rtl:space-x-reverse\">\n <code>{name}</code>\n <ParamInfos\n schema={schema}\n extraItems={[<RecursiveIndicator key=\"circular-ref\" />]}\n />\n </div>\n <SchemaExampleAndDefault schema={schema} />\n </div>\n </li>\n );\n }\n\n const isCollapsible = Boolean(\n (hasLogicalGroupings(schema) ||\n isComplexType(schema) ||\n (isArrayType(schema) &&\n \"items\" in schema &&\n isComplexType(schema.items)) ||\n schema.additionalProperties) &&\n !isArrayCircularRef(schema),\n );\n\n return (\n <li className=\"p-4 bg-border/20 hover:bg-border/30\">\n <div className=\"flex flex-col gap-2.5 justify-between text-sm\">\n <div className=\"space-x-2 rtl:space-x-reverse\">\n <SelectOnClick asChild>\n <code>{name}</code>\n </SelectOnClick>\n <ParamInfos\n schema={schema}\n extraItems={[\n group !== \"optional\" && (\n <span className=\"text-primary\">required</span>\n ),\n isArrayCircularRef(schema) && (\n <RecursiveIndicator\n circularProp={extractCircularRefInfo(schema.items)}\n />\n ),\n ]}\n />\n </div>\n {schema.description && (\n <Markdown\n className={cn(ProseClasses, \"text-sm leading-normal line-clamp-4\")}\n content={schema.description}\n />\n )}\n {schema.type === \"array\" && \"items\" in schema && schema.items.enum && (\n <EnumValues values={schema.items.enum} />\n )}\n {schema.const && <ConstValue schema={schema} hideDescription />}\n {schema.enum && <EnumValues values={schema.enum} />}\n <SchemaExampleAndDefault schema={schema} />\n {isCollapsible && (\n <Collapsible.Root\n defaultOpen={defaultOpen}\n open={isOpen}\n onOpenChange={() => setIsOpen(!isOpen)}\n >\n {showCollapseButton && (\n <Collapsible.Trigger asChild>\n <Button variant=\"expand\" size=\"sm\">\n {isOpen ? <MinusIcon size={12} /> : <PlusIcon size={12} />}\n {!isOpen ? \"Show properties\" : \"Hide properties\"}\n </Button>\n </Collapsible.Trigger>\n )}\n <Collapsible.Content>\n <div className=\"mt-2\">\n {hasLogicalGroupings(schema) ? (\n <SchemaLogicalGroup schema={schema} />\n ) : schema.type === \"object\" ? (\n <SchemaView schema={schema} />\n ) : isArrayType(schema) && \"items\" in schema ? (\n <SchemaView schema={schema.items} />\n ) : null}\n </div>\n </Collapsible.Content>\n </Collapsible.Root>\n )}\n </div>\n </li>\n );\n};\n","import { InfoIcon } from \"lucide-react\";\nimport { Markdown, ProseClasses } from \"../../../components/Markdown.js\";\nimport type { SchemaObject } from \"../../../oas/parser/index.js\";\nimport { Card } from \"../../../ui/Card.js\";\nimport { cn } from \"../../../util/cn.js\";\nimport { groupBy } from \"../../../util/groupBy.js\";\nimport { ConstValue } from \"../components/ConstValue.js\";\nimport { EnumValues } from \"../components/EnumValues.js\";\nimport { ParamInfos } from \"../ParamInfos.js\";\nimport { SchemaExampleAndDefault } from \"./SchemaExampleAndDefault.js\";\nimport {\n SchemaLogicalGroup,\n SchemaPropertyItem,\n} from \"./SchemaPropertyItem.js\";\nimport { hasLogicalGroupings, isBasicType } from \"./utils.js\";\n\nconst renderMarkdown = (content?: string) =>\n content && (\n <Markdown\n className={cn(ProseClasses, \"text-sm leading-normal line-clamp-4\")}\n content={content}\n />\n );\n\nconst renderBasicSchema = (schema: SchemaObject) => (\n <Card className=\"p-4 space-y-2\">\n <span className=\"text-sm text-muted-foreground\">\n <ParamInfos schema={schema} />\n </span>\n {schema.enum && <EnumValues values={schema.enum} />}\n {renderMarkdown(schema.description)}\n <SchemaExampleAndDefault schema={schema} />\n </Card>\n);\n\nexport const SchemaView = ({\n schema,\n defaultOpen = false,\n cardHeader,\n}: {\n schema?: SchemaObject | null;\n defaultOpen?: boolean;\n cardHeader?: React.ReactNode;\n}) => {\n if (!schema || Object.keys(schema).length === 0) {\n return (\n <Card className=\"overflow-hidden\">\n {cardHeader}\n <div className=\"text-sm text-muted-foreground italic p-4\">\n No schema specified\n </div>\n </Card>\n );\n }\n\n if (schema.const) {\n return <ConstValue schema={schema} />;\n }\n\n if (hasLogicalGroupings(schema)) {\n return <SchemaLogicalGroup schema={schema} />;\n }\n\n if (isBasicType(schema.type)) {\n return renderBasicSchema(schema);\n }\n\n if (schema.type === \"array\" && typeof schema.items === \"object\") {\n return <SchemaView schema={schema.items} />;\n }\n\n if (schema.type === \"object\") {\n const groupedProperties = groupBy(\n Object.entries(schema.properties ?? {}),\n ([propertyName, property]) => {\n return property.deprecated\n ? \"deprecated\"\n : schema.required?.includes(propertyName)\n ? \"required\"\n : \"optional\";\n },\n );\n const groupNames = [\"required\", \"optional\", \"deprecated\"] as const;\n\n const additionalProperties =\n typeof schema.additionalProperties === \"object\" ? (\n <SchemaView schema={schema.additionalProperties} />\n ) : schema.additionalProperties === true ? (\n <div\n className={cn(\n ProseClasses,\n \"text-sm p-4 bg-border/20 hover:bg-border/30 flex items-center gap-1\",\n )}\n >\n <span>Additional properties are allowed</span>\n <a\n className=\"p-0.5 -m-0.5\"\n href=\"https://swagger.io/docs/specification/v3_0/data-models/dictionaries/\"\n rel=\"noopener noreferrer\"\n target=\"_blank\"\n >\n <InfoIcon size={14} />\n </a>\n </div>\n ) : null;\n\n return (\n <Card className=\"divide-y overflow-hidden\">\n {cardHeader}\n {groupNames.map(\n (group) =>\n groupedProperties[group] && (\n <ul key={group} className=\"divide-y\">\n {groupedProperties[group].map(([name, schema]) => (\n <SchemaPropertyItem\n key={name}\n name={name}\n schema={schema}\n group={group}\n defaultOpen={defaultOpen}\n />\n ))}\n </ul>\n ),\n )}\n {additionalProperties}\n </Card>\n );\n }\n\n return null;\n};\n"],"names":["groupBy","arr","keySelector","accumulator","val","groupedKey","Pattern","pattern","isExpanded","setIsExpanded","useState","isExpandable","shortPattern","jsxs","InlineCode","cn","jsx","ChevronsLeftRightIcon","getSchemaInfos","schema","Fragment","ParamInfos","extraItems","className","filteredItems","item","isValidElement","index","EnumValues","values","maxVisibleValues","isOpen","setIsOpen","shouldCollapse","visibleValues","value","SelectOnClick","Button","ChevronUpIcon","ChevronDownIcon","SchemaExampleAndDefault","example","defaultValue","ConstValue","hideDescription","iconMap","CircleFadingPlusIcon","CircleDotIcon","CircleIcon","colorClass","LogicalGroupConnector","type","schemeName","LogicalGroupItem","props","Collapsible","prev","SchemaView","typeLabel","LogicalGroup","schemas","toggleOpen","Card","SquareMinusIcon","SquarePlusIcon","subSchema","isBasicType","isArrayType","isComplexType","hasLogicalGroupings","LogicalSchemaTypeMap","isCircularRef","CIRCULAR_REF","isArrayCircularRef","extractCircularRefInfo","ref","SchemaLogicalGroup","useCallback","key","objectEntries","RecursiveIndicator","circularProp","RefreshCcwDotIcon","SchemaPropertyItem","name","group","defaultOpen","showCollapseButton","isCollapsible","Markdown","ProseClasses","MinusIcon","PlusIcon","renderMarkdown","content","renderBasicSchema","cardHeader","groupedProperties","propertyName","property","groupNames","additionalProperties","InfoIcon"],"mappings":"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"}
|
|
@@ -3,7 +3,7 @@ import { useEffect as i } from "react";
|
|
|
3
3
|
import { b as m, L as x, a as h } from "./chunk-DQRVZFIR-BblmKnHy.js";
|
|
4
4
|
import { B as r } from "./Button-BE9IVkWV.js";
|
|
5
5
|
import { C as o, a as c, b as l, c as d, d as u } from "./Card-DPhGbYUM.js";
|
|
6
|
-
import { k as s } from "./hook-
|
|
6
|
+
import { k as s } from "./hook-wIlTGE-2.js";
|
|
7
7
|
import { Button as a, Link as g } from "./zudoku.components.js";
|
|
8
8
|
const S = () => {
|
|
9
9
|
const t = s(), [n] = m();
|
|
@@ -60,4 +60,4 @@ export {
|
|
|
60
60
|
S as a,
|
|
61
61
|
b
|
|
62
62
|
};
|
|
63
|
-
//# sourceMappingURL=SignUp-
|
|
63
|
+
//# sourceMappingURL=SignUp-CrjeBbqN.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SignUp-
|
|
1
|
+
{"version":3,"file":"SignUp-CrjeBbqN.js","sources":["../src/lib/authentication/components/SignIn.tsx","../src/lib/authentication/components/SignOut.tsx","../src/lib/authentication/components/SignUp.tsx"],"sourcesContent":["import { useEffect } from \"react\";\nimport { Link, useSearchParams } from \"react-router\";\nimport { Button } from \"zudoku/ui/Button.js\";\nimport {\n Card,\n CardContent,\n CardDescription,\n CardHeader,\n CardTitle,\n} from \"zudoku/ui/Card.js\";\nimport { useZudoku } from \"../../components/context/ZudokuContext.js\";\n\nexport const SignIn = () => {\n const context = useZudoku();\n const [search] = useSearchParams();\n useEffect(() => {\n void context.authentication?.signIn({\n redirectTo: search.get(\"redirect\") ?? undefined,\n });\n }, [context.authentication, search]);\n\n return (\n <div className=\"flex items-center justify-center mt-8\">\n <Card className=\"max-w-md w-full\">\n <CardHeader>\n <CardTitle className=\"text-lg\">Sign in</CardTitle>\n <CardDescription>\n You're being redirected to our secure login provider to complete\n your sign-in process.\n </CardDescription>\n </CardHeader>\n <CardContent>\n <div className=\"flex flex-col gap-2 justify-center\">\n <Button\n onClick={() => context.authentication?.signIn()}\n variant=\"default\"\n >\n Login\n </Button>\n <Button variant=\"link\" className=\"text-muted-foreground\" asChild>\n <Link to=\"/\">Go home</Link>\n </Button>\n </div>\n </CardContent>\n </Card>\n </div>\n );\n};\n","import { useEffect } from \"react\";\nimport { useNavigate } from \"react-router\";\nimport { useZudoku } from \"../../components/context/ZudokuContext.js\";\n\nexport const SignOut = () => {\n const context = useZudoku();\n const navigate = useNavigate();\n\n useEffect(() => {\n void context.authentication?.signOut().then(() => navigate(\"/\"));\n }, []);\n\n return null;\n};\n","import { useEffect } from \"react\";\nimport { Button, Link } from \"zudoku/components\";\nimport {\n Card,\n CardContent,\n CardDescription,\n CardHeader,\n CardTitle,\n} from \"zudoku/ui/Card.js\";\nimport { useZudoku } from \"../../components/context/ZudokuContext.js\";\n\nexport const SignUp = () => {\n const context = useZudoku();\n\n useEffect(() => {\n void (context.authentication?.signUp() ?? context.authentication?.signIn());\n }, [context.authentication]);\n\n return (\n <div className=\"flex items-center justify-center mt-8\">\n <Card className=\"max-w-md w-full\">\n <CardHeader>\n <CardTitle className=\"text-lg\">Sign up</CardTitle>\n <CardDescription>\n You're being redirected to our secure login provider to complete\n your sign up process.\n </CardDescription>\n </CardHeader>\n <CardContent>\n <div className=\"flex flex-col gap-2 justify-center\">\n <Button\n onClick={() => context.authentication?.signIn()}\n variant=\"default\"\n >\n Register\n </Button>\n <Button variant=\"link\" className=\"text-muted-foreground\" asChild>\n <Link to=\"/\">Go home</Link>\n </Button>\n </div>\n </CardContent>\n </Card>\n </div>\n );\n};\n"],"names":["SignIn","context","useZudoku","search","useSearchParams","useEffect","jsxs","Card","CardHeader","jsx","CardTitle","CardDescription","CardContent","Button","Link","SignOut","navigate","useNavigate","SignUp"],"mappings":";;;;;;;AAYO,MAAMA,IAAS,MAAM;AAC1B,QAAMC,IAAUC,EAAU,GACpB,CAACC,CAAM,IAAIC,EAAgB;AACjC,SAAAC,EAAU,MAAM;AACT,IAAAJ,EAAQ,gBAAgB,OAAO;AAAA,MAClC,YAAYE,EAAO,IAAI,UAAU,KAAK;AAAA,IAAA,CACvC;AAAA,EACA,GAAA,CAACF,EAAQ,gBAAgBE,CAAM,CAAC,yBAGhC,OAAI,EAAA,WAAU,yCACb,UAACG,gBAAAA,EAAA,KAAAC,GAAA,EAAK,WAAU,mBACd,UAAA;AAAA,IAAAD,gBAAAA,OAACE,GACC,EAAA,UAAA;AAAA,MAACC,gBAAAA,EAAA,IAAAC,GAAA,EAAU,WAAU,WAAU,UAAO,WAAA;AAAA,MACtCD,gBAAAA,EAAAA,IAACE,KAAgB,UAGjB,yFAAA,CAAA;AAAA,IAAA,GACF;AAAA,IACCF,gBAAAA,MAAAG,GAAA,EACC,UAACN,gBAAAA,EAAAA,KAAA,OAAA,EAAI,WAAU,sCACb,UAAA;AAAA,MAAAG,gBAAAA,EAAA;AAAA,QAACI;AAAA,QAAA;AAAA,UACC,SAAS,MAAMZ,EAAQ,gBAAgB,OAAO;AAAA,UAC9C,SAAQ;AAAA,UACT,UAAA;AAAA,QAAA;AAAA,MAED;AAAA,MACCQ,gBAAAA,EAAA,IAAAI,GAAA,EAAO,SAAQ,QAAO,WAAU,yBAAwB,SAAO,IAC9D,UAACJ,gBAAAA,EAAAA,IAAAK,GAAA,EAAK,IAAG,KAAI,qBAAO,EACtB,CAAA;AAAA,IAAA,EAAA,CACF,EACF,CAAA;AAAA,EAAA,EAAA,CACF,EACF,CAAA;AAEJ,GC3CaC,IAAU,MAAM;AAC3B,QAAMd,IAAUC,EAAU,GACpBc,IAAWC,EAAY;AAE7B,SAAAZ,EAAU,MAAM;AACT,IAAAJ,EAAQ,gBAAgB,QAAQ,EAAE,KAAK,MAAMe,EAAS,GAAG,CAAC;AAAA,EACjE,GAAG,EAAE,GAEE;AACT,GCFaE,IAAS,MAAM;AAC1B,QAAMjB,IAAUC,EAAU;AAE1B,SAAAG,EAAU,MAAM;AACd,IAAMJ,EAAQ,gBAAgB,OAAA,KAAYA,EAAQ,gBAAgB;EAAO,GACxE,CAACA,EAAQ,cAAc,CAAC,yBAGxB,OAAI,EAAA,WAAU,yCACb,UAACK,gBAAAA,EAAA,KAAAC,GAAA,EAAK,WAAU,mBACd,UAAA;AAAA,IAAAD,gBAAAA,OAACE,GACC,EAAA,UAAA;AAAA,MAACC,gBAAAA,EAAA,IAAAC,GAAA,EAAU,WAAU,WAAU,UAAO,WAAA;AAAA,MACtCD,gBAAAA,EAAAA,IAACE,KAAgB,UAGjB,yFAAA,CAAA;AAAA,IAAA,GACF;AAAA,IACCF,gBAAAA,MAAAG,GAAA,EACC,UAACN,gBAAAA,EAAAA,KAAA,OAAA,EAAI,WAAU,sCACb,UAAA;AAAA,MAAAG,gBAAAA,EAAA;AAAA,QAACI;AAAAA,QAAA;AAAA,UACC,SAAS,MAAMZ,EAAQ,gBAAgB,OAAO;AAAA,UAC9C,SAAQ;AAAA,UACT,UAAA;AAAA,QAAA;AAAA,MAED;AAAA,MACCQ,gBAAAA,EAAA,IAAAI,GAAA,EAAO,SAAQ,QAAO,WAAU,yBAAwB,SAAO,IAC9D,UAACJ,gBAAAA,EAAAA,IAAAK,GAAA,EAAK,IAAG,KAAI,qBAAO,EACtB,CAAA;AAAA,IAAA,EAAA,CACF,EACF,CAAA;AAAA,EAAA,EAAA,CACF,EACF,CAAA;AAEJ;"}
|
|
@@ -3,10 +3,10 @@ import { c as N, L as M, e as P, i as C } from "./chunk-DQRVZFIR-BblmKnHy.js";
|
|
|
3
3
|
import { UnlinkIcon as H } from "lucide-react";
|
|
4
4
|
import { C as O } from "./CategoryHeading-Cu2RwgjC.js";
|
|
5
5
|
import { Callout as I } from "./ui/Callout.js";
|
|
6
|
-
import { M as T, H as v, P as E } from "./Markdown-
|
|
6
|
+
import { M as T, H as v, P as E } from "./Markdown-BUE2ViaD.js";
|
|
7
7
|
import { memo as b, createContext as D, useMemo as L, Fragment as Z, use as _, useRef as F } from "react";
|
|
8
|
-
import { k as U, p as z, q as A } from "./hook-
|
|
9
|
-
import { h as B } from "./SyntaxHighlight-
|
|
8
|
+
import { k as U, p as z, q as A } from "./hook-wIlTGE-2.js";
|
|
9
|
+
import { h as B } from "./SyntaxHighlight-DtvR7RLF.js";
|
|
10
10
|
import { i as G, Z as j } from "./invariant-DAFpPywt.js";
|
|
11
11
|
import { CodeBlock as J } from "./ui/CodeBlock.js";
|
|
12
12
|
import { c as V } from "./cn-wvCW-ho6.js";
|
|
@@ -157,4 +157,4 @@ export {
|
|
|
157
157
|
he as S,
|
|
158
158
|
ge as a
|
|
159
159
|
};
|
|
160
|
-
//# sourceMappingURL=Slot-
|
|
160
|
+
//# sourceMappingURL=Slot-DANV2b7_.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Slot-T8NJUkm4.js","sources":["../src/lib/components/DeveloperHint.tsx","../src/lib/components/NotFoundPage.tsx","../src/lib/ui/SyntaxHighlight.tsx","../src/lib/errors/ErrorAlert.tsx","../src/lib/errors/RouterError.tsx","../src/lib/components/context/SlotProvider.tsx","../src/lib/components/Slot.tsx"],"sourcesContent":["import type { ReactNode } from \"react\";\nimport { Callout } from \"../ui/Callout.js\";\nimport { Markdown } from \"./Markdown.js\";\n\nexport const DeveloperHint = ({\n children,\n className,\n}: {\n children: ReactNode;\n className?: string;\n}) => {\n if (process.env.NODE_ENV !== \"development\") return;\n\n return (\n <Callout type=\"caution\" title=\"Developer hint\" className={className}>\n <div className=\"flex flex-col gap-2\">\n {typeof children === \"string\" ? (\n <Markdown content={children} />\n ) : (\n <div>{children}</div>\n )}\n <small className=\"italic\">\n Note: This hint is only shown in development mode.\n </small>\n </div>\n </Callout>\n );\n};\n","import { UnlinkIcon } from \"lucide-react\";\nimport { Link, useParams } from \"react-router\";\nimport { CategoryHeading } from \"./CategoryHeading.js\";\nimport { DeveloperHint } from \"./DeveloperHint.js\";\nimport { Heading } from \"./Heading.js\";\nimport { ProseClasses } from \"./Markdown.js\";\n\nexport const NotFoundPage = () => {\n const params = useParams();\n\n return (\n <div className={ProseClasses + \" h-full pt-(--padding-content-top)\"}>\n <CategoryHeading>404</CategoryHeading>\n <Heading level={1} className=\"flex gap-3.5 items-center\">\n Page not found\n <UnlinkIcon size={24} />\n </Heading>\n <DeveloperHint>\n Start by adding a file at{\" \"}\n <code>\n {\"{PROJECT_ROOT}\"}/{params[\"*\"]}.mdx\n </code>{\" \"}\n and add some content to make this error go away.\n </DeveloperHint>\n <p>\n It seems that the page you are looking for does not exist or may have\n been moved. Please check the URL for any typos or use the navigation\n menu to find the correct page.\n </p>\n <Link to=\"/\">Go back home</Link>\n </div>\n );\n};\n","import { memo } from \"react\";\nimport { useZudoku } from \"../components/context/ZudokuContext.js\";\nimport { highlight } from \"../shiki.js\";\nimport invariant from \"../util/invariant.js\";\nimport { CodeBlock, type CodeBlockProps } from \"./CodeBlock.js\";\n\ntype SyntaxHighlightProps = CodeBlockProps &\n ({ code: string; children?: never } | { code?: never; children: string });\n\nexport const SyntaxHighlight = memo(\n ({ code, children, ...props }: SyntaxHighlightProps) => {\n const { syntaxHighlighting } = useZudoku().options;\n\n invariant(syntaxHighlighting?.highlighter, \"Highlighter not found\");\n\n const highlightedCode = highlight(\n syntaxHighlighting.highlighter,\n code ?? children,\n props.language,\n syntaxHighlighting.themes,\n );\n\n return <CodeBlock {...props}>{highlightedCode}</CodeBlock>;\n },\n);\n\nSyntaxHighlight.displayName = \"SyntaxHighlight\";\n","// eslint-disable-next-line @typescript-eslint/no-explicit-any\nimport { SyntaxHighlight } from \"zudoku/ui/SyntaxHighlight.js\";\nimport { DeveloperHint } from \"../components/DeveloperHint.js\";\nimport { Heading } from \"../components/Heading.js\";\nimport { ProseClasses } from \"../components/Markdown.js\";\nimport { cn } from \"../util/cn.js\";\nimport { ZudokuError } from \"../util/invariant.js\";\n\nexport function ErrorAlert({ error }: { error: unknown }) {\n const message =\n error instanceof Error ? error.message : \"Something went wrong\";\n\n const hint = error instanceof ZudokuError ? error.developerHint : undefined;\n const title =\n error instanceof ZudokuError ? error.title : \"Something went wrong\";\n const stack = error instanceof Error ? error.stack : undefined;\n const cause = error instanceof Error ? error.cause : undefined;\n\n const stringError = cause instanceof Error ? String(cause.stack) : stack;\n\n return (\n <div\n className={cn(\n ProseClasses,\n \"grid grid-cols-1 !max-w-none pt-(--padding-content-top)\",\n )}\n >\n <Heading level={1}>{title}</Heading>\n Error: {message}\n {hint && <DeveloperHint className=\"mb-4\">{hint}</DeveloperHint>}\n {stringError && (\n <div>\n <SyntaxHighlight\n className=\"max-h-[400px] border mt-2\"\n language=\"js\"\n code={stringError}\n />\n </div>\n )}\n </div>\n );\n}\n","import { isRouteErrorResponse, useRouteError } from \"react-router\";\nimport { NotFoundPage } from \"../components/NotFoundPage.js\";\nimport { ErrorAlert } from \"./ErrorAlert.js\";\n\nexport function RouterError() {\n const error = useRouteError();\n\n if (isRouteErrorResponse(error) && error.status === 404) {\n return <NotFoundPage />;\n }\n\n return <ErrorAlert error={error} />;\n}\n","import {\n createContext,\n Fragment,\n use,\n useMemo,\n useRef,\n type ComponentType,\n type PropsWithChildren,\n type ReactNode,\n} from \"react\";\nimport { createStore, useStore } from \"zustand\";\nimport {\n useExposedProps,\n type ExposedComponentProps,\n} from \"../../util/useExposedProps.js\";\n\nexport type SlotType = ReactNode | ComponentType<ExposedComponentProps>;\n\ntype SlotItem = {\n id: string;\n content: SlotType;\n type: \"prepend\" | \"replace\" | \"append\";\n sequence: number;\n};\n\ntype SlotStoreState = {\n items: Map<string, SlotItem[]>;\n // to guarantee the order of the items when appending/prepending\n sequences: Map<string, number>;\n getItems: (name: string) => SlotItem[];\n setSlot: (\n id: string,\n name: string,\n content: SlotType,\n type: \"prepend\" | \"replace\" | \"append\",\n ) => void;\n clearSlot: (id: string, name: string) => void;\n};\n\nexport type SlotStore = ReturnType<typeof createSlotStore>;\n\nconst createSlotStore = ({\n slots = {},\n}: {\n slots?: Record<string, SlotType>;\n} = {}) => {\n const initialItems = new Map(\n Object.entries(slots).map(([id, content]) => [\n id,\n [{ id, content, type: \"replace\", sequence: 0 } satisfies SlotItem],\n ]),\n );\n const EMPTY_ITEMS: SlotItem[] = [];\n\n return createStore<SlotStoreState>()((set, get) => ({\n items: initialItems,\n sequences: new Map(),\n getItems: (name) => get().items.get(name) ?? EMPTY_ITEMS,\n setSlot: (id, name, content, type) =>\n set((state) => {\n if (content == null) return state;\n\n const items = new Map(state.items);\n const sequences = new Map(state.sequences);\n const existing = items.get(name) ?? [];\n const filtered = existing.filter((item) => item.id !== id);\n\n const currentSequence = sequences.get(name) ?? 0;\n const newSequence = currentSequence + 1;\n sequences.set(name, newSequence);\n\n const newItem = {\n id,\n content,\n type,\n // Use negative sequence values for \"prepend\" to ensure they are sorted before positive values for \"append\".\n sequence: type === \"prepend\" ? -newSequence : newSequence,\n } satisfies SlotItem;\n\n if (type === \"replace\") {\n const nonReplaceItems = filtered.filter(\n (item) => item.type !== \"replace\",\n );\n items.set(name, [...nonReplaceItems, newItem]);\n } else {\n items.set(name, [...filtered, newItem]);\n }\n\n return { items, sequences };\n }),\n clearSlot: (id, name) =>\n set((state) => {\n const items = new Map(state.items);\n const sequences = new Map(state.sequences);\n const existing = items.get(name) ?? [];\n const filtered = existing.filter((item) => item.id !== id);\n\n if (filtered.length === 0) {\n items.delete(name);\n sequences.delete(name);\n } else {\n items.set(name, filtered);\n }\n return { items, sequences };\n }),\n }));\n};\n\nconst SlotContext = createContext(createSlotStore());\n\nexport const SlotProvider = ({\n children,\n slots,\n}: PropsWithChildren<{\n slots?: Record<string, SlotType>;\n}>) => {\n const store = useRef<SlotStore>(createSlotStore({ slots })).current;\n return <SlotContext value={store}>{children}</SlotContext>;\n};\n\nexport function useSlotContext<T>(selector: (state: SlotStoreState) => T): T {\n const store = use(SlotContext);\n return useStore(store, selector);\n}\n\nconst ORDER = [\"prepend\", \"replace\", \"append\"] as const;\n\nexport const useRenderSlot = (name: string) => {\n const exposedProps = useExposedProps();\n const items = useSlotContext((s) => s.getItems(name));\n\n return useMemo(() => {\n if (items.length === 0) return [];\n\n return items\n .toSorted((a, b) => {\n const typeOrder = ORDER.indexOf(a.type) - ORDER.indexOf(b.type);\n if (typeOrder !== 0) return typeOrder;\n return a.sequence - b.sequence;\n })\n .map((item) =>\n typeof item.content === \"function\" ? (\n <item.content key={item.id} {...exposedProps} />\n ) : (\n <Fragment key={item.id}>{item.content}</Fragment>\n ),\n );\n }, [items, exposedProps]);\n};\n","import { useId, useLayoutEffect, type ReactNode } from \"react\";\nimport {\n useRenderSlot,\n useSlotContext,\n type SlotType,\n} from \"./context/SlotProvider.js\";\n\n// This is to augment the type of the Slot component with custom slot names\n// This is useful for plugins to add custom slots to the Zudoku context\n// and for the user to use them in their own components\nexport type CustomSlotNames = never;\n\ntype PredefinedSlotNames =\n | \"api-keys-list-page\"\n | \"api-keys-list-page-before-keys\"\n | \"footer-after\"\n | \"footer-before\"\n | \"head-navigation-end\"\n | \"head-navigation-start\"\n | \"layout-after-head\"\n | \"layout-before-head\"\n | \"top-navigation-after\"\n | \"top-navigation-before\"\n | \"top-navigation-side\"\n | \"content-before\"\n | \"content-after\"\n | \"navigation-after\"\n | \"navigation-before\";\n\nexport type SlotName = PredefinedSlotNames | CustomSlotNames;\n\nexport const Slot = {\n Source: ({\n name,\n children,\n type = \"replace\",\n }: {\n name: SlotName;\n type?: \"prepend\" | \"replace\" | \"append\";\n children: SlotType;\n }) => {\n const id = useId();\n const setSlot = useSlotContext((s) => s.setSlot);\n const clearSlot = useSlotContext((s) => s.clearSlot);\n\n if (import.meta.env.SSR) {\n setSlot(id, name, children, type);\n }\n\n useLayoutEffect(() => {\n setSlot(id, name, children, type);\n return () => clearSlot(id, name);\n }, [id, name, children, type, setSlot, clearSlot]);\n\n return null;\n },\n\n Target: ({ name, fallback }: { name: string; fallback?: ReactNode }) => {\n const slot = useRenderSlot(name);\n\n if (slot.length === 0) return fallback;\n return slot;\n },\n};\n"],"names":["DeveloperHint","children","className","jsx","Callout","jsxs","Markdown","NotFoundPage","params","useParams","ProseClasses","CategoryHeading","Heading","UnlinkIcon","Link","SyntaxHighlight","memo","code","props","syntaxHighlighting","useZudoku","invariant","highlightedCode","highlight","CodeBlock","ErrorAlert","error","message","hint","ZudokuError","title","stack","cause","stringError","cn","RouterError","useRouteError","isRouteErrorResponse","createSlotStore","slots","initialItems","id","content","EMPTY_ITEMS","createStore","set","get","name","type","state","items","sequences","filtered","item","newSequence","newItem","nonReplaceItems","SlotContext","createContext","SlotProvider","store","useRef","useSlotContext","selector","use","useStore","ORDER","useRenderSlot","exposedProps","useExposedProps","useMemo","a","b","typeOrder","Fragment","Slot","fallback","slot"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Slot-DANV2b7_.js","sources":["../src/lib/components/DeveloperHint.tsx","../src/lib/components/NotFoundPage.tsx","../src/lib/ui/SyntaxHighlight.tsx","../src/lib/errors/ErrorAlert.tsx","../src/lib/errors/RouterError.tsx","../src/lib/components/context/SlotProvider.tsx","../src/lib/components/Slot.tsx"],"sourcesContent":["import type { ReactNode } from \"react\";\nimport { Callout } from \"../ui/Callout.js\";\nimport { Markdown } from \"./Markdown.js\";\n\nexport const DeveloperHint = ({\n children,\n className,\n}: {\n children: ReactNode;\n className?: string;\n}) => {\n if (process.env.NODE_ENV !== \"development\") return;\n\n return (\n <Callout type=\"caution\" title=\"Developer hint\" className={className}>\n <div className=\"flex flex-col gap-2\">\n {typeof children === \"string\" ? (\n <Markdown content={children} />\n ) : (\n <div>{children}</div>\n )}\n <small className=\"italic\">\n Note: This hint is only shown in development mode.\n </small>\n </div>\n </Callout>\n );\n};\n","import { UnlinkIcon } from \"lucide-react\";\nimport { Link, useParams } from \"react-router\";\nimport { CategoryHeading } from \"./CategoryHeading.js\";\nimport { DeveloperHint } from \"./DeveloperHint.js\";\nimport { Heading } from \"./Heading.js\";\nimport { ProseClasses } from \"./Markdown.js\";\n\nexport const NotFoundPage = () => {\n const params = useParams();\n\n return (\n <div className={ProseClasses + \" h-full pt-(--padding-content-top)\"}>\n <CategoryHeading>404</CategoryHeading>\n <Heading level={1} className=\"flex gap-3.5 items-center\">\n Page not found\n <UnlinkIcon size={24} />\n </Heading>\n <DeveloperHint>\n Start by adding a file at{\" \"}\n <code>\n {\"{PROJECT_ROOT}\"}/{params[\"*\"]}.mdx\n </code>{\" \"}\n and add some content to make this error go away.\n </DeveloperHint>\n <p>\n It seems that the page you are looking for does not exist or may have\n been moved. Please check the URL for any typos or use the navigation\n menu to find the correct page.\n </p>\n <Link to=\"/\">Go back home</Link>\n </div>\n );\n};\n","import { memo } from \"react\";\nimport { useZudoku } from \"../components/context/ZudokuContext.js\";\nimport { highlight } from \"../shiki.js\";\nimport invariant from \"../util/invariant.js\";\nimport { CodeBlock, type CodeBlockProps } from \"./CodeBlock.js\";\n\ntype SyntaxHighlightProps = CodeBlockProps &\n ({ code: string; children?: never } | { code?: never; children: string });\n\nexport const SyntaxHighlight = memo(\n ({ code, children, ...props }: SyntaxHighlightProps) => {\n const { syntaxHighlighting } = useZudoku().options;\n\n invariant(syntaxHighlighting?.highlighter, \"Highlighter not found\");\n\n const highlightedCode = highlight(\n syntaxHighlighting.highlighter,\n code ?? children,\n props.language,\n syntaxHighlighting.themes,\n );\n\n return <CodeBlock {...props}>{highlightedCode}</CodeBlock>;\n },\n);\n\nSyntaxHighlight.displayName = \"SyntaxHighlight\";\n","// eslint-disable-next-line @typescript-eslint/no-explicit-any\nimport { SyntaxHighlight } from \"zudoku/ui/SyntaxHighlight.js\";\nimport { DeveloperHint } from \"../components/DeveloperHint.js\";\nimport { Heading } from \"../components/Heading.js\";\nimport { ProseClasses } from \"../components/Markdown.js\";\nimport { cn } from \"../util/cn.js\";\nimport { ZudokuError } from \"../util/invariant.js\";\n\nexport function ErrorAlert({ error }: { error: unknown }) {\n const message =\n error instanceof Error ? error.message : \"Something went wrong\";\n\n const hint = error instanceof ZudokuError ? error.developerHint : undefined;\n const title =\n error instanceof ZudokuError ? error.title : \"Something went wrong\";\n const stack = error instanceof Error ? error.stack : undefined;\n const cause = error instanceof Error ? error.cause : undefined;\n\n const stringError = cause instanceof Error ? String(cause.stack) : stack;\n\n return (\n <div\n className={cn(\n ProseClasses,\n \"grid grid-cols-1 !max-w-none pt-(--padding-content-top)\",\n )}\n >\n <Heading level={1}>{title}</Heading>\n Error: {message}\n {hint && <DeveloperHint className=\"mb-4\">{hint}</DeveloperHint>}\n {stringError && (\n <div>\n <SyntaxHighlight\n className=\"max-h-[400px] border mt-2\"\n language=\"js\"\n code={stringError}\n />\n </div>\n )}\n </div>\n );\n}\n","import { isRouteErrorResponse, useRouteError } from \"react-router\";\nimport { NotFoundPage } from \"../components/NotFoundPage.js\";\nimport { ErrorAlert } from \"./ErrorAlert.js\";\n\nexport function RouterError() {\n const error = useRouteError();\n\n if (isRouteErrorResponse(error) && error.status === 404) {\n return <NotFoundPage />;\n }\n\n return <ErrorAlert error={error} />;\n}\n","import {\n createContext,\n Fragment,\n use,\n useMemo,\n useRef,\n type ComponentType,\n type PropsWithChildren,\n type ReactNode,\n} from \"react\";\nimport { createStore, useStore } from \"zustand\";\nimport {\n useExposedProps,\n type ExposedComponentProps,\n} from \"../../util/useExposedProps.js\";\n\nexport type SlotType = ReactNode | ComponentType<ExposedComponentProps>;\n\ntype SlotItem = {\n id: string;\n content: SlotType;\n type: \"prepend\" | \"replace\" | \"append\";\n sequence: number;\n};\n\ntype SlotStoreState = {\n items: Map<string, SlotItem[]>;\n // to guarantee the order of the items when appending/prepending\n sequences: Map<string, number>;\n getItems: (name: string) => SlotItem[];\n setSlot: (\n id: string,\n name: string,\n content: SlotType,\n type: \"prepend\" | \"replace\" | \"append\",\n ) => void;\n clearSlot: (id: string, name: string) => void;\n};\n\nexport type SlotStore = ReturnType<typeof createSlotStore>;\n\nconst createSlotStore = ({\n slots = {},\n}: {\n slots?: Record<string, SlotType>;\n} = {}) => {\n const initialItems = new Map(\n Object.entries(slots).map(([id, content]) => [\n id,\n [{ id, content, type: \"replace\", sequence: 0 } satisfies SlotItem],\n ]),\n );\n const EMPTY_ITEMS: SlotItem[] = [];\n\n return createStore<SlotStoreState>()((set, get) => ({\n items: initialItems,\n sequences: new Map(),\n getItems: (name) => get().items.get(name) ?? EMPTY_ITEMS,\n setSlot: (id, name, content, type) =>\n set((state) => {\n if (content == null) return state;\n\n const items = new Map(state.items);\n const sequences = new Map(state.sequences);\n const existing = items.get(name) ?? [];\n const filtered = existing.filter((item) => item.id !== id);\n\n const currentSequence = sequences.get(name) ?? 0;\n const newSequence = currentSequence + 1;\n sequences.set(name, newSequence);\n\n const newItem = {\n id,\n content,\n type,\n // Use negative sequence values for \"prepend\" to ensure they are sorted before positive values for \"append\".\n sequence: type === \"prepend\" ? -newSequence : newSequence,\n } satisfies SlotItem;\n\n if (type === \"replace\") {\n const nonReplaceItems = filtered.filter(\n (item) => item.type !== \"replace\",\n );\n items.set(name, [...nonReplaceItems, newItem]);\n } else {\n items.set(name, [...filtered, newItem]);\n }\n\n return { items, sequences };\n }),\n clearSlot: (id, name) =>\n set((state) => {\n const items = new Map(state.items);\n const sequences = new Map(state.sequences);\n const existing = items.get(name) ?? [];\n const filtered = existing.filter((item) => item.id !== id);\n\n if (filtered.length === 0) {\n items.delete(name);\n sequences.delete(name);\n } else {\n items.set(name, filtered);\n }\n return { items, sequences };\n }),\n }));\n};\n\nconst SlotContext = createContext(createSlotStore());\n\nexport const SlotProvider = ({\n children,\n slots,\n}: PropsWithChildren<{\n slots?: Record<string, SlotType>;\n}>) => {\n const store = useRef<SlotStore>(createSlotStore({ slots })).current;\n return <SlotContext value={store}>{children}</SlotContext>;\n};\n\nexport function useSlotContext<T>(selector: (state: SlotStoreState) => T): T {\n const store = use(SlotContext);\n return useStore(store, selector);\n}\n\nconst ORDER = [\"prepend\", \"replace\", \"append\"] as const;\n\nexport const useRenderSlot = (name: string) => {\n const exposedProps = useExposedProps();\n const items = useSlotContext((s) => s.getItems(name));\n\n return useMemo(() => {\n if (items.length === 0) return [];\n\n return items\n .toSorted((a, b) => {\n const typeOrder = ORDER.indexOf(a.type) - ORDER.indexOf(b.type);\n if (typeOrder !== 0) return typeOrder;\n return a.sequence - b.sequence;\n })\n .map((item) =>\n typeof item.content === \"function\" ? (\n <item.content key={item.id} {...exposedProps} />\n ) : (\n <Fragment key={item.id}>{item.content}</Fragment>\n ),\n );\n }, [items, exposedProps]);\n};\n","import { useId, useLayoutEffect, type ReactNode } from \"react\";\nimport {\n useRenderSlot,\n useSlotContext,\n type SlotType,\n} from \"./context/SlotProvider.js\";\n\n// This is to augment the type of the Slot component with custom slot names\n// This is useful for plugins to add custom slots to the Zudoku context\n// and for the user to use them in their own components\nexport type CustomSlotNames = never;\n\ntype PredefinedSlotNames =\n | \"api-keys-list-page\"\n | \"api-keys-list-page-before-keys\"\n | \"footer-after\"\n | \"footer-before\"\n | \"head-navigation-end\"\n | \"head-navigation-start\"\n | \"layout-after-head\"\n | \"layout-before-head\"\n | \"top-navigation-after\"\n | \"top-navigation-before\"\n | \"top-navigation-side\"\n | \"content-before\"\n | \"content-after\"\n | \"navigation-after\"\n | \"navigation-before\";\n\nexport type SlotName = PredefinedSlotNames | CustomSlotNames;\n\nexport const Slot = {\n Source: ({\n name,\n children,\n type = \"replace\",\n }: {\n name: SlotName;\n type?: \"prepend\" | \"replace\" | \"append\";\n children: SlotType;\n }) => {\n const id = useId();\n const setSlot = useSlotContext((s) => s.setSlot);\n const clearSlot = useSlotContext((s) => s.clearSlot);\n\n if (import.meta.env.SSR) {\n setSlot(id, name, children, type);\n }\n\n useLayoutEffect(() => {\n setSlot(id, name, children, type);\n return () => clearSlot(id, name);\n }, [id, name, children, type, setSlot, clearSlot]);\n\n return null;\n },\n\n Target: ({ name, fallback }: { name: string; fallback?: ReactNode }) => {\n const slot = useRenderSlot(name);\n\n if (slot.length === 0) return fallback;\n return slot;\n },\n};\n"],"names":["DeveloperHint","children","className","jsx","Callout","jsxs","Markdown","NotFoundPage","params","useParams","ProseClasses","CategoryHeading","Heading","UnlinkIcon","Link","SyntaxHighlight","memo","code","props","syntaxHighlighting","useZudoku","invariant","highlightedCode","highlight","CodeBlock","ErrorAlert","error","message","hint","ZudokuError","title","stack","cause","stringError","cn","RouterError","useRouteError","isRouteErrorResponse","createSlotStore","slots","initialItems","id","content","EMPTY_ITEMS","createStore","set","get","name","type","state","items","sequences","filtered","item","newSequence","newItem","nonReplaceItems","SlotContext","createContext","SlotProvider","store","useRef","useSlotContext","selector","use","useStore","ORDER","useRenderSlot","exposedProps","useExposedProps","useMemo","a","b","typeOrder","Fragment","Slot","fallback","slot"],"mappings":"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"}
|