zudoku 0.47.0 → 0.47.2
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/app/ZuploBuildConfig.d.ts +21 -21
- package/dist/app/ZuploBuildConfig.js +7 -7
- package/dist/app/ZuploBuildConfig.js.map +1 -1
- package/dist/app/entry.client.d.ts +0 -2
- package/dist/app/entry.client.js +0 -2
- package/dist/app/entry.client.js.map +1 -1
- package/dist/app/entry.server.d.ts +0 -2
- package/dist/app/entry.server.js +0 -2
- package/dist/app/entry.server.js.map +1 -1
- package/dist/app/env.d.ts +7 -7
- package/dist/app/env.js +8 -0
- package/dist/app/env.js.map +1 -1
- package/dist/app/main.d.ts +1 -0
- package/dist/app/main.js +3 -2
- package/dist/app/main.js.map +1 -1
- package/dist/config/validators/validate.d.ts +319 -76
- package/dist/config/validators/validate.js +33 -11
- package/dist/config/validators/validate.js.map +1 -1
- package/dist/lib/auth/issuer.js +4 -1
- package/dist/lib/auth/issuer.js.map +1 -1
- package/dist/lib/auth/issuer.test.js +14 -1
- package/dist/lib/auth/issuer.test.js.map +1 -1
- package/dist/lib/authentication/components/CallbackHandler.js +1 -1
- package/dist/lib/authentication/components/CallbackHandler.js.map +1 -1
- package/dist/lib/components/Framed.d.ts +7 -0
- package/dist/lib/components/Framed.js +26 -0
- package/dist/lib/components/Framed.js.map +1 -0
- package/dist/lib/components/MobileTopNavigation.js +2 -1
- package/dist/lib/components/MobileTopNavigation.js.map +1 -1
- package/dist/lib/plugins/api-keys/SettingsApiKeys.js +4 -4
- package/dist/lib/plugins/api-keys/SettingsApiKeys.js.map +1 -1
- package/dist/lib/plugins/api-keys/index.js +1 -3
- package/dist/lib/plugins/api-keys/index.js.map +1 -1
- package/dist/lib/plugins/openapi/schema/SchemaView.js +1 -1
- package/dist/lib/plugins/openapi/schema/SchemaView.js.map +1 -1
- package/dist/lib/ui/CodeBlock.js +1 -1
- package/dist/lib/ui/CodeBlock.js.map +1 -1
- package/dist/lib/util/MdxComponents.d.ts +6 -0
- package/dist/lib/util/MdxComponents.js +4 -2
- package/dist/lib/util/MdxComponents.js.map +1 -1
- package/dist/vite/css/plugin.js +11 -0
- package/dist/vite/css/plugin.js.map +1 -1
- package/dist/vite/plugin-mdx.js +4 -2
- package/dist/vite/plugin-mdx.js.map +1 -1
- package/dist/vite/plugin-theme.d.ts +8 -0
- package/dist/vite/plugin-theme.js +223 -0
- package/dist/vite/plugin-theme.js.map +1 -0
- package/dist/vite/plugin-theme.test.d.ts +1 -0
- package/dist/vite/plugin-theme.test.js +270 -0
- package/dist/vite/plugin-theme.test.js.map +1 -0
- package/dist/vite/plugin.js +2 -4
- package/dist/vite/plugin.js.map +1 -1
- package/dist/vite/shadcn-registry.d.ts +45 -0
- package/dist/vite/shadcn-registry.js +29 -0
- package/dist/vite/shadcn-registry.js.map +1 -0
- package/lib/Drawer-BzkOKwgC.js.map +1 -1
- package/lib/{Markdown-BUE2ViaD.js → Markdown-C5j8kKSX.js} +444 -404
- package/lib/Markdown-C5j8kKSX.js.map +1 -0
- package/lib/{MdxPage-By4UkRkI.js → MdxPage-CKTMf1cR.js} +4 -4
- package/lib/{MdxPage-By4UkRkI.js.map → MdxPage-CKTMf1cR.js.map} +1 -1
- package/lib/{OasProvider-C6_Kx5O7.js → OasProvider-_GzmsbMg.js} +2 -2
- package/lib/{OasProvider-C6_Kx5O7.js.map → OasProvider-_GzmsbMg.js.map} +1 -1
- package/lib/{OperationList-BISd29LY.js → OperationList-BJAKaG5p.js} +6 -6
- package/lib/{OperationList-BISd29LY.js.map → OperationList-BJAKaG5p.js.map} +1 -1
- package/lib/{RouteGuard-CgmsSw7T.js → RouteGuard-B7GVW4oL.js} +2 -2
- package/lib/{RouteGuard-CgmsSw7T.js.map → RouteGuard-B7GVW4oL.js.map} +1 -1
- package/lib/{SchemaList-BqnRo5ov.js → SchemaList-Dgc0A8x5.js} +6 -6
- package/lib/{SchemaList-BqnRo5ov.js.map → SchemaList-Dgc0A8x5.js.map} +1 -1
- package/lib/{SchemaView-CtYJpxQI.js → SchemaView-DVx-jFN4.js} +13 -13
- package/lib/{SchemaView-CtYJpxQI.js.map → SchemaView-DVx-jFN4.js.map} +1 -1
- package/lib/{SignUp-CrjeBbqN.js → SignUp-CRIKdWt9.js} +2 -2
- package/lib/{SignUp-CrjeBbqN.js.map → SignUp-CRIKdWt9.js.map} +1 -1
- package/lib/{Slot-DANV2b7_.js → Slot-ITby_hMb.js} +4 -4
- package/lib/{Slot-DANV2b7_.js.map → Slot-ITby_hMb.js.map} +1 -1
- package/lib/{SyntaxHighlight-DtvR7RLF.js → SyntaxHighlight-CqKHkyEy.js} +2 -2
- package/lib/{SyntaxHighlight-DtvR7RLF.js.map → SyntaxHighlight-CqKHkyEy.js.map} +1 -1
- package/lib/{Toc-ClJBmdtI.js → Toc-Csq3UNtW.js} +2 -2
- package/lib/{Toc-ClJBmdtI.js.map → Toc-Csq3UNtW.js.map} +1 -1
- package/lib/{circular-pOdgLzpG.js → circular-BP4OrHFK.js} +2 -2
- package/lib/{circular-pOdgLzpG.js.map → circular-BP4OrHFK.js.map} +1 -1
- package/lib/clerk-yAKDC3Qz.js.map +1 -1
- package/lib/{createServer-qAtUf99r.js → createServer-zu4cDiPe.js} +5 -5
- package/lib/{createServer-qAtUf99r.js.map → createServer-zu4cDiPe.js.map} +1 -1
- package/lib/{errors-Bpodza84.js → errors-CPPSp5F4.js} +10 -10
- package/lib/{errors-Bpodza84.js.map → errors-CPPSp5F4.js.map} +1 -1
- package/lib/{hook-wIlTGE-2.js → hook-7wZANGJP.js} +2 -5
- package/lib/{hook-wIlTGE-2.js.map → hook-7wZANGJP.js.map} +1 -1
- package/lib/index-CrcNWbel.js.map +1 -1
- package/lib/{index-zddirpDj.js → index-DmNq2fbN.js} +226 -221
- package/lib/index-DmNq2fbN.js.map +1 -0
- package/lib/index-QzXzw_ra.js.map +1 -1
- package/lib/{index-RFzRn4fM.js → index-jWXxqkni.js} +9 -9
- package/lib/{index-RFzRn4fM.js.map → index-jWXxqkni.js.map} +1 -1
- package/lib/{mutation-C-kdA_1r.js → mutation-C1XCQTQL.js} +2 -2
- package/lib/{mutation-C-kdA_1r.js.map → mutation-C1XCQTQL.js.map} +1 -1
- package/lib/ui/CodeBlock.js +7 -7
- package/lib/ui/CodeBlock.js.map +1 -1
- package/lib/ui/SyntaxHighlight.js +2 -2
- package/lib/{useMutation-3Ph3x6En.js → useMutation-BKvPttRn.js} +3 -3
- package/lib/{useMutation-3Ph3x6En.js.map → useMutation-BKvPttRn.js.map} +1 -1
- package/lib/zudoku.auth-auth0.js +1 -1
- package/lib/zudoku.auth-azureb2c.js +2 -2
- package/lib/zudoku.auth-clerk.js +2 -2
- package/lib/zudoku.auth-openid.js +2 -2
- package/lib/zudoku.components.js +28 -27
- 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 +68 -62
- 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 +8 -8
- package/src/app/ZuploBuildConfig.ts +7 -7
- package/src/app/defaultTheme.css +68 -49
- package/src/app/entry.client.tsx +0 -2
- package/src/app/entry.server.tsx +0 -2
- package/src/app/env.ts +8 -0
- package/src/app/main.css +1 -52
- package/src/app/main.tsx +3 -2
- package/src/lib/auth/issuer.test.ts +17 -1
- package/src/lib/auth/issuer.ts +4 -1
- package/src/lib/authentication/components/CallbackHandler.tsx +1 -1
- package/src/lib/components/Framed.tsx +51 -0
- package/src/lib/components/MobileTopNavigation.tsx +4 -0
- package/src/lib/plugins/api-keys/SettingsApiKeys.tsx +11 -8
- package/src/lib/plugins/api-keys/index.tsx +1 -3
- package/src/lib/plugins/openapi/schema/SchemaView.tsx +1 -1
- package/src/lib/ui/CodeBlock.tsx +1 -1
- package/src/lib/util/MdxComponents.tsx +13 -2
- package/dist/vite/plugin-configure-tailwind.d.ts +0 -2
- package/dist/vite/plugin-configure-tailwind.js +0 -38
- package/dist/vite/plugin-configure-tailwind.js.map +0 -1
- package/dist/vite/plugin-theme-css.d.ts +0 -5
- package/dist/vite/plugin-theme-css.js +0 -77
- package/dist/vite/plugin-theme-css.js.map +0 -1
- package/lib/Markdown-BUE2ViaD.js.map +0 -1
- package/lib/index-zddirpDj.js.map +0 -1
package/src/app/entry.server.tsx
CHANGED
|
@@ -10,12 +10,10 @@ import {
|
|
|
10
10
|
isRouteErrorResponse,
|
|
11
11
|
type RouteObject,
|
|
12
12
|
} from "react-router";
|
|
13
|
-
import "virtual:zudoku-theme.css";
|
|
14
13
|
import "vite/modulepreload-polyfill";
|
|
15
14
|
import { BootstrapStatic, ServerError } from "zudoku/components";
|
|
16
15
|
import { NO_DEHYDRATE } from "../lib/components/cache.js";
|
|
17
16
|
import type { PrerenderResponse } from "../vite/prerender/PrerenderResponse.js";
|
|
18
|
-
import "./main.css";
|
|
19
17
|
import { getRoutesByConfig } from "./main.js";
|
|
20
18
|
export { getRoutesByConfig };
|
|
21
19
|
|
package/src/app/env.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import z from "zod";
|
|
1
2
|
import { BuildConfigSchema } from "./ZuploBuildConfig.js";
|
|
2
3
|
|
|
3
4
|
const getZuploBuildConfig = () => {
|
|
@@ -9,6 +10,13 @@ const getZuploBuildConfig = () => {
|
|
|
9
10
|
);
|
|
10
11
|
return zuploBuildConfig;
|
|
11
12
|
} catch (error) {
|
|
13
|
+
if (error instanceof z.ZodError) {
|
|
14
|
+
// eslint-disable-next-line no-console
|
|
15
|
+
console.error("ZUPLO_BUILD_CONFIG is invalid.");
|
|
16
|
+
// eslint-disable-next-line no-console
|
|
17
|
+
console.log(error.errors);
|
|
18
|
+
return undefined;
|
|
19
|
+
}
|
|
12
20
|
// eslint-disable-next-line no-console
|
|
13
21
|
console.error(
|
|
14
22
|
"ZUPLO_BUILD_CONFIG is a reserved environment variable and cannot be used for custom configuration. Please remove it from your environment variables.",
|
package/src/app/main.css
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
/* @vite-plugin-inject
|
|
2
|
-
@import "./defaultTheme.css" layer(theme);
|
|
1
|
+
/* @vite-plugin-inject defaultTheme */
|
|
3
2
|
@import "tailwindcss" source("..");
|
|
4
3
|
|
|
5
4
|
/* @vite-plugin-inject main */
|
|
@@ -7,56 +6,6 @@
|
|
|
7
6
|
@plugin "@tailwindcss/typography";
|
|
8
7
|
@custom-variant dark (&:is(.dark *));
|
|
9
8
|
|
|
10
|
-
@theme inline {
|
|
11
|
-
--color-background: var(--background);
|
|
12
|
-
--color-foreground: var(--foreground);
|
|
13
|
-
--color-card: var(--card);
|
|
14
|
-
--color-card-foreground: var(--card-foreground);
|
|
15
|
-
--color-popover: var(--popover);
|
|
16
|
-
--color-popover-foreground: var(--popover-foreground);
|
|
17
|
-
--color-primary: var(--primary);
|
|
18
|
-
--color-primary-foreground: var(--primary-foreground);
|
|
19
|
-
--color-secondary: var(--secondary);
|
|
20
|
-
--color-secondary-foreground: var(--secondary-foreground);
|
|
21
|
-
--color-muted: var(--muted);
|
|
22
|
-
--color-muted-foreground: var(--muted-foreground);
|
|
23
|
-
--color-accent: var(--accent);
|
|
24
|
-
--color-accent-foreground: var(--accent-foreground);
|
|
25
|
-
--color-destructive: var(--destructive);
|
|
26
|
-
--color-destructive-foreground: var(--destructive-foreground);
|
|
27
|
-
--color-border: var(--border);
|
|
28
|
-
--color-input: var(--input);
|
|
29
|
-
--color-ring: var(--ring);
|
|
30
|
-
--color-chart-1: var(--chart-1);
|
|
31
|
-
--color-chart-2: var(--chart-2);
|
|
32
|
-
--color-chart-3: var(--chart-3);
|
|
33
|
-
--color-chart-4: var(--chart-4);
|
|
34
|
-
--color-chart-5: var(--chart-5);
|
|
35
|
-
|
|
36
|
-
--radius-sm: calc(var(--radius) - 4px);
|
|
37
|
-
--radius-md: calc(var(--radius) - 2px);
|
|
38
|
-
--radius-lg: var(--radius);
|
|
39
|
-
--radius-xl: calc(var(--radius) + 4px);
|
|
40
|
-
|
|
41
|
-
--shadow-2xs: var(--shadow-2xs);
|
|
42
|
-
--shadow-xs: var(--shadow-xs);
|
|
43
|
-
--shadow-sm: var(--shadow-sm);
|
|
44
|
-
--shadow: var(--shadow);
|
|
45
|
-
--shadow-md: var(--shadow-md);
|
|
46
|
-
--shadow-lg: var(--shadow-lg);
|
|
47
|
-
--shadow-xl: var(--shadow-xl);
|
|
48
|
-
--shadow-2xl: var(--shadow-2xl);
|
|
49
|
-
|
|
50
|
-
--color-sidebar: var(--sidebar);
|
|
51
|
-
--color-sidebar-foreground: var(--sidebar-foreground);
|
|
52
|
-
--color-sidebar-primary: var(--sidebar-primary);
|
|
53
|
-
--color-sidebar-primary-foreground: var(--sidebar-primary-foreground);
|
|
54
|
-
--color-sidebar-accent: var(--sidebar-accent);
|
|
55
|
-
--color-sidebar-accent-foreground: var(--sidebar-accent-foreground);
|
|
56
|
-
--color-sidebar-border: var(--sidebar-border);
|
|
57
|
-
--color-sidebar-ring: var(--sidebar-ring);
|
|
58
|
-
}
|
|
59
|
-
|
|
60
9
|
@utility prose {
|
|
61
10
|
a {
|
|
62
11
|
@apply font-normal underline-offset-4 hover:text-primary;
|
package/src/app/main.tsx
CHANGED
|
@@ -25,6 +25,7 @@ import type { ZudokuContextOptions } from "../lib/core/ZudokuContext.js";
|
|
|
25
25
|
import { isNavigationPlugin } from "../lib/core/plugins.js";
|
|
26
26
|
import { highlighter } from "../lib/shiki.js";
|
|
27
27
|
import { ZuploEnv } from "./env.js";
|
|
28
|
+
import "./main.css";
|
|
28
29
|
|
|
29
30
|
await registerShiki(highlighter);
|
|
30
31
|
|
|
@@ -71,7 +72,7 @@ export const convertZudokuConfigToOptions = (
|
|
|
71
72
|
|
|
72
73
|
export const getRoutesByOptions = (
|
|
73
74
|
options: ZudokuContextOptions,
|
|
74
|
-
enableStatusPages =
|
|
75
|
+
enableStatusPages = true,
|
|
75
76
|
) => {
|
|
76
77
|
const allPlugins = [
|
|
77
78
|
...(options.plugins ?? []),
|
|
@@ -84,7 +85,7 @@ export const getRoutesByOptions = (
|
|
|
84
85
|
enableStatusPages
|
|
85
86
|
? [400, 403, 404, 405, 414, 416, 500, 501, 502, 503, 504].map(
|
|
86
87
|
(statusCode) => ({
|
|
87
|
-
path:
|
|
88
|
+
path: `/${statusCode}`,
|
|
88
89
|
element: <StatusPage statusCode={statusCode} />,
|
|
89
90
|
}),
|
|
90
91
|
)
|
|
@@ -14,7 +14,7 @@ describe("getIssuer", () => {
|
|
|
14
14
|
};
|
|
15
15
|
|
|
16
16
|
const result = await getIssuer(config);
|
|
17
|
-
expect(result).toBe("tolerant-hornet-46.clerk.accounts.dev");
|
|
17
|
+
expect(result).toBe("https://tolerant-hornet-46.clerk.accounts.dev");
|
|
18
18
|
});
|
|
19
19
|
|
|
20
20
|
it("should throw error for invalid clerk public key format", async () => {
|
|
@@ -69,6 +69,22 @@ describe("getIssuer", () => {
|
|
|
69
69
|
expect(result).toBe("https://example.com/auth");
|
|
70
70
|
});
|
|
71
71
|
|
|
72
|
+
it("should return azureb2c issuer for azureb2c authentication", async () => {
|
|
73
|
+
const config: ZudokuConfig = {
|
|
74
|
+
authentication: {
|
|
75
|
+
type: "azureb2c",
|
|
76
|
+
tenantName: "example",
|
|
77
|
+
policyName: "B2C_1_SignUpSignIn",
|
|
78
|
+
issuer: "https://example.b2clogin.com/example.onmicrosoft.com/v2.0/",
|
|
79
|
+
clientId: "test-client-id",
|
|
80
|
+
},
|
|
81
|
+
};
|
|
82
|
+
const result = await getIssuer(config);
|
|
83
|
+
expect(result).toBe(
|
|
84
|
+
"https://example.b2clogin.com/example.onmicrosoft.com/v2.0/",
|
|
85
|
+
);
|
|
86
|
+
});
|
|
87
|
+
|
|
72
88
|
it("should return supabase URL for supabase authentication", async () => {
|
|
73
89
|
const config: ZudokuConfig = {
|
|
74
90
|
authentication: {
|
package/src/lib/auth/issuer.ts
CHANGED
|
@@ -17,7 +17,7 @@ export const getIssuer = async (config: ZudokuConfig) => {
|
|
|
17
17
|
const frontendApi = frontendApiParts.at(0);
|
|
18
18
|
invariant(frontendApi, "Clerk public key is invalid");
|
|
19
19
|
|
|
20
|
-
return frontendApi
|
|
20
|
+
return `https://${frontendApi}`;
|
|
21
21
|
}
|
|
22
22
|
case "auth0": {
|
|
23
23
|
return `https://${config.authentication.domain}/`;
|
|
@@ -28,6 +28,9 @@ export const getIssuer = async (config: ZudokuConfig) => {
|
|
|
28
28
|
case "supabase": {
|
|
29
29
|
return config.authentication.supabaseUrl;
|
|
30
30
|
}
|
|
31
|
+
case "azureb2c": {
|
|
32
|
+
return config.authentication.issuer;
|
|
33
|
+
}
|
|
31
34
|
case undefined: {
|
|
32
35
|
return undefined;
|
|
33
36
|
}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { cva } from "class-variance-authority";
|
|
2
|
+
import type { PropsWithChildren } from "react";
|
|
3
|
+
import { cn } from "../util/cn.js";
|
|
4
|
+
|
|
5
|
+
const frameVariants = cva("", {
|
|
6
|
+
variants: {
|
|
7
|
+
size: {
|
|
8
|
+
sm: "max-w-sm",
|
|
9
|
+
md: "max-w-md",
|
|
10
|
+
lg: "max-w-lg",
|
|
11
|
+
xl: "max-w-xl",
|
|
12
|
+
"2xl": "max-w-2xl",
|
|
13
|
+
full: "max-w-full",
|
|
14
|
+
},
|
|
15
|
+
align: {
|
|
16
|
+
center: "mx-auto",
|
|
17
|
+
start: "me-auto",
|
|
18
|
+
end: "ms-auto",
|
|
19
|
+
},
|
|
20
|
+
},
|
|
21
|
+
defaultVariants: {
|
|
22
|
+
size: "xl",
|
|
23
|
+
align: "center",
|
|
24
|
+
},
|
|
25
|
+
});
|
|
26
|
+
|
|
27
|
+
export const Framed = ({
|
|
28
|
+
caption,
|
|
29
|
+
className,
|
|
30
|
+
size = "xl",
|
|
31
|
+
align = "center",
|
|
32
|
+
children,
|
|
33
|
+
}: PropsWithChildren<{
|
|
34
|
+
caption?: string;
|
|
35
|
+
className?: string;
|
|
36
|
+
size?: "sm" | "md" | "lg" | "xl" | "2xl" | "full";
|
|
37
|
+
align?: "center" | "start" | "end";
|
|
38
|
+
}>) => (
|
|
39
|
+
<figure className={cn(frameVariants({ size, align }), className)}>
|
|
40
|
+
<div className="relative overflow-hidden rounded-lg border border-border bg-muted/50 p-1 shadow-sm">
|
|
41
|
+
<div className="not-prose rounded-md [&_img]:rounded-md! relative overflow-hidden bg-background">
|
|
42
|
+
{children}
|
|
43
|
+
</div>
|
|
44
|
+
</div>
|
|
45
|
+
{caption && (
|
|
46
|
+
<figcaption className="mt-3 text-center text-sm text-muted-foreground">
|
|
47
|
+
{caption}
|
|
48
|
+
</figcaption>
|
|
49
|
+
)}
|
|
50
|
+
</figure>
|
|
51
|
+
);
|
|
@@ -12,6 +12,7 @@ import { useZudoku } from "./context/ZudokuContext.js";
|
|
|
12
12
|
import { PoweredByZudoku } from "./navigation/PoweredByZudoku.js";
|
|
13
13
|
import { isHiddenItem } from "./navigation/utils.js";
|
|
14
14
|
import { Search } from "./Search.js";
|
|
15
|
+
import { Slot } from "./Slot.js";
|
|
15
16
|
import { ThemeSwitch } from "./ThemeSwitch.js";
|
|
16
17
|
import { PageProgress, TopNavItem } from "./TopNavigation.js";
|
|
17
18
|
|
|
@@ -43,6 +44,9 @@ export const MobileTopNavigation = () => {
|
|
|
43
44
|
</VisuallyHidden>
|
|
44
45
|
<Search className="flex p-4" />
|
|
45
46
|
<ul className="flex flex-col items-center gap-4 p-4">
|
|
47
|
+
<li className="empty:hidden">
|
|
48
|
+
<Slot.Target name="top-navigation-side" />
|
|
49
|
+
</li>
|
|
46
50
|
<li>
|
|
47
51
|
<ThemeSwitch />
|
|
48
52
|
</li>
|
|
@@ -296,17 +296,20 @@ export const SettingsApiKeys = ({ service }: { service: ApiKeyService }) => {
|
|
|
296
296
|
<Dialog>
|
|
297
297
|
<DialogTrigger asChild>
|
|
298
298
|
<Button
|
|
299
|
-
size="icon"
|
|
300
299
|
title="Roll this key"
|
|
301
300
|
variant="ghost"
|
|
302
301
|
disabled={rollKeyMutation.isPending}
|
|
303
|
-
className=
|
|
304
|
-
rollKeyMutation.isPending
|
|
305
|
-
? "animate-spin"
|
|
306
|
-
: undefined
|
|
307
|
-
}
|
|
302
|
+
className="flex items-center gap-1"
|
|
308
303
|
>
|
|
309
|
-
<RotateCwIcon
|
|
304
|
+
<RotateCwIcon
|
|
305
|
+
size={16}
|
|
306
|
+
className={
|
|
307
|
+
rollKeyMutation.isPending
|
|
308
|
+
? "animate-spin"
|
|
309
|
+
: undefined
|
|
310
|
+
}
|
|
311
|
+
/>
|
|
312
|
+
Roll
|
|
310
313
|
</Button>
|
|
311
314
|
</DialogTrigger>
|
|
312
315
|
<DialogContent>
|
|
@@ -473,7 +476,7 @@ const RevealApiKey = ({
|
|
|
473
476
|
</div>
|
|
474
477
|
</div>
|
|
475
478
|
<div className="flex justify-end">
|
|
476
|
-
{
|
|
479
|
+
{expiresOn && onDeleteKey && (
|
|
477
480
|
<Dialog>
|
|
478
481
|
<DialogTrigger asChild>
|
|
479
482
|
<Button variant="ghost" size="icon">
|
|
@@ -102,9 +102,7 @@ const createDefaultHandler = (deploymentName: string): ApiKeyService => {
|
|
|
102
102
|
headers: {
|
|
103
103
|
"Content-Type": "application/json",
|
|
104
104
|
},
|
|
105
|
-
body: JSON.stringify({
|
|
106
|
-
expiresOn: new Date(),
|
|
107
|
-
}),
|
|
105
|
+
body: JSON.stringify({}),
|
|
108
106
|
},
|
|
109
107
|
),
|
|
110
108
|
),
|
package/src/lib/ui/CodeBlock.tsx
CHANGED
|
@@ -71,7 +71,7 @@ export const CodeBlock = ({
|
|
|
71
71
|
aria-label="Copy code"
|
|
72
72
|
title="Copy code"
|
|
73
73
|
className={cn(
|
|
74
|
-
"absolute top-2 end-2 p-2 hover:
|
|
74
|
+
"absolute top-2 end-2 p-2 transition hover:shadow-xs active:shadow-none active:inset-shadow-xs hover:outline outline-border rounded-md text-sm text-muted-foreground",
|
|
75
75
|
title && "top-10",
|
|
76
76
|
showCopy === "hover" && "opacity-0 group-hover:opacity-100",
|
|
77
77
|
showCopyText && "flex gap-2 items-center font-medium",
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { type MDXComponents } from "mdx/types.js";
|
|
2
2
|
import { CodeBlock } from "zudoku/ui/CodeBlock.js";
|
|
3
3
|
import { AnchorLink } from "../components/AnchorLink.js";
|
|
4
|
+
import { Framed } from "../components/Framed.js";
|
|
4
5
|
import { Heading } from "../components/Heading.js";
|
|
5
6
|
import { InlineCode } from "../components/InlineCode.js";
|
|
6
7
|
import { Button } from "../ui/Button.js";
|
|
@@ -14,10 +15,20 @@ export type MdxComponentsType = Readonly<MDXComponents> | null | undefined;
|
|
|
14
15
|
export const MdxComponents = {
|
|
15
16
|
img: ({ node, ...props }) => {
|
|
16
17
|
if (/\.(mp4|webm|mov|avi)$/.test(props.src ?? "")) {
|
|
17
|
-
return
|
|
18
|
+
return (
|
|
19
|
+
<video
|
|
20
|
+
src={props.src}
|
|
21
|
+
controls
|
|
22
|
+
playsInline
|
|
23
|
+
autoPlay
|
|
24
|
+
loop
|
|
25
|
+
className={cn("rounded-lg", props.className)}
|
|
26
|
+
/>
|
|
27
|
+
);
|
|
18
28
|
}
|
|
19
|
-
return <img {...props} className={cn("rounded-
|
|
29
|
+
return <img {...props} className={cn("rounded-lg", props.className)} />;
|
|
20
30
|
},
|
|
31
|
+
Framed,
|
|
21
32
|
h1: ({ children, id }) => (
|
|
22
33
|
<Heading level={1} id={id}>
|
|
23
34
|
{children}
|
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
import path from "node:path";
|
|
2
|
-
import { getCurrentConfig } from "../config/loader.js";
|
|
3
|
-
// Font imports need to be at the very top of the file
|
|
4
|
-
const FONT_REPLACE = "/* @vite-plugin-inject font */";
|
|
5
|
-
const MAIN_REPLACE = "/* @vite-plugin-inject main */";
|
|
6
|
-
export const viteTailwindPlugin = () => {
|
|
7
|
-
return {
|
|
8
|
-
name: "zudoku-configure-tailwind",
|
|
9
|
-
enforce: "pre",
|
|
10
|
-
transform(src, id) {
|
|
11
|
-
if (!id.endsWith("/src/app/main.css"))
|
|
12
|
-
return;
|
|
13
|
-
const config = getCurrentConfig();
|
|
14
|
-
const files = new Set([config.__meta.rootDir, ...config.__meta.dependencies].map((file) => path.relative(path.dirname(id), file)));
|
|
15
|
-
const code = [...files].map((file) => `@source "${file}";`);
|
|
16
|
-
const fontImports = [];
|
|
17
|
-
code.push("@theme {");
|
|
18
|
-
if (config.theme?.fonts?.sans) {
|
|
19
|
-
fontImports.push(`@import url('${config.theme.fonts.sans.url}');`);
|
|
20
|
-
code.push(` --font-sans: ${config.theme.fonts.sans.fontFamily}, sans-serif;`);
|
|
21
|
-
}
|
|
22
|
-
else {
|
|
23
|
-
fontImports.push("@import url('./font.geist.css');");
|
|
24
|
-
code.push(" --font-sans: Geist, sans-serif;");
|
|
25
|
-
code.push(' --font-display--font-feature-settings: "rlig" 1, "calt" 0;');
|
|
26
|
-
}
|
|
27
|
-
if (config.theme?.fonts?.mono) {
|
|
28
|
-
fontImports.push(`@import url('${config.theme.fonts.mono.url}');`);
|
|
29
|
-
code.push(` --font-mono: ${config.theme.fonts.mono.fontFamily}, monospace;`);
|
|
30
|
-
}
|
|
31
|
-
code.push("}");
|
|
32
|
-
return src
|
|
33
|
-
.replace(FONT_REPLACE, fontImports.join("\n"))
|
|
34
|
-
.replace(MAIN_REPLACE, code.join("\n"));
|
|
35
|
-
},
|
|
36
|
-
};
|
|
37
|
-
};
|
|
38
|
-
//# sourceMappingURL=plugin-configure-tailwind.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"plugin-configure-tailwind.js","sourceRoot":"","sources":["../../src/vite/plugin-configure-tailwind.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAEvD,sDAAsD;AACtD,MAAM,YAAY,GAAG,gCAAgC,CAAC;AACtD,MAAM,YAAY,GAAG,gCAAgC,CAAC;AAEtD,MAAM,CAAC,MAAM,kBAAkB,GAAG,GAAW,EAAE;IAC7C,OAAO;QACL,IAAI,EAAE,2BAA2B;QACjC,OAAO,EAAE,KAAK;QACd,SAAS,CAAC,GAAG,EAAE,EAAE;YACf,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,mBAAmB,CAAC;gBAAE,OAAO;YAE9C,MAAM,MAAM,GAAG,gBAAgB,EAAE,CAAC;YAElC,MAAM,KAAK,GAAG,IAAI,GAAG,CACnB,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,GAAG,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAClE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,CACtC,CACF,CAAC;YAEF,MAAM,IAAI,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,YAAY,IAAI,IAAI,CAAC,CAAC;YAC5D,MAAM,WAAW,GAAa,EAAE,CAAC;YAEjC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YAEtB,IAAI,MAAM,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;gBAC9B,WAAW,CAAC,IAAI,CAAC,gBAAgB,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,CAAC;gBACnE,IAAI,CAAC,IAAI,CACP,kBAAkB,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,eAAe,CACpE,CAAC;YACJ,CAAC;iBAAM,CAAC;gBACN,WAAW,CAAC,IAAI,CAAC,kCAAkC,CAAC,CAAC;gBACrD,IAAI,CAAC,IAAI,CAAC,mCAAmC,CAAC,CAAC;gBAC/C,IAAI,CAAC,IAAI,CACP,8DAA8D,CAC/D,CAAC;YACJ,CAAC;YAED,IAAI,MAAM,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;gBAC9B,WAAW,CAAC,IAAI,CAAC,gBAAgB,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,CAAC;gBACnE,IAAI,CAAC,IAAI,CACP,kBAAkB,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,cAAc,CACnE,CAAC;YACJ,CAAC;YAED,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAEf,OAAO,GAAG;iBACP,OAAO,CAAC,YAAY,EAAE,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;iBAC7C,OAAO,CAAC,YAAY,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QAC5C,CAAC;KACF,CAAC;AACJ,CAAC,CAAC"}
|
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
import { type Plugin } from "vite";
|
|
2
|
-
declare const THEME_VARIABLES: readonly ["background", "foreground", "card", "cardForeground", "popover", "popoverForeground", "primary", "primaryForeground", "secondary", "secondaryForeground", "muted", "mutedForeground", "accent", "accentForeground", "destructive", "destructiveForeground", "border", "input", "ring", "radius"];
|
|
3
|
-
export type Theme = Partial<Record<(typeof THEME_VARIABLES)[number], string>>;
|
|
4
|
-
export declare const viteThemeCss: () => Plugin;
|
|
5
|
-
export {};
|
|
@@ -1,77 +0,0 @@
|
|
|
1
|
-
import Color from "colorjs.io";
|
|
2
|
-
import { getCurrentConfig } from "../config/loader.js";
|
|
3
|
-
import { objectEntries } from "../lib/util/objectEntries.js";
|
|
4
|
-
const THEME_VARIABLES = [
|
|
5
|
-
"background",
|
|
6
|
-
"foreground",
|
|
7
|
-
"card",
|
|
8
|
-
"cardForeground",
|
|
9
|
-
"popover",
|
|
10
|
-
"popoverForeground",
|
|
11
|
-
"primary",
|
|
12
|
-
"primaryForeground",
|
|
13
|
-
"secondary",
|
|
14
|
-
"secondaryForeground",
|
|
15
|
-
"muted",
|
|
16
|
-
"mutedForeground",
|
|
17
|
-
"accent",
|
|
18
|
-
"accentForeground",
|
|
19
|
-
"destructive",
|
|
20
|
-
"destructiveForeground",
|
|
21
|
-
"border",
|
|
22
|
-
"input",
|
|
23
|
-
"ring",
|
|
24
|
-
"radius",
|
|
25
|
-
];
|
|
26
|
-
const uncamelize = (str) => str.replace(/[A-Z]/g, (letter) => `-${letter.toLowerCase()}`);
|
|
27
|
-
const processColorValue = (value) => {
|
|
28
|
-
if (!value)
|
|
29
|
-
return "";
|
|
30
|
-
const c = !value.startsWith("#") &&
|
|
31
|
-
!value.includes("(") &&
|
|
32
|
-
value.split(" ").length >= 3
|
|
33
|
-
? // Assume legacy tailwind hsl format
|
|
34
|
-
`hsl(${value})`
|
|
35
|
-
: value;
|
|
36
|
-
try {
|
|
37
|
-
return new Color(c).to("oklch").toString();
|
|
38
|
-
}
|
|
39
|
-
catch (e) {
|
|
40
|
-
// eslint-disable-next-line no-console
|
|
41
|
-
console.error("Invalid color value:", value, e);
|
|
42
|
-
return value;
|
|
43
|
-
}
|
|
44
|
-
};
|
|
45
|
-
const generateCss = (theme) => objectEntries(theme)
|
|
46
|
-
.filter(([key]) => THEME_VARIABLES.includes(key))
|
|
47
|
-
.map(([key, value]) => {
|
|
48
|
-
const processedValue = processColorValue(value);
|
|
49
|
-
return `--${uncamelize(key)}: ${processedValue};`;
|
|
50
|
-
})
|
|
51
|
-
.join("\n");
|
|
52
|
-
export const viteThemeCss = () => {
|
|
53
|
-
const virtualModuleId = "virtual:zudoku-theme.css";
|
|
54
|
-
const resolvedVirtualModuleId = "\0" + virtualModuleId;
|
|
55
|
-
return {
|
|
56
|
-
name: "zudoku-theme",
|
|
57
|
-
resolveId(id) {
|
|
58
|
-
if (id === virtualModuleId) {
|
|
59
|
-
return resolvedVirtualModuleId;
|
|
60
|
-
}
|
|
61
|
-
},
|
|
62
|
-
load(id) {
|
|
63
|
-
if (id !== resolvedVirtualModuleId)
|
|
64
|
-
return;
|
|
65
|
-
const config = getCurrentConfig();
|
|
66
|
-
const cssParts = [];
|
|
67
|
-
if (config.theme?.light) {
|
|
68
|
-
cssParts.push(`:root {\n${generateCss(config.theme.light)}\n}`);
|
|
69
|
-
}
|
|
70
|
-
if (config.theme?.dark) {
|
|
71
|
-
cssParts.push(`.dark {\n${generateCss(config.theme.dark)}\n}`);
|
|
72
|
-
}
|
|
73
|
-
return cssParts.join("\n");
|
|
74
|
-
},
|
|
75
|
-
};
|
|
76
|
-
};
|
|
77
|
-
//# sourceMappingURL=plugin-theme-css.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"plugin-theme-css.js","sourceRoot":"","sources":["../../src/vite/plugin-theme-css.ts"],"names":[],"mappings":"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"}
|