mirror of
https://github.com/linsa-io/linsa.git
synced 2026-01-12 12:20:23 +01:00
* start * . * seeding connections * . * wip * wip: learning state * wip: notes section * wip: many * topics * chore: update schema * update package * update sidebar * update page section * feat: profile * fix: remove z index * fix: wrong type * add avatar * add avatar * wip * . * store page section key * remove atom page section * fix rerender * fix rerender * fix rerender * fix rerender * fix link * search light/dark mode * bubble menu ui * . * fix: remove unecessary code * chore: mark as old for old schema * chore: adapt new schema * fix: add topic schema but null for now * fix: add icon on personal link * fix: list item * fix: set url fetched when editing * fix: remove image * feat: add icon to link * feat: custom url zod validation * fix: metadata test * chore: update utils * fix: link * fix: url fetcher * . * . * fix: add link, section * chore: seeder * . * . * . * . * fix: change checkbox to learning state * fix: click outside editing form * feat: constant * chore: move to master folder * chore: adapt new schema * chore: cli for new schema * fix: new schema for dev seed * fix: seeding * update package * chore: forcegraph seed * bottombar * if isEdit delete icon * showCreate X button * . * options * chore: implement topic from public global group * chore: update learning state * fix: change implementation for outside click * chore: implement new form param * chore: update env example * feat: link form refs exception * new page button layout, link topic search fixed * chore: enable topic * chore: update seed * profile * chore: move framer motion package from root to web and add nuqs * chore: add LearningStateValue * chore: implement active state * profile * chore: use fancy switch and update const * feat: filter implementation * dropdown menu * . * sidebar topics * topic selected color * feat: topic detail * fix: collapsible page * pages - sorted by, layout, visible mode * . * . * . * topic status sidebar * topic button and count * fix: topic * page delete/topic buttons * search ui * selected topic for page * selected topic status sidebar * removed footer * update package * . --------- Co-authored-by: Nikita <github@nikiv.dev> Co-authored-by: marshennikovaolga <marshennikova@gmail.com> Co-authored-by: Kisuyo <ig.intr3st@gmail.com>
135 lines
4.5 KiB
TypeScript
135 lines
4.5 KiB
TypeScript
"use client"
|
|
|
|
import * as React from "react"
|
|
import { type DialogProps } from "@radix-ui/react-dialog"
|
|
import { MagnifyingGlassIcon } from "@radix-ui/react-icons"
|
|
import { Command as CommandPrimitive } from "cmdk"
|
|
|
|
import { cn } from "@/lib/utils"
|
|
import { Dialog, DialogContent } from "@/components/ui/dialog"
|
|
|
|
const Command = React.forwardRef<
|
|
React.ElementRef<typeof CommandPrimitive>,
|
|
React.ComponentPropsWithoutRef<typeof CommandPrimitive>
|
|
>(({ className, ...props }, ref) => (
|
|
<CommandPrimitive
|
|
ref={ref}
|
|
className={cn(
|
|
"bg-popover text-popover-foreground flex h-full w-full flex-col overflow-hidden rounded-md",
|
|
className
|
|
)}
|
|
{...props}
|
|
/>
|
|
))
|
|
Command.displayName = CommandPrimitive.displayName
|
|
|
|
interface CommandDialogProps extends DialogProps {}
|
|
|
|
const CommandDialog = ({ children, ...props }: CommandDialogProps) => {
|
|
return (
|
|
<Dialog {...props}>
|
|
<DialogContent className="overflow-hidden p-0">
|
|
<Command className="[&_[cmdk-group-heading]]:text-muted-foreground [&_[cmdk-group-heading]]:px-2 [&_[cmdk-group-heading]]:font-medium [&_[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) => (
|
|
<div className="flex items-center px-3" cmdk-input-wrapper="">
|
|
<MagnifyingGlassIcon className="mr-2 w-4 shrink-0 opacity-50" />
|
|
<CommandPrimitive.Input
|
|
ref={ref}
|
|
className={cn(
|
|
"placeholder:text-muted-foreground flex w-full bg-transparent text-sm outline-none 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(
|
|
"text-foreground [&_[cmdk-group-heading]]:text-muted-foreground overflow-hidden [&_[cmdk-group-heading]]:px-2 [&_[cmdk-group-heading]]:py-1.5 [&_[cmdk-group-heading]]:text-xs [&_[cmdk-group-heading]]:font-medium",
|
|
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("bg-border -mx-1 h-px", 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(
|
|
"data-['disabled']:pointer-events-none data-['disabled']:opacity-50 aria-selected:bg-accent aria-selected:text-accent-foreground relative flex cursor-default select-none items-center rounded-sm px-2 py-1.5 text-sm outline-none",
|
|
className
|
|
)}
|
|
{...props}
|
|
/>
|
|
))
|
|
|
|
CommandItem.displayName = CommandPrimitive.Item.displayName
|
|
|
|
const CommandShortcut = ({ className, ...props }: React.HTMLAttributes<HTMLSpanElement>) => {
|
|
return <span className={cn("text-muted-foreground ml-auto text-xs tracking-widest", className)} {...props} />
|
|
}
|
|
CommandShortcut.displayName = "CommandShortcut"
|
|
|
|
export {
|
|
Command,
|
|
CommandDialog,
|
|
CommandInput,
|
|
CommandList,
|
|
CommandEmpty,
|
|
CommandGroup,
|
|
CommandItem,
|
|
CommandShortcut,
|
|
CommandSeparator
|
|
}
|