diff --git a/docs/ahriman.core.database.migrations.rst b/docs/ahriman.core.database.migrations.rst
index 4b90cc56..29984079 100644
--- a/docs/ahriman.core.database.migrations.rst
+++ b/docs/ahriman.core.database.migrations.rst
@@ -140,6 +140,14 @@ ahriman.core.database.migrations.m016\_archive module
:no-undoc-members:
:show-inheritance:
+ahriman.core.database.migrations.m017\_pkgbuild module
+------------------------------------------------------
+
+.. automodule:: ahriman.core.database.migrations.m017_pkgbuild
+ :members:
+ :no-undoc-members:
+ :show-inheritance:
+
Module contents
---------------
diff --git a/frontend/src/components/common/CodeBlock.tsx b/frontend/src/components/common/CodeBlock.tsx
index cbd9cbad..02e08e45 100644
--- a/frontend/src/components/common/CodeBlock.tsx
+++ b/frontend/src/components/common/CodeBlock.tsx
@@ -17,47 +17,57 @@
* You should have received a copy of the GNU General Public License
* along with this program. If not, see .
*/
-import { Box } from "@mui/material";
+import "components/common/syntaxLanguages";
+
+import { Box, useTheme } from "@mui/material";
import CopyButton from "components/common/CopyButton";
+import { useThemeMode } from "hooks/useThemeMode";
import React, { type RefObject } from "react";
+import { Light as SyntaxHighlighter } from "react-syntax-highlighter";
+import { githubGist, vs2015 } from "react-syntax-highlighter/dist/esm/styles/hljs";
interface CodeBlockProps {
- preRef?: RefObject;
- getText: () => string;
+ content: string;
height?: number | string;
+ language?: string;
onScroll?: () => void;
- wordBreak?: boolean;
+ preRef?: RefObject;
}
export default function CodeBlock({
- preRef,
- getText,
+ content,
height,
+ language = "text",
onScroll,
- wordBreak,
+ preRef,
}: CodeBlockProps): React.JSX.Element {
+ const { mode } = useThemeMode();
+ const theme = useTheme();
+
return
-
- {getText()}
-
-
-
-
+
+ {content}
+
+ {content &&
+
+ }
;
}
diff --git a/frontend/src/components/common/CopyButton.tsx b/frontend/src/components/common/CopyButton.tsx
index 2f68feb2..1649c930 100644
--- a/frontend/src/components/common/CopyButton.tsx
+++ b/frontend/src/components/common/CopyButton.tsx
@@ -23,17 +23,17 @@ import { IconButton, Tooltip } from "@mui/material";
import React, { useEffect, useRef, useState } from "react";
interface CopyButtonProps {
- getText: () => string;
+ text: string;
}
-export default function CopyButton({ getText }: CopyButtonProps): React.JSX.Element {
+export default function CopyButton({ text }: CopyButtonProps): React.JSX.Element {
const [copied, setCopied] = useState(false);
const timer = useRef>(undefined);
useEffect(() => () => clearTimeout(timer.current), []);
const handleCopy: () => Promise = async () => {
- await navigator.clipboard.writeText(getText());
+ await navigator.clipboard.writeText(text);
setCopied(true);
clearTimeout(timer.current);
timer.current = setTimeout(() => setCopied(false), 2000);
diff --git a/frontend/src/components/common/RepositorySelect.tsx b/frontend/src/components/common/RepositorySelect.tsx
index b80783f2..eb53bc3f 100644
--- a/frontend/src/components/common/RepositorySelect.tsx
+++ b/frontend/src/components/common/RepositorySelect.tsx
@@ -25,12 +25,12 @@ import type React from "react";
export default function RepositorySelect({
repositorySelect,
}: { repositorySelect: SelectedRepositoryResult }): React.JSX.Element {
- const { repositories, current } = useRepository();
+ const { repositories, currentRepository } = useRepository();
return
repository