Skip to content

Commit

Permalink
header
Browse files Browse the repository at this point in the history
  • Loading branch information
richardgill committed Apr 1, 2024
1 parent 90c428f commit 20d3c5d
Show file tree
Hide file tree
Showing 11 changed files with 409 additions and 19 deletions.
2 changes: 1 addition & 1 deletion .prettierrc.mjs
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import prettierConfig from "./prettierrc.precommit.mjs";
import prettierConfig from "./.prettierrc.precommit.mjs";

export default {
...prettierConfig,
Expand Down
2 changes: 2 additions & 0 deletions apps/docs/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@
"@iconify-json/mdi": "^1.1.64",
"@iconify-json/ri": "^1.1.20",
"@radix-ui/react-accordion": "^1.1.2",
"@radix-ui/react-alert-dialog": "^1.0.5",
"@radix-ui/react-dialog": "^1.0.5",
"@radix-ui/react-label": "^2.0.2",
"@radix-ui/react-navigation-menu": "^1.1.4",
Expand All @@ -39,6 +40,7 @@
"balance-text": "^3.3.1",
"class-variance-authority": "^0.7.0",
"clsx": "^2.1.0",
"cmdk": "^1.0.0",
"date-fns": "^3.5.0",
"framer-motion": "^11.0.14",
"lucide-react": "^0.358.0",
Expand Down
75 changes: 75 additions & 0 deletions apps/docs/src/components/CommandMenu.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
import type { DialogProps } from "@radix-ui/react-alert-dialog";
import * as React from "react";

import { Button } from "@/components/ui/Button";
import {
CommandDialog,
CommandEmpty,
CommandGroup,
CommandInput,
CommandItem,
CommandList,
} from "@/components/ui/Command";
import { cn } from "@/lib/utils";

type CommandMenuProps = DialogProps & { className?: string };

export const CommandMenu = ({ ...props }: CommandMenuProps) => {
const [isOpen, setIsOpen] = React.useState(false);

React.useEffect(() => {
const down = (e: KeyboardEvent) => {
if ((e.key === "k" && (e.metaKey || e.ctrlKey)) || e.key === "/") {
if (
(e.target instanceof HTMLElement && e.target.isContentEditable) ||
e.target instanceof HTMLInputElement ||
e.target instanceof HTMLTextAreaElement ||
e.target instanceof HTMLSelectElement
) {
return;
}

e.preventDefault();
setIsOpen((prevIsValue) => !prevIsValue);
}
};

document.addEventListener("keydown", down);
return () => document.removeEventListener("keydown", down);
}, []);

// const runCommand = React.useCallback((command: () => unknown) => {
// setOpen(false);
// command();
// }, []);

return (
<>
<Button
variant="outline"
{...props}
className={cn(
"relative h-10 w-full justify-start rounded-[0.5rem] bg-background text-sm font-normal text-muted-foreground shadow-none sm:pr-12 md:w-64 lg:w-64",
props.className,
)}
onClick={() => setIsOpen(true)}
>
<span className="inline-flex">Search docs...</span>
<kbd className="pointer-events-none absolute right-[0.3rem] top-[0.6rem] hidden h-5 select-none items-center gap-1 rounded border bg-muted px-1.5 font-mono text-[10px] font-medium opacity-100 md:flex">
<span className="text-xs"></span>K
</kbd>
</Button>
<CommandDialog open={isOpen} onOpenChange={setIsOpen}>
<CommandInput placeholder="Search docs..." />
<CommandList>
<CommandEmpty>No results found.</CommandEmpty>
<CommandGroup heading="Suggestions">
<CommandItem>Calendar</CommandItem>
<CommandItem>Search Emoji</CommandItem>
<CommandItem>Calculator</CommandItem>
</CommandGroup>
</CommandList>
</CommandDialog>
</>
);
};
1 change: 0 additions & 1 deletion apps/docs/src/components/TableOfContents.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,6 @@ export const DashboardTableOfContents = ({ toc }: TocProps) => {
if (!toc?.items) {
return null;
}
console.log("delete");
return (
<div className="space-y-2">
<p className="font-medium">On This Page</p>
Expand Down
9 changes: 0 additions & 9 deletions apps/docs/src/components/layout/Header.astro
Original file line number Diff line number Diff line change
Expand Up @@ -32,15 +32,6 @@ const { className } = Astro.props;
</div>
</div>

<!-- logo mobile center -->
<div
class="absolute left-1/2 top-1/2 -translate-x-4 -translate-y-4 md:hidden"
>
<a href="/" aria-label="llm-ui homepage">
<Icon name="stars-outline" class="size-8" />
</a>
</div>

<slot name="right-header" />
</div>
</header>
7 changes: 2 additions & 5 deletions apps/docs/src/components/layout/SheetMobileNav.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,9 @@ import * as React from "react";
import { Button } from "@/components/ui/Button";
import { ScrollArea } from "@/components/ui/ScrollArea";
import { Sheet, SheetContent, SheetTrigger } from "@/components/ui/Sheet";
import { siteConfig } from "@/config/site";
import { Icons } from "@/icons";
import type { MainNavItem, SidebarNavItem } from "@/types";
import { ThemeToggle } from "../ThemeToggle";

interface SheetMobileProps {
mainNavItems?: MainNavItem[];
Expand Down Expand Up @@ -37,10 +37,6 @@ export const SheetMobileNav = ({
</Button>
</SheetTrigger>
<SheetContent side="left" className="pr-0">
<a href="/" className="flex items-center">
<Icons.logo className="mr-2 size-8" />
<span className="font-bold">{siteConfig.name}</span>
</a>
<ScrollArea className="my-4 h-[calc(100vh-8rem)] pb-10 pl-10">
<div className="mb-20 mt-2">
{mainNavItems?.length ? (
Expand Down Expand Up @@ -100,6 +96,7 @@ export const SheetMobileNav = ({
) : null}
</div>
</ScrollArea>
<ThemeToggle />
</SheetContent>
</Sheet>
);
Expand Down
154 changes: 154 additions & 0 deletions apps/docs/src/components/ui/Command.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,154 @@
import { type DialogProps } from "@radix-ui/react-dialog";
import { Command as CommandPrimitive } from "cmdk";
import { Search } from "lucide-react";
import * as React from "react";

import { Dialog, DialogContent } from "@/components/ui/Dialog";
import { cn } from "@/lib/utils";

const Command = React.forwardRef<
React.ElementRef<typeof CommandPrimitive>,
React.ComponentPropsWithoutRef<typeof CommandPrimitive>
>(({ className, ...props }, ref) => (
<CommandPrimitive
ref={ref}
className={cn(
"flex h-full w-full flex-col overflow-hidden rounded-md bg-popover text-popover-foreground",
className,
)}
{...props}
/>
));
Command.displayName = CommandPrimitive.displayName;

interface CommandDialogProps extends DialogProps {}

const CommandDialog = ({ children, ...props }: CommandDialogProps) => {
return (
<Dialog {...props}>
<DialogContent className="overflow-hidden p-0 shadow-lg">
<Command className="[&_[cmdk-group-heading]]:px-2 [&_[cmdk-group-heading]]:font-medium [&_[cmdk-group-heading]]:text-muted-foreground [&_[cmdk-group]:not([hidden])_~[cmdk-group]]:pt-0 [&_[cmdk-group]]:px-2 [&_[cmdk-input-wrapper]_svg]:h-5 [&_[cmdk-input-wrapper]_svg]:w-5 [&_[cmdk-input]]:h-12 [&_[cmdk-item]]:px-2 [&_[cmdk-item]]:py-3 [&_[cmdk-item]_svg]:h-5 [&_[cmdk-item]_svg]:w-5">
{children}
</Command>
</DialogContent>
</Dialog>
);
};

const CommandInput = React.forwardRef<
React.ElementRef<typeof CommandPrimitive.Input>,
React.ComponentPropsWithoutRef<typeof CommandPrimitive.Input>
>(({ className, ...props }, ref) => (
// eslint-disable-next-line react/no-unknown-property
<div className="flex items-center border-b px-3" cmdk-input-wrapper="">
<Search className="mr-2 h-4 w-4 shrink-0 opacity-50" />
<CommandPrimitive.Input
ref={ref}
className={cn(
"flex h-11 w-full rounded-md bg-transparent py-3 text-sm outline-none placeholder:text-muted-foreground disabled:cursor-not-allowed disabled:opacity-50",
className,
)}
{...props}
/>
</div>
));

CommandInput.displayName = CommandPrimitive.Input.displayName;

const CommandList = React.forwardRef<
React.ElementRef<typeof CommandPrimitive.List>,
React.ComponentPropsWithoutRef<typeof CommandPrimitive.List>
>(({ className, ...props }, ref) => (
<CommandPrimitive.List
ref={ref}
className={cn("max-h-[300px] overflow-y-auto overflow-x-hidden", className)}
{...props}
/>
));

CommandList.displayName = CommandPrimitive.List.displayName;

const CommandEmpty = React.forwardRef<
React.ElementRef<typeof CommandPrimitive.Empty>,
React.ComponentPropsWithoutRef<typeof CommandPrimitive.Empty>
>((props, ref) => (
<CommandPrimitive.Empty
ref={ref}
className="py-6 text-center text-sm"
{...props}
/>
));

CommandEmpty.displayName = CommandPrimitive.Empty.displayName;

const CommandGroup = React.forwardRef<
React.ElementRef<typeof CommandPrimitive.Group>,
React.ComponentPropsWithoutRef<typeof CommandPrimitive.Group>
>(({ className, ...props }, ref) => (
<CommandPrimitive.Group
ref={ref}
className={cn(
"overflow-hidden p-1 text-foreground [&_[cmdk-group-heading]]:px-2 [&_[cmdk-group-heading]]:py-1.5 [&_[cmdk-group-heading]]:text-xs [&_[cmdk-group-heading]]:font-medium [&_[cmdk-group-heading]]:text-muted-foreground",
className,
)}
{...props}
/>
));

CommandGroup.displayName = CommandPrimitive.Group.displayName;

const CommandSeparator = React.forwardRef<
React.ElementRef<typeof CommandPrimitive.Separator>,
React.ComponentPropsWithoutRef<typeof CommandPrimitive.Separator>
>(({ className, ...props }, ref) => (
<CommandPrimitive.Separator
ref={ref}
className={cn("-mx-1 h-px bg-border", className)}
{...props}
/>
));
CommandSeparator.displayName = CommandPrimitive.Separator.displayName;

const CommandItem = React.forwardRef<
React.ElementRef<typeof CommandPrimitive.Item>,
React.ComponentPropsWithoutRef<typeof CommandPrimitive.Item>
>(({ className, ...props }, ref) => (
<CommandPrimitive.Item
ref={ref}
className={cn(
"relative flex cursor-default select-none items-center rounded-sm px-2 py-1.5 text-sm outline-none aria-selected:bg-accent aria-selected:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50",
className,
)}
{...props}
/>
));

CommandItem.displayName = CommandPrimitive.Item.displayName;

const CommandShortcut = ({
className,
...props
}: React.HTMLAttributes<HTMLSpanElement>) => {
return (
<span
className={cn(
"ml-auto text-xs tracking-widest text-muted-foreground",
className,
)}
{...props}
/>
);
};
CommandShortcut.displayName = "CommandShortcut";

export {
Command,
CommandDialog,
CommandEmpty,
CommandGroup,
CommandInput,
CommandItem,
CommandList,
CommandSeparator,
CommandShortcut,
};
Loading

0 comments on commit 20d3c5d

Please sign in to comment.