Spaces:
Paused
Paused
| import { lazy, Suspense } from "react"; | |
| import { | |
| Drawer, | |
| Accordion, | |
| ActionIcon, | |
| HoverCard, | |
| Stack, | |
| Group, | |
| Center, | |
| FocusTrap, | |
| DrawerProps, | |
| } from "@mantine/core"; | |
| import { IconBrandGithub } from "@tabler/icons-react"; | |
| import { repository } from "../../../../../package.json"; | |
| import prettyMilliseconds from "pretty-ms"; | |
| import { getSemanticVersion } from "../../../../modules/stringFormatters"; | |
| import { addLogEntry } from "../../../../modules/logEntries"; | |
| const AISettingsForm = lazy(() => import("./AISettingsForm")); | |
| const ActionsForm = lazy(() => import("./ActionsForm")); | |
| const InterfaceSettingsForm = lazy(() => import("./InterfaceSettingsForm")); | |
| export default function MenuDrawer(drawerProps: DrawerProps) { | |
| const repoName = repository.url.split("/").pop(); | |
| return ( | |
| <Drawer | |
| {...drawerProps} | |
| position="right" | |
| size="md" | |
| title={ | |
| <Group gap="xs"> | |
| <ActionIcon | |
| variant="subtle" | |
| component="a" | |
| color="var(--mantine-color-text)" | |
| href={repository.url} | |
| target="_blank" | |
| onClick={() => addLogEntry("User clicked the GitHub link")} | |
| > | |
| <IconBrandGithub size={16} /> | |
| </ActionIcon> | |
| <HoverCard shadow="md" withArrow> | |
| <HoverCard.Target> | |
| <Center>{repoName}</Center> | |
| </HoverCard.Target> | |
| <HoverCard.Dropdown> | |
| <Stack gap="xs"> | |
| <Center>{repoName}</Center> | |
| <Center> | |
| {`v${getSemanticVersion(VITE_BUILD_DATE_TIME)}+${VITE_COMMIT_SHORT_HASH}`} | |
| </Center> | |
| <Center> | |
| Released{" "} | |
| {prettyMilliseconds( | |
| new Date().getTime() - | |
| new Date(VITE_BUILD_DATE_TIME).getTime(), | |
| { | |
| compact: true, | |
| verbose: true, | |
| }, | |
| )}{" "} | |
| ago | |
| </Center> | |
| </Stack> | |
| </HoverCard.Dropdown> | |
| </HoverCard> | |
| </Group> | |
| } | |
| > | |
| <FocusTrap.InitialFocus /> | |
| <Drawer.Body> | |
| <Accordion variant="separated" multiple> | |
| <Accordion.Item value="aiSettings"> | |
| <Accordion.Control>AI Settings</Accordion.Control> | |
| <Accordion.Panel> | |
| <Suspense> | |
| <AISettingsForm /> | |
| </Suspense> | |
| </Accordion.Panel> | |
| </Accordion.Item> | |
| <Accordion.Item value="interfaceSettings"> | |
| <Accordion.Control>Interface Settings</Accordion.Control> | |
| <Accordion.Panel> | |
| <Suspense> | |
| <InterfaceSettingsForm /> | |
| </Suspense> | |
| </Accordion.Panel> | |
| </Accordion.Item> | |
| <Accordion.Item value="actions"> | |
| <Accordion.Control>Actions</Accordion.Control> | |
| <Accordion.Panel> | |
| <Suspense> | |
| <ActionsForm /> | |
| </Suspense> | |
| </Accordion.Panel> | |
| </Accordion.Item> | |
| </Accordion> | |
| </Drawer.Body> | |
| </Drawer> | |
| ); | |
| } | |