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.
Files changed (140) hide show
  1. package/dist/app/ZuploBuildConfig.d.ts +21 -21
  2. package/dist/app/ZuploBuildConfig.js +7 -7
  3. package/dist/app/ZuploBuildConfig.js.map +1 -1
  4. package/dist/app/entry.client.d.ts +0 -2
  5. package/dist/app/entry.client.js +0 -2
  6. package/dist/app/entry.client.js.map +1 -1
  7. package/dist/app/entry.server.d.ts +0 -2
  8. package/dist/app/entry.server.js +0 -2
  9. package/dist/app/entry.server.js.map +1 -1
  10. package/dist/app/env.d.ts +7 -7
  11. package/dist/app/env.js +8 -0
  12. package/dist/app/env.js.map +1 -1
  13. package/dist/app/main.d.ts +1 -0
  14. package/dist/app/main.js +3 -2
  15. package/dist/app/main.js.map +1 -1
  16. package/dist/config/validators/validate.d.ts +319 -76
  17. package/dist/config/validators/validate.js +33 -11
  18. package/dist/config/validators/validate.js.map +1 -1
  19. package/dist/lib/auth/issuer.js +4 -1
  20. package/dist/lib/auth/issuer.js.map +1 -1
  21. package/dist/lib/auth/issuer.test.js +14 -1
  22. package/dist/lib/auth/issuer.test.js.map +1 -1
  23. package/dist/lib/authentication/components/CallbackHandler.js +1 -1
  24. package/dist/lib/authentication/components/CallbackHandler.js.map +1 -1
  25. package/dist/lib/components/Framed.d.ts +7 -0
  26. package/dist/lib/components/Framed.js +26 -0
  27. package/dist/lib/components/Framed.js.map +1 -0
  28. package/dist/lib/components/MobileTopNavigation.js +2 -1
  29. package/dist/lib/components/MobileTopNavigation.js.map +1 -1
  30. package/dist/lib/plugins/api-keys/SettingsApiKeys.js +4 -4
  31. package/dist/lib/plugins/api-keys/SettingsApiKeys.js.map +1 -1
  32. package/dist/lib/plugins/api-keys/index.js +1 -3
  33. package/dist/lib/plugins/api-keys/index.js.map +1 -1
  34. package/dist/lib/plugins/openapi/schema/SchemaView.js +1 -1
  35. package/dist/lib/plugins/openapi/schema/SchemaView.js.map +1 -1
  36. package/dist/lib/ui/CodeBlock.js +1 -1
  37. package/dist/lib/ui/CodeBlock.js.map +1 -1
  38. package/dist/lib/util/MdxComponents.d.ts +6 -0
  39. package/dist/lib/util/MdxComponents.js +4 -2
  40. package/dist/lib/util/MdxComponents.js.map +1 -1
  41. package/dist/vite/css/plugin.js +11 -0
  42. package/dist/vite/css/plugin.js.map +1 -1
  43. package/dist/vite/plugin-mdx.js +4 -2
  44. package/dist/vite/plugin-mdx.js.map +1 -1
  45. package/dist/vite/plugin-theme.d.ts +8 -0
  46. package/dist/vite/plugin-theme.js +223 -0
  47. package/dist/vite/plugin-theme.js.map +1 -0
  48. package/dist/vite/plugin-theme.test.d.ts +1 -0
  49. package/dist/vite/plugin-theme.test.js +270 -0
  50. package/dist/vite/plugin-theme.test.js.map +1 -0
  51. package/dist/vite/plugin.js +2 -4
  52. package/dist/vite/plugin.js.map +1 -1
  53. package/dist/vite/shadcn-registry.d.ts +45 -0
  54. package/dist/vite/shadcn-registry.js +29 -0
  55. package/dist/vite/shadcn-registry.js.map +1 -0
  56. package/lib/Drawer-BzkOKwgC.js.map +1 -1
  57. package/lib/{Markdown-BUE2ViaD.js → Markdown-C5j8kKSX.js} +444 -404
  58. package/lib/Markdown-C5j8kKSX.js.map +1 -0
  59. package/lib/{MdxPage-By4UkRkI.js → MdxPage-CKTMf1cR.js} +4 -4
  60. package/lib/{MdxPage-By4UkRkI.js.map → MdxPage-CKTMf1cR.js.map} +1 -1
  61. package/lib/{OasProvider-C6_Kx5O7.js → OasProvider-_GzmsbMg.js} +2 -2
  62. package/lib/{OasProvider-C6_Kx5O7.js.map → OasProvider-_GzmsbMg.js.map} +1 -1
  63. package/lib/{OperationList-BISd29LY.js → OperationList-BJAKaG5p.js} +6 -6
  64. package/lib/{OperationList-BISd29LY.js.map → OperationList-BJAKaG5p.js.map} +1 -1
  65. package/lib/{RouteGuard-CgmsSw7T.js → RouteGuard-B7GVW4oL.js} +2 -2
  66. package/lib/{RouteGuard-CgmsSw7T.js.map → RouteGuard-B7GVW4oL.js.map} +1 -1
  67. package/lib/{SchemaList-BqnRo5ov.js → SchemaList-Dgc0A8x5.js} +6 -6
  68. package/lib/{SchemaList-BqnRo5ov.js.map → SchemaList-Dgc0A8x5.js.map} +1 -1
  69. package/lib/{SchemaView-CtYJpxQI.js → SchemaView-DVx-jFN4.js} +13 -13
  70. package/lib/{SchemaView-CtYJpxQI.js.map → SchemaView-DVx-jFN4.js.map} +1 -1
  71. package/lib/{SignUp-CrjeBbqN.js → SignUp-CRIKdWt9.js} +2 -2
  72. package/lib/{SignUp-CrjeBbqN.js.map → SignUp-CRIKdWt9.js.map} +1 -1
  73. package/lib/{Slot-DANV2b7_.js → Slot-ITby_hMb.js} +4 -4
  74. package/lib/{Slot-DANV2b7_.js.map → Slot-ITby_hMb.js.map} +1 -1
  75. package/lib/{SyntaxHighlight-DtvR7RLF.js → SyntaxHighlight-CqKHkyEy.js} +2 -2
  76. package/lib/{SyntaxHighlight-DtvR7RLF.js.map → SyntaxHighlight-CqKHkyEy.js.map} +1 -1
  77. package/lib/{Toc-ClJBmdtI.js → Toc-Csq3UNtW.js} +2 -2
  78. package/lib/{Toc-ClJBmdtI.js.map → Toc-Csq3UNtW.js.map} +1 -1
  79. package/lib/{circular-pOdgLzpG.js → circular-BP4OrHFK.js} +2 -2
  80. package/lib/{circular-pOdgLzpG.js.map → circular-BP4OrHFK.js.map} +1 -1
  81. package/lib/clerk-yAKDC3Qz.js.map +1 -1
  82. package/lib/{createServer-qAtUf99r.js → createServer-zu4cDiPe.js} +5 -5
  83. package/lib/{createServer-qAtUf99r.js.map → createServer-zu4cDiPe.js.map} +1 -1
  84. package/lib/{errors-Bpodza84.js → errors-CPPSp5F4.js} +10 -10
  85. package/lib/{errors-Bpodza84.js.map → errors-CPPSp5F4.js.map} +1 -1
  86. package/lib/{hook-wIlTGE-2.js → hook-7wZANGJP.js} +2 -5
  87. package/lib/{hook-wIlTGE-2.js.map → hook-7wZANGJP.js.map} +1 -1
  88. package/lib/index-CrcNWbel.js.map +1 -1
  89. package/lib/{index-zddirpDj.js → index-DmNq2fbN.js} +226 -221
  90. package/lib/index-DmNq2fbN.js.map +1 -0
  91. package/lib/index-QzXzw_ra.js.map +1 -1
  92. package/lib/{index-RFzRn4fM.js → index-jWXxqkni.js} +9 -9
  93. package/lib/{index-RFzRn4fM.js.map → index-jWXxqkni.js.map} +1 -1
  94. package/lib/{mutation-C-kdA_1r.js → mutation-C1XCQTQL.js} +2 -2
  95. package/lib/{mutation-C-kdA_1r.js.map → mutation-C1XCQTQL.js.map} +1 -1
  96. package/lib/ui/CodeBlock.js +7 -7
  97. package/lib/ui/CodeBlock.js.map +1 -1
  98. package/lib/ui/SyntaxHighlight.js +2 -2
  99. package/lib/{useMutation-3Ph3x6En.js → useMutation-BKvPttRn.js} +3 -3
  100. package/lib/{useMutation-3Ph3x6En.js.map → useMutation-BKvPttRn.js.map} +1 -1
  101. package/lib/zudoku.auth-auth0.js +1 -1
  102. package/lib/zudoku.auth-azureb2c.js +2 -2
  103. package/lib/zudoku.auth-clerk.js +2 -2
  104. package/lib/zudoku.auth-openid.js +2 -2
  105. package/lib/zudoku.components.js +28 -27
  106. package/lib/zudoku.components.js.map +1 -1
  107. package/lib/zudoku.hooks.js +2 -2
  108. package/lib/zudoku.plugin-api-catalog.js +2 -2
  109. package/lib/zudoku.plugin-api-keys.js +68 -62
  110. package/lib/zudoku.plugin-api-keys.js.map +1 -1
  111. package/lib/zudoku.plugin-custom-pages.js +1 -1
  112. package/lib/zudoku.plugin-markdown.js +1 -1
  113. package/lib/zudoku.plugin-openapi.js +2 -2
  114. package/lib/zudoku.plugin-search-pagefind.js +2 -2
  115. package/package.json +8 -8
  116. package/src/app/ZuploBuildConfig.ts +7 -7
  117. package/src/app/defaultTheme.css +68 -49
  118. package/src/app/entry.client.tsx +0 -2
  119. package/src/app/entry.server.tsx +0 -2
  120. package/src/app/env.ts +8 -0
  121. package/src/app/main.css +1 -52
  122. package/src/app/main.tsx +3 -2
  123. package/src/lib/auth/issuer.test.ts +17 -1
  124. package/src/lib/auth/issuer.ts +4 -1
  125. package/src/lib/authentication/components/CallbackHandler.tsx +1 -1
  126. package/src/lib/components/Framed.tsx +51 -0
  127. package/src/lib/components/MobileTopNavigation.tsx +4 -0
  128. package/src/lib/plugins/api-keys/SettingsApiKeys.tsx +11 -8
  129. package/src/lib/plugins/api-keys/index.tsx +1 -3
  130. package/src/lib/plugins/openapi/schema/SchemaView.tsx +1 -1
  131. package/src/lib/ui/CodeBlock.tsx +1 -1
  132. package/src/lib/util/MdxComponents.tsx +13 -2
  133. package/dist/vite/plugin-configure-tailwind.d.ts +0 -2
  134. package/dist/vite/plugin-configure-tailwind.js +0 -38
  135. package/dist/vite/plugin-configure-tailwind.js.map +0 -1
  136. package/dist/vite/plugin-theme-css.d.ts +0 -5
  137. package/dist/vite/plugin-theme-css.js +0 -77
  138. package/dist/vite/plugin-theme-css.js.map +0 -1
  139. package/lib/Markdown-BUE2ViaD.js.map +0 -1
  140. package/lib/index-zddirpDj.js.map +0 -1
@@ -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 font */
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 = false,
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: `/.static/${statusCode}`,
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: {
@@ -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
  }
@@ -34,5 +34,5 @@ export function CallbackHandler({
34
34
  },
35
35
  });
36
36
 
37
- return <Navigate to={executeCallback.data} />;
37
+ return <Navigate to={executeCallback.data} replace />;
38
38
  }
@@ -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 size={16} />
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
- {isExpired && onDeleteKey && (
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
  ),
@@ -47,7 +47,7 @@ export const SchemaView = ({
47
47
  <Card className="overflow-hidden">
48
48
  {cardHeader}
49
49
  <div className="text-sm text-muted-foreground italic p-4">
50
- No schema specified
50
+ No data returned
51
51
  </div>
52
52
  </Card>
53
53
  );
@@ -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:outline hover:outline-border/75 dark:hover:outline-border rounded-md text-sm text-muted-foreground transition",
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 <video src={props.src} controls playsInline autoPlay loop />;
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-md", props.className)} />;
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,2 +0,0 @@
1
- import type { Plugin } from "vite";
2
- export declare const viteTailwindPlugin: () => Plugin;
@@ -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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"}