zudoku 0.55.1 → 0.56.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.
Files changed (129) hide show
  1. package/dist/app/main.d.ts +1 -1
  2. package/dist/app/main.js +11 -4
  3. package/dist/app/main.js.map +1 -1
  4. package/dist/config/validators/InputNavigationSchema.d.ts +4 -0
  5. package/dist/config/validators/InputNavigationSchema.js +1 -0
  6. package/dist/config/validators/InputNavigationSchema.js.map +1 -1
  7. package/dist/config/validators/validate.d.ts +1 -0
  8. package/dist/config/validators/validate.js +1 -0
  9. package/dist/config/validators/validate.js.map +1 -1
  10. package/dist/flat-config.d.ts +329 -0
  11. package/dist/index.d.ts +1 -0
  12. package/dist/index.js +1 -0
  13. package/dist/index.js.map +1 -1
  14. package/dist/lib/components/BuildCheck.js +7 -0
  15. package/dist/lib/components/BuildCheck.js.map +1 -1
  16. package/dist/lib/components/Header.js +1 -1
  17. package/dist/lib/components/Header.js.map +1 -1
  18. package/dist/lib/components/Layout.js +4 -7
  19. package/dist/lib/components/Layout.js.map +1 -1
  20. package/dist/lib/components/Meta.d.ts +2 -0
  21. package/dist/lib/components/Meta.js +11 -0
  22. package/dist/lib/components/Meta.js.map +1 -0
  23. package/dist/lib/components/context/ZudokuContext.js +1 -1
  24. package/dist/lib/components/context/ZudokuContext.js.map +1 -1
  25. package/dist/lib/components/index.d.ts +1 -0
  26. package/dist/lib/components/index.js +2 -0
  27. package/dist/lib/components/index.js.map +1 -1
  28. package/dist/lib/components/navigation/NavigationItem.js +3 -2
  29. package/dist/lib/components/navigation/NavigationItem.js.map +1 -1
  30. package/dist/lib/components/navigation/utils.js +12 -11
  31. package/dist/lib/components/navigation/utils.js.map +1 -1
  32. package/dist/lib/core/ZudokuContext.d.ts +1 -0
  33. package/dist/lib/core/ZudokuContext.js.map +1 -1
  34. package/dist/lib/plugins/custom-pages/index.js +3 -0
  35. package/dist/lib/plugins/custom-pages/index.js.map +1 -1
  36. package/dist/lib/ui/CodeBlock.js +2 -2
  37. package/dist/lib/ui/CodeBlock.js.map +1 -1
  38. package/dist/lib/ui/Dialog.js +2 -2
  39. package/dist/lib/ui/Dialog.js.map +1 -1
  40. package/dist/vite/plugin-mdx.js +1 -1
  41. package/dist/vite/plugin-mdx.js.map +1 -1
  42. package/dist/vite/sitemap.js +10 -9
  43. package/dist/vite/sitemap.js.map +1 -1
  44. package/lib/{CodeBlock-CVT6z0PP.js → CodeBlock-yJjjRwj-.js} +3 -3
  45. package/lib/CodeBlock-yJjjRwj-.js.map +1 -0
  46. package/lib/{Command-BYukybsa.js → Command-CfgGXMfJ.js} +2 -2
  47. package/lib/{Command-BYukybsa.js.map → Command-CfgGXMfJ.js.map} +1 -1
  48. package/lib/Dialog-B7YnrNnG.js +114 -0
  49. package/lib/Dialog-B7YnrNnG.js.map +1 -0
  50. package/lib/{MdxPage-BKyikAKk.js → MdxPage-D49lfheg.js} +7 -7
  51. package/lib/{MdxPage-BKyikAKk.js.map → MdxPage-D49lfheg.js.map} +1 -1
  52. package/lib/{OAuthErrorPage--neTdY8H.js → OAuthErrorPage-COKL9zOi.js} +6 -6
  53. package/lib/{OAuthErrorPage--neTdY8H.js.map → OAuthErrorPage-COKL9zOi.js.map} +1 -1
  54. package/lib/{OasProvider-yysXhMVI.js → OasProvider-CCv_-asV.js} +2 -2
  55. package/lib/{OasProvider-yysXhMVI.js.map → OasProvider-CCv_-asV.js.map} +1 -1
  56. package/lib/{OperationList-CSYrpcpD.js → OperationList-DkS0B0y1.js} +11 -11
  57. package/lib/{OperationList-CSYrpcpD.js.map → OperationList-DkS0B0y1.js.map} +1 -1
  58. package/lib/{Pagination-QsyyJuoq.js → Pagination-VfR2DCXf.js} +2 -2
  59. package/lib/{Pagination-QsyyJuoq.js.map → Pagination-VfR2DCXf.js.map} +1 -1
  60. package/lib/{RouteGuard-D17dUEM_.js → RouteGuard-CSi9-hSR.js} +4 -4
  61. package/lib/{RouteGuard-D17dUEM_.js.map → RouteGuard-CSi9-hSR.js.map} +1 -1
  62. package/lib/{SchemaList-CSZkqmwI.js → SchemaList-B7ezc5Uy.js} +8 -8
  63. package/lib/{SchemaList-CSZkqmwI.js.map → SchemaList-B7ezc5Uy.js.map} +1 -1
  64. package/lib/{SchemaView-bhJ_U4vL.js → SchemaView-BuL-ycaR.js} +4 -4
  65. package/lib/{SchemaView-bhJ_U4vL.js.map → SchemaView-BuL-ycaR.js.map} +1 -1
  66. package/lib/{Select-DlfI9FFO.js → Select-B9h5k2Pz.js} +3 -3
  67. package/lib/{Select-DlfI9FFO.js.map → Select-B9h5k2Pz.js.map} +1 -1
  68. package/lib/{SignUp-C6ogvx5s.js → SignUp-Cn_gZ7UN.js} +3 -3
  69. package/lib/{SignUp-C6ogvx5s.js.map → SignUp-Cn_gZ7UN.js.map} +1 -1
  70. package/lib/{Slot-Dgy8tqef.js → Slot-BFCJzl5J.js} +358 -358
  71. package/lib/{Slot-Dgy8tqef.js.map → Slot-BFCJzl5J.js.map} +1 -1
  72. package/lib/{SyntaxHighlight-BD_Z_Csq.js → SyntaxHighlight-CSW4eaIJ.js} +313 -313
  73. package/lib/SyntaxHighlight-CSW4eaIJ.js.map +1 -0
  74. package/lib/{Toc-CjX59Ljo.js → Toc-B9K7a2FS.js} +2 -2
  75. package/lib/{Toc-CjX59Ljo.js.map → Toc-B9K7a2FS.js.map} +1 -1
  76. package/lib/{ZudokuContext-Coxa0DfE.js → ZudokuContext-mDDq1hft.js} +76 -68
  77. package/lib/{ZudokuContext-Coxa0DfE.js.map → ZudokuContext-mDDq1hft.js.map} +1 -1
  78. package/lib/{circular-Q4G1nwyb.js → circular-BMUvC5RK.js} +2 -2
  79. package/lib/{circular-Q4G1nwyb.js.map → circular-BMUvC5RK.js.map} +1 -1
  80. package/lib/{createServer-Dtstxqn7.js → createServer-I8dX2VSu.js} +4 -4
  81. package/lib/{createServer-Dtstxqn7.js.map → createServer-I8dX2VSu.js.map} +1 -1
  82. package/lib/{errors-BoJYHL2E.js → errors-D2Qdkul6.js} +2 -2
  83. package/lib/{errors-BoJYHL2E.js.map → errors-D2Qdkul6.js.map} +1 -1
  84. package/lib/{hook-DEPqwjke.js → hook-CGx8MPrU.js} +2 -2
  85. package/lib/{hook-DEPqwjke.js.map → hook-CGx8MPrU.js.map} +1 -1
  86. package/lib/{index-DYs8gxKX.js → index-Cc70HIQT.js} +106 -101
  87. package/lib/index-Cc70HIQT.js.map +1 -0
  88. package/lib/{index-Bl1W774G.js → index-ChOC1gfC.js} +2 -2
  89. package/lib/{index-Bl1W774G.js.map → index-ChOC1gfC.js.map} +1 -1
  90. package/lib/{index-DRkS-pvf.js → index-DZqSbZzE.js} +16 -16
  91. package/lib/{index-DRkS-pvf.js.map → index-DZqSbZzE.js.map} +1 -1
  92. package/lib/ui/CodeBlock.js +1 -1
  93. package/lib/ui/Command.js +1 -1
  94. package/lib/ui/Dialog.js +56 -41
  95. package/lib/ui/Dialog.js.map +1 -1
  96. package/lib/ui/SyntaxHighlight.js +3 -3
  97. package/lib/zudoku.auth-auth0.js +1 -1
  98. package/lib/zudoku.auth-azureb2c.js +5 -5
  99. package/lib/zudoku.auth-clerk.js +2 -2
  100. package/lib/zudoku.auth-openid.js +5 -5
  101. package/lib/zudoku.auth-supabase.js +2 -2
  102. package/lib/zudoku.components.js +19 -18
  103. package/lib/zudoku.hooks.js +3 -3
  104. package/lib/zudoku.plugin-api-catalog.js +6 -6
  105. package/lib/zudoku.plugin-api-keys.js +6 -6
  106. package/lib/zudoku.plugin-custom-pages.js +8 -5
  107. package/lib/zudoku.plugin-custom-pages.js.map +1 -1
  108. package/lib/zudoku.plugin-markdown.js +1 -1
  109. package/lib/zudoku.plugin-openapi.js +3 -3
  110. package/lib/zudoku.plugin-search-pagefind.js +5 -5
  111. package/package.json +6 -6
  112. package/src/app/main.tsx +18 -4
  113. package/src/lib/components/BuildCheck.tsx +10 -0
  114. package/src/lib/components/Header.tsx +3 -2
  115. package/src/lib/components/Layout.tsx +2 -21
  116. package/src/lib/components/Meta.tsx +32 -0
  117. package/src/lib/components/context/ZudokuContext.ts +1 -1
  118. package/src/lib/components/index.ts +2 -0
  119. package/src/lib/components/navigation/NavigationItem.tsx +4 -2
  120. package/src/lib/components/navigation/utils.ts +12 -12
  121. package/src/lib/core/ZudokuContext.ts +1 -0
  122. package/src/lib/plugins/custom-pages/index.tsx +3 -0
  123. package/src/lib/ui/CodeBlock.tsx +2 -2
  124. package/src/lib/ui/Dialog.tsx +12 -3
  125. package/lib/CodeBlock-CVT6z0PP.js.map +0 -1
  126. package/lib/Dialog-u9Uz9sTt.js +0 -99
  127. package/lib/Dialog-u9Uz9sTt.js.map +0 -1
  128. package/lib/SyntaxHighlight-BD_Z_Csq.js.map +0 -1
  129. package/lib/index-DYs8gxKX.js.map +0 -1
@@ -1,8 +1,6 @@
1
- import { Helmet } from "@zudoku/react-helmet-async";
2
1
  import { Suspense, useEffect, type ReactNode } from "react";
3
- import { Outlet, useLocation } from "react-router";
2
+ import { Outlet } from "react-router";
4
3
  import { cn } from "../util/cn.js";
5
- import { joinUrl } from "../util/joinUrl.js";
6
4
  import { useScrollToAnchor } from "../util/useScrollToAnchor.js";
7
5
  import { useScrollToTop } from "../util/useScrollToTop.js";
8
6
  import { useZudoku } from "./context/ZudokuContext.js";
@@ -19,8 +17,7 @@ const LoadingFallback = () => (
19
17
  );
20
18
 
21
19
  export const Layout = ({ children }: { children?: ReactNode }) => {
22
- const { meta, authentication, options } = useZudoku();
23
- const location = useLocation();
20
+ const { authentication } = useZudoku();
24
21
 
25
22
  useScrollToAnchor();
26
23
  useScrollToTop();
@@ -32,22 +29,6 @@ export const Layout = ({ children }: { children?: ReactNode }) => {
32
29
 
33
30
  return (
34
31
  <>
35
- <Helmet titleTemplate={meta?.title}>
36
- {options.canonicalUrlOrigin && (
37
- <link
38
- rel="canonical"
39
- href={joinUrl(
40
- options.canonicalUrlOrigin,
41
- options.basePath,
42
- location.pathname,
43
- )}
44
- />
45
- )}
46
- {meta?.description && (
47
- <meta name="description" content={meta.description} />
48
- )}
49
- {meta?.favicon && <link rel="icon" href={meta.favicon} />}
50
- </Helmet>
51
32
  <Slot.Target name="layout-before-head" />
52
33
  <Header />
53
34
  <Slot.Target name="layout-after-head" />
@@ -0,0 +1,32 @@
1
+ import { Helmet } from "@zudoku/react-helmet-async";
2
+ import type { PropsWithChildren } from "react";
3
+ import { useLocation } from "react-router";
4
+ import { joinUrl } from "../util/joinUrl.js";
5
+ import { useZudoku } from "./context/ZudokuContext.js";
6
+
7
+ export const Meta = ({ children }: PropsWithChildren) => {
8
+ const { meta, options } = useZudoku();
9
+ const location = useLocation();
10
+
11
+ return (
12
+ <>
13
+ <Helmet titleTemplate={meta?.title} defaultTitle={meta?.defaultTitle}>
14
+ {options.canonicalUrlOrigin && (
15
+ <link
16
+ rel="canonical"
17
+ href={joinUrl(
18
+ options.canonicalUrlOrigin,
19
+ options.basePath,
20
+ location.pathname,
21
+ )}
22
+ />
23
+ )}
24
+ {meta?.description && (
25
+ <meta name="description" content={meta.description} />
26
+ )}
27
+ {meta?.favicon && <link rel="icon" href={meta.favicon} />}
28
+ </Helmet>
29
+ {children}
30
+ </>
31
+ );
32
+ };
@@ -39,7 +39,7 @@ const getItemPath = (item: NavigationItem) => {
39
39
  case "link":
40
40
  return item.to;
41
41
  case "custom-page":
42
- return item.path;
42
+ return joinUrl(item.path);
43
43
  default:
44
44
  return undefined;
45
45
  }
@@ -21,6 +21,7 @@ import { ClientOnly as ClientOnlyImport } from "./ClientOnly.js";
21
21
  import { useZudoku as useZudokuImport } from "./context/ZudokuContext.js";
22
22
  import { Layout as LayoutImport } from "./Layout.js";
23
23
  import { Markdown as MarkdownImport } from "./Markdown.js";
24
+ import { Meta as MetaImport } from "./Meta.js";
24
25
  import { Spinner as SpinnerImport } from "./Spinner.js";
25
26
  import { StatusPage as StatusPageImport } from "./StatusPage.js";
26
27
  import { Typography as TypographyImport } from "./Typography.js";
@@ -43,6 +44,7 @@ export const Link = /*@__PURE__*/ LinkImport;
43
44
  export const BuildCheck = /*@__PURE__*/ BuildCheckImport;
44
45
  export const Zudoku = /*@__PURE__*/ ZudokuImport;
45
46
  export const Typography = /*@__PURE__*/ TypographyImport;
47
+ export const Meta = /*@__PURE__*/ MetaImport;
46
48
 
47
49
  /** @deprecated Import from `zudoku/hooks` instead */
48
50
  export const useMDXComponents = /*@__PURE__*/ useMDXComponentsImport;
@@ -114,7 +114,7 @@ export const NavigationItem = ({
114
114
  );
115
115
  case "link":
116
116
  case "custom-page": {
117
- const href = item.type === "link" ? item.to : item.path;
117
+ const href = item.type === "link" ? item.to : joinUrl(item.path);
118
118
  return !href.startsWith("http") ? (
119
119
  <AnchorLink
120
120
  to={{
@@ -124,7 +124,9 @@ export const NavigationItem = ({
124
124
  }}
125
125
  {...{ [DATA_ANCHOR_ATTR]: href.split("#")[1] }}
126
126
  className={navigationListItem({
127
- isActive: href === [location.pathname, activeAnchor].join("#"),
127
+ isActive:
128
+ href ===
129
+ [location.pathname, activeAnchor].filter(Boolean).join("#"),
128
130
  })}
129
131
  onClick={onRequestClose}
130
132
  >
@@ -58,18 +58,18 @@ export const useIsCategoryOpen = (category: NavigationCategory) => {
58
58
  const location = useLocation();
59
59
 
60
60
  return traverseNavigationItem(category, (item) => {
61
- if (item.type === "category" && item.link) {
62
- const categoryLinkPath = joinUrl(item.link.path);
63
- if (categoryLinkPath === location.pathname) {
64
- return true;
65
- }
66
- }
67
-
68
- if (item.type === "doc") {
69
- const docPath = joinUrl(item.path);
70
- if (docPath === location.pathname) {
71
- return true;
72
- }
61
+ switch (item.type) {
62
+ case "category":
63
+ if (!item.link) {
64
+ return undefined;
65
+ }
66
+ return joinUrl(item.link.path) === location.pathname ? true : undefined;
67
+ case "custom-page":
68
+ case "doc":
69
+ return joinUrl(item.path) === location.pathname ? true : undefined;
70
+ case "link":
71
+ default:
72
+ return undefined;
73
73
  }
74
74
  });
75
75
  };
@@ -48,6 +48,7 @@ export type ApiKeyCache = "api-keys";
48
48
 
49
49
  type Metadata = Partial<{
50
50
  title: string;
51
+ defaultTitle?: string;
51
52
  description: string;
52
53
  logo: string;
53
54
  favicon: string;
@@ -20,6 +20,9 @@ export const customPagesPlugin = (
20
20
  customPages.push({
21
21
  path: item.path,
22
22
  element: item.element,
23
+ handle: {
24
+ layout: item.layout ?? "default",
25
+ },
23
26
  });
24
27
  }
25
28
  });
@@ -28,7 +28,7 @@ const IconToLanguageMap: Record<string, RegExp> = {
28
28
  toml: /toml/,
29
29
  gnubash: /(shell|bash|sh|zsh)/,
30
30
  python: /(py|python)/,
31
- dotnet: /(cs|csharp|vb)/,
31
+ dotnet: /(^cs$|csharp|vb)/,
32
32
  rust: /(rs|rust)/,
33
33
  ruby: /(rb|ruby)/,
34
34
  php: /php/,
@@ -101,7 +101,7 @@ export const CodeBlock = ({
101
101
  </div>
102
102
  <div
103
103
  className={cn(
104
- "code-block text-sm not-prose scrollbar overflow-x-auto scrollbar [&>code]:p-3 [&>code]:py-2",
104
+ "code-block text-sm not-prose scrollbar overflow-x-auto scrollbar [&_code]:p-3 [&_code]:py-2",
105
105
  props.className,
106
106
  )}
107
107
  ref={ref}
@@ -1,7 +1,7 @@
1
1
  import * as DialogPrimitive from "@radix-ui/react-dialog";
2
2
  import * as React from "react";
3
3
 
4
- import { XIcon } from "lucide-react";
4
+ import { CircleIcon, XIcon } from "lucide-react";
5
5
  import { cn } from "../util/cn.js";
6
6
 
7
7
  const Dialog = DialogPrimitive.Root;
@@ -45,8 +45,17 @@ const DialogContent = React.forwardRef<
45
45
  >
46
46
  {children}
47
47
  {showCloseButton && (
48
- <DialogPrimitive.Close className="absolute left-1 top-1 rounded-xs opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus:outline-hidden focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:pointer-events-none data-[state=open]:bg-accent data-[state=open]:text-muted-foreground">
49
- <XIcon className="h-3 w-3" strokeWidth={2} />
48
+ <DialogPrimitive.Close className="absolute p-3 group -left-1.5 -top-1.5 rounded-xs opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus:outline-hidden focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:pointer-events-none data-[state=open]:bg-accent data-[state=open]:text-muted-foreground">
49
+ <CircleIcon
50
+ className="h-2 w-2 transition-all border border-transparent group-hover:border-white/20 rounded-full group-hover:scale-180 group-hover:text-red-400"
51
+ strokeWidth={2}
52
+ fill="currentColor"
53
+ />
54
+ <XIcon
55
+ className="h-2 w-2 absolute top-3 left-3 text-transparent group-hover:text-red-800 transition-colors"
56
+ strokeWidth={2}
57
+ fill="currentColor"
58
+ />
50
59
  <span className="sr-only">Close</span>
51
60
  </DialogPrimitive.Close>
52
61
  )}
@@ -1 +0,0 @@
1
- {"version":3,"file":"CodeBlock-CVT6z0PP.js","sources":["../src/lib/util/useCopyToClipboard.ts","../src/lib/ui/CodeBlock.tsx"],"sourcesContent":["import { useCallback, useState } from \"react\";\n\nexport const useCopyToClipboard = (timeout = 2000) => {\n const [isCopied, setIsCopied] = useState(false);\n\n const copyToClipboard = useCallback(\n (text: string) => {\n void navigator.clipboard.writeText(text);\n setIsCopied(true);\n\n setTimeout(() => setIsCopied(false), timeout);\n },\n [timeout],\n );\n\n return [isCopied, copyToClipboard] as const;\n};\n","import { CheckIcon, CopyIcon } from \"lucide-react\";\nimport type { ReactNode } from \"react\";\nimport { useRef } from \"react\";\nimport { cn } from \"../util/cn.js\";\nimport { useCopyToClipboard } from \"../util/useCopyToClipboard.js\";\n\nexport type CodeBlockProps = {\n className?: string;\n noBackground?: boolean;\n wrapLines?: boolean;\n showLanguageIndicator?: boolean;\n language?: string;\n title?: string;\n children?: ReactNode;\n code?: ReactNode;\n showCopy?: \"hover\" | \"always\" | \"never\";\n disabled?: boolean;\n showLineNumbers?: boolean;\n};\n\nconst IconToLanguageMap: Record<string, RegExp> = {\n typescript: /(tsx?|typescript)/,\n javascript: /(jsx?|javascript)/,\n markdown: /(md|markdown)/,\n mdx: /mdx/,\n json: /json/,\n yaml: /yaml/,\n toml: /toml/,\n gnubash: /(shell|bash|sh|zsh)/,\n python: /(py|python)/,\n dotnet: /(cs|csharp|vb)/,\n rust: /(rs|rust)/,\n ruby: /(rb|ruby)/,\n php: /php/,\n html5: /html?/,\n css: /css/,\n};\n\nconst getIconUrl = (language?: string) => {\n if (!language) return undefined;\n\n const icon = Object.entries(IconToLanguageMap).find(([_, regex]) =>\n regex.test(language),\n );\n return icon\n ? `https://cdn.simpleicons.org/${icon[0]}/000/fff?viewbox=auto`\n : undefined;\n};\n\nexport const CodeBlock = ({\n children,\n title = \"Code\",\n language,\n showCopy = \"hover\",\n showLanguageIndicator,\n showLineNumbers,\n ...props\n}: CodeBlockProps) => {\n const [isCopied, copyToClipboard] = useCopyToClipboard();\n const ref = useRef<HTMLDivElement>(null);\n\n if (!children) return null;\n\n const iconUrl = showLanguageIndicator ? getIconUrl(language) : undefined;\n\n return (\n <div\n className={cn(\n \"border code-block-wrapper relative group bg-muted/50 rounded-md overflow-hidden\",\n showLineNumbers && \"line-numbers\",\n )}\n >\n <div className=\"border-b flex items-center h-10 font-sans bg-black/2\">\n <div className=\"flex items-center gap-2 flex-1 text-sm w-full px-3\">\n {iconUrl && <img src={iconUrl} className=\"h-3 max-w-4\" />}\n {title}\n </div>{\" \"}\n {showCopy !== \"never\" && (\n <button\n type=\"button\"\n aria-label=\"Copy code\"\n title=\"Copy code\"\n className={cn(\n \"transition px-2 py-2 mx-1 rounded-sm\",\n !isCopied && \"hover:bg-accent hover:brightness-95\",\n )}\n disabled={isCopied}\n onClick={() => {\n if (!ref.current?.textContent) return;\n\n copyToClipboard(ref.current.textContent);\n }}\n >\n {isCopied ? (\n <CheckIcon className=\"text-emerald-600\" size={14} />\n ) : (\n <CopyIcon size={14} />\n )}\n </button>\n )}\n </div>\n <div\n className={cn(\n \"code-block text-sm not-prose scrollbar overflow-x-auto scrollbar [&>code]:p-3 [&>code]:py-2\",\n props.className,\n )}\n ref={ref}\n >\n {children}\n </div>\n </div>\n );\n};\n"],"names":["useCopyToClipboard","timeout","isCopied","setIsCopied","useState","copyToClipboard","useCallback","text","IconToLanguageMap","getIconUrl","language","icon","_","regex","CodeBlock","children","title","showCopy","showLanguageIndicator","showLineNumbers","props","ref","useRef","iconUrl","jsxs","cn","jsx","CheckIcon","CopyIcon"],"mappings":";;;;AAEO,MAAMA,IAAqB,CAACC,IAAU,QAAS;AACpD,QAAM,CAACC,GAAUC,CAAW,IAAIC,EAAS,EAAK,GAExCC,IAAkBC;AAAA,IACtB,CAACC,MAAiB;AAChB,MAAK,UAAU,UAAU,UAAUA,CAAI,GACvCJ,EAAY,EAAI,GAEhB,WAAW,MAAMA,EAAY,EAAK,GAAGF,CAAO;AAAA,IAC9C;AAAA,IACA,CAACA,CAAO;AAAA,EAAA;AAGV,SAAO,CAACC,GAAUG,CAAe;AACnC,GCIMG,IAA4C;AAAA,EAChD,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,UAAU;AAAA,EACV,KAAK;AAAA,EACL,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,SAAS;AAAA,EACT,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,MAAM;AAAA,EACN,MAAM;AAAA,EACN,KAAK;AAAA,EACL,OAAO;AAAA,EACP,KAAK;AACP,GAEMC,IAAa,CAACC,MAAsB;AACxC,MAAI,CAACA,EAAU;AAEf,QAAMC,IAAO,OAAO,QAAQH,CAAiB,EAAE;AAAA,IAAK,CAAC,CAACI,GAAGC,CAAK,MAC5DA,EAAM,KAAKH,CAAQ;AAAA,EAAA;AAErB,SAAOC,IACH,+BAA+BA,EAAK,CAAC,CAAC,0BACtC;AACN,GAEaG,IAAY,CAAC;AAAA,EACxB,UAAAC;AAAA,EACA,OAAAC,IAAQ;AAAA,EACR,UAAAN;AAAA,EACA,UAAAO,IAAW;AAAA,EACX,uBAAAC;AAAA,EACA,iBAAAC;AAAA,EACA,GAAGC;AACL,MAAsB;AACpB,QAAM,CAAClB,GAAUG,CAAe,IAAIL,EAAA,GAC9BqB,IAAMC,EAAuB,IAAI;AAEvC,MAAI,CAACP,EAAU,QAAO;AAEtB,QAAMQ,IAAUL,IAAwBT,EAAWC,CAAQ,IAAI;AAE/D,SACEc,gBAAAA,EAAAA;AAAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAWC;AAAA,QACT;AAAA,QACAN,KAAmB;AAAA,MAAA;AAAA,MAGrB,UAAA;AAAA,QAAAK,gBAAAA,EAAAA,KAAC,OAAA,EAAI,WAAU,wDACb,UAAA;AAAA,UAAAA,gBAAAA,EAAAA,KAAC,OAAA,EAAI,WAAU,sDACZ,UAAA;AAAA,YAAAD,KAAWG,gBAAAA,EAAAA,IAAC,OAAA,EAAI,KAAKH,GAAS,WAAU,eAAc;AAAA,YACtDP;AAAA,UAAA,GACH;AAAA,UAAO;AAAA,UACNC,MAAa,WACZS,gBAAAA,EAAAA;AAAAA,YAAC;AAAA,YAAA;AAAA,cACC,MAAK;AAAA,cACL,cAAW;AAAA,cACX,OAAM;AAAA,cACN,WAAWD;AAAA,gBACT;AAAA,gBACA,CAACvB,KAAY;AAAA,cAAA;AAAA,cAEf,UAAUA;AAAA,cACV,SAAS,MAAM;AACb,gBAAKmB,EAAI,SAAS,eAElBhB,EAAgBgB,EAAI,QAAQ,WAAW;AAAA,cACzC;AAAA,cAEC,UAAAnB,IACCwB,gBAAAA,EAAAA,IAACC,GAAA,EAAU,WAAU,oBAAmB,MAAM,GAAA,CAAI,IAElDD,gBAAAA,EAAAA,IAACE,GAAA,EAAS,MAAM,GAAA,CAAI;AAAA,YAAA;AAAA,UAAA;AAAA,QAExB,GAEJ;AAAA,QACAF,gBAAAA,EAAAA;AAAAA,UAAC;AAAA,UAAA;AAAA,YACC,WAAWD;AAAA,cACT;AAAA,cACAL,EAAM;AAAA,YAAA;AAAA,YAER,KAAAC;AAAA,YAEC,UAAAN;AAAA,UAAA;AAAA,QAAA;AAAA,MACH;AAAA,IAAA;AAAA,EAAA;AAGN;"}
@@ -1,99 +0,0 @@
1
- import { j as s } from "./jsx-runtime-C5mzlN2N.js";
2
- import * as a from "@radix-ui/react-dialog";
3
- import * as l from "react";
4
- import { XIcon as c } from "lucide-react";
5
- import { c as i } from "./cn-dYga0KKN.js";
6
- const j = a.Root, b = a.Trigger, m = a.Portal, h = a.Close, n = l.forwardRef(({ className: e, ...t }, o) => /* @__PURE__ */ s.jsx(
7
- a.Overlay,
8
- {
9
- ref: o,
10
- className: i(
11
- "fixed inset-0 z-50 bg-black/80 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0",
12
- e
13
- ),
14
- ...t
15
- }
16
- ));
17
- n.displayName = a.Overlay.displayName;
18
- const f = l.forwardRef(({ className: e, children: t, showCloseButton: o = !0, ...d }, r) => /* @__PURE__ */ s.jsxs(m, { children: [
19
- /* @__PURE__ */ s.jsx(n, {}),
20
- /* @__PURE__ */ s.jsxs(
21
- a.Content,
22
- {
23
- ref: r,
24
- className: i(
25
- "fixed left-[50%] top-[50%] z-50 grid w-full max-w-lg translate-x-[-50%] translate-y-[-50%] gap-4 border bg-background p-6 shadow-lg duration-200 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[state=closed]:slide-out-to-left-1/2 data-[state=closed]:slide-out-to-top-[48%] data-[state=open]:slide-in-from-left-1/2 data-[state=open]:slide-in-from-top-[48%] sm:rounded-lg",
26
- e
27
- ),
28
- ...d,
29
- children: [
30
- t,
31
- o && /* @__PURE__ */ s.jsxs(a.Close, { className: "absolute left-1 top-1 rounded-xs opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus:outline-hidden focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:pointer-events-none data-[state=open]:bg-accent data-[state=open]:text-muted-foreground", children: [
32
- /* @__PURE__ */ s.jsx(c, { className: "h-3 w-3", strokeWidth: 2 }),
33
- /* @__PURE__ */ s.jsx("span", { className: "sr-only", children: "Close" })
34
- ] })
35
- ]
36
- }
37
- )
38
- ] }));
39
- f.displayName = a.Content.displayName;
40
- const p = ({
41
- className: e,
42
- ...t
43
- }) => /* @__PURE__ */ s.jsx(
44
- "div",
45
- {
46
- className: i(
47
- "flex flex-col space-y-1.5 text-center sm:text-left",
48
- e
49
- ),
50
- ...t
51
- }
52
- );
53
- p.displayName = "DialogHeader";
54
- const g = ({
55
- className: e,
56
- ...t
57
- }) => /* @__PURE__ */ s.jsx(
58
- "div",
59
- {
60
- className: i(
61
- "flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2",
62
- e
63
- ),
64
- ...t
65
- }
66
- );
67
- g.displayName = "DialogFooter";
68
- const x = l.forwardRef(({ className: e, ...t }, o) => /* @__PURE__ */ s.jsx(
69
- a.Title,
70
- {
71
- ref: o,
72
- className: i(
73
- "text-lg font-semibold leading-none tracking-tight",
74
- e
75
- ),
76
- ...t
77
- }
78
- ));
79
- x.displayName = a.Title.displayName;
80
- const u = l.forwardRef(({ className: e, ...t }, o) => /* @__PURE__ */ s.jsx(
81
- a.Description,
82
- {
83
- ref: o,
84
- className: i("text-sm text-muted-foreground", e),
85
- ...t
86
- }
87
- ));
88
- u.displayName = a.Description.displayName;
89
- export {
90
- j as D,
91
- f as a,
92
- x as b,
93
- p as c,
94
- u as d,
95
- g as e,
96
- h as f,
97
- b as g
98
- };
99
- //# sourceMappingURL=Dialog-u9Uz9sTt.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Dialog-u9Uz9sTt.js","sources":["../src/lib/ui/Dialog.tsx"],"sourcesContent":["import * as DialogPrimitive from \"@radix-ui/react-dialog\";\nimport * as React from \"react\";\n\nimport { XIcon } from \"lucide-react\";\nimport { cn } from \"../util/cn.js\";\n\nconst Dialog = DialogPrimitive.Root;\n\nconst DialogTrigger = DialogPrimitive.Trigger;\n\nconst DialogPortal = DialogPrimitive.Portal;\n\nconst DialogClose = DialogPrimitive.Close;\n\nconst DialogOverlay = React.forwardRef<\n React.ElementRef<typeof DialogPrimitive.Overlay>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Overlay>\n>(({ className, ...props }, ref) => (\n <DialogPrimitive.Overlay\n ref={ref}\n className={cn(\n \"fixed inset-0 z-50 bg-black/80 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0\",\n className,\n )}\n {...props}\n />\n));\nDialogOverlay.displayName = DialogPrimitive.Overlay.displayName;\n\nconst DialogContent = React.forwardRef<\n React.ElementRef<typeof DialogPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Content> & {\n showCloseButton?: boolean;\n }\n>(({ className, children, showCloseButton = true, ...props }, ref) => (\n <DialogPortal>\n <DialogOverlay />\n <DialogPrimitive.Content\n ref={ref}\n className={cn(\n \"fixed left-[50%] top-[50%] z-50 grid w-full max-w-lg translate-x-[-50%] translate-y-[-50%] gap-4 border bg-background p-6 shadow-lg duration-200 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[state=closed]:slide-out-to-left-1/2 data-[state=closed]:slide-out-to-top-[48%] data-[state=open]:slide-in-from-left-1/2 data-[state=open]:slide-in-from-top-[48%] sm:rounded-lg\",\n className,\n )}\n {...props}\n >\n {children}\n {showCloseButton && (\n <DialogPrimitive.Close className=\"absolute left-1 top-1 rounded-xs opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus:outline-hidden focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:pointer-events-none data-[state=open]:bg-accent data-[state=open]:text-muted-foreground\">\n <XIcon className=\"h-3 w-3\" strokeWidth={2} />\n <span className=\"sr-only\">Close</span>\n </DialogPrimitive.Close>\n )}\n </DialogPrimitive.Content>\n </DialogPortal>\n));\nDialogContent.displayName = DialogPrimitive.Content.displayName;\n\nconst DialogHeader = ({\n className,\n ...props\n}: React.HTMLAttributes<HTMLDivElement>) => (\n <div\n className={cn(\n \"flex flex-col space-y-1.5 text-center sm:text-left\",\n className,\n )}\n {...props}\n />\n);\nDialogHeader.displayName = \"DialogHeader\";\n\nconst DialogFooter = ({\n className,\n ...props\n}: React.HTMLAttributes<HTMLDivElement>) => (\n <div\n className={cn(\n \"flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2\",\n className,\n )}\n {...props}\n />\n);\nDialogFooter.displayName = \"DialogFooter\";\n\nconst DialogTitle = React.forwardRef<\n React.ElementRef<typeof DialogPrimitive.Title>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Title>\n>(({ className, ...props }, ref) => (\n <DialogPrimitive.Title\n ref={ref}\n className={cn(\n \"text-lg font-semibold leading-none tracking-tight\",\n className,\n )}\n {...props}\n />\n));\nDialogTitle.displayName = DialogPrimitive.Title.displayName;\n\nconst DialogDescription = React.forwardRef<\n React.ElementRef<typeof DialogPrimitive.Description>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Description>\n>(({ className, ...props }, ref) => (\n <DialogPrimitive.Description\n ref={ref}\n className={cn(\"text-sm text-muted-foreground\", className)}\n {...props}\n />\n));\nDialogDescription.displayName = DialogPrimitive.Description.displayName;\n\nexport {\n Dialog,\n DialogClose,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogOverlay,\n DialogPortal,\n DialogTitle,\n DialogTrigger,\n};\n"],"names":["Dialog","DialogPrimitive","DialogTrigger","DialogPortal","DialogClose","DialogOverlay","React","className","props","ref","jsx","cn","DialogContent","children","showCloseButton","jsxs","XIcon","DialogHeader","DialogFooter","DialogTitle","DialogDescription"],"mappings":";;;;;AAMA,MAAMA,IAASC,EAAgB,MAEzBC,IAAgBD,EAAgB,SAEhCE,IAAeF,EAAgB,QAE/BG,IAAcH,EAAgB,OAE9BI,IAAgBC,EAAM,WAG1B,CAAC,EAAE,WAAAC,GAAW,GAAGC,EAAA,GAASC,MAC1BC,gBAAAA,EAAAA;AAAAA,EAACT,EAAgB;AAAA,EAAhB;AAAA,IACC,KAAAQ;AAAA,IACA,WAAWE;AAAA,MACT;AAAA,MACAJ;AAAA,IAAA;AAAA,IAED,GAAGC;AAAA,EAAA;AACN,CACD;AACDH,EAAc,cAAcJ,EAAgB,QAAQ;AAEpD,MAAMW,IAAgBN,EAAM,WAK1B,CAAC,EAAE,WAAAC,GAAW,UAAAM,GAAU,iBAAAC,IAAkB,IAAM,GAAGN,EAAA,GAASC,6BAC3DN,GAAA,EACC,UAAA;AAAA,EAAAO,gBAAAA,EAAAA,IAACL,GAAA,EAAc;AAAA,EACfU,gBAAAA,EAAAA;AAAAA,IAACd,EAAgB;AAAA,IAAhB;AAAA,MACC,KAAAQ;AAAA,MACA,WAAWE;AAAA,QACT;AAAA,QACAJ;AAAA,MAAA;AAAA,MAED,GAAGC;AAAA,MAEH,UAAA;AAAA,QAAAK;AAAA,QACAC,KACCC,gBAAAA,EAAAA,KAACd,EAAgB,OAAhB,EAAsB,WAAU,kRAC/B,UAAA;AAAA,UAAAS,gBAAAA,EAAAA,IAACM,GAAA,EAAM,WAAU,WAAU,aAAa,GAAG;AAAA,UAC3CN,gBAAAA,EAAAA,IAAC,QAAA,EAAK,WAAU,WAAU,UAAA,QAAA,CAAK;AAAA,QAAA,EAAA,CACjC;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAEJ,GACF,CACD;AACDE,EAAc,cAAcX,EAAgB,QAAQ;AAEpD,MAAMgB,IAAe,CAAC;AAAA,EACpB,WAAAV;AAAA,EACA,GAAGC;AACL,MACEE,gBAAAA,EAAAA;AAAAA,EAAC;AAAA,EAAA;AAAA,IACC,WAAWC;AAAA,MACT;AAAA,MACAJ;AAAA,IAAA;AAAA,IAED,GAAGC;AAAA,EAAA;AACN;AAEFS,EAAa,cAAc;AAE3B,MAAMC,IAAe,CAAC;AAAA,EACpB,WAAAX;AAAA,EACA,GAAGC;AACL,MACEE,gBAAAA,EAAAA;AAAAA,EAAC;AAAA,EAAA;AAAA,IACC,WAAWC;AAAA,MACT;AAAA,MACAJ;AAAA,IAAA;AAAA,IAED,GAAGC;AAAA,EAAA;AACN;AAEFU,EAAa,cAAc;AAE3B,MAAMC,IAAcb,EAAM,WAGxB,CAAC,EAAE,WAAAC,GAAW,GAAGC,EAAA,GAASC,MAC1BC,gBAAAA,EAAAA;AAAAA,EAACT,EAAgB;AAAA,EAAhB;AAAA,IACC,KAAAQ;AAAA,IACA,WAAWE;AAAA,MACT;AAAA,MACAJ;AAAA,IAAA;AAAA,IAED,GAAGC;AAAA,EAAA;AACN,CACD;AACDW,EAAY,cAAclB,EAAgB,MAAM;AAEhD,MAAMmB,IAAoBd,EAAM,WAG9B,CAAC,EAAE,WAAAC,GAAW,GAAGC,EAAA,GAASC,MAC1BC,gBAAAA,EAAAA;AAAAA,EAACT,EAAgB;AAAA,EAAhB;AAAA,IACC,KAAAQ;AAAA,IACA,WAAWE,EAAG,iCAAiCJ,CAAS;AAAA,IACvD,GAAGC;AAAA,EAAA;AACN,CACD;AACDY,EAAkB,cAAcnB,EAAgB,YAAY;"}