Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
144 changes: 76 additions & 68 deletions apps/v4/app/(internal)/sink/component-registry.ts
Original file line number Diff line number Diff line change
@@ -1,72 +1,73 @@
import FormsPage from "@/app/(internal)/sink/(pages)/forms/page"
import FormsPage from "@/app/(internal)/sink/(pages)/forms/page";

import NextFormPage from "./(pages)/next-form/page"
import ReactHookFormPage from "./(pages)/react-hook-form/page"
import TanstackFormPage from "./(pages)/tanstack-form/page"
import { AccordionDemo } from "./components/accordion-demo"
import { AlertDemo } from "./components/alert-demo"
import { AlertDialogDemo } from "./components/alert-dialog-demo"
import { AspectRatioDemo } from "./components/aspect-ratio-demo"
import { AvatarDemo } from "./components/avatar-demo"
import { BadgeDemo } from "./components/badge-demo"
import { BreadcrumbDemo } from "./components/breadcrumb-demo"
import { ButtonDemo } from "./components/button-demo"
import { ButtonGroupDemo } from "./components/button-group-demo"
import { CalendarDemo } from "./components/calendar-demo"
import { CardDemo } from "./components/card-demo"
import { CarouselDemo } from "./components/carousel-demo"
import { ChartDemo } from "./components/chart-demo"
import { CheckboxDemo } from "./components/checkbox-demo"
import { CollapsibleDemo } from "./components/collapsible-demo"
import { ComboboxDemo } from "./components/combobox-demo"
import { CommandDemo } from "./components/command-demo"
import { ContextMenuDemo } from "./components/context-menu-demo"
import { DatePickerDemo } from "./components/date-picker-demo"
import { DialogDemo } from "./components/dialog-demo"
import { DrawerDemo } from "./components/drawer-demo"
import { DropdownMenuDemo } from "./components/dropdown-menu-demo"
import { EmptyDemo } from "./components/empty-demo"
import { FieldDemo } from "./components/field-demo"
import { FormDemo } from "./components/form-demo"
import { HoverCardDemo } from "./components/hover-card-demo"
import { InputDemo } from "./components/input-demo"
import { InputGroupDemo } from "./components/input-group-demo"
import { InputOTPDemo } from "./components/input-otp-demo"
import { ItemDemo } from "./components/item-demo"
import { KbdDemo } from "./components/kbd-demo"
import { LabelDemo } from "./components/label-demo"
import { MenubarDemo } from "./components/menubar-demo"
import { NativeSelectDemo } from "./components/native-select-demo"
import { NavigationMenuDemo } from "./components/navigation-menu-demo"
import { PaginationDemo } from "./components/pagination-demo"
import { PopoverDemo } from "./components/popover-demo"
import { ProgressDemo } from "./components/progress-demo"
import { RadioGroupDemo } from "./components/radio-group-demo"
import { ResizableDemo } from "./components/resizable-demo"
import { ScrollAreaDemo } from "./components/scroll-area-demo"
import { SelectDemo } from "./components/select-demo"
import { SeparatorDemo } from "./components/separator-demo"
import { SheetDemo } from "./components/sheet-demo"
import { SkeletonDemo } from "./components/skeleton-demo"
import { SliderDemo } from "./components/slider-demo"
import { SonnerDemo } from "./components/sonner-demo"
import { SpinnerDemo } from "./components/spinner-demo"
import { SwitchDemo } from "./components/switch-demo"
import { TableDemo } from "./components/table-demo"
import { TabsDemo } from "./components/tabs-demo"
import { TextareaDemo } from "./components/textarea-demo"
import { ToggleDemo } from "./components/toggle-demo"
import { ToggleGroupDemo } from "./components/toggle-group-demo"
import { TooltipDemo } from "./components/tooltip-demo"
import NextFormPage from "./(pages)/next-form/page";
import ReactHookFormPage from "./(pages)/react-hook-form/page";
import TanstackFormPage from "./(pages)/tanstack-form/page";
import { AccordionDemo } from "./components/accordion-demo";
import { AlertDemo } from "./components/alert-demo";
import { AlertDialogDemo } from "./components/alert-dialog-demo";
import { AspectRatioDemo } from "./components/aspect-ratio-demo";
import { AvatarDemo } from "./components/avatar-demo";
import { BadgeDemo } from "./components/badge-demo";
import { BreadcrumbDemo } from "./components/breadcrumb-demo";
import { ButtonDemo } from "./components/button-demo";
import { ButtonGroupDemo } from "./components/button-group-demo";
import { CalendarDemo } from "./components/calendar-demo";
import { CardDemo } from "./components/card-demo";
import { CarouselDemo } from "./components/carousel-demo";
import { ChartDemo } from "./components/chart-demo";
import { CheckboxDemo } from "./components/checkbox-demo";
import { CollapsibleDemo } from "./components/collapsible-demo";
import { ComboboxDemo } from "./components/combobox-demo";
import { CommandDemo } from "./components/command-demo";
import { ContextMenuDemo } from "./components/context-menu-demo";
import { DatePickerDemo } from "./components/date-picker-demo";
import { DialogDemo } from "./components/dialog-demo";
import { DrawerDemo } from "./components/drawer-demo";
import { DropdownMenuDemo } from "./components/dropdown-menu-demo";
import { EmptyDemo } from "./components/empty-demo";
import { FieldDemo } from "./components/field-demo";
import { FormDemo } from "./components/form-demo";
import { HoverCardDemo } from "./components/hover-card-demo";
import { InputDemo } from "./components/input-demo";
import { InputGroupDemo } from "./components/input-group-demo";
import { InputOTPDemo } from "./components/input-otp-demo";
import { ItemDemo } from "./components/item-demo";
import { KbdDemo } from "./components/kbd-demo";
import { LabelDemo } from "./components/label-demo";
import { MenubarDemo } from "./components/menubar-demo";
import { NativeSelectDemo } from "./components/native-select-demo";
import { NavigationMenuDemo } from "./components/navigation-menu-demo";
import { PaginationDemo } from "./components/pagination-demo";
import { PopoverDemo } from "./components/popover-demo";
import { ProgressDemo } from "./components/progress-demo";
import { RadioGroupDemo } from "./components/radio-group-demo";
import { ResizableDemo } from "./components/resizable-demo";
import { ScrollAreaDemo } from "./components/scroll-area-demo";
import { SelectDemo } from "./components/select-demo";
import { SeparatorDemo } from "./components/separator-demo";
import { SheetDemo } from "./components/sheet-demo";
import { SkeletonDemo } from "./components/skeleton-demo";
import { SliderDemo } from "./components/slider-demo";
import { SonnerDemo } from "./components/sonner-demo";
import { SpinnerDemo } from "./components/spinner-demo";
import { SwitchDemo } from "./components/switch-demo";
import { TableDemo } from "./components/table-demo";
import { TabsDemo } from "./components/tabs-demo";
import { TextareaDemo } from "./components/textarea-demo";
import { ToggleDemo } from "./components/toggle-demo";
import { ToggleGroupDemo } from "./components/toggle-group-demo";
import { TooltipDemo } from "./components/tooltip-demo";
import { ToolbarDemo } from "./components/toolbar-demo";

type ComponentConfig = {
name: string
component: React.ComponentType
className?: string
type: "registry:ui" | "registry:page" | "registry:block"
href: string
label?: string
}
name: string;
component: React.ComponentType;
className?: string;
type: "registry:ui" | "registry:page" | "registry:block";
href: string;
label?: string;
};

export const componentRegistry: Record<string, ComponentConfig> = {
accordion: {
Expand Down Expand Up @@ -402,6 +403,13 @@ export const componentRegistry: Record<string, ComponentConfig> = {
type: "registry:ui",
href: "/sink/toggle-group",
},
toolbar: {
name: "Toolbar",
component: ToolbarDemo,
type: "registry:ui",
href: "/sink/toolbar",
label: "New",
},
tooltip: {
name: "Tooltip",
component: TooltipDemo,
Expand Down Expand Up @@ -432,6 +440,6 @@ export const componentRegistry: Record<string, ComponentConfig> = {
type: "registry:page",
href: "/sink/react-hook-form",
},
}
};

export type ComponentKey = keyof typeof componentRegistry
export type ComponentKey = keyof typeof componentRegistry;
126 changes: 126 additions & 0 deletions apps/v4/app/(internal)/sink/components/toolbar-demo.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,126 @@
import {
Toolbar,
ToolbarButton,
ToolbarGroup,
ToolbarSeparator,
ToolbarToggleGroup,
ToolbarToggleItem,
} from "@/registry/new-york-v4/ui/toolbar";
import {
Tooltip,
TooltipContent,
TooltipProvider,
TooltipTrigger,
} from "@/registry/new-york-v4/ui/tooltip";
import {
Bold,
Italic,
Underline,
Undo,
Redo,
AlignLeft,
AlignCenter,
AlignRight,
} from "lucide-react";

export function ToolbarDemo() {
return (
<div className="flex flex-col gap-8">
<Toolbar aria-label="Text formatting options">
<ToolbarGroup>
<ToolbarButton variant="outline" size="icon-sm" aria-label="Bold">
<Bold />
</ToolbarButton>
<ToolbarButton variant="outline" size="icon-sm" aria-label="Italic">
<Italic />
</ToolbarButton>
<ToolbarButton
variant="outline"
size="icon-sm"
aria-label="Underline"
>
<Underline />
</ToolbarButton>
</ToolbarGroup>
<ToolbarSeparator />
<ToolbarGroup>
<ToolbarButton variant="outline" size="icon-sm" aria-label="Undo">
<Undo />
</ToolbarButton>
<ToolbarButton variant="outline" size="icon-sm" aria-label="Redo">
<Redo />
</ToolbarButton>
</ToolbarGroup>
</Toolbar>

<Toolbar orientation="vertical" aria-label="Editor options">
<ToolbarToggleGroup type="multiple" variant="outline">
<ToolbarToggleItem value="bold" aria-label="Bold">
<Bold />
</ToolbarToggleItem>
<ToolbarToggleItem value="italic" aria-label="Italic">
<Italic />
</ToolbarToggleItem>
<ToolbarToggleItem value="underline" aria-label="Underline">
<Underline />
</ToolbarToggleItem>
</ToolbarToggleGroup>
<ToolbarSeparator />
<ToolbarToggleGroup
type="single"
defaultValue="center"
variant="outline"
>
<ToolbarToggleItem value="left" aria-label="Left aligned">
<AlignLeft />
</ToolbarToggleItem>
<ToolbarToggleItem value="center" aria-label="Center aligned">
<AlignCenter />
</ToolbarToggleItem>
<ToolbarToggleItem value="right" aria-label="Right aligned">
<AlignRight />
</ToolbarToggleItem>
</ToolbarToggleGroup>
</Toolbar>

<TooltipProvider>
<Toolbar aria-label="Mac-like dock" size="default">
<ToolbarGroup className="flex items-end gap-3">
<Tooltip>
<TooltipTrigger asChild>
<ToolbarButton aria-label="Home" size="icon" variant="ghost">
<Bold />
</ToolbarButton>
</TooltipTrigger>
<TooltipContent>Home</TooltipContent>
</Tooltip>
<Tooltip>
<TooltipTrigger asChild>
<ToolbarButton aria-label="Search" size="icon" variant="ghost">
<Italic />
</ToolbarButton>
</TooltipTrigger>
<TooltipContent>Search</TooltipContent>
</Tooltip>
</ToolbarGroup>
<ToolbarSeparator />
<ToolbarGroup>
<Tooltip>
<TooltipTrigger asChild>
<ToolbarButton
aria-label="Settings"
size="icon"
variant="ghost"
>
<Underline />
</ToolbarButton>
</TooltipTrigger>
<TooltipContent>Settings</TooltipContent>
</Tooltip>
</ToolbarGroup>
</Toolbar>
</TooltipProvider>
</div>
);
}

Loading