diff options
| author | Dhravya <[email protected]> | 2024-07-16 18:56:51 -0500 |
|---|---|---|
| committer | Dhravya <[email protected]> | 2024-07-16 18:56:51 -0500 |
| commit | 58d590160d2fa8535552662997caafe4d7ae0bda (patch) | |
| tree | 64d8f284098352bf4ebe0bd471c662837f20b75e | |
| parent | added breadcrumbs for easier navigation on web (diff) | |
| download | supermemory-58d590160d2fa8535552662997caafe4d7ae0bda.tar.xz supermemory-58d590160d2fa8535552662997caafe4d7ae0bda.zip | |
breadcrumbs
| -rw-r--r-- | apps/web/app/(dash)/menu.tsx | 4 | ||||
| -rwxr-xr-x | bun.lockb | bin | 0 -> 1152356 bytes | |||
| -rw-r--r-- | packages/ui/shadcn/breadcrumb.tsx | 115 |
3 files changed, 117 insertions, 2 deletions
diff --git a/apps/web/app/(dash)/menu.tsx b/apps/web/app/(dash)/menu.tsx index c807c579..5e05d358 100644 --- a/apps/web/app/(dash)/menu.tsx +++ b/apps/web/app/(dash)/menu.tsx @@ -240,7 +240,7 @@ function Menu() { const creationTask = await createSpace(spaceName); if (creationTask.success && creationTask.data) { toast.success("Space created " + creationTask.data); - setSpaces?.((prev) => [ + setSpaces((prev) => [ ...prev, { name: spaceName, @@ -265,7 +265,7 @@ function Menu() { <div> {selectedSpaces.length > 0 && ( <div className="flex flex-row flex-wrap gap-0.5 h-min"> - {selectedSpaces.map((x, idx) => ( + {[...new Set(selectedSpaces)].map((x, idx) => ( <button key={x} type="button" diff --git a/bun.lockb b/bun.lockb Binary files differnew file mode 100755 index 00000000..146baec7 --- /dev/null +++ b/bun.lockb diff --git a/packages/ui/shadcn/breadcrumb.tsx b/packages/ui/shadcn/breadcrumb.tsx new file mode 100644 index 00000000..7b63eb44 --- /dev/null +++ b/packages/ui/shadcn/breadcrumb.tsx @@ -0,0 +1,115 @@ +import * as React from "react"; +import { Slot } from "@radix-ui/react-slot"; +import { ChevronRight, MoreHorizontal } from "lucide-react"; + +import { cn } from "@repo/ui/lib/utils"; + +const Breadcrumb = React.forwardRef< + HTMLElement, + React.ComponentPropsWithoutRef<"nav"> & { + separator?: React.ReactNode; + } +>(({ ...props }, ref) => <nav ref={ref} aria-label="breadcrumb" {...props} />); +Breadcrumb.displayName = "Breadcrumb"; + +const BreadcrumbList = React.forwardRef< + HTMLOListElement, + React.ComponentPropsWithoutRef<"ol"> +>(({ className, ...props }, ref) => ( + <ol + ref={ref} + className={cn( + "flex flex-wrap items-center gap-1.5 break-words text-sm text-muted-foreground sm:gap-2.5", + className, + )} + {...props} + /> +)); +BreadcrumbList.displayName = "BreadcrumbList"; + +const BreadcrumbItem = React.forwardRef< + HTMLLIElement, + React.ComponentPropsWithoutRef<"li"> +>(({ className, ...props }, ref) => ( + <li + ref={ref} + className={cn("inline-flex items-center gap-1.5", className)} + {...props} + /> +)); +BreadcrumbItem.displayName = "BreadcrumbItem"; + +const BreadcrumbLink = React.forwardRef< + HTMLAnchorElement, + React.ComponentPropsWithoutRef<"a"> & { + asChild?: boolean; + } +>(({ asChild, className, ...props }, ref) => { + const Comp = asChild ? Slot : "a"; + + return ( + <Comp + ref={ref} + className={cn("transition-colors hover:text-foreground", className)} + {...props} + /> + ); +}); +BreadcrumbLink.displayName = "BreadcrumbLink"; + +const BreadcrumbPage = React.forwardRef< + HTMLSpanElement, + React.ComponentPropsWithoutRef<"span"> +>(({ className, ...props }, ref) => ( + <span + ref={ref} + role="link" + aria-disabled="true" + aria-current="page" + className={cn("font-normal text-foreground", className)} + {...props} + /> +)); +BreadcrumbPage.displayName = "BreadcrumbPage"; + +const BreadcrumbSeparator = ({ + children, + className, + ...props +}: React.ComponentProps<"li">) => ( + <li + role="presentation" + aria-hidden="true" + className={cn("[&>svg]:size-3.5", className)} + {...props} + > + {children ?? <ChevronRight />} + </li> +); +BreadcrumbSeparator.displayName = "BreadcrumbSeparator"; + +const BreadcrumbEllipsis = ({ + className, + ...props +}: React.ComponentProps<"span">) => ( + <span + role="presentation" + aria-hidden="true" + className={cn("flex h-9 w-9 items-center justify-center", className)} + {...props} + > + <MoreHorizontal className="h-4 w-4" /> + <span className="sr-only">More</span> + </span> +); +BreadcrumbEllipsis.displayName = "BreadcrumbElipssis"; + +export { + Breadcrumb, + BreadcrumbList, + BreadcrumbItem, + BreadcrumbLink, + BreadcrumbPage, + BreadcrumbSeparator, + BreadcrumbEllipsis, +}; |