- Component
- {' '}
+ Component{" "}
{name}
-
- {' '}
+ {" "}
not found in registry.
)
@@ -38,14 +36,14 @@ export function ThemeComponent({ name, ...props }: ThemeComponentProps) {
}, [name, config.style])
return (
-
+
Loading...
- )}
+ }
>
{Preview}
diff --git a/apps/web/components/theme-switcher.tsx b/apps/web/components/theme-switcher.tsx
index c99fa917..70026de9 100644
--- a/apps/web/components/theme-switcher.tsx
+++ b/apps/web/components/theme-switcher.tsx
@@ -1,9 +1,9 @@
-'use client'
+"use client"
-import * as React from 'react'
-import { useSelectedLayoutSegment } from 'next/navigation'
+import { useSelectedLayoutSegment } from "next/navigation"
+import * as React from "react"
-import { useConfig } from '~/hooks/use-config'
+import { useConfig } from "~/hooks/use-config"
export function ThemeSwitcher() {
const [config] = useConfig()
@@ -15,9 +15,8 @@ export function ThemeSwitcher() {
document.body.classList.remove(className)
})
- const theme = segment === 'themes' ? config.theme : null
- if (theme)
- return document.body.classList.add(`theme-${theme}`)
+ const theme = segment === "themes" ? config.theme : null
+ if (theme) return document.body.classList.add(`theme-${theme}`)
}, [segment, config])
return null
diff --git a/apps/web/components/theme-wrapper2.tsx b/apps/web/components/theme-wrapper2.tsx
index 1e3b4168..764e5134 100644
--- a/apps/web/components/theme-wrapper2.tsx
+++ b/apps/web/components/theme-wrapper2.tsx
@@ -1,9 +1,9 @@
-'use client'
+"use client"
-import { ny } from '~/lib/utils'
-import { useConfig } from '~/hooks/use-config'
+import { useConfig } from "~/hooks/use-config"
+import { ny } from "~/lib/utils"
-interface ThemeWrapperProps extends React.ComponentProps<'div'> {
+interface ThemeWrapperProps extends React.ComponentProps<"div"> {
defaultTheme?: string
}
@@ -17,13 +17,13 @@ export function ThemeWrapper({
return (
diff --git a/apps/web/components/toc.tsx b/apps/web/components/toc.tsx
index 04270c9d..aac61ec3 100644
--- a/apps/web/components/toc.tsx
+++ b/apps/web/components/toc.tsx
@@ -1,10 +1,10 @@
-'use client'
+"use client"
-import { useEffect, useMemo, useState } from 'react'
+import { useEffect, useMemo, useState } from "react"
-import type { TableOfContents } from '~/lib/toc'
-import { useMounted } from '~/lib/use-mounted'
-import { ny } from '~/lib/utils'
+import type { TableOfContents } from "~/lib/toc"
+import { useMounted } from "~/lib/use-mounted"
+import { ny } from "~/lib/utils"
interface TocProps {
toc: TableOfContents
@@ -31,10 +31,13 @@ export function TableOfContents({ toc }: TocProps) {
() =>
refinedToc.items
? refinedToc.items
- .flatMap(item => [item.url, item?.items?.map(item => item.url)])
- .flat()
- .filter(Boolean)
- .map(id => id?.split('#')[1])
+ .flatMap((item) => [
+ item.url,
+ item?.items?.map((item) => item.url),
+ ])
+ .flat()
+ .filter(Boolean)
+ .map((id) => id?.split("#")[1])
: [],
[refinedToc],
) as string[]
@@ -96,32 +99,32 @@ interface TreeProps {
}
function Tree({ tree, level = 1, activeItem }: TreeProps) {
- return tree?.items?.length && level < 3
- ? (
-
- {tree.items.map((item, index) => {
- return (
-
-
- {item.title}
-
- {item.items?.length
- ? (
-
- )
- : null}
-
- )
- })}
-
- )
- : null
+ return tree?.items?.length && level < 3 ? (
+
+ {tree.items.map((item, index) => {
+ return (
+
+
+ {item.title}
+
+ {item.items?.length ? (
+
+ ) : null}
+
+ )
+ })}
+
+ ) : null
}
diff --git a/apps/web/components/ui/accordion.tsx b/apps/web/components/ui/accordion.tsx
index 14629bf6..53d6cd75 100644
--- a/apps/web/components/ui/accordion.tsx
+++ b/apps/web/components/ui/accordion.tsx
@@ -1,10 +1,10 @@
-'use client'
+"use client"
-import * as AccordionPrimitive from '@radix-ui/react-accordion'
-import { ChevronDownIcon } from '@radix-ui/react-icons'
-import * as React from 'react'
+import * as AccordionPrimitive from "@radix-ui/react-accordion"
+import { ChevronDownIcon } from "@radix-ui/react-icons"
+import * as React from "react"
-import { ny } from '~/lib/utils'
+import { ny } from "~/lib/utils"
const Accordion = AccordionPrimitive.Root
@@ -14,11 +14,11 @@ const AccordionItem = React.forwardRef<
>(({ className, ...props }, ref) => (
))
-AccordionItem.displayName = 'AccordionItem'
+AccordionItem.displayName = "AccordionItem"
const AccordionTrigger = React.forwardRef<
React.ElementRef
,
@@ -28,7 +28,7 @@ const AccordionTrigger = React.forwardRef<
svg]:rotate-180',
+ "flex flex-1 items-center justify-between py-4 text-sm font-medium transition-all hover:underline [&[data-state=open]>svg]:rotate-180",
className,
)}
{...props}
@@ -49,7 +49,7 @@ const AccordionContent = React.forwardRef<
className="data-[state=closed]:animate-accordion-up data-[state=open]:animate-accordion-down overflow-hidden text-sm"
{...props}
>
- {children}
+ {children}
))
AccordionContent.displayName = AccordionPrimitive.Content.displayName
diff --git a/apps/web/components/ui/button.tsx b/apps/web/components/ui/button.tsx
index 267b7b44..d377f459 100644
--- a/apps/web/components/ui/button.tsx
+++ b/apps/web/components/ui/button.tsx
@@ -1,52 +1,52 @@
-import { Slot } from '@radix-ui/react-slot'
-import { type VariantProps, cva } from 'class-variance-authority'
-import * as React from 'react'
+import { Slot } from "@radix-ui/react-slot"
+import { type VariantProps, cva } from "class-variance-authority"
+import * as React from "react"
-import { ny } from '~/lib/utils'
+import { ny } from "~/lib/utils"
const buttonVariants = cva(
- 'inline-flex items-center justify-center rounded-xl text-sm font-medium transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50',
+ "inline-flex items-center justify-center rounded-xl text-sm font-medium transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50",
{
variants: {
variant: {
- 'default':
- 'bg-primary text-primary-foreground shadow hover:bg-primary/90',
- 'destructive':
- 'bg-destructive text-destructive-foreground shadow-sm hover:bg-destructive/90',
- 'outline':
- 'border border-input bg-background text-foreground shadow-sm hover:bg-accent hover:text-accent-foreground',
- 'secondary':
- 'bg-secondary text-secondary-foreground shadow-sm hover:bg-secondary/80',
- 'ghost': 'hover:bg-accent hover:text-accent-foreground',
- 'link': 'text-primary underline-offset-4 hover:underline',
- 'rainbow':
- 'group relative animate-rainbow cursor-pointer border-0 bg-[linear-gradient(#121213,#121213),linear-gradient(#121213_50%,rgba(18,18,19,0.6)_80%,rgba(18,18,19,0)),linear-gradient(90deg,hsl(var(--color-1)),hsl(var(--color-5)),hsl(var(--color-3)),hsl(var(--color-4)),hsl(var(--color-2)))] bg-[length:200%] text-primary-foreground [background-clip:padding-box,border-box,border-box] [background-origin:border-box] [border:calc(0.08*1rem)_solid_transparent] before:absolute before:bottom-[-20%] before:left-1/2 before:z-[0] before:h-[20%] before:w-[60%] before:-translate-x-1/2 before:animate-rainbow before:bg-[linear-gradient(90deg,hsl(var(--color-1)),hsl(var(--color-5)),hsl(var(--color-3)),hsl(var(--color-4)),hsl(var(--color-2)))] before:bg-[length:200%] before:[filter:blur(calc(0.8*1rem))] dark:bg-[linear-gradient(#fff,#fff),linear-gradient(#fff_50%,rgba(255,255,255,0.6)_80%,rgba(0,0,0,0)),linear-gradient(90deg,hsl(var(--color-1)),hsl(var(--color-5)),hsl(var(--color-3)),hsl(var(--color-4)),hsl(var(--color-2)))]',
- 'rainbow-outline':
- 'group relative animate-rainbow cursor-pointer border-0 border-input bg-[linear-gradient(#fff,#fff),linear-gradient(#fff_50%,rgba(255,255,255,0.6)_80%,rgba(0,0,0,0)),linear-gradient(90deg,hsl(var(--color-1)),hsl(var(--color-5)),hsl(var(--color-3)),hsl(var(--color-4)),hsl(var(--color-2)))] bg-[length:200%] px-4 text-foreground shadow-sm [background-clip:padding-box,border-box,border-box] [background-origin:border-box] [border:calc(0.08*1rem)_solid_transparent] before:absolute before:bottom-[-20%] before:left-1/2 before:z-[0] before:h-[20%] before:w-[60%] before:-translate-x-1/2 before:animate-rainbow before:bg-[linear-gradient(90deg,hsl(var(--color-1)),hsl(var(--color-5)),hsl(var(--color-3)),hsl(var(--color-4)),hsl(var(--color-2)))] before:bg-[length:200%] before:[filter:blur(calc(0.8*1rem))] dark:bg-[linear-gradient(#121213,#121213),linear-gradient(#121213_50%,rgba(18,18,19,0.6)_80%,rgba(18,18,19,0)),linear-gradient(90deg,hsl(var(--color-1)),hsl(var(--color-5)),hsl(var(--color-3)),hsl(var(--color-4)),hsl(var(--color-2)))]',
+ default:
+ "bg-primary text-primary-foreground shadow hover:bg-primary/90",
+ destructive:
+ "bg-destructive text-destructive-foreground shadow-sm hover:bg-destructive/90",
+ outline:
+ "border border-input bg-background text-foreground shadow-sm hover:bg-accent hover:text-accent-foreground",
+ secondary:
+ "bg-secondary text-secondary-foreground shadow-sm hover:bg-secondary/80",
+ ghost: "hover:bg-accent hover:text-accent-foreground",
+ link: "text-primary underline-offset-4 hover:underline",
+ rainbow:
+ "group relative animate-rainbow cursor-pointer border-0 bg-[linear-gradient(#121213,#121213),linear-gradient(#121213_50%,rgba(18,18,19,0.6)_80%,rgba(18,18,19,0)),linear-gradient(90deg,hsl(var(--color-1)),hsl(var(--color-5)),hsl(var(--color-3)),hsl(var(--color-4)),hsl(var(--color-2)))] bg-[length:200%] text-primary-foreground [background-clip:padding-box,border-box,border-box] [background-origin:border-box] [border:calc(0.08*1rem)_solid_transparent] before:absolute before:bottom-[-20%] before:left-1/2 before:z-[0] before:h-[20%] before:w-[60%] before:-translate-x-1/2 before:animate-rainbow before:bg-[linear-gradient(90deg,hsl(var(--color-1)),hsl(var(--color-5)),hsl(var(--color-3)),hsl(var(--color-4)),hsl(var(--color-2)))] before:bg-[length:200%] before:[filter:blur(calc(0.8*1rem))] dark:bg-[linear-gradient(#fff,#fff),linear-gradient(#fff_50%,rgba(255,255,255,0.6)_80%,rgba(0,0,0,0)),linear-gradient(90deg,hsl(var(--color-1)),hsl(var(--color-5)),hsl(var(--color-3)),hsl(var(--color-4)),hsl(var(--color-2)))]",
+ "rainbow-outline":
+ "group relative animate-rainbow cursor-pointer border-0 border-input bg-[linear-gradient(#fff,#fff),linear-gradient(#fff_50%,rgba(255,255,255,0.6)_80%,rgba(0,0,0,0)),linear-gradient(90deg,hsl(var(--color-1)),hsl(var(--color-5)),hsl(var(--color-3)),hsl(var(--color-4)),hsl(var(--color-2)))] bg-[length:200%] px-4 text-foreground shadow-sm [background-clip:padding-box,border-box,border-box] [background-origin:border-box] [border:calc(0.08*1rem)_solid_transparent] before:absolute before:bottom-[-20%] before:left-1/2 before:z-[0] before:h-[20%] before:w-[60%] before:-translate-x-1/2 before:animate-rainbow before:bg-[linear-gradient(90deg,hsl(var(--color-1)),hsl(var(--color-5)),hsl(var(--color-3)),hsl(var(--color-4)),hsl(var(--color-2)))] before:bg-[length:200%] before:[filter:blur(calc(0.8*1rem))] dark:bg-[linear-gradient(#121213,#121213),linear-gradient(#121213_50%,rgba(18,18,19,0.6)_80%,rgba(18,18,19,0)),linear-gradient(90deg,hsl(var(--color-1)),hsl(var(--color-5)),hsl(var(--color-3)),hsl(var(--color-4)),hsl(var(--color-2)))]",
},
size: {
- default: 'h-9 px-4 py-2',
- sm: 'h-8 rounded-xl px-3 text-xs',
- lg: 'h-11 rounded-xl px-8',
- icon: 'h-9 w-9',
+ default: "h-9 px-4 py-2",
+ sm: "h-8 rounded-xl px-3 text-xs",
+ lg: "h-11 rounded-xl px-8",
+ icon: "h-9 w-9",
},
},
defaultVariants: {
- variant: 'default',
- size: 'default',
+ variant: "default",
+ size: "default",
},
},
)
export interface ButtonProps
extends React.ButtonHTMLAttributes,
- VariantProps {
+ VariantProps {
asChild?: boolean
}
const Button = React.forwardRef(
({ className, variant, size, asChild = false, ...props }, ref) => {
- const Comp = asChild ? Slot : 'button'
+ const Comp = asChild ? Slot : "button"
return (
(
)
},
)
-Button.displayName = 'Button'
+Button.displayName = "Button"
export { Button, buttonVariants }
diff --git a/apps/web/components/ui/calendar.tsx b/apps/web/components/ui/calendar.tsx
index 380a5313..6c021abd 100644
--- a/apps/web/components/ui/calendar.tsx
+++ b/apps/web/components/ui/calendar.tsx
@@ -1,11 +1,11 @@
-'use client'
+"use client"
-import * as React from 'react'
-import { ChevronLeftIcon, ChevronRightIcon } from '@radix-ui/react-icons'
-import { DayPicker } from 'react-day-picker'
+import { ChevronLeftIcon, ChevronRightIcon } from "@radix-ui/react-icons"
+import type * as React from "react"
+import { DayPicker } from "react-day-picker"
-import { ny } from '~/lib/utils'
-import { buttonVariants } from '~/components/ui/button'
+import { buttonVariants } from "~/components/ui/button"
+import { ny } from "~/lib/utils"
export type CalendarProps = React.ComponentProps
@@ -18,54 +18,57 @@ function Calendar({
return (
.day-range-end)]:rounded-r-md [&:has(>.day-range-start)]:rounded-l-md first:[&:has([aria-selected])]:rounded-l-md last:[&:has([aria-selected])]:rounded-r-md'
- : '[&:has([aria-selected])]:rounded-md',
+ "[&:has([aria-selected])]:bg-accent relative p-0 text-center text-sm focus-within:relative focus-within:z-20",
+ props.mode === "range"
+ ? "[&:has(>.day-range-end)]:rounded-r-md [&:has(>.day-range-start)]:rounded-l-md first:[&:has([aria-selected])]:rounded-l-md last:[&:has([aria-selected])]:rounded-r-md"
+ : "[&:has([aria-selected])]:rounded-md",
),
day: ny(
- buttonVariants({ variant: 'ghost' }),
- 'size-8 p-0 font-normal aria-selected:opacity-100',
+ buttonVariants({ variant: "ghost" }),
+ "size-8 p-0 font-normal aria-selected:opacity-100",
),
- day_range_start: 'day-range-start',
- day_range_end: 'day-range-end',
+ day_range_start: "day-range-start",
+ day_range_end: "day-range-end",
day_selected:
- 'bg-primary text-primary-foreground hover:bg-primary hover:text-primary-foreground focus:bg-primary focus:text-primary-foreground',
- day_today: 'bg-accent text-accent-foreground',
- day_outside: 'text-muted-foreground opacity-50',
- day_disabled: 'text-muted-foreground opacity-50',
+ "bg-primary text-primary-foreground hover:bg-primary hover:text-primary-foreground focus:bg-primary focus:text-primary-foreground",
+ day_today: "bg-accent text-accent-foreground",
+ day_outside: "text-muted-foreground opacity-50",
+ day_disabled: "text-muted-foreground opacity-50",
day_range_middle:
- 'aria-selected:bg-accent aria-selected:text-accent-foreground',
- day_hidden: 'invisible',
+ "aria-selected:bg-accent aria-selected:text-accent-foreground",
+ day_hidden: "invisible",
...classNames,
}}
components={{
IconLeft: ({ ...props }) => ,
- IconRight: ({ ...props }) => ,
+ IconRight: ({ ...props }) => (
+
+ ),
}}
{...props}
/>
)
}
-Calendar.displayName = 'Calendar'
+Calendar.displayName = "Calendar"
export { Calendar }
diff --git a/apps/web/components/ui/collapsible.tsx b/apps/web/components/ui/collapsible.tsx
index 1bbaed5a..9fa48946 100644
--- a/apps/web/components/ui/collapsible.tsx
+++ b/apps/web/components/ui/collapsible.tsx
@@ -1,6 +1,6 @@
-'use client'
+"use client"
-import * as CollapsiblePrimitive from '@radix-ui/react-collapsible'
+import * as CollapsiblePrimitive from "@radix-ui/react-collapsible"
const Collapsible = CollapsiblePrimitive.Root
diff --git a/apps/web/components/ui/command.tsx b/apps/web/components/ui/command.tsx
index 4f368688..14f13061 100644
--- a/apps/web/components/ui/command.tsx
+++ b/apps/web/components/ui/command.tsx
@@ -1,12 +1,12 @@
-'use client'
+"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 type { DialogProps } from "@radix-ui/react-dialog"
+import { MagnifyingGlassIcon } from "@radix-ui/react-icons"
+import { Command as CommandPrimitive } from "cmdk"
+import * as React from "react"
-import { ny } from '~/lib/utils'
-import { Dialog, DialogContent } from '~/components/ui/dialog'
+import { Dialog, DialogContent } from "~/components/ui/dialog"
+import { ny } from "~/lib/utils"
const Command = React.forwardRef<
React.ElementRef,
@@ -15,7 +15,7 @@ const Command = React.forwardRef<
(({ className, ...props }, ref) => (
))
@@ -89,7 +92,7 @@ const CommandGroup = React.forwardRef<
(({ className, ...props }, ref) => (
))
@@ -117,7 +120,7 @@ const CommandItem = React.forwardRef<
)
}
-CommandShortcut.displayName = 'CommandShortcut'
+CommandShortcut.displayName = "CommandShortcut"
export {
Command,
diff --git a/apps/web/components/ui/dialog.tsx b/apps/web/components/ui/dialog.tsx
index cf9458f1..3fee876f 100644
--- a/apps/web/components/ui/dialog.tsx
+++ b/apps/web/components/ui/dialog.tsx
@@ -1,8 +1,8 @@
-import * as DialogPrimitive from '@radix-ui/react-dialog'
-import { Cross2Icon } from '@radix-ui/react-icons'
-import * as React from 'react'
+import * as DialogPrimitive from "@radix-ui/react-dialog"
+import { Cross2Icon } from "@radix-ui/react-icons"
+import * as React from "react"
-import { ny } from '~/lib/utils'
+import { ny } from "~/lib/utils"
const Dialog = DialogPrimitive.Root
@@ -17,7 +17,7 @@ const DialogOverlay = React.forwardRef<
)
}
-DialogHeader.displayName = 'DialogHeader'
+DialogHeader.displayName = "DialogHeader"
function DialogFooter({
className,
@@ -72,14 +72,14 @@ function DialogFooter({
return (
)
}
-DialogFooter.displayName = 'DialogFooter'
+DialogFooter.displayName = "DialogFooter"
const DialogTitle = React.forwardRef<
React.ElementRef,
@@ -88,7 +88,7 @@ const DialogTitle = React.forwardRef<
(({ className, ...props }, ref) => (
))
diff --git a/apps/web/components/ui/dropdown-menu.tsx b/apps/web/components/ui/dropdown-menu.tsx
index 9bfae431..396c9a6c 100644
--- a/apps/web/components/ui/dropdown-menu.tsx
+++ b/apps/web/components/ui/dropdown-menu.tsx
@@ -1,10 +1,10 @@
-'use client'
+"use client"
-import * as React from 'react'
-import * as DropdownMenuPrimitive from '@radix-ui/react-dropdown-menu'
-import { Check, ChevronRight, Circle } from 'lucide-react'
+import * as DropdownMenuPrimitive from "@radix-ui/react-dropdown-menu"
+import { Check, ChevronRight, Circle } from "lucide-react"
+import * as React from "react"
-import { ny } from '~/lib/utils'
+import { ny } from "~/lib/utils"
const DropdownMenu = DropdownMenuPrimitive.Root
@@ -27,8 +27,8 @@ const DropdownMenuSubTrigger = React.forwardRef<
))
-DropdownMenuSubTrigger.displayName
- = DropdownMenuPrimitive.SubTrigger.displayName
+DropdownMenuSubTrigger.displayName =
+ DropdownMenuPrimitive.SubTrigger.displayName
const DropdownMenuSubContent = React.forwardRef<
React.ElementRef,
@@ -47,14 +47,14 @@ const DropdownMenuSubContent = React.forwardRef<
))
-DropdownMenuSubContent.displayName
- = DropdownMenuPrimitive.SubContent.displayName
+DropdownMenuSubContent.displayName =
+ DropdownMenuPrimitive.SubContent.displayName
const DropdownMenuContent = React.forwardRef<
React.ElementRef,
@@ -65,7 +65,7 @@ const DropdownMenuContent = React.forwardRef<
ref={ref}
sideOffset={sideOffset}
className={ny(
- 'bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 min-w-32 overflow-hidden rounded-md border p-1 shadow-md',
+ "bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 min-w-32 overflow-hidden rounded-md border p-1 shadow-md",
className,
)}
{...props}
@@ -83,8 +83,8 @@ const DropdownMenuItem = React.forwardRef<
))
-DropdownMenuCheckboxItem.displayName
- = DropdownMenuPrimitive.CheckboxItem.displayName
+DropdownMenuCheckboxItem.displayName =
+ DropdownMenuPrimitive.CheckboxItem.displayName
const DropdownMenuRadioItem = React.forwardRef<
React.ElementRef,
@@ -123,7 +123,7 @@ const DropdownMenuRadioItem = React.forwardRef<
(({ className, ...props }, ref) => (
))
@@ -174,12 +174,12 @@ function DropdownMenuShortcut({
}: React.HTMLAttributes) {
return (
)
}
-DropdownMenuShortcut.displayName = 'DropdownMenuShortcut'
+DropdownMenuShortcut.displayName = "DropdownMenuShortcut"
export {
DropdownMenu,
diff --git a/apps/web/components/ui/nyx-toc.tsx b/apps/web/components/ui/nyx-toc.tsx
index 2f980916..9f0b2573 100644
--- a/apps/web/components/ui/nyx-toc.tsx
+++ b/apps/web/components/ui/nyx-toc.tsx
@@ -1,16 +1,36 @@
-'use client'
-
-import * as React from 'react'
-import type { AnchorHTMLAttributes, HTMLAttributes, ReactNode, RefObject } from 'react'
-import { createContext, forwardRef, useContext, useEffect, useMemo, useRef, useState } from 'react'
-import type { PopoverContentProps, PopoverTriggerProps } from '@radix-ui/react-popover'
-import { AlignLeft, ChevronRight } from 'lucide-react'
-import scrollIntoView from 'scroll-into-view-if-needed'
-import * as ScrollAreaPrimitive from '@radix-ui/react-scroll-area'
-import { Popover, PopoverContent, PopoverTrigger } from '~/registry/miami/ui/popover'
-import { ny } from '~/lib/utils'
-import { useAnchorObserver } from '~/hooks/use-anchor-observer'
-import { useOnChange } from '~/hooks/use-on-change'
+"use client"
+
+import type {
+ PopoverContentProps,
+ PopoverTriggerProps,
+} from "@radix-ui/react-popover"
+import * as ScrollAreaPrimitive from "@radix-ui/react-scroll-area"
+import { AlignLeft, ChevronRight } from "lucide-react"
+import * as React from "react"
+import type {
+ AnchorHTMLAttributes,
+ HTMLAttributes,
+ ReactNode,
+ RefObject,
+} from "react"
+import {
+ createContext,
+ forwardRef,
+ useContext,
+ useEffect,
+ useMemo,
+ useRef,
+ useState,
+} from "react"
+import scrollIntoView from "scroll-into-view-if-needed"
+import { useAnchorObserver } from "~/hooks/use-anchor-observer"
+import { useOnChange } from "~/hooks/use-on-change"
+import { ny } from "~/lib/utils"
+import {
+ Popover,
+ PopoverContent,
+ PopoverTrigger,
+} from "~/registry/miami/ui/popover"
// #region Types
export interface TOCItemType {
@@ -36,7 +56,7 @@ export interface PageStyles {
}
export interface TOCItemProps
- extends Omit, 'href'> {
+ extends Omit, "href"> {
href: string
onActiveChange?: (v: boolean) => void
@@ -49,7 +69,7 @@ const ScrollArea = React.forwardRef<
>(({ className, children, ...props }, ref) => (
{children}
@@ -66,7 +86,7 @@ const ScrollViewport = React.forwardRef<
>(({ className, children, ...props }, ref) => (
{children}
@@ -78,14 +98,14 @@ ScrollViewport.displayName = ScrollAreaPrimitive.Viewport.displayName
const ScrollBar = React.forwardRef<
React.ComponentRef,
React.ComponentPropsWithoutRef
->(({ className, orientation = 'vertical', ...props }, ref) => (
+>(({ className, orientation = "vertical", ...props }, ref) => (
([])
-const ScrollContext = createContext>({ current: null })
+const ScrollContext = createContext>({
+ current: null,
+})
const StylesContext = createContext({
- tocNav: 'xl:hidden',
- toc: 'max-xl:hidden',
+ tocNav: "xl:hidden",
+ toc: "max-xl:hidden",
})
// #region Hooks
@@ -128,19 +150,16 @@ function isDifferent(a: unknown, b: unknown): boolean {
function mergeRefs(...refs: React.Ref[]): React.RefCallback {
return (value) => {
refs.forEach((ref) => {
- if (typeof ref === 'function')
- ref(value)
- else if (ref !== null && typeof ref === 'object')
+ if (typeof ref === "function") ref(value)
+ else if (ref !== null && typeof ref === "object")
(ref as React.MutableRefObject).current = value
})
}
}
function getItemOffset(depth: number): number {
- if (depth <= 2)
- return 14
- if (depth === 3)
- return 26
+ if (depth <= 2) return 14
+ if (depth === 3) return 26
return 36
}
@@ -173,7 +192,7 @@ export function AnchorProvider({
children?: ReactNode
}): React.ReactElement {
const headings = useMemo(() => {
- return toc.map(item => item.url.split('#')[1])
+ return toc.map((item) => item.url.split("#")[1])
}, [toc])
return (
@@ -194,15 +213,14 @@ export const TOCItem = forwardRef(
useOnChange(isActive, (v) => {
const element = anchorRef.current
- if (!element)
- return
+ if (!element) return
if (v && containerRef.current) {
scrollIntoView(element, {
- behavior: 'smooth',
- block: 'center',
- inline: 'center',
- scrollMode: 'always',
+ behavior: "smooth",
+ block: "center",
+ inline: "center",
+ scrollMode: "always",
boundary: containerRef.current,
})
}
@@ -218,7 +236,7 @@ export const TOCItem = forwardRef(
},
)
-TOCItem.displayName = 'TOCItem'
+TOCItem.displayName = "TOCItem"
export function TocThumb({
containerRef,
@@ -232,24 +250,27 @@ export function TocThumb({
activeRef.current = active
function calc(container: HTMLElement, active: string[]): TOCThumb {
- if (active.length === 0 || container.clientHeight === 0)
- return [0, 0]
+ if (active.length === 0 || container.clientHeight === 0) return [0, 0]
let upper = Number.MAX_VALUE
let lower = 0
for (const item of active) {
- const element = container.querySelector(`a[href="#${item}"]`)
- if (!element)
- continue
+ const element = container.querySelector(
+ `a[href="#${item}"]`,
+ )
+ if (!element) continue
const styles = getComputedStyle(element)
- upper = Math.min(upper, element.offsetTop + Number.parseFloat(styles.paddingTop))
+ upper = Math.min(
+ upper,
+ element.offsetTop + Number.parseFloat(styles.paddingTop),
+ )
lower = Math.max(
lower,
- element.offsetTop
- + element.clientHeight
- - Number.parseFloat(styles.paddingBottom),
+ element.offsetTop +
+ element.clientHeight -
+ Number.parseFloat(styles.paddingBottom),
)
}
@@ -257,18 +278,16 @@ export function TocThumb({
}
function update(element: HTMLElement, info: TOCThumb): void {
- element.style.setProperty('--nyx-top', `${info[0]}px`)
- element.style.setProperty('--nyx-height', `${info[1]}px`)
+ element.style.setProperty("--nyx-top", `${info[0]}px`)
+ element.style.setProperty("--nyx-height", `${info[1]}px`)
}
useEffect(() => {
- if (!containerRef.current)
- return
+ if (!containerRef.current) return
const container = containerRef.current
const onResize = (): void => {
- if (!thumbRef.current)
- return
+ if (!thumbRef.current) return
update(thumbRef.current, calc(container, activeRef.current))
}
@@ -282,8 +301,7 @@ export function TocThumb({
}, [containerRef])
useOnChange(active, () => {
- if (!containerRef.current || !thumbRef.current)
- return
+ if (!containerRef.current || !thumbRef.current) return
update(thumbRef.current, calc(containerRef.current, active))
})
@@ -307,14 +325,17 @@ export function Toc(props: HTMLAttributes) {
id="nyx-toc"
{...props}
className={ny(
- 'top-nyx-layout-top sticky h-[var(--nyx-toc-height)] pb-2 pt-12',
+ "top-nyx-layout-top sticky h-[var(--nyx-toc-height)] pb-2 pt-12",
toc,
props.className,
)}
- style={{
- ...props.style,
- '--nyx-toc-height': 'calc(100dvh - var(--nyx-banner-height) - var(--nyx-nav-height))',
- } as any}
+ style={
+ {
+ ...props.style,
+ "--nyx-toc-height":
+ "calc(100dvh - var(--nyx-banner-height) - var(--nyx-nav-height))",
+ } as any
+ }
>
{props.children}
@@ -343,13 +364,11 @@ export function NyxTOCItems({
}>()
useEffect(() => {
- if (!containerRef.current)
- return
+ if (!containerRef.current) return
const container = containerRef.current
function onResize(): void {
- if (container.clientHeight === 0)
- return
+ if (container.clientHeight === 0) return
let w = 0
let h = 0
const d: string[] = []
@@ -357,23 +376,25 @@ export function NyxTOCItems({
const element: HTMLElement | null = container.querySelector(
`a[href="#${items[i].url.slice(1)}"]`,
)
- if (!element)
- continue
+ if (!element) continue
const styles = getComputedStyle(element)
const offset = getLineOffset(items[i].depth) + 1
const top = element.offsetTop + Number.parseFloat(styles.paddingTop)
- const bottom = element.offsetTop + element.clientHeight - Number.parseFloat(styles.paddingBottom)
+ const bottom =
+ element.offsetTop +
+ element.clientHeight -
+ Number.parseFloat(styles.paddingBottom)
w = Math.max(offset, w)
h = Math.max(h, bottom)
- d.push(`${i === 0 ? 'M' : 'L'}${offset} ${top}`)
+ d.push(`${i === 0 ? "M" : "L"}${offset} ${top}`)
d.push(`L${offset} ${bottom}`)
}
setSvg({
- path: d.join(' '),
+ path: d.join(" "),
width: w + 1,
height: h,
})
@@ -385,8 +406,7 @@ export function NyxTOCItems({
return () => observer.disconnect()
}, [items])
- if (items.length === 0)
- return
+ if (items.length === 0) return
return (
<>
@@ -396,30 +416,28 @@ export function NyxTOCItems({
{label}
)}
-
+
- {svg
- ? (
- `,
- )
- }")`,
- }}
- >
-
-
- )
- : null}
+ {svg ? (
+ `,
+ )
+ }")`,
+ }}
+ >
+
+
+ ) : null}
{items.map((item, i) => (
@@ -447,14 +465,14 @@ export function TocPopoverTrigger({
}: PopoverTriggerProps & { items: TOCItemType[] }) {
const active = useActiveAnchor()
const current = useMemo(() => {
- return items.find(item => active === item.url.slice(1))?.title
+ return items.find((item) => active === item.url.slice(1))?.title
}, [items, active])
return (
@@ -480,7 +498,7 @@ export function TocPopoverContent(props: PopoverContentProps) {
data-toc-popover=""
{...props}
className={ny(
- 'flex max-h-[var(--radix-popover-content-available-height)] w-[260px] flex-col gap-4 p-3',
+ "flex max-h-[var(--radix-popover-content-available-height)] w-[260px] flex-col gap-4 p-3",
props.className,
)}
>
@@ -510,29 +528,27 @@ function LocalTOCItem({
}}
className="prose text-muted-foreground data-[active=true]:text-primary relative py-1.5 text-sm transition-colors [overflow-wrap:anywhere] first:pt-0 last:pb-0"
>
- {offset !== upperOffset
- ? (
-
-
-
- )
- : null}
+ {offset !== upperOffset ? (
+
+
+
+ ) : null}
,
@@ -11,7 +11,7 @@ const ScrollArea = React.forwardRef<
>(({ className, children, ...props }, ref) => (
@@ -25,17 +25,19 @@ ScrollArea.displayName = ScrollAreaPrimitive.Root.displayName
const ScrollBar = React.forwardRef<
React.ElementRef,
- React.ComponentPropsWithoutRef
->(({ className, orientation = 'vertical', ...props }, ref) => (
+ React.ComponentPropsWithoutRef<
+ typeof ScrollAreaPrimitive.ScrollAreaScrollbar
+ >
+>(({ className, orientation = "vertical", ...props }, ref) => (
,
React.ComponentPropsWithoutRef
>(
(
- { className, orientation = 'horizontal', decorative = true, ...props },
+ { className, orientation = "horizontal", decorative = true, ...props },
ref,
) => (
(({ className, ...props }, ref) => (
,
- VariantProps {}
+ VariantProps {}
const SheetContent = React.forwardRef<
React.ElementRef,
SheetContentProps
->(({ side = 'right', className, children, ...props }, ref) => (
+>(({ side = "right", className, children, ...props }, ref) => (
)
}
-SheetHeader.displayName = 'SheetHeader'
+SheetHeader.displayName = "SheetHeader"
function SheetFooter({
className,
@@ -97,14 +96,14 @@ function SheetFooter({
return (
)
}
-SheetFooter.displayName = 'SheetFooter'
+SheetFooter.displayName = "SheetFooter"
const SheetTitle = React.forwardRef<
React.ElementRef,
@@ -112,7 +111,7 @@ const SheetTitle = React.forwardRef<
>(({ className, ...props }, ref) => (
))
@@ -124,7 +123,7 @@ const SheetDescription = React.forwardRef<
>(({ className, ...props }, ref) => (
))
diff --git a/apps/web/components/ui/sonner.tsx b/apps/web/components/ui/sonner.tsx
index f6677d6c..be4efaf1 100644
--- a/apps/web/components/ui/sonner.tsx
+++ b/apps/web/components/ui/sonner.tsx
@@ -1,26 +1,25 @@
-'use client'
+"use client"
-import { useTheme } from 'next-themes'
-import { Toaster as Sonner } from 'sonner'
+import { useTheme } from "next-themes"
+import { Toaster as Sonner } from "sonner"
type ToasterProps = React.ComponentProps
function Toaster({ ...props }: ToasterProps) {
- const { theme = 'system' } = useTheme()
+ const { theme = "system" } = useTheme()
return (
+
-
-### Installation
+## Installation
@@ -29,15 +31,26 @@ npx nyxb@latest add shine-border
-Copy and paste the following code into your project.
+Copy and paste the following code into your project.
+
+
+
+Update the import paths to match your project setup.
+
+Update `tailwind.config.js`
+
+Add the following animations to your `tailwind.config.js` file:
-```ts
-// tailwind.config.ts
+```js title="tailwind.config.js" {5-14}
+/** @type {import('tailwindcss').Config} */
module.exports = {
theme: {
extend: {
+ animation: {
+ shine: "shine var(--duration) infinite linear",
+ },
keyframes: {
- "shine-pulse": {
+ shine: {
"0%": {
"background-position": "0% 0%",
},
@@ -54,12 +67,6 @@ module.exports = {
};
```
-```text
-components/ui/shine-border.tsx
-```
-
-
-
@@ -68,18 +75,17 @@ components/ui/shine-border.tsx
## Examples
-### Silver
+### Monotone
## Props
-| Prop | Type | Description | Default |
-| ------------ | ------------------------------ | --------------------------------------------------- | ---------- |
-| className | string | The class name to be applied to the component. | |
-| duration | number | Defines the animation duration to be applied on the shining border. | 14 seconds |
-| color | `#${string}` OR `#${string}`[] | A string or string array to define border color. | #FFFFFF |
-| borderRadius | number | Defines the radius of the border. | 8px |
-| borderWidth | number | Defines the width of the border. | 1px |
-| children | ReactNode | Contains react node elements. | {} |
-
+| Prop | Type | Default | Description |
+| -------------- | ----------- | --------- | ------------------------------------------------------------------- |
+| `className` | `string` | `-` | The class name to be applied to the component. |
+| `duration` | `number` | `14` | Defines the animation duration to be applied on the shining border. |
+| `color` | `string` | `#FFFFFF` | Defines the color of the border. |
+| `borderRadius` | `number` | `8` | Defines the radius of the border. |
+| `borderWidth` | `number` | `1` | Defines the width of the border. |
+| `children` | `ReactNode` | `{}` | Contains react node elements. |
diff --git a/apps/web/content/pages/home.mdx b/apps/web/content/pages/home.mdx
index 2f944ab1..05742aa5 100644
--- a/apps/web/content/pages/home.mdx
+++ b/apps/web/content/pages/home.mdx
@@ -3,17 +3,17 @@ title: Components
description: A collection of components that are used to build the landing page of a website.
---
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/apps/web/hooks/use-anchor-observer.ts b/apps/web/hooks/use-anchor-observer.ts
index f5daf522..cd2b190c 100644
--- a/apps/web/hooks/use-anchor-observer.ts
+++ b/apps/web/hooks/use-anchor-observer.ts
@@ -1,6 +1,6 @@
-'use client'
+"use client"
-import { useEffect, useState } from 'react'
+import { useEffect, useState } from "react"
/**
* Find the active heading of page
@@ -21,35 +21,31 @@ export function useAnchorObserver(watch: string[], single: boolean): string[] {
for (const entry of entries) {
if (entry.isIntersecting && !visible.includes(entry.target.id)) {
visible = [...visible, entry.target.id]
- }
- else if (
- !entry.isIntersecting
- && visible.includes(entry.target.id)
+ } else if (
+ !entry.isIntersecting &&
+ visible.includes(entry.target.id)
) {
- visible = visible.filter(v => v !== entry.target.id)
+ visible = visible.filter((v) => v !== entry.target.id)
}
}
- if (visible.length > 0)
- setActiveAnchor(visible)
+ if (visible.length > 0) setActiveAnchor(visible)
},
{
- rootMargin: single ? '-80px 0% -70% 0%' : `-20px 0% -40% 0%`,
+ rootMargin: single ? "-80px 0% -70% 0%" : `-20px 0% -40% 0%`,
threshold: 1,
},
)
function onScroll(): void {
const element = document.scrollingElement
- if (!element)
- return
+ if (!element) return
if (element.scrollTop === 0 && single) {
setActiveAnchor(watch.slice(0, 1))
- }
- else if (
- element.scrollTop + element.clientHeight
- >= element.scrollHeight - 6
+ } else if (
+ element.scrollTop + element.clientHeight >=
+ element.scrollHeight - 6
) {
setActiveAnchor((active) => {
return active.length > 0 && !single
@@ -62,14 +58,13 @@ export function useAnchorObserver(watch: string[], single: boolean): string[] {
for (const heading of watch) {
const element = document.getElementById(heading)
- if (element)
- observer.observe(element)
+ if (element) observer.observe(element)
}
onScroll()
- window.addEventListener('scroll', onScroll)
+ window.addEventListener("scroll", onScroll)
return () => {
- window.removeEventListener('scroll', onScroll)
+ window.removeEventListener("scroll", onScroll)
observer.disconnect()
}
}, [single, watch])
diff --git a/apps/web/hooks/use-chart-config.ts b/apps/web/hooks/use-chart-config.ts
index 5b2fc178..5b1810db 100644
--- a/apps/web/hooks/use-chart-config.ts
+++ b/apps/web/hooks/use-chart-config.ts
@@ -1,7 +1,7 @@
-import useSWR from 'swr'
+import useSWR from "swr"
export function useChartConfig() {
- const { data, mutate } = useSWR('chart:config', null)
+ const { data, mutate } = useSWR("chart:config", null)
return { chartConfig: data, setChartConfig: mutate }
}
diff --git a/apps/web/hooks/use-colors.ts b/apps/web/hooks/use-colors.ts
index 12addc61..1389f75e 100644
--- a/apps/web/hooks/use-colors.ts
+++ b/apps/web/hooks/use-colors.ts
@@ -1,15 +1,15 @@
-import { useAtom } from 'jotai'
-import { atomWithStorage } from 'jotai/utils'
+import { useAtom } from "jotai"
+import { atomWithStorage } from "jotai/utils"
-import type { ColorFormat } from '~/lib/colors'
-import { useMounted } from '~/hooks/use-mounted'
+import { useMounted } from "~/hooks/use-mounted"
+import type { ColorFormat } from "~/lib/colors"
interface Config {
format: ColorFormat
}
-const colorsAtom = atomWithStorage('colors', {
- format: 'hsl',
+const colorsAtom = atomWithStorage("colors", {
+ format: "hsl",
})
export function useColors() {
diff --git a/apps/web/hooks/use-config.ts b/apps/web/hooks/use-config.ts
index 9b67f5ba..6e0f55a1 100644
--- a/apps/web/hooks/use-config.ts
+++ b/apps/web/hooks/use-config.ts
@@ -1,18 +1,18 @@
-import { useAtom } from 'jotai'
-import { atomWithStorage } from 'jotai/utils'
+import { useAtom } from "jotai"
+import { atomWithStorage } from "jotai/utils"
-import type { BaseColor } from '~/registry/registry-base-colors'
-import type { Style } from '~/registry/registry-styles'
+import type { BaseColor } from "~/registry/registry-base-colors"
+import type { Style } from "~/registry/registry-styles"
interface Config {
- style: Style['name']
- theme: BaseColor['name']
+ style: Style["name"]
+ theme: BaseColor["name"]
radius: number
}
-const configAtom = atomWithStorage('config', {
- style: 'default',
- theme: 'zinc',
+const configAtom = atomWithStorage("config", {
+ style: "default",
+ theme: "zinc",
radius: 0.5,
})
diff --git a/apps/web/hooks/use-copy-to-clipboard.ts b/apps/web/hooks/use-copy-to-clipboard.ts
index 6e366703..684d2b7a 100644
--- a/apps/web/hooks/use-copy-to-clipboard.ts
+++ b/apps/web/hooks/use-copy-to-clipboard.ts
@@ -1,6 +1,6 @@
-'use client'
+"use client"
-import * as React from 'react'
+import * as React from "react"
export function useCopyToClipboard({
timeout = 2000,
@@ -12,12 +12,11 @@ export function useCopyToClipboard({
const [isCopied, setIsCopied] = React.useState(false)
const copyToClipboard = (value: string) => {
- if (typeof window === 'undefined' || !navigator.clipboard.writeText) {
+ if (typeof window === "undefined" || !navigator.clipboard.writeText) {
return
}
- if (!value)
- return
+ if (!value) return
navigator.clipboard.writeText(value).then(() => {
setIsCopied(true)
diff --git a/apps/web/hooks/use-lift-mode.ts b/apps/web/hooks/use-lift-mode.ts
index b5dc5269..6cf7afe3 100644
--- a/apps/web/hooks/use-lift-mode.ts
+++ b/apps/web/hooks/use-lift-mode.ts
@@ -1,7 +1,7 @@
-import { useAtom } from 'jotai'
-import { atomWithStorage } from 'jotai/utils'
+import { useAtom } from "jotai"
+import { atomWithStorage } from "jotai/utils"
-const configAtom = atomWithStorage('lift-mode', [])
+const configAtom = atomWithStorage("lift-mode", [])
export function useLiftMode(name: string) {
const [chunks, setChunks] = useAtom(configAtom)
@@ -9,7 +9,7 @@ export function useLiftMode(name: string) {
function toggleLiftMode(name: string) {
setChunks((prev) => {
return prev.includes(name)
- ? prev.filter(n => n !== name)
+ ? prev.filter((n) => n !== name)
: [...prev, name]
})
}
diff --git a/apps/web/hooks/use-lock-body.ts b/apps/web/hooks/use-lock-body.ts
index e48d343e..48fdbba7 100644
--- a/apps/web/hooks/use-lock-body.ts
+++ b/apps/web/hooks/use-lock-body.ts
@@ -1,4 +1,4 @@
-import * as React from 'react'
+import * as React from "react"
// @see https://usehooks.com/useLockBodyScroll.
export function useLockBody() {
@@ -6,7 +6,7 @@ export function useLockBody() {
const originalStyle: string = window.getComputedStyle(
document.body,
).overflow
- document.body.style.overflow = 'hidden'
+ document.body.style.overflow = "hidden"
return () => (document.body.style.overflow = originalStyle)
}, [])
}
diff --git a/apps/web/hooks/use-media-query.tsx b/apps/web/hooks/use-media-query.tsx
index 57a0b5a5..eca86bf5 100644
--- a/apps/web/hooks/use-media-query.tsx
+++ b/apps/web/hooks/use-media-query.tsx
@@ -1,4 +1,4 @@
-import * as React from 'react'
+import * as React from "react"
export function useMediaQuery(query: string) {
const [value, setValue] = React.useState(false)
@@ -9,10 +9,10 @@ export function useMediaQuery(query: string) {
}
const result = matchMedia(query)
- result.addEventListener('change', onChange)
+ result.addEventListener("change", onChange)
setValue(result.matches)
- return () => result.removeEventListener('change', onChange)
+ return () => result.removeEventListener("change", onChange)
}, [query])
return value
diff --git a/apps/web/hooks/use-mounted.ts b/apps/web/hooks/use-mounted.ts
index cba2168b..d9c212ba 100644
--- a/apps/web/hooks/use-mounted.ts
+++ b/apps/web/hooks/use-mounted.ts
@@ -1,4 +1,4 @@
-import * as React from 'react'
+import * as React from "react"
export function useMounted() {
const [mounted, setMounted] = React.useState(false)
diff --git a/apps/web/hooks/use-mutation-observer.ts b/apps/web/hooks/use-mutation-observer.ts
index 485551e6..9223dde8 100644
--- a/apps/web/hooks/use-mutation-observer.ts
+++ b/apps/web/hooks/use-mutation-observer.ts
@@ -1,11 +1,15 @@
-import * as React from 'react'
+import * as React from "react"
-export function useMutationObserver(ref: React.MutableRefObject, callback: MutationCallback, options = {
- attributes: true,
- characterData: true,
- childList: true,
- subtree: true,
-}) {
+export function useMutationObserver(
+ ref: React.MutableRefObject,
+ callback: MutationCallback,
+ options = {
+ attributes: true,
+ characterData: true,
+ childList: true,
+ subtree: true,
+ },
+) {
React.useEffect(() => {
if (ref.current) {
const observer = new MutationObserver(callback)
diff --git a/apps/web/hooks/use-on-change.ts b/apps/web/hooks/use-on-change.ts
index 3e317f0a..24688422 100644
--- a/apps/web/hooks/use-on-change.ts
+++ b/apps/web/hooks/use-on-change.ts
@@ -1,6 +1,6 @@
-'use client'
+"use client"
-import { useState } from 'react'
+import { useState } from "react"
function isDifferent(a: unknown, b: unknown): boolean {
if (Array.isArray(a) && Array.isArray(b)) {
diff --git a/apps/web/hooks/use-themes-config.ts b/apps/web/hooks/use-themes-config.ts
index 737f08dc..840c98d4 100644
--- a/apps/web/hooks/use-themes-config.ts
+++ b/apps/web/hooks/use-themes-config.ts
@@ -1,14 +1,14 @@
-import { useAtom } from 'jotai'
-import { atomWithStorage } from 'jotai/utils'
+import { useAtom } from "jotai"
+import { atomWithStorage } from "jotai/utils"
-import type { Theme } from '~/lib/themes'
-import { THEMES } from '~/lib/themes'
+import type { Theme } from "~/lib/themes"
+import { THEMES } from "~/lib/themes"
interface ThemesConfig {
activeTheme: Theme
}
-const configAtom = atomWithStorage('themes:config', {
+const configAtom = atomWithStorage("themes:config", {
activeTheme: THEMES[0],
})
diff --git a/apps/web/lib/chart-themes.ts b/apps/web/lib/chart-themes.ts
index d767adc1..d3fe2d71 100644
--- a/apps/web/lib/chart-themes.ts
+++ b/apps/web/lib/chart-themes.ts
@@ -1,470 +1,470 @@
-import { themeColorsToCssVariables } from '~/lib/charts'
+import { themeColorsToCssVariables } from "~/lib/charts"
export const CHART_THEMES = [
{
- name: 'Default',
- id: 'default-nyxb',
+ name: "Default",
+ id: "default-nyxb",
colors: {
- 'background': '0 0% 100%',
- 'foreground': '240 10% 3.9%',
- 'card': '0 0% 100%',
- 'card-foreground': '240 10% 3.9%',
- 'popover': '0 0% 100%',
- 'popover-foreground': '240 10% 3.9%',
- 'primary': '240 5.9% 10%',
- 'primary-foreground': '0 0% 98%',
- 'secondary': '240 4.8% 95.9%',
- 'secondary-foreground': '240 5.9% 10%',
- 'muted': '240 4.8% 95.9%',
- 'muted-foreground': '240 3.8% 46.1%',
- 'accent': '240 4.8% 95.9%',
- 'accent-foreground': '240 5.9% 10%',
- 'destructive': '0 84.2% 60.2%',
- 'destructive-foreground': '0 0% 98%',
- 'border': '240 5.9% 90%',
- 'input': '240 5.9% 90%',
- 'ring': '240 10% 3.9%',
- 'chart-1': '173 58% 39%',
- 'chart-2': '12 76% 61%',
- 'chart-3': '197 37% 24%',
- 'chart-4': '43 74% 66%',
- 'chart-5': '27 87% 67%',
+ background: "0 0% 100%",
+ foreground: "240 10% 3.9%",
+ card: "0 0% 100%",
+ "card-foreground": "240 10% 3.9%",
+ popover: "0 0% 100%",
+ "popover-foreground": "240 10% 3.9%",
+ primary: "240 5.9% 10%",
+ "primary-foreground": "0 0% 98%",
+ secondary: "240 4.8% 95.9%",
+ "secondary-foreground": "240 5.9% 10%",
+ muted: "240 4.8% 95.9%",
+ "muted-foreground": "240 3.8% 46.1%",
+ accent: "240 4.8% 95.9%",
+ "accent-foreground": "240 5.9% 10%",
+ destructive: "0 84.2% 60.2%",
+ "destructive-foreground": "0 0% 98%",
+ border: "240 5.9% 90%",
+ input: "240 5.9% 90%",
+ ring: "240 10% 3.9%",
+ "chart-1": "173 58% 39%",
+ "chart-2": "12 76% 61%",
+ "chart-3": "197 37% 24%",
+ "chart-4": "43 74% 66%",
+ "chart-5": "27 87% 67%",
},
colorsDark: {
- 'background': '240 10% 3.9%',
- 'foreground': '0 0% 98%',
- 'card': '240 10% 3.9%',
- 'card-foreground': '0 0% 98%',
- 'popover': '240 10% 3.9%',
- 'popover-foreground': '0 0% 98%',
- 'primary': '0 0% 98%',
- 'primary-foreground': '240 5.9% 10%',
- 'secondary': '240 3.7% 15.9%',
- 'secondary-foreground': '0 0% 98%',
- 'muted': '240 3.7% 15.9%',
- 'muted-foreground': '240 5% 64.9%',
- 'accent': '240 3.7% 15.9%',
- 'accent-foreground': '0 0% 98%',
- 'destructive': '0 62.8% 30.6%',
- 'destructive-foreground': '0 0% 98%',
- 'border': '240 3.7% 15.9%',
- 'input': '240 3.7% 15.9%',
- 'ring': '240 4.9% 83.9%',
- 'chart-1': '220 70% 50%',
- 'chart-5': '160 60% 45%',
- 'chart-3': '30 80% 55%',
- 'chart-4': '280 65% 60%',
- 'chart-2': '340 75% 55%',
+ background: "240 10% 3.9%",
+ foreground: "0 0% 98%",
+ card: "240 10% 3.9%",
+ "card-foreground": "0 0% 98%",
+ popover: "240 10% 3.9%",
+ "popover-foreground": "0 0% 98%",
+ primary: "0 0% 98%",
+ "primary-foreground": "240 5.9% 10%",
+ secondary: "240 3.7% 15.9%",
+ "secondary-foreground": "0 0% 98%",
+ muted: "240 3.7% 15.9%",
+ "muted-foreground": "240 5% 64.9%",
+ accent: "240 3.7% 15.9%",
+ "accent-foreground": "0 0% 98%",
+ destructive: "0 62.8% 30.6%",
+ "destructive-foreground": "0 0% 98%",
+ border: "240 3.7% 15.9%",
+ input: "240 3.7% 15.9%",
+ ring: "240 4.9% 83.9%",
+ "chart-1": "220 70% 50%",
+ "chart-5": "160 60% 45%",
+ "chart-3": "30 80% 55%",
+ "chart-4": "280 65% 60%",
+ "chart-2": "340 75% 55%",
},
fontFamily: {
heading: {
- name: 'Inter',
- type: 'sans-serif',
+ name: "Inter",
+ type: "sans-serif",
},
body: {
- name: 'Inter',
- type: 'sans-serif',
+ name: "Inter",
+ type: "sans-serif",
},
},
radius: 0.5,
},
{
- name: 'Palette',
- id: 'default-palette',
+ name: "Palette",
+ id: "default-palette",
colors: {
- 'background': '0 0% 100%',
- 'foreground': '240 10% 3.9%',
- 'card': '0 0% 100%',
- 'card-foreground': '240 10% 3.9%',
- 'popover': '0 0% 100%',
- 'popover-foreground': '240 10% 3.9%',
- 'primary': '240 5.9% 10%',
- 'primary-foreground': '0 0% 98%',
- 'secondary': '240 4.8% 95.9%',
- 'secondary-foreground': '240 5.9% 10%',
- 'muted': '240 4.8% 95.9%',
- 'muted-foreground': '240 3.8% 46.1%',
- 'accent': '240 4.8% 95.9%',
- 'accent-foreground': '240 5.9% 10%',
- 'destructive': '0 84.2% 60.2%',
- 'destructive-foreground': '0 0% 98%',
- 'border': '240 5.9% 90%',
- 'input': '240 5.9% 90%',
- 'ring': '240 10% 3.9%',
- 'chart-1': '12 76% 61%',
- 'chart-2': '173 58% 39%',
- 'chart-3': '197 37% 24%',
- 'chart-4': '43 74% 66%',
- 'chart-5': '27 87% 67%',
+ background: "0 0% 100%",
+ foreground: "240 10% 3.9%",
+ card: "0 0% 100%",
+ "card-foreground": "240 10% 3.9%",
+ popover: "0 0% 100%",
+ "popover-foreground": "240 10% 3.9%",
+ primary: "240 5.9% 10%",
+ "primary-foreground": "0 0% 98%",
+ secondary: "240 4.8% 95.9%",
+ "secondary-foreground": "240 5.9% 10%",
+ muted: "240 4.8% 95.9%",
+ "muted-foreground": "240 3.8% 46.1%",
+ accent: "240 4.8% 95.9%",
+ "accent-foreground": "240 5.9% 10%",
+ destructive: "0 84.2% 60.2%",
+ "destructive-foreground": "0 0% 98%",
+ border: "240 5.9% 90%",
+ input: "240 5.9% 90%",
+ ring: "240 10% 3.9%",
+ "chart-1": "12 76% 61%",
+ "chart-2": "173 58% 39%",
+ "chart-3": "197 37% 24%",
+ "chart-4": "43 74% 66%",
+ "chart-5": "27 87% 67%",
},
colorsDark: {
- 'background': '240 10% 3.9%',
- 'foreground': '0 0% 98%',
- 'card': '240 10% 3.9%',
- 'card-foreground': '0 0% 98%',
- 'popover': '240 10% 3.9%',
- 'popover-foreground': '0 0% 98%',
- 'primary': '0 0% 98%',
- 'primary-foreground': '240 5.9% 10%',
- 'secondary': '240 3.7% 15.9%',
- 'secondary-foreground': '0 0% 98%',
- 'muted': '240 3.7% 15.9%',
- 'muted-foreground': '240 5% 64.9%',
- 'accent': '240 3.7% 15.9%',
- 'accent-foreground': '0 0% 98%',
- 'destructive': '0 62.8% 30.6%',
- 'destructive-foreground': '0 0% 98%',
- 'border': '240 3.7% 15.9%',
- 'input': '240 3.7% 15.9%',
- 'ring': '240 4.9% 83.9%',
- 'chart-1': '220 70% 50%',
- 'chart-2': '160 60% 45%',
- 'chart-3': '30 80% 55%',
- 'chart-4': '280 65% 60%',
- 'chart-5': '340 75% 55%',
+ background: "240 10% 3.9%",
+ foreground: "0 0% 98%",
+ card: "240 10% 3.9%",
+ "card-foreground": "0 0% 98%",
+ popover: "240 10% 3.9%",
+ "popover-foreground": "0 0% 98%",
+ primary: "0 0% 98%",
+ "primary-foreground": "240 5.9% 10%",
+ secondary: "240 3.7% 15.9%",
+ "secondary-foreground": "0 0% 98%",
+ muted: "240 3.7% 15.9%",
+ "muted-foreground": "240 5% 64.9%",
+ accent: "240 3.7% 15.9%",
+ "accent-foreground": "0 0% 98%",
+ destructive: "0 62.8% 30.6%",
+ "destructive-foreground": "0 0% 98%",
+ border: "240 3.7% 15.9%",
+ input: "240 3.7% 15.9%",
+ ring: "240 4.9% 83.9%",
+ "chart-1": "220 70% 50%",
+ "chart-2": "160 60% 45%",
+ "chart-3": "30 80% 55%",
+ "chart-4": "280 65% 60%",
+ "chart-5": "340 75% 55%",
},
fontFamily: {
heading: {
- name: 'Inter',
- type: 'sans-serif',
+ name: "Inter",
+ type: "sans-serif",
},
body: {
- name: 'Inter',
- type: 'sans-serif',
+ name: "Inter",
+ type: "sans-serif",
},
},
radius: 0.5,
},
{
- name: 'Sapphire',
- id: 'default-sapphire',
+ name: "Sapphire",
+ id: "default-sapphire",
colors: {
- 'background': '0 0% 100%',
- 'foreground': '222.2 84% 4.9%',
- 'card': '0 0% 100%',
- 'cardForeground': '222.2 84% 4.9%',
- 'popover': '0 0% 100%',
- 'popoverForeground': '222.2 84% 4.9%',
- 'primary': '221.2 83.2% 53.3%',
- 'primaryForeground': '210 40% 98%',
- 'secondary': '210 40% 96.1%',
- 'secondaryForeground': '222.2 47.4% 11.2%',
- 'muted': '210 40% 96.1%',
- 'mutedForeground': '215.4 16.3% 44%',
- 'accent': '210 40% 96.1%',
- 'accentForeground': '222.2 47.4% 11.2%',
- 'destructive': '0 72% 51%',
- 'destructiveForeground': '210 40% 98%',
- 'border': '214.3 31.8% 91.4%',
- 'input': '214.3 31.8% 91.4%',
- 'ring': '221.2 83.2% 53.3%',
- 'chart-1': '221.2 83.2% 53.3%',
- 'chart-2': '212 95% 68%',
- 'chart-3': '216 92% 60%',
- 'chart-4': '210 98% 78%',
- 'chart-5': '212 97% 87%',
+ background: "0 0% 100%",
+ foreground: "222.2 84% 4.9%",
+ card: "0 0% 100%",
+ cardForeground: "222.2 84% 4.9%",
+ popover: "0 0% 100%",
+ popoverForeground: "222.2 84% 4.9%",
+ primary: "221.2 83.2% 53.3%",
+ primaryForeground: "210 40% 98%",
+ secondary: "210 40% 96.1%",
+ secondaryForeground: "222.2 47.4% 11.2%",
+ muted: "210 40% 96.1%",
+ mutedForeground: "215.4 16.3% 44%",
+ accent: "210 40% 96.1%",
+ accentForeground: "222.2 47.4% 11.2%",
+ destructive: "0 72% 51%",
+ destructiveForeground: "210 40% 98%",
+ border: "214.3 31.8% 91.4%",
+ input: "214.3 31.8% 91.4%",
+ ring: "221.2 83.2% 53.3%",
+ "chart-1": "221.2 83.2% 53.3%",
+ "chart-2": "212 95% 68%",
+ "chart-3": "216 92% 60%",
+ "chart-4": "210 98% 78%",
+ "chart-5": "212 97% 87%",
},
colorsDark: {
- 'background': '240 10% 3.9%',
- 'foreground': '0 0% 98%',
- 'card': '240 10% 3.9%',
- 'card-foreground': '0 0% 98%',
- 'popover': '240 10% 3.9%',
- 'popover-foreground': '0 0% 98%',
- 'primary': '221.2 83.2% 53.3%',
- 'primaryForeground': '210 40% 98%',
- 'secondary': '210 40% 96.1%',
- 'secondaryForeground': '222.2 47.4% 11.2%',
- 'muted': '240 3.7% 15.9%',
- 'muted-foreground': '240 5% 64.9%',
- 'accent': '210 40% 96.1%',
- 'accentForeground': '222.2 47.4% 11.2%',
- 'destructive': '0 72% 51%',
- 'destructiveForeground': '210 40% 98%',
- 'border': '240 3.7% 15.9%',
- 'input': '240 3.7% 15.9%',
- 'ring': '221.2 83.2% 53.3%',
- 'chart-1': '221.2 83.2% 53.3%',
- 'chart-2': '212 95% 68%',
- 'chart-3': '216 92% 60%',
- 'chart-4': '210 98% 78%',
- 'chart-5': '212 97% 87%',
+ background: "240 10% 3.9%",
+ foreground: "0 0% 98%",
+ card: "240 10% 3.9%",
+ "card-foreground": "0 0% 98%",
+ popover: "240 10% 3.9%",
+ "popover-foreground": "0 0% 98%",
+ primary: "221.2 83.2% 53.3%",
+ primaryForeground: "210 40% 98%",
+ secondary: "210 40% 96.1%",
+ secondaryForeground: "222.2 47.4% 11.2%",
+ muted: "240 3.7% 15.9%",
+ "muted-foreground": "240 5% 64.9%",
+ accent: "210 40% 96.1%",
+ accentForeground: "222.2 47.4% 11.2%",
+ destructive: "0 72% 51%",
+ destructiveForeground: "210 40% 98%",
+ border: "240 3.7% 15.9%",
+ input: "240 3.7% 15.9%",
+ ring: "221.2 83.2% 53.3%",
+ "chart-1": "221.2 83.2% 53.3%",
+ "chart-2": "212 95% 68%",
+ "chart-3": "216 92% 60%",
+ "chart-4": "210 98% 78%",
+ "chart-5": "212 97% 87%",
},
fontFamily: {
heading: {
- name: 'Inter',
- type: 'sans-serif',
+ name: "Inter",
+ type: "sans-serif",
},
body: {
- name: 'Inter',
- type: 'sans-serif',
+ name: "Inter",
+ type: "sans-serif",
},
},
radius: 0.5,
},
{
- name: 'Ruby',
- id: 'default-ruby',
+ name: "Ruby",
+ id: "default-ruby",
colors: {
- 'background': '0 0% 100%',
- 'foreground': '240 10% 3.9%',
- 'card': '0 0% 100%',
- 'cardForeground': '240 10% 3.9%',
- 'popover': '0 0% 100%',
- 'popoverForeground': '240 10% 3.9%',
- 'primary': '346.8 77.2% 49.8%',
- 'primaryForeground': '355.7 100% 99%',
- 'secondary': '240 4.8% 95.9%',
- 'secondaryForeground': '240 5.9% 10%',
- 'muted': '240 4.8% 95.9%',
- 'mutedForeground': '240 3.8% 45%',
- 'accent': '240 4.8% 95.9%',
- 'accentForeground': '240 5.9% 10%',
- 'destructive': '0 72% 51%',
- 'destructiveForeground': '0 0% 98%',
- 'border': '240 5.9% 90%',
- 'input': '240 5.9% 90%',
- 'ring': '346.8 77.2% 49.8%',
- 'chart-1': '347 77% 50%',
- 'chart-2': '352 83% 91%',
- 'chart-3': '350 80% 72%',
- 'chart-4': '351 83% 82%',
- 'chart-5': '349 77% 62%',
+ background: "0 0% 100%",
+ foreground: "240 10% 3.9%",
+ card: "0 0% 100%",
+ cardForeground: "240 10% 3.9%",
+ popover: "0 0% 100%",
+ popoverForeground: "240 10% 3.9%",
+ primary: "346.8 77.2% 49.8%",
+ primaryForeground: "355.7 100% 99%",
+ secondary: "240 4.8% 95.9%",
+ secondaryForeground: "240 5.9% 10%",
+ muted: "240 4.8% 95.9%",
+ mutedForeground: "240 3.8% 45%",
+ accent: "240 4.8% 95.9%",
+ accentForeground: "240 5.9% 10%",
+ destructive: "0 72% 51%",
+ destructiveForeground: "0 0% 98%",
+ border: "240 5.9% 90%",
+ input: "240 5.9% 90%",
+ ring: "346.8 77.2% 49.8%",
+ "chart-1": "347 77% 50%",
+ "chart-2": "352 83% 91%",
+ "chart-3": "350 80% 72%",
+ "chart-4": "351 83% 82%",
+ "chart-5": "349 77% 62%",
},
colorsDark: {
- 'background': '240 10% 3.9%',
- 'foreground': '0 0% 98%',
- 'card': '240 10% 3.9%',
- 'card-foreground': '0 0% 98%',
- 'popover': '240 10% 3.9%',
- 'popover-foreground': '0 0% 98%',
- 'primary': '346.8 77.2% 49.8%',
- 'primaryForeground': '355.7 100% 99%',
- 'secondary': '240 4.8% 95.9%',
- 'secondaryForeground': '240 5.9% 10%',
- 'muted': '240 3.7% 15.9%',
- 'muted-foreground': '240 5% 64.9%',
- 'accent': '240 4.8% 95.9%',
- 'accentForeground': '240 5.9% 10%',
- 'destructive': '0 72% 51%',
- 'destructiveForeground': '0 0% 98%',
- 'border': '240 3.7% 15.9%',
- 'input': '240 3.7% 15.9%',
- 'ring': '221.2 83.2% 53.3%',
- 'chart-1': '347 77% 50%',
- 'chart-2': '349 77% 62%',
- 'chart-3': '350 80% 72%',
- 'chart-4': '351 83% 82%',
- 'chart-5': '352 83% 91%',
+ background: "240 10% 3.9%",
+ foreground: "0 0% 98%",
+ card: "240 10% 3.9%",
+ "card-foreground": "0 0% 98%",
+ popover: "240 10% 3.9%",
+ "popover-foreground": "0 0% 98%",
+ primary: "346.8 77.2% 49.8%",
+ primaryForeground: "355.7 100% 99%",
+ secondary: "240 4.8% 95.9%",
+ secondaryForeground: "240 5.9% 10%",
+ muted: "240 3.7% 15.9%",
+ "muted-foreground": "240 5% 64.9%",
+ accent: "240 4.8% 95.9%",
+ accentForeground: "240 5.9% 10%",
+ destructive: "0 72% 51%",
+ destructiveForeground: "0 0% 98%",
+ border: "240 3.7% 15.9%",
+ input: "240 3.7% 15.9%",
+ ring: "221.2 83.2% 53.3%",
+ "chart-1": "347 77% 50%",
+ "chart-2": "349 77% 62%",
+ "chart-3": "350 80% 72%",
+ "chart-4": "351 83% 82%",
+ "chart-5": "352 83% 91%",
},
fontFamily: {
heading: {
- name: 'Inter',
- type: 'sans-serif',
+ name: "Inter",
+ type: "sans-serif",
},
body: {
- name: 'Inter',
- type: 'sans-serif',
+ name: "Inter",
+ type: "sans-serif",
},
},
radius: 0.5,
},
{
- name: 'Emerald',
- id: 'default-emerald',
+ name: "Emerald",
+ id: "default-emerald",
colors: {
- 'background': '0 0% 100%',
- 'foreground': '240 10% 3.9%',
- 'card': '0 0% 100%',
- 'cardForeground': '240 10% 3.9%',
- 'popover': '0 0% 100%',
- 'popoverForeground': '240 10% 3.9%',
- 'primary': '142 86% 28%',
- 'primaryForeground': '356 29% 98%',
- 'secondary': '240 4.8% 95.9%',
- 'secondaryForeground': '240 5.9% 10%',
- 'muted': '240 4.8% 95.9%',
- 'mutedForeground': '240 3.8% 45%',
- 'accent': '240 4.8% 95.9%',
- 'accentForeground': '240 5.9% 10%',
- 'destructive': '0 72% 51%',
- 'destructiveForeground': '0 0% 98%',
- 'border': '240 5.9% 90%',
- 'input': '240 5.9% 90%',
- 'ring': '142 86% 28%',
- 'chart-1': '139 65% 20%',
- 'chart-2': '140 74% 44%',
- 'chart-3': '142 88% 28%',
- 'chart-4': '137 55% 15%',
- 'chart-5': '141 40% 9%',
+ background: "0 0% 100%",
+ foreground: "240 10% 3.9%",
+ card: "0 0% 100%",
+ cardForeground: "240 10% 3.9%",
+ popover: "0 0% 100%",
+ popoverForeground: "240 10% 3.9%",
+ primary: "142 86% 28%",
+ primaryForeground: "356 29% 98%",
+ secondary: "240 4.8% 95.9%",
+ secondaryForeground: "240 5.9% 10%",
+ muted: "240 4.8% 95.9%",
+ mutedForeground: "240 3.8% 45%",
+ accent: "240 4.8% 95.9%",
+ accentForeground: "240 5.9% 10%",
+ destructive: "0 72% 51%",
+ destructiveForeground: "0 0% 98%",
+ border: "240 5.9% 90%",
+ input: "240 5.9% 90%",
+ ring: "142 86% 28%",
+ "chart-1": "139 65% 20%",
+ "chart-2": "140 74% 44%",
+ "chart-3": "142 88% 28%",
+ "chart-4": "137 55% 15%",
+ "chart-5": "141 40% 9%",
},
colorsDark: {
- 'background': '240 10% 3.9%',
- 'foreground': '0 0% 98%',
- 'card': '240 10% 3.9%',
- 'card-foreground': '0 0% 98%',
- 'popover': '240 10% 3.9%',
- 'popover-foreground': '0 0% 98%',
- 'primary': '142 86% 28%',
- 'primaryForeground': '356 29% 98%',
- 'secondary': '240 4.8% 95.9%',
- 'secondaryForeground': '240 5.9% 10%',
- 'muted': '240 3.7% 15.9%',
- 'muted-foreground': '240 5% 64.9%',
- 'accent': '240 4.8% 95.9%',
- 'accentForeground': '240 5.9% 10%',
- 'destructive': '0 72% 51%',
- 'destructiveForeground': '0 0% 98%',
- 'border': '240 3.7% 15.9%',
- 'input': '240 3.7% 15.9%',
- 'ring': '142 86% 28%',
- 'chart-1': '142 88% 28%',
- 'chart-2': '139 65% 20%',
- 'chart-3': '140 74% 24%',
- 'chart-4': '137 55% 15%',
- 'chart-5': '141 40% 9%',
+ background: "240 10% 3.9%",
+ foreground: "0 0% 98%",
+ card: "240 10% 3.9%",
+ "card-foreground": "0 0% 98%",
+ popover: "240 10% 3.9%",
+ "popover-foreground": "0 0% 98%",
+ primary: "142 86% 28%",
+ primaryForeground: "356 29% 98%",
+ secondary: "240 4.8% 95.9%",
+ secondaryForeground: "240 5.9% 10%",
+ muted: "240 3.7% 15.9%",
+ "muted-foreground": "240 5% 64.9%",
+ accent: "240 4.8% 95.9%",
+ accentForeground: "240 5.9% 10%",
+ destructive: "0 72% 51%",
+ destructiveForeground: "0 0% 98%",
+ border: "240 3.7% 15.9%",
+ input: "240 3.7% 15.9%",
+ ring: "142 86% 28%",
+ "chart-1": "142 88% 28%",
+ "chart-2": "139 65% 20%",
+ "chart-3": "140 74% 24%",
+ "chart-4": "137 55% 15%",
+ "chart-5": "141 40% 9%",
},
fontFamily: {
heading: {
- name: 'Inter',
- type: 'sans-serif',
+ name: "Inter",
+ type: "sans-serif",
},
body: {
- name: 'Inter',
- type: 'sans-serif',
+ name: "Inter",
+ type: "sans-serif",
},
},
radius: 0.5,
},
{
- name: 'Daylight',
- id: 'default-daylight',
+ name: "Daylight",
+ id: "default-daylight",
colors: {
- 'background': '36 39% 88%',
- 'foreground': '36 45% 15%',
- 'primary': '36 45% 70%',
- 'primaryForeground': '36 45% 11%',
- 'secondary': '40 35% 77%',
- 'secondaryForeground': '36 45% 25%',
- 'accent': '36 64% 57%',
- 'accentForeground': '36 72% 17%',
- 'destructive': '0 84% 37%',
- 'destructiveForeground': '0 0% 98%',
- 'muted': '36 33% 75%',
- 'mutedForeground': '36 45% 25%',
- 'card': '36 46% 82%',
- 'cardForeground': '36 45% 20%',
- 'popover': '0 0% 100%',
- 'popoverForeground': '240 10% 3.9%',
- 'border': '36 45% 60%',
- 'input': '36 45% 60%',
- 'ring': '36 45% 30%',
- 'chart-1': '25 34% 28%',
- 'chart-2': '26 36% 34%',
- 'chart-3': '28 40% 40%',
- 'chart-4': '31 41% 48%',
- 'chart-5': '35 43% 53%',
+ background: "36 39% 88%",
+ foreground: "36 45% 15%",
+ primary: "36 45% 70%",
+ primaryForeground: "36 45% 11%",
+ secondary: "40 35% 77%",
+ secondaryForeground: "36 45% 25%",
+ accent: "36 64% 57%",
+ accentForeground: "36 72% 17%",
+ destructive: "0 84% 37%",
+ destructiveForeground: "0 0% 98%",
+ muted: "36 33% 75%",
+ mutedForeground: "36 45% 25%",
+ card: "36 46% 82%",
+ cardForeground: "36 45% 20%",
+ popover: "0 0% 100%",
+ popoverForeground: "240 10% 3.9%",
+ border: "36 45% 60%",
+ input: "36 45% 60%",
+ ring: "36 45% 30%",
+ "chart-1": "25 34% 28%",
+ "chart-2": "26 36% 34%",
+ "chart-3": "28 40% 40%",
+ "chart-4": "31 41% 48%",
+ "chart-5": "35 43% 53%",
},
colorsDark: {
- 'background': '36 39% 88%',
- 'foreground': '36 45% 15%',
- 'primary': '36 45% 70%',
- 'primaryForeground': '36 45% 11%',
- 'secondary': '40 35% 77%',
- 'secondaryForeground': '36 45% 25%',
- 'accent': '36 64% 57%',
- 'accentForeground': '36 72% 17%',
- 'destructive': '0 84% 37%',
- 'destructiveForeground': '0 0% 98%',
- 'muted': '36 33% 75%',
- 'mutedForeground': '36 45% 25%',
- 'card': '36 46% 82%',
- 'cardForeground': '36 45% 20%',
- 'popover': '0 0% 100%',
- 'popoverForeground': '240 10% 3.9%',
- 'border': '36 45% 60%',
- 'input': '36 45% 60%',
- 'ring': '36 45% 30%',
- 'chart-1': '25 34% 28%',
- 'chart-2': '26 36% 34%',
- 'chart-3': '28 40% 40%',
- 'chart-4': '31 41% 48%',
- 'chart-5': '35 43% 53%',
+ background: "36 39% 88%",
+ foreground: "36 45% 15%",
+ primary: "36 45% 70%",
+ primaryForeground: "36 45% 11%",
+ secondary: "40 35% 77%",
+ secondaryForeground: "36 45% 25%",
+ accent: "36 64% 57%",
+ accentForeground: "36 72% 17%",
+ destructive: "0 84% 37%",
+ destructiveForeground: "0 0% 98%",
+ muted: "36 33% 75%",
+ mutedForeground: "36 45% 25%",
+ card: "36 46% 82%",
+ cardForeground: "36 45% 20%",
+ popover: "0 0% 100%",
+ popoverForeground: "240 10% 3.9%",
+ border: "36 45% 60%",
+ input: "36 45% 60%",
+ ring: "36 45% 30%",
+ "chart-1": "25 34% 28%",
+ "chart-2": "26 36% 34%",
+ "chart-3": "28 40% 40%",
+ "chart-4": "31 41% 48%",
+ "chart-5": "35 43% 53%",
},
fontFamily: {
heading: {
- name: 'DM Sans',
- type: 'sans-serif',
+ name: "DM Sans",
+ type: "sans-serif",
},
body: {
- name: 'Space Mono',
- type: 'monospace',
+ name: "Space Mono",
+ type: "monospace",
},
},
},
{
- name: 'Midnight',
- id: 'default-midnight',
+ name: "Midnight",
+ id: "default-midnight",
colors: {
- 'background': '240 5% 6%',
- 'foreground': '60 5% 90%',
- 'primary': '240 0% 90%',
- 'primaryForeground': '60 0% 0%',
- 'secondary': '240 4% 15%',
- 'secondaryForeground': '60 5% 85%',
- 'accent': '240 0% 13%',
- 'accentForeground': '60 0% 100%',
- 'destructive': '0 60% 50%',
- 'destructiveForeground': '0 0% 98%',
- 'muted': '240 5% 25%',
- 'mutedForeground': '60 5% 85%',
- 'card': '240 4% 10%',
- 'cardForeground': '60 5% 90%',
- 'popover': '240 5% 15%',
- 'popoverForeground': '60 5% 85%',
- 'border': '240 6% 20%',
- 'input': '240 6% 20%',
- 'ring': '240 5% 90%',
- 'chart-1': '359 2% 90%',
- 'chart-2': '240 1% 74%',
- 'chart-3': '240 1% 58%',
- 'chart-4': '240 1% 42%',
- 'chart-5': '240 2% 26%',
+ background: "240 5% 6%",
+ foreground: "60 5% 90%",
+ primary: "240 0% 90%",
+ primaryForeground: "60 0% 0%",
+ secondary: "240 4% 15%",
+ secondaryForeground: "60 5% 85%",
+ accent: "240 0% 13%",
+ accentForeground: "60 0% 100%",
+ destructive: "0 60% 50%",
+ destructiveForeground: "0 0% 98%",
+ muted: "240 5% 25%",
+ mutedForeground: "60 5% 85%",
+ card: "240 4% 10%",
+ cardForeground: "60 5% 90%",
+ popover: "240 5% 15%",
+ popoverForeground: "60 5% 85%",
+ border: "240 6% 20%",
+ input: "240 6% 20%",
+ ring: "240 5% 90%",
+ "chart-1": "359 2% 90%",
+ "chart-2": "240 1% 74%",
+ "chart-3": "240 1% 58%",
+ "chart-4": "240 1% 42%",
+ "chart-5": "240 2% 26%",
},
colorsDark: {
- 'background': '240 5% 6%',
- 'foreground': '60 5% 90%',
- 'primary': '240 0% 90%',
- 'primaryForeground': '60 0% 0%',
- 'secondary': '240 4% 15%',
- 'secondaryForeground': '60 5% 85%',
- 'accent': '240 0% 13%',
- 'accentForeground': '60 0% 100%',
- 'destructive': '0 60% 50%',
- 'destructiveForeground': '0 0% 98%',
- 'muted': '240 5% 25%',
- 'mutedForeground': '60 5% 85%',
- 'card': '240 4% 10%',
- 'cardForeground': '60 5% 90%',
- 'popover': '240 5% 15%',
- 'popoverForeground': '60 5% 85%',
- 'border': '240 6% 20%',
- 'input': '240 6% 20%',
- 'ring': '240 5% 90%',
- 'chart-1': '359 2% 90%',
- 'chart-2': '240 1% 74%',
- 'chart-3': '240 1% 58%',
- 'chart-4': '240 1% 42%',
- 'chart-5': '240 2% 26%',
+ background: "240 5% 6%",
+ foreground: "60 5% 90%",
+ primary: "240 0% 90%",
+ primaryForeground: "60 0% 0%",
+ secondary: "240 4% 15%",
+ secondaryForeground: "60 5% 85%",
+ accent: "240 0% 13%",
+ accentForeground: "60 0% 100%",
+ destructive: "0 60% 50%",
+ destructiveForeground: "0 0% 98%",
+ muted: "240 5% 25%",
+ mutedForeground: "60 5% 85%",
+ card: "240 4% 10%",
+ cardForeground: "60 5% 90%",
+ popover: "240 5% 15%",
+ popoverForeground: "60 5% 85%",
+ border: "240 6% 20%",
+ input: "240 6% 20%",
+ ring: "240 5% 90%",
+ "chart-1": "359 2% 90%",
+ "chart-2": "240 1% 74%",
+ "chart-3": "240 1% 58%",
+ "chart-4": "240 1% 42%",
+ "chart-5": "240 2% 26%",
},
fontFamily: {
heading: {
- name: 'Manrope',
- type: 'sans-serif',
+ name: "Manrope",
+ type: "sans-serif",
},
body: {
- name: 'Manrope',
- type: 'sans-serif',
+ name: "Manrope",
+ type: "sans-serif",
},
},
radius: 0.5,
@@ -474,7 +474,7 @@ export const CHART_THEMES = [
export type ChartTheme = ReturnType[number]
export function getChartThemes() {
- return CHART_THEMES.map(theme => ({
+ return CHART_THEMES.map((theme) => ({
...theme,
cssVars: {
light: themeColorsToCssVariables(theme.colors),
diff --git a/apps/web/lib/charts.ts b/apps/web/lib/charts.ts
index 1489b007..9b26840a 100644
--- a/apps/web/lib/charts.ts
+++ b/apps/web/lib/charts.ts
@@ -3,13 +3,12 @@ export function themeColorsToCssVariables(
): Record {
const cssVars = colors
? Object.fromEntries(
- Object.entries(colors).map(([name, value]) => {
- if (value === undefined)
- return []
- const cssName = themeColorNameToCssVariable(name)
- return [cssName, value]
- }),
- )
+ Object.entries(colors).map(([name, value]) => {
+ if (value === undefined) return []
+ const cssName = themeColorNameToCssVariable(name)
+ return [cssName, value]
+ }),
+ )
: {}
// for (const key of Array.from({ length: 5 }, (_, index) => index)) {
@@ -22,5 +21,5 @@ export function themeColorsToCssVariables(
}
export function themeColorNameToCssVariable(name: string) {
- return `--${name.replace(/([a-z])([A-Z])/g, '$1-$2').toLowerCase()}`
+ return `--${name.replace(/([a-z])([A-Z])/g, "$1-$2").toLowerCase()}`
}
diff --git a/apps/web/lib/colors.ts b/apps/web/lib/colors.ts
index 21326702..f9f30341 100644
--- a/apps/web/lib/colors.ts
+++ b/apps/web/lib/colors.ts
@@ -1,6 +1,6 @@
-import { z } from 'zod'
+import { z } from "zod"
-import { colors } from '~/registry/registry-colors'
+import { colors } from "~/registry/registry-colors"
const colorSchema = z.object({
name: z.string(),
@@ -44,7 +44,7 @@ export function getColors() {
colors: color.map((color) => {
const rgb = color.rgb.replace(
/^rgb\((\d+),(\d+),(\d+)\)$/,
- '$1 $2 $3',
+ "$1 $2 $3",
)
return {
@@ -55,7 +55,7 @@ export function getColors() {
rgb,
hsl: color.hsl.replace(
/^hsl\(([\d.]+),([\d.]+%),([\d.]+%)\)$/,
- '$1 $2 $3',
+ "$1 $2 $3",
),
foreground: getForegroundFromBackground(rgb),
}
@@ -68,20 +68,18 @@ export function getColors() {
return tailwindColors
}
-export type Color = ReturnType[number]['colors'][number]
+export type Color = ReturnType[number]["colors"][number]
function getForegroundFromBackground(rgb: string) {
- const [r, g, b] = rgb.split(' ').map(Number)
+ const [r, g, b] = rgb.split(" ").map(Number)
function toLinear(number: number): number {
const base = number / 255
- return base <= 0.04045
- ? base / 12.92
- : ((base + 0.055) / 1.055) ** 2.4
+ return base <= 0.04045 ? base / 12.92 : ((base + 0.055) / 1.055) ** 2.4
}
- const luminance
- = 0.2126 * toLinear(r) + 0.7152 * toLinear(g) + 0.0722 * toLinear(b)
+ const luminance =
+ 0.2126 * toLinear(r) + 0.7152 * toLinear(g) + 0.0722 * toLinear(b)
- return luminance > 0.179 ? '#000' : '#fff'
+ return luminance > 0.179 ? "#000" : "#fff"
}
diff --git a/apps/web/lib/events.ts b/apps/web/lib/events.ts
index 9ea8dbcf..9c185352 100644
--- a/apps/web/lib/events.ts
+++ b/apps/web/lib/events.ts
@@ -1,20 +1,20 @@
-import va from '@vercel/analytics'
-import { z } from 'zod'
+import va from "@vercel/analytics"
+import { z } from "zod"
const eventSchema = z.object({
name: z.enum([
- 'copy_npm_command',
- 'copy_usage_import_code',
- 'copy_usage_code',
- 'copy_primitive_code',
- 'copy_theme_code',
- 'copy_block_code',
- 'copy_chunk_code',
- 'enable_lift_mode',
- 'copy_chart_code',
- 'copy_chart_theme',
- 'copy_chart_data',
- 'copy_color',
+ "copy_npm_command",
+ "copy_usage_import_code",
+ "copy_usage_code",
+ "copy_primitive_code",
+ "copy_theme_code",
+ "copy_block_code",
+ "copy_chunk_code",
+ "enable_lift_mode",
+ "copy_chart_code",
+ "copy_chart_theme",
+ "copy_chart_data",
+ "copy_color",
]),
// declare type AllowedPropertyValues = string | number | boolean | null
properties: z
diff --git a/apps/web/lib/fonts.ts b/apps/web/lib/fonts.ts
index 6f0e909f..b86baae6 100644
--- a/apps/web/lib/fonts.ts
+++ b/apps/web/lib/fonts.ts
@@ -1,9 +1,9 @@
-import { GeistSans } from 'geist/font/sans'
-import { JetBrains_Mono as FontMono } from 'next/font/google'
+import { GeistSans } from "geist/font/sans"
+import { JetBrains_Mono as FontMono } from "next/font/google"
export const fontSans = GeistSans
export const fontMono = FontMono({
- subsets: ['latin'],
- variable: '--font-mono',
+ subsets: ["latin"],
+ variable: "--font-mono",
})
diff --git a/apps/web/lib/highlighter-theme.json b/apps/web/lib/highlighter-theme.json
index d1a46c3b..2d0cf748 100644
--- a/apps/web/lib/highlighter-theme.json
+++ b/apps/web/lib/highlighter-theme.json
@@ -1,380 +1,380 @@
{
- "name": "Lambda Studio — Blackout",
- "semanticHighlighting": true,
- "colors": {
- "editorLink.activeForeground": "#ca8a0488",
- "foreground": "#fff8",
- "button.background": "#fff",
- "button.foreground": "#000",
- "button.hoverBackground": "#fffb",
- "list.highlightForeground": "#fff",
- "textLink.foreground": "#fff",
- "scrollbar.shadow": "#000",
- "textLink.activeForeground": "#fff8",
- "editor.lineHighlightBackground": "#8881",
- "editor.lineHighlightBorder": "#8882",
- "editorCursor.foreground": "#fff",
- "editor.findMatchBackground": "#fff8",
- "editor.findMatchHighlightBackground": "#fff2",
- "list.activeSelectionForeground": "#fff",
- "list.focusForeground": "#fff",
- "list.hoverForeground": "#fff",
- "list.inactiveSelectionForeground": "#fff",
- "list.inactiveSelectionBackground": "#000",
- "list.focusBackground": "#000",
- "list.focusAndSelectionOutline": "#000",
- "list.focusHighlightForeground": "#fff",
- "list.hoverBackground": "#000",
- "list.focusOutline": "#000",
- "list.activeSelectionBackground": "#000",
- "editorIndentGuide.background": "#fff2",
- "editor.background": "#000",
- "editor.foreground": "#fff",
- "editor.foldBackground": "#000",
- "editor.hoverHighlightBackground": "#000",
- "editor.selectionBackground": "#8888",
- "editor.inactiveSelectionBackground": "#8882",
- "gitDecoration.modifiedResourceForeground": "#fff",
- "gitDecoration.untrackedResourceForeground": "#a7cb7b",
- "gitDecoration.conflictingResourceForeground": "#ca8a04",
- "gitDecoration.deletedResourceForeground": "#c97b89",
- "listFilterWidget.background": "#000",
- "input.background": "#fff1",
- "titleBar.activeForeground": "#fff",
- "editorWidget.background": "#000",
- "editorGutter.background": "#000",
- "debugToolBar.background": "#000",
- "commandCenter.background": "#000",
- "sideBarSectionHeader.background": "#000",
- "focusBorder": "#fff8",
- "titleBar.activeBackground": "#000",
- "titleBar.inactiveBackground": "#000",
- "breadcrumb.background": "#000",
- "activityBar.background": "#000",
- "activityBar.foreground": "#fff8",
- "panel.background": "#000",
- "sideBar.background": "#000",
- "sideBarTitle.foreground": "#fff8",
- "tab.hoverBackground": "#000",
- "terminal.background": "#000",
- "statusBar.background": "#000",
- "statusBar.foreground": "#fff8",
- "selection.background": "#fff2",
- "editorPane.background": "#000",
- "badge.background": "#000",
- "banner.background": "#000",
- "menu.background": "#000",
- "activityBarBadge.background": "#000",
- "activityBarBadge.foreground": "#fff8",
- "editorLineNumber.foreground": "#fff2",
- "editorLineNumber.activeForeground": "#fff8",
- "statusBarItem.errorBackground": "#f43f5e"
- },
- "semanticTokenColors": {
- "comment": {
- "foreground": "#fff4"
- },
- "keyword": {
- "foreground": "#fff8"
- },
- "string": {
- "foreground": "#fff8"
- },
- "selfKeyword": {
- "foreground": "#fff",
- "bold": true
- },
- "method.declaration": {
- "foreground": "#fff",
- "bold": true
- },
- "method.definition": {
- "foreground": "#fff",
- "bold": true
- },
- "method": {
- "foreground": "#fff",
- "bold": false
- },
- "function.declaration": {
- "foreground": "#fff",
- "bold": true
- },
- "function.definition": {
- "foreground": "#fff",
- "bold": true
- },
- "function": {
- "foreground": "#fff",
- "bold": false
- },
- "property": {
- "foreground": "#fff"
- },
- "enumMember": {
+ "name": "Lambda Studio — Blackout",
+ "semanticHighlighting": true,
+ "colors": {
+ "editorLink.activeForeground": "#ca8a0488",
"foreground": "#fff8",
- "bold": false
- },
- "enum": {
- "foreground": "#fff",
- "bold": true
- },
- "boolean": {
- "foreground": "#fff8"
- },
- "number": {
- "foreground": "#fff8"
- },
- "type": {
- "foreground": "#fff",
- "bold": true
- },
- "typeAlias": {
- "foreground": "#fff",
- "bold": true
- },
- "class": {
- "foreground": "#fff",
- "bold": true
- },
- "selfTypeKeyword": {
- "foreground": "#fff",
- "bold": true
- },
- "builtinType": {
- "foreground": "#fff",
- "bold": true
- },
- "interface": {
- "foreground": "#fff8",
- "bold": false
- },
- "typeParameter": {
- "foreground": "#fff",
- "bold": true
- },
- "lifetime": {
- "foreground": "#fff8",
- "italic": false,
- "bold": false
- },
- "namespace": {
- "foreground": "#fff"
- },
- "macro": {
- "foreground": "#fff",
- "bold": false
- },
- "decorator": {
- "foreground": "#fff",
- "bold": false
- },
- "builtinAttribute": {
- "foreground": "#fff",
- "bold": false
- },
- "generic.attribute": {
- "foreground": "#fff"
- },
- "derive": {
- "foreground": "#fff"
- },
- "operator": {
- "foreground": "#fff8"
- },
- "variable": {
- "foreground": "#fff"
- },
- "variable.readonly": {
- "foreground": "#fff8"
- },
- "parameter": {
- "foreground": "#fff"
- },
- "variable.mutable": {
- "underline": true
- },
- "parameter.mutable": {
- "underline": true
- },
- "selfKeyword.mutable": {
- "underline": true
- },
- "variable.constant": {
- "foreground": "#fff8"
- },
- "struct": {
- "foreground": "#fff",
- "bold": true
- }
- },
- "tokenColors": [
- {
- "name": "Fallback Operator",
- "scope": ["keyword.operator"],
- "settings": {
- "foreground": "#fff8"
- }
- },
- {
- "name": "Fallback keywords",
- "scope": [
- "storage.type.ts",
- "keyword",
- "keyword.other",
- "keyword.control",
- "storage.type",
- "storage.modifier"
- ],
- "settings": {
- "foreground": "#fff8"
- }
- },
- {
- "name": "Fallback strings",
- "scope": ["string"],
- "settings": {
- "foreground": "#fff8"
- }
- },
- {
- "name": "Fallback JSON Properties",
- "scope": ["support.type.property-name.json"],
- "settings": {
- "foreground": "#fff"
- }
- },
- {
- "name": "Fallback string variables",
- "scope": ["string variable", "string meta.interpolation"],
- "settings": {
- "foreground": "#fff"
- }
- },
- {
- "name": "Fallback comments",
- "scope": ["comment"],
- "settings": {
- "foreground": "#fff4"
- }
- },
- {
- "name": "Fallback constants",
- "scope": ["constant"],
- "settings": {
- "foreground": "#fff8"
- }
- },
- {
- "name": "Fallback self/this",
- "scope": ["variable.language.this"],
- "settings": {
- "foreground": "#fff"
- }
- },
- {
- "name": "Fallback types",
- "scope": [
- "entity.other.alias",
- "source.php support.class",
- "entity.name.type",
- "meta.function-call support.class",
- "keyword.other.type",
- "entity.other.inherited-class"
- ],
- "settings": {
- "foreground": "#fff",
- "fontStyle": "bold"
- }
- },
- {
- "name": "Fallback method calls",
- "scope": ["meta.method-call entity.name.function"],
- "settings": {
- "foreground": "#fff",
- "fontStyle": ""
- }
- },
- {
- "name": "Fallback function calls",
- "scope": [
- "meta.function-call entity.name.function",
- "meta.function-call support.function",
- "meta.function.call entity.name.function"
- ],
- "settings": {
- "foreground": "#fff",
- "fontStyle": ""
- }
- },
- {
- "name": "Fallback enums & constants",
- "scope": ["constant.enum", "constant.other"],
- "settings": {
- "foreground": "#fff8"
- }
- },
- {
- "name": "Fallback Properties & func arguments",
- "scope": [
- "variable.other.property",
- "entity.name.goto-label",
- "entity.name.variable.parameter"
- ],
- "settings": {
- "foreground": "#fff"
- }
- },
- {
- "name": "Fallback functions & methods declarations",
- "scope": [
- "entity.name.function",
- "support.function",
- "support.function.constructor",
- "entity.name.function meta.function-call meta.method-call"
- ],
- "settings": {
- "foreground": "#fff",
- "fontStyle": "bold"
- }
- },
- {
- "name": "HTML Tags",
- "scope": [
- "meta.tag entity.name.tag.html",
- "entity.name.tag.template.html"
- ],
- "settings": {
- "foreground": "#fff"
- }
- },
- {
- "name": "HTML Attributes",
- "scope": ["entity.other.attribute-name.html"],
- "settings": {
- "foreground": "#fff8"
- }
- },
- {
- "name": "HTML Custom Tag",
- "scope": ["meta.tag.other.unrecognized.html entity.name.tag.html"],
- "settings": {
- "foreground": "#fff"
- }
- },
- {
- "name": "HTML Keywords",
- "scope": ["text.html keyword"],
- "settings": {
- "foreground": "#fff"
+ "button.background": "#fff",
+ "button.foreground": "#000",
+ "button.hoverBackground": "#fffb",
+ "list.highlightForeground": "#fff",
+ "textLink.foreground": "#fff",
+ "scrollbar.shadow": "#000",
+ "textLink.activeForeground": "#fff8",
+ "editor.lineHighlightBackground": "#8881",
+ "editor.lineHighlightBorder": "#8882",
+ "editorCursor.foreground": "#fff",
+ "editor.findMatchBackground": "#fff8",
+ "editor.findMatchHighlightBackground": "#fff2",
+ "list.activeSelectionForeground": "#fff",
+ "list.focusForeground": "#fff",
+ "list.hoverForeground": "#fff",
+ "list.inactiveSelectionForeground": "#fff",
+ "list.inactiveSelectionBackground": "#000",
+ "list.focusBackground": "#000",
+ "list.focusAndSelectionOutline": "#000",
+ "list.focusHighlightForeground": "#fff",
+ "list.hoverBackground": "#000",
+ "list.focusOutline": "#000",
+ "list.activeSelectionBackground": "#000",
+ "editorIndentGuide.background": "#fff2",
+ "editor.background": "#000",
+ "editor.foreground": "#fff",
+ "editor.foldBackground": "#000",
+ "editor.hoverHighlightBackground": "#000",
+ "editor.selectionBackground": "#8888",
+ "editor.inactiveSelectionBackground": "#8882",
+ "gitDecoration.modifiedResourceForeground": "#fff",
+ "gitDecoration.untrackedResourceForeground": "#a7cb7b",
+ "gitDecoration.conflictingResourceForeground": "#ca8a04",
+ "gitDecoration.deletedResourceForeground": "#c97b89",
+ "listFilterWidget.background": "#000",
+ "input.background": "#fff1",
+ "titleBar.activeForeground": "#fff",
+ "editorWidget.background": "#000",
+ "editorGutter.background": "#000",
+ "debugToolBar.background": "#000",
+ "commandCenter.background": "#000",
+ "sideBarSectionHeader.background": "#000",
+ "focusBorder": "#fff8",
+ "titleBar.activeBackground": "#000",
+ "titleBar.inactiveBackground": "#000",
+ "breadcrumb.background": "#000",
+ "activityBar.background": "#000",
+ "activityBar.foreground": "#fff8",
+ "panel.background": "#000",
+ "sideBar.background": "#000",
+ "sideBarTitle.foreground": "#fff8",
+ "tab.hoverBackground": "#000",
+ "terminal.background": "#000",
+ "statusBar.background": "#000",
+ "statusBar.foreground": "#fff8",
+ "selection.background": "#fff2",
+ "editorPane.background": "#000",
+ "badge.background": "#000",
+ "banner.background": "#000",
+ "menu.background": "#000",
+ "activityBarBadge.background": "#000",
+ "activityBarBadge.foreground": "#fff8",
+ "editorLineNumber.foreground": "#fff2",
+ "editorLineNumber.activeForeground": "#fff8",
+ "statusBarItem.errorBackground": "#f43f5e"
+ },
+ "semanticTokenColors": {
+ "comment": {
+ "foreground": "#fff4"
+ },
+ "keyword": {
+ "foreground": "#fff8"
+ },
+ "string": {
+ "foreground": "#fff8"
+ },
+ "selfKeyword": {
+ "foreground": "#fff",
+ "bold": true
+ },
+ "method.declaration": {
+ "foreground": "#fff",
+ "bold": true
+ },
+ "method.definition": {
+ "foreground": "#fff",
+ "bold": true
+ },
+ "method": {
+ "foreground": "#fff",
+ "bold": false
+ },
+ "function.declaration": {
+ "foreground": "#fff",
+ "bold": true
+ },
+ "function.definition": {
+ "foreground": "#fff",
+ "bold": true
+ },
+ "function": {
+ "foreground": "#fff",
+ "bold": false
+ },
+ "property": {
+ "foreground": "#fff"
+ },
+ "enumMember": {
+ "foreground": "#fff8",
+ "bold": false
+ },
+ "enum": {
+ "foreground": "#fff",
+ "bold": true
+ },
+ "boolean": {
+ "foreground": "#fff8"
+ },
+ "number": {
+ "foreground": "#fff8"
+ },
+ "type": {
+ "foreground": "#fff",
+ "bold": true
+ },
+ "typeAlias": {
+ "foreground": "#fff",
+ "bold": true
+ },
+ "class": {
+ "foreground": "#fff",
+ "bold": true
+ },
+ "selfTypeKeyword": {
+ "foreground": "#fff",
+ "bold": true
+ },
+ "builtinType": {
+ "foreground": "#fff",
+ "bold": true
+ },
+ "interface": {
+ "foreground": "#fff8",
+ "bold": false
+ },
+ "typeParameter": {
+ "foreground": "#fff",
+ "bold": true
+ },
+ "lifetime": {
+ "foreground": "#fff8",
+ "italic": false,
+ "bold": false
+ },
+ "namespace": {
+ "foreground": "#fff"
+ },
+ "macro": {
+ "foreground": "#fff",
+ "bold": false
+ },
+ "decorator": {
+ "foreground": "#fff",
+ "bold": false
+ },
+ "builtinAttribute": {
+ "foreground": "#fff",
+ "bold": false
+ },
+ "generic.attribute": {
+ "foreground": "#fff"
+ },
+ "derive": {
+ "foreground": "#fff"
+ },
+ "operator": {
+ "foreground": "#fff8"
+ },
+ "variable": {
+ "foreground": "#fff"
+ },
+ "variable.readonly": {
+ "foreground": "#fff8"
+ },
+ "parameter": {
+ "foreground": "#fff"
+ },
+ "variable.mutable": {
+ "underline": true
+ },
+ "parameter.mutable": {
+ "underline": true
+ },
+ "selfKeyword.mutable": {
+ "underline": true
+ },
+ "variable.constant": {
+ "foreground": "#fff8"
+ },
+ "struct": {
+ "foreground": "#fff",
+ "bold": true
}
- },
- {
- "name": "Punctuations",
- "scope": ["punctuation", "meta.brace"],
- "settings": {
- "foreground": "#fff8"
+ },
+ "tokenColors": [
+ {
+ "name": "Fallback Operator",
+ "scope": ["keyword.operator"],
+ "settings": {
+ "foreground": "#fff8"
+ }
+ },
+ {
+ "name": "Fallback keywords",
+ "scope": [
+ "storage.type.ts",
+ "keyword",
+ "keyword.other",
+ "keyword.control",
+ "storage.type",
+ "storage.modifier"
+ ],
+ "settings": {
+ "foreground": "#fff8"
+ }
+ },
+ {
+ "name": "Fallback strings",
+ "scope": ["string"],
+ "settings": {
+ "foreground": "#fff8"
+ }
+ },
+ {
+ "name": "Fallback JSON Properties",
+ "scope": ["support.type.property-name.json"],
+ "settings": {
+ "foreground": "#fff"
+ }
+ },
+ {
+ "name": "Fallback string variables",
+ "scope": ["string variable", "string meta.interpolation"],
+ "settings": {
+ "foreground": "#fff"
+ }
+ },
+ {
+ "name": "Fallback comments",
+ "scope": ["comment"],
+ "settings": {
+ "foreground": "#fff4"
+ }
+ },
+ {
+ "name": "Fallback constants",
+ "scope": ["constant"],
+ "settings": {
+ "foreground": "#fff8"
+ }
+ },
+ {
+ "name": "Fallback self/this",
+ "scope": ["variable.language.this"],
+ "settings": {
+ "foreground": "#fff"
+ }
+ },
+ {
+ "name": "Fallback types",
+ "scope": [
+ "entity.other.alias",
+ "source.php support.class",
+ "entity.name.type",
+ "meta.function-call support.class",
+ "keyword.other.type",
+ "entity.other.inherited-class"
+ ],
+ "settings": {
+ "foreground": "#fff",
+ "fontStyle": "bold"
+ }
+ },
+ {
+ "name": "Fallback method calls",
+ "scope": ["meta.method-call entity.name.function"],
+ "settings": {
+ "foreground": "#fff",
+ "fontStyle": ""
+ }
+ },
+ {
+ "name": "Fallback function calls",
+ "scope": [
+ "meta.function-call entity.name.function",
+ "meta.function-call support.function",
+ "meta.function.call entity.name.function"
+ ],
+ "settings": {
+ "foreground": "#fff",
+ "fontStyle": ""
+ }
+ },
+ {
+ "name": "Fallback enums & constants",
+ "scope": ["constant.enum", "constant.other"],
+ "settings": {
+ "foreground": "#fff8"
+ }
+ },
+ {
+ "name": "Fallback Properties & func arguments",
+ "scope": [
+ "variable.other.property",
+ "entity.name.goto-label",
+ "entity.name.variable.parameter"
+ ],
+ "settings": {
+ "foreground": "#fff"
+ }
+ },
+ {
+ "name": "Fallback functions & methods declarations",
+ "scope": [
+ "entity.name.function",
+ "support.function",
+ "support.function.constructor",
+ "entity.name.function meta.function-call meta.method-call"
+ ],
+ "settings": {
+ "foreground": "#fff",
+ "fontStyle": "bold"
+ }
+ },
+ {
+ "name": "HTML Tags",
+ "scope": [
+ "meta.tag entity.name.tag.html",
+ "entity.name.tag.template.html"
+ ],
+ "settings": {
+ "foreground": "#fff"
+ }
+ },
+ {
+ "name": "HTML Attributes",
+ "scope": ["entity.other.attribute-name.html"],
+ "settings": {
+ "foreground": "#fff8"
+ }
+ },
+ {
+ "name": "HTML Custom Tag",
+ "scope": ["meta.tag.other.unrecognized.html entity.name.tag.html"],
+ "settings": {
+ "foreground": "#fff"
+ }
+ },
+ {
+ "name": "HTML Keywords",
+ "scope": ["text.html keyword"],
+ "settings": {
+ "foreground": "#fff"
+ }
+ },
+ {
+ "name": "Punctuations",
+ "scope": ["punctuation", "meta.brace"],
+ "settings": {
+ "foreground": "#fff8"
+ }
}
- }
- ]
+ ]
}
diff --git a/apps/web/lib/lumos-dark.json b/apps/web/lib/lumos-dark.json
index 4858157e..9fb69899 100644
--- a/apps/web/lib/lumos-dark.json
+++ b/apps/web/lib/lumos-dark.json
@@ -1,51 +1,51 @@
{
- "lumos-dark": {
- "name": "lumos-dark",
- "type": "dark",
- "settings": [
- {
- "settings": {
- "background": "#121212",
- "foreground": "#dbd7caee",
- "selectionBackground": "#eeeeee15",
- "selectionForeground": "#dbd7caee"
- }
- },
- {
- "scope": [
- "comment",
- "punctuation.definition.comment",
- "string.comment"
- ],
- "settings": {
- "foreground": "#758575dd"
- }
- },
- {
- "scope": [
- "delimiter.bracket",
- "delimiter",
- "invalid.illegal.character-not-allowed-here.html",
- "keyword.operator.rest",
- "keyword.operator.spread",
- "keyword.operator.type.annotation",
- "keyword.operator.relational",
- "keyword.operator.assignment",
- "meta.brace",
- "meta.tag.block.any.html",
- "meta.tag.inline.any.html",
- "meta.tag.structure.input.void.html",
- "meta.type.annotation",
- "meta.embedded.block.github-actions-expression",
- "storage.type.function.arrow",
- "keyword.operator.type",
- "meta.objectliteral.ts",
- "punctuation"
- ],
- "settings": {
- "foreground": "#FF00F"
- }
- }
- ]
- }
+ "lumos-dark": {
+ "name": "lumos-dark",
+ "type": "dark",
+ "settings": [
+ {
+ "settings": {
+ "background": "#121212",
+ "foreground": "#dbd7caee",
+ "selectionBackground": "#eeeeee15",
+ "selectionForeground": "#dbd7caee"
+ }
+ },
+ {
+ "scope": [
+ "comment",
+ "punctuation.definition.comment",
+ "string.comment"
+ ],
+ "settings": {
+ "foreground": "#758575dd"
+ }
+ },
+ {
+ "scope": [
+ "delimiter.bracket",
+ "delimiter",
+ "invalid.illegal.character-not-allowed-here.html",
+ "keyword.operator.rest",
+ "keyword.operator.spread",
+ "keyword.operator.type.annotation",
+ "keyword.operator.relational",
+ "keyword.operator.assignment",
+ "meta.brace",
+ "meta.tag.block.any.html",
+ "meta.tag.inline.any.html",
+ "meta.tag.structure.input.void.html",
+ "meta.type.annotation",
+ "meta.embedded.block.github-actions-expression",
+ "storage.type.function.arrow",
+ "keyword.operator.type",
+ "meta.objectliteral.ts",
+ "punctuation"
+ ],
+ "settings": {
+ "foreground": "#FF00F"
+ }
+ }
+ ]
+ }
}
diff --git a/apps/web/lib/lumos-dark.ts b/apps/web/lib/lumos-dark.ts
index 778860ef..e5db120e 100644
--- a/apps/web/lib/lumos-dark.ts
+++ b/apps/web/lib/lumos-dark.ts
@@ -1,674 +1,629 @@
-import type { ThemeRegistration } from 'shiki'
+import type { ThemeRegistration } from "shiki"
export const lumosDarkTheme: ThemeRegistration = {
- name: 'lumos-dark',
- type: 'dark',
+ name: "lumos-dark",
+ type: "dark",
colors: {
- 'activityBar.activeBorder': '#9945FF',
- 'activityBar.background': '#121212',
- 'activityBar.border': '#191919',
- 'activityBar.foreground': '#dbd7caee',
- 'activityBar.inactiveForeground': '#dedcd550',
- 'activityBarBadge.background': '#bfbaaa',
- 'activityBarBadge.foreground': '#121212',
- 'badge.background': '#dedcd590',
- 'badge.foreground': '#121212',
- 'breadcrumb.activeSelectionForeground': '#eeeeee15',
- 'breadcrumb.background': '#181818',
- 'breadcrumb.focusForeground': '#dbd7caee',
- 'breadcrumb.foreground': '#959da5',
- 'breadcrumbPicker.background': '#121212',
- 'button.background': '#9945FF',
- 'button.foreground': '#121212',
- 'button.hoverBackground': '#9945FF',
- 'checkbox.background': '#181818',
- 'checkbox.border': '#2f363d',
- 'debugToolBar.background': '#121212',
- 'descriptionForeground': '#dedcd590',
- 'diffEditor.insertedTextBackground': '#4d937522',
- 'diffEditor.removedTextBackground': '#ab595922',
- 'dropdown.background': '#121212',
- 'dropdown.border': '#191919',
- 'dropdown.foreground': '#dbd7caee',
- 'dropdown.listBackground': '#181818',
- 'editor.background': '#121212',
- 'editor.findMatchBackground': '#e6cc7722',
- 'editor.findMatchHighlightBackground': '#e6cc7744',
- 'editor.focusedStackFrameHighlightBackground': '#b808',
- 'editor.foldBackground': '#eeeeee10',
- 'editor.foreground': '#dbd7caee',
- 'editor.inactiveSelectionBackground': '#eeeeee08',
- 'editor.lineHighlightBackground': '#181818',
- 'editor.selectionBackground': '#eeeeee15',
- 'editor.selectionHighlightBackground': '#eeeeee08',
- 'editor.stackFrameHighlightBackground': '#a707',
- 'editor.wordHighlightBackground': '#1c6b4805',
- 'editor.wordHighlightStrongBackground': '#1c6b4810',
- 'editorBracketHighlight.foreground1': '#00FFFF',
- 'editorBracketHighlight.foreground2': '#14F195',
- 'editorBracketHighlight.foreground3': '#ff9900',
- 'editorBracketHighlight.foreground4': '#EB459E',
- 'editorBracketHighlight.foreground5': '#FEE75C',
- 'editorBracketHighlight.foreground6': '#5865F2',
- 'editorBracketMatch.background': '#4d937520',
- 'editorError.foreground': '#ED4245',
- 'editorGroup.border': '#191919',
- 'editorGroupHeader.tabsBackground': '#121212',
- 'editorGroupHeader.tabsBorder': '#191919',
- 'editorGutter.addedBackground': '#14F195',
- 'editorGutter.commentRangeForeground': '#dedcd550',
- 'editorGutter.deletedBackground': '#ED4245',
- 'editorGutter.foldingControlForeground': '#dedcd590',
- 'editorGutter.modifiedBackground': '#5865F2',
- 'editorHint.foreground': '#14F195',
- 'editorIndentGuide.activeBackground': '#ffffff30',
- 'editorIndentGuide.background': '#ffffff15',
- 'editorInfo.foreground': '#5865F2',
- 'editorInlayHint.background': '#00000000',
- 'editorInlayHint.foreground': '#FF00F',
- 'editorLineNumber.activeForeground': '#bfbaaa',
- 'editorLineNumber.foreground': '#dedcd550',
- 'editorOverviewRuler.border': '#111',
- 'editorStickyScroll.background': '#181818',
- 'editorStickyScrollHover.background': '#181818',
- 'editorWarning.foreground': '#ff9900',
- 'editorWhitespace.foreground': '#ffffff15',
- 'editorWidget.background': '#121212',
- 'errorForeground': '#ED4245',
- 'focusBorder': '#00000000',
- 'foreground': '#dbd7caee',
- 'gitDecoration.addedResourceForeground': '#14F195',
- 'gitDecoration.conflictingResourceForeground': '#ff9900',
- 'gitDecoration.deletedResourceForeground': '#ED4245',
- 'gitDecoration.ignoredResourceForeground': '#dedcd550',
- 'gitDecoration.modifiedResourceForeground': '#5865F2',
- 'gitDecoration.submoduleResourceForeground': '#dedcd590',
- 'gitDecoration.untrackedResourceForeground': '#00FFFF',
- 'input.background': '#181818',
- 'input.border': '#191919',
- 'input.foreground': '#dbd7caee',
- 'input.placeholderForeground': '#dedcd590',
- 'inputOption.activeBackground': '#dedcd550',
- 'list.activeSelectionBackground': '#181818',
- 'list.activeSelectionForeground': '#dbd7caee',
- 'list.focusBackground': '#181818',
- 'list.highlightForeground': '#9945FF',
- 'list.hoverBackground': '#181818',
- 'list.hoverForeground': '#dbd7caee',
- 'list.inactiveFocusBackground': '#121212',
- 'list.inactiveSelectionBackground': '#181818',
- 'list.inactiveSelectionForeground': '#dbd7caee',
- 'menu.separatorBackground': '#191919',
- 'notificationCenterHeader.background': '#121212',
- 'notificationCenterHeader.foreground': '#959da5',
- 'notifications.background': '#121212',
- 'notifications.border': '#191919',
- 'notifications.foreground': '#dbd7caee',
- 'notificationsErrorIcon.foreground': '#ED4245',
- 'notificationsInfoIcon.foreground': '#5865F2',
- 'notificationsWarningIcon.foreground': '#ff9900',
- 'panel.background': '#121212',
- 'panel.border': '#191919',
- 'panelInput.border': '#2f363d',
- 'panelTitle.activeBorder': '#9945FF',
- 'panelTitle.activeForeground': '#dbd7caee',
- 'panelTitle.inactiveForeground': '#959da5',
- 'peekViewEditor.background': '#121212',
- 'peekViewEditor.matchHighlightBackground': '#ffd33d33',
- 'peekViewResult.background': '#121212',
- 'peekViewResult.matchHighlightBackground': '#ffd33d33',
- 'pickerGroup.border': '#191919',
- 'pickerGroup.foreground': '#dbd7caee',
- 'problemsErrorIcon.foreground': '#ED4245',
- 'problemsInfoIcon.foreground': '#5865F2',
- 'problemsWarningIcon.foreground': '#ff9900',
- 'progressBar.background': '#9945FF',
- 'quickInput.background': '#121212',
- 'quickInput.foreground': '#dbd7caee',
- 'quickInputList.focusBackground': '#181818',
- 'scrollbar.shadow': '#0000',
- 'scrollbarSlider.activeBackground': '#dedcd550',
- 'scrollbarSlider.background': '#dedcd510',
- 'scrollbarSlider.hoverBackground': '#dedcd550',
- 'settings.headerForeground': '#dbd7caee',
- 'settings.modifiedItemIndicator': '#9945FF',
- 'sideBar.background': '#121212',
- 'sideBar.border': '#191919',
- 'sideBar.foreground': '#bfbaaa',
- 'sideBarSectionHeader.background': '#121212',
- 'sideBarSectionHeader.border': '#191919',
- 'sideBarSectionHeader.foreground': '#dbd7caee',
- 'sideBarTitle.foreground': '#dbd7caee',
- 'statusBar.background': '#121212',
- 'statusBar.border': '#191919',
- 'statusBar.debuggingBackground': '#181818',
- 'statusBar.debuggingForeground': '#bfbaaa',
- 'statusBar.foreground': '#bfbaaa',
- 'statusBar.noFolderBackground': '#121212',
- 'statusBarItem.prominentBackground': '#181818',
- 'tab.activeBackground': '#121212',
- 'tab.activeBorder': '#191919',
- 'tab.activeBorderTop': '#9945FF',
- 'tab.activeForeground': '#dbd7caee',
- 'tab.border': '#191919',
- 'tab.hoverBackground': '#181818',
- 'tab.inactiveBackground': '#121212',
- 'tab.inactiveForeground': '#959da5',
- 'tab.unfocusedActiveBorder': '#191919',
- 'tab.unfocusedActiveBorderTop': '#191919',
- 'tab.unfocusedHoverBackground': '#121212',
- 'terminal.ansiBlack': '#393a34',
- 'terminal.ansiBlue': '#5865F2',
- 'terminal.ansiBrightBlack': '#777777',
- 'terminal.ansiBrightBlue': '#5865F2',
- 'terminal.ansiBrightCyan': '#00FFFF',
- 'terminal.ansiBrightGreen': '#14F195',
- 'terminal.ansiBrightMagenta': '#EB459E',
- 'terminal.ansiBrightRed': '#ED4245',
- 'terminal.ansiBrightWhite': '#ffffff',
- 'terminal.ansiBrightYellow': '#FEE75C',
- 'terminal.ansiCyan': '#00FFFF',
- 'terminal.ansiGreen': '#14F195',
- 'terminal.ansiMagenta': '#EB459E',
- 'terminal.ansiRed': '#ED4245',
- 'terminal.ansiWhite': '#dbd7caee',
- 'terminal.ansiYellow': '#FEE75C',
- 'terminal.foreground': '#dbd7caee',
- 'terminal.selectionBackground': '#eeeeee15',
- 'textBlockQuote.background': '#121212',
- 'textBlockQuote.border': '#191919',
- 'textCodeBlock.background': '#121212',
- 'textLink.activeForeground': '#9945FF',
- 'textLink.foreground': '#9945FF',
- 'textPreformat.foreground': '#d1d5da',
- 'textSeparator.foreground': '#586069',
- 'titleBar.activeBackground': '#121212',
- 'titleBar.activeForeground': '#bfbaaa',
- 'titleBar.border': '#181818',
- 'titleBar.inactiveBackground': '#121212',
- 'titleBar.inactiveForeground': '#959da5',
- 'tree.indentGuidesStroke': '#2f363d',
- 'welcomePage.buttonBackground': '#2f363d',
- 'welcomePage.buttonHoverBackground': '#444d56',
+ "activityBar.activeBorder": "#9945FF",
+ "activityBar.background": "#121212",
+ "activityBar.border": "#191919",
+ "activityBar.foreground": "#dbd7caee",
+ "activityBar.inactiveForeground": "#dedcd550",
+ "activityBarBadge.background": "#bfbaaa",
+ "activityBarBadge.foreground": "#121212",
+ "badge.background": "#dedcd590",
+ "badge.foreground": "#121212",
+ "breadcrumb.activeSelectionForeground": "#eeeeee15",
+ "breadcrumb.background": "#181818",
+ "breadcrumb.focusForeground": "#dbd7caee",
+ "breadcrumb.foreground": "#959da5",
+ "breadcrumbPicker.background": "#121212",
+ "button.background": "#9945FF",
+ "button.foreground": "#121212",
+ "button.hoverBackground": "#9945FF",
+ "checkbox.background": "#181818",
+ "checkbox.border": "#2f363d",
+ "debugToolBar.background": "#121212",
+ descriptionForeground: "#dedcd590",
+ "diffEditor.insertedTextBackground": "#4d937522",
+ "diffEditor.removedTextBackground": "#ab595922",
+ "dropdown.background": "#121212",
+ "dropdown.border": "#191919",
+ "dropdown.foreground": "#dbd7caee",
+ "dropdown.listBackground": "#181818",
+ "editor.background": "#121212",
+ "editor.findMatchBackground": "#e6cc7722",
+ "editor.findMatchHighlightBackground": "#e6cc7744",
+ "editor.focusedStackFrameHighlightBackground": "#b808",
+ "editor.foldBackground": "#eeeeee10",
+ "editor.foreground": "#dbd7caee",
+ "editor.inactiveSelectionBackground": "#eeeeee08",
+ "editor.lineHighlightBackground": "#181818",
+ "editor.selectionBackground": "#eeeeee15",
+ "editor.selectionHighlightBackground": "#eeeeee08",
+ "editor.stackFrameHighlightBackground": "#a707",
+ "editor.wordHighlightBackground": "#1c6b4805",
+ "editor.wordHighlightStrongBackground": "#1c6b4810",
+ "editorBracketHighlight.foreground1": "#00FFFF",
+ "editorBracketHighlight.foreground2": "#14F195",
+ "editorBracketHighlight.foreground3": "#ff9900",
+ "editorBracketHighlight.foreground4": "#EB459E",
+ "editorBracketHighlight.foreground5": "#FEE75C",
+ "editorBracketHighlight.foreground6": "#5865F2",
+ "editorBracketMatch.background": "#4d937520",
+ "editorError.foreground": "#ED4245",
+ "editorGroup.border": "#191919",
+ "editorGroupHeader.tabsBackground": "#121212",
+ "editorGroupHeader.tabsBorder": "#191919",
+ "editorGutter.addedBackground": "#14F195",
+ "editorGutter.commentRangeForeground": "#dedcd550",
+ "editorGutter.deletedBackground": "#ED4245",
+ "editorGutter.foldingControlForeground": "#dedcd590",
+ "editorGutter.modifiedBackground": "#5865F2",
+ "editorHint.foreground": "#14F195",
+ "editorIndentGuide.activeBackground": "#ffffff30",
+ "editorIndentGuide.background": "#ffffff15",
+ "editorInfo.foreground": "#5865F2",
+ "editorInlayHint.background": "#00000000",
+ "editorInlayHint.foreground": "#FF00F",
+ "editorLineNumber.activeForeground": "#bfbaaa",
+ "editorLineNumber.foreground": "#dedcd550",
+ "editorOverviewRuler.border": "#111",
+ "editorStickyScroll.background": "#181818",
+ "editorStickyScrollHover.background": "#181818",
+ "editorWarning.foreground": "#ff9900",
+ "editorWhitespace.foreground": "#ffffff15",
+ "editorWidget.background": "#121212",
+ errorForeground: "#ED4245",
+ focusBorder: "#00000000",
+ foreground: "#dbd7caee",
+ "gitDecoration.addedResourceForeground": "#14F195",
+ "gitDecoration.conflictingResourceForeground": "#ff9900",
+ "gitDecoration.deletedResourceForeground": "#ED4245",
+ "gitDecoration.ignoredResourceForeground": "#dedcd550",
+ "gitDecoration.modifiedResourceForeground": "#5865F2",
+ "gitDecoration.submoduleResourceForeground": "#dedcd590",
+ "gitDecoration.untrackedResourceForeground": "#00FFFF",
+ "input.background": "#181818",
+ "input.border": "#191919",
+ "input.foreground": "#dbd7caee",
+ "input.placeholderForeground": "#dedcd590",
+ "inputOption.activeBackground": "#dedcd550",
+ "list.activeSelectionBackground": "#181818",
+ "list.activeSelectionForeground": "#dbd7caee",
+ "list.focusBackground": "#181818",
+ "list.highlightForeground": "#9945FF",
+ "list.hoverBackground": "#181818",
+ "list.hoverForeground": "#dbd7caee",
+ "list.inactiveFocusBackground": "#121212",
+ "list.inactiveSelectionBackground": "#181818",
+ "list.inactiveSelectionForeground": "#dbd7caee",
+ "menu.separatorBackground": "#191919",
+ "notificationCenterHeader.background": "#121212",
+ "notificationCenterHeader.foreground": "#959da5",
+ "notifications.background": "#121212",
+ "notifications.border": "#191919",
+ "notifications.foreground": "#dbd7caee",
+ "notificationsErrorIcon.foreground": "#ED4245",
+ "notificationsInfoIcon.foreground": "#5865F2",
+ "notificationsWarningIcon.foreground": "#ff9900",
+ "panel.background": "#121212",
+ "panel.border": "#191919",
+ "panelInput.border": "#2f363d",
+ "panelTitle.activeBorder": "#9945FF",
+ "panelTitle.activeForeground": "#dbd7caee",
+ "panelTitle.inactiveForeground": "#959da5",
+ "peekViewEditor.background": "#121212",
+ "peekViewEditor.matchHighlightBackground": "#ffd33d33",
+ "peekViewResult.background": "#121212",
+ "peekViewResult.matchHighlightBackground": "#ffd33d33",
+ "pickerGroup.border": "#191919",
+ "pickerGroup.foreground": "#dbd7caee",
+ "problemsErrorIcon.foreground": "#ED4245",
+ "problemsInfoIcon.foreground": "#5865F2",
+ "problemsWarningIcon.foreground": "#ff9900",
+ "progressBar.background": "#9945FF",
+ "quickInput.background": "#121212",
+ "quickInput.foreground": "#dbd7caee",
+ "quickInputList.focusBackground": "#181818",
+ "scrollbar.shadow": "#0000",
+ "scrollbarSlider.activeBackground": "#dedcd550",
+ "scrollbarSlider.background": "#dedcd510",
+ "scrollbarSlider.hoverBackground": "#dedcd550",
+ "settings.headerForeground": "#dbd7caee",
+ "settings.modifiedItemIndicator": "#9945FF",
+ "sideBar.background": "#121212",
+ "sideBar.border": "#191919",
+ "sideBar.foreground": "#bfbaaa",
+ "sideBarSectionHeader.background": "#121212",
+ "sideBarSectionHeader.border": "#191919",
+ "sideBarSectionHeader.foreground": "#dbd7caee",
+ "sideBarTitle.foreground": "#dbd7caee",
+ "statusBar.background": "#121212",
+ "statusBar.border": "#191919",
+ "statusBar.debuggingBackground": "#181818",
+ "statusBar.debuggingForeground": "#bfbaaa",
+ "statusBar.foreground": "#bfbaaa",
+ "statusBar.noFolderBackground": "#121212",
+ "statusBarItem.prominentBackground": "#181818",
+ "tab.activeBackground": "#121212",
+ "tab.activeBorder": "#191919",
+ "tab.activeBorderTop": "#9945FF",
+ "tab.activeForeground": "#dbd7caee",
+ "tab.border": "#191919",
+ "tab.hoverBackground": "#181818",
+ "tab.inactiveBackground": "#121212",
+ "tab.inactiveForeground": "#959da5",
+ "tab.unfocusedActiveBorder": "#191919",
+ "tab.unfocusedActiveBorderTop": "#191919",
+ "tab.unfocusedHoverBackground": "#121212",
+ "terminal.ansiBlack": "#393a34",
+ "terminal.ansiBlue": "#5865F2",
+ "terminal.ansiBrightBlack": "#777777",
+ "terminal.ansiBrightBlue": "#5865F2",
+ "terminal.ansiBrightCyan": "#00FFFF",
+ "terminal.ansiBrightGreen": "#14F195",
+ "terminal.ansiBrightMagenta": "#EB459E",
+ "terminal.ansiBrightRed": "#ED4245",
+ "terminal.ansiBrightWhite": "#ffffff",
+ "terminal.ansiBrightYellow": "#FEE75C",
+ "terminal.ansiCyan": "#00FFFF",
+ "terminal.ansiGreen": "#14F195",
+ "terminal.ansiMagenta": "#EB459E",
+ "terminal.ansiRed": "#ED4245",
+ "terminal.ansiWhite": "#dbd7caee",
+ "terminal.ansiYellow": "#FEE75C",
+ "terminal.foreground": "#dbd7caee",
+ "terminal.selectionBackground": "#eeeeee15",
+ "textBlockQuote.background": "#121212",
+ "textBlockQuote.border": "#191919",
+ "textCodeBlock.background": "#121212",
+ "textLink.activeForeground": "#9945FF",
+ "textLink.foreground": "#9945FF",
+ "textPreformat.foreground": "#d1d5da",
+ "textSeparator.foreground": "#586069",
+ "titleBar.activeBackground": "#121212",
+ "titleBar.activeForeground": "#bfbaaa",
+ "titleBar.border": "#181818",
+ "titleBar.inactiveBackground": "#121212",
+ "titleBar.inactiveForeground": "#959da5",
+ "tree.indentGuidesStroke": "#2f363d",
+ "welcomePage.buttonBackground": "#2f363d",
+ "welcomePage.buttonHoverBackground": "#444d56",
},
semanticHighlighting: true,
semanticTokenColors: {
- class: '#CCFF00',
- interface: '#FF078A',
- namespace: '#FF780A',
- property: '#9945FF',
- type: '#FF078A',
+ class: "#CCFF00",
+ interface: "#FF078A",
+ namespace: "#FF780A",
+ property: "#9945FF",
+ type: "#FF078A",
},
tokenColors: [
{
- scope: ['comment', 'punctuation.definition.comment', 'string.comment'],
+ scope: ["comment", "punctuation.definition.comment", "string.comment"],
settings: {
- foreground: '#758575dd',
+ foreground: "#758575dd",
},
},
{
scope: [
- 'delimiter.bracket',
- 'delimiter',
- 'invalid.illegal.character-not-allowed-here.html',
- 'keyword.operator.rest',
- 'keyword.operator.spread',
- 'keyword.operator.type.annotation',
- 'keyword.operator.relational',
- 'keyword.operator.assignment',
- 'meta.brace',
- 'meta.tag.block.any.html',
- 'meta.tag.inline.any.html',
- 'meta.tag.structure.input.void.html',
- 'meta.type.annotation',
- 'meta.embedded.block.github-actions-expression',
- 'storage.type.function.arrow',
- 'keyword.operator.type',
- 'meta.objectliteral.ts',
- 'punctuation',
+ "delimiter.bracket",
+ "delimiter",
+ "invalid.illegal.character-not-allowed-here.html",
+ "keyword.operator.rest",
+ "keyword.operator.spread",
+ "keyword.operator.type.annotation",
+ "keyword.operator.relational",
+ "keyword.operator.assignment",
+ "meta.brace",
+ "meta.tag.block.any.html",
+ "meta.tag.inline.any.html",
+ "meta.tag.structure.input.void.html",
+ "meta.type.annotation",
+ "meta.embedded.block.github-actions-expression",
+ "storage.type.function.arrow",
+ "keyword.operator.type",
+ "meta.objectliteral.ts",
+ "punctuation",
],
settings: {
- foreground: '#FF00F',
+ foreground: "#FF00F",
},
},
{
scope: [
- 'constant',
- 'entity.name.constant',
- 'variable.language',
- 'meta.definition.variable',
+ "constant",
+ "entity.name.constant",
+ "variable.language",
+ "meta.definition.variable",
],
settings: {
- foreground: '#CCFF00',
+ foreground: "#CCFF00",
},
},
{
- scope: [
- 'entity',
- 'entity.name',
- ],
+ scope: ["entity", "entity.name"],
settings: {
- foreground: '#FEE75C',
+ foreground: "#FEE75C",
},
},
{
- scope: 'variable.parameter.function',
+ scope: "variable.parameter.function",
settings: {
- foreground: '#dbd7caee',
+ foreground: "#dbd7caee",
},
},
{
- scope: [
- 'entity.name.tag',
- 'tag.html',
- ],
+ scope: ["entity.name.tag", "tag.html"],
settings: {
- foreground: '#14F195',
+ foreground: "#14F195",
},
},
{
- scope: 'entity.name.function',
+ scope: "entity.name.function",
settings: {
- foreground: '#FEE75C',
+ foreground: "#FEE75C",
},
},
{
- scope: [
- 'keyword',
- 'storage.type.class.jsdoc',
- ],
+ scope: ["keyword", "storage.type.class.jsdoc"],
settings: {
- foreground: '#14F195',
+ foreground: "#14F195",
},
},
{
scope: [
- 'storage',
- 'storage.type',
- 'support.type.builtin',
- 'constant.language.undefined',
- 'constant.language.null',
+ "storage",
+ "storage.type",
+ "support.type.builtin",
+ "constant.language.undefined",
+ "constant.language.null",
],
settings: {
- foreground: '#14F195',
+ foreground: "#14F195",
},
},
{
scope: [
- 'text.html.derivative',
- 'storage.modifier.package',
- 'storage.modifier.import',
- 'storage.type.java',
+ "text.html.derivative",
+ "storage.modifier.package",
+ "storage.modifier.import",
+ "storage.type.java",
],
settings: {
- foreground: '#dbd7caee',
+ foreground: "#dbd7caee",
},
},
{
scope: [
- 'string',
- 'string punctuation.section.embedded source',
- 'attribute.value',
+ "string",
+ "string punctuation.section.embedded source",
+ "attribute.value",
],
settings: {
- foreground: '#ff9900',
+ foreground: "#ff9900",
},
},
{
scope: [
- 'punctuation.definition.string',
- 'punctuation.support.type.property-name',
+ "punctuation.definition.string",
+ "punctuation.support.type.property-name",
],
settings: {
- foreground: '#ff990099',
+ foreground: "#ff990099",
},
},
{
- scope: 'support',
+ scope: "support",
settings: {
- foreground: '#9945FF',
+ foreground: "#9945FF",
},
},
{
scope: [
- 'property',
- 'meta.property-name',
- 'meta.object-literal.key',
- 'entity.name.tag.yaml',
- 'attribute.name',
+ "property",
+ "meta.property-name",
+ "meta.object-literal.key",
+ "entity.name.tag.yaml",
+ "attribute.name",
],
settings: {
- foreground: '#9945FF',
+ foreground: "#9945FF",
},
},
{
scope: [
- 'entity.other.attribute-name',
- 'invalid.deprecated.entity.other.attribute-name.html',
+ "entity.other.attribute-name",
+ "invalid.deprecated.entity.other.attribute-name.html",
],
settings: {
- foreground: '#00FFFF',
+ foreground: "#00FFFF",
},
},
{
- scope: [
- 'variable',
- 'identifier',
- ],
+ scope: ["variable", "identifier"],
settings: {
- foreground: '#00FFFF',
+ foreground: "#00FFFF",
},
},
{
- scope: [
- 'support.type.primitive',
- 'entity.name.type',
- ],
+ scope: ["support.type.primitive", "entity.name.type"],
settings: {
- foreground: '#CCFF00',
+ foreground: "#CCFF00",
},
},
{
- scope: 'namespace',
+ scope: "namespace",
settings: {
- foreground: '#FF780A',
+ foreground: "#FF780A",
},
},
{
scope: [
- 'keyword.operator',
- 'keyword.operator.assignment.compound',
- 'meta.var.expr.ts',
+ "keyword.operator",
+ "keyword.operator.assignment.compound",
+ "meta.var.expr.ts",
],
settings: {
- foreground: '#FF00FF',
+ foreground: "#FF00FF",
},
},
{
- scope: 'invalid.broken',
+ scope: "invalid.broken",
settings: {
- fontStyle: 'italic',
- foreground: '#fdaeb7',
+ fontStyle: "italic",
+ foreground: "#fdaeb7",
},
},
{
- scope: 'invalid.deprecated',
+ scope: "invalid.deprecated",
settings: {
- fontStyle: 'italic',
- foreground: '#fdaeb7',
+ fontStyle: "italic",
+ foreground: "#fdaeb7",
},
},
{
- scope: 'invalid.illegal',
+ scope: "invalid.illegal",
settings: {
- fontStyle: 'italic',
- foreground: '#fdaeb7',
+ fontStyle: "italic",
+ foreground: "#fdaeb7",
},
},
{
- scope: 'invalid.unimplemented',
+ scope: "invalid.unimplemented",
settings: {
- fontStyle: 'italic',
- foreground: '#fdaeb7',
+ fontStyle: "italic",
+ foreground: "#fdaeb7",
},
},
{
- scope: 'carriage-return',
+ scope: "carriage-return",
settings: {
- background: '#f97583',
- fontStyle: 'italic underline',
- foreground: '#24292e',
+ background: "#f97583",
+ fontStyle: "italic underline",
+ foreground: "#24292e",
},
},
{
- scope: 'message.error',
+ scope: "message.error",
settings: {
- foreground: '#fdaeb7',
+ foreground: "#fdaeb7",
},
},
{
- scope: 'string variable',
+ scope: "string variable",
settings: {
- foreground: '#ff9900',
+ foreground: "#ff9900",
},
},
{
- scope: [
- 'source.regexp',
- 'string.regexp',
- ],
+ scope: ["source.regexp", "string.regexp"],
settings: {
- foreground: '#ffea7f',
+ foreground: "#ffea7f",
},
},
{
scope: [
- 'string.regexp.character-class',
- 'string.regexp constant.character.escape',
- 'string.regexp source.ruby.embedded',
- 'string.regexp string.regexp.arbitrary-repitition',
+ "string.regexp.character-class",
+ "string.regexp constant.character.escape",
+ "string.regexp source.ruby.embedded",
+ "string.regexp string.regexp.arbitrary-repitition",
],
settings: {
- foreground: '#ff9900',
+ foreground: "#ff9900",
},
},
{
- scope: 'string.regexp constant.character.escape',
+ scope: "string.regexp constant.character.escape",
settings: {
- foreground: '#FEE75C',
+ foreground: "#FEE75C",
},
},
{
- scope: [
- 'support.constant',
- ],
+ scope: ["support.constant"],
settings: {
- foreground: '#CCFF00',
+ foreground: "#CCFF00",
},
},
{
- scope: [
- 'constant.numeric',
- 'number',
- ],
+ scope: ["constant.numeric", "number"],
settings: {
- foreground: '#FEE75C',
+ foreground: "#FEE75C",
},
},
{
- scope: [
- 'keyword.other.unit',
- ],
+ scope: ["keyword.other.unit"],
settings: {
- foreground: '#14F195',
+ foreground: "#14F195",
},
},
{
- scope: [
- 'constant.language.boolean',
- 'constant.language',
- ],
+ scope: ["constant.language.boolean", "constant.language"],
settings: {
- foreground: '#FF078A',
+ foreground: "#FF078A",
},
},
{
- scope: 'meta.module-reference',
+ scope: "meta.module-reference",
settings: {
- foreground: '#9945FF',
+ foreground: "#9945FF",
},
},
{
- scope: 'punctuation.definition.list.begin.markdown',
+ scope: "punctuation.definition.list.begin.markdown",
settings: {
- foreground: '#ff9900',
+ foreground: "#ff9900",
},
},
{
- scope: [
- 'markup.heading',
- 'markup.heading entity.name',
- ],
+ scope: ["markup.heading", "markup.heading entity.name"],
settings: {
- fontStyle: 'bold',
- foreground: '#9945FF',
+ fontStyle: "bold",
+ foreground: "#9945FF",
},
},
{
- scope: 'markup.quote',
+ scope: "markup.quote",
settings: {
- foreground: '#FF078A',
+ foreground: "#FF078A",
},
},
{
- scope: 'markup.italic',
+ scope: "markup.italic",
settings: {
- fontStyle: 'italic',
- foreground: '#dbd7caee',
+ fontStyle: "italic",
+ foreground: "#dbd7caee",
},
},
{
- scope: 'markup.bold',
+ scope: "markup.bold",
settings: {
- fontStyle: 'bold',
- foreground: '#dbd7caee',
+ fontStyle: "bold",
+ foreground: "#dbd7caee",
},
},
{
- scope: 'markup.raw',
+ scope: "markup.raw",
settings: {
- foreground: '#9945FF',
+ foreground: "#9945FF",
},
},
{
scope: [
- 'markup.deleted',
- 'meta.diff.header.from-file',
- 'punctuation.definition.deleted',
+ "markup.deleted",
+ "meta.diff.header.from-file",
+ "punctuation.definition.deleted",
],
settings: {
- background: '#86181d',
- foreground: '#fdaeb7',
+ background: "#86181d",
+ foreground: "#fdaeb7",
},
},
{
scope: [
- 'markup.inserted',
- 'meta.diff.header.to-file',
- 'punctuation.definition.inserted',
+ "markup.inserted",
+ "meta.diff.header.to-file",
+ "punctuation.definition.inserted",
],
settings: {
- background: '#144620',
- foreground: '#85e89d',
+ background: "#144620",
+ foreground: "#85e89d",
},
},
{
- scope: [
- 'markup.changed',
- 'punctuation.definition.changed',
- ],
+ scope: ["markup.changed", "punctuation.definition.changed"],
settings: {
- background: '#c24e00',
- foreground: '#ffab70',
+ background: "#c24e00",
+ foreground: "#ffab70",
},
},
{
- scope: [
- 'markup.ignored',
- 'markup.untracked',
- ],
+ scope: ["markup.ignored", "markup.untracked"],
settings: {
- background: '#79b8ff',
- foreground: '#2f363d',
+ background: "#79b8ff",
+ foreground: "#2f363d",
},
},
{
- scope: 'meta.diff.range',
+ scope: "meta.diff.range",
settings: {
- fontStyle: 'bold',
- foreground: '#b392f0',
+ fontStyle: "bold",
+ foreground: "#b392f0",
},
},
{
- scope: 'meta.diff.header',
+ scope: "meta.diff.header",
settings: {
- foreground: '#79b8ff',
+ foreground: "#79b8ff",
},
},
{
- scope: 'meta.separator',
+ scope: "meta.separator",
settings: {
- fontStyle: 'bold',
- foreground: '#79b8ff',
+ fontStyle: "bold",
+ foreground: "#79b8ff",
},
},
{
- scope: 'meta.output',
+ scope: "meta.output",
settings: {
- foreground: '#79b8ff',
+ foreground: "#79b8ff",
},
},
{
scope: [
- 'brackethighlighter.tag',
- 'brackethighlighter.curly',
- 'brackethighlighter.round',
- 'brackethighlighter.square',
- 'brackethighlighter.angle',
- 'brackethighlighter.quote',
+ "brackethighlighter.tag",
+ "brackethighlighter.curly",
+ "brackethighlighter.round",
+ "brackethighlighter.square",
+ "brackethighlighter.angle",
+ "brackethighlighter.quote",
],
settings: {
- foreground: '#d1d5da',
+ foreground: "#d1d5da",
},
},
{
- scope: 'brackethighlighter.unmatched',
+ scope: "brackethighlighter.unmatched",
settings: {
- foreground: '#fdaeb7',
+ foreground: "#fdaeb7",
},
},
{
scope: [
- 'constant.other.reference.link',
- 'string.other.link',
- 'punctuation.definition.string.begin.markdown',
- 'punctuation.definition.string.end.markdown',
+ "constant.other.reference.link",
+ "string.other.link",
+ "punctuation.definition.string.begin.markdown",
+ "punctuation.definition.string.end.markdown",
],
settings: {
- foreground: '#ff9900',
+ foreground: "#ff9900",
},
},
{
- scope: [
- 'markup.underline.link.markdown',
- ],
+ scope: ["markup.underline.link.markdown"],
settings: {
- fontStyle: 'underline',
- foreground: '#dedcd590',
+ fontStyle: "underline",
+ foreground: "#dedcd590",
},
},
{
- scope: [
- 'type.identifier',
- ],
+ scope: ["type.identifier"],
settings: {
- foreground: '#CCFF00',
+ foreground: "#CCFF00",
},
},
{
- scope: [
- 'entity.other.attribute-name.html.vue',
- ],
+ scope: ["entity.other.attribute-name.html.vue"],
settings: {
- foreground: '#FEE75C',
+ foreground: "#FEE75C",
},
},
{
- scope: [
- 'invalid.illegal.unrecognized-tag.html',
- ],
+ scope: ["invalid.illegal.unrecognized-tag.html"],
settings: {
- fontStyle: 'normal',
+ fontStyle: "normal",
},
},
],
diff --git a/apps/web/lib/octokit.ts b/apps/web/lib/octokit.ts
index e74ff4cf..5d6acd5f 100644
--- a/apps/web/lib/octokit.ts
+++ b/apps/web/lib/octokit.ts
@@ -1,4 +1,4 @@
-import { Octokit } from 'octokit'
+import { Octokit } from "octokit"
export const octokit = new Octokit({
auth: process.env.GITHUB_ACCESS_TOKEN,
diff --git a/apps/web/lib/registry.test.ts b/apps/web/lib/registry.test.ts
index ce73803d..1e7d88b0 100644
--- a/apps/web/lib/registry.test.ts
+++ b/apps/web/lib/registry.test.ts
@@ -1,26 +1,28 @@
-import { describe, expect, it } from 'vitest'
+import { describe, expect, it } from "vitest"
-import { createFileTreeForRegistryItemFiles } from '~/lib/registry'
+import { createFileTreeForRegistryItemFiles } from "~/lib/registry"
-describe('createFileTreeForRegistryItemFiles', () => {
- it('should create a nested file tree structure', async () => {
+describe("createFileTreeForRegistryItemFiles", () => {
+ it("should create a nested file tree structure", async () => {
const files = [
- { path: 'page.tsx' },
- { path: 'components/foo.tsx' },
- { path: 'components/baz.tsx' },
- { path: 'components/boo/quip.tsx' },
+ { path: "page.tsx" },
+ { path: "components/foo.tsx" },
+ { path: "components/baz.tsx" },
+ { path: "components/boo/quip.tsx" },
]
const expectedOutput = [
- { name: 'page.tsx', path: 'page.tsx' },
+ { name: "page.tsx", path: "page.tsx" },
{
- name: 'components',
+ name: "components",
children: [
- { name: 'foo.tsx', path: 'components/foo.tsx' },
- { name: 'baz.tsx', path: 'components/baz.tsx' },
+ { name: "foo.tsx", path: "components/foo.tsx" },
+ { name: "baz.tsx", path: "components/baz.tsx" },
{
- name: 'boo',
- children: [{ name: 'quip.tsx', path: 'components/boo/quip.tsx' }],
+ name: "boo",
+ children: [
+ { name: "quip.tsx", path: "components/boo/quip.tsx" },
+ ],
},
],
},
@@ -30,7 +32,7 @@ describe('createFileTreeForRegistryItemFiles', () => {
expect(result).toEqual(expectedOutput)
})
- it('should return an empty array for empty input', async () => {
+ it("should return an empty array for empty input", async () => {
const result = await createFileTreeForRegistryItemFiles([])
expect(result).toEqual([])
})
diff --git a/apps/web/lib/rehype-component.ts b/apps/web/lib/rehype-component.ts
index cb5d0ab5..ff12bc63 100644
--- a/apps/web/lib/rehype-component.ts
+++ b/apps/web/lib/rehype-component.ts
@@ -1,26 +1,26 @@
-import fs from 'fs'
-import path from 'path'
-import type { UnistNode, UnistTree } from 'types/unist'
-import { u } from 'unist-builder'
-import { visit } from 'unist-util-visit'
+import fs from "fs"
+import path from "path"
+import type { UnistNode, UnistTree } from "types/unist"
+import { u } from "unist-builder"
+import { visit } from "unist-util-visit"
-import { Index } from '../__registry__'
-import { styles } from '../registry/registry-styles'
+import { Index } from "../__registry__"
+import { styles } from "../registry/registry-styles"
export function rehypeComponent() {
return async (tree: UnistTree) => {
visit(tree, (node: UnistNode) => {
- // src prop overrides both name and fileName.
- const { value: srcPath }
- = (getNodeAttributeByName(node, 'src') as {
- name: string
- value?: string
- type?: string
- }) || {}
+ // src prop overrides both name and fileName.
+ const { value: srcPath } =
+ (getNodeAttributeByName(node, "src") as {
+ name: string
+ value?: string
+ type?: string
+ }) || {}
- if (node.name === 'ComponentSource') {
- const name = getNodeAttributeByName(node, 'name')?.value as string
- const fileName = getNodeAttributeByName(node, 'fileName')?.value as
+ if (node.name === "ComponentSource") {
+ const name = getNodeAttributeByName(node, "name")?.value as string
+ const fileName = getNodeAttributeByName(node, "fileName")?.value as
| string
| undefined
@@ -34,56 +34,55 @@ export function rehypeComponent() {
if (srcPath) {
src = srcPath
- }
- else {
+ } else {
const component = Index[style.name][name]
src = fileName
? component.files.find((file: string) => {
- return (
- file.endsWith(`${fileName}.tsx`)
- || file.endsWith(`${fileName}.ts`)
- )
- }) || component.files[0]?.path
+ return (
+ file.endsWith(`${fileName}.tsx`) ||
+ file.endsWith(`${fileName}.ts`)
+ )
+ }) || component.files[0]?.path
: component.files[0]?.path
}
// Read the source file.
const filePath = src
- let source = fs.readFileSync(filePath, 'utf8')
+ let source = fs.readFileSync(filePath, "utf8")
// Replace imports.
// TODO: Use @swc/core and a visitor to replace this.
// For now a simple regex should do.
source = source.replaceAll(
- `~/registry/${style.name}/`,
- '~/components/',
+ `~/registry/${style.name}/`,
+ "~/components/",
)
- source = source.replaceAll('export default', 'export')
+ source = source.replaceAll("export default", "export")
// Add code as children so that rehype can take over at build time.
node.children?.push(
- u('element', {
- tagName: 'pre',
+ u("element", {
+ tagName: "pre",
properties: {
__src__: src,
__style__: style.name,
},
attributes: [
{
- name: 'styleName',
- type: 'mdxJsxAttribute',
+ name: "styleName",
+ type: "mdxJsxAttribute",
value: style.name,
},
],
children: [
- u('element', {
- tagName: 'code',
+ u("element", {
+ tagName: "code",
properties: {
- className: ['language-tsx'],
+ className: ["language-tsx"],
},
children: [
{
- type: 'text',
+ type: "text",
value: source,
},
],
@@ -92,14 +91,13 @@ export function rehypeComponent() {
}),
)
}
- }
- catch (error) {
+ } catch (error) {
console.error(error)
}
}
- if (node.name === 'ComponentPreview') {
- const name = getNodeAttributeByName(node, 'name')?.value as string
+ if (node.name === "ComponentPreview") {
+ const name = getNodeAttributeByName(node, "name")?.value as string
if (!name) {
return null
@@ -112,33 +110,33 @@ export function rehypeComponent() {
// Read the source file.
const filePath = src
- let source = fs.readFileSync(filePath, 'utf8')
+ let source = fs.readFileSync(filePath, "utf8")
// Replace imports.
// TODO: Use @swc/core and a visitor to replace this.
// For now a simple regex should do.
source = source.replaceAll(
- `~/registry/${style.name}/`,
- '~/components/',
+ `~/registry/${style.name}/`,
+ "~/components/",
)
- source = source.replaceAll('export default', 'export')
+ source = source.replaceAll("export default", "export")
// Add code as children so that rehype can take over at build time.
node.children?.push(
- u('element', {
- tagName: 'pre',
+ u("element", {
+ tagName: "pre",
properties: {
__src__: src,
},
children: [
- u('element', {
- tagName: 'code',
+ u("element", {
+ tagName: "code",
properties: {
- className: ['language-tsx'],
+ className: ["language-tsx"],
},
children: [
{
- type: 'text',
+ type: "text",
value: source,
},
],
@@ -147,8 +145,7 @@ export function rehypeComponent() {
}),
)
}
- }
- catch (error) {
+ } catch (error) {
console.error(error)
}
}
@@ -235,40 +232,40 @@ export function rehypeComponent() {
// return
// }
- // // Replace the Source component with a pre element.
- // node.children?.push(
- // u("element", {
- // tagName: "pre",
- // properties: {
- // __src__: src,
- // },
- // children: [
- // u("element", {
- // tagName: "code",
- // properties: {
- // className: ["language-tsx"],
- // },
- // children: [
- // {
- // type: "text",
- // value: source,
- // },
- // ],
- // }),
- // ],
- // })
- // )
- // }
+ // // Replace the Source component with a pre element.
+ // node.children?.push(
+ // u("element", {
+ // tagName: "pre",
+ // properties: {
+ // __src__: src,
+ // },
+ // children: [
+ // u("element", {
+ // tagName: "code",
+ // properties: {
+ // className: ["language-tsx"],
+ // },
+ // children: [
+ // {
+ // type: "text",
+ // value: source,
+ // },
+ // ],
+ // }),
+ // ],
+ // })
+ // )
+ // }
})
}
}
function getNodeAttributeByName(node: UnistNode, name: string) {
- return node.attributes?.find(attribute => attribute.name === name)
+ return node.attributes?.find((attribute) => attribute.name === name)
}
function getComponentSourceFileContent(node: UnistNode) {
- const src = getNodeAttributeByName(node, 'src')?.value as string
+ const src = getNodeAttributeByName(node, "src")?.value as string
if (!src) {
return null
@@ -276,7 +273,7 @@ function getComponentSourceFileContent(node: UnistNode) {
// Read the source file.
const filePath = path.join(process.cwd(), src)
- const source = fs.readFileSync(filePath, 'utf8')
+ const source = fs.readFileSync(filePath, "utf8")
return source
}
diff --git a/apps/web/lib/rehype-npm-command.ts b/apps/web/lib/rehype-npm-command.ts
index 0e964b12..f3bbf405 100644
--- a/apps/web/lib/rehype-npm-command.ts
+++ b/apps/web/lib/rehype-npm-command.ts
@@ -1,64 +1,64 @@
-import type { UnistNode, UnistTree } from 'types/unist'
-import { visit } from 'unist-util-visit'
+import type { UnistNode, UnistTree } from "types/unist"
+import { visit } from "unist-util-visit"
export function rehypeNpmCommand() {
return (tree: UnistTree) => {
visit(tree, (node: UnistNode) => {
- if (node.type !== 'element' || node?.tagName !== 'pre') {
+ if (node.type !== "element" || node?.tagName !== "pre") {
return
}
// npm install.
- if (node.properties?.__rawString__?.startsWith('npm install')) {
+ if (node.properties?.__rawString__?.startsWith("npm install")) {
const npmCommand = node.properties?.__rawString__
node.properties.__npmCommand__ = npmCommand
node.properties.__yarnCommand__ = npmCommand.replace(
- 'npm install',
- 'yarn add',
+ "npm install",
+ "yarn add",
)
node.properties.__pnpmCommand__ = npmCommand.replace(
- 'npm install',
- 'pnpm add',
+ "npm install",
+ "pnpm add",
)
node.properties.__bunCommand__ = npmCommand.replace(
- 'npm install',
- 'bun add',
+ "npm install",
+ "bun add",
)
}
// npx create.
- if (node.properties?.__rawString__?.startsWith('npx create-')) {
+ if (node.properties?.__rawString__?.startsWith("npx create-")) {
const npmCommand = node.properties?.__rawString__
node.properties.__npmCommand__ = npmCommand
node.properties.__yarnCommand__ = npmCommand.replace(
- 'npx create-',
- 'yarn create ',
+ "npx create-",
+ "yarn create ",
)
node.properties.__pnpmCommand__ = npmCommand.replace(
- 'npx create-',
- 'pnpm create ',
+ "npx create-",
+ "pnpm create ",
)
node.properties.__bunCommand__ = npmCommand.replace(
- 'npx',
- 'bunx --bun',
+ "npx",
+ "bunx --bun",
)
}
// npx.
if (
- node.properties?.__rawString__?.startsWith('npx')
- && !node.properties?.__rawString__?.startsWith('npx create-')
+ node.properties?.__rawString__?.startsWith("npx") &&
+ !node.properties?.__rawString__?.startsWith("npx create-")
) {
const npmCommand = node.properties?.__rawString__
node.properties.__npmCommand__ = npmCommand
node.properties.__yarnCommand__ = npmCommand
node.properties.__pnpmCommand__ = npmCommand.replace(
- 'npx',
- 'pnpm dlx',
+ "npx",
+ "pnpm dlx",
)
node.properties.__bunCommand__ = npmCommand.replace(
- 'npx',
- 'bunx --bun',
+ "npx",
+ "bunx --bun",
)
}
})
diff --git a/apps/web/lib/toc.ts b/apps/web/lib/toc.ts
index b527c60d..79160a03 100644
--- a/apps/web/lib/toc.ts
+++ b/apps/web/lib/toc.ts
@@ -1,14 +1,13 @@
-import { toc } from 'mdast-util-toc'
-import { remark } from 'remark'
-import { visit } from 'unist-util-visit'
+import { toc } from "mdast-util-toc"
+import { remark } from "remark"
+import { visit } from "unist-util-visit"
-const textTypes = ['text', 'emphasis', 'strong', 'inlineCode']
+const textTypes = ["text", "emphasis", "strong", "inlineCode"]
function flattenNode(node: any) {
const p: any[] = []
visit(node, (node) => {
- if (!textTypes.includes(node.type))
- return
+ if (!textTypes.includes(node.type)) return
p.push(node.value)
})
return p.join(``)
@@ -25,33 +24,29 @@ interface Items {
}
function getItems(node: any, current: any): Items {
- if (!node)
- return {}
+ if (!node) return {}
- if (node.type === 'paragraph') {
+ if (node.type === "paragraph") {
visit(node, (item) => {
- if (item.type === 'link') {
+ if (item.type === "link") {
current.url = item.url
current.title = flattenNode(node)
}
- if (item.type === 'text')
- current.title = flattenNode(node)
+ if (item.type === "text") current.title = flattenNode(node)
})
return current
}
- if (node.type === 'list') {
+ if (node.type === "list") {
current.items = node.children.map((i: any) => getItems(i, {}))
return current
- }
- else if (node.type === 'listItem') {
+ } else if (node.type === "listItem") {
const heading = getItems(node.children[0], {})
- if (node.children.length > 1)
- getItems(node.children[1], heading)
+ if (node.children.length > 1) getItems(node.children[1], heading)
return heading
}
diff --git a/apps/web/lib/use-mounted.ts b/apps/web/lib/use-mounted.ts
index cba2168b..d9c212ba 100644
--- a/apps/web/lib/use-mounted.ts
+++ b/apps/web/lib/use-mounted.ts
@@ -1,4 +1,4 @@
-import * as React from 'react'
+import * as React from "react"
export function useMounted() {
const [mounted, setMounted] = React.useState(false)
diff --git a/apps/web/lib/utils.ts b/apps/web/lib/utils.ts
index e5a9477b..c2ed1b86 100644
--- a/apps/web/lib/utils.ts
+++ b/apps/web/lib/utils.ts
@@ -1,6 +1,6 @@
-import { type ClassValue, clsx } from 'clsx'
-import type { Metadata } from 'next'
-import { twMerge } from 'tailwind-merge'
+import { type ClassValue, clsx } from "clsx"
+import type { Metadata } from "next"
+import { twMerge } from "tailwind-merge"
// Funktion zum Kombinieren von Klassennamen
export function ny(...inputs: ClassValue[]) {
@@ -10,10 +10,10 @@ export function ny(...inputs: ClassValue[]) {
// Funktion zum Formatieren von Datum
export function formatDate(input: string | number): string {
const date = new Date(input)
- return date.toLocaleDateString('en-US', {
- month: 'long',
- day: 'numeric',
- year: 'numeric',
+ return date.toLocaleDateString("en-US", {
+ month: "long",
+ day: "numeric",
+ year: "numeric",
})
}
@@ -24,14 +24,13 @@ export function absoluteUrl(path: string) {
// Funktion zum Kürzen eines Strings
export function truncate(str: string | null, length: number) {
- if (!str || str.length <= length)
- return str
+ if (!str || str.length <= length) return str
return `${str.slice(0, length - 3)}...`
}
// Fetch-Wrapper zum Abrufen von JSON-Daten
export function fetcher(...args: Parameters) {
- return fetch(...args).then(res => res.json())
+ return fetch(...args).then((res) => res.json())
}
/**
@@ -41,15 +40,17 @@ export function fetcher(...args: Parameters) {
* @return {string}
*/
export function capitalize(str: string, lower = false) {
- return (lower ? str.toLowerCase() : str).replace(/(?:^|[\s"'([{])+\S/g, match =>
- match.toUpperCase())
+ return (lower ? str.toLowerCase() : str).replace(
+ /(?:^|[\s"'([{])+\S/g,
+ (match) => match.toUpperCase(),
+ )
}
// Funktion zum Konstruieren von Metadaten
export function constructMetadata({
- title = 'Nyxb UI - Modern React + Tailwind CSS components & Templates',
- description = 'Nyxb UI is a curated collection of the best landing page components built using React + Tailwind CSS + Framer Motion',
- image = absoluteUrl('/api/og'),
+ title = "Nyxb UI - Modern React + Tailwind CSS components & Templates",
+ description = "Nyxb UI is a curated collection of the best landing page components built using React + Tailwind CSS + Framer Motion",
+ image = absoluteUrl("/api/og"),
...props
}: {
title?: string
@@ -61,17 +62,17 @@ export function constructMetadata({
title,
description,
keywords: [
- 'React',
- 'Tailwind CSS',
- 'Framer Motion',
- 'Landing Page',
- 'Components',
- 'Next.js',
+ "React",
+ "Tailwind CSS",
+ "Framer Motion",
+ "Landing Page",
+ "Components",
+ "Next.js",
],
openGraph: {
title,
description,
- type: 'website',
+ type: "website",
images: [
{
url: image,
@@ -82,21 +83,21 @@ export function constructMetadata({
],
},
twitter: {
- card: 'summary_large_image',
+ card: "summary_large_image",
title,
description,
images: [image],
- creator: '@nyxb0',
+ creator: "@nyxb0",
},
- icons: '/favicon.ico',
- metadataBase: new URL('https://nyxbui.design'),
+ icons: "/favicon.ico",
+ metadataBase: new URL("https://nyxbui.design"),
authors: [
{
- name: 'nyxb',
- url: 'https://twitter.com/nyxb0',
+ name: "nyxb",
+ url: "https://twitter.com/nyxb0",
},
],
- creator: 'nyxb',
+ creator: "nyxb",
...props,
}
}
diff --git a/apps/web/lib/validations/log.ts b/apps/web/lib/validations/log.ts
index e084fca4..6e538b29 100644
--- a/apps/web/lib/validations/log.ts
+++ b/apps/web/lib/validations/log.ts
@@ -1,6 +1,6 @@
-import { z } from 'zod'
+import { z } from "zod"
export const logSchema = z.object({
- event: z.enum(['copy_primitive']),
+ event: z.enum(["copy_primitive"]),
data: z.record(z.string()),
})
diff --git a/apps/web/lib/validations/og.ts b/apps/web/lib/validations/og.ts
index cfecb4e4..7d9629fb 100644
--- a/apps/web/lib/validations/og.ts
+++ b/apps/web/lib/validations/og.ts
@@ -1,7 +1,7 @@
-import { z } from 'zod'
+import { z } from "zod"
export const ogImageSchema = z.object({
heading: z.string(),
type: z.string(),
- mode: z.enum(['light', 'dark']).default('dark'),
+ mode: z.enum(["light", "dark"]).default("dark"),
})
diff --git a/apps/web/postcss.config.mjs b/apps/web/postcss.config.mjs
index 7466fb84..3d6773c4 100644
--- a/apps/web/postcss.config.mjs
+++ b/apps/web/postcss.config.mjs
@@ -1,10 +1,10 @@
/** @type {import('postcss-load-config').Config} */
const config = {
plugins: {
- 'postcss-import': {},
- 'tailwindcss/nesting': 'postcss-nesting',
- 'tailwindcss': {},
- 'autoprefixer': {},
+ "postcss-import": {},
+ "tailwindcss/nesting": "postcss-nesting",
+ tailwindcss: {},
+ autoprefixer: {},
},
}
diff --git a/apps/web/public/r/styles/default/_sink.json b/apps/web/public/r/styles/default/_sink.json
index 55d2b47c..de376a94 100644
--- a/apps/web/public/r/styles/default/_sink.json
+++ b/apps/web/public/r/styles/default/_sink.json
@@ -1,451 +1,451 @@
{
- "name": "_sink",
- "type": "registry:block",
- "description": "",
- "registryDependencies": [
- "accordion",
- "alert",
- "alert-dialog",
- "aspect-ratio",
- "avatar",
- "badge",
- "breadcrumb",
- "button",
- "calendar",
- "card",
- "carousel",
- "chart",
- "checkbox",
- "collapsible",
- "command",
- "context-menu",
- "dialog",
- "drawer",
- "dropdown-menu",
- "hover-card",
- "input",
- "input-otp",
- "label",
- "menubar",
- "navigation-menu",
- "pagination",
- "popover",
- "progress",
- "radio-group",
- "resizable",
- "scroll-area",
- "select",
- "separator",
- "sheet",
- "sidebar",
- "skeleton",
- "slider",
- "sonner",
- "switch",
- "table",
- "tabs",
- "textarea",
- "toast",
- "toggle",
- "toggle-group",
- "tooltip"
- ],
- "files": [
- {
- "path": "block/_sink/page.tsx",
- "content": "import { AccordionDemo } from '~/registry/default/block/_sink/components/accordion-demo'\nimport { AlertDemo } from '~/registry/default/block/_sink/components/alert-demo'\nimport { AlertDialogDemo } from '~/registry/default/block/_sink/components/alert-dialog-demo'\nimport { AppSidebar } from '~/registry/default/block/_sink/components/app-sidebar'\nimport { AspectRatioDemo } from '~/registry/default/block/_sink/components/aspect-ratio-demo'\nimport { AvatarDemo } from '~/registry/default/block/_sink/components/avatar-demo'\nimport { BadgeDemo } from '~/registry/default/block/_sink/components/badge-demo'\nimport { BadgeDestructive } from '~/registry/default/block/_sink/components/badge-destructive'\nimport { BadgeOutline } from '~/registry/default/block/_sink/components/badge-outline'\nimport { BadgeSecondary } from '~/registry/default/block/_sink/components/badge-secondary'\nimport { BreadcrumbDemo } from '~/registry/default/block/_sink/components/breadcrumb-demo'\nimport { ButtonDemo } from '~/registry/default/block/_sink/components/button-demo'\nimport { ButtonDestructive } from '~/registry/default/block/_sink/components/button-destructive'\nimport { ButtonGhost } from '~/registry/default/block/_sink/components/button-ghost'\nimport { ButtonLink } from '~/registry/default/block/_sink/components/button-link'\nimport { ButtonLoading } from '~/registry/default/block/_sink/components/button-loading'\nimport { ButtonOutline } from '~/registry/default/block/_sink/components/button-outline'\nimport { ButtonSecondary } from '~/registry/default/block/_sink/components/button-secondary'\nimport { ButtonWithIcon } from '~/registry/default/block/_sink/components/button-with-icon'\nimport { CalendarDemo } from '~/registry/default/block/_sink/components/calendar-demo'\nimport { CardDemo } from '~/registry/default/block/_sink/components/card-demo'\nimport { CarouselDemo } from '~/registry/default/block/_sink/components/carousel-demo'\nimport { CheckboxDemo } from '~/registry/default/block/_sink/components/checkbox-demo'\nimport { CollapsibleDemo } from '~/registry/default/block/_sink/components/collapsible-demo'\nimport { ComboboxDemo } from '~/registry/default/block/_sink/components/combobox-demo'\nimport { CommandDemo } from '~/registry/default/block/_sink/components/command-demo'\nimport { ComponentWrapper } from '~/registry/default/block/_sink/components/component-wrapper'\nimport { ContextMenuDemo } from '~/registry/default/block/_sink/components/context-menu-demo'\nimport { DatePickerDemo } from '~/registry/default/block/_sink/components/date-picker-demo'\nimport { DialogDemo } from '~/registry/default/block/_sink/components/dialog-demo'\nimport { DrawerDemo } from '~/registry/default/block/_sink/components/drawer-demo'\nimport { DropdownMenuDemo } from '~/registry/default/block/_sink/components/dropdown-menu-demo'\nimport { HoverCardDemo } from '~/registry/default/block/_sink/components/hover-card-demo'\nimport { InputDemo } from '~/registry/default/block/_sink/components/input-demo'\nimport { InputOTPDemo } from '~/registry/default/block/_sink/components/input-otp-demo'\nimport { LabelDemo } from '~/registry/default/block/_sink/components/label-demo'\nimport { MenubarDemo } from '~/registry/default/block/_sink/components/menubar-demo'\nimport { NavigationMenuDemo } from '~/registry/default/block/_sink/components/navigation-menu-demo'\nimport { PaginationDemo } from '~/registry/default/block/_sink/components/pagination-demo'\nimport { PopoverDemo } from '~/registry/default/block/_sink/components/popover-demo'\nimport { ProgressDemo } from '~/registry/default/block/_sink/components/progress-demo'\nimport { RadioGroupDemo } from '~/registry/default/block/_sink/components/radio-group-demo'\nimport { ResizableHandleDemo } from '~/registry/default/block/_sink/components/resizable-handle'\nimport { ScrollAreaDemo } from '~/registry/default/block/_sink/components/scroll-area-demo'\nimport { SelectDemo } from '~/registry/default/block/_sink/components/select-demo'\nimport { SeparatorDemo } from '~/registry/default/block/_sink/components/separator-demo'\nimport { SheetDemo } from '~/registry/default/block/_sink/components/sheet-demo'\nimport { SkeletonDemo } from '~/registry/default/block/_sink/components/skeleton-demo'\nimport { SliderDemo } from '~/registry/default/block/_sink/components/slider-demo'\nimport { SonnerDemo } from '~/registry/default/block/_sink/components/sonner-demo'\nimport { SwitchDemo } from '~/registry/default/block/_sink/components/switch-demo'\nimport { TableDemo } from '~/registry/default/block/_sink/components/table-demo'\nimport { TabsDemo } from '~/registry/default/block/_sink/components/tabs-demo'\nimport { TextareaDemo } from '~/registry/default/block/_sink/components/textarea-demo'\nimport { ToastDemo } from '~/registry/default/block/_sink/components/toast-demo'\nimport { ToggleDemo } from '~/registry/default/block/_sink/components/toggle-demo'\nimport { ToggleDisabled } from '~/registry/default/block/_sink/components/toggle-disabled'\nimport { ToggleGroupDemo } from '~/registry/default/block/_sink/components/toggle-group-demo'\nimport { ToggleOutline } from '~/registry/default/block/_sink/components/toggle-outline'\nimport { ToggleWithText } from '~/registry/default/block/_sink/components/toggle-with-text'\nimport { TooltipDemo } from '~/registry/default/block/_sink/components/tooltip-demo'\nimport {\n Breadcrumb,\n BreadcrumbItem,\n BreadcrumbLink,\n BreadcrumbList,\n BreadcrumbPage,\n BreadcrumbSeparator,\n} from '~/registry/default/ui/breadcrumb'\nimport { Separator } from '~/registry/default/ui/separator'\nimport {\n SidebarInset,\n SidebarProvider,\n SidebarTrigger,\n} from '~/registry/default/ui/sidebar'\n\nexport default function SinkPage() {\n return (\n \n \n \n \n \n
\n
\n \n \n
\n \n \n
\n \n \n
\n \n \n
\n \n \n
\n \n \n \n \n \n
\n \n \n
\n \n \n \n \n \n
\n \n \n \n \n
\n \n \n
\n \n
\n \n \n
\n \n \n
\n \n \n
\n \n \n
\n \n \n
\n \n \n
\n \n \n
\n \n \n
\n \n \n
\n \n \n
\n \n \n
\n \n \n
\n \n \n
\n \n \n
\n \n \n
\n \n \n
\n \n \n
\n \n \n
\n \n \n
\n \n \n
\n \n \n
\n \n \n
\n \n \n
\n \n \n
\n \n \n
\n \n \n
\n \n \n
\n \n \n
\n \n \n
\n \n \n
\n \n \n
\n \n \n
\n \n \n
\n \n \n
\n \n \n
\n \n \n \n \n \n
\n \n
\n \n \n
\n \n \n
\n
\n \n \n )\n}\n",
- "type": "registry:page",
- "target": "app/sink/page.tsx"
- },
- {
- "path": "block/_sink/components/app-sidebar.tsx",
- "content": "'use client'\n\nimport * as React from 'react'\nimport {\n AudioWaveform,\n BookOpen,\n Bot,\n Command,\n Frame,\n GalleryVerticalEnd,\n Map,\n PieChart,\n Settings2,\n SquareTerminal,\n} from 'lucide-react'\n\nimport { NavMain } from '~/registry/default/block/sidebar-07/components/nav-main'\nimport { NavProjects } from '~/registry/default/block/sidebar-07/components/nav-projects'\nimport { NavUser } from '~/registry/default/block/sidebar-07/components/nav-user'\nimport { TeamSwitcher } from '~/registry/default/block/sidebar-07/components/team-switcher'\nimport {\n Sidebar,\n SidebarContent,\n SidebarFooter,\n SidebarHeader,\n SidebarRail,\n} from '~/registry/default/ui/sidebar'\n\n// This is sample data.\nconst data = {\n user: {\n name: 'shadcn',\n email: 'm@example.com',\n avatar: '/avatars/nyxb.jpg',\n },\n teams: [\n {\n name: 'Acme Inc',\n logo: GalleryVerticalEnd,\n plan: 'Enterprise',\n },\n {\n name: 'Acme Corp.',\n logo: AudioWaveform,\n plan: 'Startup',\n },\n {\n name: 'Evil Corp.',\n logo: Command,\n plan: 'Free',\n },\n ],\n navMain: [\n {\n title: 'Playground',\n url: '#',\n icon: SquareTerminal,\n isActive: true,\n items: [\n {\n title: 'History',\n url: '#',\n },\n {\n title: 'Starred',\n url: '#',\n },\n {\n title: 'Settings',\n url: '#',\n },\n ],\n },\n {\n title: 'Models',\n url: '#',\n icon: Bot,\n items: [\n {\n title: 'Genesis',\n url: '#',\n },\n {\n title: 'Explorer',\n url: '#',\n },\n {\n title: 'Quantum',\n url: '#',\n },\n ],\n },\n {\n title: 'Documentation',\n url: '#',\n icon: BookOpen,\n items: [\n {\n title: 'Introduction',\n url: '#',\n },\n {\n title: 'Get Started',\n url: '#',\n },\n {\n title: 'Tutorials',\n url: '#',\n },\n {\n title: 'Changelog',\n url: '#',\n },\n ],\n },\n {\n title: 'Settings',\n url: '#',\n icon: Settings2,\n items: [\n {\n title: 'General',\n url: '#',\n },\n {\n title: 'Team',\n url: '#',\n },\n {\n title: 'Billing',\n url: '#',\n },\n {\n title: 'Limits',\n url: '#',\n },\n ],\n },\n ],\n projects: [\n {\n name: 'Design Engineering',\n url: '#',\n icon: Frame,\n },\n {\n name: 'Sales & Marketing',\n url: '#',\n icon: PieChart,\n },\n {\n name: 'Travel',\n url: '#',\n icon: Map,\n },\n ],\n}\n\nexport function AppSidebar({ ...props }: React.ComponentProps) {\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n )\n}\n",
- "type": "registry:component",
- "target": ""
- },
- {
- "path": "block/_sink/components/component-wrapper.tsx",
- "content": "import { ny } from '~/registry/default/lib/utils'\n\nexport function ComponentWrapper({\n className,\n name,\n children,\n ...props\n}: React.ComponentPropsWithoutRef<'div'> & { name: string }) {\n return (\n \n
\n
div]:max-w-full\">\n {children}\n
\n
\n )\n}\n",
- "type": "registry:component",
- "target": ""
- },
- {
- "path": "block/_sink/components/nav-main.tsx",
- "content": "'use client'\n\nimport { ChevronRight, type LucideIcon } from 'lucide-react'\n\nimport {\n Collapsible,\n CollapsibleContent,\n CollapsibleTrigger,\n} from '~/registry/default/ui/collapsible'\nimport {\n SidebarGroup,\n SidebarGroupLabel,\n SidebarMenu,\n SidebarMenuButton,\n SidebarMenuItem,\n SidebarMenuSub,\n SidebarMenuSubButton,\n SidebarMenuSubItem,\n} from '~/registry/default/ui/sidebar'\n\nexport function NavMain({\n items,\n}: {\n items: {\n title: string\n url: string\n icon?: LucideIcon\n isActive?: boolean\n items?: {\n title: string\n url: string\n }[]\n }[]\n}) {\n return (\n \n Platform \n \n {items.map(item => (\n \n \n \n \n {item.icon && }\n {item.title} \n \n \n \n \n \n {item.items?.map(subItem => (\n \n \n \n {subItem.title} \n \n \n \n ))}\n \n \n \n \n ))}\n \n \n )\n}\n",
- "type": "registry:component",
- "target": ""
- },
- {
- "path": "block/_sink/components/nav-projects.tsx",
- "content": "'use client'\n\nimport {\n Folder,\n Forward,\n type LucideIcon,\n MoreHorizontal,\n Trash2,\n} from 'lucide-react'\n\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuSeparator,\n DropdownMenuTrigger,\n} from '~/registry/default/ui/dropdown-menu'\nimport {\n SidebarGroup,\n SidebarGroupLabel,\n SidebarMenu,\n SidebarMenuAction,\n SidebarMenuButton,\n SidebarMenuItem,\n useSidebar,\n} from '~/registry/default/ui/sidebar'\n\nexport function NavProjects({\n projects,\n}: {\n projects: {\n name: string\n url: string\n icon: LucideIcon\n }[]\n}) {\n const { isMobile } = useSidebar()\n\n return (\n \n Projects \n \n {projects.map(item => (\n \n \n \n \n {item.name} \n \n \n \n \n \n \n More \n \n \n \n \n \n View Project \n \n \n \n Share Project \n \n \n \n \n Delete Project \n \n \n \n \n ))}\n \n \n \n More \n \n \n \n \n )\n}\n",
- "type": "registry:component",
- "target": ""
- },
- {
- "path": "block/_sink/components/nav-user.tsx",
- "content": "'use client'\n\nimport {\n BadgeCheck,\n Bell,\n ChevronsUpDown,\n CreditCard,\n LogOut,\n Sparkles,\n} from 'lucide-react'\n\nimport {\n Avatar,\n AvatarFallback,\n AvatarImage,\n} from '~/registry/default/ui/avatar'\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuGroup,\n DropdownMenuItem,\n DropdownMenuLabel,\n DropdownMenuSeparator,\n DropdownMenuTrigger,\n} from '~/registry/default/ui/dropdown-menu'\nimport {\n SidebarMenu,\n SidebarMenuButton,\n SidebarMenuItem,\n useSidebar,\n} from '~/registry/default/ui/sidebar'\n\nexport function NavUser({\n user,\n}: {\n user: {\n name: string\n email: string\n avatar: string\n }\n}) {\n const { isMobile } = useSidebar()\n\n return (\n \n \n \n \n \n \n \n CN \n \n \n {user.name} \n {user.email} \n
\n \n \n \n \n \n \n
\n \n CN \n \n
\n {user.name} \n {user.email} \n
\n
\n \n \n \n \n \n Upgrade to Pro\n \n \n \n \n \n \n Account\n \n \n \n Billing\n \n \n \n Notifications\n \n \n \n \n \n Log out\n \n \n \n \n \n )\n}\n",
- "type": "registry:component",
- "target": ""
- },
- {
- "path": "block/_sink/components/team-switcher.tsx",
- "content": "'use client'\n\nimport * as React from 'react'\nimport { ChevronsUpDown, Plus } from 'lucide-react'\n\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuLabel,\n DropdownMenuSeparator,\n DropdownMenuShortcut,\n DropdownMenuTrigger,\n} from '~/registry/default/ui/dropdown-menu'\nimport {\n SidebarMenu,\n SidebarMenuButton,\n SidebarMenuItem,\n useSidebar,\n} from '~/registry/default/ui/sidebar'\n\nexport function TeamSwitcher({\n teams,\n}: {\n teams: {\n name: string\n logo: React.ElementType\n plan: string\n }[]\n}) {\n const { isMobile } = useSidebar()\n const [activeTeam, setActiveTeam] = React.useState(teams[0])\n\n return (\n \n \n \n \n \n \n \n \n {activeTeam.name}\n \n {activeTeam.plan} \n
\n \n \n \n \n \n Teams\n \n {teams.map((team, index) => (\n setActiveTeam(team)}\n className=\"gap-2 p-2\"\n >\n \n \n
\n {team.name}\n \n ⌘\n {index + 1}\n \n \n ))}\n \n \n \n Add team
\n \n \n \n \n \n )\n}\n",
- "type": "registry:component",
- "target": ""
- },
- {
- "path": "block/_sink/components/accordion-demo.tsx",
- "content": "import {\n Accordion,\n AccordionContent,\n AccordionItem,\n AccordionTrigger,\n} from '~/registry/default/ui/accordion'\n\nexport function AccordionDemo() {\n return (\n \n \n Is it accessible? \n \n Yes. It adheres to the WAI-ARIA design pattern.\n \n \n \n Is it styled? \n \n Yes. It comes with default styles that matches the other\n components' aesthetic.\n \n \n \n Is it animated? \n \n Yes. It's animated by default, but you can disable it if you prefer.\n \n \n \n )\n}\n",
- "type": "registry:component",
- "target": ""
- },
- {
- "path": "block/_sink/components/alert-demo.tsx",
- "content": "import { Terminal } from 'lucide-react'\n\nimport {\n Alert,\n AlertDescription,\n AlertTitle,\n} from '~/registry/default/ui/alert'\n\nexport function AlertDemo() {\n return (\n \n \n Heads up! \n \n You can add components to your app using the cli.\n \n \n )\n}\n",
- "type": "registry:component",
- "target": ""
- },
- {
- "path": "block/_sink/components/alert-dialog-demo.tsx",
- "content": "import {\n AlertDialog,\n AlertDialogAction,\n AlertDialogCancel,\n AlertDialogContent,\n AlertDialogDescription,\n AlertDialogFooter,\n AlertDialogHeader,\n AlertDialogTitle,\n AlertDialogTrigger,\n} from '~/registry/default/ui/alert-dialog'\nimport { Button } from '~/registry/default/ui/button'\n\nexport function AlertDialogDemo() {\n return (\n \n \n Show Dialog \n \n \n \n Are you absolutely sure? \n \n This action cannot be undone. This will permanently delete your\n account and remove your data from our servers.\n \n \n \n Cancel \n Continue \n \n \n \n )\n}\n",
- "type": "registry:component",
- "target": ""
- },
- {
- "path": "block/_sink/components/aspect-ratio-demo.tsx",
- "content": "import Image from 'next/image'\n\nimport { AspectRatio } from '~/registry/default/ui/aspect-ratio'\n\nexport function AspectRatioDemo() {\n return (\n \n \n \n )\n}\n",
- "type": "registry:component",
- "target": ""
- },
- {
- "path": "block/_sink/components/avatar-demo.tsx",
- "content": "import {\n Avatar,\n AvatarFallback,\n AvatarImage,\n} from '~/registry/default/ui/avatar'\n\nexport function AvatarDemo() {\n return (\n \n \n CN \n \n )\n}\n",
- "type": "registry:component",
- "target": ""
- },
- {
- "path": "block/_sink/components/badge-demo.tsx",
- "content": "import { Badge } from '~/registry/default/ui/badge'\n\nexport function BadgeDemo() {\n return Badge \n}\n",
- "type": "registry:component",
- "target": ""
- },
- {
- "path": "block/_sink/components/breadcrumb-demo.tsx",
- "content": "import {\n Breadcrumb,\n BreadcrumbEllipsis,\n BreadcrumbItem,\n BreadcrumbLink,\n BreadcrumbList,\n BreadcrumbPage,\n BreadcrumbSeparator,\n} from '~/registry/default/ui/breadcrumb'\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuTrigger,\n} from '~/registry/default/ui/dropdown-menu'\n\nexport function BreadcrumbDemo() {\n return (\n \n \n \n Home \n \n \n \n \n \n \n Toggle menu \n \n \n Documentation \n Themes \n GitHub \n \n \n \n \n \n Components \n \n \n \n Breadcrumb \n \n \n \n )\n}\n",
- "type": "registry:component",
- "target": ""
- },
- {
- "path": "block/_sink/components/button-demo.tsx",
- "content": "import { Button } from '~/registry/default/ui/button'\n\nexport function ButtonDemo() {\n return Button \n}\n",
- "type": "registry:component",
- "target": ""
- },
- {
- "path": "block/_sink/components/calendar-demo.tsx",
- "content": "'use client'\n\nimport * as React from 'react'\n\nimport { Calendar } from '~/registry/default/ui/calendar'\n\nexport function CalendarDemo() {\n const [date, setDate] = React.useState(new Date())\n\n return (\n \n )\n}\n",
- "type": "registry:component",
- "target": ""
- },
- {
- "path": "block/_sink/components/card-demo.tsx",
- "content": "import { BellRing, Check } from 'lucide-react'\n\nimport { ny } from '~/lib/utils'\nimport { Button } from '~/registry/default/ui/button'\nimport {\n Card,\n CardContent,\n CardDescription,\n CardFooter,\n CardHeader,\n CardTitle,\n} from '~/registry/default/ui/card'\nimport { Switch } from '~/registry/default/ui/switch'\n\nconst notifications = [\n {\n title: 'Your call has been confirmed.',\n description: '1 hour ago',\n },\n {\n title: 'You have a new message!',\n description: '1 hour ago',\n },\n {\n title: 'Your subscription is expiring soon!',\n description: '2 hours ago',\n },\n]\n\ntype CardProps = React.ComponentProps\n\nexport function CardDemo({ className, ...props }: CardProps) {\n return (\n \n \n Notifications \n You have 3 unread messages. \n \n \n \n
\n
\n
\n Push Notifications\n
\n
\n Send notifications to device.\n
\n
\n
\n
\n \n {notifications.map((notification, index) => (\n
\n
\n
\n
\n {notification.title}\n
\n
\n {notification.description}\n
\n
\n
\n ))}\n
\n \n \n \n \n {' '}\n Mark all as read\n \n \n \n )\n}\n",
- "type": "registry:component",
- "target": ""
- },
- {
- "path": "block/_sink/components/carousel-demo.tsx",
- "content": "import * as React from 'react'\n\nimport { Card, CardContent } from '~/registry/default/ui/card'\nimport {\n Carousel,\n CarouselContent,\n CarouselItem,\n CarouselNext,\n CarouselPrevious,\n} from '~/registry/default/ui/carousel'\n\nexport function CarouselDemo() {\n return (\n \n \n {Array.from({ length: 5 }).map((_, index) => (\n \n \n \n \n {index + 1} \n \n \n
\n \n ))}\n \n \n \n \n )\n}\n",
- "type": "registry:component",
- "target": ""
- },
- {
- "path": "block/_sink/components/checkbox-demo.tsx",
- "content": "'use client'\n\nimport { Checkbox } from '~/registry/default/ui/checkbox'\n\nexport function CheckboxDemo() {\n return (\n \n \n \n Accept terms and conditions\n \n
\n )\n}\n",
- "type": "registry:component",
- "target": ""
- },
- {
- "path": "block/_sink/components/collapsible-demo.tsx",
- "content": "'use client'\n\nimport * as React from 'react'\nimport { ChevronsUpDown } from 'lucide-react'\n\nimport { Button } from '~/registry/default/ui/button'\nimport {\n Collapsible,\n CollapsibleContent,\n CollapsibleTrigger,\n} from '~/registry/default/ui/collapsible'\n\nexport function CollapsibleDemo() {\n const [isOpen, setIsOpen] = React.useState(false)\n\n return (\n \n \n
\n @peduarte starred 3 repositories\n \n \n \n \n Toggle \n \n \n \n \n @radix-ui/primitives\n
\n \n \n @radix-ui/colors\n
\n \n @stitches/react\n
\n \n \n )\n}\n",
- "type": "registry:component",
- "target": ""
- },
- {
- "path": "block/_sink/components/combobox-demo.tsx",
- "content": "'use client'\n\nimport * as React from 'react'\nimport { Check, ChevronsUpDown } from 'lucide-react'\n\nimport { ny } from '~/lib/utils'\nimport { Button } from '~/registry/default/ui/button'\nimport {\n Command,\n CommandEmpty,\n CommandGroup,\n CommandInput,\n CommandItem,\n CommandList,\n} from '~/registry/default/ui/command'\nimport {\n Popover,\n PopoverContent,\n PopoverTrigger,\n} from '~/registry/default/ui/popover'\n\nconst frameworks = [\n {\n value: 'next.js',\n label: 'Next.js',\n },\n {\n value: 'sveltekit',\n label: 'SvelteKit',\n },\n {\n value: 'nuxt.js',\n label: 'Nuxt.js',\n },\n {\n value: 'remix',\n label: 'Remix',\n },\n {\n value: 'astro',\n label: 'Astro',\n },\n]\n\nexport function ComboboxDemo() {\n const [open, setOpen] = React.useState(false)\n const [value, setValue] = React.useState('')\n\n return (\n \n \n \n {value\n ? frameworks.find(framework => framework.value === value)?.label\n : 'Select framework...'}\n \n \n \n \n \n \n \n No framework found. \n \n {frameworks.map(framework => (\n {\n setValue(currentValue === value ? '' : currentValue)\n setOpen(false)\n }}\n >\n {framework.label}\n \n \n ))}\n \n \n \n \n \n )\n}\n",
- "type": "registry:component",
- "target": ""
- },
- {
- "path": "block/_sink/components/command-demo.tsx",
- "content": "import {\n Calculator,\n Calendar,\n CreditCard,\n Settings,\n Smile,\n User,\n} from 'lucide-react'\n\nimport {\n Command,\n CommandEmpty,\n CommandGroup,\n CommandInput,\n CommandItem,\n CommandList,\n CommandSeparator,\n CommandShortcut,\n} from '~/registry/default/ui/command'\n\nexport function CommandDemo() {\n return (\n \n \n \n No results found. \n \n \n \n Calendar \n \n \n \n Search Emoji \n \n \n \n Calculator \n \n \n \n \n \n \n Profile \n ⌘P \n \n \n \n Billing \n ⌘B \n \n \n \n Settings \n ⌘S \n \n \n \n \n )\n}\n",
- "type": "registry:component",
- "target": ""
- },
- {
- "path": "block/_sink/components/context-menu-demo.tsx",
- "content": "import {\n ContextMenu,\n ContextMenuCheckboxItem,\n ContextMenuContent,\n ContextMenuItem,\n ContextMenuLabel,\n ContextMenuRadioGroup,\n ContextMenuRadioItem,\n ContextMenuSeparator,\n ContextMenuShortcut,\n ContextMenuSub,\n ContextMenuSubContent,\n ContextMenuSubTrigger,\n ContextMenuTrigger,\n} from '~/registry/default/ui/context-menu'\n\nexport function ContextMenuDemo() {\n return (\n \n \n Right click here\n \n \n \n Back\n ⌘[ \n \n \n Forward\n ⌘] \n \n \n Reload\n ⌘R \n \n \n More Tools \n \n \n Save Page As...\n ⇧⌘S \n \n Create Shortcut... \n Name Window... \n \n Developer Tools \n \n \n \n \n Show Bookmarks Bar\n ⌘⇧B \n \n Show Full URLs \n \n \n People \n \n \n Pedro Duarte\n \n Colm Tuite \n \n \n \n )\n}\n",
- "type": "registry:component",
- "target": ""
- },
- {
- "path": "block/_sink/components/date-picker-demo.tsx",
- "content": "'use client'\n\nimport * as React from 'react'\nimport { format } from 'date-fns'\nimport { CalendarIcon } from 'lucide-react'\n\nimport { ny } from '~/lib/utils'\nimport { Button } from '~/registry/default/ui/button'\nimport { Calendar } from '~/registry/default/ui/calendar'\nimport {\n Popover,\n PopoverContent,\n PopoverTrigger,\n} from '~/registry/default/ui/popover'\n\nexport function DatePickerDemo() {\n const [date, setDate] = React.useState()\n\n return (\n \n \n \n \n {date ? format(date, 'PPP') : Pick a date }\n \n \n \n \n \n \n )\n}\n",
- "type": "registry:component",
- "target": ""
- },
- {
- "path": "block/_sink/components/dialog-demo.tsx",
- "content": "import { Button } from '~/registry/default/ui/button'\nimport {\n Dialog,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogTitle,\n DialogTrigger,\n} from '~/registry/default/ui/dialog'\nimport { Input } from '~/registry/default/ui/input'\nimport { Label } from '~/registry/default/ui/label'\n\nexport function DialogDemo() {\n return (\n \n \n Edit Profile \n \n \n \n Edit profile \n \n Make changes to your profile here. Click save when you're done.\n \n \n \n \n Save changes \n \n \n \n )\n}\n",
- "type": "registry:component",
- "target": ""
- },
- {
- "path": "block/_sink/components/drawer-demo.tsx",
- "content": "'use client'\n\nimport * as React from 'react'\nimport { Minus, Plus } from 'lucide-react'\nimport { Bar, BarChart, ResponsiveContainer } from 'recharts'\n\nimport { Button } from '~/registry/default/ui/button'\nimport {\n Drawer,\n DrawerClose,\n DrawerContent,\n DrawerDescription,\n DrawerFooter,\n DrawerHeader,\n DrawerTitle,\n DrawerTrigger,\n} from '~/registry/default/ui/drawer'\n\nconst data = [\n {\n goal: 400,\n },\n {\n goal: 300,\n },\n {\n goal: 200,\n },\n {\n goal: 300,\n },\n {\n goal: 200,\n },\n {\n goal: 278,\n },\n {\n goal: 189,\n },\n {\n goal: 239,\n },\n {\n goal: 300,\n },\n {\n goal: 200,\n },\n {\n goal: 278,\n },\n {\n goal: 189,\n },\n {\n goal: 349,\n },\n]\n\nexport function DrawerDemo() {\n const [goal, setGoal] = React.useState(350)\n\n function onClick(adjustment: number) {\n setGoal(Math.max(200, Math.min(400, goal + adjustment)))\n }\n\n return (\n \n \n Open Drawer \n \n \n \n
\n Move Goal \n Set your daily activity goal. \n \n
\n
\n
onClick(-10)}\n disabled={goal <= 200}\n >\n \n Decrease \n \n
\n
\n {goal}\n
\n
\n Calories/day\n
\n
\n
onClick(10)}\n disabled={goal >= 400}\n >\n \n Increase \n \n
\n
\n \n \n \n \n \n
\n
\n
\n Submit \n \n Cancel \n \n \n
\n \n \n )\n}\n",
- "type": "registry:component",
- "target": ""
- },
- {
- "path": "block/_sink/components/dropdown-menu-demo.tsx",
- "content": "import { Button } from '~/registry/default/ui/button'\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuGroup,\n DropdownMenuItem,\n DropdownMenuLabel,\n DropdownMenuPortal,\n DropdownMenuSeparator,\n DropdownMenuShortcut,\n DropdownMenuSub,\n DropdownMenuSubContent,\n DropdownMenuSubTrigger,\n DropdownMenuTrigger,\n} from '~/registry/default/ui/dropdown-menu'\n\nexport function DropdownMenuDemo() {\n return (\n \n \n Open \n \n \n My Account \n \n \n \n Profile\n ⇧⌘P \n \n \n Billing\n ⌘B \n \n \n Settings\n ⌘S \n \n \n Keyboard shortcuts\n ⌘K \n \n \n \n \n Team \n \n Invite users \n \n \n Email \n Message \n \n More... \n \n \n \n \n New Team\n ⌘+T \n \n \n \n GitHub \n Support \n API \n \n \n Log out\n ⇧⌘Q \n \n \n \n )\n}\n",
- "type": "registry:component",
- "target": ""
- },
- {
- "path": "block/_sink/components/hover-card-demo.tsx",
- "content": "import { CalendarIcon } from 'lucide-react'\n\nimport {\n Avatar,\n AvatarFallback,\n AvatarImage,\n} from '~/registry/default/ui/avatar'\nimport { Button } from '~/registry/default/ui/button'\nimport {\n HoverCard,\n HoverCardContent,\n HoverCardTrigger,\n} from '~/registry/default/ui/hover-card'\n\nexport function HoverCardDemo() {\n return (\n \n \n @nextjs \n \n \n \n
\n \n VC \n \n
\n
@nextjs \n
\n The React Framework – created and maintained by @vercel.\n
\n
\n \n {' '}\n \n Joined December 2021\n \n
\n
\n
\n \n \n )\n}\n",
- "type": "registry:component",
- "target": ""
- },
- {
- "path": "block/_sink/components/input-demo.tsx",
- "content": "import { Input } from '~/registry/default/ui/input'\n\nexport function InputDemo() {\n return \n}\n",
- "type": "registry:component",
- "target": ""
- },
- {
- "path": "block/_sink/components/input-otp-demo.tsx",
- "content": "import {\n InputOTP,\n InputOTPGroup,\n InputOTPSeparator,\n InputOTPSlot,\n} from '~/registry/default/ui/input-otp'\n\nexport function InputOTPDemo() {\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n )\n}\n",
- "type": "registry:component",
- "target": ""
- },
- {
- "path": "block/_sink/components/label-demo.tsx",
- "content": "import { Checkbox } from '~/registry/default/ui/checkbox'\nimport { Label } from '~/registry/default/ui/label'\n\nexport function LabelDemo() {\n return (\n \n
\n \n Accept terms and conditions \n
\n
\n )\n}\n",
- "type": "registry:component",
- "target": ""
- },
- {
- "path": "block/_sink/components/menubar-demo.tsx",
- "content": "import {\n Menubar,\n MenubarCheckboxItem,\n MenubarContent,\n MenubarItem,\n MenubarMenu,\n MenubarRadioGroup,\n MenubarRadioItem,\n MenubarSeparator,\n MenubarShortcut,\n MenubarSub,\n MenubarSubContent,\n MenubarSubTrigger,\n MenubarTrigger,\n} from '~/registry/default/ui/menubar'\n\nexport function MenubarDemo() {\n return (\n \n \n File \n \n \n New Tab\n {' '}\n ⌘T \n \n \n New Window\n {' '}\n ⌘N \n \n New Incognito Window \n \n \n Share \n \n Email link \n Messages \n Notes \n \n \n \n \n Print...\n {' '}\n ⌘P \n \n \n \n \n Edit \n \n \n Undo\n {' '}\n ⌘Z \n \n \n Redo\n {' '}\n ⇧⌘Z \n \n \n \n Find \n \n Search the web \n \n Find... \n Find Next \n Find Previous \n \n \n \n Cut \n Copy \n Paste \n \n \n \n View \n \n Always Show Bookmarks Bar \n \n Always Show Full URLs\n \n \n \n Reload\n {' '}\n ⌘R \n \n \n Force Reload\n {' '}\n ⇧⌘R \n \n \n Toggle Fullscreen \n \n Hide Sidebar \n \n \n \n Profiles \n \n \n Andy \n Benoit \n Luis \n \n \n Edit... \n \n Add Profile... \n \n \n \n )\n}\n",
- "type": "registry:component",
- "target": ""
- },
- {
- "path": "block/_sink/components/navigation-menu-demo.tsx",
- "content": "'use client'\n\nimport * as React from 'react'\nimport Link from 'next/link'\n\nimport { ny } from '~/lib/utils'\nimport {\n NavigationMenu,\n NavigationMenuContent,\n NavigationMenuItem,\n NavigationMenuLink,\n NavigationMenuList,\n NavigationMenuTrigger,\n navigationMenuTriggerStyle,\n} from '~/registry/default/ui/navigation-menu'\n\nconst components: { title: string, href: string, description: string }[] = [\n {\n title: 'Alert Dialog',\n href: '/docs/primitives/alert-dialog',\n description:\n 'A modal dialog that interrupts the user with important content and expects a response.',\n },\n {\n title: 'Hover Card',\n href: '/docs/primitives/hover-card',\n description:\n 'For sighted users to preview content available behind a link.',\n },\n {\n title: 'Progress',\n href: '/docs/primitives/progress',\n description:\n 'Displays an indicator showing the completion progress of a task, typically displayed as a progress bar.',\n },\n {\n title: 'Scroll-area',\n href: '/docs/primitives/scroll-area',\n description: 'Visually or semantically separates content.',\n },\n {\n title: 'Tabs',\n href: '/docs/primitives/tabs',\n description:\n 'A set of layered sections of content—known as tab panels—that are displayed one at a time.',\n },\n {\n title: 'Tooltip',\n href: '/docs/primitives/tooltip',\n description:\n 'A popup that displays information related to an element when the element receives keyboard focus or the mouse hovers over it.',\n },\n]\n\nexport function NavigationMenuDemo() {\n return (\n \n \n \n Getting started \n \n \n \n \n \n Components \n \n \n {components.map(component => (\n \n {component.description}\n \n ))}\n \n \n \n \n \n \n Documentation\n \n \n \n \n \n )\n}\n\nconst ListItem = React.forwardRef<\n React.ElementRef<'a'>,\n React.ComponentPropsWithoutRef<'a'>\n>(({ className, title, children, ...props }, ref) => {\n return (\n \n \n \n {title}
\n \n {children}\n
\n \n \n \n )\n})\nListItem.displayName = 'ListItem'\n",
- "type": "registry:component",
- "target": ""
- },
- {
- "path": "block/_sink/components/pagination-demo.tsx",
- "content": "import {\n Pagination,\n PaginationContent,\n PaginationEllipsis,\n PaginationItem,\n PaginationLink,\n PaginationNext,\n PaginationPrevious,\n} from '~/registry/default/ui/pagination'\n\nexport function PaginationDemo() {\n return (\n \n \n \n \n \n \n 1 \n \n \n \n 2\n \n \n \n 3 \n \n \n \n \n \n \n \n \n \n )\n}\n",
- "type": "registry:component",
- "target": ""
- },
- {
- "path": "block/_sink/components/popover-demo.tsx",
- "content": "import { Button } from '~/registry/default/ui/button'\nimport { Input } from '~/registry/default/ui/input'\nimport { Label } from '~/registry/default/ui/label'\nimport {\n Popover,\n PopoverContent,\n PopoverTrigger,\n} from '~/registry/default/ui/popover'\n\nexport function PopoverDemo() {\n return (\n \n \n Open popover \n \n \n \n
\n
Dimensions \n
\n Set the dimensions for the layer.\n
\n
\n
\n
\n \n \n )\n}\n",
- "type": "registry:component",
- "target": ""
- },
- {
- "path": "block/_sink/components/progress-demo.tsx",
- "content": "'use client'\n\nimport * as React from 'react'\n\nimport { Progress } from '~/registry/default/ui/progress'\n\nexport function ProgressDemo() {\n const [progress, setProgress] = React.useState(13)\n\n React.useEffect(() => {\n const timer = setTimeout(() => setProgress(66), 500)\n return () => clearTimeout(timer)\n }, [])\n\n return \n}\n",
- "type": "registry:component",
- "target": ""
- },
- {
- "path": "block/_sink/components/radio-group-demo.tsx",
- "content": "import { Label } from '~/registry/default/ui/label'\nimport { RadioGroup, RadioGroupItem } from '~/registry/default/ui/radio-group'\n\nexport function RadioGroupDemo() {\n return (\n \n \n \n Default \n
\n \n \n Comfortable \n
\n \n \n Compact \n
\n \n )\n}\n",
- "type": "registry:component",
- "target": ""
- },
- {
- "path": "block/_sink/components/resizable-handle.tsx",
- "content": "import {\n ResizableHandle,\n ResizablePanel,\n ResizablePanelGroup,\n} from '~/registry/default/ui/resizable'\n\nexport function ResizableHandleDemo() {\n return (\n \n \n \n Sidebar \n
\n \n \n \n \n Content \n
\n \n \n )\n}\n",
- "type": "registry:component",
- "target": ""
- },
- {
- "path": "block/_sink/components/scroll-area-demo.tsx",
- "content": "import * as React from 'react'\n\nimport { ScrollArea } from '~/registry/default/ui/scroll-area'\nimport { Separator } from '~/registry/default/ui/separator'\n\nconst tags = Array.from({ length: 50 }).map(\n (_, i, a) => `v1.2.0-beta.${a.length - i}`,\n)\n\nexport function ScrollAreaDemo() {\n return (\n \n \n
Tags \n {tags.map(tag => (\n
\n {tag}
\n \n \n ))}\n
\n \n )\n}\n",
- "type": "registry:component",
- "target": ""
- },
- {
- "path": "block/_sink/components/select-demo.tsx",
- "content": "import * as React from 'react'\n\nimport {\n Select,\n SelectContent,\n SelectGroup,\n SelectItem,\n SelectLabel,\n SelectTrigger,\n SelectValue,\n} from '~/registry/default/ui/select'\n\nexport function SelectDemo() {\n return (\n \n \n \n \n \n \n Fruits \n Apple \n Banana \n Blueberry \n Grapes \n Pineapple \n \n \n \n )\n}\n",
- "type": "registry:component",
- "target": ""
- },
- {
- "path": "block/_sink/components/separator-demo.tsx",
- "content": "import { Separator } from '~/registry/default/ui/separator'\n\nexport function SeparatorDemo() {\n return (\n \n
\n
Radix Primitives \n
\n An open-source UI component library.\n
\n
\n
\n
\n
Blog
\n
\n
Docs
\n
\n
Source
\n
\n
\n )\n}\n",
- "type": "registry:component",
- "target": ""
- },
- {
- "path": "block/_sink/components/sheet-demo.tsx",
- "content": "import { Button } from '~/registry/default/ui/button'\nimport { Input } from '~/registry/default/ui/input'\nimport { Label } from '~/registry/default/ui/label'\nimport {\n Sheet,\n SheetClose,\n SheetContent,\n SheetDescription,\n SheetFooter,\n SheetHeader,\n SheetTitle,\n SheetTrigger,\n} from '~/registry/default/ui/sheet'\n\nexport function SheetDemo() {\n return (\n \n \n Open \n \n \n \n Edit profile \n \n Make changes to your profile here. Click save when you're done.\n \n \n \n \n \n Save changes \n \n \n \n \n )\n}\n",
- "type": "registry:component",
- "target": ""
- },
- {
- "path": "block/_sink/components/skeleton-demo.tsx",
- "content": "import { Skeleton } from '~/registry/default/ui/skeleton'\n\nexport function SkeletonDemo() {\n return (\n \n )\n}\n",
- "type": "registry:component",
- "target": ""
- },
- {
- "path": "block/_sink/components/slider-demo.tsx",
- "content": "import { ny } from '~/lib/utils'\nimport { Slider } from '~/registry/default/ui/slider'\n\ntype SliderProps = React.ComponentProps\n\nexport function SliderDemo({ className, ...props }: SliderProps) {\n return (\n \n )\n}\n",
- "type": "registry:component",
- "target": ""
- },
- {
- "path": "block/_sink/components/sonner-demo.tsx",
- "content": "'use client'\n\nimport { toast } from 'sonner'\n\nimport { Button } from '~/registry/default/ui/button'\n\nexport function SonnerDemo() {\n return (\n \n toast('Event has been created', {\n description: 'Sunday, December 03, 2023 at 9:00 AM',\n action: {\n label: 'Undo',\n // eslint-disable-next-line no-console\n onClick: () => console.log('Undo'),\n },\n })}\n >\n Show Toast\n \n )\n}\n",
- "type": "registry:component",
- "target": ""
- },
- {
- "path": "block/_sink/components/switch-demo.tsx",
- "content": "import { Label } from '~/registry/default/ui/label'\nimport { Switch } from '~/registry/default/ui/switch'\n\nexport function SwitchDemo() {\n return (\n \n \n Airplane Mode \n
\n )\n}\n",
- "type": "registry:component",
- "target": ""
- },
- {
- "path": "block/_sink/components/table-demo.tsx",
- "content": "import {\n Table,\n TableBody,\n TableCaption,\n TableCell,\n TableFooter,\n TableHead,\n TableHeader,\n TableRow,\n} from '~/registry/default/ui/table'\n\nconst invoices = [\n {\n invoice: 'INV001',\n paymentStatus: 'Paid',\n totalAmount: '$250.00',\n paymentMethod: 'Credit Card',\n },\n {\n invoice: 'INV002',\n paymentStatus: 'Pending',\n totalAmount: '$150.00',\n paymentMethod: 'PayPal',\n },\n {\n invoice: 'INV003',\n paymentStatus: 'Unpaid',\n totalAmount: '$350.00',\n paymentMethod: 'Bank Transfer',\n },\n {\n invoice: 'INV004',\n paymentStatus: 'Paid',\n totalAmount: '$450.00',\n paymentMethod: 'Credit Card',\n },\n {\n invoice: 'INV005',\n paymentStatus: 'Paid',\n totalAmount: '$550.00',\n paymentMethod: 'PayPal',\n },\n {\n invoice: 'INV006',\n paymentStatus: 'Pending',\n totalAmount: '$200.00',\n paymentMethod: 'Bank Transfer',\n },\n {\n invoice: 'INV007',\n paymentStatus: 'Unpaid',\n totalAmount: '$300.00',\n paymentMethod: 'Credit Card',\n },\n]\n\nexport function TableDemo() {\n return (\n \n A list of your recent invoices. \n \n \n Invoice \n Status \n Method \n Amount \n \n \n \n {invoices.map(invoice => (\n \n {invoice.invoice} \n {invoice.paymentStatus} \n {invoice.paymentMethod} \n {invoice.totalAmount} \n \n ))}\n \n \n \n Total \n $2,500.00 \n \n \n
\n )\n}\n",
- "type": "registry:component",
- "target": ""
- },
- {
- "path": "block/_sink/components/tabs-demo.tsx",
- "content": "import { Button } from '~/registry/default/ui/button'\nimport {\n Card,\n CardContent,\n CardDescription,\n CardFooter,\n CardHeader,\n CardTitle,\n} from '~/registry/default/ui/card'\nimport { Input } from '~/registry/default/ui/input'\nimport { Label } from '~/registry/default/ui/label'\nimport {\n Tabs,\n TabsContent,\n TabsList,\n TabsTrigger,\n} from '~/registry/default/ui/tabs'\n\nexport function TabsDemo() {\n return (\n \n \n Account \n Password \n \n \n \n \n Account \n \n Make changes to your account here. Click save when you're done.\n \n \n \n \n Name \n \n
\n \n Username \n \n
\n \n \n Save changes \n \n \n \n \n \n \n Password \n \n Change your password here. After saving, you'll be logged out.\n \n \n \n \n Current password \n \n
\n \n New password \n \n
\n \n \n Save password \n \n \n \n \n )\n}\n",
- "type": "registry:component",
- "target": ""
- },
- {
- "path": "block/_sink/components/textarea-demo.tsx",
- "content": "import { Textarea } from '~/registry/default/ui/textarea'\n\nexport function TextareaDemo() {\n return \n}\n",
- "type": "registry:component",
- "target": ""
- },
- {
- "path": "block/_sink/components/toast-demo.tsx",
- "content": "'use client'\n\nimport { useToast } from '~/registry/default/hooks/use-toast'\nimport { Button } from '~/registry/default/ui/button'\nimport { ToastAction } from '~/registry/default/ui/toast'\n\nexport function ToastDemo() {\n const { toast } = useToast()\n\n return (\n {\n toast({\n title: 'Scheduled: Catch up ',\n description: 'Friday, February 10, 2023 at 5:57 PM',\n action: (\n Undo \n ),\n })\n }}\n >\n Add to calendar\n \n )\n}\n",
- "type": "registry:component",
- "target": ""
- },
- {
- "path": "block/_sink/components/toggle-demo.tsx",
- "content": "import { Bold } from 'lucide-react'\n\nimport { Toggle } from '~/registry/default/ui/toggle'\n\nexport function ToggleDemo() {\n return (\n \n \n \n )\n}\n",
- "type": "registry:component",
- "target": ""
- },
- {
- "path": "block/_sink/components/toggle-group-demo.tsx",
- "content": "import { Bold, Italic, Underline } from 'lucide-react'\n\nimport {\n ToggleGroup,\n ToggleGroupItem,\n} from '~/registry/default/ui/toggle-group'\n\nexport function ToggleGroupDemo() {\n return (\n \n \n \n \n \n \n \n \n \n \n \n )\n}\n",
- "type": "registry:component",
- "target": ""
- },
- {
- "path": "block/_sink/components/tooltip-demo.tsx",
- "content": "import { Button } from '~/registry/default/ui/button'\nimport {\n Tooltip,\n TooltipContent,\n TooltipProvider,\n TooltipTrigger,\n} from '~/registry/default/ui/tooltip'\n\nexport function TooltipDemo() {\n return (\n \n \n \n Hover \n \n \n Add to library
\n \n \n \n )\n}\n",
- "type": "registry:component",
- "target": ""
- },
- {
- "path": "block/_sink/components/badge-destructive.tsx",
- "content": "import { Badge } from '~/registry/default/ui/badge'\n\nexport function BadgeDestructive() {\n return Destructive \n}\n",
- "type": "registry:component",
- "target": ""
- },
- {
- "path": "block/_sink/components/badge-outline.tsx",
- "content": "import { Badge } from '~/registry/default/ui/badge'\n\nexport function BadgeOutline() {\n return Outline \n}\n",
- "type": "registry:component",
- "target": ""
- },
- {
- "path": "block/_sink/components/badge-secondary.tsx",
- "content": "import { Badge } from '~/registry/default/ui/badge'\n\nexport function BadgeSecondary() {\n return Secondary \n}\n",
- "type": "registry:component",
- "target": ""
- },
- {
- "path": "block/_sink/components/button-destructive.tsx",
- "content": "import { Button } from '~/registry/default/ui/button'\n\nexport function ButtonDestructive() {\n return Destructive \n}\n",
- "type": "registry:component",
- "target": ""
- },
- {
- "path": "block/_sink/components/button-ghost.tsx",
- "content": "import { Button } from '~/registry/default/ui/button'\n\nexport function ButtonGhost() {\n return Ghost \n}\n",
- "type": "registry:component",
- "target": ""
- },
- {
- "path": "block/_sink/components/button-link.tsx",
- "content": "import { Button } from '~/registry/default/ui/button'\n\nexport function ButtonLink() {\n return Link \n}\n",
- "type": "registry:component",
- "target": ""
- },
- {
- "path": "block/_sink/components/button-loading.tsx",
- "content": "import { Loader2 } from 'lucide-react'\n\nimport { Button } from '~/registry/default/ui/button'\n\nexport function ButtonLoading() {\n return (\n \n \n Please wait\n \n )\n}\n",
- "type": "registry:component",
- "target": ""
- },
- {
- "path": "block/_sink/components/button-outline.tsx",
- "content": "import { Button } from '~/registry/default/ui/button'\n\nexport function ButtonOutline() {\n return Outline \n}\n",
- "type": "registry:component",
- "target": ""
- },
- {
- "path": "block/_sink/components/button-secondary.tsx",
- "content": "import { Button } from '~/registry/default/ui/button'\n\nexport function ButtonSecondary() {\n return Secondary \n}\n",
- "type": "registry:component",
- "target": ""
- },
- {
- "path": "block/_sink/components/button-with-icon.tsx",
- "content": "import { MailOpen } from 'lucide-react'\n\nimport { Button } from '~/registry/default/ui/button'\n\nexport function ButtonWithIcon() {\n return (\n \n \n {' '}\n Login with Email\n \n )\n}\n",
- "type": "registry:component",
- "target": ""
- },
- {
- "path": "block/_sink/components/toggle-disabled.tsx",
- "content": "import { Underline } from 'lucide-react'\n\nimport { Toggle } from '~/registry/default/ui/toggle'\n\nexport function ToggleDisabled() {\n return (\n \n \n \n )\n}\n",
- "type": "registry:component",
- "target": ""
- },
- {
- "path": "block/_sink/components/toggle-outline.tsx",
- "content": "import { Italic } from 'lucide-react'\n\nimport { Toggle } from '~/registry/default/ui/toggle'\n\nexport function ToggleOutline() {\n return (\n \n \n \n )\n}\n",
- "type": "registry:component",
- "target": ""
- },
- {
- "path": "block/_sink/components/toggle-with-text.tsx",
- "content": "import { Italic } from 'lucide-react'\n\nimport { Toggle } from '~/registry/default/ui/toggle'\n\nexport function ToggleWithText() {\n return (\n \n \n Italic\n \n )\n}\n",
- "type": "registry:component",
- "target": ""
- }
- ]
-}
\ No newline at end of file
+ "name": "_sink",
+ "type": "registry:block",
+ "description": "",
+ "registryDependencies": [
+ "accordion",
+ "alert",
+ "alert-dialog",
+ "aspect-ratio",
+ "avatar",
+ "badge",
+ "breadcrumb",
+ "button",
+ "calendar",
+ "card",
+ "carousel",
+ "chart",
+ "checkbox",
+ "collapsible",
+ "command",
+ "context-menu",
+ "dialog",
+ "drawer",
+ "dropdown-menu",
+ "hover-card",
+ "input",
+ "input-otp",
+ "label",
+ "menubar",
+ "navigation-menu",
+ "pagination",
+ "popover",
+ "progress",
+ "radio-group",
+ "resizable",
+ "scroll-area",
+ "select",
+ "separator",
+ "sheet",
+ "sidebar",
+ "skeleton",
+ "slider",
+ "sonner",
+ "switch",
+ "table",
+ "tabs",
+ "textarea",
+ "toast",
+ "toggle",
+ "toggle-group",
+ "tooltip"
+ ],
+ "files": [
+ {
+ "path": "block/_sink/page.tsx",
+ "content": "import { AccordionDemo } from '~/registry/default/block/_sink/components/accordion-demo'\nimport { AlertDemo } from '~/registry/default/block/_sink/components/alert-demo'\nimport { AlertDialogDemo } from '~/registry/default/block/_sink/components/alert-dialog-demo'\nimport { AppSidebar } from '~/registry/default/block/_sink/components/app-sidebar'\nimport { AspectRatioDemo } from '~/registry/default/block/_sink/components/aspect-ratio-demo'\nimport { AvatarDemo } from '~/registry/default/block/_sink/components/avatar-demo'\nimport { BadgeDemo } from '~/registry/default/block/_sink/components/badge-demo'\nimport { BadgeDestructive } from '~/registry/default/block/_sink/components/badge-destructive'\nimport { BadgeOutline } from '~/registry/default/block/_sink/components/badge-outline'\nimport { BadgeSecondary } from '~/registry/default/block/_sink/components/badge-secondary'\nimport { BreadcrumbDemo } from '~/registry/default/block/_sink/components/breadcrumb-demo'\nimport { ButtonDemo } from '~/registry/default/block/_sink/components/button-demo'\nimport { ButtonDestructive } from '~/registry/default/block/_sink/components/button-destructive'\nimport { ButtonGhost } from '~/registry/default/block/_sink/components/button-ghost'\nimport { ButtonLink } from '~/registry/default/block/_sink/components/button-link'\nimport { ButtonLoading } from '~/registry/default/block/_sink/components/button-loading'\nimport { ButtonOutline } from '~/registry/default/block/_sink/components/button-outline'\nimport { ButtonSecondary } from '~/registry/default/block/_sink/components/button-secondary'\nimport { ButtonWithIcon } from '~/registry/default/block/_sink/components/button-with-icon'\nimport { CalendarDemo } from '~/registry/default/block/_sink/components/calendar-demo'\nimport { CardDemo } from '~/registry/default/block/_sink/components/card-demo'\nimport { CarouselDemo } from '~/registry/default/block/_sink/components/carousel-demo'\nimport { CheckboxDemo } from '~/registry/default/block/_sink/components/checkbox-demo'\nimport { CollapsibleDemo } from '~/registry/default/block/_sink/components/collapsible-demo'\nimport { ComboboxDemo } from '~/registry/default/block/_sink/components/combobox-demo'\nimport { CommandDemo } from '~/registry/default/block/_sink/components/command-demo'\nimport { ComponentWrapper } from '~/registry/default/block/_sink/components/component-wrapper'\nimport { ContextMenuDemo } from '~/registry/default/block/_sink/components/context-menu-demo'\nimport { DatePickerDemo } from '~/registry/default/block/_sink/components/date-picker-demo'\nimport { DialogDemo } from '~/registry/default/block/_sink/components/dialog-demo'\nimport { DrawerDemo } from '~/registry/default/block/_sink/components/drawer-demo'\nimport { DropdownMenuDemo } from '~/registry/default/block/_sink/components/dropdown-menu-demo'\nimport { HoverCardDemo } from '~/registry/default/block/_sink/components/hover-card-demo'\nimport { InputDemo } from '~/registry/default/block/_sink/components/input-demo'\nimport { InputOTPDemo } from '~/registry/default/block/_sink/components/input-otp-demo'\nimport { LabelDemo } from '~/registry/default/block/_sink/components/label-demo'\nimport { MenubarDemo } from '~/registry/default/block/_sink/components/menubar-demo'\nimport { NavigationMenuDemo } from '~/registry/default/block/_sink/components/navigation-menu-demo'\nimport { PaginationDemo } from '~/registry/default/block/_sink/components/pagination-demo'\nimport { PopoverDemo } from '~/registry/default/block/_sink/components/popover-demo'\nimport { ProgressDemo } from '~/registry/default/block/_sink/components/progress-demo'\nimport { RadioGroupDemo } from '~/registry/default/block/_sink/components/radio-group-demo'\nimport { ResizableHandleDemo } from '~/registry/default/block/_sink/components/resizable-handle'\nimport { ScrollAreaDemo } from '~/registry/default/block/_sink/components/scroll-area-demo'\nimport { SelectDemo } from '~/registry/default/block/_sink/components/select-demo'\nimport { SeparatorDemo } from '~/registry/default/block/_sink/components/separator-demo'\nimport { SheetDemo } from '~/registry/default/block/_sink/components/sheet-demo'\nimport { SkeletonDemo } from '~/registry/default/block/_sink/components/skeleton-demo'\nimport { SliderDemo } from '~/registry/default/block/_sink/components/slider-demo'\nimport { SonnerDemo } from '~/registry/default/block/_sink/components/sonner-demo'\nimport { SwitchDemo } from '~/registry/default/block/_sink/components/switch-demo'\nimport { TableDemo } from '~/registry/default/block/_sink/components/table-demo'\nimport { TabsDemo } from '~/registry/default/block/_sink/components/tabs-demo'\nimport { TextareaDemo } from '~/registry/default/block/_sink/components/textarea-demo'\nimport { ToastDemo } from '~/registry/default/block/_sink/components/toast-demo'\nimport { ToggleDemo } from '~/registry/default/block/_sink/components/toggle-demo'\nimport { ToggleDisabled } from '~/registry/default/block/_sink/components/toggle-disabled'\nimport { ToggleGroupDemo } from '~/registry/default/block/_sink/components/toggle-group-demo'\nimport { ToggleOutline } from '~/registry/default/block/_sink/components/toggle-outline'\nimport { ToggleWithText } from '~/registry/default/block/_sink/components/toggle-with-text'\nimport { TooltipDemo } from '~/registry/default/block/_sink/components/tooltip-demo'\nimport {\n Breadcrumb,\n BreadcrumbItem,\n BreadcrumbLink,\n BreadcrumbList,\n BreadcrumbPage,\n BreadcrumbSeparator,\n} from '~/registry/default/ui/breadcrumb'\nimport { Separator } from '~/registry/default/ui/separator'\nimport {\n SidebarInset,\n SidebarProvider,\n SidebarTrigger,\n} from '~/registry/default/ui/sidebar'\n\nexport default function SinkPage() {\n return (\n \n \n \n \n \n
\n
\n \n \n
\n \n \n
\n \n \n
\n \n \n
\n \n \n
\n \n \n \n \n \n
\n \n \n
\n \n \n \n \n \n
\n \n \n \n \n
\n \n \n
\n \n
\n \n \n
\n \n \n
\n \n \n
\n \n \n
\n \n \n
\n \n \n
\n \n \n
\n \n \n
\n \n \n
\n \n \n
\n \n \n
\n \n \n
\n \n \n
\n \n \n
\n \n \n
\n \n \n
\n \n \n
\n \n \n
\n \n \n
\n \n \n
\n \n \n
\n \n \n
\n \n \n
\n \n \n
\n \n \n
\n \n \n
\n \n \n
\n \n \n
\n \n \n
\n \n \n
\n \n \n
\n \n \n
\n \n \n
\n \n \n
\n \n \n
\n \n \n \n \n \n
\n \n
\n \n \n
\n \n \n
\n
\n \n \n )\n}\n",
+ "type": "registry:page",
+ "target": "app/sink/page.tsx"
+ },
+ {
+ "path": "block/_sink/components/app-sidebar.tsx",
+ "content": "'use client'\n\nimport * as React from 'react'\nimport {\n AudioWaveform,\n BookOpen,\n Bot,\n Command,\n Frame,\n GalleryVerticalEnd,\n Map,\n PieChart,\n Settings2,\n SquareTerminal,\n} from 'lucide-react'\n\nimport { NavMain } from '~/registry/default/block/sidebar-07/components/nav-main'\nimport { NavProjects } from '~/registry/default/block/sidebar-07/components/nav-projects'\nimport { NavUser } from '~/registry/default/block/sidebar-07/components/nav-user'\nimport { TeamSwitcher } from '~/registry/default/block/sidebar-07/components/team-switcher'\nimport {\n Sidebar,\n SidebarContent,\n SidebarFooter,\n SidebarHeader,\n SidebarRail,\n} from '~/registry/default/ui/sidebar'\n\n// This is sample data.\nconst data = {\n user: {\n name: 'shadcn',\n email: 'm@example.com',\n avatar: '/avatars/nyxb.jpg',\n },\n teams: [\n {\n name: 'Acme Inc',\n logo: GalleryVerticalEnd,\n plan: 'Enterprise',\n },\n {\n name: 'Acme Corp.',\n logo: AudioWaveform,\n plan: 'Startup',\n },\n {\n name: 'Evil Corp.',\n logo: Command,\n plan: 'Free',\n },\n ],\n navMain: [\n {\n title: 'Playground',\n url: '#',\n icon: SquareTerminal,\n isActive: true,\n items: [\n {\n title: 'History',\n url: '#',\n },\n {\n title: 'Starred',\n url: '#',\n },\n {\n title: 'Settings',\n url: '#',\n },\n ],\n },\n {\n title: 'Models',\n url: '#',\n icon: Bot,\n items: [\n {\n title: 'Genesis',\n url: '#',\n },\n {\n title: 'Explorer',\n url: '#',\n },\n {\n title: 'Quantum',\n url: '#',\n },\n ],\n },\n {\n title: 'Documentation',\n url: '#',\n icon: BookOpen,\n items: [\n {\n title: 'Introduction',\n url: '#',\n },\n {\n title: 'Get Started',\n url: '#',\n },\n {\n title: 'Tutorials',\n url: '#',\n },\n {\n title: 'Changelog',\n url: '#',\n },\n ],\n },\n {\n title: 'Settings',\n url: '#',\n icon: Settings2,\n items: [\n {\n title: 'General',\n url: '#',\n },\n {\n title: 'Team',\n url: '#',\n },\n {\n title: 'Billing',\n url: '#',\n },\n {\n title: 'Limits',\n url: '#',\n },\n ],\n },\n ],\n projects: [\n {\n name: 'Design Engineering',\n url: '#',\n icon: Frame,\n },\n {\n name: 'Sales & Marketing',\n url: '#',\n icon: PieChart,\n },\n {\n name: 'Travel',\n url: '#',\n icon: Map,\n },\n ],\n}\n\nexport function AppSidebar({ ...props }: React.ComponentProps) {\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n )\n}\n",
+ "type": "registry:component",
+ "target": ""
+ },
+ {
+ "path": "block/_sink/components/component-wrapper.tsx",
+ "content": "import { ny } from '~/registry/default/lib/utils'\n\nexport function ComponentWrapper({\n className,\n name,\n children,\n ...props\n}: React.ComponentPropsWithoutRef<'div'> & { name: string }) {\n return (\n \n
\n
div]:max-w-full\">\n {children}\n
\n
\n )\n}\n",
+ "type": "registry:component",
+ "target": ""
+ },
+ {
+ "path": "block/_sink/components/nav-main.tsx",
+ "content": "'use client'\n\nimport { ChevronRight, type LucideIcon } from 'lucide-react'\n\nimport {\n Collapsible,\n CollapsibleContent,\n CollapsibleTrigger,\n} from '~/registry/default/ui/collapsible'\nimport {\n SidebarGroup,\n SidebarGroupLabel,\n SidebarMenu,\n SidebarMenuButton,\n SidebarMenuItem,\n SidebarMenuSub,\n SidebarMenuSubButton,\n SidebarMenuSubItem,\n} from '~/registry/default/ui/sidebar'\n\nexport function NavMain({\n items,\n}: {\n items: {\n title: string\n url: string\n icon?: LucideIcon\n isActive?: boolean\n items?: {\n title: string\n url: string\n }[]\n }[]\n}) {\n return (\n \n Platform \n \n {items.map(item => (\n \n \n \n \n {item.icon && }\n {item.title} \n \n \n \n \n \n {item.items?.map(subItem => (\n \n \n \n {subItem.title} \n \n \n \n ))}\n \n \n \n \n ))}\n \n \n )\n}\n",
+ "type": "registry:component",
+ "target": ""
+ },
+ {
+ "path": "block/_sink/components/nav-projects.tsx",
+ "content": "'use client'\n\nimport {\n Folder,\n Forward,\n type LucideIcon,\n MoreHorizontal,\n Trash2,\n} from 'lucide-react'\n\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuSeparator,\n DropdownMenuTrigger,\n} from '~/registry/default/ui/dropdown-menu'\nimport {\n SidebarGroup,\n SidebarGroupLabel,\n SidebarMenu,\n SidebarMenuAction,\n SidebarMenuButton,\n SidebarMenuItem,\n useSidebar,\n} from '~/registry/default/ui/sidebar'\n\nexport function NavProjects({\n projects,\n}: {\n projects: {\n name: string\n url: string\n icon: LucideIcon\n }[]\n}) {\n const { isMobile } = useSidebar()\n\n return (\n \n Projects \n \n {projects.map(item => (\n \n \n \n \n {item.name} \n \n \n \n \n \n \n More \n \n \n \n \n \n View Project \n \n \n \n Share Project \n \n \n \n \n Delete Project \n \n \n \n \n ))}\n \n \n \n More \n \n \n \n \n )\n}\n",
+ "type": "registry:component",
+ "target": ""
+ },
+ {
+ "path": "block/_sink/components/nav-user.tsx",
+ "content": "'use client'\n\nimport {\n BadgeCheck,\n Bell,\n ChevronsUpDown,\n CreditCard,\n LogOut,\n Sparkles,\n} from 'lucide-react'\n\nimport {\n Avatar,\n AvatarFallback,\n AvatarImage,\n} from '~/registry/default/ui/avatar'\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuGroup,\n DropdownMenuItem,\n DropdownMenuLabel,\n DropdownMenuSeparator,\n DropdownMenuTrigger,\n} from '~/registry/default/ui/dropdown-menu'\nimport {\n SidebarMenu,\n SidebarMenuButton,\n SidebarMenuItem,\n useSidebar,\n} from '~/registry/default/ui/sidebar'\n\nexport function NavUser({\n user,\n}: {\n user: {\n name: string\n email: string\n avatar: string\n }\n}) {\n const { isMobile } = useSidebar()\n\n return (\n \n \n \n \n \n \n \n CN \n \n \n {user.name} \n {user.email} \n
\n \n \n \n \n \n \n
\n \n CN \n \n
\n {user.name} \n {user.email} \n
\n
\n \n \n \n \n \n Upgrade to Pro\n \n \n \n \n \n \n Account\n \n \n \n Billing\n \n \n \n Notifications\n \n \n \n \n \n Log out\n \n \n \n \n \n )\n}\n",
+ "type": "registry:component",
+ "target": ""
+ },
+ {
+ "path": "block/_sink/components/team-switcher.tsx",
+ "content": "'use client'\n\nimport * as React from 'react'\nimport { ChevronsUpDown, Plus } from 'lucide-react'\n\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuLabel,\n DropdownMenuSeparator,\n DropdownMenuShortcut,\n DropdownMenuTrigger,\n} from '~/registry/default/ui/dropdown-menu'\nimport {\n SidebarMenu,\n SidebarMenuButton,\n SidebarMenuItem,\n useSidebar,\n} from '~/registry/default/ui/sidebar'\n\nexport function TeamSwitcher({\n teams,\n}: {\n teams: {\n name: string\n logo: React.ElementType\n plan: string\n }[]\n}) {\n const { isMobile } = useSidebar()\n const [activeTeam, setActiveTeam] = React.useState(teams[0])\n\n return (\n \n \n \n \n \n \n \n \n {activeTeam.name}\n \n {activeTeam.plan} \n
\n \n \n \n \n \n Teams\n \n {teams.map((team, index) => (\n setActiveTeam(team)}\n className=\"gap-2 p-2\"\n >\n \n \n
\n {team.name}\n \n ⌘\n {index + 1}\n \n \n ))}\n \n \n \n Add team
\n \n \n \n \n \n )\n}\n",
+ "type": "registry:component",
+ "target": ""
+ },
+ {
+ "path": "block/_sink/components/accordion-demo.tsx",
+ "content": "import {\n Accordion,\n AccordionContent,\n AccordionItem,\n AccordionTrigger,\n} from '~/registry/default/ui/accordion'\n\nexport function AccordionDemo() {\n return (\n \n \n Is it accessible? \n \n Yes. It adheres to the WAI-ARIA design pattern.\n \n \n \n Is it styled? \n \n Yes. It comes with default styles that matches the other\n components' aesthetic.\n \n \n \n Is it animated? \n \n Yes. It's animated by default, but you can disable it if you prefer.\n \n \n \n )\n}\n",
+ "type": "registry:component",
+ "target": ""
+ },
+ {
+ "path": "block/_sink/components/alert-demo.tsx",
+ "content": "import { Terminal } from 'lucide-react'\n\nimport {\n Alert,\n AlertDescription,\n AlertTitle,\n} from '~/registry/default/ui/alert'\n\nexport function AlertDemo() {\n return (\n \n \n Heads up! \n \n You can add components to your app using the cli.\n \n \n )\n}\n",
+ "type": "registry:component",
+ "target": ""
+ },
+ {
+ "path": "block/_sink/components/alert-dialog-demo.tsx",
+ "content": "import {\n AlertDialog,\n AlertDialogAction,\n AlertDialogCancel,\n AlertDialogContent,\n AlertDialogDescription,\n AlertDialogFooter,\n AlertDialogHeader,\n AlertDialogTitle,\n AlertDialogTrigger,\n} from '~/registry/default/ui/alert-dialog'\nimport { Button } from '~/registry/default/ui/button'\n\nexport function AlertDialogDemo() {\n return (\n \n \n Show Dialog \n \n \n \n Are you absolutely sure? \n \n This action cannot be undone. This will permanently delete your\n account and remove your data from our servers.\n \n \n \n Cancel \n Continue \n \n \n \n )\n}\n",
+ "type": "registry:component",
+ "target": ""
+ },
+ {
+ "path": "block/_sink/components/aspect-ratio-demo.tsx",
+ "content": "import Image from 'next/image'\n\nimport { AspectRatio } from '~/registry/default/ui/aspect-ratio'\n\nexport function AspectRatioDemo() {\n return (\n \n \n \n )\n}\n",
+ "type": "registry:component",
+ "target": ""
+ },
+ {
+ "path": "block/_sink/components/avatar-demo.tsx",
+ "content": "import {\n Avatar,\n AvatarFallback,\n AvatarImage,\n} from '~/registry/default/ui/avatar'\n\nexport function AvatarDemo() {\n return (\n \n \n CN \n \n )\n}\n",
+ "type": "registry:component",
+ "target": ""
+ },
+ {
+ "path": "block/_sink/components/badge-demo.tsx",
+ "content": "import { Badge } from '~/registry/default/ui/badge'\n\nexport function BadgeDemo() {\n return Badge \n}\n",
+ "type": "registry:component",
+ "target": ""
+ },
+ {
+ "path": "block/_sink/components/breadcrumb-demo.tsx",
+ "content": "import {\n Breadcrumb,\n BreadcrumbEllipsis,\n BreadcrumbItem,\n BreadcrumbLink,\n BreadcrumbList,\n BreadcrumbPage,\n BreadcrumbSeparator,\n} from '~/registry/default/ui/breadcrumb'\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuTrigger,\n} from '~/registry/default/ui/dropdown-menu'\n\nexport function BreadcrumbDemo() {\n return (\n \n \n \n Home \n \n \n \n \n \n \n Toggle menu \n \n \n Documentation \n Themes \n GitHub \n \n \n \n \n \n Components \n \n \n \n Breadcrumb \n \n \n \n )\n}\n",
+ "type": "registry:component",
+ "target": ""
+ },
+ {
+ "path": "block/_sink/components/button-demo.tsx",
+ "content": "import { Button } from '~/registry/default/ui/button'\n\nexport function ButtonDemo() {\n return Button \n}\n",
+ "type": "registry:component",
+ "target": ""
+ },
+ {
+ "path": "block/_sink/components/calendar-demo.tsx",
+ "content": "'use client'\n\nimport * as React from 'react'\n\nimport { Calendar } from '~/registry/default/ui/calendar'\n\nexport function CalendarDemo() {\n const [date, setDate] = React.useState(new Date())\n\n return (\n \n )\n}\n",
+ "type": "registry:component",
+ "target": ""
+ },
+ {
+ "path": "block/_sink/components/card-demo.tsx",
+ "content": "import { BellRing, Check } from 'lucide-react'\n\nimport { ny } from '~/lib/utils'\nimport { Button } from '~/registry/default/ui/button'\nimport {\n Card,\n CardContent,\n CardDescription,\n CardFooter,\n CardHeader,\n CardTitle,\n} from '~/registry/default/ui/card'\nimport { Switch } from '~/registry/default/ui/switch'\n\nconst notifications = [\n {\n title: 'Your call has been confirmed.',\n description: '1 hour ago',\n },\n {\n title: 'You have a new message!',\n description: '1 hour ago',\n },\n {\n title: 'Your subscription is expiring soon!',\n description: '2 hours ago',\n },\n]\n\ntype CardProps = React.ComponentProps\n\nexport function CardDemo({ className, ...props }: CardProps) {\n return (\n \n \n Notifications \n You have 3 unread messages. \n \n \n \n
\n
\n
\n Push Notifications\n
\n
\n Send notifications to device.\n
\n
\n
\n
\n \n {notifications.map((notification, index) => (\n
\n
\n
\n
\n {notification.title}\n
\n
\n {notification.description}\n
\n
\n
\n ))}\n
\n \n \n \n \n {' '}\n Mark all as read\n \n \n \n )\n}\n",
+ "type": "registry:component",
+ "target": ""
+ },
+ {
+ "path": "block/_sink/components/carousel-demo.tsx",
+ "content": "import * as React from 'react'\n\nimport { Card, CardContent } from '~/registry/default/ui/card'\nimport {\n Carousel,\n CarouselContent,\n CarouselItem,\n CarouselNext,\n CarouselPrevious,\n} from '~/registry/default/ui/carousel'\n\nexport function CarouselDemo() {\n return (\n \n \n {Array.from({ length: 5 }).map((_, index) => (\n \n \n \n \n {index + 1} \n \n \n
\n \n ))}\n \n \n \n \n )\n}\n",
+ "type": "registry:component",
+ "target": ""
+ },
+ {
+ "path": "block/_sink/components/checkbox-demo.tsx",
+ "content": "'use client'\n\nimport { Checkbox } from '~/registry/default/ui/checkbox'\n\nexport function CheckboxDemo() {\n return (\n \n \n \n Accept terms and conditions\n \n
\n )\n}\n",
+ "type": "registry:component",
+ "target": ""
+ },
+ {
+ "path": "block/_sink/components/collapsible-demo.tsx",
+ "content": "'use client'\n\nimport * as React from 'react'\nimport { ChevronsUpDown } from 'lucide-react'\n\nimport { Button } from '~/registry/default/ui/button'\nimport {\n Collapsible,\n CollapsibleContent,\n CollapsibleTrigger,\n} from '~/registry/default/ui/collapsible'\n\nexport function CollapsibleDemo() {\n const [isOpen, setIsOpen] = React.useState(false)\n\n return (\n \n \n
\n @peduarte starred 3 repositories\n \n \n \n \n Toggle \n \n \n \n \n @radix-ui/primitives\n
\n \n \n @radix-ui/colors\n
\n \n @stitches/react\n
\n \n \n )\n}\n",
+ "type": "registry:component",
+ "target": ""
+ },
+ {
+ "path": "block/_sink/components/combobox-demo.tsx",
+ "content": "'use client'\n\nimport * as React from 'react'\nimport { Check, ChevronsUpDown } from 'lucide-react'\n\nimport { ny } from '~/lib/utils'\nimport { Button } from '~/registry/default/ui/button'\nimport {\n Command,\n CommandEmpty,\n CommandGroup,\n CommandInput,\n CommandItem,\n CommandList,\n} from '~/registry/default/ui/command'\nimport {\n Popover,\n PopoverContent,\n PopoverTrigger,\n} from '~/registry/default/ui/popover'\n\nconst frameworks = [\n {\n value: 'next.js',\n label: 'Next.js',\n },\n {\n value: 'sveltekit',\n label: 'SvelteKit',\n },\n {\n value: 'nuxt.js',\n label: 'Nuxt.js',\n },\n {\n value: 'remix',\n label: 'Remix',\n },\n {\n value: 'astro',\n label: 'Astro',\n },\n]\n\nexport function ComboboxDemo() {\n const [open, setOpen] = React.useState(false)\n const [value, setValue] = React.useState('')\n\n return (\n \n \n \n {value\n ? frameworks.find(framework => framework.value === value)?.label\n : 'Select framework...'}\n \n \n \n \n \n \n \n No framework found. \n \n {frameworks.map(framework => (\n {\n setValue(currentValue === value ? '' : currentValue)\n setOpen(false)\n }}\n >\n {framework.label}\n \n \n ))}\n \n \n \n \n \n )\n}\n",
+ "type": "registry:component",
+ "target": ""
+ },
+ {
+ "path": "block/_sink/components/command-demo.tsx",
+ "content": "import {\n Calculator,\n Calendar,\n CreditCard,\n Settings,\n Smile,\n User,\n} from 'lucide-react'\n\nimport {\n Command,\n CommandEmpty,\n CommandGroup,\n CommandInput,\n CommandItem,\n CommandList,\n CommandSeparator,\n CommandShortcut,\n} from '~/registry/default/ui/command'\n\nexport function CommandDemo() {\n return (\n \n \n \n No results found. \n \n \n \n Calendar \n \n \n \n Search Emoji \n \n \n \n Calculator \n \n \n \n \n \n \n Profile \n ⌘P \n \n \n \n Billing \n ⌘B \n \n \n \n Settings \n ⌘S \n \n \n \n \n )\n}\n",
+ "type": "registry:component",
+ "target": ""
+ },
+ {
+ "path": "block/_sink/components/context-menu-demo.tsx",
+ "content": "import {\n ContextMenu,\n ContextMenuCheckboxItem,\n ContextMenuContent,\n ContextMenuItem,\n ContextMenuLabel,\n ContextMenuRadioGroup,\n ContextMenuRadioItem,\n ContextMenuSeparator,\n ContextMenuShortcut,\n ContextMenuSub,\n ContextMenuSubContent,\n ContextMenuSubTrigger,\n ContextMenuTrigger,\n} from '~/registry/default/ui/context-menu'\n\nexport function ContextMenuDemo() {\n return (\n \n \n Right click here\n \n \n \n Back\n ⌘[ \n \n \n Forward\n ⌘] \n \n \n Reload\n ⌘R \n \n \n More Tools \n \n \n Save Page As...\n ⇧⌘S \n \n Create Shortcut... \n Name Window... \n \n Developer Tools \n \n \n \n \n Show Bookmarks Bar\n ⌘⇧B \n \n Show Full URLs \n \n \n People \n \n \n Pedro Duarte\n \n Colm Tuite \n \n \n \n )\n}\n",
+ "type": "registry:component",
+ "target": ""
+ },
+ {
+ "path": "block/_sink/components/date-picker-demo.tsx",
+ "content": "'use client'\n\nimport * as React from 'react'\nimport { format } from 'date-fns'\nimport { CalendarIcon } from 'lucide-react'\n\nimport { ny } from '~/lib/utils'\nimport { Button } from '~/registry/default/ui/button'\nimport { Calendar } from '~/registry/default/ui/calendar'\nimport {\n Popover,\n PopoverContent,\n PopoverTrigger,\n} from '~/registry/default/ui/popover'\n\nexport function DatePickerDemo() {\n const [date, setDate] = React.useState()\n\n return (\n \n \n \n \n {date ? format(date, 'PPP') : Pick a date }\n \n \n \n \n \n \n )\n}\n",
+ "type": "registry:component",
+ "target": ""
+ },
+ {
+ "path": "block/_sink/components/dialog-demo.tsx",
+ "content": "import { Button } from '~/registry/default/ui/button'\nimport {\n Dialog,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogTitle,\n DialogTrigger,\n} from '~/registry/default/ui/dialog'\nimport { Input } from '~/registry/default/ui/input'\nimport { Label } from '~/registry/default/ui/label'\n\nexport function DialogDemo() {\n return (\n \n \n Edit Profile \n \n \n \n Edit profile \n \n Make changes to your profile here. Click save when you're done.\n \n \n \n \n Save changes \n \n \n \n )\n}\n",
+ "type": "registry:component",
+ "target": ""
+ },
+ {
+ "path": "block/_sink/components/drawer-demo.tsx",
+ "content": "'use client'\n\nimport * as React from 'react'\nimport { Minus, Plus } from 'lucide-react'\nimport { Bar, BarChart, ResponsiveContainer } from 'recharts'\n\nimport { Button } from '~/registry/default/ui/button'\nimport {\n Drawer,\n DrawerClose,\n DrawerContent,\n DrawerDescription,\n DrawerFooter,\n DrawerHeader,\n DrawerTitle,\n DrawerTrigger,\n} from '~/registry/default/ui/drawer'\n\nconst data = [\n {\n goal: 400,\n },\n {\n goal: 300,\n },\n {\n goal: 200,\n },\n {\n goal: 300,\n },\n {\n goal: 200,\n },\n {\n goal: 278,\n },\n {\n goal: 189,\n },\n {\n goal: 239,\n },\n {\n goal: 300,\n },\n {\n goal: 200,\n },\n {\n goal: 278,\n },\n {\n goal: 189,\n },\n {\n goal: 349,\n },\n]\n\nexport function DrawerDemo() {\n const [goal, setGoal] = React.useState(350)\n\n function onClick(adjustment: number) {\n setGoal(Math.max(200, Math.min(400, goal + adjustment)))\n }\n\n return (\n \n \n Open Drawer \n \n \n \n
\n Move Goal \n Set your daily activity goal. \n \n
\n
\n
onClick(-10)}\n disabled={goal <= 200}\n >\n \n Decrease \n \n
\n
\n {goal}\n
\n
\n Calories/day\n
\n
\n
onClick(10)}\n disabled={goal >= 400}\n >\n \n Increase \n \n
\n
\n \n \n \n \n \n
\n
\n
\n Submit \n \n Cancel \n \n \n
\n \n \n )\n}\n",
+ "type": "registry:component",
+ "target": ""
+ },
+ {
+ "path": "block/_sink/components/dropdown-menu-demo.tsx",
+ "content": "import { Button } from '~/registry/default/ui/button'\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuGroup,\n DropdownMenuItem,\n DropdownMenuLabel,\n DropdownMenuPortal,\n DropdownMenuSeparator,\n DropdownMenuShortcut,\n DropdownMenuSub,\n DropdownMenuSubContent,\n DropdownMenuSubTrigger,\n DropdownMenuTrigger,\n} from '~/registry/default/ui/dropdown-menu'\n\nexport function DropdownMenuDemo() {\n return (\n \n \n Open \n \n \n My Account \n \n \n \n Profile\n ⇧⌘P \n \n \n Billing\n ⌘B \n \n \n Settings\n ⌘S \n \n \n Keyboard shortcuts\n ⌘K \n \n \n \n \n Team \n \n Invite users \n \n \n Email \n Message \n \n More... \n \n \n \n \n New Team\n ⌘+T \n \n \n \n GitHub \n Support \n API \n \n \n Log out\n ⇧⌘Q \n \n \n \n )\n}\n",
+ "type": "registry:component",
+ "target": ""
+ },
+ {
+ "path": "block/_sink/components/hover-card-demo.tsx",
+ "content": "import { CalendarIcon } from 'lucide-react'\n\nimport {\n Avatar,\n AvatarFallback,\n AvatarImage,\n} from '~/registry/default/ui/avatar'\nimport { Button } from '~/registry/default/ui/button'\nimport {\n HoverCard,\n HoverCardContent,\n HoverCardTrigger,\n} from '~/registry/default/ui/hover-card'\n\nexport function HoverCardDemo() {\n return (\n \n \n @nextjs \n \n \n \n
\n \n VC \n \n
\n
@nextjs \n
\n The React Framework – created and maintained by @vercel.\n
\n
\n \n {' '}\n \n Joined December 2021\n \n
\n
\n
\n \n \n )\n}\n",
+ "type": "registry:component",
+ "target": ""
+ },
+ {
+ "path": "block/_sink/components/input-demo.tsx",
+ "content": "import { Input } from '~/registry/default/ui/input'\n\nexport function InputDemo() {\n return \n}\n",
+ "type": "registry:component",
+ "target": ""
+ },
+ {
+ "path": "block/_sink/components/input-otp-demo.tsx",
+ "content": "import {\n InputOTP,\n InputOTPGroup,\n InputOTPSeparator,\n InputOTPSlot,\n} from '~/registry/default/ui/input-otp'\n\nexport function InputOTPDemo() {\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n )\n}\n",
+ "type": "registry:component",
+ "target": ""
+ },
+ {
+ "path": "block/_sink/components/label-demo.tsx",
+ "content": "import { Checkbox } from '~/registry/default/ui/checkbox'\nimport { Label } from '~/registry/default/ui/label'\n\nexport function LabelDemo() {\n return (\n \n
\n \n Accept terms and conditions \n
\n
\n )\n}\n",
+ "type": "registry:component",
+ "target": ""
+ },
+ {
+ "path": "block/_sink/components/menubar-demo.tsx",
+ "content": "import {\n Menubar,\n MenubarCheckboxItem,\n MenubarContent,\n MenubarItem,\n MenubarMenu,\n MenubarRadioGroup,\n MenubarRadioItem,\n MenubarSeparator,\n MenubarShortcut,\n MenubarSub,\n MenubarSubContent,\n MenubarSubTrigger,\n MenubarTrigger,\n} from '~/registry/default/ui/menubar'\n\nexport function MenubarDemo() {\n return (\n \n \n File \n \n \n New Tab\n {' '}\n ⌘T \n \n \n New Window\n {' '}\n ⌘N \n \n New Incognito Window \n \n \n Share \n \n Email link \n Messages \n Notes \n \n \n \n \n Print...\n {' '}\n ⌘P \n \n \n \n \n Edit \n \n \n Undo\n {' '}\n ⌘Z \n \n \n Redo\n {' '}\n ⇧⌘Z \n \n \n \n Find \n \n Search the web \n \n Find... \n Find Next \n Find Previous \n \n \n \n Cut \n Copy \n Paste \n \n \n \n View \n \n Always Show Bookmarks Bar \n \n Always Show Full URLs\n \n \n \n Reload\n {' '}\n ⌘R \n \n \n Force Reload\n {' '}\n ⇧⌘R \n \n \n Toggle Fullscreen \n \n Hide Sidebar \n \n \n \n Profiles \n \n \n Andy \n Benoit \n Luis \n \n \n Edit... \n \n Add Profile... \n \n \n \n )\n}\n",
+ "type": "registry:component",
+ "target": ""
+ },
+ {
+ "path": "block/_sink/components/navigation-menu-demo.tsx",
+ "content": "'use client'\n\nimport * as React from 'react'\nimport Link from 'next/link'\n\nimport { ny } from '~/lib/utils'\nimport {\n NavigationMenu,\n NavigationMenuContent,\n NavigationMenuItem,\n NavigationMenuLink,\n NavigationMenuList,\n NavigationMenuTrigger,\n navigationMenuTriggerStyle,\n} from '~/registry/default/ui/navigation-menu'\n\nconst components: { title: string, href: string, description: string }[] = [\n {\n title: 'Alert Dialog',\n href: '/docs/primitives/alert-dialog',\n description:\n 'A modal dialog that interrupts the user with important content and expects a response.',\n },\n {\n title: 'Hover Card',\n href: '/docs/primitives/hover-card',\n description:\n 'For sighted users to preview content available behind a link.',\n },\n {\n title: 'Progress',\n href: '/docs/primitives/progress',\n description:\n 'Displays an indicator showing the completion progress of a task, typically displayed as a progress bar.',\n },\n {\n title: 'Scroll-area',\n href: '/docs/primitives/scroll-area',\n description: 'Visually or semantically separates content.',\n },\n {\n title: 'Tabs',\n href: '/docs/primitives/tabs',\n description:\n 'A set of layered sections of content—known as tab panels—that are displayed one at a time.',\n },\n {\n title: 'Tooltip',\n href: '/docs/primitives/tooltip',\n description:\n 'A popup that displays information related to an element when the element receives keyboard focus or the mouse hovers over it.',\n },\n]\n\nexport function NavigationMenuDemo() {\n return (\n \n \n \n Getting started \n \n \n \n \n \n Components \n \n \n {components.map(component => (\n \n {component.description}\n \n ))}\n \n \n \n \n \n \n Documentation\n \n \n \n \n \n )\n}\n\nconst ListItem = React.forwardRef<\n React.ElementRef<'a'>,\n React.ComponentPropsWithoutRef<'a'>\n>(({ className, title, children, ...props }, ref) => {\n return (\n \n \n \n {title}
\n \n {children}\n
\n \n \n \n )\n})\nListItem.displayName = 'ListItem'\n",
+ "type": "registry:component",
+ "target": ""
+ },
+ {
+ "path": "block/_sink/components/pagination-demo.tsx",
+ "content": "import {\n Pagination,\n PaginationContent,\n PaginationEllipsis,\n PaginationItem,\n PaginationLink,\n PaginationNext,\n PaginationPrevious,\n} from '~/registry/default/ui/pagination'\n\nexport function PaginationDemo() {\n return (\n \n \n \n \n \n \n 1 \n \n \n \n 2\n \n \n \n 3 \n \n \n \n \n \n \n \n \n \n )\n}\n",
+ "type": "registry:component",
+ "target": ""
+ },
+ {
+ "path": "block/_sink/components/popover-demo.tsx",
+ "content": "import { Button } from '~/registry/default/ui/button'\nimport { Input } from '~/registry/default/ui/input'\nimport { Label } from '~/registry/default/ui/label'\nimport {\n Popover,\n PopoverContent,\n PopoverTrigger,\n} from '~/registry/default/ui/popover'\n\nexport function PopoverDemo() {\n return (\n \n \n Open popover \n \n \n \n
\n
Dimensions \n
\n Set the dimensions for the layer.\n
\n
\n
\n
\n \n \n )\n}\n",
+ "type": "registry:component",
+ "target": ""
+ },
+ {
+ "path": "block/_sink/components/progress-demo.tsx",
+ "content": "'use client'\n\nimport * as React from 'react'\n\nimport { Progress } from '~/registry/default/ui/progress'\n\nexport function ProgressDemo() {\n const [progress, setProgress] = React.useState(13)\n\n React.useEffect(() => {\n const timer = setTimeout(() => setProgress(66), 500)\n return () => clearTimeout(timer)\n }, [])\n\n return \n}\n",
+ "type": "registry:component",
+ "target": ""
+ },
+ {
+ "path": "block/_sink/components/radio-group-demo.tsx",
+ "content": "import { Label } from '~/registry/default/ui/label'\nimport { RadioGroup, RadioGroupItem } from '~/registry/default/ui/radio-group'\n\nexport function RadioGroupDemo() {\n return (\n \n \n \n Default \n
\n \n \n Comfortable \n
\n \n \n Compact \n
\n \n )\n}\n",
+ "type": "registry:component",
+ "target": ""
+ },
+ {
+ "path": "block/_sink/components/resizable-handle.tsx",
+ "content": "import {\n ResizableHandle,\n ResizablePanel,\n ResizablePanelGroup,\n} from '~/registry/default/ui/resizable'\n\nexport function ResizableHandleDemo() {\n return (\n \n \n \n Sidebar \n
\n \n \n \n \n Content \n
\n \n \n )\n}\n",
+ "type": "registry:component",
+ "target": ""
+ },
+ {
+ "path": "block/_sink/components/scroll-area-demo.tsx",
+ "content": "import * as React from 'react'\n\nimport { ScrollArea } from '~/registry/default/ui/scroll-area'\nimport { Separator } from '~/registry/default/ui/separator'\n\nconst tags = Array.from({ length: 50 }).map(\n (_, i, a) => `v1.2.0-beta.${a.length - i}`,\n)\n\nexport function ScrollAreaDemo() {\n return (\n \n \n
Tags \n {tags.map(tag => (\n
\n {tag}
\n \n \n ))}\n
\n \n )\n}\n",
+ "type": "registry:component",
+ "target": ""
+ },
+ {
+ "path": "block/_sink/components/select-demo.tsx",
+ "content": "import * as React from 'react'\n\nimport {\n Select,\n SelectContent,\n SelectGroup,\n SelectItem,\n SelectLabel,\n SelectTrigger,\n SelectValue,\n} from '~/registry/default/ui/select'\n\nexport function SelectDemo() {\n return (\n \n \n \n \n \n \n Fruits \n Apple \n Banana \n Blueberry \n Grapes \n Pineapple \n \n \n \n )\n}\n",
+ "type": "registry:component",
+ "target": ""
+ },
+ {
+ "path": "block/_sink/components/separator-demo.tsx",
+ "content": "import { Separator } from '~/registry/default/ui/separator'\n\nexport function SeparatorDemo() {\n return (\n \n
\n
Radix Primitives \n
\n An open-source UI component library.\n
\n
\n
\n
\n
Blog
\n
\n
Docs
\n
\n
Source
\n
\n
\n )\n}\n",
+ "type": "registry:component",
+ "target": ""
+ },
+ {
+ "path": "block/_sink/components/sheet-demo.tsx",
+ "content": "import { Button } from '~/registry/default/ui/button'\nimport { Input } from '~/registry/default/ui/input'\nimport { Label } from '~/registry/default/ui/label'\nimport {\n Sheet,\n SheetClose,\n SheetContent,\n SheetDescription,\n SheetFooter,\n SheetHeader,\n SheetTitle,\n SheetTrigger,\n} from '~/registry/default/ui/sheet'\n\nexport function SheetDemo() {\n return (\n \n \n Open \n \n \n \n Edit profile \n \n Make changes to your profile here. Click save when you're done.\n \n \n \n \n \n Save changes \n \n \n \n \n )\n}\n",
+ "type": "registry:component",
+ "target": ""
+ },
+ {
+ "path": "block/_sink/components/skeleton-demo.tsx",
+ "content": "import { Skeleton } from '~/registry/default/ui/skeleton'\n\nexport function SkeletonDemo() {\n return (\n \n )\n}\n",
+ "type": "registry:component",
+ "target": ""
+ },
+ {
+ "path": "block/_sink/components/slider-demo.tsx",
+ "content": "import { ny } from '~/lib/utils'\nimport { Slider } from '~/registry/default/ui/slider'\n\ntype SliderProps = React.ComponentProps\n\nexport function SliderDemo({ className, ...props }: SliderProps) {\n return (\n \n )\n}\n",
+ "type": "registry:component",
+ "target": ""
+ },
+ {
+ "path": "block/_sink/components/sonner-demo.tsx",
+ "content": "'use client'\n\nimport { toast } from 'sonner'\n\nimport { Button } from '~/registry/default/ui/button'\n\nexport function SonnerDemo() {\n return (\n \n toast('Event has been created', {\n description: 'Sunday, December 03, 2023 at 9:00 AM',\n action: {\n label: 'Undo',\n // eslint-disable-next-line no-console\n onClick: () => console.log('Undo'),\n },\n })}\n >\n Show Toast\n \n )\n}\n",
+ "type": "registry:component",
+ "target": ""
+ },
+ {
+ "path": "block/_sink/components/switch-demo.tsx",
+ "content": "import { Label } from '~/registry/default/ui/label'\nimport { Switch } from '~/registry/default/ui/switch'\n\nexport function SwitchDemo() {\n return (\n \n \n Airplane Mode \n
\n )\n}\n",
+ "type": "registry:component",
+ "target": ""
+ },
+ {
+ "path": "block/_sink/components/table-demo.tsx",
+ "content": "import {\n Table,\n TableBody,\n TableCaption,\n TableCell,\n TableFooter,\n TableHead,\n TableHeader,\n TableRow,\n} from '~/registry/default/ui/table'\n\nconst invoices = [\n {\n invoice: 'INV001',\n paymentStatus: 'Paid',\n totalAmount: '$250.00',\n paymentMethod: 'Credit Card',\n },\n {\n invoice: 'INV002',\n paymentStatus: 'Pending',\n totalAmount: '$150.00',\n paymentMethod: 'PayPal',\n },\n {\n invoice: 'INV003',\n paymentStatus: 'Unpaid',\n totalAmount: '$350.00',\n paymentMethod: 'Bank Transfer',\n },\n {\n invoice: 'INV004',\n paymentStatus: 'Paid',\n totalAmount: '$450.00',\n paymentMethod: 'Credit Card',\n },\n {\n invoice: 'INV005',\n paymentStatus: 'Paid',\n totalAmount: '$550.00',\n paymentMethod: 'PayPal',\n },\n {\n invoice: 'INV006',\n paymentStatus: 'Pending',\n totalAmount: '$200.00',\n paymentMethod: 'Bank Transfer',\n },\n {\n invoice: 'INV007',\n paymentStatus: 'Unpaid',\n totalAmount: '$300.00',\n paymentMethod: 'Credit Card',\n },\n]\n\nexport function TableDemo() {\n return (\n \n A list of your recent invoices. \n \n \n Invoice \n Status \n Method \n Amount \n \n \n \n {invoices.map(invoice => (\n \n {invoice.invoice} \n {invoice.paymentStatus} \n {invoice.paymentMethod} \n {invoice.totalAmount} \n \n ))}\n \n \n \n Total \n $2,500.00 \n \n \n
\n )\n}\n",
+ "type": "registry:component",
+ "target": ""
+ },
+ {
+ "path": "block/_sink/components/tabs-demo.tsx",
+ "content": "import { Button } from '~/registry/default/ui/button'\nimport {\n Card,\n CardContent,\n CardDescription,\n CardFooter,\n CardHeader,\n CardTitle,\n} from '~/registry/default/ui/card'\nimport { Input } from '~/registry/default/ui/input'\nimport { Label } from '~/registry/default/ui/label'\nimport {\n Tabs,\n TabsContent,\n TabsList,\n TabsTrigger,\n} from '~/registry/default/ui/tabs'\n\nexport function TabsDemo() {\n return (\n \n \n Account \n Password \n \n \n \n \n Account \n \n Make changes to your account here. Click save when you're done.\n \n \n \n \n Name \n \n
\n \n Username \n \n
\n \n \n Save changes \n \n \n \n \n \n \n Password \n \n Change your password here. After saving, you'll be logged out.\n \n \n \n \n Current password \n \n
\n \n New password \n \n
\n \n \n Save password \n \n \n \n \n )\n}\n",
+ "type": "registry:component",
+ "target": ""
+ },
+ {
+ "path": "block/_sink/components/textarea-demo.tsx",
+ "content": "import { Textarea } from '~/registry/default/ui/textarea'\n\nexport function TextareaDemo() {\n return \n}\n",
+ "type": "registry:component",
+ "target": ""
+ },
+ {
+ "path": "block/_sink/components/toast-demo.tsx",
+ "content": "'use client'\n\nimport { useToast } from '~/registry/default/hooks/use-toast'\nimport { Button } from '~/registry/default/ui/button'\nimport { ToastAction } from '~/registry/default/ui/toast'\n\nexport function ToastDemo() {\n const { toast } = useToast()\n\n return (\n {\n toast({\n title: 'Scheduled: Catch up ',\n description: 'Friday, February 10, 2023 at 5:57 PM',\n action: (\n Undo \n ),\n })\n }}\n >\n Add to calendar\n \n )\n}\n",
+ "type": "registry:component",
+ "target": ""
+ },
+ {
+ "path": "block/_sink/components/toggle-demo.tsx",
+ "content": "import { Bold } from 'lucide-react'\n\nimport { Toggle } from '~/registry/default/ui/toggle'\n\nexport function ToggleDemo() {\n return (\n \n \n \n )\n}\n",
+ "type": "registry:component",
+ "target": ""
+ },
+ {
+ "path": "block/_sink/components/toggle-group-demo.tsx",
+ "content": "import { Bold, Italic, Underline } from 'lucide-react'\n\nimport {\n ToggleGroup,\n ToggleGroupItem,\n} from '~/registry/default/ui/toggle-group'\n\nexport function ToggleGroupDemo() {\n return (\n \n \n \n \n \n \n \n \n \n \n \n )\n}\n",
+ "type": "registry:component",
+ "target": ""
+ },
+ {
+ "path": "block/_sink/components/tooltip-demo.tsx",
+ "content": "import { Button } from '~/registry/default/ui/button'\nimport {\n Tooltip,\n TooltipContent,\n TooltipProvider,\n TooltipTrigger,\n} from '~/registry/default/ui/tooltip'\n\nexport function TooltipDemo() {\n return (\n \n \n \n Hover \n \n \n Add to library
\n \n \n \n )\n}\n",
+ "type": "registry:component",
+ "target": ""
+ },
+ {
+ "path": "block/_sink/components/badge-destructive.tsx",
+ "content": "import { Badge } from '~/registry/default/ui/badge'\n\nexport function BadgeDestructive() {\n return Destructive \n}\n",
+ "type": "registry:component",
+ "target": ""
+ },
+ {
+ "path": "block/_sink/components/badge-outline.tsx",
+ "content": "import { Badge } from '~/registry/default/ui/badge'\n\nexport function BadgeOutline() {\n return Outline \n}\n",
+ "type": "registry:component",
+ "target": ""
+ },
+ {
+ "path": "block/_sink/components/badge-secondary.tsx",
+ "content": "import { Badge } from '~/registry/default/ui/badge'\n\nexport function BadgeSecondary() {\n return Secondary \n}\n",
+ "type": "registry:component",
+ "target": ""
+ },
+ {
+ "path": "block/_sink/components/button-destructive.tsx",
+ "content": "import { Button } from '~/registry/default/ui/button'\n\nexport function ButtonDestructive() {\n return Destructive \n}\n",
+ "type": "registry:component",
+ "target": ""
+ },
+ {
+ "path": "block/_sink/components/button-ghost.tsx",
+ "content": "import { Button } from '~/registry/default/ui/button'\n\nexport function ButtonGhost() {\n return Ghost \n}\n",
+ "type": "registry:component",
+ "target": ""
+ },
+ {
+ "path": "block/_sink/components/button-link.tsx",
+ "content": "import { Button } from '~/registry/default/ui/button'\n\nexport function ButtonLink() {\n return Link \n}\n",
+ "type": "registry:component",
+ "target": ""
+ },
+ {
+ "path": "block/_sink/components/button-loading.tsx",
+ "content": "import { Loader2 } from 'lucide-react'\n\nimport { Button } from '~/registry/default/ui/button'\n\nexport function ButtonLoading() {\n return (\n \n \n Please wait\n \n )\n}\n",
+ "type": "registry:component",
+ "target": ""
+ },
+ {
+ "path": "block/_sink/components/button-outline.tsx",
+ "content": "import { Button } from '~/registry/default/ui/button'\n\nexport function ButtonOutline() {\n return Outline \n}\n",
+ "type": "registry:component",
+ "target": ""
+ },
+ {
+ "path": "block/_sink/components/button-secondary.tsx",
+ "content": "import { Button } from '~/registry/default/ui/button'\n\nexport function ButtonSecondary() {\n return Secondary \n}\n",
+ "type": "registry:component",
+ "target": ""
+ },
+ {
+ "path": "block/_sink/components/button-with-icon.tsx",
+ "content": "import { MailOpen } from 'lucide-react'\n\nimport { Button } from '~/registry/default/ui/button'\n\nexport function ButtonWithIcon() {\n return (\n \n \n {' '}\n Login with Email\n \n )\n}\n",
+ "type": "registry:component",
+ "target": ""
+ },
+ {
+ "path": "block/_sink/components/toggle-disabled.tsx",
+ "content": "import { Underline } from 'lucide-react'\n\nimport { Toggle } from '~/registry/default/ui/toggle'\n\nexport function ToggleDisabled() {\n return (\n \n \n \n )\n}\n",
+ "type": "registry:component",
+ "target": ""
+ },
+ {
+ "path": "block/_sink/components/toggle-outline.tsx",
+ "content": "import { Italic } from 'lucide-react'\n\nimport { Toggle } from '~/registry/default/ui/toggle'\n\nexport function ToggleOutline() {\n return (\n \n \n \n )\n}\n",
+ "type": "registry:component",
+ "target": ""
+ },
+ {
+ "path": "block/_sink/components/toggle-with-text.tsx",
+ "content": "import { Italic } from 'lucide-react'\n\nimport { Toggle } from '~/registry/default/ui/toggle'\n\nexport function ToggleWithText() {\n return (\n \n \n Italic\n \n )\n}\n",
+ "type": "registry:component",
+ "target": ""
+ }
+ ]
+}
diff --git a/apps/web/public/r/styles/default/authentication-01.json b/apps/web/public/r/styles/default/authentication-01.json
index d9fab78e..73142a30 100644
--- a/apps/web/public/r/styles/default/authentication-01.json
+++ b/apps/web/public/r/styles/default/authentication-01.json
@@ -1,18 +1,13 @@
{
- "name": "authentication-01",
- "type": "registry:block",
- "registryDependencies": [
- "button",
- "card",
- "input",
- "label"
- ],
- "files": [
- {
- "path": "block/authentication-01.tsx",
- "content": "import { Button } from '~/registry/default/ui/button'\nimport {\n Card,\n CardContent,\n CardDescription,\n CardFooter,\n CardHeader,\n CardTitle,\n} from '~/registry/default/ui/card'\nimport { Input } from '~/registry/default/ui/input'\nimport { Label } from '~/registry/default/ui/label'\n\nexport default function LoginForm() {\n return (\n \n \n Login \n \n Enter your email below to login to your account.\n \n \n \n \n Email \n \n
\n \n Password \n \n
\n \n \n Sign in \n \n \n )\n}\n",
- "type": "registry:block",
- "target": ""
- }
- ]
+ "name": "authentication-01",
+ "type": "registry:block",
+ "registryDependencies": ["button", "card", "input", "label"],
+ "files": [
+ {
+ "path": "block/authentication-01.tsx",
+ "content": "import { Button } from '~/registry/default/ui/button'\nimport {\n Card,\n CardContent,\n CardDescription,\n CardFooter,\n CardHeader,\n CardTitle,\n} from '~/registry/default/ui/card'\nimport { Input } from '~/registry/default/ui/input'\nimport { Label } from '~/registry/default/ui/label'\n\nexport default function LoginForm() {\n return (\n \n \n Login \n \n Enter your email below to login to your account.\n \n \n \n \n Email \n \n
\n \n Password \n \n
\n \n \n Sign in \n \n \n )\n}\n",
+ "type": "registry:block",
+ "target": ""
+ }
+ ]
}
diff --git a/apps/web/public/r/styles/default/authentication-02.json b/apps/web/public/r/styles/default/authentication-02.json
index 307fc4a7..98baeff2 100644
--- a/apps/web/public/r/styles/default/authentication-02.json
+++ b/apps/web/public/r/styles/default/authentication-02.json
@@ -1,18 +1,13 @@
{
- "name": "authentication-02",
- "type": "registry:block",
- "registryDependencies": [
- "button",
- "card",
- "input",
- "label"
- ],
- "files": [
- {
- "path": "block/authentication-02.tsx",
- "content": "import Link from 'next/link'\n\nimport { Button } from '~/registry/default/ui/button'\nimport {\n Card,\n CardContent,\n CardDescription,\n CardHeader,\n CardTitle,\n} from '~/registry/default/ui/card'\nimport { Input } from '~/registry/default/ui/input'\nimport { Label } from '~/registry/default/ui/label'\n\nexport default function LoginForm() {\n return (\n \n \n Login \n \n Enter your email below to login to your account\n \n \n \n \n
\n Email \n \n
\n
\n
\n Password \n \n Forgot your password?\n \n
\n
\n
\n
\n Login\n \n
\n Login with Google\n \n
\n \n Don't have an account?\n {' '}\n \n Sign up\n \n
\n \n \n )\n}\n",
- "type": "registry:block",
- "target": ""
- }
- ]
+ "name": "authentication-02",
+ "type": "registry:block",
+ "registryDependencies": ["button", "card", "input", "label"],
+ "files": [
+ {
+ "path": "block/authentication-02.tsx",
+ "content": "import Link from 'next/link'\n\nimport { Button } from '~/registry/default/ui/button'\nimport {\n Card,\n CardContent,\n CardDescription,\n CardHeader,\n CardTitle,\n} from '~/registry/default/ui/card'\nimport { Input } from '~/registry/default/ui/input'\nimport { Label } from '~/registry/default/ui/label'\n\nexport default function LoginForm() {\n return (\n \n \n Login \n \n Enter your email below to login to your account\n \n \n \n \n
\n Email \n \n
\n
\n
\n Password \n \n Forgot your password?\n \n
\n
\n
\n
\n Login\n \n
\n Login with Google\n \n
\n \n Don't have an account?\n {' '}\n \n Sign up\n \n
\n \n \n )\n}\n",
+ "type": "registry:block",
+ "target": ""
+ }
+ ]
}
diff --git a/apps/web/public/r/styles/default/authentication-03.json b/apps/web/public/r/styles/default/authentication-03.json
index 06c8b377..a42c710c 100644
--- a/apps/web/public/r/styles/default/authentication-03.json
+++ b/apps/web/public/r/styles/default/authentication-03.json
@@ -1,18 +1,13 @@
{
- "name": "authentication-03",
- "type": "registry:block",
- "registryDependencies": [
- "button",
- "card",
- "input",
- "label"
- ],
- "files": [
- {
- "path": "block/authentication-03.tsx",
- "content": "import Link from 'next/link'\n\nimport { Button } from '~/registry/default/ui/button'\nimport {\n Card,\n CardContent,\n CardDescription,\n CardHeader,\n CardTitle,\n} from '~/registry/default/ui/card'\nimport { Input } from '~/registry/default/ui/input'\nimport { Label } from '~/registry/default/ui/label'\n\nexport default function LoginForm() {\n return (\n \n \n Sign Up \n \n Enter your information to create an account\n \n \n \n \n
\n
\n Email \n \n
\n
\n Password \n \n
\n
\n Create an account\n \n
\n Sign up with GitHub\n \n
\n \n Already have an account?\n {' '}\n \n Sign in\n \n
\n \n \n )\n}\n",
- "type": "registry:block",
- "target": ""
- }
- ]
+ "name": "authentication-03",
+ "type": "registry:block",
+ "registryDependencies": ["button", "card", "input", "label"],
+ "files": [
+ {
+ "path": "block/authentication-03.tsx",
+ "content": "import Link from 'next/link'\n\nimport { Button } from '~/registry/default/ui/button'\nimport {\n Card,\n CardContent,\n CardDescription,\n CardHeader,\n CardTitle,\n} from '~/registry/default/ui/card'\nimport { Input } from '~/registry/default/ui/input'\nimport { Label } from '~/registry/default/ui/label'\n\nexport default function LoginForm() {\n return (\n \n \n Sign Up \n \n Enter your information to create an account\n \n \n \n \n
\n
\n Email \n \n
\n
\n Password \n \n
\n
\n Create an account\n \n
\n Sign up with GitHub\n \n
\n \n Already have an account?\n {' '}\n \n Sign in\n \n
\n \n \n )\n}\n",
+ "type": "registry:block",
+ "target": ""
+ }
+ ]
}
diff --git a/apps/web/public/r/styles/default/authentication-04.json b/apps/web/public/r/styles/default/authentication-04.json
index b1ec8710..a32e9bfc 100644
--- a/apps/web/public/r/styles/default/authentication-04.json
+++ b/apps/web/public/r/styles/default/authentication-04.json
@@ -1,18 +1,13 @@
{
- "name": "authentication-04",
- "type": "registry:block",
- "registryDependencies": [
- "button",
- "card",
- "input",
- "label"
- ],
- "files": [
- {
- "path": "block/authentication-04.tsx",
- "content": "import Image from 'next/image'\nimport Link from 'next/link'\n\nimport { Button } from '~/registry/default/ui/button'\nimport { Input } from '~/registry/default/ui/input'\nimport { Label } from '~/registry/default/ui/label'\n\nexport default function Dashboard() {\n return (\n \n
\n
\n
\n
Login \n
\n Enter your email below to login to your account\n
\n
\n
\n
\n Email \n \n
\n
\n
\n Password \n \n Forgot your password?\n \n
\n
\n
\n
\n Login\n \n
\n Login with Google\n \n
\n
\n Don't have an account?\n {' '}\n \n Sign up\n \n
\n
\n
\n
\n \n
\n
\n )\n}\n",
- "type": "registry:block",
- "target": ""
- }
- ]
+ "name": "authentication-04",
+ "type": "registry:block",
+ "registryDependencies": ["button", "card", "input", "label"],
+ "files": [
+ {
+ "path": "block/authentication-04.tsx",
+ "content": "import Image from 'next/image'\nimport Link from 'next/link'\n\nimport { Button } from '~/registry/default/ui/button'\nimport { Input } from '~/registry/default/ui/input'\nimport { Label } from '~/registry/default/ui/label'\n\nexport default function Dashboard() {\n return (\n \n
\n
\n
\n
Login \n
\n Enter your email below to login to your account\n
\n
\n
\n
\n Email \n \n
\n
\n
\n Password \n \n Forgot your password?\n \n
\n
\n
\n
\n Login\n \n
\n Login with Google\n \n
\n
\n Don't have an account?\n {' '}\n \n Sign up\n \n
\n
\n
\n
\n \n
\n
\n )\n}\n",
+ "type": "registry:block",
+ "target": ""
+ }
+ ]
}
diff --git a/apps/web/public/r/styles/default/chart-bar-demo-axis.json b/apps/web/public/r/styles/default/chart-bar-demo-axis.json
index f2e5beee..3406a243 100644
--- a/apps/web/public/r/styles/default/chart-bar-demo-axis.json
+++ b/apps/web/public/r/styles/default/chart-bar-demo-axis.json
@@ -1,12 +1,12 @@
{
- "name": "chart-bar-demo-axis",
- "type": "registry:example",
- "files": [
- {
- "path": "example/chart-bar-demo-axis.tsx",
- "content": "'use client'\n\nimport { Bar, BarChart, CartesianGrid, XAxis } from 'recharts'\n\nimport type { ChartConfig } from '~/registry/default/ui/chart'\nimport { ChartContainer } from '~/registry/default/ui/chart'\n\nconst chartData = [\n { month: 'January', desktop: 186, mobile: 80 },\n { month: 'February', desktop: 305, mobile: 200 },\n { month: 'March', desktop: 237, mobile: 120 },\n { month: 'April', desktop: 73, mobile: 190 },\n { month: 'May', desktop: 209, mobile: 130 },\n { month: 'June', desktop: 214, mobile: 140 },\n]\n\nconst chartConfig = {\n desktop: {\n label: 'Desktop',\n color: '#2563eb',\n },\n mobile: {\n label: 'Mobile',\n color: '#60a5fa',\n },\n} satisfies ChartConfig\n\nexport default function Component() {\n return (\n \n \n \n value.slice(0, 3)}\n />\n \n \n \n \n )\n}\n",
- "type": "registry:example",
- "target": ""
- }
- ]
+ "name": "chart-bar-demo-axis",
+ "type": "registry:example",
+ "files": [
+ {
+ "path": "example/chart-bar-demo-axis.tsx",
+ "content": "'use client'\n\nimport { Bar, BarChart, CartesianGrid, XAxis } from 'recharts'\n\nimport type { ChartConfig } from '~/registry/default/ui/chart'\nimport { ChartContainer } from '~/registry/default/ui/chart'\n\nconst chartData = [\n { month: 'January', desktop: 186, mobile: 80 },\n { month: 'February', desktop: 305, mobile: 200 },\n { month: 'March', desktop: 237, mobile: 120 },\n { month: 'April', desktop: 73, mobile: 190 },\n { month: 'May', desktop: 209, mobile: 130 },\n { month: 'June', desktop: 214, mobile: 140 },\n]\n\nconst chartConfig = {\n desktop: {\n label: 'Desktop',\n color: '#2563eb',\n },\n mobile: {\n label: 'Mobile',\n color: '#60a5fa',\n },\n} satisfies ChartConfig\n\nexport default function Component() {\n return (\n \n \n \n value.slice(0, 3)}\n />\n \n \n \n \n )\n}\n",
+ "type": "registry:example",
+ "target": ""
+ }
+ ]
}
diff --git a/apps/web/public/r/styles/default/chart-bar-demo-grid.json b/apps/web/public/r/styles/default/chart-bar-demo-grid.json
index 500ef207..8873e2f1 100644
--- a/apps/web/public/r/styles/default/chart-bar-demo-grid.json
+++ b/apps/web/public/r/styles/default/chart-bar-demo-grid.json
@@ -1,12 +1,12 @@
{
- "name": "chart-bar-demo-grid",
- "type": "registry:example",
- "files": [
- {
- "path": "example/chart-bar-demo-grid.tsx",
- "content": "'use client'\n\nimport { Bar, BarChart, CartesianGrid } from 'recharts'\n\nimport type { ChartConfig } from '~/registry/default/ui/chart'\nimport { ChartContainer } from '~/registry/default/ui/chart'\n\nconst chartData = [\n { month: 'January', desktop: 186, mobile: 80 },\n { month: 'February', desktop: 305, mobile: 200 },\n { month: 'March', desktop: 237, mobile: 120 },\n { month: 'April', desktop: 73, mobile: 190 },\n { month: 'May', desktop: 209, mobile: 130 },\n { month: 'June', desktop: 214, mobile: 140 },\n]\n\nconst chartConfig = {\n desktop: {\n label: 'Desktop',\n color: '#2563eb',\n },\n mobile: {\n label: 'Mobile',\n color: '#60a5fa',\n },\n} satisfies ChartConfig\n\nexport default function Component() {\n return (\n \n \n \n \n \n \n \n )\n}\n",
- "type": "registry:example",
- "target": ""
- }
- ]
+ "name": "chart-bar-demo-grid",
+ "type": "registry:example",
+ "files": [
+ {
+ "path": "example/chart-bar-demo-grid.tsx",
+ "content": "'use client'\n\nimport { Bar, BarChart, CartesianGrid } from 'recharts'\n\nimport type { ChartConfig } from '~/registry/default/ui/chart'\nimport { ChartContainer } from '~/registry/default/ui/chart'\n\nconst chartData = [\n { month: 'January', desktop: 186, mobile: 80 },\n { month: 'February', desktop: 305, mobile: 200 },\n { month: 'March', desktop: 237, mobile: 120 },\n { month: 'April', desktop: 73, mobile: 190 },\n { month: 'May', desktop: 209, mobile: 130 },\n { month: 'June', desktop: 214, mobile: 140 },\n]\n\nconst chartConfig = {\n desktop: {\n label: 'Desktop',\n color: '#2563eb',\n },\n mobile: {\n label: 'Mobile',\n color: '#60a5fa',\n },\n} satisfies ChartConfig\n\nexport default function Component() {\n return (\n \n \n \n \n \n \n \n )\n}\n",
+ "type": "registry:example",
+ "target": ""
+ }
+ ]
}
diff --git a/apps/web/public/r/styles/default/chart-bar-demo-legend.json b/apps/web/public/r/styles/default/chart-bar-demo-legend.json
index 50869b33..976c30ff 100644
--- a/apps/web/public/r/styles/default/chart-bar-demo-legend.json
+++ b/apps/web/public/r/styles/default/chart-bar-demo-legend.json
@@ -1,12 +1,12 @@
{
- "name": "chart-bar-demo-legend",
- "type": "registry:example",
- "files": [
- {
- "path": "example/chart-bar-demo-legend.tsx",
- "content": "'use client'\n\nimport { Bar, BarChart, CartesianGrid, XAxis } from 'recharts'\n\nimport type {\n ChartConfig,\n} from '~/registry/default/ui/chart'\nimport {\n ChartContainer,\n ChartLegend,\n ChartLegendContent,\n ChartTooltip,\n ChartTooltipContent,\n} from '~/registry/default/ui/chart'\n\nconst chartData = [\n { month: 'January', desktop: 186, mobile: 80 },\n { month: 'February', desktop: 305, mobile: 200 },\n { month: 'March', desktop: 237, mobile: 120 },\n { month: 'April', desktop: 73, mobile: 190 },\n { month: 'May', desktop: 209, mobile: 130 },\n { month: 'June', desktop: 214, mobile: 140 },\n]\n\nconst chartConfig = {\n desktop: {\n label: 'Desktop',\n color: '#2563eb',\n },\n mobile: {\n label: 'Mobile',\n color: '#60a5fa',\n },\n} satisfies ChartConfig\n\nexport default function Component() {\n return (\n \n \n \n value.slice(0, 3)}\n />\n } />\n } />\n \n \n \n \n )\n}\n",
- "type": "registry:example",
- "target": ""
- }
- ]
+ "name": "chart-bar-demo-legend",
+ "type": "registry:example",
+ "files": [
+ {
+ "path": "example/chart-bar-demo-legend.tsx",
+ "content": "'use client'\n\nimport { Bar, BarChart, CartesianGrid, XAxis } from 'recharts'\n\nimport type {\n ChartConfig,\n} from '~/registry/default/ui/chart'\nimport {\n ChartContainer,\n ChartLegend,\n ChartLegendContent,\n ChartTooltip,\n ChartTooltipContent,\n} from '~/registry/default/ui/chart'\n\nconst chartData = [\n { month: 'January', desktop: 186, mobile: 80 },\n { month: 'February', desktop: 305, mobile: 200 },\n { month: 'March', desktop: 237, mobile: 120 },\n { month: 'April', desktop: 73, mobile: 190 },\n { month: 'May', desktop: 209, mobile: 130 },\n { month: 'June', desktop: 214, mobile: 140 },\n]\n\nconst chartConfig = {\n desktop: {\n label: 'Desktop',\n color: '#2563eb',\n },\n mobile: {\n label: 'Mobile',\n color: '#60a5fa',\n },\n} satisfies ChartConfig\n\nexport default function Component() {\n return (\n \n \n \n value.slice(0, 3)}\n />\n } />\n } />\n \n \n \n \n )\n}\n",
+ "type": "registry:example",
+ "target": ""
+ }
+ ]
}
diff --git a/apps/web/public/r/styles/default/chart-bar-demo-tooltip.json b/apps/web/public/r/styles/default/chart-bar-demo-tooltip.json
index a0eff10e..29053ea6 100644
--- a/apps/web/public/r/styles/default/chart-bar-demo-tooltip.json
+++ b/apps/web/public/r/styles/default/chart-bar-demo-tooltip.json
@@ -1,12 +1,12 @@
{
- "name": "chart-bar-demo-tooltip",
- "type": "registry:example",
- "files": [
- {
- "path": "example/chart-bar-demo-tooltip.tsx",
- "content": "'use client'\n\nimport { Bar, BarChart, CartesianGrid, XAxis } from 'recharts'\n\nimport type {\n ChartConfig,\n} from '~/registry/default/ui/chart'\nimport {\n ChartContainer,\n ChartTooltip,\n ChartTooltipContent,\n} from '~/registry/default/ui/chart'\n\nconst chartData = [\n { month: 'January', desktop: 186, mobile: 80 },\n { month: 'February', desktop: 305, mobile: 200 },\n { month: 'March', desktop: 237, mobile: 120 },\n { month: 'April', desktop: 73, mobile: 190 },\n { month: 'May', desktop: 209, mobile: 130 },\n { month: 'June', desktop: 214, mobile: 140 },\n]\n\nconst chartConfig = {\n desktop: {\n label: 'Desktop',\n color: '#2563eb',\n },\n mobile: {\n label: 'Mobile',\n color: '#60a5fa',\n },\n} satisfies ChartConfig\n\nexport default function Component() {\n return (\n \n \n \n value.slice(0, 3)}\n />\n } />\n \n \n \n \n )\n}\n",
- "type": "registry:example",
- "target": ""
- }
- ]
+ "name": "chart-bar-demo-tooltip",
+ "type": "registry:example",
+ "files": [
+ {
+ "path": "example/chart-bar-demo-tooltip.tsx",
+ "content": "'use client'\n\nimport { Bar, BarChart, CartesianGrid, XAxis } from 'recharts'\n\nimport type {\n ChartConfig,\n} from '~/registry/default/ui/chart'\nimport {\n ChartContainer,\n ChartTooltip,\n ChartTooltipContent,\n} from '~/registry/default/ui/chart'\n\nconst chartData = [\n { month: 'January', desktop: 186, mobile: 80 },\n { month: 'February', desktop: 305, mobile: 200 },\n { month: 'March', desktop: 237, mobile: 120 },\n { month: 'April', desktop: 73, mobile: 190 },\n { month: 'May', desktop: 209, mobile: 130 },\n { month: 'June', desktop: 214, mobile: 140 },\n]\n\nconst chartConfig = {\n desktop: {\n label: 'Desktop',\n color: '#2563eb',\n },\n mobile: {\n label: 'Mobile',\n color: '#60a5fa',\n },\n} satisfies ChartConfig\n\nexport default function Component() {\n return (\n \n \n \n value.slice(0, 3)}\n />\n } />\n \n \n \n \n )\n}\n",
+ "type": "registry:example",
+ "target": ""
+ }
+ ]
}
diff --git a/apps/web/public/r/styles/default/chart-bar-demo.json b/apps/web/public/r/styles/default/chart-bar-demo.json
index e448732a..c0cfacf9 100644
--- a/apps/web/public/r/styles/default/chart-bar-demo.json
+++ b/apps/web/public/r/styles/default/chart-bar-demo.json
@@ -1,12 +1,12 @@
{
- "name": "chart-bar-demo",
- "type": "registry:example",
- "files": [
- {
- "path": "example/chart-bar-demo.tsx",
- "content": "'use client'\n\nimport { Bar, BarChart } from 'recharts'\n\nimport type { ChartConfig } from '~/registry/default/ui/chart'\nimport { ChartContainer } from '~/registry/default/ui/chart'\n\nconst chartData = [\n { month: 'January', desktop: 186, mobile: 80 },\n { month: 'February', desktop: 305, mobile: 200 },\n { month: 'March', desktop: 237, mobile: 120 },\n { month: 'April', desktop: 73, mobile: 190 },\n { month: 'May', desktop: 209, mobile: 130 },\n { month: 'June', desktop: 214, mobile: 140 },\n]\n\nconst chartConfig = {\n desktop: {\n label: 'Desktop',\n color: '#2563eb',\n },\n mobile: {\n label: 'Mobile',\n color: '#60a5fa',\n },\n} satisfies ChartConfig\n\nexport default function Component() {\n return (\n \n \n \n \n \n \n )\n}\n",
- "type": "registry:example",
- "target": ""
- }
- ]
+ "name": "chart-bar-demo",
+ "type": "registry:example",
+ "files": [
+ {
+ "path": "example/chart-bar-demo.tsx",
+ "content": "'use client'\n\nimport { Bar, BarChart } from 'recharts'\n\nimport type { ChartConfig } from '~/registry/default/ui/chart'\nimport { ChartContainer } from '~/registry/default/ui/chart'\n\nconst chartData = [\n { month: 'January', desktop: 186, mobile: 80 },\n { month: 'February', desktop: 305, mobile: 200 },\n { month: 'March', desktop: 237, mobile: 120 },\n { month: 'April', desktop: 73, mobile: 190 },\n { month: 'May', desktop: 209, mobile: 130 },\n { month: 'June', desktop: 214, mobile: 140 },\n]\n\nconst chartConfig = {\n desktop: {\n label: 'Desktop',\n color: '#2563eb',\n },\n mobile: {\n label: 'Mobile',\n color: '#60a5fa',\n },\n} satisfies ChartConfig\n\nexport default function Component() {\n return (\n \n \n \n \n \n \n )\n}\n",
+ "type": "registry:example",
+ "target": ""
+ }
+ ]
}
diff --git a/apps/web/public/r/styles/default/chart-tooltip-demo.json b/apps/web/public/r/styles/default/chart-tooltip-demo.json
index f5b78af7..b50acdae 100644
--- a/apps/web/public/r/styles/default/chart-tooltip-demo.json
+++ b/apps/web/public/r/styles/default/chart-tooltip-demo.json
@@ -1,12 +1,12 @@
{
- "name": "chart-tooltip-demo",
- "type": "registry:example",
- "files": [
- {
- "path": "example/chart-tooltip-demo.tsx",
- "content": "'use client'\n\nimport * as React from 'react'\n\nimport { ny } from '~/lib/utils'\n\nexport default function Component() {\n return (\n div]:relative [&>div]:flex [&>div]:h-[137px] [&>div]:w-[224px] [&>div]:items-center [&>div]:justify-center [&>div]:p-4\">\n
\n
\n Label\n
\n
\n \n \n \n \n \n \n \n \n \n
\n
\n
\n
\n Name\n
\n
\n \n \n \n \n \n \n \n \n \n
\n
\n
\n \n
\n
\n
\n Indicator\n
\n
\n
\n \n \n \n \n \n \n \n \n \n
\n
\n )\n}\n\nfunction TooltipDemo({\n indicator = 'dot',\n label,\n payload,\n hideLabel,\n hideIndicator,\n className,\n}: {\n label: string\n hideLabel?: boolean\n hideIndicator?: boolean\n indicator?: 'line' | 'dot' | 'dashed'\n payload: {\n name: string\n value: number\n fill: string\n }[]\n nameKey?: string\n labelKey?: string\n} & React.ComponentProps<'div'>) {\n const tooltipLabel = hideLabel\n ? null\n : (\n {label}
\n )\n\n if (!payload?.length) {\n return null\n }\n\n const nestLabel = payload.length === 1 && indicator !== 'dot'\n\n return (\n \n {!nestLabel ? tooltipLabel : null}\n
\n {payload.map((item, index) => {\n const indicatorColor = item.fill\n\n return (\n
svg]:text-muted-foreground flex w-full items-stretch gap-2 [&>svg]:size-2.5',\n indicator === 'dot' && 'items-center',\n )}\n >\n <>\n {!hideIndicator && (\n
\n )}\n
\n
\n {nestLabel ? tooltipLabel : null}\n {item.name} \n
\n
\n {item.value.toLocaleString()}\n \n
\n >\n
\n )\n })}\n
\n
\n )\n}\n",
- "type": "registry:example",
- "target": ""
- }
- ]
+ "name": "chart-tooltip-demo",
+ "type": "registry:example",
+ "files": [
+ {
+ "path": "example/chart-tooltip-demo.tsx",
+ "content": "'use client'\n\nimport * as React from 'react'\n\nimport { ny } from '~/lib/utils'\n\nexport default function Component() {\n return (\n div]:relative [&>div]:flex [&>div]:h-[137px] [&>div]:w-[224px] [&>div]:items-center [&>div]:justify-center [&>div]:p-4\">\n
\n
\n Label\n
\n
\n \n \n \n \n \n \n \n \n \n
\n
\n
\n
\n Name\n
\n
\n \n \n \n \n \n \n \n \n \n
\n
\n
\n \n
\n
\n
\n Indicator\n
\n
\n
\n \n \n \n \n \n \n \n \n \n
\n
\n )\n}\n\nfunction TooltipDemo({\n indicator = 'dot',\n label,\n payload,\n hideLabel,\n hideIndicator,\n className,\n}: {\n label: string\n hideLabel?: boolean\n hideIndicator?: boolean\n indicator?: 'line' | 'dot' | 'dashed'\n payload: {\n name: string\n value: number\n fill: string\n }[]\n nameKey?: string\n labelKey?: string\n} & React.ComponentProps<'div'>) {\n const tooltipLabel = hideLabel\n ? null\n : (\n {label}
\n )\n\n if (!payload?.length) {\n return null\n }\n\n const nestLabel = payload.length === 1 && indicator !== 'dot'\n\n return (\n \n {!nestLabel ? tooltipLabel : null}\n
\n {payload.map((item, index) => {\n const indicatorColor = item.fill\n\n return (\n
svg]:text-muted-foreground flex w-full items-stretch gap-2 [&>svg]:size-2.5',\n indicator === 'dot' && 'items-center',\n )}\n >\n <>\n {!hideIndicator && (\n
\n )}\n
\n
\n {nestLabel ? tooltipLabel : null}\n {item.name} \n
\n
\n {item.value.toLocaleString()}\n \n
\n >\n
\n )\n })}\n
\n
\n )\n}\n",
+ "type": "registry:example",
+ "target": ""
+ }
+ ]
}
diff --git a/apps/web/public/r/styles/default/charts-01.json b/apps/web/public/r/styles/default/charts-01.json
index ca5c43bb..acbfdaf4 100644
--- a/apps/web/public/r/styles/default/charts-01.json
+++ b/apps/web/public/r/styles/default/charts-01.json
@@ -1,15 +1,13 @@
{
- "name": "charts-01",
- "type": "registry:block",
- "registryDependencies": [
- "chart"
- ],
- "files": [
- {
- "path": "block/charts-01.tsx",
- "content": "'use client'\n\nimport {\n Area,\n AreaChart,\n Bar,\n BarChart,\n CartesianGrid,\n Label,\n LabelList,\n Line,\n LineChart,\n PolarAngleAxis,\n RadialBar,\n RadialBarChart,\n Rectangle,\n ReferenceLine,\n XAxis,\n YAxis,\n} from 'recharts'\n\nimport {\n Card,\n CardContent,\n CardDescription,\n CardFooter,\n CardHeader,\n CardTitle,\n} from '~/registry/default/ui/card'\nimport {\n ChartContainer,\n ChartTooltip,\n ChartTooltipContent,\n} from '~/registry/default/ui/chart'\nimport { Separator } from '~/registry/default/ui/separator'\n\nexport default function Charts() {\n return (\n \n
\n
\n \n Today \n \n 12,584\n {' '}\n \n steps\n \n \n \n \n \n \n }\n />\n {\n return new Date(value).toLocaleDateString('en-US', {\n weekday: 'short',\n })\n }}\n />\n {\n return new Date(value).toLocaleDateString('en-US', {\n day: 'numeric',\n month: 'long',\n year: 'numeric',\n })\n }}\n />\n )}\n cursor={false}\n />\n \n \n \n \n \n \n \n \n \n Over the past 7 days, you have walked\n {' '}\n 53,305 \n {' '}\n steps.\n \n \n You need\n {' '}\n 12,584 \n {' '}\n more\n steps to reach your goal.\n \n \n \n
\n div]:flex-1\">\n \n Resting HR \n \n 62\n \n bpm\n \n \n
\n \n Variability \n \n 35\n \n ms\n \n \n
\n \n \n \n \n \n \n {\n return new Date(value).toLocaleDateString('en-US', {\n weekday: 'short',\n })\n }}\n />\n \n {\n return new Date(value).toLocaleDateString('en-US', {\n day: 'numeric',\n month: 'long',\n year: 'numeric',\n })\n }}\n />\n )}\n cursor={false}\n />\n \n \n \n \n
\n
\n
\n \n Progress \n \n You're average more steps a day this year than last year.\n \n \n \n \n
\n 12,453\n \n steps/day\n \n
\n
\n \n \n \n \n \n \n \n \n
\n \n
\n 10,103\n \n steps/day\n \n
\n
\n \n \n \n \n \n \n \n \n
\n \n \n
\n \n Walking Distance \n \n Over the last 7 days, your distance walked and run was 12.5 miles\n per day.\n \n \n \n \n 12.5\n \n miles/day\n \n
\n \n \n }\n />\n \n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n
Move
\n
\n 562\n \n kcal\n \n
\n
\n
\n
\n
Exercise
\n
\n 73\n \n min\n \n
\n
\n
\n
\n
Stand
\n
\n 14\n \n hr\n \n
\n
\n
\n \n \n
\n
\n
\n \n \n
\n
Move
\n
\n 562/600\n \n kcal\n \n
\n
\n
\n
Exercise
\n
\n 73/120\n \n min\n \n
\n
\n
\n
Stand
\n
\n 8/12\n \n hr\n \n
\n
\n
\n \n \n \n \n \n \n \n \n
\n \n Active Energy \n \n You're burning an average of 754 calories per day. Good job!\n \n \n \n \n 1,254\n \n kcal/day\n \n
\n \n \n }\n />\n \n \n \n \n \n
\n \n Time in Bed \n \n 8\n \n hr\n \n 35\n \n min\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n }\n formatter={value => (\n \n Time in bed\n
\n {value}\n \n hr\n \n
\n
\n )}\n />\n \n \n \n \n
\n
\n )\n}\n",
- "type": "registry:block",
- "target": ""
- }
- ]
+ "name": "charts-01",
+ "type": "registry:block",
+ "registryDependencies": ["chart"],
+ "files": [
+ {
+ "path": "block/charts-01.tsx",
+ "content": "'use client'\n\nimport {\n Area,\n AreaChart,\n Bar,\n BarChart,\n CartesianGrid,\n Label,\n LabelList,\n Line,\n LineChart,\n PolarAngleAxis,\n RadialBar,\n RadialBarChart,\n Rectangle,\n ReferenceLine,\n XAxis,\n YAxis,\n} from 'recharts'\n\nimport {\n Card,\n CardContent,\n CardDescription,\n CardFooter,\n CardHeader,\n CardTitle,\n} from '~/registry/default/ui/card'\nimport {\n ChartContainer,\n ChartTooltip,\n ChartTooltipContent,\n} from '~/registry/default/ui/chart'\nimport { Separator } from '~/registry/default/ui/separator'\n\nexport default function Charts() {\n return (\n \n
\n
\n \n Today \n \n 12,584\n {' '}\n \n steps\n \n \n \n \n \n \n }\n />\n {\n return new Date(value).toLocaleDateString('en-US', {\n weekday: 'short',\n })\n }}\n />\n {\n return new Date(value).toLocaleDateString('en-US', {\n day: 'numeric',\n month: 'long',\n year: 'numeric',\n })\n }}\n />\n )}\n cursor={false}\n />\n \n \n \n \n \n \n \n \n \n Over the past 7 days, you have walked\n {' '}\n 53,305 \n {' '}\n steps.\n \n \n You need\n {' '}\n 12,584 \n {' '}\n more\n steps to reach your goal.\n \n \n \n
\n div]:flex-1\">\n \n Resting HR \n \n 62\n \n bpm\n \n \n
\n \n Variability \n \n 35\n \n ms\n \n \n
\n \n \n \n \n \n \n {\n return new Date(value).toLocaleDateString('en-US', {\n weekday: 'short',\n })\n }}\n />\n \n {\n return new Date(value).toLocaleDateString('en-US', {\n day: 'numeric',\n month: 'long',\n year: 'numeric',\n })\n }}\n />\n )}\n cursor={false}\n />\n \n \n \n \n
\n
\n
\n \n Progress \n \n You're average more steps a day this year than last year.\n \n \n \n \n
\n 12,453\n \n steps/day\n \n
\n
\n \n \n \n \n \n \n \n \n
\n \n
\n 10,103\n \n steps/day\n \n
\n
\n \n \n \n \n \n \n \n \n
\n \n \n
\n \n Walking Distance \n \n Over the last 7 days, your distance walked and run was 12.5 miles\n per day.\n \n \n \n \n 12.5\n \n miles/day\n \n
\n \n \n }\n />\n \n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n
Move
\n
\n 562\n \n kcal\n \n
\n
\n
\n
\n
Exercise
\n
\n 73\n \n min\n \n
\n
\n
\n
\n
Stand
\n
\n 14\n \n hr\n \n
\n
\n
\n \n \n
\n
\n
\n \n \n
\n
Move
\n
\n 562/600\n \n kcal\n \n
\n
\n
\n
Exercise
\n
\n 73/120\n \n min\n \n
\n
\n
\n
Stand
\n
\n 8/12\n \n hr\n \n
\n
\n
\n \n \n \n \n \n \n \n \n
\n \n Active Energy \n \n You're burning an average of 754 calories per day. Good job!\n \n \n \n \n 1,254\n \n kcal/day\n \n
\n \n \n }\n />\n \n \n \n \n \n
\n \n Time in Bed \n \n 8\n \n hr\n \n 35\n \n min\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n }\n formatter={value => (\n \n Time in bed\n
\n {value}\n \n hr\n \n
\n
\n )}\n />\n \n \n \n \n
\n
\n )\n}\n",
+ "type": "registry:block",
+ "target": ""
+ }
+ ]
}
diff --git a/apps/web/public/r/styles/default/dashboard-01.json b/apps/web/public/r/styles/default/dashboard-01.json
index 31398835..914d9299 100644
--- a/apps/web/public/r/styles/default/dashboard-01.json
+++ b/apps/web/public/r/styles/default/dashboard-01.json
@@ -1,18 +1,13 @@
{
- "name": "dashboard-01",
- "type": "registry:block",
- "registryDependencies": [
- "button",
- "dropdown-menu",
- "input",
- "sheet"
- ],
- "files": [
- {
- "path": "block/dashboard-01.tsx",
- "content": "import Link from 'next/link'\nimport {\n Activity,\n ArrowUpRight,\n CircleUser,\n CreditCard,\n DollarSign,\n Menu,\n Package2,\n Search,\n Users,\n} from 'lucide-react'\n\nimport {\n Avatar,\n AvatarFallback,\n AvatarImage,\n} from '~/registry/default/ui/avatar'\nimport { Badge } from '~/registry/default/ui/badge'\nimport { Button } from '~/registry/default/ui/button'\nimport {\n Card,\n CardContent,\n CardDescription,\n CardHeader,\n CardTitle,\n} from '~/registry/default/ui/card'\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuLabel,\n DropdownMenuSeparator,\n DropdownMenuTrigger,\n} from '~/registry/default/ui/dropdown-menu'\nimport { Input } from '~/registry/default/ui/input'\nimport { Sheet, SheetContent, SheetTrigger } from '~/registry/default/ui/sheet'\nimport {\n Table,\n TableBody,\n TableCell,\n TableHead,\n TableHeader,\n TableRow,\n} from '~/registry/default/ui/table'\n\nexport default function Dashboard() {\n return (\n \n
\n \n \n \n Acme Inc \n \n \n Dashboard\n \n \n Orders\n \n \n Products\n \n \n Customers\n \n \n Analytics\n \n \n \n \n \n \n Toggle navigation menu \n \n \n \n \n \n \n Acme Inc \n \n \n Dashboard\n \n \n Orders\n \n \n Products\n \n \n Customers\n \n \n Analytics\n \n \n \n \n \n
\n
\n \n \n \n Toggle user menu \n \n \n \n My Account \n \n Settings \n Support \n \n Logout \n \n \n
\n \n
\n \n
\n \n \n Total Revenue\n \n \n \n \n $45,231.89
\n \n +20.1% from last month\n
\n \n \n
\n \n \n Subscriptions\n \n \n \n \n +2350
\n \n +180.1% from last month\n
\n \n \n
\n \n Sales \n \n \n \n +12,234
\n \n +19% from last month\n
\n \n \n
\n \n Active Now \n \n \n \n +573
\n \n +201 since last hour\n
\n \n \n
\n \n
\n \n \n Transactions \n \n Recent transactions from your store.\n \n
\n \n \n View All\n \n \n \n \n \n \n \n \n Customer \n \n Type\n \n \n Status\n \n \n Date\n \n Amount \n \n \n \n \n \n Liam Johnson
\n \n liam@example.com\n
\n \n \n Sale\n \n \n \n Approved\n \n \n \n 2023-06-23\n \n $250.00 \n \n \n \n Olivia Smith
\n \n olivia@example.com\n
\n \n \n Refund\n \n \n \n Declined\n \n \n \n 2023-06-24\n \n $150.00 \n \n \n \n Noah Williams
\n \n noah@example.com\n
\n \n \n Subscription\n \n \n \n Approved\n \n \n \n 2023-06-25\n \n $350.00 \n \n \n \n Emma Brown
\n \n emma@example.com\n
\n \n \n Sale\n \n \n \n Approved\n \n \n \n 2023-06-26\n \n $450.00 \n \n \n \n Liam Johnson
\n \n liam@example.com\n
\n \n \n Sale\n \n \n \n Approved\n \n \n \n 2023-06-27\n \n $550.00 \n \n \n
\n \n \n
\n \n Recent Sales \n \n \n \n
\n \n OM \n \n
\n
\n Olivia Martin\n
\n
\n olivia.martin@email.com\n
\n
\n
+$1,999.00
\n
\n \n
\n \n JL \n \n
\n
\n Jackson Lee\n
\n
\n jackson.lee@email.com\n
\n
\n
+$39.00
\n
\n \n
\n \n IN \n \n
\n
\n Isabella Nguyen\n
\n
\n isabella.nguyen@email.com\n
\n
\n
+$299.00
\n
\n \n
\n \n WK \n \n
\n
\n William Kim\n
\n
\n will@email.com\n
\n
\n
+$99.00
\n
\n \n
\n \n SD \n \n
\n
\n Sofia Davis\n
\n
\n sofia.davis@email.com\n
\n
\n
+$39.00
\n
\n \n \n
\n \n
\n )\n}\n",
- "type": "registry:block",
- "target": ""
- }
- ]
+ "name": "dashboard-01",
+ "type": "registry:block",
+ "registryDependencies": ["button", "dropdown-menu", "input", "sheet"],
+ "files": [
+ {
+ "path": "block/dashboard-01.tsx",
+ "content": "import Link from 'next/link'\nimport {\n Activity,\n ArrowUpRight,\n CircleUser,\n CreditCard,\n DollarSign,\n Menu,\n Package2,\n Search,\n Users,\n} from 'lucide-react'\n\nimport {\n Avatar,\n AvatarFallback,\n AvatarImage,\n} from '~/registry/default/ui/avatar'\nimport { Badge } from '~/registry/default/ui/badge'\nimport { Button } from '~/registry/default/ui/button'\nimport {\n Card,\n CardContent,\n CardDescription,\n CardHeader,\n CardTitle,\n} from '~/registry/default/ui/card'\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuLabel,\n DropdownMenuSeparator,\n DropdownMenuTrigger,\n} from '~/registry/default/ui/dropdown-menu'\nimport { Input } from '~/registry/default/ui/input'\nimport { Sheet, SheetContent, SheetTrigger } from '~/registry/default/ui/sheet'\nimport {\n Table,\n TableBody,\n TableCell,\n TableHead,\n TableHeader,\n TableRow,\n} from '~/registry/default/ui/table'\n\nexport default function Dashboard() {\n return (\n \n
\n \n \n \n Acme Inc \n \n \n Dashboard\n \n \n Orders\n \n \n Products\n \n \n Customers\n \n \n Analytics\n \n \n \n \n \n \n Toggle navigation menu \n \n \n \n \n \n \n Acme Inc \n \n \n Dashboard\n \n \n Orders\n \n \n Products\n \n \n Customers\n \n \n Analytics\n \n \n \n \n \n
\n
\n \n \n \n Toggle user menu \n \n \n \n My Account \n \n Settings \n Support \n \n Logout \n \n \n
\n \n
\n \n
\n \n \n Total Revenue\n \n \n \n \n $45,231.89
\n \n +20.1% from last month\n
\n \n \n
\n \n \n Subscriptions\n \n \n \n \n +2350
\n \n +180.1% from last month\n
\n \n \n
\n \n Sales \n \n \n \n +12,234
\n \n +19% from last month\n
\n \n \n
\n \n Active Now \n \n \n \n +573
\n \n +201 since last hour\n
\n \n \n
\n \n
\n \n \n Transactions \n \n Recent transactions from your store.\n \n
\n \n \n View All\n \n \n \n \n \n \n \n \n Customer \n \n Type\n \n \n Status\n \n \n Date\n \n Amount \n \n \n \n \n \n Liam Johnson
\n \n liam@example.com\n
\n \n \n Sale\n \n \n \n Approved\n \n \n \n 2023-06-23\n \n $250.00 \n \n \n \n Olivia Smith
\n \n olivia@example.com\n
\n \n \n Refund\n \n \n \n Declined\n \n \n \n 2023-06-24\n \n $150.00 \n \n \n \n Noah Williams
\n \n noah@example.com\n
\n \n \n Subscription\n \n \n \n Approved\n \n \n \n 2023-06-25\n \n $350.00 \n \n \n \n Emma Brown
\n \n emma@example.com\n
\n \n \n Sale\n \n \n \n Approved\n \n \n \n 2023-06-26\n \n $450.00 \n \n \n \n Liam Johnson
\n \n liam@example.com\n
\n \n \n Sale\n \n \n \n Approved\n \n \n \n 2023-06-27\n \n $550.00 \n \n \n
\n \n \n
\n \n Recent Sales \n \n \n \n
\n \n OM \n \n
\n
\n Olivia Martin\n
\n
\n olivia.martin@email.com\n
\n
\n
+$1,999.00
\n
\n \n
\n \n JL \n \n
\n
\n Jackson Lee\n
\n
\n jackson.lee@email.com\n
\n
\n
+$39.00
\n
\n \n
\n \n IN \n \n
\n
\n Isabella Nguyen\n
\n
\n isabella.nguyen@email.com\n
\n
\n
+$299.00
\n
\n \n
\n \n WK \n \n
\n
\n William Kim\n
\n
\n will@email.com\n
\n
\n
+$99.00
\n
\n \n
\n \n SD \n \n
\n
\n Sofia Davis\n
\n
\n sofia.davis@email.com\n
\n
\n
+$39.00
\n
\n \n \n
\n \n
\n )\n}\n",
+ "type": "registry:block",
+ "target": ""
+ }
+ ]
}
diff --git a/apps/web/public/r/styles/default/dashboard-02.json b/apps/web/public/r/styles/default/dashboard-02.json
index 39bab027..6c6adfb9 100644
--- a/apps/web/public/r/styles/default/dashboard-02.json
+++ b/apps/web/public/r/styles/default/dashboard-02.json
@@ -1,19 +1,19 @@
{
- "name": "dashboard-02",
- "type": "registry:block",
- "registryDependencies": [
- "badge",
- "button",
- "card",
- "dropdown-menu",
- "input"
- ],
- "files": [
- {
- "path": "block/dashboard-02.tsx",
- "content": "import Link from 'next/link'\nimport {\n Bell,\n CircleUser,\n Home,\n LineChart,\n Menu,\n Package,\n Package2,\n Search,\n ShoppingCart,\n Users,\n} from 'lucide-react'\n\nimport { Badge } from '~/registry/default/ui/badge'\nimport { Button } from '~/registry/default/ui/button'\nimport {\n Card,\n CardContent,\n CardDescription,\n CardHeader,\n CardTitle,\n} from '~/registry/default/ui/card'\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuLabel,\n DropdownMenuSeparator,\n DropdownMenuTrigger,\n} from '~/registry/default/ui/dropdown-menu'\nimport { Input } from '~/registry/default/ui/input'\nimport { Sheet, SheetContent, SheetTrigger } from '~/registry/default/ui/sheet'\n\nexport default function Dashboard() {\n return (\n \n
\n
\n
\n
\n
\n
Acme Inc \n \n
\n \n Toggle notifications \n \n
\n
\n
\n \n \n Dashboard\n \n \n \n Orders\n \n 6\n \n \n \n \n Products\n {' '}\n \n \n \n Customers\n \n \n \n Analytics\n \n \n
\n
\n \n \n Upgrade to Pro \n \n Unlock all features and get unlimited access to our support\n team.\n \n \n \n \n Upgrade\n \n \n \n
\n
\n
\n
\n
\n \n \n \n \n Toggle navigation menu \n \n \n \n \n \n \n Acme Inc \n \n \n \n Dashboard\n \n \n \n Orders\n \n 6\n \n \n \n \n Products\n \n \n \n Customers\n \n \n \n Analytics\n \n \n \n \n \n Upgrade to Pro \n \n Unlock all features and get unlimited access to our\n support team.\n \n \n \n \n Upgrade\n \n \n \n
\n \n \n \n \n \n \n \n Toggle user menu \n \n \n \n My Account \n \n Settings \n Support \n \n Logout \n \n \n \n
\n \n
Inventory \n \n \n
\n
\n You have no products\n \n
\n You can start selling as soon as you add a product.\n
\n
Add Product \n
\n
\n \n
\n
\n )\n}\n",
- "type": "registry:block",
- "target": ""
- }
- ]
+ "name": "dashboard-02",
+ "type": "registry:block",
+ "registryDependencies": [
+ "badge",
+ "button",
+ "card",
+ "dropdown-menu",
+ "input"
+ ],
+ "files": [
+ {
+ "path": "block/dashboard-02.tsx",
+ "content": "import Link from 'next/link'\nimport {\n Bell,\n CircleUser,\n Home,\n LineChart,\n Menu,\n Package,\n Package2,\n Search,\n ShoppingCart,\n Users,\n} from 'lucide-react'\n\nimport { Badge } from '~/registry/default/ui/badge'\nimport { Button } from '~/registry/default/ui/button'\nimport {\n Card,\n CardContent,\n CardDescription,\n CardHeader,\n CardTitle,\n} from '~/registry/default/ui/card'\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuLabel,\n DropdownMenuSeparator,\n DropdownMenuTrigger,\n} from '~/registry/default/ui/dropdown-menu'\nimport { Input } from '~/registry/default/ui/input'\nimport { Sheet, SheetContent, SheetTrigger } from '~/registry/default/ui/sheet'\n\nexport default function Dashboard() {\n return (\n \n
\n
\n
\n
\n
\n
Acme Inc \n \n
\n \n Toggle notifications \n \n
\n
\n
\n \n \n Dashboard\n \n \n \n Orders\n \n 6\n \n \n \n \n Products\n {' '}\n \n \n \n Customers\n \n \n \n Analytics\n \n \n
\n
\n \n \n Upgrade to Pro \n \n Unlock all features and get unlimited access to our support\n team.\n \n \n \n \n Upgrade\n \n \n \n
\n
\n
\n
\n
\n \n \n \n \n Toggle navigation menu \n \n \n \n \n \n \n Acme Inc \n \n \n \n Dashboard\n \n \n \n Orders\n \n 6\n \n \n \n \n Products\n \n \n \n Customers\n \n \n \n Analytics\n \n \n \n \n \n Upgrade to Pro \n \n Unlock all features and get unlimited access to our\n support team.\n \n \n \n \n Upgrade\n \n \n \n
\n \n \n \n \n \n \n \n Toggle user menu \n \n \n \n My Account \n \n Settings \n Support \n \n Logout \n \n \n \n
\n \n
Inventory \n \n \n
\n
\n You have no products\n \n
\n You can start selling as soon as you add a product.\n
\n
Add Product \n
\n
\n \n
\n
\n )\n}\n",
+ "type": "registry:block",
+ "target": ""
+ }
+ ]
}
diff --git a/apps/web/public/r/styles/default/dashboard-03.json b/apps/web/public/r/styles/default/dashboard-03.json
index c07b3aac..005d9c2f 100644
--- a/apps/web/public/r/styles/default/dashboard-03.json
+++ b/apps/web/public/r/styles/default/dashboard-03.json
@@ -1,22 +1,22 @@
{
- "name": "dashboard-03",
- "type": "registry:block",
- "registryDependencies": [
- "badge",
- "button",
- "drawer",
- "input",
- "label",
- "select",
- "textarea",
- "tooltip"
- ],
- "files": [
- {
- "path": "block/dashboard-03.tsx",
- "content": "import {\n Bird,\n Book,\n Bot,\n Code2,\n CornerDownLeft,\n LifeBuoy,\n Mic,\n Paperclip,\n Rabbit,\n Settings,\n Settings2,\n Share,\n SquareTerminal,\n SquareUser,\n Triangle,\n Turtle,\n} from 'lucide-react'\n\nimport { Badge } from '~/registry/default/ui/badge'\nimport { Button } from '~/registry/default/ui/button'\nimport {\n Drawer,\n DrawerContent,\n DrawerDescription,\n DrawerHeader,\n DrawerTitle,\n DrawerTrigger,\n} from '~/registry/default/ui/drawer'\nimport { Input } from '~/registry/default/ui/input'\nimport { Label } from '~/registry/default/ui/label'\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from '~/registry/default/ui/select'\nimport { Textarea } from '~/registry/default/ui/textarea'\nimport {\n Tooltip,\n TooltipContent,\n TooltipTrigger,\n} from '~/registry/default/ui/tooltip'\n\nexport default function Dashboard() {\n return (\n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n \n Playground\n \n \n \n \n \n \n \n \n \n Models\n \n \n \n \n \n \n \n \n \n API\n \n \n \n \n \n \n \n \n \n Documentation\n \n \n \n \n \n \n \n \n \n Settings\n \n \n \n \n \n \n \n \n \n \n \n Help\n \n \n \n \n \n \n \n \n \n Account\n \n \n \n \n
\n
\n Playground \n \n \n \n \n Settings \n \n \n \n \n Configuration \n \n Configure the settings for the model and messages.\n \n \n \n \n \n \n \n Share\n \n \n
\n \n
\n \n \n Settings\n \n \n
Model \n
\n \n \n \n \n \n \n
\n
\n
\n Neural\n {' '}\n \n Genesis\n \n
\n
\n Our fastest model for general use cases.\n
\n
\n
\n \n \n \n
\n
\n
\n Neural\n {' '}\n \n Explorer\n \n
\n
\n Performance and speed for efficiency.\n
\n
\n
\n \n \n \n
\n
\n
\n Neural\n {' '}\n \n Quantum\n \n
\n
\n The most powerful model for complex computations.\n
\n
\n
\n \n \n \n
\n \n Temperature \n \n
\n \n \n \n \n Messages\n \n \n Role \n \n \n \n \n \n System \n User \n Assistant \n \n \n
\n \n Content \n \n
\n \n \n
\n \n
\n Output\n \n
\n
\n \n Message\n \n \n \n
\n \n \n \n Attach file \n \n \n Attach File \n \n
\n \n \n \n Use Microphone \n \n \n Use Microphone \n \n
\n Send Message\n \n \n
\n \n
\n \n
\n
\n )\n}\n",
- "type": "registry:block",
- "target": ""
- }
- ]
+ "name": "dashboard-03",
+ "type": "registry:block",
+ "registryDependencies": [
+ "badge",
+ "button",
+ "drawer",
+ "input",
+ "label",
+ "select",
+ "textarea",
+ "tooltip"
+ ],
+ "files": [
+ {
+ "path": "block/dashboard-03.tsx",
+ "content": "import {\n Bird,\n Book,\n Bot,\n Code2,\n CornerDownLeft,\n LifeBuoy,\n Mic,\n Paperclip,\n Rabbit,\n Settings,\n Settings2,\n Share,\n SquareTerminal,\n SquareUser,\n Triangle,\n Turtle,\n} from 'lucide-react'\n\nimport { Badge } from '~/registry/default/ui/badge'\nimport { Button } from '~/registry/default/ui/button'\nimport {\n Drawer,\n DrawerContent,\n DrawerDescription,\n DrawerHeader,\n DrawerTitle,\n DrawerTrigger,\n} from '~/registry/default/ui/drawer'\nimport { Input } from '~/registry/default/ui/input'\nimport { Label } from '~/registry/default/ui/label'\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from '~/registry/default/ui/select'\nimport { Textarea } from '~/registry/default/ui/textarea'\nimport {\n Tooltip,\n TooltipContent,\n TooltipTrigger,\n} from '~/registry/default/ui/tooltip'\n\nexport default function Dashboard() {\n return (\n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n \n Playground\n \n \n \n \n \n \n \n \n \n Models\n \n \n \n \n \n \n \n \n \n API\n \n \n \n \n \n \n \n \n \n Documentation\n \n \n \n \n \n \n \n \n \n Settings\n \n \n \n \n \n \n \n \n \n \n \n Help\n \n \n \n \n \n \n \n \n \n Account\n \n \n \n \n
\n
\n Playground \n \n \n \n \n Settings \n \n \n \n \n Configuration \n \n Configure the settings for the model and messages.\n \n \n \n \n \n Settings\n \n \n
Model \n
\n \n \n \n \n \n \n
\n
\n
\n Neural\n {' '}\n \n Genesis\n \n
\n
\n Our fastest model for general use cases.\n
\n
\n
\n \n \n \n
\n
\n
\n Neural\n {' '}\n \n Explorer\n \n
\n
\n Performance and speed for efficiency.\n
\n
\n
\n \n \n \n
\n
\n
\n Neural\n {' '}\n \n Quantum\n \n
\n
\n The most powerful model for complex\n computations.\n
\n
\n
\n \n \n \n
\n \n Temperature \n \n
\n \n Top P \n \n
\n \n Top K \n \n
\n \n \n \n Messages\n \n \n Role \n \n \n \n \n \n System \n User \n Assistant \n \n \n
\n \n Content \n \n
\n \n \n \n \n \n \n Share\n \n \n
\n \n
\n \n \n Settings\n \n \n
Model \n
\n \n \n \n \n \n \n
\n
\n
\n Neural\n {' '}\n \n Genesis\n \n
\n
\n Our fastest model for general use cases.\n
\n
\n
\n \n \n \n
\n
\n
\n Neural\n {' '}\n \n Explorer\n \n
\n
\n Performance and speed for efficiency.\n
\n
\n
\n \n \n \n
\n
\n
\n Neural\n {' '}\n \n Quantum\n \n
\n
\n The most powerful model for complex computations.\n
\n
\n
\n \n \n \n
\n \n Temperature \n \n
\n \n \n \n \n Messages\n \n \n Role \n \n \n \n \n \n System \n User \n Assistant \n \n \n
\n \n Content \n \n
\n \n \n
\n \n
\n Output\n \n
\n
\n \n Message\n \n \n \n
\n \n \n \n Attach file \n \n \n Attach File \n \n
\n \n \n \n Use Microphone \n \n \n Use Microphone \n \n
\n Send Message\n \n \n
\n \n
\n \n
\n
\n )\n}\n",
+ "type": "registry:block",
+ "target": ""
+ }
+ ]
}
diff --git a/apps/web/public/r/styles/default/dashboard-04.json b/apps/web/public/r/styles/default/dashboard-04.json
index 30edae19..fa6c891a 100644
--- a/apps/web/public/r/styles/default/dashboard-04.json
+++ b/apps/web/public/r/styles/default/dashboard-04.json
@@ -1,18 +1,13 @@
{
- "name": "dashboard-04",
- "type": "registry:block",
- "registryDependencies": [
- "button",
- "card",
- "dropdown-menu",
- "input"
- ],
- "files": [
- {
- "path": "block/dashboard-04.tsx",
- "content": "import Link from 'next/link'\nimport { CircleUser, Menu, Package2, Search } from 'lucide-react'\n\nimport { Button } from '~/registry/default/ui/button'\nimport {\n Card,\n CardContent,\n CardDescription,\n CardFooter,\n CardHeader,\n CardTitle,\n} from '~/registry/default/ui/card'\nimport { Checkbox } from '~/registry/default/ui/checkbox'\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuLabel,\n DropdownMenuSeparator,\n DropdownMenuTrigger,\n} from '~/registry/default/ui/dropdown-menu'\nimport { Input } from '~/registry/default/ui/input'\nimport { Sheet, SheetContent, SheetTrigger } from '~/registry/default/ui/sheet'\n\nexport default function Dashboard() {\n return (\n \n
\n \n \n \n Acme Inc \n \n \n Dashboard\n \n \n Orders\n \n \n Products\n \n \n Customers\n \n \n Settings\n \n \n \n \n \n \n Toggle navigation menu \n \n \n \n \n \n \n Acme Inc \n \n \n Dashboard\n \n \n Orders\n \n \n Products\n \n \n Customers\n \n \n Settings\n \n \n \n \n \n
\n \n \n \n
\n \n
\n \n \n \n Toggle user menu \n \n \n \n My Account \n \n Settings \n Support \n \n Logout \n \n \n
\n \n
\n \n
Settings \n \n \n
\n \n General\n \n Security\n Integrations\n Support\n Organizations\n Advanced\n \n
\n
\n \n
\n )\n}\n",
- "type": "registry:block",
- "target": ""
- }
- ]
+ "name": "dashboard-04",
+ "type": "registry:block",
+ "registryDependencies": ["button", "card", "dropdown-menu", "input"],
+ "files": [
+ {
+ "path": "block/dashboard-04.tsx",
+ "content": "import Link from 'next/link'\nimport { CircleUser, Menu, Package2, Search } from 'lucide-react'\n\nimport { Button } from '~/registry/default/ui/button'\nimport {\n Card,\n CardContent,\n CardDescription,\n CardFooter,\n CardHeader,\n CardTitle,\n} from '~/registry/default/ui/card'\nimport { Checkbox } from '~/registry/default/ui/checkbox'\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuLabel,\n DropdownMenuSeparator,\n DropdownMenuTrigger,\n} from '~/registry/default/ui/dropdown-menu'\nimport { Input } from '~/registry/default/ui/input'\nimport { Sheet, SheetContent, SheetTrigger } from '~/registry/default/ui/sheet'\n\nexport default function Dashboard() {\n return (\n \n
\n \n \n \n Acme Inc \n \n \n Dashboard\n \n \n Orders\n \n \n Products\n \n \n Customers\n \n \n Settings\n \n \n \n \n \n \n Toggle navigation menu \n \n \n \n \n \n \n Acme Inc \n \n \n Dashboard\n \n \n Orders\n \n \n Products\n \n \n Customers\n \n \n Settings\n \n \n \n \n \n
\n \n \n \n
\n \n
\n \n \n \n Toggle user menu \n \n \n \n My Account \n \n Settings \n Support \n \n Logout \n \n \n
\n \n
\n \n
Settings \n \n \n
\n \n General\n \n Security\n Integrations\n Support\n Organizations\n Advanced\n \n
\n
\n \n
\n )\n}\n",
+ "type": "registry:block",
+ "target": ""
+ }
+ ]
}
diff --git a/apps/web/public/r/styles/default/dashboard-05.json b/apps/web/public/r/styles/default/dashboard-05.json
index 9fdbc848..0a6b4a6c 100644
--- a/apps/web/public/r/styles/default/dashboard-05.json
+++ b/apps/web/public/r/styles/default/dashboard-05.json
@@ -1,27 +1,27 @@
{
- "name": "dashboard-05",
- "type": "registry:block",
- "registryDependencies": [
- "badge",
- "breadcrumb",
- "button",
- "card",
- "dropdown-menu",
- "input",
- "pagination",
- "progress",
- "separator",
- "sheet",
- "table",
- "tabs",
- "tooltip"
- ],
- "files": [
- {
- "path": "block/dashboard-05.tsx",
- "content": "import Image from 'next/image'\nimport Link from 'next/link'\nimport {\n ChevronLeft,\n ChevronRight,\n Copy,\n CreditCard,\n File,\n Home,\n LineChart,\n ListFilter,\n MoreVertical,\n Package,\n Package2,\n PanelLeft,\n Search,\n Settings,\n ShoppingCart,\n Truck,\n Users2,\n} from 'lucide-react'\n\nimport { Badge } from '~/registry/default/ui/badge'\nimport {\n Breadcrumb,\n BreadcrumbItem,\n BreadcrumbLink,\n BreadcrumbList,\n BreadcrumbPage,\n BreadcrumbSeparator,\n} from '~/registry/default/ui/breadcrumb'\nimport { Button } from '~/registry/default/ui/button'\nimport {\n Card,\n CardContent,\n CardDescription,\n CardFooter,\n CardHeader,\n CardTitle,\n} from '~/registry/default/ui/card'\nimport {\n DropdownMenu,\n DropdownMenuCheckboxItem,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuLabel,\n DropdownMenuSeparator,\n DropdownMenuTrigger,\n} from '~/registry/default/ui/dropdown-menu'\nimport { Input } from '~/registry/default/ui/input'\nimport {\n Pagination,\n PaginationContent,\n PaginationItem,\n} from '~/registry/default/ui/pagination'\nimport { Progress } from '~/registry/default/ui/progress'\nimport { Separator } from '~/registry/default/ui/separator'\nimport { Sheet, SheetContent, SheetTrigger } from '~/registry/default/ui/sheet'\nimport {\n Table,\n TableBody,\n TableCell,\n TableHead,\n TableHeader,\n TableRow,\n} from '~/registry/default/ui/table'\nimport {\n Tabs,\n TabsContent,\n TabsList,\n TabsTrigger,\n} from '~/registry/default/ui/tabs'\nimport {\n Tooltip,\n TooltipContent,\n TooltipTrigger,\n} from '~/registry/default/ui/tooltip'\n\nexport default function Dashboard() {\n return (\n \n
\n \n \n \n Acme Inc \n \n \n \n \n \n Dashboard \n \n \n Dashboard \n \n \n \n \n \n Orders \n \n \n Orders \n \n \n \n \n \n Products \n \n \n Products \n \n \n \n \n \n Customers \n \n \n Customers \n \n \n \n \n \n Analytics \n \n \n Analytics \n \n \n \n \n \n \n \n Settings \n \n \n Settings \n \n \n \n
\n
\n
\n \n
\n
\n \n Your Orders \n \n Introducing Our Dynamic Orders Dashboard for Seamless\n Management and Insightful Analysis.\n \n \n \n Create New Order \n \n \n
\n \n This Week \n $1,329 \n \n \n \n +25% from last week\n
\n \n \n \n \n \n
\n \n This Month \n $5,329 \n \n \n \n +10% from last month\n
\n \n \n \n \n \n
\n
\n \n
\n Week \n Month \n Year \n \n
\n \n \n \n \n Filter \n \n \n \n Filter by \n \n \n Fulfilled\n \n \n Declined\n \n \n Refunded\n \n \n \n \n \n Export \n \n
\n
\n \n \n \n Orders \n \n Recent orders from your store.\n \n \n \n \n \n \n Customer \n \n Type\n \n \n Status\n \n \n Date\n \n Amount \n \n \n \n \n \n Liam Johnson
\n \n liam@example.com\n
\n \n \n Sale\n \n \n \n Fulfilled\n \n \n \n 2023-06-23\n \n $250.00 \n \n \n \n Olivia Smith
\n \n olivia@example.com\n
\n \n \n Refund\n \n \n \n Declined\n \n \n \n 2023-06-24\n \n $150.00 \n \n \n \n Noah Williams
\n \n noah@example.com\n
\n \n \n Subscription\n \n \n \n Fulfilled\n \n \n \n 2023-06-25\n \n $350.00 \n \n \n \n Emma Brown
\n \n emma@example.com\n
\n \n \n Sale\n \n \n \n Fulfilled\n \n \n \n 2023-06-26\n \n $450.00 \n \n \n \n Liam Johnson
\n \n liam@example.com\n
\n \n \n Sale\n \n \n \n Fulfilled\n \n \n \n 2023-06-23\n \n $250.00 \n \n \n \n Liam Johnson
\n \n liam@example.com\n
\n \n \n Sale\n \n \n \n Fulfilled\n \n \n \n 2023-06-23\n \n $250.00 \n \n \n \n Olivia Smith
\n \n olivia@example.com\n
\n \n \n Refund\n \n \n \n Declined\n \n \n \n 2023-06-24\n \n $150.00 \n \n \n \n Emma Brown
\n \n emma@example.com\n
\n \n \n Sale\n \n \n \n Fulfilled\n \n \n \n 2023-06-26\n \n $450.00 \n \n \n
\n \n \n \n \n
\n \n
\n \n \n \n Order Oe31b70H\n \n \n Copy Order ID \n \n \n Date: November 23, 2023 \n
\n \n \n \n \n Track Order\n \n \n \n \n \n \n More \n \n \n \n Edit \n Export \n \n Trash \n \n \n
\n \n \n \n
Order Details
\n
\n \n \n Glimmer Lamps x\n {' '}\n 2 \n \n $250.00 \n \n \n \n Aqua Filters x\n {' '}\n 1 \n \n $49.00 \n \n \n
\n
\n \n Subtotal \n $299.00 \n \n \n Shipping \n $5.00 \n \n \n Tax \n $25.00 \n \n \n Total \n $329.00 \n \n \n
\n \n \n
\n
Shipping Information
\n
\n Liam Johnson \n 1234 Main St. \n Anytown, CA 12345 \n \n
\n
\n
Billing Information
\n
\n Same as shipping address\n
\n
\n
\n \n \n
Customer Information
\n
\n \n
Customer \n Liam Johnson \n \n \n \n \n
\n \n \n
Payment Information
\n
\n \n
\n \n Visa\n \n **** **** **** 4532 \n \n \n
\n \n \n \n Updated\n {' '}\n November 23, 2023 \n
\n \n \n \n \n \n Previous Order \n \n \n \n \n \n Next Order \n \n \n \n \n \n \n
\n \n
\n
\n )\n}\n",
- "type": "registry:block",
- "target": ""
- }
- ]
+ "name": "dashboard-05",
+ "type": "registry:block",
+ "registryDependencies": [
+ "badge",
+ "breadcrumb",
+ "button",
+ "card",
+ "dropdown-menu",
+ "input",
+ "pagination",
+ "progress",
+ "separator",
+ "sheet",
+ "table",
+ "tabs",
+ "tooltip"
+ ],
+ "files": [
+ {
+ "path": "block/dashboard-05.tsx",
+ "content": "import Image from 'next/image'\nimport Link from 'next/link'\nimport {\n ChevronLeft,\n ChevronRight,\n Copy,\n CreditCard,\n File,\n Home,\n LineChart,\n ListFilter,\n MoreVertical,\n Package,\n Package2,\n PanelLeft,\n Search,\n Settings,\n ShoppingCart,\n Truck,\n Users2,\n} from 'lucide-react'\n\nimport { Badge } from '~/registry/default/ui/badge'\nimport {\n Breadcrumb,\n BreadcrumbItem,\n BreadcrumbLink,\n BreadcrumbList,\n BreadcrumbPage,\n BreadcrumbSeparator,\n} from '~/registry/default/ui/breadcrumb'\nimport { Button } from '~/registry/default/ui/button'\nimport {\n Card,\n CardContent,\n CardDescription,\n CardFooter,\n CardHeader,\n CardTitle,\n} from '~/registry/default/ui/card'\nimport {\n DropdownMenu,\n DropdownMenuCheckboxItem,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuLabel,\n DropdownMenuSeparator,\n DropdownMenuTrigger,\n} from '~/registry/default/ui/dropdown-menu'\nimport { Input } from '~/registry/default/ui/input'\nimport {\n Pagination,\n PaginationContent,\n PaginationItem,\n} from '~/registry/default/ui/pagination'\nimport { Progress } from '~/registry/default/ui/progress'\nimport { Separator } from '~/registry/default/ui/separator'\nimport { Sheet, SheetContent, SheetTrigger } from '~/registry/default/ui/sheet'\nimport {\n Table,\n TableBody,\n TableCell,\n TableHead,\n TableHeader,\n TableRow,\n} from '~/registry/default/ui/table'\nimport {\n Tabs,\n TabsContent,\n TabsList,\n TabsTrigger,\n} from '~/registry/default/ui/tabs'\nimport {\n Tooltip,\n TooltipContent,\n TooltipTrigger,\n} from '~/registry/default/ui/tooltip'\n\nexport default function Dashboard() {\n return (\n \n
\n \n \n \n Acme Inc \n \n \n \n \n \n Dashboard \n \n \n Dashboard \n \n \n \n \n \n Orders \n \n \n Orders \n \n \n \n \n \n Products \n \n \n Products \n \n \n \n \n \n Customers \n \n \n Customers \n \n \n \n \n \n Analytics \n \n \n Analytics \n \n \n \n \n \n \n \n Settings \n \n \n Settings \n \n \n \n
\n
\n
\n \n
\n
\n \n Your Orders \n \n Introducing Our Dynamic Orders Dashboard for Seamless\n Management and Insightful Analysis.\n \n \n \n Create New Order \n \n \n
\n \n This Week \n $1,329 \n \n \n \n +25% from last week\n
\n \n \n \n \n \n
\n \n This Month \n $5,329 \n \n \n \n +10% from last month\n
\n \n \n \n \n \n
\n
\n \n
\n Week \n Month \n Year \n \n
\n \n \n \n \n Filter \n \n \n \n Filter by \n \n \n Fulfilled\n \n \n Declined\n \n \n Refunded\n \n \n \n \n \n Export \n \n
\n
\n \n \n \n Orders \n \n Recent orders from your store.\n \n \n \n \n \n \n Customer \n \n Type\n \n \n Status\n \n \n Date\n \n Amount \n \n \n \n \n \n Liam Johnson
\n \n liam@example.com\n
\n \n \n Sale\n \n \n \n Fulfilled\n \n \n \n 2023-06-23\n \n $250.00 \n \n \n \n Olivia Smith
\n \n olivia@example.com\n
\n \n \n Refund\n \n \n \n Declined\n \n \n \n 2023-06-24\n \n $150.00 \n \n \n \n Noah Williams
\n \n noah@example.com\n
\n \n \n Subscription\n \n \n \n Fulfilled\n \n \n \n 2023-06-25\n \n $350.00 \n \n \n \n Emma Brown
\n \n emma@example.com\n
\n \n \n Sale\n \n \n \n Fulfilled\n \n \n \n 2023-06-26\n \n $450.00 \n \n \n \n Liam Johnson
\n \n liam@example.com\n
\n \n \n Sale\n \n \n \n Fulfilled\n \n \n \n 2023-06-23\n \n $250.00 \n \n \n \n Liam Johnson
\n \n liam@example.com\n
\n \n \n Sale\n \n \n \n Fulfilled\n \n \n \n 2023-06-23\n \n $250.00 \n \n \n \n Olivia Smith
\n \n olivia@example.com\n
\n \n \n Refund\n \n \n \n Declined\n \n \n \n 2023-06-24\n \n $150.00 \n \n \n \n Emma Brown
\n \n emma@example.com\n
\n \n \n Sale\n \n \n \n Fulfilled\n \n \n \n 2023-06-26\n \n $450.00 \n \n \n
\n \n \n \n \n
\n \n
\n \n \n \n Order Oe31b70H\n \n \n Copy Order ID \n \n \n Date: November 23, 2023 \n
\n \n \n \n \n Track Order\n \n \n \n \n \n \n More \n \n \n \n Edit \n Export \n \n Trash \n \n \n
\n \n \n \n
Order Details
\n
\n \n \n Glimmer Lamps x\n {' '}\n 2 \n \n $250.00 \n \n \n \n Aqua Filters x\n {' '}\n 1 \n \n $49.00 \n \n \n
\n
\n \n Subtotal \n $299.00 \n \n \n Shipping \n $5.00 \n \n \n Tax \n $25.00 \n \n \n Total \n $329.00 \n \n \n
\n \n \n
\n
Shipping Information
\n
\n Liam Johnson \n 1234 Main St. \n Anytown, CA 12345 \n \n
\n
\n
Billing Information
\n
\n Same as shipping address\n
\n
\n
\n \n \n
Customer Information
\n
\n \n
Customer \n Liam Johnson \n \n \n \n \n
\n \n \n
Payment Information
\n
\n \n
\n \n Visa\n \n **** **** **** 4532 \n \n \n
\n \n \n \n Updated\n {' '}\n November 23, 2023 \n
\n \n \n \n \n \n Previous Order \n \n \n \n \n \n Next Order \n \n \n \n \n \n \n
\n \n
\n
\n )\n}\n",
+ "type": "registry:block",
+ "target": ""
+ }
+ ]
}
diff --git a/apps/web/public/r/styles/default/dashboard-06.json b/apps/web/public/r/styles/default/dashboard-06.json
index 61e86929..b627d4bc 100644
--- a/apps/web/public/r/styles/default/dashboard-06.json
+++ b/apps/web/public/r/styles/default/dashboard-06.json
@@ -1,24 +1,24 @@
{
- "name": "dashboard-06",
- "type": "registry:block",
- "registryDependencies": [
- "badge",
- "breadcrumb",
- "button",
- "card",
- "dropdown-menu",
- "input",
- "sheet",
- "table",
- "tabs",
- "tooltip"
- ],
- "files": [
- {
- "path": "block/dashboard-06.tsx",
- "content": "import Image from 'next/image'\nimport Link from 'next/link'\nimport {\n File,\n Home,\n LineChart,\n ListFilter,\n MoreHorizontal,\n Package,\n Package2,\n PanelLeft,\n PlusCircle,\n Search,\n Settings,\n ShoppingCart,\n Users2,\n} from 'lucide-react'\n\nimport { Badge } from '~/registry/default/ui/badge'\nimport {\n Breadcrumb,\n BreadcrumbItem,\n BreadcrumbLink,\n BreadcrumbList,\n BreadcrumbPage,\n BreadcrumbSeparator,\n} from '~/registry/default/ui/breadcrumb'\nimport { Button } from '~/registry/default/ui/button'\nimport {\n Card,\n CardContent,\n CardDescription,\n CardFooter,\n CardHeader,\n CardTitle,\n} from '~/registry/default/ui/card'\nimport {\n DropdownMenu,\n DropdownMenuCheckboxItem,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuLabel,\n DropdownMenuSeparator,\n DropdownMenuTrigger,\n} from '~/registry/default/ui/dropdown-menu'\nimport { Input } from '~/registry/default/ui/input'\nimport { Sheet, SheetContent, SheetTrigger } from '~/registry/default/ui/sheet'\nimport {\n Table,\n TableBody,\n TableCell,\n TableHead,\n TableHeader,\n TableRow,\n} from '~/registry/default/ui/table'\nimport {\n Tabs,\n TabsContent,\n TabsList,\n TabsTrigger,\n} from '~/registry/default/ui/tabs'\nimport {\n Tooltip,\n TooltipContent,\n TooltipTrigger,\n} from '~/registry/default/ui/tooltip'\n\nexport default function Dashboard() {\n return (\n \n
\n \n \n \n Acme Inc \n \n \n \n \n \n Dashboard \n \n \n Dashboard \n \n \n \n \n \n Orders \n \n \n Orders \n \n \n \n \n \n Products \n \n \n Products \n \n \n \n \n \n Customers \n \n \n Customers \n \n \n \n \n \n Analytics \n \n \n Analytics \n \n \n \n \n \n \n \n Settings \n \n \n Settings \n \n \n \n
\n
\n
\n \n \n
\n All \n Active \n Draft \n \n Archived\n \n \n
\n
\n \n \n \n \n Filter\n \n \n \n \n Filter by \n \n \n Active\n \n Draft \n \n Archived\n \n \n \n
\n \n \n Export\n \n \n
\n \n \n Add Product\n \n \n
\n
\n \n \n \n Products \n \n Manage your products and view their sales performance.\n \n \n \n \n \n \n \n Image \n \n Name \n Status \n \n Price\n \n \n Total Sales\n \n \n Created at\n \n \n Actions \n \n \n \n \n \n \n \n \n \n Laser Lemonade Machine\n \n \n Draft \n \n \n $499.99\n \n \n 25\n \n \n 2023-07-12 10:42 AM\n \n \n \n \n \n \n Toggle menu \n \n \n \n Actions \n Edit \n Delete \n \n \n \n \n \n \n \n \n \n Hypernova Headphones\n \n \n Active \n \n \n $129.99\n \n \n 100\n \n \n 2023-10-18 03:21 PM\n \n \n \n \n \n \n Toggle menu \n \n \n \n Actions \n Edit \n Delete \n \n \n \n \n \n \n \n \n \n AeroGlow Desk Lamp\n \n \n Active \n \n \n $39.99\n \n \n 50\n \n \n 2023-11-29 08:15 AM\n \n \n \n \n \n \n Toggle menu \n \n \n \n Actions \n Edit \n Delete \n \n \n \n \n \n \n \n \n \n TechTonic Energy Drink\n \n \n Draft \n \n \n $2.99\n \n \n 0\n \n \n 2023-12-25 11:59 PM\n \n \n \n \n \n \n Toggle menu \n \n \n \n Actions \n Edit \n Delete \n \n \n \n \n \n \n \n \n \n Gamer Gear Pro Controller\n \n \n Active \n \n \n $59.99\n \n \n 75\n \n \n 2024-01-01 12:00 AM\n \n \n \n \n \n \n Toggle menu \n \n \n \n Actions \n Edit \n Delete \n \n \n \n \n \n \n \n \n \n Luminous VR Headset\n \n \n Active \n \n \n $199.99\n \n \n 30\n \n \n 2024-02-14 02:14 PM\n \n \n \n \n \n \n Toggle menu \n \n \n \n Actions \n Edit \n Delete \n \n \n \n \n \n
\n \n \n \n Showing\n {' '}\n 1-10 \n {' '}\n of\n 32 \n {' '}\n products\n
\n \n \n \n \n \n
\n
\n )\n}\n",
- "type": "registry:block",
- "target": ""
- }
- ]
+ "name": "dashboard-06",
+ "type": "registry:block",
+ "registryDependencies": [
+ "badge",
+ "breadcrumb",
+ "button",
+ "card",
+ "dropdown-menu",
+ "input",
+ "sheet",
+ "table",
+ "tabs",
+ "tooltip"
+ ],
+ "files": [
+ {
+ "path": "block/dashboard-06.tsx",
+ "content": "import Image from 'next/image'\nimport Link from 'next/link'\nimport {\n File,\n Home,\n LineChart,\n ListFilter,\n MoreHorizontal,\n Package,\n Package2,\n PanelLeft,\n PlusCircle,\n Search,\n Settings,\n ShoppingCart,\n Users2,\n} from 'lucide-react'\n\nimport { Badge } from '~/registry/default/ui/badge'\nimport {\n Breadcrumb,\n BreadcrumbItem,\n BreadcrumbLink,\n BreadcrumbList,\n BreadcrumbPage,\n BreadcrumbSeparator,\n} from '~/registry/default/ui/breadcrumb'\nimport { Button } from '~/registry/default/ui/button'\nimport {\n Card,\n CardContent,\n CardDescription,\n CardFooter,\n CardHeader,\n CardTitle,\n} from '~/registry/default/ui/card'\nimport {\n DropdownMenu,\n DropdownMenuCheckboxItem,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuLabel,\n DropdownMenuSeparator,\n DropdownMenuTrigger,\n} from '~/registry/default/ui/dropdown-menu'\nimport { Input } from '~/registry/default/ui/input'\nimport { Sheet, SheetContent, SheetTrigger } from '~/registry/default/ui/sheet'\nimport {\n Table,\n TableBody,\n TableCell,\n TableHead,\n TableHeader,\n TableRow,\n} from '~/registry/default/ui/table'\nimport {\n Tabs,\n TabsContent,\n TabsList,\n TabsTrigger,\n} from '~/registry/default/ui/tabs'\nimport {\n Tooltip,\n TooltipContent,\n TooltipTrigger,\n} from '~/registry/default/ui/tooltip'\n\nexport default function Dashboard() {\n return (\n \n
\n \n \n \n Acme Inc \n \n \n \n \n \n Dashboard \n \n \n Dashboard \n \n \n \n \n \n Orders \n \n \n Orders \n \n \n \n \n \n Products \n \n \n Products \n \n \n \n \n \n Customers \n \n \n Customers \n \n \n \n \n \n Analytics \n \n \n Analytics \n \n \n \n \n \n \n \n Settings \n \n \n Settings \n \n \n \n
\n
\n
\n \n \n
\n All \n Active \n Draft \n \n Archived\n \n \n
\n
\n \n \n \n \n Filter\n \n \n \n \n Filter by \n \n \n Active\n \n Draft \n \n Archived\n \n \n \n
\n \n \n Export\n \n \n
\n \n \n Add Product\n \n \n
\n
\n \n \n \n Products \n \n Manage your products and view their sales performance.\n \n \n \n \n \n \n \n Image \n \n Name \n Status \n \n Price\n \n \n Total Sales\n \n \n Created at\n \n \n Actions \n \n \n \n \n \n \n \n \n \n Laser Lemonade Machine\n \n \n Draft \n \n \n $499.99\n \n \n 25\n \n \n 2023-07-12 10:42 AM\n \n \n \n \n \n \n Toggle menu \n \n \n \n Actions \n Edit \n Delete \n \n \n \n \n \n \n \n \n \n Hypernova Headphones\n \n \n Active \n \n \n $129.99\n \n \n 100\n \n \n 2023-10-18 03:21 PM\n \n \n \n \n \n \n Toggle menu \n \n \n \n Actions \n Edit \n Delete \n \n \n \n \n \n \n \n \n \n AeroGlow Desk Lamp\n \n \n Active \n \n \n $39.99\n \n \n 50\n \n \n 2023-11-29 08:15 AM\n \n \n \n \n \n \n Toggle menu \n \n \n \n Actions \n Edit \n Delete \n \n \n \n \n \n \n \n \n \n TechTonic Energy Drink\n \n \n Draft \n \n \n $2.99\n \n \n 0\n \n \n 2023-12-25 11:59 PM\n \n \n \n \n \n \n Toggle menu \n \n \n \n Actions \n Edit \n Delete \n \n \n \n \n \n \n \n \n \n Gamer Gear Pro Controller\n \n \n Active \n \n \n $59.99\n \n \n 75\n \n \n 2024-01-01 12:00 AM\n \n \n \n \n \n \n Toggle menu \n \n \n \n Actions \n Edit \n Delete \n \n \n \n \n \n \n \n \n \n Luminous VR Headset\n \n \n Active \n \n \n $199.99\n \n \n 30\n \n \n 2024-02-14 02:14 PM\n \n \n \n \n \n \n Toggle menu \n \n \n \n Actions \n Edit \n Delete \n \n \n \n \n \n
\n \n \n \n Showing\n {' '}\n 1-10 \n {' '}\n of\n 32 \n {' '}\n products\n
\n \n \n \n \n \n
\n
\n )\n}\n",
+ "type": "registry:block",
+ "target": ""
+ }
+ ]
}
diff --git a/apps/web/public/r/styles/default/dashboard-07.json b/apps/web/public/r/styles/default/dashboard-07.json
index 917d6718..bfc6ef71 100644
--- a/apps/web/public/r/styles/default/dashboard-07.json
+++ b/apps/web/public/r/styles/default/dashboard-07.json
@@ -1,27 +1,27 @@
{
- "name": "dashboard-07",
- "type": "registry:block",
- "registryDependencies": [
- "badge",
- "breadcrumb",
- "button",
- "card",
- "dropdown-menu",
- "input",
- "pagination",
- "progress",
- "separator",
- "sheet",
- "table",
- "tabs",
- "tooltip"
- ],
- "files": [
- {
- "path": "block/dashboard-07.tsx",
- "content": "import Image from 'next/image'\nimport Link from 'next/link'\nimport {\n ChevronLeft,\n Home,\n LineChart,\n Package,\n Package2,\n PanelLeft,\n PlusCircle,\n Search,\n Settings,\n ShoppingCart,\n Upload,\n Users2,\n} from 'lucide-react'\n\nimport { Badge } from '~/registry/default/ui/badge'\nimport {\n Breadcrumb,\n BreadcrumbItem,\n BreadcrumbLink,\n BreadcrumbList,\n BreadcrumbPage,\n BreadcrumbSeparator,\n} from '~/registry/default/ui/breadcrumb'\nimport { Button } from '~/registry/default/ui/button'\nimport {\n Card,\n CardContent,\n CardDescription,\n CardFooter,\n CardHeader,\n CardTitle,\n} from '~/registry/default/ui/card'\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuLabel,\n DropdownMenuSeparator,\n DropdownMenuTrigger,\n} from '~/registry/default/ui/dropdown-menu'\nimport { Input } from '~/registry/default/ui/input'\nimport { Label } from '~/registry/default/ui/label'\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from '~/registry/default/ui/select'\nimport { Sheet, SheetContent, SheetTrigger } from '~/registry/default/ui/sheet'\nimport {\n Table,\n TableBody,\n TableCell,\n TableHead,\n TableHeader,\n TableRow,\n} from '~/registry/default/ui/table'\nimport { Textarea } from '~/registry/default/ui/textarea'\nimport {\n ToggleGroup,\n ToggleGroupItem,\n} from '~/registry/default/ui/toggle-group'\nimport {\n Tooltip,\n TooltipContent,\n TooltipTrigger,\n} from '~/registry/default/ui/tooltip'\n\nexport default function Dashboard() {\n return (\n \n
\n \n \n \n Acme Inc \n \n \n \n \n \n Dashboard \n \n \n Dashboard \n \n \n \n \n \n Orders \n \n \n Orders \n \n \n \n \n \n Products \n \n \n Products \n \n \n \n \n \n Customers \n \n \n Customers \n \n \n \n \n \n Analytics \n \n \n Analytics \n \n \n \n \n \n \n \n Settings \n \n \n Settings \n \n \n \n
\n
\n
\n \n
\n
\n \n Back \n \n
\n Pro Controller\n \n
\n In stock\n \n
\n \n Discard\n \n Save Product \n
\n
\n
\n
\n
\n \n Product Details \n \n Lipsum dolor sit amet, consectetur adipiscing elit\n \n \n \n \n
\n Name \n \n
\n
\n Description \n \n
\n
\n \n \n
\n \n Stock \n \n Lipsum dolor sit amet, consectetur adipiscing elit\n \n \n \n \n \n \n \n \n Add Variant\n \n \n \n
\n \n Product Category \n \n \n \n
\n Category \n \n \n \n \n \n Clothing \n \n Electronics\n \n \n Accessories\n \n \n \n
\n
\n \n Subcategory (optional)\n \n \n \n \n \n \n T-Shirts \n Hoodies \n \n Sweatshirts\n \n \n \n
\n
\n \n \n
\n
\n
\n \n Product Status \n \n \n \n
\n Status \n \n \n \n \n \n Draft \n Active \n Archived \n \n \n
\n
\n \n \n
\n \n Product Images \n \n Lipsum dolor sit amet, consectetur adipiscing elit\n \n \n \n \n
\n
\n \n \n \n \n \n \n \n \n Upload \n \n
\n
\n \n \n
\n \n Archive Product \n \n Lipsum dolor sit amet, consectetur adipiscing elit.\n \n \n \n
\n \n Archive Product\n \n \n \n
\n
\n
\n \n Discard\n \n Save Product \n
\n
\n \n
\n
\n )\n}\n",
- "type": "registry:block",
- "target": ""
- }
- ]
+ "name": "dashboard-07",
+ "type": "registry:block",
+ "registryDependencies": [
+ "badge",
+ "breadcrumb",
+ "button",
+ "card",
+ "dropdown-menu",
+ "input",
+ "pagination",
+ "progress",
+ "separator",
+ "sheet",
+ "table",
+ "tabs",
+ "tooltip"
+ ],
+ "files": [
+ {
+ "path": "block/dashboard-07.tsx",
+ "content": "import Image from 'next/image'\nimport Link from 'next/link'\nimport {\n ChevronLeft,\n Home,\n LineChart,\n Package,\n Package2,\n PanelLeft,\n PlusCircle,\n Search,\n Settings,\n ShoppingCart,\n Upload,\n Users2,\n} from 'lucide-react'\n\nimport { Badge } from '~/registry/default/ui/badge'\nimport {\n Breadcrumb,\n BreadcrumbItem,\n BreadcrumbLink,\n BreadcrumbList,\n BreadcrumbPage,\n BreadcrumbSeparator,\n} from '~/registry/default/ui/breadcrumb'\nimport { Button } from '~/registry/default/ui/button'\nimport {\n Card,\n CardContent,\n CardDescription,\n CardFooter,\n CardHeader,\n CardTitle,\n} from '~/registry/default/ui/card'\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuLabel,\n DropdownMenuSeparator,\n DropdownMenuTrigger,\n} from '~/registry/default/ui/dropdown-menu'\nimport { Input } from '~/registry/default/ui/input'\nimport { Label } from '~/registry/default/ui/label'\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from '~/registry/default/ui/select'\nimport { Sheet, SheetContent, SheetTrigger } from '~/registry/default/ui/sheet'\nimport {\n Table,\n TableBody,\n TableCell,\n TableHead,\n TableHeader,\n TableRow,\n} from '~/registry/default/ui/table'\nimport { Textarea } from '~/registry/default/ui/textarea'\nimport {\n ToggleGroup,\n ToggleGroupItem,\n} from '~/registry/default/ui/toggle-group'\nimport {\n Tooltip,\n TooltipContent,\n TooltipTrigger,\n} from '~/registry/default/ui/tooltip'\n\nexport default function Dashboard() {\n return (\n \n
\n \n \n \n Acme Inc \n \n \n \n \n \n Dashboard \n \n \n Dashboard \n \n \n \n \n \n Orders \n \n \n Orders \n \n \n \n \n \n Products \n \n \n Products \n \n \n \n \n \n Customers \n \n \n Customers \n \n \n \n \n \n Analytics \n \n \n Analytics \n \n \n \n \n \n \n \n Settings \n \n \n Settings \n \n \n \n
\n
\n
\n \n
\n
\n \n Back \n \n
\n Pro Controller\n \n
\n In stock\n \n
\n \n Discard\n \n Save Product \n
\n
\n
\n
\n
\n \n Product Details \n \n Lipsum dolor sit amet, consectetur adipiscing elit\n \n \n \n \n
\n Name \n \n
\n
\n Description \n \n
\n
\n \n \n
\n \n Stock \n \n Lipsum dolor sit amet, consectetur adipiscing elit\n \n \n \n \n \n \n \n \n Add Variant\n \n \n \n
\n \n Product Category \n \n \n \n
\n Category \n \n \n \n \n \n Clothing \n \n Electronics\n \n \n Accessories\n \n \n \n
\n
\n \n Subcategory (optional)\n \n \n \n \n \n \n T-Shirts \n Hoodies \n \n Sweatshirts\n \n \n \n
\n
\n \n \n
\n
\n
\n \n Product Status \n \n \n \n
\n Status \n \n \n \n \n \n Draft \n Active \n Archived \n \n \n
\n
\n \n \n
\n \n Product Images \n \n Lipsum dolor sit amet, consectetur adipiscing elit\n \n \n \n \n
\n
\n \n \n \n \n \n \n \n \n Upload \n \n
\n
\n \n \n
\n \n Archive Product \n \n Lipsum dolor sit amet, consectetur adipiscing elit.\n \n \n \n
\n \n Archive Product\n \n \n \n
\n
\n
\n \n Discard\n \n Save Product \n
\n
\n \n
\n
\n )\n}\n",
+ "type": "registry:block",
+ "target": ""
+ }
+ ]
}
diff --git a/apps/web/public/r/styles/default/demo-sidebar-controlled.json b/apps/web/public/r/styles/default/demo-sidebar-controlled.json
index b14ae9c8..0f21a4e5 100644
--- a/apps/web/public/r/styles/default/demo-sidebar-controlled.json
+++ b/apps/web/public/r/styles/default/demo-sidebar-controlled.json
@@ -1,12 +1,12 @@
{
- "name": "demo-sidebar-controlled",
- "type": "registry:block",
- "description": "",
- "files": [
- {
- "path": "block/demo-sidebar-controlled.tsx",
- "content": "'use client'\n\nimport * as React from 'react'\nimport {\n Frame,\n LifeBuoy,\n Map,\n PanelLeftClose,\n PanelLeftOpen,\n PieChart,\n Send,\n} from 'lucide-react'\n\nimport { Button } from '~/registry/default/ui/button'\nimport {\n Sidebar,\n SidebarContent,\n SidebarGroup,\n SidebarGroupContent,\n SidebarGroupLabel,\n SidebarInset,\n SidebarMenu,\n SidebarMenuButton,\n SidebarMenuItem,\n SidebarProvider,\n} from '~/registry/default/ui/sidebar'\n\nconst projects = [\n {\n name: 'Design Engineering',\n url: '#',\n icon: Frame,\n },\n {\n name: 'Sales & Marketing',\n url: '#',\n icon: PieChart,\n },\n {\n name: 'Travel',\n url: '#',\n icon: Map,\n },\n {\n name: 'Support',\n url: '#',\n icon: LifeBuoy,\n },\n {\n name: 'Feedback',\n url: '#',\n icon: Send,\n },\n]\n\nexport default function AppSidebar() {\n const [open, setOpen] = React.useState(true)\n\n return (\n \n \n \n \n Projects \n \n \n {projects.map(project => (\n \n \n \n \n {project.name} \n \n \n \n ))}\n \n \n \n \n \n \n \n setOpen(open => !open)}\n size=\"sm\"\n variant=\"ghost\"\n >\n {open ? : }\n \n {open ? 'Open' : 'Close'}\n {' '}\n Sidebar\n \n \n \n \n \n )\n}\n",
- "type": "registry:component"
- }
- ]
+ "name": "demo-sidebar-controlled",
+ "type": "registry:block",
+ "description": "",
+ "files": [
+ {
+ "path": "block/demo-sidebar-controlled.tsx",
+ "content": "'use client'\n\nimport * as React from 'react'\nimport {\n Frame,\n LifeBuoy,\n Map,\n PanelLeftClose,\n PanelLeftOpen,\n PieChart,\n Send,\n} from 'lucide-react'\n\nimport { Button } from '~/registry/default/ui/button'\nimport {\n Sidebar,\n SidebarContent,\n SidebarGroup,\n SidebarGroupContent,\n SidebarGroupLabel,\n SidebarInset,\n SidebarMenu,\n SidebarMenuButton,\n SidebarMenuItem,\n SidebarProvider,\n} from '~/registry/default/ui/sidebar'\n\nconst projects = [\n {\n name: 'Design Engineering',\n url: '#',\n icon: Frame,\n },\n {\n name: 'Sales & Marketing',\n url: '#',\n icon: PieChart,\n },\n {\n name: 'Travel',\n url: '#',\n icon: Map,\n },\n {\n name: 'Support',\n url: '#',\n icon: LifeBuoy,\n },\n {\n name: 'Feedback',\n url: '#',\n icon: Send,\n },\n]\n\nexport default function AppSidebar() {\n const [open, setOpen] = React.useState(true)\n\n return (\n \n \n \n \n Projects \n \n \n {projects.map(project => (\n \n \n \n \n {project.name} \n \n \n \n ))}\n \n \n \n \n \n \n \n setOpen(open => !open)}\n size=\"sm\"\n variant=\"ghost\"\n >\n {open ? : }\n \n {open ? 'Open' : 'Close'}\n {' '}\n Sidebar\n \n \n \n \n \n )\n}\n",
+ "type": "registry:component"
+ }
+ ]
}
diff --git a/apps/web/public/r/styles/default/demo-sidebar-footer.json b/apps/web/public/r/styles/default/demo-sidebar-footer.json
index 47eb5362..20cdaf24 100644
--- a/apps/web/public/r/styles/default/demo-sidebar-footer.json
+++ b/apps/web/public/r/styles/default/demo-sidebar-footer.json
@@ -1,12 +1,12 @@
{
- "name": "demo-sidebar-footer",
- "type": "registry:block",
- "description": "",
- "files": [
- {
- "path": "block/demo-sidebar-footer.tsx",
- "content": "'use client'\n\nimport { ChevronDown, ChevronUp, User2 } from 'lucide-react'\n\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuTrigger,\n} from '~/registry/default/ui/dropdown-menu'\nimport {\n Sidebar,\n SidebarContent,\n SidebarFooter,\n SidebarHeader,\n SidebarInset,\n SidebarMenu,\n SidebarMenuButton,\n SidebarMenuItem,\n SidebarProvider,\n SidebarTrigger,\n} from '~/registry/default/ui/sidebar'\n\nexport default function AppSidebar() {\n return (\n \n \n \n \n \n \n \n \n \n \n Username\n \n \n \n \n \n Account \n \n \n Billing \n \n \n Sign out \n \n \n \n \n \n \n \n \n \n \n \n )\n}\n",
- "type": "registry:component"
- }
- ]
+ "name": "demo-sidebar-footer",
+ "type": "registry:block",
+ "description": "",
+ "files": [
+ {
+ "path": "block/demo-sidebar-footer.tsx",
+ "content": "'use client'\n\nimport { ChevronDown, ChevronUp, User2 } from 'lucide-react'\n\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuTrigger,\n} from '~/registry/default/ui/dropdown-menu'\nimport {\n Sidebar,\n SidebarContent,\n SidebarFooter,\n SidebarHeader,\n SidebarInset,\n SidebarMenu,\n SidebarMenuButton,\n SidebarMenuItem,\n SidebarProvider,\n SidebarTrigger,\n} from '~/registry/default/ui/sidebar'\n\nexport default function AppSidebar() {\n return (\n \n \n \n \n \n \n \n \n \n \n Username\n \n \n \n \n \n Account \n \n \n Billing \n \n \n Sign out \n \n \n \n \n \n \n \n \n \n \n \n )\n}\n",
+ "type": "registry:component"
+ }
+ ]
}
diff --git a/apps/web/public/r/styles/default/demo-sidebar-group-action.json b/apps/web/public/r/styles/default/demo-sidebar-group-action.json
index 7919c0bc..a0d42066 100644
--- a/apps/web/public/r/styles/default/demo-sidebar-group-action.json
+++ b/apps/web/public/r/styles/default/demo-sidebar-group-action.json
@@ -1,12 +1,12 @@
{
- "name": "demo-sidebar-group-action",
- "type": "registry:block",
- "description": "",
- "files": [
- {
- "path": "block/demo-sidebar-group-action.tsx",
- "content": "'use client'\n\nimport {\n ChevronDown,\n Frame,\n LifeBuoy,\n Map,\n PieChart,\n Plus,\n Send,\n} from 'lucide-react'\nimport { Toaster, toast } from 'sonner'\n\nimport {\n Sidebar,\n SidebarContent,\n SidebarGroup,\n SidebarGroupAction,\n SidebarGroupContent,\n SidebarGroupLabel,\n SidebarMenu,\n SidebarMenuButton,\n SidebarMenuItem,\n SidebarProvider,\n} from '~/registry/default/ui/sidebar'\n\nexport default function AppSidebar() {\n return (\n \n \n \n \n \n Projects \n toast('You clicked the group action!')}\n >\n \n {' '}\n Add Project \n \n \n \n \n \n \n \n Design Engineering \n \n \n \n \n \n \n \n Sales & Marketing \n \n \n \n \n \n \n \n Travel \n \n \n \n \n \n \n \n \n \n )\n}\n",
- "type": "registry:component"
- }
- ]
+ "name": "demo-sidebar-group-action",
+ "type": "registry:block",
+ "description": "",
+ "files": [
+ {
+ "path": "block/demo-sidebar-group-action.tsx",
+ "content": "'use client'\n\nimport {\n ChevronDown,\n Frame,\n LifeBuoy,\n Map,\n PieChart,\n Plus,\n Send,\n} from 'lucide-react'\nimport { Toaster, toast } from 'sonner'\n\nimport {\n Sidebar,\n SidebarContent,\n SidebarGroup,\n SidebarGroupAction,\n SidebarGroupContent,\n SidebarGroupLabel,\n SidebarMenu,\n SidebarMenuButton,\n SidebarMenuItem,\n SidebarProvider,\n} from '~/registry/default/ui/sidebar'\n\nexport default function AppSidebar() {\n return (\n \n \n \n \n \n Projects \n toast('You clicked the group action!')}\n >\n \n {' '}\n Add Project \n \n \n \n \n \n \n \n Design Engineering \n \n \n \n \n \n \n \n Sales & Marketing \n \n \n \n \n \n \n \n Travel \n \n \n \n \n \n \n \n \n \n )\n}\n",
+ "type": "registry:component"
+ }
+ ]
}
diff --git a/apps/web/public/r/styles/default/demo-sidebar-group-collapsible.json b/apps/web/public/r/styles/default/demo-sidebar-group-collapsible.json
index 4ecd5de1..362a2eaf 100644
--- a/apps/web/public/r/styles/default/demo-sidebar-group-collapsible.json
+++ b/apps/web/public/r/styles/default/demo-sidebar-group-collapsible.json
@@ -1,12 +1,12 @@
{
- "name": "demo-sidebar-group-collapsible",
- "type": "registry:block",
- "description": "",
- "files": [
- {
- "path": "block/demo-sidebar-group-collapsible.tsx",
- "content": "'use client'\n\nimport { ChevronDown, LifeBuoy, Send } from 'lucide-react'\n\nimport {\n Collapsible,\n CollapsibleContent,\n CollapsibleTrigger,\n} from '~/registry/default/ui/collapsible'\nimport {\n Sidebar,\n SidebarContent,\n SidebarGroup,\n SidebarGroupContent,\n SidebarGroupLabel,\n SidebarMenu,\n SidebarMenuButton,\n SidebarMenuItem,\n SidebarProvider,\n} from '~/registry/default/ui/sidebar'\n\nexport default function AppSidebar() {\n return (\n \n \n \n \n \n \n \n Help\n \n \n \n \n \n \n \n \n \n Support\n \n \n \n \n \n Feedback\n \n \n \n \n \n \n \n \n \n \n )\n}\n",
- "type": "registry:component"
- }
- ]
+ "name": "demo-sidebar-group-collapsible",
+ "type": "registry:block",
+ "description": "",
+ "files": [
+ {
+ "path": "block/demo-sidebar-group-collapsible.tsx",
+ "content": "'use client'\n\nimport { ChevronDown, LifeBuoy, Send } from 'lucide-react'\n\nimport {\n Collapsible,\n CollapsibleContent,\n CollapsibleTrigger,\n} from '~/registry/default/ui/collapsible'\nimport {\n Sidebar,\n SidebarContent,\n SidebarGroup,\n SidebarGroupContent,\n SidebarGroupLabel,\n SidebarMenu,\n SidebarMenuButton,\n SidebarMenuItem,\n SidebarProvider,\n} from '~/registry/default/ui/sidebar'\n\nexport default function AppSidebar() {\n return (\n \n \n \n \n \n \n \n Help\n \n \n \n \n \n \n \n \n \n Support\n \n \n \n \n \n Feedback\n \n \n \n \n \n \n \n \n \n \n )\n}\n",
+ "type": "registry:component"
+ }
+ ]
}
diff --git a/apps/web/public/r/styles/default/demo-sidebar-group.json b/apps/web/public/r/styles/default/demo-sidebar-group.json
index c7ae1b88..7a51cd4a 100644
--- a/apps/web/public/r/styles/default/demo-sidebar-group.json
+++ b/apps/web/public/r/styles/default/demo-sidebar-group.json
@@ -1,12 +1,12 @@
{
- "name": "demo-sidebar-group",
- "type": "registry:block",
- "description": "",
- "files": [
- {
- "path": "block/demo-sidebar-group.tsx",
- "content": "'use client'\n\nimport { LifeBuoy, Send } from 'lucide-react'\n\nimport {\n Sidebar,\n SidebarContent,\n SidebarGroup,\n SidebarGroupContent,\n SidebarGroupLabel,\n SidebarMenu,\n SidebarMenuButton,\n SidebarMenuItem,\n SidebarProvider,\n} from '~/registry/default/ui/sidebar'\n\nexport default function AppSidebar() {\n return (\n \n \n \n \n Help \n \n \n \n \n \n Support\n \n \n \n \n \n Feedback\n \n \n \n \n \n \n \n \n )\n}\n",
- "type": "registry:component"
- }
- ]
+ "name": "demo-sidebar-group",
+ "type": "registry:block",
+ "description": "",
+ "files": [
+ {
+ "path": "block/demo-sidebar-group.tsx",
+ "content": "'use client'\n\nimport { LifeBuoy, Send } from 'lucide-react'\n\nimport {\n Sidebar,\n SidebarContent,\n SidebarGroup,\n SidebarGroupContent,\n SidebarGroupLabel,\n SidebarMenu,\n SidebarMenuButton,\n SidebarMenuItem,\n SidebarProvider,\n} from '~/registry/default/ui/sidebar'\n\nexport default function AppSidebar() {\n return (\n \n \n \n \n Help \n \n \n \n \n \n Support\n \n \n \n \n \n Feedback\n \n \n \n \n \n \n \n \n )\n}\n",
+ "type": "registry:component"
+ }
+ ]
}
diff --git a/apps/web/public/r/styles/default/demo-sidebar-header.json b/apps/web/public/r/styles/default/demo-sidebar-header.json
index 353153ce..22fd129b 100644
--- a/apps/web/public/r/styles/default/demo-sidebar-header.json
+++ b/apps/web/public/r/styles/default/demo-sidebar-header.json
@@ -1,12 +1,12 @@
{
- "name": "demo-sidebar-header",
- "type": "registry:block",
- "description": "",
- "files": [
- {
- "path": "block/demo-sidebar-header.tsx",
- "content": "'use client'\n\nimport { ChevronDown } from 'lucide-react'\n\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuTrigger,\n} from '~/registry/default/ui/dropdown-menu'\nimport {\n Sidebar,\n SidebarHeader,\n SidebarInset,\n SidebarMenu,\n SidebarMenuButton,\n SidebarMenuItem,\n SidebarProvider,\n SidebarTrigger,\n} from '~/registry/default/ui/sidebar'\n\nexport default function AppSidebar() {\n return (\n \n \n \n \n \n \n \n \n Select Workspace\n \n \n \n \n \n Acme Inc \n \n \n Acme Corp. \n \n \n \n \n \n \n \n \n \n \n \n )\n}\n",
- "type": "registry:component"
- }
- ]
+ "name": "demo-sidebar-header",
+ "type": "registry:block",
+ "description": "",
+ "files": [
+ {
+ "path": "block/demo-sidebar-header.tsx",
+ "content": "'use client'\n\nimport { ChevronDown } from 'lucide-react'\n\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuTrigger,\n} from '~/registry/default/ui/dropdown-menu'\nimport {\n Sidebar,\n SidebarHeader,\n SidebarInset,\n SidebarMenu,\n SidebarMenuButton,\n SidebarMenuItem,\n SidebarProvider,\n SidebarTrigger,\n} from '~/registry/default/ui/sidebar'\n\nexport default function AppSidebar() {\n return (\n \n \n \n \n \n \n \n \n Select Workspace\n \n \n \n \n \n Acme Inc \n \n \n Acme Corp. \n \n \n \n \n \n \n \n \n \n \n \n )\n}\n",
+ "type": "registry:component"
+ }
+ ]
}
diff --git a/apps/web/public/r/styles/default/demo-sidebar-menu-action.json b/apps/web/public/r/styles/default/demo-sidebar-menu-action.json
index bdc164a8..991d5716 100644
--- a/apps/web/public/r/styles/default/demo-sidebar-menu-action.json
+++ b/apps/web/public/r/styles/default/demo-sidebar-menu-action.json
@@ -1,12 +1,12 @@
{
- "name": "demo-sidebar-menu-action",
- "type": "registry:block",
- "description": "",
- "files": [
- {
- "path": "block/demo-sidebar-menu-action.tsx",
- "content": "'use client'\n\nimport {\n Frame,\n LifeBuoy,\n Map,\n MoreHorizontal,\n PieChart,\n Send,\n} from 'lucide-react'\n\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuTrigger,\n} from '~/registry/default/ui/dropdown-menu'\nimport {\n Sidebar,\n SidebarContent,\n SidebarGroup,\n SidebarGroupContent,\n SidebarGroupLabel,\n SidebarMenu,\n SidebarMenuAction,\n SidebarMenuButton,\n SidebarMenuItem,\n SidebarProvider,\n} from '~/registry/default/ui/sidebar'\n\nconst projects = [\n {\n name: 'Design Engineering',\n url: '#',\n icon: Frame,\n },\n {\n name: 'Sales & Marketing',\n url: '#',\n icon: PieChart,\n },\n {\n name: 'Travel',\n url: '#',\n icon: Map,\n },\n {\n name: 'Support',\n url: '#',\n icon: LifeBuoy,\n },\n {\n name: 'Feedback',\n url: '#',\n icon: Send,\n },\n]\n\nexport default function AppSidebar() {\n return (\n \n \n \n \n Projects \n \n \n {projects.map((project, index) => (\n \n \n \n \n {project.name} \n \n \n \n \n \n \n More \n \n \n \n \n Edit Project \n \n \n Delete Project \n \n \n \n \n ))}\n \n \n \n \n \n \n )\n}\n",
- "type": "registry:component"
- }
- ]
+ "name": "demo-sidebar-menu-action",
+ "type": "registry:block",
+ "description": "",
+ "files": [
+ {
+ "path": "block/demo-sidebar-menu-action.tsx",
+ "content": "'use client'\n\nimport {\n Frame,\n LifeBuoy,\n Map,\n MoreHorizontal,\n PieChart,\n Send,\n} from 'lucide-react'\n\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuTrigger,\n} from '~/registry/default/ui/dropdown-menu'\nimport {\n Sidebar,\n SidebarContent,\n SidebarGroup,\n SidebarGroupContent,\n SidebarGroupLabel,\n SidebarMenu,\n SidebarMenuAction,\n SidebarMenuButton,\n SidebarMenuItem,\n SidebarProvider,\n} from '~/registry/default/ui/sidebar'\n\nconst projects = [\n {\n name: 'Design Engineering',\n url: '#',\n icon: Frame,\n },\n {\n name: 'Sales & Marketing',\n url: '#',\n icon: PieChart,\n },\n {\n name: 'Travel',\n url: '#',\n icon: Map,\n },\n {\n name: 'Support',\n url: '#',\n icon: LifeBuoy,\n },\n {\n name: 'Feedback',\n url: '#',\n icon: Send,\n },\n]\n\nexport default function AppSidebar() {\n return (\n \n \n \n \n Projects \n \n \n {projects.map((project, index) => (\n \n \n \n \n {project.name} \n \n \n \n \n \n \n More \n \n \n \n \n Edit Project \n \n \n Delete Project \n \n \n \n \n ))}\n \n \n \n \n \n \n )\n}\n",
+ "type": "registry:component"
+ }
+ ]
}
diff --git a/apps/web/public/r/styles/default/demo-sidebar-menu-badge.json b/apps/web/public/r/styles/default/demo-sidebar-menu-badge.json
index a6856071..fa830f19 100644
--- a/apps/web/public/r/styles/default/demo-sidebar-menu-badge.json
+++ b/apps/web/public/r/styles/default/demo-sidebar-menu-badge.json
@@ -1,12 +1,12 @@
{
- "name": "demo-sidebar-menu-badge",
- "type": "registry:block",
- "description": "",
- "files": [
- {
- "path": "block/demo-sidebar-menu-badge.tsx",
- "content": "'use client'\n\nimport { Frame, LifeBuoy, Map, PieChart, Send } from 'lucide-react'\n\nimport {\n Sidebar,\n SidebarContent,\n SidebarGroup,\n SidebarGroupContent,\n SidebarGroupLabel,\n SidebarMenu,\n SidebarMenuBadge,\n SidebarMenuButton,\n SidebarMenuItem,\n SidebarProvider,\n} from '~/registry/default/ui/sidebar'\n\nconst projects = [\n {\n name: 'Design Engineering',\n url: '#',\n icon: Frame,\n badge: '24',\n },\n {\n name: 'Sales & Marketing',\n url: '#',\n icon: PieChart,\n badge: '12',\n },\n {\n name: 'Travel',\n url: '#',\n icon: Map,\n badge: '3',\n },\n {\n name: 'Support',\n url: '#',\n icon: LifeBuoy,\n badge: '21',\n },\n {\n name: 'Feedback',\n url: '#',\n icon: Send,\n badge: '8',\n },\n]\n\nexport default function AppSidebar() {\n return (\n \n \n \n \n Projects \n \n \n {projects.map(project => (\n \n \n \n \n {project.name} \n \n \n {project.badge} \n \n ))}\n \n \n \n \n \n \n )\n}\n",
- "type": "registry:component"
- }
- ]
+ "name": "demo-sidebar-menu-badge",
+ "type": "registry:block",
+ "description": "",
+ "files": [
+ {
+ "path": "block/demo-sidebar-menu-badge.tsx",
+ "content": "'use client'\n\nimport { Frame, LifeBuoy, Map, PieChart, Send } from 'lucide-react'\n\nimport {\n Sidebar,\n SidebarContent,\n SidebarGroup,\n SidebarGroupContent,\n SidebarGroupLabel,\n SidebarMenu,\n SidebarMenuBadge,\n SidebarMenuButton,\n SidebarMenuItem,\n SidebarProvider,\n} from '~/registry/default/ui/sidebar'\n\nconst projects = [\n {\n name: 'Design Engineering',\n url: '#',\n icon: Frame,\n badge: '24',\n },\n {\n name: 'Sales & Marketing',\n url: '#',\n icon: PieChart,\n badge: '12',\n },\n {\n name: 'Travel',\n url: '#',\n icon: Map,\n badge: '3',\n },\n {\n name: 'Support',\n url: '#',\n icon: LifeBuoy,\n badge: '21',\n },\n {\n name: 'Feedback',\n url: '#',\n icon: Send,\n badge: '8',\n },\n]\n\nexport default function AppSidebar() {\n return (\n \n \n \n \n Projects \n \n \n {projects.map(project => (\n \n \n \n \n {project.name} \n \n \n {project.badge} \n \n ))}\n \n \n \n \n \n \n )\n}\n",
+ "type": "registry:component"
+ }
+ ]
}
diff --git a/apps/web/public/r/styles/default/demo-sidebar-menu-collapsible.json b/apps/web/public/r/styles/default/demo-sidebar-menu-collapsible.json
index 1f5e59d5..a3ef313a 100644
--- a/apps/web/public/r/styles/default/demo-sidebar-menu-collapsible.json
+++ b/apps/web/public/r/styles/default/demo-sidebar-menu-collapsible.json
@@ -1,12 +1,12 @@
{
- "name": "demo-sidebar-menu-collapsible",
- "type": "registry:block",
- "description": "",
- "files": [
- {
- "path": "block/demo-sidebar-menu-collapsible.tsx",
- "content": "'use client'\n\nimport { ChevronRight } from 'lucide-react'\n\nimport {\n Collapsible,\n CollapsibleContent,\n CollapsibleTrigger,\n} from '~/registry/default/ui/collapsible'\nimport {\n Sidebar,\n SidebarContent,\n SidebarGroup,\n SidebarGroupContent,\n SidebarGroupLabel,\n SidebarMenu,\n SidebarMenuButton,\n SidebarMenuItem,\n SidebarMenuSub,\n SidebarMenuSubButton,\n SidebarMenuSubItem,\n SidebarProvider,\n} from '~/registry/default/ui/sidebar'\n\nconst items = [\n {\n title: 'Getting Started',\n url: '#',\n items: [\n {\n title: 'Installation',\n url: '#',\n },\n {\n title: 'Project Structure',\n url: '#',\n },\n ],\n },\n {\n title: 'Building Your Application',\n url: '#',\n items: [\n {\n title: 'Routing',\n url: '#',\n },\n {\n title: 'Data Fetching',\n url: '#',\n isActive: true,\n },\n {\n title: 'Rendering',\n url: '#',\n },\n {\n title: 'Caching',\n url: '#',\n },\n {\n title: 'Styling',\n url: '#',\n },\n {\n title: 'Optimizing',\n url: '#',\n },\n {\n title: 'Configuring',\n url: '#',\n },\n {\n title: 'Testing',\n url: '#',\n },\n {\n title: 'Authentication',\n url: '#',\n },\n {\n title: 'Deploying',\n url: '#',\n },\n {\n title: 'Upgrading',\n url: '#',\n },\n {\n title: 'Examples',\n url: '#',\n },\n ],\n },\n {\n title: 'API Reference',\n url: '#',\n items: [\n {\n title: 'Components',\n url: '#',\n },\n {\n title: 'File Conventions',\n url: '#',\n },\n {\n title: 'Functions',\n url: '#',\n },\n {\n title: 'next.config.js Options',\n url: '#',\n },\n {\n title: 'CLI',\n url: '#',\n },\n {\n title: 'Edge Runtime',\n url: '#',\n },\n ],\n },\n {\n title: 'Architecture',\n url: '#',\n items: [\n {\n title: 'Accessibility',\n url: '#',\n },\n {\n title: 'Fast Refresh',\n url: '#',\n },\n {\n title: 'Next.js Compiler',\n url: '#',\n },\n {\n title: 'Supported Browsers',\n url: '#',\n },\n {\n title: 'Turbopack',\n url: '#',\n },\n ],\n },\n]\n\nexport default function AppSidebar() {\n return (\n \n \n \n \n \n \n {items.map((item, index) => (\n \n \n \n \n {item.title} \n \n \n \n \n \n {item.items.map((subItem, subIndex) => (\n \n \n \n {subItem.title} \n \n \n \n ))}\n \n \n \n \n ))}\n \n \n \n \n \n \n )\n}\n",
- "type": "registry:component"
- }
- ]
+ "name": "demo-sidebar-menu-collapsible",
+ "type": "registry:block",
+ "description": "",
+ "files": [
+ {
+ "path": "block/demo-sidebar-menu-collapsible.tsx",
+ "content": "'use client'\n\nimport { ChevronRight } from 'lucide-react'\n\nimport {\n Collapsible,\n CollapsibleContent,\n CollapsibleTrigger,\n} from '~/registry/default/ui/collapsible'\nimport {\n Sidebar,\n SidebarContent,\n SidebarGroup,\n SidebarGroupContent,\n SidebarGroupLabel,\n SidebarMenu,\n SidebarMenuButton,\n SidebarMenuItem,\n SidebarMenuSub,\n SidebarMenuSubButton,\n SidebarMenuSubItem,\n SidebarProvider,\n} from '~/registry/default/ui/sidebar'\n\nconst items = [\n {\n title: 'Getting Started',\n url: '#',\n items: [\n {\n title: 'Installation',\n url: '#',\n },\n {\n title: 'Project Structure',\n url: '#',\n },\n ],\n },\n {\n title: 'Building Your Application',\n url: '#',\n items: [\n {\n title: 'Routing',\n url: '#',\n },\n {\n title: 'Data Fetching',\n url: '#',\n isActive: true,\n },\n {\n title: 'Rendering',\n url: '#',\n },\n {\n title: 'Caching',\n url: '#',\n },\n {\n title: 'Styling',\n url: '#',\n },\n {\n title: 'Optimizing',\n url: '#',\n },\n {\n title: 'Configuring',\n url: '#',\n },\n {\n title: 'Testing',\n url: '#',\n },\n {\n title: 'Authentication',\n url: '#',\n },\n {\n title: 'Deploying',\n url: '#',\n },\n {\n title: 'Upgrading',\n url: '#',\n },\n {\n title: 'Examples',\n url: '#',\n },\n ],\n },\n {\n title: 'API Reference',\n url: '#',\n items: [\n {\n title: 'Components',\n url: '#',\n },\n {\n title: 'File Conventions',\n url: '#',\n },\n {\n title: 'Functions',\n url: '#',\n },\n {\n title: 'next.config.js Options',\n url: '#',\n },\n {\n title: 'CLI',\n url: '#',\n },\n {\n title: 'Edge Runtime',\n url: '#',\n },\n ],\n },\n {\n title: 'Architecture',\n url: '#',\n items: [\n {\n title: 'Accessibility',\n url: '#',\n },\n {\n title: 'Fast Refresh',\n url: '#',\n },\n {\n title: 'Next.js Compiler',\n url: '#',\n },\n {\n title: 'Supported Browsers',\n url: '#',\n },\n {\n title: 'Turbopack',\n url: '#',\n },\n ],\n },\n]\n\nexport default function AppSidebar() {\n return (\n \n \n \n \n \n \n {items.map((item, index) => (\n \n \n \n \n {item.title} \n \n \n \n \n \n {item.items.map((subItem, subIndex) => (\n \n \n \n {subItem.title} \n \n \n \n ))}\n \n \n \n \n ))}\n \n \n \n \n \n \n )\n}\n",
+ "type": "registry:component"
+ }
+ ]
}
diff --git a/apps/web/public/r/styles/default/demo-sidebar-menu-sub.json b/apps/web/public/r/styles/default/demo-sidebar-menu-sub.json
index 538a8dd0..2f7a02cc 100644
--- a/apps/web/public/r/styles/default/demo-sidebar-menu-sub.json
+++ b/apps/web/public/r/styles/default/demo-sidebar-menu-sub.json
@@ -1,12 +1,12 @@
{
- "name": "demo-sidebar-menu-sub",
- "type": "registry:block",
- "description": "",
- "files": [
- {
- "path": "block/demo-sidebar-menu-sub.tsx",
- "content": "'use client'\n\nimport {\n Sidebar,\n SidebarContent,\n SidebarGroup,\n SidebarGroupContent,\n SidebarMenu,\n SidebarMenuButton,\n SidebarMenuItem,\n SidebarMenuSub,\n SidebarMenuSubButton,\n SidebarMenuSubItem,\n SidebarProvider,\n} from '~/registry/default/ui/sidebar'\n\nconst items = [\n {\n title: 'Getting Started',\n url: '#',\n items: [\n {\n title: 'Installation',\n url: '#',\n },\n {\n title: 'Project Structure',\n url: '#',\n },\n ],\n },\n {\n title: 'Building Your Application',\n url: '#',\n items: [\n {\n title: 'Routing',\n url: '#',\n },\n {\n title: 'Data Fetching',\n url: '#',\n isActive: true,\n },\n {\n title: 'Rendering',\n url: '#',\n },\n {\n title: 'Caching',\n url: '#',\n },\n {\n title: 'Styling',\n url: '#',\n },\n {\n title: 'Optimizing',\n url: '#',\n },\n {\n title: 'Configuring',\n url: '#',\n },\n {\n title: 'Testing',\n url: '#',\n },\n {\n title: 'Authentication',\n url: '#',\n },\n {\n title: 'Deploying',\n url: '#',\n },\n {\n title: 'Upgrading',\n url: '#',\n },\n {\n title: 'Examples',\n url: '#',\n },\n ],\n },\n {\n title: 'API Reference',\n url: '#',\n items: [\n {\n title: 'Components',\n url: '#',\n },\n {\n title: 'File Conventions',\n url: '#',\n },\n {\n title: 'Functions',\n url: '#',\n },\n {\n title: 'next.config.js Options',\n url: '#',\n },\n {\n title: 'CLI',\n url: '#',\n },\n {\n title: 'Edge Runtime',\n url: '#',\n },\n ],\n },\n {\n title: 'Architecture',\n url: '#',\n items: [\n {\n title: 'Accessibility',\n url: '#',\n },\n {\n title: 'Fast Refresh',\n url: '#',\n },\n {\n title: 'Next.js Compiler',\n url: '#',\n },\n {\n title: 'Supported Browsers',\n url: '#',\n },\n {\n title: 'Turbopack',\n url: '#',\n },\n ],\n },\n]\n\nexport default function AppSidebar() {\n return (\n \n \n \n \n \n \n {items.map((item, index) => (\n \n \n \n {item.title} \n \n \n \n {item.items.map((subItem, subIndex) => (\n \n \n \n {subItem.title} \n \n \n \n ))}\n \n \n ))}\n \n \n \n \n \n \n )\n}\n",
- "type": "registry:component"
- }
- ]
+ "name": "demo-sidebar-menu-sub",
+ "type": "registry:block",
+ "description": "",
+ "files": [
+ {
+ "path": "block/demo-sidebar-menu-sub.tsx",
+ "content": "'use client'\n\nimport {\n Sidebar,\n SidebarContent,\n SidebarGroup,\n SidebarGroupContent,\n SidebarMenu,\n SidebarMenuButton,\n SidebarMenuItem,\n SidebarMenuSub,\n SidebarMenuSubButton,\n SidebarMenuSubItem,\n SidebarProvider,\n} from '~/registry/default/ui/sidebar'\n\nconst items = [\n {\n title: 'Getting Started',\n url: '#',\n items: [\n {\n title: 'Installation',\n url: '#',\n },\n {\n title: 'Project Structure',\n url: '#',\n },\n ],\n },\n {\n title: 'Building Your Application',\n url: '#',\n items: [\n {\n title: 'Routing',\n url: '#',\n },\n {\n title: 'Data Fetching',\n url: '#',\n isActive: true,\n },\n {\n title: 'Rendering',\n url: '#',\n },\n {\n title: 'Caching',\n url: '#',\n },\n {\n title: 'Styling',\n url: '#',\n },\n {\n title: 'Optimizing',\n url: '#',\n },\n {\n title: 'Configuring',\n url: '#',\n },\n {\n title: 'Testing',\n url: '#',\n },\n {\n title: 'Authentication',\n url: '#',\n },\n {\n title: 'Deploying',\n url: '#',\n },\n {\n title: 'Upgrading',\n url: '#',\n },\n {\n title: 'Examples',\n url: '#',\n },\n ],\n },\n {\n title: 'API Reference',\n url: '#',\n items: [\n {\n title: 'Components',\n url: '#',\n },\n {\n title: 'File Conventions',\n url: '#',\n },\n {\n title: 'Functions',\n url: '#',\n },\n {\n title: 'next.config.js Options',\n url: '#',\n },\n {\n title: 'CLI',\n url: '#',\n },\n {\n title: 'Edge Runtime',\n url: '#',\n },\n ],\n },\n {\n title: 'Architecture',\n url: '#',\n items: [\n {\n title: 'Accessibility',\n url: '#',\n },\n {\n title: 'Fast Refresh',\n url: '#',\n },\n {\n title: 'Next.js Compiler',\n url: '#',\n },\n {\n title: 'Supported Browsers',\n url: '#',\n },\n {\n title: 'Turbopack',\n url: '#',\n },\n ],\n },\n]\n\nexport default function AppSidebar() {\n return (\n \n \n \n \n \n \n {items.map((item, index) => (\n \n \n \n {item.title} \n \n \n \n {item.items.map((subItem, subIndex) => (\n \n \n \n {subItem.title} \n \n \n \n ))}\n \n \n ))}\n \n \n \n \n \n \n )\n}\n",
+ "type": "registry:component"
+ }
+ ]
}
diff --git a/apps/web/public/r/styles/default/demo-sidebar-menu.json b/apps/web/public/r/styles/default/demo-sidebar-menu.json
index 4558479c..ee9bd7db 100644
--- a/apps/web/public/r/styles/default/demo-sidebar-menu.json
+++ b/apps/web/public/r/styles/default/demo-sidebar-menu.json
@@ -1,12 +1,12 @@
{
- "name": "demo-sidebar-menu",
- "type": "registry:block",
- "description": "",
- "files": [
- {
- "path": "block/demo-sidebar-menu.tsx",
- "content": "'use client'\n\nimport { Frame, LifeBuoy, Map, PieChart, Send } from 'lucide-react'\n\nimport {\n Sidebar,\n SidebarContent,\n SidebarGroup,\n SidebarGroupContent,\n SidebarGroupLabel,\n SidebarMenu,\n SidebarMenuButton,\n SidebarMenuItem,\n SidebarProvider,\n} from '~/registry/default/ui/sidebar'\n\nconst projects = [\n {\n name: 'Design Engineering',\n url: '#',\n icon: Frame,\n },\n {\n name: 'Sales & Marketing',\n url: '#',\n icon: PieChart,\n },\n {\n name: 'Travel',\n url: '#',\n icon: Map,\n },\n {\n name: 'Support',\n url: '#',\n icon: LifeBuoy,\n },\n {\n name: 'Feedback',\n url: '#',\n icon: Send,\n },\n]\n\nexport default function AppSidebar() {\n return (\n \n \n \n \n Projects \n \n \n {projects.map(project => (\n \n \n \n \n {project.name} \n \n \n \n ))}\n \n \n \n \n \n \n )\n}\n",
- "type": "registry:component"
- }
- ]
+ "name": "demo-sidebar-menu",
+ "type": "registry:block",
+ "description": "",
+ "files": [
+ {
+ "path": "block/demo-sidebar-menu.tsx",
+ "content": "'use client'\n\nimport { Frame, LifeBuoy, Map, PieChart, Send } from 'lucide-react'\n\nimport {\n Sidebar,\n SidebarContent,\n SidebarGroup,\n SidebarGroupContent,\n SidebarGroupLabel,\n SidebarMenu,\n SidebarMenuButton,\n SidebarMenuItem,\n SidebarProvider,\n} from '~/registry/default/ui/sidebar'\n\nconst projects = [\n {\n name: 'Design Engineering',\n url: '#',\n icon: Frame,\n },\n {\n name: 'Sales & Marketing',\n url: '#',\n icon: PieChart,\n },\n {\n name: 'Travel',\n url: '#',\n icon: Map,\n },\n {\n name: 'Support',\n url: '#',\n icon: LifeBuoy,\n },\n {\n name: 'Feedback',\n url: '#',\n icon: Send,\n },\n]\n\nexport default function AppSidebar() {\n return (\n \n \n \n \n Projects \n \n \n {projects.map(project => (\n \n \n \n \n {project.name} \n \n \n \n ))}\n \n \n \n \n \n \n )\n}\n",
+ "type": "registry:component"
+ }
+ ]
}
diff --git a/apps/web/public/r/styles/default/demo-sidebar-rsc.json b/apps/web/public/r/styles/default/demo-sidebar-rsc.json
index c5cdaef3..d9e84831 100644
--- a/apps/web/public/r/styles/default/demo-sidebar-rsc.json
+++ b/apps/web/public/r/styles/default/demo-sidebar-rsc.json
@@ -1,12 +1,12 @@
{
- "name": "demo-sidebar-rsc",
- "type": "registry:block",
- "description": "",
- "files": [
- {
- "path": "block/demo-sidebar-rsc.tsx",
- "content": "import * as React from 'react'\nimport { Frame, LifeBuoy, Map, PieChart, Send } from 'lucide-react'\n\nimport {\n Sidebar,\n SidebarContent,\n SidebarGroup,\n SidebarGroupContent,\n SidebarGroupLabel,\n SidebarMenu,\n SidebarMenuButton,\n SidebarMenuItem,\n SidebarMenuSkeleton,\n SidebarProvider,\n} from '~/registry/default/ui/sidebar'\n\nconst projects = [\n {\n name: 'Design Engineering',\n url: '#',\n icon: Frame,\n badge: '24',\n },\n {\n name: 'Sales & Marketing',\n url: '#',\n icon: PieChart,\n badge: '12',\n },\n {\n name: 'Travel',\n url: '#',\n icon: Map,\n badge: '3',\n },\n {\n name: 'Support',\n url: '#',\n icon: LifeBuoy,\n badge: '21',\n },\n {\n name: 'Feedback',\n url: '#',\n icon: Send,\n badge: '8',\n },\n]\n\n// Dummy fetch function\nasync function fetchProjects() {\n await new Promise(resolve => setTimeout(resolve, 3000))\n return projects\n}\n\nexport default function AppSidebar() {\n return (\n \n \n \n \n Projects \n \n }>\n \n \n \n \n \n \n \n )\n}\n\nfunction NavProjectsSkeleton() {\n return (\n \n {Array.from({ length: 5 }).map((_, index) => (\n \n \n \n ))}\n \n )\n}\n\nasync function NavProjects() {\n const projects = await fetchProjects()\n\n return (\n \n {projects.map(project => (\n \n \n \n \n {project.name} \n \n \n \n ))}\n \n )\n}\n",
- "type": "registry:component"
- }
- ]
+ "name": "demo-sidebar-rsc",
+ "type": "registry:block",
+ "description": "",
+ "files": [
+ {
+ "path": "block/demo-sidebar-rsc.tsx",
+ "content": "import * as React from 'react'\nimport { Frame, LifeBuoy, Map, PieChart, Send } from 'lucide-react'\n\nimport {\n Sidebar,\n SidebarContent,\n SidebarGroup,\n SidebarGroupContent,\n SidebarGroupLabel,\n SidebarMenu,\n SidebarMenuButton,\n SidebarMenuItem,\n SidebarMenuSkeleton,\n SidebarProvider,\n} from '~/registry/default/ui/sidebar'\n\nconst projects = [\n {\n name: 'Design Engineering',\n url: '#',\n icon: Frame,\n badge: '24',\n },\n {\n name: 'Sales & Marketing',\n url: '#',\n icon: PieChart,\n badge: '12',\n },\n {\n name: 'Travel',\n url: '#',\n icon: Map,\n badge: '3',\n },\n {\n name: 'Support',\n url: '#',\n icon: LifeBuoy,\n badge: '21',\n },\n {\n name: 'Feedback',\n url: '#',\n icon: Send,\n badge: '8',\n },\n]\n\n// Dummy fetch function\nasync function fetchProjects() {\n await new Promise(resolve => setTimeout(resolve, 3000))\n return projects\n}\n\nexport default function AppSidebar() {\n return (\n \n \n \n \n Projects \n \n }>\n \n \n \n \n \n \n \n )\n}\n\nfunction NavProjectsSkeleton() {\n return (\n \n {Array.from({ length: 5 }).map((_, index) => (\n \n \n \n ))}\n \n )\n}\n\nasync function NavProjects() {\n const projects = await fetchProjects()\n\n return (\n \n {projects.map(project => (\n \n \n \n \n {project.name} \n \n \n \n ))}\n \n )\n}\n",
+ "type": "registry:component"
+ }
+ ]
}
diff --git a/apps/web/public/r/styles/default/demo-sidebar.json b/apps/web/public/r/styles/default/demo-sidebar.json
index 8f475947..b965423c 100644
--- a/apps/web/public/r/styles/default/demo-sidebar.json
+++ b/apps/web/public/r/styles/default/demo-sidebar.json
@@ -1,12 +1,12 @@
{
- "name": "demo-sidebar",
- "type": "registry:block",
- "description": "",
- "files": [
- {
- "path": "block/demo-sidebar.tsx",
- "content": "'use client'\n\nimport { Calendar, Home, Inbox, Search, Settings } from 'lucide-react'\n\nimport {\n Sidebar,\n SidebarContent,\n SidebarGroup,\n SidebarGroupContent,\n SidebarGroupLabel,\n SidebarInset,\n SidebarMenu,\n SidebarMenuButton,\n SidebarMenuItem,\n SidebarProvider,\n SidebarTrigger,\n} from '~/registry/default/ui/sidebar'\n\n// Menu items.\nconst items = [\n {\n title: 'Home',\n url: '#',\n icon: Home,\n },\n {\n title: 'Inbox',\n url: '#',\n icon: Inbox,\n },\n {\n title: 'Calendar',\n url: '#',\n icon: Calendar,\n },\n {\n title: 'Search',\n url: '#',\n icon: Search,\n },\n {\n title: 'Settings',\n url: '#',\n icon: Settings,\n },\n]\n\nexport default function AppSidebar() {\n return (\n \n \n \n \n Application \n \n \n {items.map(item => (\n \n \n \n \n {item.title} \n \n \n \n ))}\n \n \n \n \n \n \n \n \n \n )\n}\n",
- "type": "registry:component"
- }
- ]
+ "name": "demo-sidebar",
+ "type": "registry:block",
+ "description": "",
+ "files": [
+ {
+ "path": "block/demo-sidebar.tsx",
+ "content": "'use client'\n\nimport { Calendar, Home, Inbox, Search, Settings } from 'lucide-react'\n\nimport {\n Sidebar,\n SidebarContent,\n SidebarGroup,\n SidebarGroupContent,\n SidebarGroupLabel,\n SidebarInset,\n SidebarMenu,\n SidebarMenuButton,\n SidebarMenuItem,\n SidebarProvider,\n SidebarTrigger,\n} from '~/registry/default/ui/sidebar'\n\n// Menu items.\nconst items = [\n {\n title: 'Home',\n url: '#',\n icon: Home,\n },\n {\n title: 'Inbox',\n url: '#',\n icon: Inbox,\n },\n {\n title: 'Calendar',\n url: '#',\n icon: Calendar,\n },\n {\n title: 'Search',\n url: '#',\n icon: Search,\n },\n {\n title: 'Settings',\n url: '#',\n icon: Settings,\n },\n]\n\nexport default function AppSidebar() {\n return (\n \n \n \n \n Application \n \n \n {items.map(item => (\n \n \n \n \n {item.title} \n \n \n \n ))}\n \n \n \n \n \n \n \n \n \n )\n}\n",
+ "type": "registry:component"
+ }
+ ]
}
diff --git a/apps/web/public/r/styles/default/shine-border-demo-2.json b/apps/web/public/r/styles/default/shine-border-demo-2.json
index 7022aa1c..6bb3f9ab 100644
--- a/apps/web/public/r/styles/default/shine-border-demo-2.json
+++ b/apps/web/public/r/styles/default/shine-border-demo-2.json
@@ -6,7 +6,7 @@
"files": [
{
"path": "examples/shine-border-demo-2.tsx",
- "content": "import ShineBorder from \"~/registry/default/ui/shine-border\"\n\nexport default function ShineBorderDemo() {\n return (\n \n Shine Border\n \n )\n}\n",
+ "content": "import { useTheme } from \"next-themes\"\n\nimport { ShineBorder } from \"~/registry/default/ui/shine-border\"\n\nexport default function ShineBorderDemo() {\n const theme = useTheme()\n return (\n \n Shine Border\n \n )\n}\n",
"type": "registry:example",
"target": ""
}
diff --git a/apps/web/public/r/styles/default/shine-border-demo.json b/apps/web/public/r/styles/default/shine-border-demo.json
index a7ea4dc8..a126eeed 100644
--- a/apps/web/public/r/styles/default/shine-border-demo.json
+++ b/apps/web/public/r/styles/default/shine-border-demo.json
@@ -6,7 +6,7 @@
"files": [
{
"path": "examples/shine-border-demo.tsx",
- "content": "import ShineBorder from \"~/registry/default/ui/shine-border\"\n\nexport default function ShineBorderDemo() {\n return (\n \n \n Shine Border\n \n \n )\n}\n",
+ "content": "import { ShineBorder } from \"~/registry/default/ui/shine-border\"\n\nexport default function ShineBorderDemo() {\n return (\n \n \n Shine Border\n \n \n )\n}\n",
"type": "registry:example",
"target": ""
}
diff --git a/apps/web/public/r/styles/default/shine-border.json b/apps/web/public/r/styles/default/shine-border.json
index 186adb59..7de7a28d 100644
--- a/apps/web/public/r/styles/default/shine-border.json
+++ b/apps/web/public/r/styles/default/shine-border.json
@@ -6,7 +6,7 @@
"files": [
{
"path": "ui/shine-border.tsx",
- "content": "\"use client\"\n\nimport { ny } from \"~/lib/utils\"\n\ntype TColorProp = string | string[]\n\ninterface ShineBorderProps {\n borderRadius?: number\n borderWidth?: number\n duration?: number\n color?: TColorProp\n className?: string\n children: React.ReactNode\n}\n\n/**\n * @name Shine Border\n * @description It is an animated background border effect component with easy to use and configurable props.\n * @param borderRadius defines the radius of the border.\n * @param borderWidth defines the width of the border.\n * @param duration defines the animation duration to be applied on the shining border\n * @param color a string or string array to define border color.\n * @param className defines the class name to be applied to the component\n * @param children contains react node elements.\n */\nexport default function ShineBorder({\n borderRadius = 8,\n borderWidth = 1,\n duration = 14,\n color = \"#000000\",\n className,\n children,\n}: ShineBorderProps) {\n return (\n \n )\n}\n",
+ "content": "\"use client\"\n\nimport { ny } from \"~/lib/utils\"\n\ntype TColorProp = string | string[]\n\ninterface ShineBorderProps {\n borderRadius?: number\n borderWidth?: number\n duration?: number\n color?: TColorProp\n className?: string\n children: React.ReactNode\n}\n\n/**\n * @name Shine Border\n * @description It is an animated background border effect component with easy to use and configurable props.\n * @param borderRadius defines the radius of the border.\n * @param borderWidth defines the width of the border.\n * @param duration defines the animation duration to be applied on the shining border\n * @param color a string or string array to define border color.\n * @param className defines the class name to be applied to the component\n * @param children contains react node elements.\n */\nexport function ShineBorder({\n borderRadius = 8,\n borderWidth = 1,\n duration = 14,\n color = \"#000000\",\n className,\n children,\n}: ShineBorderProps) {\n return (\n \n )\n}\n",
"type": "registry:ui",
"target": ""
}
diff --git a/apps/web/public/r/styles/default/wavy-dot-pattern-demo.json b/apps/web/public/r/styles/default/wavy-dot-pattern-demo.json
index 6b582359..e875f4da 100644
--- a/apps/web/public/r/styles/default/wavy-dot-pattern-demo.json
+++ b/apps/web/public/r/styles/default/wavy-dot-pattern-demo.json
@@ -1,14 +1,14 @@
{
- "$schema": "https://nyxbui.design/schema/registry-item.json",
- "name": "wavy-dot-pattern-demo",
- "type": "registry:example",
- "author": "nyxbui (https://nyxbui.design)",
- "files": [
- {
- "path": "examples/wavy-dot-pattern-demo.tsx",
- "content": "import WavyDotPattern from \"~/registry/default/ui/wavy-dot-pattern\"\n\nexport default function WavyDotPatternDemo() {\n return (\n \n
\n Wavy Dot Pattern\n
\n\n
\n
\n )\n}\n",
- "type": "registry:example",
- "target": ""
- }
- ]
-}
\ No newline at end of file
+ "$schema": "https://nyxbui.design/schema/registry-item.json",
+ "name": "wavy-dot-pattern-demo",
+ "type": "registry:example",
+ "author": "nyxbui (https://nyxbui.design)",
+ "files": [
+ {
+ "path": "examples/wavy-dot-pattern-demo.tsx",
+ "content": "import WavyDotPattern from \"~/registry/default/ui/wavy-dot-pattern\"\n\nexport default function WavyDotPatternDemo() {\n return (\n \n
\n Wavy Dot Pattern\n
\n\n
\n
\n )\n}\n",
+ "type": "registry:example",
+ "target": ""
+ }
+ ]
+}
diff --git a/apps/web/public/r/styles/default/wavy-dot-pattern.json b/apps/web/public/r/styles/default/wavy-dot-pattern.json
index b67ba1de..30850dd1 100644
--- a/apps/web/public/r/styles/default/wavy-dot-pattern.json
+++ b/apps/web/public/r/styles/default/wavy-dot-pattern.json
@@ -1,17 +1,15 @@
{
- "$schema": "https://nyxbui.design/schema/registry-item.json",
- "name": "wavy-dot-pattern",
- "type": "registry:ui",
- "author": "nyxbui (https://nyxbui.design)",
- "dependencies": [
- "react-anime"
- ],
- "files": [
- {
- "path": "ui/wavy-dot-pattern.tsx",
- "content": "\"use client\"\nimport { useState } from \"react\"\nimport { anime } from \"react-anime\"\nimport { ny } from \"~/lib/utils\"\n\ninterface WavyDotPatternProps {\n className?: string\n gridWidth?: number\n gridHeight?: number\n dotWidth?: number\n dotHeight?: number\n}\n\nexport function WavyDotPattern({\n className,\n gridWidth,\n gridHeight,\n dotWidth,\n dotHeight,\n}: WavyDotPatternProps) {\n const [dotClickDisabled, setDotClickDisabled] = useState(false)\n\n const handleDotClick = (e: any, width: number, height: number) => {\n setDotClickDisabled(true)\n\n anime({\n targets: \".dot-point\",\n scale: [\n { value: 1.35, easing: \"easeOutSine\", duration: 250 },\n { value: 1, easing: \"easeInOutQuad\", duration: 500 },\n ],\n translateY: [\n { value: -15, easing: \"easeOutSine\", duration: 250 },\n { value: 1, easing: \"easeInOutQuad\", duration: 500 },\n ],\n opacity: [\n { value: 0.7, easing: \"easeOutSine\", duration: 250 },\n { value: 0.35, easing: \"easeInOutQuad\", duration: 500 },\n ],\n delay: anime.stagger(100, {\n grid: [width, height],\n from: e.target.dataset.index,\n }),\n })\n\n setTimeout(() => setDotClickDisabled(false), 2000)\n }\n\n const GRID_WIDTH = gridWidth || 30\n const GRID_HEIGHT = gridHeight || 30\n\n const DOT_WIDTH = dotWidth ? `w-[${dotWidth}px]` : \"w-[8px]\"\n const DOT_HEIGHT = dotHeight ? `h-[${dotHeight}px]` : \"h-[8px]\"\n\n let index = 0\n\n const dots = []\n\n for (let i = 0; i < GRID_WIDTH; i++) {\n for (let j = 0; j < GRID_HEIGHT; j++) {\n dots.push(\n handleDotClick(e, GRID_WIDTH, GRID_HEIGHT)}\n data-index={index}\n key={`${i}-${j}`}\n disabled={dotClickDisabled}\n >\n
\n ,\n )\n index++\n }\n }\n\n return (\n \n {dots.map((dot) => dot)}\n
\n )\n}\n\nexport default WavyDotPattern\n",
- "type": "registry:ui",
- "target": ""
- }
- ]
-}
\ No newline at end of file
+ "$schema": "https://nyxbui.design/schema/registry-item.json",
+ "name": "wavy-dot-pattern",
+ "type": "registry:ui",
+ "author": "nyxbui (https://nyxbui.design)",
+ "dependencies": ["react-anime"],
+ "files": [
+ {
+ "path": "ui/wavy-dot-pattern.tsx",
+ "content": "\"use client\"\nimport { useState } from \"react\"\nimport { anime } from \"react-anime\"\nimport { ny } from \"~/lib/utils\"\n\ninterface WavyDotPatternProps {\n className?: string\n gridWidth?: number\n gridHeight?: number\n dotWidth?: number\n dotHeight?: number\n}\n\nexport function WavyDotPattern({\n className,\n gridWidth,\n gridHeight,\n dotWidth,\n dotHeight,\n}: WavyDotPatternProps) {\n const [dotClickDisabled, setDotClickDisabled] = useState(false)\n\n const handleDotClick = (e: any, width: number, height: number) => {\n setDotClickDisabled(true)\n\n anime({\n targets: \".dot-point\",\n scale: [\n { value: 1.35, easing: \"easeOutSine\", duration: 250 },\n { value: 1, easing: \"easeInOutQuad\", duration: 500 },\n ],\n translateY: [\n { value: -15, easing: \"easeOutSine\", duration: 250 },\n { value: 1, easing: \"easeInOutQuad\", duration: 500 },\n ],\n opacity: [\n { value: 0.7, easing: \"easeOutSine\", duration: 250 },\n { value: 0.35, easing: \"easeInOutQuad\", duration: 500 },\n ],\n delay: anime.stagger(100, {\n grid: [width, height],\n from: e.target.dataset.index,\n }),\n })\n\n setTimeout(() => setDotClickDisabled(false), 2000)\n }\n\n const GRID_WIDTH = gridWidth || 30\n const GRID_HEIGHT = gridHeight || 30\n\n const DOT_WIDTH = dotWidth ? `w-[${dotWidth}px]` : \"w-[8px]\"\n const DOT_HEIGHT = dotHeight ? `h-[${dotHeight}px]` : \"h-[8px]\"\n\n let index = 0\n\n const dots = []\n\n for (let i = 0; i < GRID_WIDTH; i++) {\n for (let j = 0; j < GRID_HEIGHT; j++) {\n dots.push(\n handleDotClick(e, GRID_WIDTH, GRID_HEIGHT)}\n data-index={index}\n key={`${i}-${j}`}\n disabled={dotClickDisabled}\n >\n
\n ,\n )\n index++\n }\n }\n\n return (\n \n {dots.map((dot) => dot)}\n
\n )\n}\n\nexport default WavyDotPattern\n",
+ "type": "registry:ui",
+ "target": ""
+ }
+ ]
+}
diff --git a/apps/web/public/r/styles/miami/_sink.json b/apps/web/public/r/styles/miami/_sink.json
index 84534a50..b69dd40c 100644
--- a/apps/web/public/r/styles/miami/_sink.json
+++ b/apps/web/public/r/styles/miami/_sink.json
@@ -1,451 +1,451 @@
{
- "name": "_sink",
- "type": "registry:block",
- "description": "",
- "registryDependencies": [
- "accordion",
- "alert",
- "alert-dialog",
- "aspect-ratio",
- "avatar",
- "badge",
- "breadcrumb",
- "button",
- "calendar",
- "card",
- "carousel",
- "chart",
- "checkbox",
- "collapsible",
- "command",
- "context-menu",
- "dialog",
- "drawer",
- "dropdown-menu",
- "hover-card",
- "input",
- "input-otp",
- "label",
- "menubar",
- "navigation-menu",
- "pagination",
- "popover",
- "progress",
- "radio-group",
- "resizable",
- "scroll-area",
- "select",
- "separator",
- "sheet",
- "sidebar",
- "skeleton",
- "slider",
- "sonner",
- "switch",
- "table",
- "tabs",
- "textarea",
- "toast",
- "toggle",
- "toggle-group",
- "tooltip"
- ],
- "files": [
- {
- "path": "block/_sink/page.tsx",
- "content": "import { AccordionDemo } from '~/registry/miami/block/_sink/components/accordion-demo'\nimport { AlertDemo } from '~/registry/miami/block/_sink/components/alert-demo'\nimport { AlertDialogDemo } from '~/registry/miami/block/_sink/components/alert-dialog-demo'\nimport { AppSidebar } from '~/registry/miami/block/_sink/components/app-sidebar'\nimport { AspectRatioDemo } from '~/registry/miami/block/_sink/components/aspect-ratio-demo'\nimport { AvatarDemo } from '~/registry/miami/block/_sink/components/avatar-demo'\nimport { BadgeDemo } from '~/registry/miami/block/_sink/components/badge-demo'\nimport { BadgeDestructive } from '~/registry/miami/block/_sink/components/badge-destructive'\nimport { BadgeOutline } from '~/registry/miami/block/_sink/components/badge-outline'\nimport { BadgeSecondary } from '~/registry/miami/block/_sink/components/badge-secondary'\nimport { BreadcrumbDemo } from '~/registry/miami/block/_sink/components/breadcrumb-demo'\nimport { ButtonDemo } from '~/registry/miami/block/_sink/components/button-demo'\nimport { ButtonDestructive } from '~/registry/miami/block/_sink/components/button-destructive'\nimport { ButtonGhost } from '~/registry/miami/block/_sink/components/button-ghost'\nimport { ButtonLink } from '~/registry/miami/block/_sink/components/button-link'\nimport { ButtonLoading } from '~/registry/miami/block/_sink/components/button-loading'\nimport { ButtonOutline } from '~/registry/miami/block/_sink/components/button-outline'\nimport { ButtonSecondary } from '~/registry/miami/block/_sink/components/button-secondary'\nimport { ButtonWithIcon } from '~/registry/miami/block/_sink/components/button-with-icon'\nimport { CalendarDemo } from '~/registry/miami/block/_sink/components/calendar-demo'\nimport { CardDemo } from '~/registry/miami/block/_sink/components/card-demo'\nimport { CarouselDemo } from '~/registry/miami/block/_sink/components/carousel-demo'\nimport { CheckboxDemo } from '~/registry/miami/block/_sink/components/checkbox-demo'\nimport { CollapsibleDemo } from '~/registry/miami/block/_sink/components/collapsible-demo'\nimport { ComboboxDemo } from '~/registry/miami/block/_sink/components/combobox-demo'\nimport { CommandDemo } from '~/registry/miami/block/_sink/components/command-demo'\nimport { ComponentWrapper } from '~/registry/miami/block/_sink/components/component-wrapper'\nimport { ContextMenuDemo } from '~/registry/miami/block/_sink/components/context-menu-demo'\nimport { DatePickerDemo } from '~/registry/miami/block/_sink/components/date-picker-demo'\nimport { DialogDemo } from '~/registry/miami/block/_sink/components/dialog-demo'\nimport { DrawerDemo } from '~/registry/miami/block/_sink/components/drawer-demo'\nimport { DropdownMenuDemo } from '~/registry/miami/block/_sink/components/dropdown-menu-demo'\nimport { HoverCardDemo } from '~/registry/miami/block/_sink/components/hover-card-demo'\nimport { InputDemo } from '~/registry/miami/block/_sink/components/input-demo'\nimport { InputOTPDemo } from '~/registry/miami/block/_sink/components/input-otp-demo'\nimport { LabelDemo } from '~/registry/miami/block/_sink/components/label-demo'\nimport { MenubarDemo } from '~/registry/miami/block/_sink/components/menubar-demo'\nimport { NavigationMenuDemo } from '~/registry/miami/block/_sink/components/navigation-menu-demo'\nimport { PaginationDemo } from '~/registry/miami/block/_sink/components/pagination-demo'\nimport { PopoverDemo } from '~/registry/miami/block/_sink/components/popover-demo'\nimport { ProgressDemo } from '~/registry/miami/block/_sink/components/progress-demo'\nimport { RadioGroupDemo } from '~/registry/miami/block/_sink/components/radio-group-demo'\nimport { ResizableHandleDemo } from '~/registry/miami/block/_sink/components/resizable-handle'\nimport { ScrollAreaDemo } from '~/registry/miami/block/_sink/components/scroll-area-demo'\nimport { SelectDemo } from '~/registry/miami/block/_sink/components/select-demo'\nimport { SeparatorDemo } from '~/registry/miami/block/_sink/components/separator-demo'\nimport { SheetDemo } from '~/registry/miami/block/_sink/components/sheet-demo'\nimport { SkeletonDemo } from '~/registry/miami/block/_sink/components/skeleton-demo'\nimport { SliderDemo } from '~/registry/miami/block/_sink/components/slider-demo'\nimport { SonnerDemo } from '~/registry/miami/block/_sink/components/sonner-demo'\nimport { SwitchDemo } from '~/registry/miami/block/_sink/components/switch-demo'\nimport { TableDemo } from '~/registry/miami/block/_sink/components/table-demo'\nimport { TabsDemo } from '~/registry/miami/block/_sink/components/tabs-demo'\nimport { TextareaDemo } from '~/registry/miami/block/_sink/components/textarea-demo'\nimport { ToastDemo } from '~/registry/miami/block/_sink/components/toast-demo'\nimport { ToggleDemo } from '~/registry/miami/block/_sink/components/toggle-demo'\nimport { ToggleDisabled } from '~/registry/miami/block/_sink/components/toggle-disabled'\nimport { ToggleGroupDemo } from '~/registry/miami/block/_sink/components/toggle-group-demo'\nimport { ToggleOutline } from '~/registry/miami/block/_sink/components/toggle-outline'\nimport { ToggleWithText } from '~/registry/miami/block/_sink/components/toggle-with-text'\nimport { TooltipDemo } from '~/registry/miami/block/_sink/components/tooltip-demo'\nimport {\n Breadcrumb,\n BreadcrumbItem,\n BreadcrumbLink,\n BreadcrumbList,\n BreadcrumbPage,\n BreadcrumbSeparator,\n} from '~/registry/miami/ui/breadcrumb'\nimport { Separator } from '~/registry/miami/ui/separator'\nimport {\n SidebarInset,\n SidebarProvider,\n SidebarTrigger,\n} from '~/registry/miami/ui/sidebar'\n\nexport default function SinkPage() {\n return (\n \n \n \n \n \n
\n
\n \n \n
\n \n \n
\n \n \n
\n \n \n
\n \n \n
\n \n \n \n \n \n
\n \n \n
\n \n \n \n \n \n
\n \n \n \n \n
\n \n \n
\n \n
\n \n \n
\n \n \n
\n \n \n
\n \n \n
\n \n \n
\n \n \n
\n \n \n
\n \n \n
\n \n \n
\n \n \n
\n \n \n
\n \n \n
\n \n \n
\n \n \n
\n \n \n
\n \n \n
\n \n \n
\n \n \n
\n \n \n
\n \n \n
\n \n \n
\n \n \n
\n \n \n
\n \n \n
\n \n \n
\n \n \n
\n \n \n
\n \n \n
\n \n \n
\n \n \n
\n \n \n
\n \n \n
\n \n \n
\n \n \n
\n \n \n
\n \n \n \n \n \n
\n \n
\n \n \n
\n \n \n
\n
\n \n \n )\n}\n",
- "type": "registry:page",
- "target": "app/sink/page.tsx"
- },
- {
- "path": "block/_sink/components/app-sidebar.tsx",
- "content": "'use client'\n\nimport * as React from 'react'\nimport {\n AudioWaveform,\n BookOpen,\n Bot,\n Command,\n Frame,\n GalleryVerticalEnd,\n Map,\n PieChart,\n Settings2,\n SquareTerminal,\n} from 'lucide-react'\n\nimport { NavMain } from '~/registry/miami/block/sidebar-07/components/nav-main'\nimport { NavProjects } from '~/registry/miami/block/sidebar-07/components/nav-projects'\nimport { NavUser } from '~/registry/miami/block/sidebar-07/components/nav-user'\nimport { TeamSwitcher } from '~/registry/miami/block/sidebar-07/components/team-switcher'\nimport {\n Sidebar,\n SidebarContent,\n SidebarFooter,\n SidebarHeader,\n SidebarRail,\n} from '~/registry/miami/ui/sidebar'\n\n// This is sample data.\nconst data = {\n user: {\n name: 'shadcn',\n email: 'm@example.com',\n avatar: '/avatars/nyxb.jpg',\n },\n teams: [\n {\n name: 'Acme Inc',\n logo: GalleryVerticalEnd,\n plan: 'Enterprise',\n },\n {\n name: 'Acme Corp.',\n logo: AudioWaveform,\n plan: 'Startup',\n },\n {\n name: 'Evil Corp.',\n logo: Command,\n plan: 'Free',\n },\n ],\n navMain: [\n {\n title: 'Playground',\n url: '#',\n icon: SquareTerminal,\n isActive: true,\n items: [\n {\n title: 'History',\n url: '#',\n },\n {\n title: 'Starred',\n url: '#',\n },\n {\n title: 'Settings',\n url: '#',\n },\n ],\n },\n {\n title: 'Models',\n url: '#',\n icon: Bot,\n items: [\n {\n title: 'Genesis',\n url: '#',\n },\n {\n title: 'Explorer',\n url: '#',\n },\n {\n title: 'Quantum',\n url: '#',\n },\n ],\n },\n {\n title: 'Documentation',\n url: '#',\n icon: BookOpen,\n items: [\n {\n title: 'Introduction',\n url: '#',\n },\n {\n title: 'Get Started',\n url: '#',\n },\n {\n title: 'Tutorials',\n url: '#',\n },\n {\n title: 'Changelog',\n url: '#',\n },\n ],\n },\n {\n title: 'Settings',\n url: '#',\n icon: Settings2,\n items: [\n {\n title: 'General',\n url: '#',\n },\n {\n title: 'Team',\n url: '#',\n },\n {\n title: 'Billing',\n url: '#',\n },\n {\n title: 'Limits',\n url: '#',\n },\n ],\n },\n ],\n projects: [\n {\n name: 'Design Engineering',\n url: '#',\n icon: Frame,\n },\n {\n name: 'Sales & Marketing',\n url: '#',\n icon: PieChart,\n },\n {\n name: 'Travel',\n url: '#',\n icon: Map,\n },\n ],\n}\n\nexport function AppSidebar({ ...props }: React.ComponentProps) {\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n )\n}\n",
- "type": "registry:component",
- "target": ""
- },
- {
- "path": "block/_sink/components/component-wrapper.tsx",
- "content": "import { ny } from '~/registry/miami/lib/utils'\n\nexport function ComponentWrapper({\n className,\n name,\n children,\n ...props\n}: React.ComponentPropsWithoutRef<'div'> & { name: string }) {\n return (\n \n
\n
div]:max-w-full\">\n {children}\n
\n
\n )\n}\n",
- "type": "registry:component",
- "target": ""
- },
- {
- "path": "block/_sink/components/nav-main.tsx",
- "content": "'use client'\n\nimport { ChevronRight, type LucideIcon } from 'lucide-react'\n\nimport {\n Collapsible,\n CollapsibleContent,\n CollapsibleTrigger,\n} from '~/registry/miami/ui/collapsible'\nimport {\n SidebarGroup,\n SidebarGroupLabel,\n SidebarMenu,\n SidebarMenuButton,\n SidebarMenuItem,\n SidebarMenuSub,\n SidebarMenuSubButton,\n SidebarMenuSubItem,\n} from '~/registry/miami/ui/sidebar'\n\nexport function NavMain({\n items,\n}: {\n items: {\n title: string\n url: string\n icon?: LucideIcon\n isActive?: boolean\n items?: {\n title: string\n url: string\n }[]\n }[]\n}) {\n return (\n \n Platform \n \n {items.map(item => (\n \n \n \n \n {item.icon && }\n {item.title} \n \n \n \n \n \n {item.items?.map(subItem => (\n \n \n \n {subItem.title} \n \n \n \n ))}\n \n \n \n \n ))}\n \n \n )\n}\n",
- "type": "registry:component",
- "target": ""
- },
- {
- "path": "block/_sink/components/nav-projects.tsx",
- "content": "'use client'\n\nimport {\n Folder,\n Forward,\n type LucideIcon,\n MoreHorizontal,\n Trash2,\n} from 'lucide-react'\n\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuSeparator,\n DropdownMenuTrigger,\n} from '~/registry/miami/ui/dropdown-menu'\nimport {\n SidebarGroup,\n SidebarGroupLabel,\n SidebarMenu,\n SidebarMenuAction,\n SidebarMenuButton,\n SidebarMenuItem,\n useSidebar,\n} from '~/registry/miami/ui/sidebar'\n\nexport function NavProjects({\n projects,\n}: {\n projects: {\n name: string\n url: string\n icon: LucideIcon\n }[]\n}) {\n const { isMobile } = useSidebar()\n\n return (\n \n Projects \n \n {projects.map(item => (\n \n \n \n \n {item.name} \n \n \n \n \n \n \n More \n \n \n \n \n \n View Project \n \n \n \n Share Project \n \n \n \n \n Delete Project \n \n \n \n \n ))}\n \n \n \n More \n \n \n \n \n )\n}\n",
- "type": "registry:component",
- "target": ""
- },
- {
- "path": "block/_sink/components/nav-user.tsx",
- "content": "'use client'\n\nimport {\n BadgeCheck,\n Bell,\n ChevronsUpDown,\n CreditCard,\n LogOut,\n Sparkles,\n} from 'lucide-react'\n\nimport {\n Avatar,\n AvatarFallback,\n AvatarImage,\n} from '~/registry/miami/ui/avatar'\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuGroup,\n DropdownMenuItem,\n DropdownMenuLabel,\n DropdownMenuSeparator,\n DropdownMenuTrigger,\n} from '~/registry/miami/ui/dropdown-menu'\nimport {\n SidebarMenu,\n SidebarMenuButton,\n SidebarMenuItem,\n useSidebar,\n} from '~/registry/miami/ui/sidebar'\n\nexport function NavUser({\n user,\n}: {\n user: {\n name: string\n email: string\n avatar: string\n }\n}) {\n const { isMobile } = useSidebar()\n\n return (\n \n \n \n \n \n \n \n CN \n \n \n {user.name} \n {user.email} \n
\n \n \n \n \n \n \n
\n \n CN \n \n
\n {user.name} \n {user.email} \n
\n
\n \n \n \n \n \n Upgrade to Pro\n \n \n \n \n \n \n Account\n \n \n \n Billing\n \n \n \n Notifications\n \n \n \n \n \n Log out\n \n \n \n \n \n )\n}\n",
- "type": "registry:component",
- "target": ""
- },
- {
- "path": "block/_sink/components/team-switcher.tsx",
- "content": "'use client'\n\nimport * as React from 'react'\nimport { ChevronsUpDown, Plus } from 'lucide-react'\n\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuLabel,\n DropdownMenuSeparator,\n DropdownMenuShortcut,\n DropdownMenuTrigger,\n} from '~/registry/miami/ui/dropdown-menu'\nimport {\n SidebarMenu,\n SidebarMenuButton,\n SidebarMenuItem,\n useSidebar,\n} from '~/registry/miami/ui/sidebar'\n\nexport function TeamSwitcher({\n teams,\n}: {\n teams: {\n name: string\n logo: React.ElementType\n plan: string\n }[]\n}) {\n const { isMobile } = useSidebar()\n const [activeTeam, setActiveTeam] = React.useState(teams[0])\n\n return (\n \n \n \n \n \n \n \n \n {activeTeam.name}\n \n {activeTeam.plan} \n
\n \n \n \n \n \n Teams\n \n {teams.map((team, index) => (\n setActiveTeam(team)}\n className=\"gap-2 p-2\"\n >\n \n \n
\n {team.name}\n \n ⌘\n {index + 1}\n \n \n ))}\n \n \n \n Add team
\n \n \n \n \n \n )\n}\n",
- "type": "registry:component",
- "target": ""
- },
- {
- "path": "block/_sink/components/accordion-demo.tsx",
- "content": "import {\n Accordion,\n AccordionContent,\n AccordionItem,\n AccordionTrigger,\n} from '~/registry/miami/ui/accordion'\n\nexport function AccordionDemo() {\n return (\n \n \n Is it accessible? \n \n Yes. It adheres to the WAI-ARIA design pattern.\n \n \n \n Is it styled? \n \n Yes. It comes with default styles that matches the other\n components' aesthetic.\n \n \n \n Is it animated? \n \n Yes. It's animated by default, but you can disable it if you prefer.\n \n \n \n )\n}\n",
- "type": "registry:component",
- "target": ""
- },
- {
- "path": "block/_sink/components/alert-demo.tsx",
- "content": "import { Terminal } from 'lucide-react'\n\nimport {\n Alert,\n AlertDescription,\n AlertTitle,\n} from '~/registry/miami/ui/alert'\n\nexport function AlertDemo() {\n return (\n \n \n Heads up! \n \n You can add components to your app using the cli.\n \n \n )\n}\n",
- "type": "registry:component",
- "target": ""
- },
- {
- "path": "block/_sink/components/alert-dialog-demo.tsx",
- "content": "import {\n AlertDialog,\n AlertDialogAction,\n AlertDialogCancel,\n AlertDialogContent,\n AlertDialogDescription,\n AlertDialogFooter,\n AlertDialogHeader,\n AlertDialogTitle,\n AlertDialogTrigger,\n} from '~/registry/miami/ui/alert-dialog'\nimport { Button } from '~/registry/miami/ui/button'\n\nexport function AlertDialogDemo() {\n return (\n \n \n Show Dialog \n \n \n \n Are you absolutely sure? \n \n This action cannot be undone. This will permanently delete your\n account and remove your data from our servers.\n \n \n \n Cancel \n Continue \n \n \n \n )\n}\n",
- "type": "registry:component",
- "target": ""
- },
- {
- "path": "block/_sink/components/aspect-ratio-demo.tsx",
- "content": "import Image from 'next/image'\n\nimport { AspectRatio } from '~/registry/miami/ui/aspect-ratio'\n\nexport function AspectRatioDemo() {\n return (\n \n \n \n )\n}\n",
- "type": "registry:component",
- "target": ""
- },
- {
- "path": "block/_sink/components/avatar-demo.tsx",
- "content": "import {\n Avatar,\n AvatarFallback,\n AvatarImage,\n} from '~/registry/miami/ui/avatar'\n\nexport function AvatarDemo() {\n return (\n \n \n CN \n \n )\n}\n",
- "type": "registry:component",
- "target": ""
- },
- {
- "path": "block/_sink/components/badge-demo.tsx",
- "content": "import { Badge } from '~/registry/miami/ui/badge'\n\nexport function BadgeDemo() {\n return Badge \n}\n",
- "type": "registry:component",
- "target": ""
- },
- {
- "path": "block/_sink/components/breadcrumb-demo.tsx",
- "content": "import {\n Breadcrumb,\n BreadcrumbEllipsis,\n BreadcrumbItem,\n BreadcrumbLink,\n BreadcrumbList,\n BreadcrumbPage,\n BreadcrumbSeparator,\n} from '~/registry/miami/ui/breadcrumb'\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuTrigger,\n} from '~/registry/miami/ui/dropdown-menu'\n\nexport function BreadcrumbDemo() {\n return (\n \n \n \n Home \n \n \n \n \n \n \n Toggle menu \n \n \n Documentation \n Themes \n GitHub \n \n \n \n \n \n Components \n \n \n \n Breadcrumb \n \n \n \n )\n}\n",
- "type": "registry:component",
- "target": ""
- },
- {
- "path": "block/_sink/components/button-demo.tsx",
- "content": "import { Button } from '~/registry/miami/ui/button'\n\nexport function ButtonDemo() {\n return Button \n}\n",
- "type": "registry:component",
- "target": ""
- },
- {
- "path": "block/_sink/components/calendar-demo.tsx",
- "content": "'use client'\n\nimport * as React from 'react'\n\nimport { Calendar } from '~/registry/miami/ui/calendar'\n\nexport function CalendarDemo() {\n const [date, setDate] = React.useState(new Date())\n\n return (\n \n )\n}\n",
- "type": "registry:component",
- "target": ""
- },
- {
- "path": "block/_sink/components/card-demo.tsx",
- "content": "import { BellRing, Check } from 'lucide-react'\n\nimport { ny } from '~/lib/utils'\nimport { Button } from '~/registry/miami/ui/button'\nimport {\n Card,\n CardContent,\n CardDescription,\n CardFooter,\n CardHeader,\n CardTitle,\n} from '~/registry/miami/ui/card'\nimport { Switch } from '~/registry/miami/ui/switch'\n\nconst notifications = [\n {\n title: 'Your call has been confirmed.',\n description: '1 hour ago',\n },\n {\n title: 'You have a new message!',\n description: '1 hour ago',\n },\n {\n title: 'Your subscription is expiring soon!',\n description: '2 hours ago',\n },\n]\n\ntype CardProps = React.ComponentProps\n\nexport function CardDemo({ className, ...props }: CardProps) {\n return (\n \n \n Notifications \n You have 3 unread messages. \n \n \n \n
\n
\n
\n Push Notifications\n
\n
\n Send notifications to device.\n
\n
\n
\n
\n \n {notifications.map((notification, index) => (\n
\n
\n
\n
\n {notification.title}\n
\n
\n {notification.description}\n
\n
\n
\n ))}\n
\n \n \n \n \n {' '}\n Mark all as read\n \n \n \n )\n}\n",
- "type": "registry:component",
- "target": ""
- },
- {
- "path": "block/_sink/components/carousel-demo.tsx",
- "content": "import * as React from 'react'\n\nimport { Card, CardContent } from '~/registry/miami/ui/card'\nimport {\n Carousel,\n CarouselContent,\n CarouselItem,\n CarouselNext,\n CarouselPrevious,\n} from '~/registry/miami/ui/carousel'\n\nexport function CarouselDemo() {\n return (\n \n \n {Array.from({ length: 5 }).map((_, index) => (\n \n \n \n \n {index + 1} \n \n \n
\n \n ))}\n \n \n \n \n )\n}\n",
- "type": "registry:component",
- "target": ""
- },
- {
- "path": "block/_sink/components/checkbox-demo.tsx",
- "content": "'use client'\n\nimport { Checkbox } from '~/registry/miami/ui/checkbox'\n\nexport function CheckboxDemo() {\n return (\n \n \n \n Accept terms and conditions\n \n
\n )\n}\n",
- "type": "registry:component",
- "target": ""
- },
- {
- "path": "block/_sink/components/collapsible-demo.tsx",
- "content": "'use client'\n\nimport * as React from 'react'\nimport { ChevronsUpDown } from 'lucide-react'\n\nimport { Button } from '~/registry/miami/ui/button'\nimport {\n Collapsible,\n CollapsibleContent,\n CollapsibleTrigger,\n} from '~/registry/miami/ui/collapsible'\n\nexport function CollapsibleDemo() {\n const [isOpen, setIsOpen] = React.useState(false)\n\n return (\n \n \n
\n @peduarte starred 3 repositories\n \n \n \n \n Toggle \n \n \n \n \n @radix-ui/primitives\n
\n \n \n @radix-ui/colors\n
\n \n @stitches/react\n
\n \n \n )\n}\n",
- "type": "registry:component",
- "target": ""
- },
- {
- "path": "block/_sink/components/combobox-demo.tsx",
- "content": "'use client'\n\nimport * as React from 'react'\nimport { Check, ChevronsUpDown } from 'lucide-react'\n\nimport { ny } from '~/lib/utils'\nimport { Button } from '~/registry/miami/ui/button'\nimport {\n Command,\n CommandEmpty,\n CommandGroup,\n CommandInput,\n CommandItem,\n CommandList,\n} from '~/registry/miami/ui/command'\nimport {\n Popover,\n PopoverContent,\n PopoverTrigger,\n} from '~/registry/miami/ui/popover'\n\nconst frameworks = [\n {\n value: 'next.js',\n label: 'Next.js',\n },\n {\n value: 'sveltekit',\n label: 'SvelteKit',\n },\n {\n value: 'nuxt.js',\n label: 'Nuxt.js',\n },\n {\n value: 'remix',\n label: 'Remix',\n },\n {\n value: 'astro',\n label: 'Astro',\n },\n]\n\nexport function ComboboxDemo() {\n const [open, setOpen] = React.useState(false)\n const [value, setValue] = React.useState('')\n\n return (\n \n \n \n {value\n ? frameworks.find(framework => framework.value === value)?.label\n : 'Select framework...'}\n \n \n \n \n \n \n \n No framework found. \n \n {frameworks.map(framework => (\n {\n setValue(currentValue === value ? '' : currentValue)\n setOpen(false)\n }}\n >\n {framework.label}\n \n \n ))}\n \n \n \n \n \n )\n}\n",
- "type": "registry:component",
- "target": ""
- },
- {
- "path": "block/_sink/components/command-demo.tsx",
- "content": "import {\n Calculator,\n Calendar,\n CreditCard,\n Settings,\n Smile,\n User,\n} from 'lucide-react'\n\nimport {\n Command,\n CommandEmpty,\n CommandGroup,\n CommandInput,\n CommandItem,\n CommandList,\n CommandSeparator,\n CommandShortcut,\n} from '~/registry/miami/ui/command'\n\nexport function CommandDemo() {\n return (\n \n \n \n No results found. \n \n \n \n Calendar \n \n \n \n Search Emoji \n \n \n \n Calculator \n \n \n \n \n \n \n Profile \n ⌘P \n \n \n \n Billing \n ⌘B \n \n \n \n Settings \n ⌘S \n \n \n \n \n )\n}\n",
- "type": "registry:component",
- "target": ""
- },
- {
- "path": "block/_sink/components/context-menu-demo.tsx",
- "content": "import {\n ContextMenu,\n ContextMenuCheckboxItem,\n ContextMenuContent,\n ContextMenuItem,\n ContextMenuLabel,\n ContextMenuRadioGroup,\n ContextMenuRadioItem,\n ContextMenuSeparator,\n ContextMenuShortcut,\n ContextMenuSub,\n ContextMenuSubContent,\n ContextMenuSubTrigger,\n ContextMenuTrigger,\n} from '~/registry/miami/ui/context-menu'\n\nexport function ContextMenuDemo() {\n return (\n \n \n Right click here\n \n \n \n Back\n ⌘[ \n \n \n Forward\n ⌘] \n \n \n Reload\n ⌘R \n \n \n More Tools \n \n \n Save Page As...\n ⇧⌘S \n \n Create Shortcut... \n Name Window... \n \n Developer Tools \n \n \n \n \n Show Bookmarks Bar\n ⌘⇧B \n \n Show Full URLs \n \n \n People \n \n \n Pedro Duarte\n \n Colm Tuite \n \n \n \n )\n}\n",
- "type": "registry:component",
- "target": ""
- },
- {
- "path": "block/_sink/components/date-picker-demo.tsx",
- "content": "'use client'\n\nimport * as React from 'react'\nimport { format } from 'date-fns'\nimport { CalendarIcon } from 'lucide-react'\n\nimport { ny } from '~/lib/utils'\nimport { Button } from '~/registry/miami/ui/button'\nimport { Calendar } from '~/registry/miami/ui/calendar'\nimport {\n Popover,\n PopoverContent,\n PopoverTrigger,\n} from '~/registry/miami/ui/popover'\n\nexport function DatePickerDemo() {\n const [date, setDate] = React.useState()\n\n return (\n \n \n \n \n {date ? format(date, 'PPP') : Pick a date }\n \n \n \n \n \n \n )\n}\n",
- "type": "registry:component",
- "target": ""
- },
- {
- "path": "block/_sink/components/dialog-demo.tsx",
- "content": "import { Button } from '~/registry/miami/ui/button'\nimport {\n Dialog,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogTitle,\n DialogTrigger,\n} from '~/registry/miami/ui/dialog'\nimport { Input } from '~/registry/miami/ui/input'\nimport { Label } from '~/registry/miami/ui/label'\n\nexport function DialogDemo() {\n return (\n \n \n Edit Profile \n \n \n \n Edit profile \n \n Make changes to your profile here. Click save when you're done.\n \n \n \n \n Save changes \n \n \n \n )\n}\n",
- "type": "registry:component",
- "target": ""
- },
- {
- "path": "block/_sink/components/drawer-demo.tsx",
- "content": "'use client'\n\nimport * as React from 'react'\nimport { Minus, Plus } from 'lucide-react'\nimport { Bar, BarChart, ResponsiveContainer } from 'recharts'\n\nimport { Button } from '~/registry/miami/ui/button'\nimport {\n Drawer,\n DrawerClose,\n DrawerContent,\n DrawerDescription,\n DrawerFooter,\n DrawerHeader,\n DrawerTitle,\n DrawerTrigger,\n} from '~/registry/miami/ui/drawer'\n\nconst data = [\n {\n goal: 400,\n },\n {\n goal: 300,\n },\n {\n goal: 200,\n },\n {\n goal: 300,\n },\n {\n goal: 200,\n },\n {\n goal: 278,\n },\n {\n goal: 189,\n },\n {\n goal: 239,\n },\n {\n goal: 300,\n },\n {\n goal: 200,\n },\n {\n goal: 278,\n },\n {\n goal: 189,\n },\n {\n goal: 349,\n },\n]\n\nexport function DrawerDemo() {\n const [goal, setGoal] = React.useState(350)\n\n function onClick(adjustment: number) {\n setGoal(Math.max(200, Math.min(400, goal + adjustment)))\n }\n\n return (\n \n \n Open Drawer \n \n \n \n
\n Move Goal \n Set your daily activity goal. \n \n
\n
\n
onClick(-10)}\n disabled={goal <= 200}\n >\n \n Decrease \n \n
\n
\n {goal}\n
\n
\n Calories/day\n
\n
\n
onClick(10)}\n disabled={goal >= 400}\n >\n \n Increase \n \n
\n
\n \n \n \n \n \n
\n
\n
\n Submit \n \n Cancel \n \n \n
\n \n \n )\n}\n",
- "type": "registry:component",
- "target": ""
- },
- {
- "path": "block/_sink/components/dropdown-menu-demo.tsx",
- "content": "import { Button } from '~/registry/miami/ui/button'\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuGroup,\n DropdownMenuItem,\n DropdownMenuLabel,\n DropdownMenuPortal,\n DropdownMenuSeparator,\n DropdownMenuShortcut,\n DropdownMenuSub,\n DropdownMenuSubContent,\n DropdownMenuSubTrigger,\n DropdownMenuTrigger,\n} from '~/registry/miami/ui/dropdown-menu'\n\nexport function DropdownMenuDemo() {\n return (\n \n \n Open \n \n \n My Account \n \n \n \n Profile\n ⇧⌘P \n \n \n Billing\n ⌘B \n \n \n Settings\n ⌘S \n \n \n Keyboard shortcuts\n ⌘K \n \n \n \n \n Team \n \n Invite users \n \n \n Email \n Message \n \n More... \n \n \n \n \n New Team\n ⌘+T \n \n \n \n GitHub \n Support \n API \n \n \n Log out\n ⇧⌘Q \n \n \n \n )\n}\n",
- "type": "registry:component",
- "target": ""
- },
- {
- "path": "block/_sink/components/hover-card-demo.tsx",
- "content": "import { CalendarIcon } from 'lucide-react'\n\nimport {\n Avatar,\n AvatarFallback,\n AvatarImage,\n} from '~/registry/miami/ui/avatar'\nimport { Button } from '~/registry/miami/ui/button'\nimport {\n HoverCard,\n HoverCardContent,\n HoverCardTrigger,\n} from '~/registry/miami/ui/hover-card'\n\nexport function HoverCardDemo() {\n return (\n \n \n @nextjs \n \n \n \n
\n \n VC \n \n
\n
@nextjs \n
\n The React Framework – created and maintained by @vercel.\n
\n
\n \n {' '}\n \n Joined December 2021\n \n
\n
\n
\n \n \n )\n}\n",
- "type": "registry:component",
- "target": ""
- },
- {
- "path": "block/_sink/components/input-demo.tsx",
- "content": "import { Input } from '~/registry/miami/ui/input'\n\nexport function InputDemo() {\n return \n}\n",
- "type": "registry:component",
- "target": ""
- },
- {
- "path": "block/_sink/components/input-otp-demo.tsx",
- "content": "import {\n InputOTP,\n InputOTPGroup,\n InputOTPSeparator,\n InputOTPSlot,\n} from '~/registry/miami/ui/input-otp'\n\nexport function InputOTPDemo() {\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n )\n}\n",
- "type": "registry:component",
- "target": ""
- },
- {
- "path": "block/_sink/components/label-demo.tsx",
- "content": "import { Checkbox } from '~/registry/miami/ui/checkbox'\nimport { Label } from '~/registry/miami/ui/label'\n\nexport function LabelDemo() {\n return (\n \n
\n \n Accept terms and conditions \n
\n
\n )\n}\n",
- "type": "registry:component",
- "target": ""
- },
- {
- "path": "block/_sink/components/menubar-demo.tsx",
- "content": "import {\n Menubar,\n MenubarCheckboxItem,\n MenubarContent,\n MenubarItem,\n MenubarMenu,\n MenubarRadioGroup,\n MenubarRadioItem,\n MenubarSeparator,\n MenubarShortcut,\n MenubarSub,\n MenubarSubContent,\n MenubarSubTrigger,\n MenubarTrigger,\n} from '~/registry/miami/ui/menubar'\n\nexport function MenubarDemo() {\n return (\n \n \n File \n \n \n New Tab\n {' '}\n ⌘T \n \n \n New Window\n {' '}\n ⌘N \n \n New Incognito Window \n \n \n Share \n \n Email link \n Messages \n Notes \n \n \n \n \n Print...\n {' '}\n ⌘P \n \n \n \n \n Edit \n \n \n Undo\n {' '}\n ⌘Z \n \n \n Redo\n {' '}\n ⇧⌘Z \n \n \n \n Find \n \n Search the web \n \n Find... \n Find Next \n Find Previous \n \n \n \n Cut \n Copy \n Paste \n \n \n \n View \n \n Always Show Bookmarks Bar \n \n Always Show Full URLs\n \n \n \n Reload\n {' '}\n ⌘R \n \n \n Force Reload\n {' '}\n ⇧⌘R \n \n \n Toggle Fullscreen \n \n Hide Sidebar \n \n \n \n Profiles \n \n \n Andy \n Benoit \n Luis \n \n \n Edit... \n \n Add Profile... \n \n \n \n )\n}\n",
- "type": "registry:component",
- "target": ""
- },
- {
- "path": "block/_sink/components/navigation-menu-demo.tsx",
- "content": "'use client'\n\nimport * as React from 'react'\nimport Link from 'next/link'\n\nimport { ny } from '~/lib/utils'\nimport {\n NavigationMenu,\n NavigationMenuContent,\n NavigationMenuItem,\n NavigationMenuLink,\n NavigationMenuList,\n NavigationMenuTrigger,\n navigationMenuTriggerStyle,\n} from '~/registry/miami/ui/navigation-menu'\n\nconst components: { title: string, href: string, description: string }[] = [\n {\n title: 'Alert Dialog',\n href: '/docs/primitives/alert-dialog',\n description:\n 'A modal dialog that interrupts the user with important content and expects a response.',\n },\n {\n title: 'Hover Card',\n href: '/docs/primitives/hover-card',\n description:\n 'For sighted users to preview content available behind a link.',\n },\n {\n title: 'Progress',\n href: '/docs/primitives/progress',\n description:\n 'Displays an indicator showing the completion progress of a task, typically displayed as a progress bar.',\n },\n {\n title: 'Scroll-area',\n href: '/docs/primitives/scroll-area',\n description: 'Visually or semantically separates content.',\n },\n {\n title: 'Tabs',\n href: '/docs/primitives/tabs',\n description:\n 'A set of layered sections of content—known as tab panels—that are displayed one at a time.',\n },\n {\n title: 'Tooltip',\n href: '/docs/primitives/tooltip',\n description:\n 'A popup that displays information related to an element when the element receives keyboard focus or the mouse hovers over it.',\n },\n]\n\nexport function NavigationMenuDemo() {\n return (\n \n \n \n Getting started \n \n \n \n \n \n Components \n \n \n {components.map(component => (\n \n {component.description}\n \n ))}\n \n \n \n \n \n \n Documentation\n \n \n \n \n \n )\n}\n\nconst ListItem = React.forwardRef<\n React.ElementRef<'a'>,\n React.ComponentPropsWithoutRef<'a'>\n>(({ className, title, children, ...props }, ref) => {\n return (\n \n \n \n {title}
\n \n {children}\n
\n \n \n \n )\n})\nListItem.displayName = 'ListItem'\n",
- "type": "registry:component",
- "target": ""
- },
- {
- "path": "block/_sink/components/pagination-demo.tsx",
- "content": "import {\n Pagination,\n PaginationContent,\n PaginationEllipsis,\n PaginationItem,\n PaginationLink,\n PaginationNext,\n PaginationPrevious,\n} from '~/registry/miami/ui/pagination'\n\nexport function PaginationDemo() {\n return (\n \n \n \n \n \n \n 1 \n \n \n \n 2\n \n \n \n 3 \n \n \n \n \n \n \n \n \n \n )\n}\n",
- "type": "registry:component",
- "target": ""
- },
- {
- "path": "block/_sink/components/popover-demo.tsx",
- "content": "import { Button } from '~/registry/miami/ui/button'\nimport { Input } from '~/registry/miami/ui/input'\nimport { Label } from '~/registry/miami/ui/label'\nimport {\n Popover,\n PopoverContent,\n PopoverTrigger,\n} from '~/registry/miami/ui/popover'\n\nexport function PopoverDemo() {\n return (\n \n \n Open popover \n \n \n \n
\n
Dimensions \n
\n Set the dimensions for the layer.\n
\n
\n
\n
\n \n \n )\n}\n",
- "type": "registry:component",
- "target": ""
- },
- {
- "path": "block/_sink/components/progress-demo.tsx",
- "content": "'use client'\n\nimport * as React from 'react'\n\nimport { Progress } from '~/registry/miami/ui/progress'\n\nexport function ProgressDemo() {\n const [progress, setProgress] = React.useState(13)\n\n React.useEffect(() => {\n const timer = setTimeout(() => setProgress(66), 500)\n return () => clearTimeout(timer)\n }, [])\n\n return \n}\n",
- "type": "registry:component",
- "target": ""
- },
- {
- "path": "block/_sink/components/radio-group-demo.tsx",
- "content": "import { Label } from '~/registry/miami/ui/label'\nimport { RadioGroup, RadioGroupItem } from '~/registry/miami/ui/radio-group'\n\nexport function RadioGroupDemo() {\n return (\n \n \n \n Default \n
\n \n \n Comfortable \n
\n \n \n Compact \n
\n \n )\n}\n",
- "type": "registry:component",
- "target": ""
- },
- {
- "path": "block/_sink/components/resizable-handle.tsx",
- "content": "import {\n ResizableHandle,\n ResizablePanel,\n ResizablePanelGroup,\n} from '~/registry/miami/ui/resizable'\n\nexport function ResizableHandleDemo() {\n return (\n \n \n \n Sidebar \n
\n \n \n \n \n Content \n
\n \n \n )\n}\n",
- "type": "registry:component",
- "target": ""
- },
- {
- "path": "block/_sink/components/scroll-area-demo.tsx",
- "content": "import * as React from 'react'\n\nimport { ScrollArea } from '~/registry/miami/ui/scroll-area'\nimport { Separator } from '~/registry/miami/ui/separator'\n\nconst tags = Array.from({ length: 50 }).map(\n (_, i, a) => `v1.2.0-beta.${a.length - i}`,\n)\n\nexport function ScrollAreaDemo() {\n return (\n \n \n
Tags \n {tags.map(tag => (\n
\n {tag}
\n \n \n ))}\n
\n \n )\n}\n",
- "type": "registry:component",
- "target": ""
- },
- {
- "path": "block/_sink/components/select-demo.tsx",
- "content": "import * as React from 'react'\n\nimport {\n Select,\n SelectContent,\n SelectGroup,\n SelectItem,\n SelectLabel,\n SelectTrigger,\n SelectValue,\n} from '~/registry/miami/ui/select'\n\nexport function SelectDemo() {\n return (\n \n \n \n \n \n \n Fruits \n Apple \n Banana \n Blueberry \n Grapes \n Pineapple \n \n \n \n )\n}\n",
- "type": "registry:component",
- "target": ""
- },
- {
- "path": "block/_sink/components/separator-demo.tsx",
- "content": "import { Separator } from '~/registry/miami/ui/separator'\n\nexport function SeparatorDemo() {\n return (\n \n
\n
Radix Primitives \n
\n An open-source UI component library.\n
\n
\n
\n
\n
Blog
\n
\n
Docs
\n
\n
Source
\n
\n
\n )\n}\n",
- "type": "registry:component",
- "target": ""
- },
- {
- "path": "block/_sink/components/sheet-demo.tsx",
- "content": "import { Button } from '~/registry/miami/ui/button'\nimport { Input } from '~/registry/miami/ui/input'\nimport { Label } from '~/registry/miami/ui/label'\nimport {\n Sheet,\n SheetClose,\n SheetContent,\n SheetDescription,\n SheetFooter,\n SheetHeader,\n SheetTitle,\n SheetTrigger,\n} from '~/registry/miami/ui/sheet'\n\nexport function SheetDemo() {\n return (\n \n \n Open \n \n \n \n Edit profile \n \n Make changes to your profile here. Click save when you're done.\n \n \n \n \n \n Save changes \n \n \n \n \n )\n}\n",
- "type": "registry:component",
- "target": ""
- },
- {
- "path": "block/_sink/components/skeleton-demo.tsx",
- "content": "import { Skeleton } from '~/registry/miami/ui/skeleton'\n\nexport function SkeletonDemo() {\n return (\n \n )\n}\n",
- "type": "registry:component",
- "target": ""
- },
- {
- "path": "block/_sink/components/slider-demo.tsx",
- "content": "import { ny } from '~/lib/utils'\nimport { Slider } from '~/registry/miami/ui/slider'\n\ntype SliderProps = React.ComponentProps\n\nexport function SliderDemo({ className, ...props }: SliderProps) {\n return (\n \n )\n}\n",
- "type": "registry:component",
- "target": ""
- },
- {
- "path": "block/_sink/components/sonner-demo.tsx",
- "content": "'use client'\n\nimport { toast } from 'sonner'\n\nimport { Button } from '~/registry/miami/ui/button'\n\nexport function SonnerDemo() {\n return (\n \n toast('Event has been created', {\n description: 'Sunday, December 03, 2023 at 9:00 AM',\n action: {\n label: 'Undo',\n // eslint-disable-next-line no-console\n onClick: () => console.log('Undo'),\n },\n })}\n >\n Show Toast\n \n )\n}\n",
- "type": "registry:component",
- "target": ""
- },
- {
- "path": "block/_sink/components/switch-demo.tsx",
- "content": "import { Label } from '~/registry/miami/ui/label'\nimport { Switch } from '~/registry/miami/ui/switch'\n\nexport function SwitchDemo() {\n return (\n \n \n Airplane Mode \n
\n )\n}\n",
- "type": "registry:component",
- "target": ""
- },
- {
- "path": "block/_sink/components/table-demo.tsx",
- "content": "import {\n Table,\n TableBody,\n TableCaption,\n TableCell,\n TableFooter,\n TableHead,\n TableHeader,\n TableRow,\n} from '~/registry/miami/ui/table'\n\nconst invoices = [\n {\n invoice: 'INV001',\n paymentStatus: 'Paid',\n totalAmount: '$250.00',\n paymentMethod: 'Credit Card',\n },\n {\n invoice: 'INV002',\n paymentStatus: 'Pending',\n totalAmount: '$150.00',\n paymentMethod: 'PayPal',\n },\n {\n invoice: 'INV003',\n paymentStatus: 'Unpaid',\n totalAmount: '$350.00',\n paymentMethod: 'Bank Transfer',\n },\n {\n invoice: 'INV004',\n paymentStatus: 'Paid',\n totalAmount: '$450.00',\n paymentMethod: 'Credit Card',\n },\n {\n invoice: 'INV005',\n paymentStatus: 'Paid',\n totalAmount: '$550.00',\n paymentMethod: 'PayPal',\n },\n {\n invoice: 'INV006',\n paymentStatus: 'Pending',\n totalAmount: '$200.00',\n paymentMethod: 'Bank Transfer',\n },\n {\n invoice: 'INV007',\n paymentStatus: 'Unpaid',\n totalAmount: '$300.00',\n paymentMethod: 'Credit Card',\n },\n]\n\nexport function TableDemo() {\n return (\n \n A list of your recent invoices. \n \n \n Invoice \n Status \n Method \n Amount \n \n \n \n {invoices.map(invoice => (\n \n {invoice.invoice} \n {invoice.paymentStatus} \n {invoice.paymentMethod} \n {invoice.totalAmount} \n \n ))}\n \n \n \n Total \n $2,500.00 \n \n \n
\n )\n}\n",
- "type": "registry:component",
- "target": ""
- },
- {
- "path": "block/_sink/components/tabs-demo.tsx",
- "content": "import { Button } from '~/registry/miami/ui/button'\nimport {\n Card,\n CardContent,\n CardDescription,\n CardFooter,\n CardHeader,\n CardTitle,\n} from '~/registry/miami/ui/card'\nimport { Input } from '~/registry/miami/ui/input'\nimport { Label } from '~/registry/miami/ui/label'\nimport {\n Tabs,\n TabsContent,\n TabsList,\n TabsTrigger,\n} from '~/registry/miami/ui/tabs'\n\nexport function TabsDemo() {\n return (\n \n \n Account \n Password \n \n \n \n \n Account \n \n Make changes to your account here. Click save when you're done.\n \n \n \n \n Name \n \n
\n \n Username \n \n
\n \n \n Save changes \n \n \n \n \n \n \n Password \n \n Change your password here. After saving, you'll be logged out.\n \n \n \n \n Current password \n \n
\n \n New password \n \n
\n \n \n Save password \n \n \n \n \n )\n}\n",
- "type": "registry:component",
- "target": ""
- },
- {
- "path": "block/_sink/components/textarea-demo.tsx",
- "content": "import { Textarea } from '~/registry/miami/ui/textarea'\n\nexport function TextareaDemo() {\n return \n}\n",
- "type": "registry:component",
- "target": ""
- },
- {
- "path": "block/_sink/components/toast-demo.tsx",
- "content": "'use client'\n\nimport { useToast } from '~/registry/miami/hooks/use-toast'\nimport { Button } from '~/registry/miami/ui/button'\nimport { ToastAction } from '~/registry/miami/ui/toast'\n\nexport function ToastDemo() {\n const { toast } = useToast()\n\n return (\n {\n toast({\n title: 'Scheduled: Catch up ',\n description: 'Friday, February 10, 2023 at 5:57 PM',\n action: (\n Undo \n ),\n })\n }}\n >\n Add to calendar\n \n )\n}\n",
- "type": "registry:component",
- "target": ""
- },
- {
- "path": "block/_sink/components/toggle-demo.tsx",
- "content": "import { Bold } from 'lucide-react'\n\nimport { Toggle } from '~/registry/miami/ui/toggle'\n\nexport function ToggleDemo() {\n return (\n \n \n \n )\n}\n",
- "type": "registry:component",
- "target": ""
- },
- {
- "path": "block/_sink/components/toggle-group-demo.tsx",
- "content": "import { Bold, Italic, Underline } from 'lucide-react'\n\nimport {\n ToggleGroup,\n ToggleGroupItem,\n} from '~/registry/miami/ui/toggle-group'\n\nexport function ToggleGroupDemo() {\n return (\n \n \n \n \n \n \n \n \n \n \n \n )\n}\n",
- "type": "registry:component",
- "target": ""
- },
- {
- "path": "block/_sink/components/tooltip-demo.tsx",
- "content": "import { Button } from '~/registry/miami/ui/button'\nimport {\n Tooltip,\n TooltipContent,\n TooltipProvider,\n TooltipTrigger,\n} from '~/registry/miami/ui/tooltip'\n\nexport function TooltipDemo() {\n return (\n \n \n \n Hover \n \n \n Add to library
\n \n \n \n )\n}\n",
- "type": "registry:component",
- "target": ""
- },
- {
- "path": "block/_sink/components/badge-destructive.tsx",
- "content": "import { Badge } from '~/registry/miami/ui/badge'\n\nexport function BadgeDestructive() {\n return Destructive \n}\n",
- "type": "registry:component",
- "target": ""
- },
- {
- "path": "block/_sink/components/badge-outline.tsx",
- "content": "import { Badge } from '~/registry/miami/ui/badge'\n\nexport function BadgeOutline() {\n return Outline \n}\n",
- "type": "registry:component",
- "target": ""
- },
- {
- "path": "block/_sink/components/badge-secondary.tsx",
- "content": "import { Badge } from '~/registry/miami/ui/badge'\n\nexport function BadgeSecondary() {\n return Secondary \n}\n",
- "type": "registry:component",
- "target": ""
- },
- {
- "path": "block/_sink/components/button-destructive.tsx",
- "content": "import { Button } from '~/registry/miami/ui/button'\n\nexport function ButtonDestructive() {\n return Destructive \n}\n",
- "type": "registry:component",
- "target": ""
- },
- {
- "path": "block/_sink/components/button-ghost.tsx",
- "content": "import { Button } from '~/registry/miami/ui/button'\n\nexport function ButtonGhost() {\n return Ghost \n}\n",
- "type": "registry:component",
- "target": ""
- },
- {
- "path": "block/_sink/components/button-link.tsx",
- "content": "import { Button } from '~/registry/miami/ui/button'\n\nexport function ButtonLink() {\n return Link \n}\n",
- "type": "registry:component",
- "target": ""
- },
- {
- "path": "block/_sink/components/button-loading.tsx",
- "content": "import { Loader2 } from 'lucide-react'\n\nimport { Button } from '~/registry/miami/ui/button'\n\nexport function ButtonLoading() {\n return (\n \n \n Please wait\n \n )\n}\n",
- "type": "registry:component",
- "target": ""
- },
- {
- "path": "block/_sink/components/button-outline.tsx",
- "content": "import { Button } from '~/registry/miami/ui/button'\n\nexport function ButtonOutline() {\n return Outline \n}\n",
- "type": "registry:component",
- "target": ""
- },
- {
- "path": "block/_sink/components/button-secondary.tsx",
- "content": "import { Button } from '~/registry/miami/ui/button'\n\nexport function ButtonSecondary() {\n return Secondary \n}\n",
- "type": "registry:component",
- "target": ""
- },
- {
- "path": "block/_sink/components/button-with-icon.tsx",
- "content": "import { MailOpen } from 'lucide-react'\n\nimport { Button } from '~/registry/miami/ui/button'\n\nexport function ButtonWithIcon() {\n return (\n \n \n {' '}\n Login with Email\n \n )\n}\n",
- "type": "registry:component",
- "target": ""
- },
- {
- "path": "block/_sink/components/toggle-disabled.tsx",
- "content": "import { Underline } from 'lucide-react'\n\nimport { Toggle } from '~/registry/miami/ui/toggle'\n\nexport function ToggleDisabled() {\n return (\n \n \n \n )\n}\n",
- "type": "registry:component",
- "target": ""
- },
- {
- "path": "block/_sink/components/toggle-outline.tsx",
- "content": "import { Italic } from 'lucide-react'\n\nimport { Toggle } from '~/registry/miami/ui/toggle'\n\nexport function ToggleOutline() {\n return (\n \n \n \n )\n}\n",
- "type": "registry:component",
- "target": ""
- },
- {
- "path": "block/_sink/components/toggle-with-text.tsx",
- "content": "import { Italic } from 'lucide-react'\n\nimport { Toggle } from '~/registry/miami/ui/toggle'\n\nexport function ToggleWithText() {\n return (\n \n \n Italic\n \n )\n}\n",
- "type": "registry:component",
- "target": ""
- }
- ]
-}
\ No newline at end of file
+ "name": "_sink",
+ "type": "registry:block",
+ "description": "",
+ "registryDependencies": [
+ "accordion",
+ "alert",
+ "alert-dialog",
+ "aspect-ratio",
+ "avatar",
+ "badge",
+ "breadcrumb",
+ "button",
+ "calendar",
+ "card",
+ "carousel",
+ "chart",
+ "checkbox",
+ "collapsible",
+ "command",
+ "context-menu",
+ "dialog",
+ "drawer",
+ "dropdown-menu",
+ "hover-card",
+ "input",
+ "input-otp",
+ "label",
+ "menubar",
+ "navigation-menu",
+ "pagination",
+ "popover",
+ "progress",
+ "radio-group",
+ "resizable",
+ "scroll-area",
+ "select",
+ "separator",
+ "sheet",
+ "sidebar",
+ "skeleton",
+ "slider",
+ "sonner",
+ "switch",
+ "table",
+ "tabs",
+ "textarea",
+ "toast",
+ "toggle",
+ "toggle-group",
+ "tooltip"
+ ],
+ "files": [
+ {
+ "path": "block/_sink/page.tsx",
+ "content": "import { AccordionDemo } from '~/registry/miami/block/_sink/components/accordion-demo'\nimport { AlertDemo } from '~/registry/miami/block/_sink/components/alert-demo'\nimport { AlertDialogDemo } from '~/registry/miami/block/_sink/components/alert-dialog-demo'\nimport { AppSidebar } from '~/registry/miami/block/_sink/components/app-sidebar'\nimport { AspectRatioDemo } from '~/registry/miami/block/_sink/components/aspect-ratio-demo'\nimport { AvatarDemo } from '~/registry/miami/block/_sink/components/avatar-demo'\nimport { BadgeDemo } from '~/registry/miami/block/_sink/components/badge-demo'\nimport { BadgeDestructive } from '~/registry/miami/block/_sink/components/badge-destructive'\nimport { BadgeOutline } from '~/registry/miami/block/_sink/components/badge-outline'\nimport { BadgeSecondary } from '~/registry/miami/block/_sink/components/badge-secondary'\nimport { BreadcrumbDemo } from '~/registry/miami/block/_sink/components/breadcrumb-demo'\nimport { ButtonDemo } from '~/registry/miami/block/_sink/components/button-demo'\nimport { ButtonDestructive } from '~/registry/miami/block/_sink/components/button-destructive'\nimport { ButtonGhost } from '~/registry/miami/block/_sink/components/button-ghost'\nimport { ButtonLink } from '~/registry/miami/block/_sink/components/button-link'\nimport { ButtonLoading } from '~/registry/miami/block/_sink/components/button-loading'\nimport { ButtonOutline } from '~/registry/miami/block/_sink/components/button-outline'\nimport { ButtonSecondary } from '~/registry/miami/block/_sink/components/button-secondary'\nimport { ButtonWithIcon } from '~/registry/miami/block/_sink/components/button-with-icon'\nimport { CalendarDemo } from '~/registry/miami/block/_sink/components/calendar-demo'\nimport { CardDemo } from '~/registry/miami/block/_sink/components/card-demo'\nimport { CarouselDemo } from '~/registry/miami/block/_sink/components/carousel-demo'\nimport { CheckboxDemo } from '~/registry/miami/block/_sink/components/checkbox-demo'\nimport { CollapsibleDemo } from '~/registry/miami/block/_sink/components/collapsible-demo'\nimport { ComboboxDemo } from '~/registry/miami/block/_sink/components/combobox-demo'\nimport { CommandDemo } from '~/registry/miami/block/_sink/components/command-demo'\nimport { ComponentWrapper } from '~/registry/miami/block/_sink/components/component-wrapper'\nimport { ContextMenuDemo } from '~/registry/miami/block/_sink/components/context-menu-demo'\nimport { DatePickerDemo } from '~/registry/miami/block/_sink/components/date-picker-demo'\nimport { DialogDemo } from '~/registry/miami/block/_sink/components/dialog-demo'\nimport { DrawerDemo } from '~/registry/miami/block/_sink/components/drawer-demo'\nimport { DropdownMenuDemo } from '~/registry/miami/block/_sink/components/dropdown-menu-demo'\nimport { HoverCardDemo } from '~/registry/miami/block/_sink/components/hover-card-demo'\nimport { InputDemo } from '~/registry/miami/block/_sink/components/input-demo'\nimport { InputOTPDemo } from '~/registry/miami/block/_sink/components/input-otp-demo'\nimport { LabelDemo } from '~/registry/miami/block/_sink/components/label-demo'\nimport { MenubarDemo } from '~/registry/miami/block/_sink/components/menubar-demo'\nimport { NavigationMenuDemo } from '~/registry/miami/block/_sink/components/navigation-menu-demo'\nimport { PaginationDemo } from '~/registry/miami/block/_sink/components/pagination-demo'\nimport { PopoverDemo } from '~/registry/miami/block/_sink/components/popover-demo'\nimport { ProgressDemo } from '~/registry/miami/block/_sink/components/progress-demo'\nimport { RadioGroupDemo } from '~/registry/miami/block/_sink/components/radio-group-demo'\nimport { ResizableHandleDemo } from '~/registry/miami/block/_sink/components/resizable-handle'\nimport { ScrollAreaDemo } from '~/registry/miami/block/_sink/components/scroll-area-demo'\nimport { SelectDemo } from '~/registry/miami/block/_sink/components/select-demo'\nimport { SeparatorDemo } from '~/registry/miami/block/_sink/components/separator-demo'\nimport { SheetDemo } from '~/registry/miami/block/_sink/components/sheet-demo'\nimport { SkeletonDemo } from '~/registry/miami/block/_sink/components/skeleton-demo'\nimport { SliderDemo } from '~/registry/miami/block/_sink/components/slider-demo'\nimport { SonnerDemo } from '~/registry/miami/block/_sink/components/sonner-demo'\nimport { SwitchDemo } from '~/registry/miami/block/_sink/components/switch-demo'\nimport { TableDemo } from '~/registry/miami/block/_sink/components/table-demo'\nimport { TabsDemo } from '~/registry/miami/block/_sink/components/tabs-demo'\nimport { TextareaDemo } from '~/registry/miami/block/_sink/components/textarea-demo'\nimport { ToastDemo } from '~/registry/miami/block/_sink/components/toast-demo'\nimport { ToggleDemo } from '~/registry/miami/block/_sink/components/toggle-demo'\nimport { ToggleDisabled } from '~/registry/miami/block/_sink/components/toggle-disabled'\nimport { ToggleGroupDemo } from '~/registry/miami/block/_sink/components/toggle-group-demo'\nimport { ToggleOutline } from '~/registry/miami/block/_sink/components/toggle-outline'\nimport { ToggleWithText } from '~/registry/miami/block/_sink/components/toggle-with-text'\nimport { TooltipDemo } from '~/registry/miami/block/_sink/components/tooltip-demo'\nimport {\n Breadcrumb,\n BreadcrumbItem,\n BreadcrumbLink,\n BreadcrumbList,\n BreadcrumbPage,\n BreadcrumbSeparator,\n} from '~/registry/miami/ui/breadcrumb'\nimport { Separator } from '~/registry/miami/ui/separator'\nimport {\n SidebarInset,\n SidebarProvider,\n SidebarTrigger,\n} from '~/registry/miami/ui/sidebar'\n\nexport default function SinkPage() {\n return (\n \n \n \n \n \n
\n
\n \n \n
\n \n \n
\n \n \n
\n \n \n
\n \n \n
\n \n \n \n \n \n
\n \n \n
\n \n \n \n \n \n
\n \n \n \n \n
\n \n \n
\n \n
\n \n \n
\n \n \n
\n \n \n
\n \n \n
\n \n \n
\n \n \n
\n \n \n
\n \n \n
\n \n \n
\n \n \n
\n \n \n
\n \n \n
\n \n \n
\n \n \n
\n \n \n
\n \n \n
\n \n \n
\n \n \n
\n \n \n
\n \n \n
\n \n \n
\n \n \n
\n \n \n
\n \n \n
\n \n \n
\n \n \n
\n \n \n
\n \n \n
\n \n \n
\n \n \n
\n \n \n
\n \n \n
\n \n \n
\n \n \n
\n \n \n
\n \n \n \n \n \n
\n \n
\n \n \n
\n \n \n
\n
\n \n \n )\n}\n",
+ "type": "registry:page",
+ "target": "app/sink/page.tsx"
+ },
+ {
+ "path": "block/_sink/components/app-sidebar.tsx",
+ "content": "'use client'\n\nimport * as React from 'react'\nimport {\n AudioWaveform,\n BookOpen,\n Bot,\n Command,\n Frame,\n GalleryVerticalEnd,\n Map,\n PieChart,\n Settings2,\n SquareTerminal,\n} from 'lucide-react'\n\nimport { NavMain } from '~/registry/miami/block/sidebar-07/components/nav-main'\nimport { NavProjects } from '~/registry/miami/block/sidebar-07/components/nav-projects'\nimport { NavUser } from '~/registry/miami/block/sidebar-07/components/nav-user'\nimport { TeamSwitcher } from '~/registry/miami/block/sidebar-07/components/team-switcher'\nimport {\n Sidebar,\n SidebarContent,\n SidebarFooter,\n SidebarHeader,\n SidebarRail,\n} from '~/registry/miami/ui/sidebar'\n\n// This is sample data.\nconst data = {\n user: {\n name: 'shadcn',\n email: 'm@example.com',\n avatar: '/avatars/nyxb.jpg',\n },\n teams: [\n {\n name: 'Acme Inc',\n logo: GalleryVerticalEnd,\n plan: 'Enterprise',\n },\n {\n name: 'Acme Corp.',\n logo: AudioWaveform,\n plan: 'Startup',\n },\n {\n name: 'Evil Corp.',\n logo: Command,\n plan: 'Free',\n },\n ],\n navMain: [\n {\n title: 'Playground',\n url: '#',\n icon: SquareTerminal,\n isActive: true,\n items: [\n {\n title: 'History',\n url: '#',\n },\n {\n title: 'Starred',\n url: '#',\n },\n {\n title: 'Settings',\n url: '#',\n },\n ],\n },\n {\n title: 'Models',\n url: '#',\n icon: Bot,\n items: [\n {\n title: 'Genesis',\n url: '#',\n },\n {\n title: 'Explorer',\n url: '#',\n },\n {\n title: 'Quantum',\n url: '#',\n },\n ],\n },\n {\n title: 'Documentation',\n url: '#',\n icon: BookOpen,\n items: [\n {\n title: 'Introduction',\n url: '#',\n },\n {\n title: 'Get Started',\n url: '#',\n },\n {\n title: 'Tutorials',\n url: '#',\n },\n {\n title: 'Changelog',\n url: '#',\n },\n ],\n },\n {\n title: 'Settings',\n url: '#',\n icon: Settings2,\n items: [\n {\n title: 'General',\n url: '#',\n },\n {\n title: 'Team',\n url: '#',\n },\n {\n title: 'Billing',\n url: '#',\n },\n {\n title: 'Limits',\n url: '#',\n },\n ],\n },\n ],\n projects: [\n {\n name: 'Design Engineering',\n url: '#',\n icon: Frame,\n },\n {\n name: 'Sales & Marketing',\n url: '#',\n icon: PieChart,\n },\n {\n name: 'Travel',\n url: '#',\n icon: Map,\n },\n ],\n}\n\nexport function AppSidebar({ ...props }: React.ComponentProps) {\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n )\n}\n",
+ "type": "registry:component",
+ "target": ""
+ },
+ {
+ "path": "block/_sink/components/component-wrapper.tsx",
+ "content": "import { ny } from '~/registry/miami/lib/utils'\n\nexport function ComponentWrapper({\n className,\n name,\n children,\n ...props\n}: React.ComponentPropsWithoutRef<'div'> & { name: string }) {\n return (\n \n
\n
div]:max-w-full\">\n {children}\n
\n
\n )\n}\n",
+ "type": "registry:component",
+ "target": ""
+ },
+ {
+ "path": "block/_sink/components/nav-main.tsx",
+ "content": "'use client'\n\nimport { ChevronRight, type LucideIcon } from 'lucide-react'\n\nimport {\n Collapsible,\n CollapsibleContent,\n CollapsibleTrigger,\n} from '~/registry/miami/ui/collapsible'\nimport {\n SidebarGroup,\n SidebarGroupLabel,\n SidebarMenu,\n SidebarMenuButton,\n SidebarMenuItem,\n SidebarMenuSub,\n SidebarMenuSubButton,\n SidebarMenuSubItem,\n} from '~/registry/miami/ui/sidebar'\n\nexport function NavMain({\n items,\n}: {\n items: {\n title: string\n url: string\n icon?: LucideIcon\n isActive?: boolean\n items?: {\n title: string\n url: string\n }[]\n }[]\n}) {\n return (\n \n Platform \n \n {items.map(item => (\n \n \n \n \n {item.icon && }\n {item.title} \n \n \n \n \n \n {item.items?.map(subItem => (\n \n \n \n {subItem.title} \n \n \n \n ))}\n \n \n \n \n ))}\n \n \n )\n}\n",
+ "type": "registry:component",
+ "target": ""
+ },
+ {
+ "path": "block/_sink/components/nav-projects.tsx",
+ "content": "'use client'\n\nimport {\n Folder,\n Forward,\n type LucideIcon,\n MoreHorizontal,\n Trash2,\n} from 'lucide-react'\n\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuSeparator,\n DropdownMenuTrigger,\n} from '~/registry/miami/ui/dropdown-menu'\nimport {\n SidebarGroup,\n SidebarGroupLabel,\n SidebarMenu,\n SidebarMenuAction,\n SidebarMenuButton,\n SidebarMenuItem,\n useSidebar,\n} from '~/registry/miami/ui/sidebar'\n\nexport function NavProjects({\n projects,\n}: {\n projects: {\n name: string\n url: string\n icon: LucideIcon\n }[]\n}) {\n const { isMobile } = useSidebar()\n\n return (\n \n Projects \n \n {projects.map(item => (\n \n \n \n \n {item.name} \n \n \n \n \n \n \n More \n \n \n \n \n \n View Project \n \n \n \n Share Project \n \n \n \n \n Delete Project \n \n \n \n \n ))}\n \n \n \n More \n \n \n \n \n )\n}\n",
+ "type": "registry:component",
+ "target": ""
+ },
+ {
+ "path": "block/_sink/components/nav-user.tsx",
+ "content": "'use client'\n\nimport {\n BadgeCheck,\n Bell,\n ChevronsUpDown,\n CreditCard,\n LogOut,\n Sparkles,\n} from 'lucide-react'\n\nimport {\n Avatar,\n AvatarFallback,\n AvatarImage,\n} from '~/registry/miami/ui/avatar'\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuGroup,\n DropdownMenuItem,\n DropdownMenuLabel,\n DropdownMenuSeparator,\n DropdownMenuTrigger,\n} from '~/registry/miami/ui/dropdown-menu'\nimport {\n SidebarMenu,\n SidebarMenuButton,\n SidebarMenuItem,\n useSidebar,\n} from '~/registry/miami/ui/sidebar'\n\nexport function NavUser({\n user,\n}: {\n user: {\n name: string\n email: string\n avatar: string\n }\n}) {\n const { isMobile } = useSidebar()\n\n return (\n \n \n \n \n \n \n \n CN \n \n \n {user.name} \n {user.email} \n
\n \n \n \n \n \n \n
\n \n CN \n \n
\n {user.name} \n {user.email} \n
\n
\n \n \n \n \n \n Upgrade to Pro\n \n \n \n \n \n \n Account\n \n \n \n Billing\n \n \n \n Notifications\n \n \n \n \n \n Log out\n \n \n \n \n \n )\n}\n",
+ "type": "registry:component",
+ "target": ""
+ },
+ {
+ "path": "block/_sink/components/team-switcher.tsx",
+ "content": "'use client'\n\nimport * as React from 'react'\nimport { ChevronsUpDown, Plus } from 'lucide-react'\n\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuLabel,\n DropdownMenuSeparator,\n DropdownMenuShortcut,\n DropdownMenuTrigger,\n} from '~/registry/miami/ui/dropdown-menu'\nimport {\n SidebarMenu,\n SidebarMenuButton,\n SidebarMenuItem,\n useSidebar,\n} from '~/registry/miami/ui/sidebar'\n\nexport function TeamSwitcher({\n teams,\n}: {\n teams: {\n name: string\n logo: React.ElementType\n plan: string\n }[]\n}) {\n const { isMobile } = useSidebar()\n const [activeTeam, setActiveTeam] = React.useState(teams[0])\n\n return (\n \n \n \n \n \n \n \n \n {activeTeam.name}\n \n {activeTeam.plan} \n
\n \n \n \n \n \n Teams\n \n {teams.map((team, index) => (\n setActiveTeam(team)}\n className=\"gap-2 p-2\"\n >\n \n \n
\n {team.name}\n \n ⌘\n {index + 1}\n \n \n ))}\n \n \n \n Add team
\n \n \n \n \n \n )\n}\n",
+ "type": "registry:component",
+ "target": ""
+ },
+ {
+ "path": "block/_sink/components/accordion-demo.tsx",
+ "content": "import {\n Accordion,\n AccordionContent,\n AccordionItem,\n AccordionTrigger,\n} from '~/registry/miami/ui/accordion'\n\nexport function AccordionDemo() {\n return (\n \n \n Is it accessible? \n \n Yes. It adheres to the WAI-ARIA design pattern.\n \n \n \n Is it styled? \n \n Yes. It comes with default styles that matches the other\n components' aesthetic.\n \n \n \n Is it animated? \n \n Yes. It's animated by default, but you can disable it if you prefer.\n \n \n \n )\n}\n",
+ "type": "registry:component",
+ "target": ""
+ },
+ {
+ "path": "block/_sink/components/alert-demo.tsx",
+ "content": "import { Terminal } from 'lucide-react'\n\nimport {\n Alert,\n AlertDescription,\n AlertTitle,\n} from '~/registry/miami/ui/alert'\n\nexport function AlertDemo() {\n return (\n \n \n Heads up! \n \n You can add components to your app using the cli.\n \n \n )\n}\n",
+ "type": "registry:component",
+ "target": ""
+ },
+ {
+ "path": "block/_sink/components/alert-dialog-demo.tsx",
+ "content": "import {\n AlertDialog,\n AlertDialogAction,\n AlertDialogCancel,\n AlertDialogContent,\n AlertDialogDescription,\n AlertDialogFooter,\n AlertDialogHeader,\n AlertDialogTitle,\n AlertDialogTrigger,\n} from '~/registry/miami/ui/alert-dialog'\nimport { Button } from '~/registry/miami/ui/button'\n\nexport function AlertDialogDemo() {\n return (\n \n \n Show Dialog \n \n \n \n Are you absolutely sure? \n \n This action cannot be undone. This will permanently delete your\n account and remove your data from our servers.\n \n \n \n Cancel \n Continue \n \n \n \n )\n}\n",
+ "type": "registry:component",
+ "target": ""
+ },
+ {
+ "path": "block/_sink/components/aspect-ratio-demo.tsx",
+ "content": "import Image from 'next/image'\n\nimport { AspectRatio } from '~/registry/miami/ui/aspect-ratio'\n\nexport function AspectRatioDemo() {\n return (\n \n \n \n )\n}\n",
+ "type": "registry:component",
+ "target": ""
+ },
+ {
+ "path": "block/_sink/components/avatar-demo.tsx",
+ "content": "import {\n Avatar,\n AvatarFallback,\n AvatarImage,\n} from '~/registry/miami/ui/avatar'\n\nexport function AvatarDemo() {\n return (\n \n \n CN \n \n )\n}\n",
+ "type": "registry:component",
+ "target": ""
+ },
+ {
+ "path": "block/_sink/components/badge-demo.tsx",
+ "content": "import { Badge } from '~/registry/miami/ui/badge'\n\nexport function BadgeDemo() {\n return Badge \n}\n",
+ "type": "registry:component",
+ "target": ""
+ },
+ {
+ "path": "block/_sink/components/breadcrumb-demo.tsx",
+ "content": "import {\n Breadcrumb,\n BreadcrumbEllipsis,\n BreadcrumbItem,\n BreadcrumbLink,\n BreadcrumbList,\n BreadcrumbPage,\n BreadcrumbSeparator,\n} from '~/registry/miami/ui/breadcrumb'\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuTrigger,\n} from '~/registry/miami/ui/dropdown-menu'\n\nexport function BreadcrumbDemo() {\n return (\n \n \n \n Home \n \n \n \n \n \n \n Toggle menu \n \n \n Documentation \n Themes \n GitHub \n \n \n \n \n \n Components \n \n \n \n Breadcrumb \n \n \n \n )\n}\n",
+ "type": "registry:component",
+ "target": ""
+ },
+ {
+ "path": "block/_sink/components/button-demo.tsx",
+ "content": "import { Button } from '~/registry/miami/ui/button'\n\nexport function ButtonDemo() {\n return Button \n}\n",
+ "type": "registry:component",
+ "target": ""
+ },
+ {
+ "path": "block/_sink/components/calendar-demo.tsx",
+ "content": "'use client'\n\nimport * as React from 'react'\n\nimport { Calendar } from '~/registry/miami/ui/calendar'\n\nexport function CalendarDemo() {\n const [date, setDate] = React.useState(new Date())\n\n return (\n \n )\n}\n",
+ "type": "registry:component",
+ "target": ""
+ },
+ {
+ "path": "block/_sink/components/card-demo.tsx",
+ "content": "import { BellRing, Check } from 'lucide-react'\n\nimport { ny } from '~/lib/utils'\nimport { Button } from '~/registry/miami/ui/button'\nimport {\n Card,\n CardContent,\n CardDescription,\n CardFooter,\n CardHeader,\n CardTitle,\n} from '~/registry/miami/ui/card'\nimport { Switch } from '~/registry/miami/ui/switch'\n\nconst notifications = [\n {\n title: 'Your call has been confirmed.',\n description: '1 hour ago',\n },\n {\n title: 'You have a new message!',\n description: '1 hour ago',\n },\n {\n title: 'Your subscription is expiring soon!',\n description: '2 hours ago',\n },\n]\n\ntype CardProps = React.ComponentProps\n\nexport function CardDemo({ className, ...props }: CardProps) {\n return (\n \n \n Notifications \n You have 3 unread messages. \n \n \n \n
\n
\n
\n Push Notifications\n
\n
\n Send notifications to device.\n
\n
\n
\n
\n \n {notifications.map((notification, index) => (\n
\n
\n
\n
\n {notification.title}\n
\n
\n {notification.description}\n
\n
\n
\n ))}\n
\n \n \n \n \n {' '}\n Mark all as read\n \n \n \n )\n}\n",
+ "type": "registry:component",
+ "target": ""
+ },
+ {
+ "path": "block/_sink/components/carousel-demo.tsx",
+ "content": "import * as React from 'react'\n\nimport { Card, CardContent } from '~/registry/miami/ui/card'\nimport {\n Carousel,\n CarouselContent,\n CarouselItem,\n CarouselNext,\n CarouselPrevious,\n} from '~/registry/miami/ui/carousel'\n\nexport function CarouselDemo() {\n return (\n \n \n {Array.from({ length: 5 }).map((_, index) => (\n \n \n \n \n {index + 1} \n \n \n
\n \n ))}\n \n \n \n \n )\n}\n",
+ "type": "registry:component",
+ "target": ""
+ },
+ {
+ "path": "block/_sink/components/checkbox-demo.tsx",
+ "content": "'use client'\n\nimport { Checkbox } from '~/registry/miami/ui/checkbox'\n\nexport function CheckboxDemo() {\n return (\n \n \n \n Accept terms and conditions\n \n
\n )\n}\n",
+ "type": "registry:component",
+ "target": ""
+ },
+ {
+ "path": "block/_sink/components/collapsible-demo.tsx",
+ "content": "'use client'\n\nimport * as React from 'react'\nimport { ChevronsUpDown } from 'lucide-react'\n\nimport { Button } from '~/registry/miami/ui/button'\nimport {\n Collapsible,\n CollapsibleContent,\n CollapsibleTrigger,\n} from '~/registry/miami/ui/collapsible'\n\nexport function CollapsibleDemo() {\n const [isOpen, setIsOpen] = React.useState(false)\n\n return (\n \n \n
\n @peduarte starred 3 repositories\n \n \n \n \n Toggle \n \n \n \n \n @radix-ui/primitives\n
\n \n \n @radix-ui/colors\n
\n \n @stitches/react\n
\n \n \n )\n}\n",
+ "type": "registry:component",
+ "target": ""
+ },
+ {
+ "path": "block/_sink/components/combobox-demo.tsx",
+ "content": "'use client'\n\nimport * as React from 'react'\nimport { Check, ChevronsUpDown } from 'lucide-react'\n\nimport { ny } from '~/lib/utils'\nimport { Button } from '~/registry/miami/ui/button'\nimport {\n Command,\n CommandEmpty,\n CommandGroup,\n CommandInput,\n CommandItem,\n CommandList,\n} from '~/registry/miami/ui/command'\nimport {\n Popover,\n PopoverContent,\n PopoverTrigger,\n} from '~/registry/miami/ui/popover'\n\nconst frameworks = [\n {\n value: 'next.js',\n label: 'Next.js',\n },\n {\n value: 'sveltekit',\n label: 'SvelteKit',\n },\n {\n value: 'nuxt.js',\n label: 'Nuxt.js',\n },\n {\n value: 'remix',\n label: 'Remix',\n },\n {\n value: 'astro',\n label: 'Astro',\n },\n]\n\nexport function ComboboxDemo() {\n const [open, setOpen] = React.useState(false)\n const [value, setValue] = React.useState('')\n\n return (\n \n \n \n {value\n ? frameworks.find(framework => framework.value === value)?.label\n : 'Select framework...'}\n \n \n \n \n \n \n \n No framework found. \n \n {frameworks.map(framework => (\n {\n setValue(currentValue === value ? '' : currentValue)\n setOpen(false)\n }}\n >\n {framework.label}\n \n \n ))}\n \n \n \n \n \n )\n}\n",
+ "type": "registry:component",
+ "target": ""
+ },
+ {
+ "path": "block/_sink/components/command-demo.tsx",
+ "content": "import {\n Calculator,\n Calendar,\n CreditCard,\n Settings,\n Smile,\n User,\n} from 'lucide-react'\n\nimport {\n Command,\n CommandEmpty,\n CommandGroup,\n CommandInput,\n CommandItem,\n CommandList,\n CommandSeparator,\n CommandShortcut,\n} from '~/registry/miami/ui/command'\n\nexport function CommandDemo() {\n return (\n \n \n \n No results found. \n \n \n \n Calendar \n \n \n \n Search Emoji \n \n \n \n Calculator \n \n \n \n \n \n \n Profile \n ⌘P \n \n \n \n Billing \n ⌘B \n \n \n \n Settings \n ⌘S \n \n \n \n \n )\n}\n",
+ "type": "registry:component",
+ "target": ""
+ },
+ {
+ "path": "block/_sink/components/context-menu-demo.tsx",
+ "content": "import {\n ContextMenu,\n ContextMenuCheckboxItem,\n ContextMenuContent,\n ContextMenuItem,\n ContextMenuLabel,\n ContextMenuRadioGroup,\n ContextMenuRadioItem,\n ContextMenuSeparator,\n ContextMenuShortcut,\n ContextMenuSub,\n ContextMenuSubContent,\n ContextMenuSubTrigger,\n ContextMenuTrigger,\n} from '~/registry/miami/ui/context-menu'\n\nexport function ContextMenuDemo() {\n return (\n \n \n Right click here\n \n \n \n Back\n ⌘[ \n \n \n Forward\n ⌘] \n \n \n Reload\n ⌘R \n \n \n More Tools \n \n \n Save Page As...\n ⇧⌘S \n \n Create Shortcut... \n Name Window... \n \n Developer Tools \n \n \n \n \n Show Bookmarks Bar\n ⌘⇧B \n \n Show Full URLs \n \n \n People \n \n \n Pedro Duarte\n \n Colm Tuite \n \n \n \n )\n}\n",
+ "type": "registry:component",
+ "target": ""
+ },
+ {
+ "path": "block/_sink/components/date-picker-demo.tsx",
+ "content": "'use client'\n\nimport * as React from 'react'\nimport { format } from 'date-fns'\nimport { CalendarIcon } from 'lucide-react'\n\nimport { ny } from '~/lib/utils'\nimport { Button } from '~/registry/miami/ui/button'\nimport { Calendar } from '~/registry/miami/ui/calendar'\nimport {\n Popover,\n PopoverContent,\n PopoverTrigger,\n} from '~/registry/miami/ui/popover'\n\nexport function DatePickerDemo() {\n const [date, setDate] = React.useState()\n\n return (\n \n \n \n \n {date ? format(date, 'PPP') : Pick a date }\n \n \n \n \n \n \n )\n}\n",
+ "type": "registry:component",
+ "target": ""
+ },
+ {
+ "path": "block/_sink/components/dialog-demo.tsx",
+ "content": "import { Button } from '~/registry/miami/ui/button'\nimport {\n Dialog,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogTitle,\n DialogTrigger,\n} from '~/registry/miami/ui/dialog'\nimport { Input } from '~/registry/miami/ui/input'\nimport { Label } from '~/registry/miami/ui/label'\n\nexport function DialogDemo() {\n return (\n \n \n Edit Profile \n \n \n \n Edit profile \n \n Make changes to your profile here. Click save when you're done.\n \n \n \n \n Save changes \n \n \n \n )\n}\n",
+ "type": "registry:component",
+ "target": ""
+ },
+ {
+ "path": "block/_sink/components/drawer-demo.tsx",
+ "content": "'use client'\n\nimport * as React from 'react'\nimport { Minus, Plus } from 'lucide-react'\nimport { Bar, BarChart, ResponsiveContainer } from 'recharts'\n\nimport { Button } from '~/registry/miami/ui/button'\nimport {\n Drawer,\n DrawerClose,\n DrawerContent,\n DrawerDescription,\n DrawerFooter,\n DrawerHeader,\n DrawerTitle,\n DrawerTrigger,\n} from '~/registry/miami/ui/drawer'\n\nconst data = [\n {\n goal: 400,\n },\n {\n goal: 300,\n },\n {\n goal: 200,\n },\n {\n goal: 300,\n },\n {\n goal: 200,\n },\n {\n goal: 278,\n },\n {\n goal: 189,\n },\n {\n goal: 239,\n },\n {\n goal: 300,\n },\n {\n goal: 200,\n },\n {\n goal: 278,\n },\n {\n goal: 189,\n },\n {\n goal: 349,\n },\n]\n\nexport function DrawerDemo() {\n const [goal, setGoal] = React.useState(350)\n\n function onClick(adjustment: number) {\n setGoal(Math.max(200, Math.min(400, goal + adjustment)))\n }\n\n return (\n \n \n Open Drawer \n \n \n \n
\n Move Goal \n Set your daily activity goal. \n \n
\n
\n
onClick(-10)}\n disabled={goal <= 200}\n >\n \n Decrease \n \n
\n
\n {goal}\n
\n
\n Calories/day\n
\n
\n
onClick(10)}\n disabled={goal >= 400}\n >\n \n Increase \n \n
\n
\n \n \n \n \n \n
\n
\n
\n Submit \n \n Cancel \n \n \n
\n \n \n )\n}\n",
+ "type": "registry:component",
+ "target": ""
+ },
+ {
+ "path": "block/_sink/components/dropdown-menu-demo.tsx",
+ "content": "import { Button } from '~/registry/miami/ui/button'\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuGroup,\n DropdownMenuItem,\n DropdownMenuLabel,\n DropdownMenuPortal,\n DropdownMenuSeparator,\n DropdownMenuShortcut,\n DropdownMenuSub,\n DropdownMenuSubContent,\n DropdownMenuSubTrigger,\n DropdownMenuTrigger,\n} from '~/registry/miami/ui/dropdown-menu'\n\nexport function DropdownMenuDemo() {\n return (\n \n \n Open \n \n \n My Account \n \n \n \n Profile\n ⇧⌘P \n \n \n Billing\n ⌘B \n \n \n Settings\n ⌘S \n \n \n Keyboard shortcuts\n ⌘K \n \n \n \n \n Team \n \n Invite users \n \n \n Email \n Message \n \n More... \n \n \n \n \n New Team\n ⌘+T \n \n \n \n GitHub \n Support \n API \n \n \n Log out\n ⇧⌘Q \n \n \n \n )\n}\n",
+ "type": "registry:component",
+ "target": ""
+ },
+ {
+ "path": "block/_sink/components/hover-card-demo.tsx",
+ "content": "import { CalendarIcon } from 'lucide-react'\n\nimport {\n Avatar,\n AvatarFallback,\n AvatarImage,\n} from '~/registry/miami/ui/avatar'\nimport { Button } from '~/registry/miami/ui/button'\nimport {\n HoverCard,\n HoverCardContent,\n HoverCardTrigger,\n} from '~/registry/miami/ui/hover-card'\n\nexport function HoverCardDemo() {\n return (\n \n \n @nextjs \n \n \n \n
\n \n VC \n \n
\n
@nextjs \n
\n The React Framework – created and maintained by @vercel.\n
\n
\n \n {' '}\n \n Joined December 2021\n \n
\n
\n
\n \n \n )\n}\n",
+ "type": "registry:component",
+ "target": ""
+ },
+ {
+ "path": "block/_sink/components/input-demo.tsx",
+ "content": "import { Input } from '~/registry/miami/ui/input'\n\nexport function InputDemo() {\n return \n}\n",
+ "type": "registry:component",
+ "target": ""
+ },
+ {
+ "path": "block/_sink/components/input-otp-demo.tsx",
+ "content": "import {\n InputOTP,\n InputOTPGroup,\n InputOTPSeparator,\n InputOTPSlot,\n} from '~/registry/miami/ui/input-otp'\n\nexport function InputOTPDemo() {\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n )\n}\n",
+ "type": "registry:component",
+ "target": ""
+ },
+ {
+ "path": "block/_sink/components/label-demo.tsx",
+ "content": "import { Checkbox } from '~/registry/miami/ui/checkbox'\nimport { Label } from '~/registry/miami/ui/label'\n\nexport function LabelDemo() {\n return (\n \n
\n \n Accept terms and conditions \n
\n
\n )\n}\n",
+ "type": "registry:component",
+ "target": ""
+ },
+ {
+ "path": "block/_sink/components/menubar-demo.tsx",
+ "content": "import {\n Menubar,\n MenubarCheckboxItem,\n MenubarContent,\n MenubarItem,\n MenubarMenu,\n MenubarRadioGroup,\n MenubarRadioItem,\n MenubarSeparator,\n MenubarShortcut,\n MenubarSub,\n MenubarSubContent,\n MenubarSubTrigger,\n MenubarTrigger,\n} from '~/registry/miami/ui/menubar'\n\nexport function MenubarDemo() {\n return (\n \n \n File \n \n \n New Tab\n {' '}\n ⌘T \n \n \n New Window\n {' '}\n ⌘N \n \n New Incognito Window \n \n \n Share \n \n Email link \n Messages \n Notes \n \n \n \n \n Print...\n {' '}\n ⌘P \n \n \n \n \n Edit \n \n \n Undo\n {' '}\n ⌘Z \n \n \n Redo\n {' '}\n ⇧⌘Z \n \n \n \n Find \n \n Search the web \n \n Find... \n Find Next \n Find Previous \n \n \n \n Cut \n Copy \n Paste \n \n \n \n View \n \n Always Show Bookmarks Bar \n \n Always Show Full URLs\n \n \n \n Reload\n {' '}\n ⌘R \n \n \n Force Reload\n {' '}\n ⇧⌘R \n \n \n Toggle Fullscreen \n \n Hide Sidebar \n \n \n \n Profiles \n \n \n Andy \n Benoit \n Luis \n \n \n Edit... \n \n Add Profile... \n \n \n \n )\n}\n",
+ "type": "registry:component",
+ "target": ""
+ },
+ {
+ "path": "block/_sink/components/navigation-menu-demo.tsx",
+ "content": "'use client'\n\nimport * as React from 'react'\nimport Link from 'next/link'\n\nimport { ny } from '~/lib/utils'\nimport {\n NavigationMenu,\n NavigationMenuContent,\n NavigationMenuItem,\n NavigationMenuLink,\n NavigationMenuList,\n NavigationMenuTrigger,\n navigationMenuTriggerStyle,\n} from '~/registry/miami/ui/navigation-menu'\n\nconst components: { title: string, href: string, description: string }[] = [\n {\n title: 'Alert Dialog',\n href: '/docs/primitives/alert-dialog',\n description:\n 'A modal dialog that interrupts the user with important content and expects a response.',\n },\n {\n title: 'Hover Card',\n href: '/docs/primitives/hover-card',\n description:\n 'For sighted users to preview content available behind a link.',\n },\n {\n title: 'Progress',\n href: '/docs/primitives/progress',\n description:\n 'Displays an indicator showing the completion progress of a task, typically displayed as a progress bar.',\n },\n {\n title: 'Scroll-area',\n href: '/docs/primitives/scroll-area',\n description: 'Visually or semantically separates content.',\n },\n {\n title: 'Tabs',\n href: '/docs/primitives/tabs',\n description:\n 'A set of layered sections of content—known as tab panels—that are displayed one at a time.',\n },\n {\n title: 'Tooltip',\n href: '/docs/primitives/tooltip',\n description:\n 'A popup that displays information related to an element when the element receives keyboard focus or the mouse hovers over it.',\n },\n]\n\nexport function NavigationMenuDemo() {\n return (\n \n \n \n Getting started \n \n \n \n \n \n Components \n \n \n {components.map(component => (\n \n {component.description}\n \n ))}\n \n \n \n \n \n \n Documentation\n \n \n \n \n \n )\n}\n\nconst ListItem = React.forwardRef<\n React.ElementRef<'a'>,\n React.ComponentPropsWithoutRef<'a'>\n>(({ className, title, children, ...props }, ref) => {\n return (\n \n \n \n {title}
\n \n {children}\n
\n \n \n \n )\n})\nListItem.displayName = 'ListItem'\n",
+ "type": "registry:component",
+ "target": ""
+ },
+ {
+ "path": "block/_sink/components/pagination-demo.tsx",
+ "content": "import {\n Pagination,\n PaginationContent,\n PaginationEllipsis,\n PaginationItem,\n PaginationLink,\n PaginationNext,\n PaginationPrevious,\n} from '~/registry/miami/ui/pagination'\n\nexport function PaginationDemo() {\n return (\n \n \n \n \n \n \n 1 \n \n \n \n 2\n \n \n \n 3 \n \n \n \n \n \n \n \n \n \n )\n}\n",
+ "type": "registry:component",
+ "target": ""
+ },
+ {
+ "path": "block/_sink/components/popover-demo.tsx",
+ "content": "import { Button } from '~/registry/miami/ui/button'\nimport { Input } from '~/registry/miami/ui/input'\nimport { Label } from '~/registry/miami/ui/label'\nimport {\n Popover,\n PopoverContent,\n PopoverTrigger,\n} from '~/registry/miami/ui/popover'\n\nexport function PopoverDemo() {\n return (\n \n \n Open popover \n \n \n \n
\n
Dimensions \n
\n Set the dimensions for the layer.\n
\n
\n
\n
\n \n \n )\n}\n",
+ "type": "registry:component",
+ "target": ""
+ },
+ {
+ "path": "block/_sink/components/progress-demo.tsx",
+ "content": "'use client'\n\nimport * as React from 'react'\n\nimport { Progress } from '~/registry/miami/ui/progress'\n\nexport function ProgressDemo() {\n const [progress, setProgress] = React.useState(13)\n\n React.useEffect(() => {\n const timer = setTimeout(() => setProgress(66), 500)\n return () => clearTimeout(timer)\n }, [])\n\n return \n}\n",
+ "type": "registry:component",
+ "target": ""
+ },
+ {
+ "path": "block/_sink/components/radio-group-demo.tsx",
+ "content": "import { Label } from '~/registry/miami/ui/label'\nimport { RadioGroup, RadioGroupItem } from '~/registry/miami/ui/radio-group'\n\nexport function RadioGroupDemo() {\n return (\n \n \n \n Default \n
\n \n \n Comfortable \n
\n \n \n Compact \n
\n \n )\n}\n",
+ "type": "registry:component",
+ "target": ""
+ },
+ {
+ "path": "block/_sink/components/resizable-handle.tsx",
+ "content": "import {\n ResizableHandle,\n ResizablePanel,\n ResizablePanelGroup,\n} from '~/registry/miami/ui/resizable'\n\nexport function ResizableHandleDemo() {\n return (\n \n \n \n Sidebar \n
\n \n \n \n \n Content \n
\n \n \n )\n}\n",
+ "type": "registry:component",
+ "target": ""
+ },
+ {
+ "path": "block/_sink/components/scroll-area-demo.tsx",
+ "content": "import * as React from 'react'\n\nimport { ScrollArea } from '~/registry/miami/ui/scroll-area'\nimport { Separator } from '~/registry/miami/ui/separator'\n\nconst tags = Array.from({ length: 50 }).map(\n (_, i, a) => `v1.2.0-beta.${a.length - i}`,\n)\n\nexport function ScrollAreaDemo() {\n return (\n \n \n
Tags \n {tags.map(tag => (\n
\n {tag}
\n \n \n ))}\n
\n \n )\n}\n",
+ "type": "registry:component",
+ "target": ""
+ },
+ {
+ "path": "block/_sink/components/select-demo.tsx",
+ "content": "import * as React from 'react'\n\nimport {\n Select,\n SelectContent,\n SelectGroup,\n SelectItem,\n SelectLabel,\n SelectTrigger,\n SelectValue,\n} from '~/registry/miami/ui/select'\n\nexport function SelectDemo() {\n return (\n \n \n \n \n \n \n Fruits \n Apple \n Banana \n Blueberry \n Grapes \n Pineapple \n \n \n \n )\n}\n",
+ "type": "registry:component",
+ "target": ""
+ },
+ {
+ "path": "block/_sink/components/separator-demo.tsx",
+ "content": "import { Separator } from '~/registry/miami/ui/separator'\n\nexport function SeparatorDemo() {\n return (\n \n
\n
Radix Primitives \n
\n An open-source UI component library.\n
\n
\n
\n
\n
Blog
\n
\n
Docs
\n
\n
Source
\n
\n
\n )\n}\n",
+ "type": "registry:component",
+ "target": ""
+ },
+ {
+ "path": "block/_sink/components/sheet-demo.tsx",
+ "content": "import { Button } from '~/registry/miami/ui/button'\nimport { Input } from '~/registry/miami/ui/input'\nimport { Label } from '~/registry/miami/ui/label'\nimport {\n Sheet,\n SheetClose,\n SheetContent,\n SheetDescription,\n SheetFooter,\n SheetHeader,\n SheetTitle,\n SheetTrigger,\n} from '~/registry/miami/ui/sheet'\n\nexport function SheetDemo() {\n return (\n \n \n Open \n \n \n \n Edit profile \n \n Make changes to your profile here. Click save when you're done.\n \n \n \n \n \n Save changes \n \n \n \n \n )\n}\n",
+ "type": "registry:component",
+ "target": ""
+ },
+ {
+ "path": "block/_sink/components/skeleton-demo.tsx",
+ "content": "import { Skeleton } from '~/registry/miami/ui/skeleton'\n\nexport function SkeletonDemo() {\n return (\n \n )\n}\n",
+ "type": "registry:component",
+ "target": ""
+ },
+ {
+ "path": "block/_sink/components/slider-demo.tsx",
+ "content": "import { ny } from '~/lib/utils'\nimport { Slider } from '~/registry/miami/ui/slider'\n\ntype SliderProps = React.ComponentProps\n\nexport function SliderDemo({ className, ...props }: SliderProps) {\n return (\n \n )\n}\n",
+ "type": "registry:component",
+ "target": ""
+ },
+ {
+ "path": "block/_sink/components/sonner-demo.tsx",
+ "content": "'use client'\n\nimport { toast } from 'sonner'\n\nimport { Button } from '~/registry/miami/ui/button'\n\nexport function SonnerDemo() {\n return (\n \n toast('Event has been created', {\n description: 'Sunday, December 03, 2023 at 9:00 AM',\n action: {\n label: 'Undo',\n // eslint-disable-next-line no-console\n onClick: () => console.log('Undo'),\n },\n })}\n >\n Show Toast\n \n )\n}\n",
+ "type": "registry:component",
+ "target": ""
+ },
+ {
+ "path": "block/_sink/components/switch-demo.tsx",
+ "content": "import { Label } from '~/registry/miami/ui/label'\nimport { Switch } from '~/registry/miami/ui/switch'\n\nexport function SwitchDemo() {\n return (\n \n \n Airplane Mode \n
\n )\n}\n",
+ "type": "registry:component",
+ "target": ""
+ },
+ {
+ "path": "block/_sink/components/table-demo.tsx",
+ "content": "import {\n Table,\n TableBody,\n TableCaption,\n TableCell,\n TableFooter,\n TableHead,\n TableHeader,\n TableRow,\n} from '~/registry/miami/ui/table'\n\nconst invoices = [\n {\n invoice: 'INV001',\n paymentStatus: 'Paid',\n totalAmount: '$250.00',\n paymentMethod: 'Credit Card',\n },\n {\n invoice: 'INV002',\n paymentStatus: 'Pending',\n totalAmount: '$150.00',\n paymentMethod: 'PayPal',\n },\n {\n invoice: 'INV003',\n paymentStatus: 'Unpaid',\n totalAmount: '$350.00',\n paymentMethod: 'Bank Transfer',\n },\n {\n invoice: 'INV004',\n paymentStatus: 'Paid',\n totalAmount: '$450.00',\n paymentMethod: 'Credit Card',\n },\n {\n invoice: 'INV005',\n paymentStatus: 'Paid',\n totalAmount: '$550.00',\n paymentMethod: 'PayPal',\n },\n {\n invoice: 'INV006',\n paymentStatus: 'Pending',\n totalAmount: '$200.00',\n paymentMethod: 'Bank Transfer',\n },\n {\n invoice: 'INV007',\n paymentStatus: 'Unpaid',\n totalAmount: '$300.00',\n paymentMethod: 'Credit Card',\n },\n]\n\nexport function TableDemo() {\n return (\n \n A list of your recent invoices. \n \n \n Invoice \n Status \n Method \n Amount \n \n \n \n {invoices.map(invoice => (\n \n {invoice.invoice} \n {invoice.paymentStatus} \n {invoice.paymentMethod} \n {invoice.totalAmount} \n \n ))}\n \n \n \n Total \n $2,500.00 \n \n \n
\n )\n}\n",
+ "type": "registry:component",
+ "target": ""
+ },
+ {
+ "path": "block/_sink/components/tabs-demo.tsx",
+ "content": "import { Button } from '~/registry/miami/ui/button'\nimport {\n Card,\n CardContent,\n CardDescription,\n CardFooter,\n CardHeader,\n CardTitle,\n} from '~/registry/miami/ui/card'\nimport { Input } from '~/registry/miami/ui/input'\nimport { Label } from '~/registry/miami/ui/label'\nimport {\n Tabs,\n TabsContent,\n TabsList,\n TabsTrigger,\n} from '~/registry/miami/ui/tabs'\n\nexport function TabsDemo() {\n return (\n \n \n Account \n Password \n \n \n \n \n Account \n \n Make changes to your account here. Click save when you're done.\n \n \n \n \n Name \n \n
\n \n Username \n \n
\n \n \n Save changes \n \n \n \n \n \n \n Password \n \n Change your password here. After saving, you'll be logged out.\n \n \n \n \n Current password \n \n
\n \n New password \n \n
\n \n \n Save password \n \n \n \n \n )\n}\n",
+ "type": "registry:component",
+ "target": ""
+ },
+ {
+ "path": "block/_sink/components/textarea-demo.tsx",
+ "content": "import { Textarea } from '~/registry/miami/ui/textarea'\n\nexport function TextareaDemo() {\n return \n}\n",
+ "type": "registry:component",
+ "target": ""
+ },
+ {
+ "path": "block/_sink/components/toast-demo.tsx",
+ "content": "'use client'\n\nimport { useToast } from '~/registry/miami/hooks/use-toast'\nimport { Button } from '~/registry/miami/ui/button'\nimport { ToastAction } from '~/registry/miami/ui/toast'\n\nexport function ToastDemo() {\n const { toast } = useToast()\n\n return (\n {\n toast({\n title: 'Scheduled: Catch up ',\n description: 'Friday, February 10, 2023 at 5:57 PM',\n action: (\n Undo \n ),\n })\n }}\n >\n Add to calendar\n \n )\n}\n",
+ "type": "registry:component",
+ "target": ""
+ },
+ {
+ "path": "block/_sink/components/toggle-demo.tsx",
+ "content": "import { Bold } from 'lucide-react'\n\nimport { Toggle } from '~/registry/miami/ui/toggle'\n\nexport function ToggleDemo() {\n return (\n \n \n \n )\n}\n",
+ "type": "registry:component",
+ "target": ""
+ },
+ {
+ "path": "block/_sink/components/toggle-group-demo.tsx",
+ "content": "import { Bold, Italic, Underline } from 'lucide-react'\n\nimport {\n ToggleGroup,\n ToggleGroupItem,\n} from '~/registry/miami/ui/toggle-group'\n\nexport function ToggleGroupDemo() {\n return (\n \n \n \n \n \n \n \n \n \n \n \n )\n}\n",
+ "type": "registry:component",
+ "target": ""
+ },
+ {
+ "path": "block/_sink/components/tooltip-demo.tsx",
+ "content": "import { Button } from '~/registry/miami/ui/button'\nimport {\n Tooltip,\n TooltipContent,\n TooltipProvider,\n TooltipTrigger,\n} from '~/registry/miami/ui/tooltip'\n\nexport function TooltipDemo() {\n return (\n \n \n \n Hover \n \n \n Add to library
\n \n \n \n )\n}\n",
+ "type": "registry:component",
+ "target": ""
+ },
+ {
+ "path": "block/_sink/components/badge-destructive.tsx",
+ "content": "import { Badge } from '~/registry/miami/ui/badge'\n\nexport function BadgeDestructive() {\n return Destructive \n}\n",
+ "type": "registry:component",
+ "target": ""
+ },
+ {
+ "path": "block/_sink/components/badge-outline.tsx",
+ "content": "import { Badge } from '~/registry/miami/ui/badge'\n\nexport function BadgeOutline() {\n return Outline \n}\n",
+ "type": "registry:component",
+ "target": ""
+ },
+ {
+ "path": "block/_sink/components/badge-secondary.tsx",
+ "content": "import { Badge } from '~/registry/miami/ui/badge'\n\nexport function BadgeSecondary() {\n return Secondary \n}\n",
+ "type": "registry:component",
+ "target": ""
+ },
+ {
+ "path": "block/_sink/components/button-destructive.tsx",
+ "content": "import { Button } from '~/registry/miami/ui/button'\n\nexport function ButtonDestructive() {\n return Destructive \n}\n",
+ "type": "registry:component",
+ "target": ""
+ },
+ {
+ "path": "block/_sink/components/button-ghost.tsx",
+ "content": "import { Button } from '~/registry/miami/ui/button'\n\nexport function ButtonGhost() {\n return Ghost \n}\n",
+ "type": "registry:component",
+ "target": ""
+ },
+ {
+ "path": "block/_sink/components/button-link.tsx",
+ "content": "import { Button } from '~/registry/miami/ui/button'\n\nexport function ButtonLink() {\n return Link \n}\n",
+ "type": "registry:component",
+ "target": ""
+ },
+ {
+ "path": "block/_sink/components/button-loading.tsx",
+ "content": "import { Loader2 } from 'lucide-react'\n\nimport { Button } from '~/registry/miami/ui/button'\n\nexport function ButtonLoading() {\n return (\n \n \n Please wait\n \n )\n}\n",
+ "type": "registry:component",
+ "target": ""
+ },
+ {
+ "path": "block/_sink/components/button-outline.tsx",
+ "content": "import { Button } from '~/registry/miami/ui/button'\n\nexport function ButtonOutline() {\n return Outline \n}\n",
+ "type": "registry:component",
+ "target": ""
+ },
+ {
+ "path": "block/_sink/components/button-secondary.tsx",
+ "content": "import { Button } from '~/registry/miami/ui/button'\n\nexport function ButtonSecondary() {\n return Secondary \n}\n",
+ "type": "registry:component",
+ "target": ""
+ },
+ {
+ "path": "block/_sink/components/button-with-icon.tsx",
+ "content": "import { MailOpen } from 'lucide-react'\n\nimport { Button } from '~/registry/miami/ui/button'\n\nexport function ButtonWithIcon() {\n return (\n \n \n {' '}\n Login with Email\n \n )\n}\n",
+ "type": "registry:component",
+ "target": ""
+ },
+ {
+ "path": "block/_sink/components/toggle-disabled.tsx",
+ "content": "import { Underline } from 'lucide-react'\n\nimport { Toggle } from '~/registry/miami/ui/toggle'\n\nexport function ToggleDisabled() {\n return (\n \n \n \n )\n}\n",
+ "type": "registry:component",
+ "target": ""
+ },
+ {
+ "path": "block/_sink/components/toggle-outline.tsx",
+ "content": "import { Italic } from 'lucide-react'\n\nimport { Toggle } from '~/registry/miami/ui/toggle'\n\nexport function ToggleOutline() {\n return (\n \n \n \n )\n}\n",
+ "type": "registry:component",
+ "target": ""
+ },
+ {
+ "path": "block/_sink/components/toggle-with-text.tsx",
+ "content": "import { Italic } from 'lucide-react'\n\nimport { Toggle } from '~/registry/miami/ui/toggle'\n\nexport function ToggleWithText() {\n return (\n \n \n Italic\n \n )\n}\n",
+ "type": "registry:component",
+ "target": ""
+ }
+ ]
+}
diff --git a/apps/web/public/r/styles/miami/authentication-01.json b/apps/web/public/r/styles/miami/authentication-01.json
index 742afc9a..7bfd745e 100644
--- a/apps/web/public/r/styles/miami/authentication-01.json
+++ b/apps/web/public/r/styles/miami/authentication-01.json
@@ -1,18 +1,13 @@
{
- "name": "authentication-01",
- "type": "registry:block",
- "registryDependencies": [
- "button",
- "card",
- "input",
- "label"
- ],
- "files": [
- {
- "path": "block/authentication-01.tsx",
- "content": "import { Button } from '~/registry/miami/ui/button'\nimport {\n Card,\n CardContent,\n CardDescription,\n CardFooter,\n CardHeader,\n CardTitle,\n} from '~/registry/miami/ui/card'\nimport { Input } from '~/registry/miami/ui/input'\nimport { Label } from '~/registry/miami/ui/label'\n\nexport default function LoginForm() {\n return (\n \n \n Login \n \n Enter your email below to login to your account.\n \n \n \n \n Email \n \n
\n \n Password \n \n
\n \n \n Sign in \n \n \n )\n}\n",
- "type": "registry:block",
- "target": ""
- }
- ]
+ "name": "authentication-01",
+ "type": "registry:block",
+ "registryDependencies": ["button", "card", "input", "label"],
+ "files": [
+ {
+ "path": "block/authentication-01.tsx",
+ "content": "import { Button } from '~/registry/miami/ui/button'\nimport {\n Card,\n CardContent,\n CardDescription,\n CardFooter,\n CardHeader,\n CardTitle,\n} from '~/registry/miami/ui/card'\nimport { Input } from '~/registry/miami/ui/input'\nimport { Label } from '~/registry/miami/ui/label'\n\nexport default function LoginForm() {\n return (\n \n \n Login \n \n Enter your email below to login to your account.\n \n \n \n \n Email \n \n
\n \n Password \n \n
\n \n \n Sign in \n \n \n )\n}\n",
+ "type": "registry:block",
+ "target": ""
+ }
+ ]
}
diff --git a/apps/web/public/r/styles/miami/authentication-02.json b/apps/web/public/r/styles/miami/authentication-02.json
index fafefbf9..4244eb03 100644
--- a/apps/web/public/r/styles/miami/authentication-02.json
+++ b/apps/web/public/r/styles/miami/authentication-02.json
@@ -1,18 +1,13 @@
{
- "name": "authentication-02",
- "type": "registry:block",
- "registryDependencies": [
- "button",
- "card",
- "input",
- "label"
- ],
- "files": [
- {
- "path": "block/authentication-02.tsx",
- "content": "import Link from 'next/link'\n\nimport { Button } from '~/registry/miami/ui/button'\nimport {\n Card,\n CardContent,\n CardDescription,\n CardHeader,\n CardTitle,\n} from '~/registry/miami/ui/card'\nimport { Input } from '~/registry/miami/ui/input'\nimport { Label } from '~/registry/miami/ui/label'\n\nexport default function LoginForm() {\n return (\n \n \n Login \n \n Enter your email below to login to your account\n \n \n \n \n
\n Email \n \n
\n
\n
\n Password \n \n Forgot your password?\n \n
\n
\n
\n
\n Login\n \n
\n Login with Google\n \n
\n \n Don't have an account?\n {' '}\n \n Sign up\n \n
\n \n \n )\n}\n",
- "type": "registry:block",
- "target": ""
- }
- ]
+ "name": "authentication-02",
+ "type": "registry:block",
+ "registryDependencies": ["button", "card", "input", "label"],
+ "files": [
+ {
+ "path": "block/authentication-02.tsx",
+ "content": "import Link from 'next/link'\n\nimport { Button } from '~/registry/miami/ui/button'\nimport {\n Card,\n CardContent,\n CardDescription,\n CardHeader,\n CardTitle,\n} from '~/registry/miami/ui/card'\nimport { Input } from '~/registry/miami/ui/input'\nimport { Label } from '~/registry/miami/ui/label'\n\nexport default function LoginForm() {\n return (\n \n \n Login \n \n Enter your email below to login to your account\n \n \n \n \n
\n Email \n \n
\n
\n
\n Password \n \n Forgot your password?\n \n
\n
\n
\n
\n Login\n \n
\n Login with Google\n \n
\n \n Don't have an account?\n {' '}\n \n Sign up\n \n
\n \n \n )\n}\n",
+ "type": "registry:block",
+ "target": ""
+ }
+ ]
}
diff --git a/apps/web/public/r/styles/miami/authentication-03.json b/apps/web/public/r/styles/miami/authentication-03.json
index adacdd22..c219709e 100644
--- a/apps/web/public/r/styles/miami/authentication-03.json
+++ b/apps/web/public/r/styles/miami/authentication-03.json
@@ -1,18 +1,13 @@
{
- "name": "authentication-03",
- "type": "registry:block",
- "registryDependencies": [
- "button",
- "card",
- "input",
- "label"
- ],
- "files": [
- {
- "path": "block/authentication-03.tsx",
- "content": "import Link from 'next/link'\n\nimport { Button } from '~/registry/miami/ui/button'\nimport {\n Card,\n CardContent,\n CardDescription,\n CardHeader,\n CardTitle,\n} from '~/registry/miami/ui/card'\nimport { Input } from '~/registry/miami/ui/input'\nimport { Label } from '~/registry/miami/ui/label'\n\nexport default function LoginForm() {\n return (\n \n \n Sign Up \n \n Enter your information to create an account\n \n \n \n \n
\n
\n Email \n \n
\n
\n Password \n \n
\n
\n Create an account\n \n
\n Sign up with GitHub\n \n
\n \n Already have an account?\n {' '}\n \n Sign in\n \n
\n \n \n )\n}\n",
- "type": "registry:block",
- "target": ""
- }
- ]
+ "name": "authentication-03",
+ "type": "registry:block",
+ "registryDependencies": ["button", "card", "input", "label"],
+ "files": [
+ {
+ "path": "block/authentication-03.tsx",
+ "content": "import Link from 'next/link'\n\nimport { Button } from '~/registry/miami/ui/button'\nimport {\n Card,\n CardContent,\n CardDescription,\n CardHeader,\n CardTitle,\n} from '~/registry/miami/ui/card'\nimport { Input } from '~/registry/miami/ui/input'\nimport { Label } from '~/registry/miami/ui/label'\n\nexport default function LoginForm() {\n return (\n \n \n Sign Up \n \n Enter your information to create an account\n \n \n \n \n
\n
\n Email \n \n
\n
\n Password \n \n
\n
\n Create an account\n \n
\n Sign up with GitHub\n \n
\n \n Already have an account?\n {' '}\n \n Sign in\n \n
\n \n \n )\n}\n",
+ "type": "registry:block",
+ "target": ""
+ }
+ ]
}
diff --git a/apps/web/public/r/styles/miami/authentication-04.json b/apps/web/public/r/styles/miami/authentication-04.json
index f8e56af8..c2e00981 100644
--- a/apps/web/public/r/styles/miami/authentication-04.json
+++ b/apps/web/public/r/styles/miami/authentication-04.json
@@ -1,18 +1,13 @@
{
- "name": "authentication-04",
- "type": "registry:block",
- "registryDependencies": [
- "button",
- "card",
- "input",
- "label"
- ],
- "files": [
- {
- "path": "block/authentication-04.tsx",
- "content": "import Image from 'next/image'\nimport Link from 'next/link'\n\nimport { Button } from '~/registry/miami/ui/button'\nimport { Input } from '~/registry/miami/ui/input'\nimport { Label } from '~/registry/miami/ui/label'\n\nexport default function Dashboard() {\n return (\n \n
\n
\n
\n
Login \n
\n Enter your email below to login to your account\n
\n
\n
\n
\n Email \n \n
\n
\n
\n Password \n \n Forgot your password?\n \n
\n
\n
\n
\n Login\n \n
\n Login with Google\n \n
\n
\n Don't have an account?\n {' '}\n \n Sign up\n \n
\n
\n
\n
\n \n
\n
\n )\n}\n",
- "type": "registry:block",
- "target": ""
- }
- ]
+ "name": "authentication-04",
+ "type": "registry:block",
+ "registryDependencies": ["button", "card", "input", "label"],
+ "files": [
+ {
+ "path": "block/authentication-04.tsx",
+ "content": "import Image from 'next/image'\nimport Link from 'next/link'\n\nimport { Button } from '~/registry/miami/ui/button'\nimport { Input } from '~/registry/miami/ui/input'\nimport { Label } from '~/registry/miami/ui/label'\n\nexport default function Dashboard() {\n return (\n \n
\n
\n
\n
Login \n
\n Enter your email below to login to your account\n
\n
\n
\n
\n Email \n \n
\n
\n
\n Password \n \n Forgot your password?\n \n
\n
\n
\n
\n Login\n \n
\n Login with Google\n \n
\n
\n Don't have an account?\n {' '}\n \n Sign up\n \n
\n
\n
\n
\n \n
\n
\n )\n}\n",
+ "type": "registry:block",
+ "target": ""
+ }
+ ]
}
diff --git a/apps/web/public/r/styles/miami/chart-bar-demo-axis.json b/apps/web/public/r/styles/miami/chart-bar-demo-axis.json
index 47f1bb6f..899cd897 100644
--- a/apps/web/public/r/styles/miami/chart-bar-demo-axis.json
+++ b/apps/web/public/r/styles/miami/chart-bar-demo-axis.json
@@ -1,12 +1,12 @@
{
- "name": "chart-bar-demo-axis",
- "type": "registry:example",
- "files": [
- {
- "path": "example/chart-bar-demo-axis.tsx",
- "content": "'use client'\n\nimport { Bar, BarChart, CartesianGrid, XAxis } from 'recharts'\n\nimport type { ChartConfig } from '~/registry/miami/ui/chart'\nimport { ChartContainer } from '~/registry/miami/ui/chart'\n\nconst chartData = [\n { month: 'January', desktop: 186, mobile: 80 },\n { month: 'February', desktop: 305, mobile: 200 },\n { month: 'March', desktop: 237, mobile: 120 },\n { month: 'April', desktop: 73, mobile: 190 },\n { month: 'May', desktop: 209, mobile: 130 },\n { month: 'June', desktop: 214, mobile: 140 },\n]\n\nconst chartConfig = {\n desktop: {\n label: 'Desktop',\n color: '#2563eb',\n },\n mobile: {\n label: 'Mobile',\n color: '#60a5fa',\n },\n} satisfies ChartConfig\n\nexport default function Component() {\n return (\n \n \n \n value.slice(0, 3)}\n />\n \n \n \n \n )\n}\n",
- "type": "registry:example",
- "target": ""
- }
- ]
+ "name": "chart-bar-demo-axis",
+ "type": "registry:example",
+ "files": [
+ {
+ "path": "example/chart-bar-demo-axis.tsx",
+ "content": "'use client'\n\nimport { Bar, BarChart, CartesianGrid, XAxis } from 'recharts'\n\nimport type { ChartConfig } from '~/registry/miami/ui/chart'\nimport { ChartContainer } from '~/registry/miami/ui/chart'\n\nconst chartData = [\n { month: 'January', desktop: 186, mobile: 80 },\n { month: 'February', desktop: 305, mobile: 200 },\n { month: 'March', desktop: 237, mobile: 120 },\n { month: 'April', desktop: 73, mobile: 190 },\n { month: 'May', desktop: 209, mobile: 130 },\n { month: 'June', desktop: 214, mobile: 140 },\n]\n\nconst chartConfig = {\n desktop: {\n label: 'Desktop',\n color: '#2563eb',\n },\n mobile: {\n label: 'Mobile',\n color: '#60a5fa',\n },\n} satisfies ChartConfig\n\nexport default function Component() {\n return (\n \n \n \n value.slice(0, 3)}\n />\n \n \n \n \n )\n}\n",
+ "type": "registry:example",
+ "target": ""
+ }
+ ]
}
diff --git a/apps/web/public/r/styles/miami/chart-bar-demo-grid.json b/apps/web/public/r/styles/miami/chart-bar-demo-grid.json
index 7bfd4161..43aba4e7 100644
--- a/apps/web/public/r/styles/miami/chart-bar-demo-grid.json
+++ b/apps/web/public/r/styles/miami/chart-bar-demo-grid.json
@@ -1,12 +1,12 @@
{
- "name": "chart-bar-demo-grid",
- "type": "registry:example",
- "files": [
- {
- "path": "example/chart-bar-demo-grid.tsx",
- "content": "'use client'\n\nimport { Bar, BarChart, CartesianGrid } from 'recharts'\n\nimport type { ChartConfig } from '~/registry/miami/ui/chart'\nimport { ChartContainer } from '~/registry/miami/ui/chart'\n\nconst chartData = [\n { month: 'January', desktop: 186, mobile: 80 },\n { month: 'February', desktop: 305, mobile: 200 },\n { month: 'March', desktop: 237, mobile: 120 },\n { month: 'April', desktop: 73, mobile: 190 },\n { month: 'May', desktop: 209, mobile: 130 },\n { month: 'June', desktop: 214, mobile: 140 },\n]\n\nconst chartConfig = {\n desktop: {\n label: 'Desktop',\n color: '#2563eb',\n },\n mobile: {\n label: 'Mobile',\n color: '#60a5fa',\n },\n} satisfies ChartConfig\n\nexport default function Component() {\n return (\n \n \n \n \n \n \n \n )\n}\n",
- "type": "registry:example",
- "target": ""
- }
- ]
+ "name": "chart-bar-demo-grid",
+ "type": "registry:example",
+ "files": [
+ {
+ "path": "example/chart-bar-demo-grid.tsx",
+ "content": "'use client'\n\nimport { Bar, BarChart, CartesianGrid } from 'recharts'\n\nimport type { ChartConfig } from '~/registry/miami/ui/chart'\nimport { ChartContainer } from '~/registry/miami/ui/chart'\n\nconst chartData = [\n { month: 'January', desktop: 186, mobile: 80 },\n { month: 'February', desktop: 305, mobile: 200 },\n { month: 'March', desktop: 237, mobile: 120 },\n { month: 'April', desktop: 73, mobile: 190 },\n { month: 'May', desktop: 209, mobile: 130 },\n { month: 'June', desktop: 214, mobile: 140 },\n]\n\nconst chartConfig = {\n desktop: {\n label: 'Desktop',\n color: '#2563eb',\n },\n mobile: {\n label: 'Mobile',\n color: '#60a5fa',\n },\n} satisfies ChartConfig\n\nexport default function Component() {\n return (\n \n \n \n \n \n \n \n )\n}\n",
+ "type": "registry:example",
+ "target": ""
+ }
+ ]
}
diff --git a/apps/web/public/r/styles/miami/chart-bar-demo-legend.json b/apps/web/public/r/styles/miami/chart-bar-demo-legend.json
index 2b895dd4..2e5c55ec 100644
--- a/apps/web/public/r/styles/miami/chart-bar-demo-legend.json
+++ b/apps/web/public/r/styles/miami/chart-bar-demo-legend.json
@@ -1,12 +1,12 @@
{
- "name": "chart-bar-demo-legend",
- "type": "registry:example",
- "files": [
- {
- "path": "example/chart-bar-demo-legend.tsx",
- "content": "'use client'\n\nimport { Bar, BarChart, CartesianGrid, XAxis } from 'recharts'\n\nimport type {\n ChartConfig,\n} from '~/registry/miami/ui/chart'\nimport {\n ChartContainer,\n ChartLegend,\n ChartLegendContent,\n ChartTooltip,\n ChartTooltipContent,\n} from '~/registry/miami/ui/chart'\n\nconst chartData = [\n { month: 'January', desktop: 186, mobile: 80 },\n { month: 'February', desktop: 305, mobile: 200 },\n { month: 'March', desktop: 237, mobile: 120 },\n { month: 'April', desktop: 73, mobile: 190 },\n { month: 'May', desktop: 209, mobile: 130 },\n { month: 'June', desktop: 214, mobile: 140 },\n]\n\nconst chartConfig = {\n desktop: {\n label: 'Desktop',\n color: '#2563eb',\n },\n mobile: {\n label: 'Mobile',\n color: '#60a5fa',\n },\n} satisfies ChartConfig\n\nexport default function Component() {\n return (\n \n \n \n value.slice(0, 3)}\n />\n } />\n } />\n \n \n \n \n )\n}\n",
- "type": "registry:example",
- "target": ""
- }
- ]
+ "name": "chart-bar-demo-legend",
+ "type": "registry:example",
+ "files": [
+ {
+ "path": "example/chart-bar-demo-legend.tsx",
+ "content": "'use client'\n\nimport { Bar, BarChart, CartesianGrid, XAxis } from 'recharts'\n\nimport type {\n ChartConfig,\n} from '~/registry/miami/ui/chart'\nimport {\n ChartContainer,\n ChartLegend,\n ChartLegendContent,\n ChartTooltip,\n ChartTooltipContent,\n} from '~/registry/miami/ui/chart'\n\nconst chartData = [\n { month: 'January', desktop: 186, mobile: 80 },\n { month: 'February', desktop: 305, mobile: 200 },\n { month: 'March', desktop: 237, mobile: 120 },\n { month: 'April', desktop: 73, mobile: 190 },\n { month: 'May', desktop: 209, mobile: 130 },\n { month: 'June', desktop: 214, mobile: 140 },\n]\n\nconst chartConfig = {\n desktop: {\n label: 'Desktop',\n color: '#2563eb',\n },\n mobile: {\n label: 'Mobile',\n color: '#60a5fa',\n },\n} satisfies ChartConfig\n\nexport default function Component() {\n return (\n \n \n \n value.slice(0, 3)}\n />\n } />\n } />\n \n \n \n \n )\n}\n",
+ "type": "registry:example",
+ "target": ""
+ }
+ ]
}
diff --git a/apps/web/public/r/styles/miami/chart-bar-demo-tooltip.json b/apps/web/public/r/styles/miami/chart-bar-demo-tooltip.json
index fb0449b6..c1a2e28e 100644
--- a/apps/web/public/r/styles/miami/chart-bar-demo-tooltip.json
+++ b/apps/web/public/r/styles/miami/chart-bar-demo-tooltip.json
@@ -1,12 +1,12 @@
{
- "name": "chart-bar-demo-tooltip",
- "type": "registry:example",
- "files": [
- {
- "path": "example/chart-bar-demo-tooltip.tsx",
- "content": "'use client'\n\nimport { Bar, BarChart, CartesianGrid, XAxis } from 'recharts'\n\nimport type {\n ChartConfig,\n} from '~/registry/miami/ui/chart'\nimport {\n ChartContainer,\n ChartTooltip,\n ChartTooltipContent,\n} from '~/registry/miami/ui/chart'\n\nconst chartData = [\n { month: 'January', desktop: 186, mobile: 80 },\n { month: 'February', desktop: 305, mobile: 200 },\n { month: 'March', desktop: 237, mobile: 120 },\n { month: 'April', desktop: 73, mobile: 190 },\n { month: 'May', desktop: 209, mobile: 130 },\n { month: 'June', desktop: 214, mobile: 140 },\n]\n\nconst chartConfig = {\n desktop: {\n label: 'Desktop',\n color: '#2563eb',\n },\n mobile: {\n label: 'Mobile',\n color: '#60a5fa',\n },\n} satisfies ChartConfig\n\nexport default function Component() {\n return (\n \n \n \n value.slice(0, 3)}\n />\n } />\n \n \n \n \n )\n}\n",
- "type": "registry:example",
- "target": ""
- }
- ]
+ "name": "chart-bar-demo-tooltip",
+ "type": "registry:example",
+ "files": [
+ {
+ "path": "example/chart-bar-demo-tooltip.tsx",
+ "content": "'use client'\n\nimport { Bar, BarChart, CartesianGrid, XAxis } from 'recharts'\n\nimport type {\n ChartConfig,\n} from '~/registry/miami/ui/chart'\nimport {\n ChartContainer,\n ChartTooltip,\n ChartTooltipContent,\n} from '~/registry/miami/ui/chart'\n\nconst chartData = [\n { month: 'January', desktop: 186, mobile: 80 },\n { month: 'February', desktop: 305, mobile: 200 },\n { month: 'March', desktop: 237, mobile: 120 },\n { month: 'April', desktop: 73, mobile: 190 },\n { month: 'May', desktop: 209, mobile: 130 },\n { month: 'June', desktop: 214, mobile: 140 },\n]\n\nconst chartConfig = {\n desktop: {\n label: 'Desktop',\n color: '#2563eb',\n },\n mobile: {\n label: 'Mobile',\n color: '#60a5fa',\n },\n} satisfies ChartConfig\n\nexport default function Component() {\n return (\n \n \n \n value.slice(0, 3)}\n />\n } />\n \n \n \n \n )\n}\n",
+ "type": "registry:example",
+ "target": ""
+ }
+ ]
}
diff --git a/apps/web/public/r/styles/miami/chart-bar-demo.json b/apps/web/public/r/styles/miami/chart-bar-demo.json
index fc9a36a4..10675b9b 100644
--- a/apps/web/public/r/styles/miami/chart-bar-demo.json
+++ b/apps/web/public/r/styles/miami/chart-bar-demo.json
@@ -1,12 +1,12 @@
{
- "name": "chart-bar-demo",
- "type": "registry:example",
- "files": [
- {
- "path": "example/chart-bar-demo.tsx",
- "content": "'use client'\n\nimport { Bar, BarChart } from 'recharts'\n\nimport type { ChartConfig } from '~/registry/miami/ui/chart'\nimport { ChartContainer } from '~/registry/miami/ui/chart'\n\nconst chartData = [\n { month: 'January', desktop: 186, mobile: 80 },\n { month: 'February', desktop: 305, mobile: 200 },\n { month: 'March', desktop: 237, mobile: 120 },\n { month: 'April', desktop: 73, mobile: 190 },\n { month: 'May', desktop: 209, mobile: 130 },\n { month: 'June', desktop: 214, mobile: 140 },\n]\n\nconst chartConfig = {\n desktop: {\n label: 'Desktop',\n color: '#2563eb',\n },\n mobile: {\n label: 'Mobile',\n color: '#60a5fa',\n },\n} satisfies ChartConfig\n\nexport default function Component() {\n return (\n \n \n \n \n \n \n )\n}\n",
- "type": "registry:example",
- "target": ""
- }
- ]
+ "name": "chart-bar-demo",
+ "type": "registry:example",
+ "files": [
+ {
+ "path": "example/chart-bar-demo.tsx",
+ "content": "'use client'\n\nimport { Bar, BarChart } from 'recharts'\n\nimport type { ChartConfig } from '~/registry/miami/ui/chart'\nimport { ChartContainer } from '~/registry/miami/ui/chart'\n\nconst chartData = [\n { month: 'January', desktop: 186, mobile: 80 },\n { month: 'February', desktop: 305, mobile: 200 },\n { month: 'March', desktop: 237, mobile: 120 },\n { month: 'April', desktop: 73, mobile: 190 },\n { month: 'May', desktop: 209, mobile: 130 },\n { month: 'June', desktop: 214, mobile: 140 },\n]\n\nconst chartConfig = {\n desktop: {\n label: 'Desktop',\n color: '#2563eb',\n },\n mobile: {\n label: 'Mobile',\n color: '#60a5fa',\n },\n} satisfies ChartConfig\n\nexport default function Component() {\n return (\n \n \n \n \n \n \n )\n}\n",
+ "type": "registry:example",
+ "target": ""
+ }
+ ]
}
diff --git a/apps/web/public/r/styles/miami/chart-tooltip-demo.json b/apps/web/public/r/styles/miami/chart-tooltip-demo.json
index f5b78af7..b50acdae 100644
--- a/apps/web/public/r/styles/miami/chart-tooltip-demo.json
+++ b/apps/web/public/r/styles/miami/chart-tooltip-demo.json
@@ -1,12 +1,12 @@
{
- "name": "chart-tooltip-demo",
- "type": "registry:example",
- "files": [
- {
- "path": "example/chart-tooltip-demo.tsx",
- "content": "'use client'\n\nimport * as React from 'react'\n\nimport { ny } from '~/lib/utils'\n\nexport default function Component() {\n return (\n div]:relative [&>div]:flex [&>div]:h-[137px] [&>div]:w-[224px] [&>div]:items-center [&>div]:justify-center [&>div]:p-4\">\n
\n
\n Label\n
\n
\n \n \n \n \n \n \n \n \n \n
\n
\n
\n
\n Name\n
\n
\n \n \n \n \n \n \n \n \n \n
\n
\n
\n \n
\n
\n
\n Indicator\n
\n
\n
\n \n \n \n \n \n \n \n \n \n
\n
\n )\n}\n\nfunction TooltipDemo({\n indicator = 'dot',\n label,\n payload,\n hideLabel,\n hideIndicator,\n className,\n}: {\n label: string\n hideLabel?: boolean\n hideIndicator?: boolean\n indicator?: 'line' | 'dot' | 'dashed'\n payload: {\n name: string\n value: number\n fill: string\n }[]\n nameKey?: string\n labelKey?: string\n} & React.ComponentProps<'div'>) {\n const tooltipLabel = hideLabel\n ? null\n : (\n {label}
\n )\n\n if (!payload?.length) {\n return null\n }\n\n const nestLabel = payload.length === 1 && indicator !== 'dot'\n\n return (\n \n {!nestLabel ? tooltipLabel : null}\n
\n {payload.map((item, index) => {\n const indicatorColor = item.fill\n\n return (\n
svg]:text-muted-foreground flex w-full items-stretch gap-2 [&>svg]:size-2.5',\n indicator === 'dot' && 'items-center',\n )}\n >\n <>\n {!hideIndicator && (\n
\n )}\n
\n
\n {nestLabel ? tooltipLabel : null}\n {item.name} \n
\n
\n {item.value.toLocaleString()}\n \n
\n >\n
\n )\n })}\n
\n
\n )\n}\n",
- "type": "registry:example",
- "target": ""
- }
- ]
+ "name": "chart-tooltip-demo",
+ "type": "registry:example",
+ "files": [
+ {
+ "path": "example/chart-tooltip-demo.tsx",
+ "content": "'use client'\n\nimport * as React from 'react'\n\nimport { ny } from '~/lib/utils'\n\nexport default function Component() {\n return (\n div]:relative [&>div]:flex [&>div]:h-[137px] [&>div]:w-[224px] [&>div]:items-center [&>div]:justify-center [&>div]:p-4\">\n
\n
\n Label\n
\n
\n \n \n \n \n \n \n \n \n \n
\n
\n
\n
\n Name\n
\n
\n \n \n \n \n \n \n \n \n \n
\n
\n
\n \n
\n
\n
\n Indicator\n
\n
\n
\n \n \n \n \n \n \n \n \n \n
\n
\n )\n}\n\nfunction TooltipDemo({\n indicator = 'dot',\n label,\n payload,\n hideLabel,\n hideIndicator,\n className,\n}: {\n label: string\n hideLabel?: boolean\n hideIndicator?: boolean\n indicator?: 'line' | 'dot' | 'dashed'\n payload: {\n name: string\n value: number\n fill: string\n }[]\n nameKey?: string\n labelKey?: string\n} & React.ComponentProps<'div'>) {\n const tooltipLabel = hideLabel\n ? null\n : (\n {label}
\n )\n\n if (!payload?.length) {\n return null\n }\n\n const nestLabel = payload.length === 1 && indicator !== 'dot'\n\n return (\n \n {!nestLabel ? tooltipLabel : null}\n
\n {payload.map((item, index) => {\n const indicatorColor = item.fill\n\n return (\n
svg]:text-muted-foreground flex w-full items-stretch gap-2 [&>svg]:size-2.5',\n indicator === 'dot' && 'items-center',\n )}\n >\n <>\n {!hideIndicator && (\n
\n )}\n
\n
\n {nestLabel ? tooltipLabel : null}\n {item.name} \n
\n
\n {item.value.toLocaleString()}\n \n
\n >\n
\n )\n })}\n
\n
\n )\n}\n",
+ "type": "registry:example",
+ "target": ""
+ }
+ ]
}
diff --git a/apps/web/public/r/styles/miami/charts-01.json b/apps/web/public/r/styles/miami/charts-01.json
index aa8134a5..e951d39f 100644
--- a/apps/web/public/r/styles/miami/charts-01.json
+++ b/apps/web/public/r/styles/miami/charts-01.json
@@ -1,15 +1,13 @@
{
- "name": "charts-01",
- "type": "registry:block",
- "registryDependencies": [
- "chart"
- ],
- "files": [
- {
- "path": "block/charts-01.tsx",
- "content": "'use client'\n\nimport {\n Area,\n AreaChart,\n Bar,\n BarChart,\n CartesianGrid,\n Label,\n LabelList,\n Line,\n LineChart,\n PolarAngleAxis,\n RadialBar,\n RadialBarChart,\n Rectangle,\n ReferenceLine,\n XAxis,\n YAxis,\n} from 'recharts'\n\nimport {\n Card,\n CardContent,\n CardDescription,\n CardFooter,\n CardHeader,\n CardTitle,\n} from '~/registry/miami//ui/card'\nimport {\n ChartContainer,\n ChartTooltip,\n ChartTooltipContent,\n} from '~/registry/miami//ui/chart'\nimport { Separator } from '~/registry/miami//ui/separator'\n\nexport default function Charts() {\n return (\n \n
\n
\n \n Today \n \n 12,584\n {' '}\n \n steps\n \n \n \n \n \n \n }\n />\n {\n return new Date(value).toLocaleDateString('en-US', {\n weekday: 'short',\n })\n }}\n />\n {\n return new Date(value).toLocaleDateString('en-US', {\n day: 'numeric',\n month: 'long',\n year: 'numeric',\n })\n }}\n />\n )}\n cursor={false}\n />\n \n \n \n \n \n \n \n \n \n Over the past 7 days, you have walked\n {' '}\n 53,305 \n {' '}\n steps.\n \n \n You need\n {' '}\n 12,584 \n {' '}\n more\n steps to reach your goal.\n \n \n \n
\n div]:flex-1\">\n \n Resting HR \n \n 62\n \n bpm\n \n \n
\n \n Variability \n \n 35\n \n ms\n \n \n
\n \n \n \n \n \n \n {\n return new Date(value).toLocaleDateString('en-US', {\n weekday: 'short',\n })\n }}\n />\n \n {\n return new Date(value).toLocaleDateString('en-US', {\n day: 'numeric',\n month: 'long',\n year: 'numeric',\n })\n }}\n />\n )}\n cursor={false}\n />\n \n \n \n \n
\n
\n
\n \n Progress \n \n You're average more steps a day this year than last year.\n \n \n \n \n
\n 12,453\n \n steps/day\n \n
\n
\n \n \n \n \n \n \n \n \n
\n \n
\n 10,103\n \n steps/day\n \n
\n
\n \n \n \n \n \n \n \n \n
\n \n \n
\n \n Walking Distance \n \n Over the last 7 days, your distance walked and run was 12.5 miles\n per day.\n \n \n \n \n 12.5\n \n miles/day\n \n
\n \n \n }\n />\n \n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n
Move
\n
\n 562\n \n kcal\n \n
\n
\n
\n
\n
Exercise
\n
\n 73\n \n min\n \n
\n
\n
\n
\n
Stand
\n
\n 14\n \n hr\n \n
\n
\n
\n \n \n
\n
\n
\n \n \n
\n
Move
\n
\n 562/600\n \n kcal\n \n
\n
\n
\n
Exercise
\n
\n 73/120\n \n min\n \n
\n
\n
\n
Stand
\n
\n 8/12\n \n hr\n \n
\n
\n
\n \n \n \n \n \n \n \n \n
\n \n Active Energy \n \n You're burning an average of 754 calories per day. Good job!\n \n \n \n \n 1,254\n \n kcal/day\n \n
\n \n \n }\n />\n \n \n \n \n \n
\n \n Time in Bed \n \n 8\n \n hr\n \n 35\n \n min\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n }\n formatter={value => (\n \n Time in bed\n
\n {value}\n \n hr\n \n
\n
\n )}\n />\n \n \n \n \n
\n
\n )\n}\n",
- "type": "registry:block",
- "target": ""
- }
- ]
+ "name": "charts-01",
+ "type": "registry:block",
+ "registryDependencies": ["chart"],
+ "files": [
+ {
+ "path": "block/charts-01.tsx",
+ "content": "'use client'\n\nimport {\n Area,\n AreaChart,\n Bar,\n BarChart,\n CartesianGrid,\n Label,\n LabelList,\n Line,\n LineChart,\n PolarAngleAxis,\n RadialBar,\n RadialBarChart,\n Rectangle,\n ReferenceLine,\n XAxis,\n YAxis,\n} from 'recharts'\n\nimport {\n Card,\n CardContent,\n CardDescription,\n CardFooter,\n CardHeader,\n CardTitle,\n} from '~/registry/miami//ui/card'\nimport {\n ChartContainer,\n ChartTooltip,\n ChartTooltipContent,\n} from '~/registry/miami//ui/chart'\nimport { Separator } from '~/registry/miami//ui/separator'\n\nexport default function Charts() {\n return (\n \n
\n
\n \n Today \n \n 12,584\n {' '}\n \n steps\n \n \n \n \n \n \n }\n />\n {\n return new Date(value).toLocaleDateString('en-US', {\n weekday: 'short',\n })\n }}\n />\n {\n return new Date(value).toLocaleDateString('en-US', {\n day: 'numeric',\n month: 'long',\n year: 'numeric',\n })\n }}\n />\n )}\n cursor={false}\n />\n \n \n \n \n \n \n \n \n \n Over the past 7 days, you have walked\n {' '}\n 53,305 \n {' '}\n steps.\n \n \n You need\n {' '}\n 12,584 \n {' '}\n more\n steps to reach your goal.\n \n \n \n
\n div]:flex-1\">\n \n Resting HR \n \n 62\n \n bpm\n \n \n
\n \n Variability \n \n 35\n \n ms\n \n \n
\n \n \n \n \n \n \n {\n return new Date(value).toLocaleDateString('en-US', {\n weekday: 'short',\n })\n }}\n />\n \n {\n return new Date(value).toLocaleDateString('en-US', {\n day: 'numeric',\n month: 'long',\n year: 'numeric',\n })\n }}\n />\n )}\n cursor={false}\n />\n \n \n \n \n
\n
\n
\n \n Progress \n \n You're average more steps a day this year than last year.\n \n \n \n \n
\n 12,453\n \n steps/day\n \n
\n
\n \n \n \n \n \n \n \n \n
\n \n
\n 10,103\n \n steps/day\n \n
\n
\n \n \n \n \n \n \n \n \n
\n \n \n
\n \n Walking Distance \n \n Over the last 7 days, your distance walked and run was 12.5 miles\n per day.\n \n \n \n \n 12.5\n \n miles/day\n \n
\n \n \n }\n />\n \n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n
Move
\n
\n 562\n \n kcal\n \n
\n
\n
\n
\n
Exercise
\n
\n 73\n \n min\n \n
\n
\n
\n
\n
Stand
\n
\n 14\n \n hr\n \n
\n
\n
\n \n \n
\n
\n
\n \n \n
\n
Move
\n
\n 562/600\n \n kcal\n \n
\n
\n
\n
Exercise
\n
\n 73/120\n \n min\n \n
\n
\n
\n
Stand
\n
\n 8/12\n \n hr\n \n
\n
\n
\n \n \n \n \n \n \n \n \n
\n \n Active Energy \n \n You're burning an average of 754 calories per day. Good job!\n \n \n \n \n 1,254\n \n kcal/day\n \n
\n \n \n }\n />\n \n \n \n \n \n
\n \n Time in Bed \n \n 8\n \n hr\n \n 35\n \n min\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n }\n formatter={value => (\n \n Time in bed\n
\n {value}\n \n hr\n \n
\n
\n )}\n />\n \n \n \n \n
\n
\n )\n}\n",
+ "type": "registry:block",
+ "target": ""
+ }
+ ]
}
diff --git a/apps/web/public/r/styles/miami/dashboard-01.json b/apps/web/public/r/styles/miami/dashboard-01.json
index 1ac0553f..af123de2 100644
--- a/apps/web/public/r/styles/miami/dashboard-01.json
+++ b/apps/web/public/r/styles/miami/dashboard-01.json
@@ -1,18 +1,13 @@
{
- "name": "dashboard-01",
- "type": "registry:block",
- "registryDependencies": [
- "button",
- "dropdown-menu",
- "input",
- "sheet"
- ],
- "files": [
- {
- "path": "block/dashboard-01.tsx",
- "content": "import Link from 'next/link'\nimport {\n Activity,\n ArrowUpRight,\n CircleUser,\n CreditCard,\n DollarSign,\n Menu,\n Package2,\n Search,\n Users,\n} from 'lucide-react'\n\nimport {\n Avatar,\n AvatarFallback,\n AvatarImage,\n} from '~/registry/miami/ui/avatar'\nimport { Badge } from '~/registry/miami/ui/badge'\nimport { Button } from '~/registry/miami/ui/button'\nimport {\n Card,\n CardContent,\n CardDescription,\n CardHeader,\n CardTitle,\n} from '~/registry/miami/ui/card'\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuLabel,\n DropdownMenuSeparator,\n DropdownMenuTrigger,\n} from '~/registry/miami/ui/dropdown-menu'\nimport { Input } from '~/registry/miami/ui/input'\nimport { Sheet, SheetContent, SheetTrigger } from '~/registry/miami/ui/sheet'\nimport {\n Table,\n TableBody,\n TableCell,\n TableHead,\n TableHeader,\n TableRow,\n} from '~/registry/miami/ui/table'\n\nexport default function Dashboard() {\n return (\n \n
\n \n \n \n Acme Inc \n \n \n Dashboard\n \n \n Orders\n \n \n Products\n \n \n Customers\n \n \n Analytics\n \n \n \n \n \n \n Toggle navigation menu \n \n \n \n \n \n \n Acme Inc \n \n \n Dashboard\n \n \n Orders\n \n \n Products\n \n \n Customers\n \n \n Analytics\n \n \n \n \n \n
\n \n \n \n
\n \n
\n \n \n \n Toggle user menu \n \n \n \n My Account \n \n Settings \n Support \n \n Logout \n \n \n
\n \n
\n \n
\n \n \n Total Revenue\n \n \n \n \n $45,231.89
\n \n +20.1% from last month\n
\n \n \n
\n \n \n Subscriptions\n \n \n \n \n +2350
\n \n +180.1% from last month\n
\n \n \n
\n \n Sales \n \n \n \n +12,234
\n \n +19% from last month\n
\n \n \n
\n \n Active Now \n \n \n \n +573
\n \n +201 since last hour\n
\n \n \n
\n \n
\n \n \n Transactions \n \n Recent transactions from your store.\n \n
\n \n \n View All\n \n \n \n \n \n \n \n \n Customer \n \n Type\n \n \n Status\n \n \n Date\n \n Amount \n \n \n \n \n \n Liam Johnson
\n \n liam@example.com\n
\n \n \n Sale\n \n \n \n Approved\n \n \n \n 2023-06-23\n \n $250.00 \n \n \n \n Olivia Smith
\n \n olivia@example.com\n
\n \n \n Refund\n \n \n \n Declined\n \n \n \n 2023-06-24\n \n $150.00 \n \n \n \n Noah Williams
\n \n noah@example.com\n
\n \n \n Subscription\n \n \n \n Approved\n \n \n \n 2023-06-25\n \n $350.00 \n \n \n \n Emma Brown
\n \n emma@example.com\n
\n \n \n Sale\n \n \n \n Approved\n \n \n \n 2023-06-26\n \n $450.00 \n \n \n \n Liam Johnson
\n \n liam@example.com\n
\n \n \n Sale\n \n \n \n Approved\n \n \n \n 2023-06-27\n \n $550.00 \n \n \n
\n \n \n
\n \n Recent Sales \n \n \n \n
\n \n OM \n \n
\n
\n Olivia Martin\n
\n
\n olivia.martin@email.com\n
\n
\n
+$1,999.00
\n
\n \n
\n \n JL \n \n
\n
\n Jackson Lee\n
\n
\n jackson.lee@email.com\n
\n
\n
+$39.00
\n
\n \n
\n \n IN \n \n
\n
\n Isabella Nguyen\n
\n
\n isabella.nguyen@email.com\n
\n
\n
+$299.00
\n
\n \n
\n \n WK \n \n
\n
\n William Kim\n
\n
\n will@email.com\n
\n
\n
+$99.00
\n
\n \n
\n \n SD \n \n
\n
\n Sofia Davis\n
\n
\n sofia.davis@email.com\n
\n
\n
+$39.00
\n
\n \n \n
\n \n
\n )\n}\n",
- "type": "registry:block",
- "target": ""
- }
- ]
+ "name": "dashboard-01",
+ "type": "registry:block",
+ "registryDependencies": ["button", "dropdown-menu", "input", "sheet"],
+ "files": [
+ {
+ "path": "block/dashboard-01.tsx",
+ "content": "import Link from 'next/link'\nimport {\n Activity,\n ArrowUpRight,\n CircleUser,\n CreditCard,\n DollarSign,\n Menu,\n Package2,\n Search,\n Users,\n} from 'lucide-react'\n\nimport {\n Avatar,\n AvatarFallback,\n AvatarImage,\n} from '~/registry/miami/ui/avatar'\nimport { Badge } from '~/registry/miami/ui/badge'\nimport { Button } from '~/registry/miami/ui/button'\nimport {\n Card,\n CardContent,\n CardDescription,\n CardHeader,\n CardTitle,\n} from '~/registry/miami/ui/card'\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuLabel,\n DropdownMenuSeparator,\n DropdownMenuTrigger,\n} from '~/registry/miami/ui/dropdown-menu'\nimport { Input } from '~/registry/miami/ui/input'\nimport { Sheet, SheetContent, SheetTrigger } from '~/registry/miami/ui/sheet'\nimport {\n Table,\n TableBody,\n TableCell,\n TableHead,\n TableHeader,\n TableRow,\n} from '~/registry/miami/ui/table'\n\nexport default function Dashboard() {\n return (\n \n
\n \n \n \n Acme Inc \n \n \n Dashboard\n \n \n Orders\n \n \n Products\n \n \n Customers\n \n \n Analytics\n \n \n \n \n \n \n Toggle navigation menu \n \n \n \n \n \n \n Acme Inc \n \n \n Dashboard\n \n \n Orders\n \n \n Products\n \n \n Customers\n \n \n Analytics\n \n \n \n \n \n
\n \n \n \n
\n \n
\n \n \n \n Toggle user menu \n \n \n \n My Account \n \n Settings \n Support \n \n Logout \n \n \n
\n \n
\n \n
\n \n \n Total Revenue\n \n \n \n \n $45,231.89
\n \n +20.1% from last month\n
\n \n \n
\n \n \n Subscriptions\n \n \n \n \n +2350
\n \n +180.1% from last month\n
\n \n \n
\n \n Sales \n \n \n \n +12,234
\n \n +19% from last month\n
\n \n \n
\n \n Active Now \n \n \n \n +573
\n \n +201 since last hour\n
\n \n \n
\n \n
\n \n \n Transactions \n \n Recent transactions from your store.\n \n
\n \n \n View All\n \n \n \n \n \n \n \n \n Customer \n \n Type\n \n \n Status\n \n \n Date\n \n Amount \n \n \n \n \n \n Liam Johnson
\n \n liam@example.com\n
\n \n \n Sale\n \n \n \n Approved\n \n \n \n 2023-06-23\n \n $250.00 \n \n \n \n Olivia Smith
\n \n olivia@example.com\n
\n \n \n Refund\n \n \n \n Declined\n \n \n \n 2023-06-24\n \n $150.00 \n \n \n \n Noah Williams
\n \n noah@example.com\n
\n \n \n Subscription\n \n \n \n Approved\n \n \n \n 2023-06-25\n \n $350.00 \n \n \n \n Emma Brown
\n \n emma@example.com\n
\n \n \n Sale\n \n \n \n Approved\n \n \n \n 2023-06-26\n \n $450.00 \n \n \n \n Liam Johnson
\n \n liam@example.com\n
\n \n \n Sale\n \n \n \n Approved\n \n \n \n 2023-06-27\n \n $550.00 \n \n \n
\n \n \n
\n \n Recent Sales \n \n \n \n
\n \n OM \n \n
\n
\n Olivia Martin\n
\n
\n olivia.martin@email.com\n
\n
\n
+$1,999.00
\n
\n \n
\n \n JL \n \n
\n
\n Jackson Lee\n
\n
\n jackson.lee@email.com\n
\n
\n
+$39.00
\n
\n \n
\n \n IN \n \n
\n
\n Isabella Nguyen\n
\n
\n isabella.nguyen@email.com\n
\n
\n
+$299.00
\n
\n \n
\n \n WK \n \n
\n
\n William Kim\n
\n
\n will@email.com\n
\n
\n
+$99.00
\n
\n \n
\n \n SD \n \n
\n
\n Sofia Davis\n
\n
\n sofia.davis@email.com\n
\n
\n
+$39.00
\n
\n \n \n
\n \n
\n )\n}\n",
+ "type": "registry:block",
+ "target": ""
+ }
+ ]
}
diff --git a/apps/web/public/r/styles/miami/dashboard-02.json b/apps/web/public/r/styles/miami/dashboard-02.json
index 6a2fdf4b..04b6e9cc 100644
--- a/apps/web/public/r/styles/miami/dashboard-02.json
+++ b/apps/web/public/r/styles/miami/dashboard-02.json
@@ -1,19 +1,19 @@
{
- "name": "dashboard-02",
- "type": "registry:block",
- "registryDependencies": [
- "badge",
- "button",
- "card",
- "dropdown-menu",
- "input"
- ],
- "files": [
- {
- "path": "block/dashboard-02.tsx",
- "content": "import Link from 'next/link'\nimport {\n Bell,\n CircleUser,\n Home,\n LineChart,\n Menu,\n Package,\n Package2,\n Search,\n ShoppingCart,\n Users,\n} from 'lucide-react'\n\nimport { Badge } from '~/registry/miami/ui/badge'\nimport { Button } from '~/registry/miami/ui/button'\nimport {\n Card,\n CardContent,\n CardDescription,\n CardHeader,\n CardTitle,\n} from '~/registry/miami/ui/card'\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuLabel,\n DropdownMenuSeparator,\n DropdownMenuTrigger,\n} from '~/registry/miami/ui/dropdown-menu'\nimport { Input } from '~/registry/miami/ui/input'\nimport { Sheet, SheetContent, SheetTrigger } from '~/registry/miami/ui/sheet'\n\nexport default function Dashboard() {\n return (\n \n
\n
\n
\n
\n
\n
Acme Inc \n \n
\n \n Toggle notifications \n \n
\n
\n
\n \n \n Dashboard\n \n \n \n Orders\n \n 6\n \n \n \n \n Products\n {' '}\n \n \n \n Customers\n \n \n \n Analytics\n \n \n
\n
\n \n \n Upgrade to Pro \n \n Unlock all features and get unlimited access to our support\n team.\n \n \n \n \n Upgrade\n \n \n \n
\n
\n
\n
\n
\n \n \n \n \n Toggle navigation menu \n \n \n \n \n \n \n Acme Inc \n \n \n \n Dashboard\n \n \n \n Orders\n \n 6\n \n \n \n \n Products\n \n \n \n Customers\n \n \n \n Analytics\n \n \n \n \n \n Upgrade to Pro \n \n Unlock all features and get unlimited access to our\n support team.\n \n \n \n \n Upgrade\n \n \n \n
\n \n \n \n \n \n \n \n Toggle user menu \n \n \n \n My Account \n \n Settings \n Support \n \n Logout \n \n \n \n
\n \n
Inventory \n \n \n
\n
\n You have no products\n \n
\n You can start selling as soon as you add a product.\n
\n
Add Product \n
\n
\n \n
\n
\n )\n}\n",
- "type": "registry:block",
- "target": ""
- }
- ]
+ "name": "dashboard-02",
+ "type": "registry:block",
+ "registryDependencies": [
+ "badge",
+ "button",
+ "card",
+ "dropdown-menu",
+ "input"
+ ],
+ "files": [
+ {
+ "path": "block/dashboard-02.tsx",
+ "content": "import Link from 'next/link'\nimport {\n Bell,\n CircleUser,\n Home,\n LineChart,\n Menu,\n Package,\n Package2,\n Search,\n ShoppingCart,\n Users,\n} from 'lucide-react'\n\nimport { Badge } from '~/registry/miami/ui/badge'\nimport { Button } from '~/registry/miami/ui/button'\nimport {\n Card,\n CardContent,\n CardDescription,\n CardHeader,\n CardTitle,\n} from '~/registry/miami/ui/card'\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuLabel,\n DropdownMenuSeparator,\n DropdownMenuTrigger,\n} from '~/registry/miami/ui/dropdown-menu'\nimport { Input } from '~/registry/miami/ui/input'\nimport { Sheet, SheetContent, SheetTrigger } from '~/registry/miami/ui/sheet'\n\nexport default function Dashboard() {\n return (\n \n
\n
\n
\n
\n
\n
Acme Inc \n \n
\n \n Toggle notifications \n \n
\n
\n
\n \n \n Dashboard\n \n \n \n Orders\n \n 6\n \n \n \n \n Products\n {' '}\n \n \n \n Customers\n \n \n \n Analytics\n \n \n
\n
\n \n \n Upgrade to Pro \n \n Unlock all features and get unlimited access to our support\n team.\n \n \n \n \n Upgrade\n \n \n \n
\n
\n
\n
\n
\n \n \n \n \n Toggle navigation menu \n \n \n \n \n \n \n Acme Inc \n \n \n \n Dashboard\n \n \n \n Orders\n \n 6\n \n \n \n \n Products\n \n \n \n Customers\n \n \n \n Analytics\n \n \n \n \n \n Upgrade to Pro \n \n Unlock all features and get unlimited access to our\n support team.\n \n \n \n \n Upgrade\n \n \n \n
\n \n \n \n \n \n \n \n Toggle user menu \n \n \n \n My Account \n \n Settings \n Support \n \n Logout \n \n \n \n
\n \n
Inventory \n \n \n
\n
\n You have no products\n \n
\n You can start selling as soon as you add a product.\n
\n
Add Product \n
\n
\n \n
\n
\n )\n}\n",
+ "type": "registry:block",
+ "target": ""
+ }
+ ]
}
diff --git a/apps/web/public/r/styles/miami/dashboard-03.json b/apps/web/public/r/styles/miami/dashboard-03.json
index 8acae080..cdfda4ee 100644
--- a/apps/web/public/r/styles/miami/dashboard-03.json
+++ b/apps/web/public/r/styles/miami/dashboard-03.json
@@ -1,22 +1,22 @@
{
- "name": "dashboard-03",
- "type": "registry:block",
- "registryDependencies": [
- "badge",
- "button",
- "drawer",
- "input",
- "label",
- "select",
- "textarea",
- "tooltip"
- ],
- "files": [
- {
- "path": "block/dashboard-03.tsx",
- "content": "import {\n Bird,\n Book,\n Bot,\n Code2,\n CornerDownLeft,\n LifeBuoy,\n Mic,\n Paperclip,\n Rabbit,\n Settings,\n Settings2,\n Share,\n SquareTerminal,\n SquareUser,\n Triangle,\n Turtle,\n} from 'lucide-react'\n\nimport { Badge } from '~/registry/miami/ui/badge'\nimport { Button } from '~/registry/miami/ui/button'\nimport {\n Drawer,\n DrawerContent,\n DrawerDescription,\n DrawerHeader,\n DrawerTitle,\n DrawerTrigger,\n} from '~/registry/miami/ui/drawer'\nimport { Input } from '~/registry/miami/ui/input'\nimport { Label } from '~/registry/miami/ui/label'\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from '~/registry/miami/ui/select'\nimport { Textarea } from '~/registry/miami/ui/textarea'\nimport {\n Tooltip,\n TooltipContent,\n TooltipTrigger,\n} from '~/registry/miami/ui/tooltip'\n\nexport default function Dashboard() {\n return (\n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n \n Playground\n \n \n \n \n \n \n \n \n \n Models\n \n \n \n \n \n \n \n \n \n API\n \n \n \n \n \n \n \n \n \n Documentation\n \n \n \n \n \n \n \n \n \n Settings\n \n \n \n \n \n \n \n \n \n \n \n Help\n \n \n \n \n \n \n \n \n \n Account\n \n \n \n \n
\n
\n Playground \n \n \n \n \n Settings \n \n \n \n \n Configuration \n \n Configure the settings for the model and messages.\n \n \n \n \n \n Settings\n \n \n
Model \n
\n \n \n \n \n \n \n
\n
\n
\n Neural\n {' '}\n \n Genesis\n \n
\n
\n Our fastest model for general use cases.\n
\n
\n
\n \n \n \n
\n
\n
\n Neural\n {' '}\n \n Explorer\n \n
\n
\n Performance and speed for efficiency.\n
\n
\n
\n \n \n \n
\n
\n
\n Neural\n {' '}\n \n Quantum\n \n
\n
\n The most powerful model for complex\n computations.\n
\n
\n
\n \n \n \n
\n \n Temperature \n \n
\n \n Top P \n \n
\n \n Top K \n \n
\n \n \n \n Messages\n \n \n Role \n \n \n \n \n \n System \n User \n Assistant \n \n \n
\n \n Content \n \n
\n \n \n \n \n \n \n Share\n \n \n
\n \n
\n \n \n Settings\n \n \n
Model \n
\n \n \n \n \n \n \n
\n
\n
\n Neural\n {' '}\n \n Genesis\n \n
\n
\n Our fastest model for general use cases.\n
\n
\n
\n \n \n \n
\n
\n
\n Neural\n {' '}\n \n Explorer\n \n
\n
\n Performance and speed for efficiency.\n
\n
\n
\n \n \n \n
\n
\n
\n Neural\n {' '}\n \n Quantum\n \n
\n
\n The most powerful model for complex computations.\n
\n
\n
\n \n \n \n
\n \n Temperature \n \n
\n \n \n \n \n Messages\n \n \n Role \n \n \n \n \n \n System \n User \n Assistant \n \n \n
\n \n Content \n \n
\n \n \n
\n \n
\n Output\n \n
\n
\n \n Message\n \n \n \n
\n \n \n \n Attach file \n \n \n Attach File \n \n
\n \n \n \n Use Microphone \n \n \n Use Microphone \n \n
\n Send Message\n \n \n
\n \n
\n \n
\n
\n )\n}\n",
- "type": "registry:block",
- "target": ""
- }
- ]
+ "name": "dashboard-03",
+ "type": "registry:block",
+ "registryDependencies": [
+ "badge",
+ "button",
+ "drawer",
+ "input",
+ "label",
+ "select",
+ "textarea",
+ "tooltip"
+ ],
+ "files": [
+ {
+ "path": "block/dashboard-03.tsx",
+ "content": "import {\n Bird,\n Book,\n Bot,\n Code2,\n CornerDownLeft,\n LifeBuoy,\n Mic,\n Paperclip,\n Rabbit,\n Settings,\n Settings2,\n Share,\n SquareTerminal,\n SquareUser,\n Triangle,\n Turtle,\n} from 'lucide-react'\n\nimport { Badge } from '~/registry/miami/ui/badge'\nimport { Button } from '~/registry/miami/ui/button'\nimport {\n Drawer,\n DrawerContent,\n DrawerDescription,\n DrawerHeader,\n DrawerTitle,\n DrawerTrigger,\n} from '~/registry/miami/ui/drawer'\nimport { Input } from '~/registry/miami/ui/input'\nimport { Label } from '~/registry/miami/ui/label'\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from '~/registry/miami/ui/select'\nimport { Textarea } from '~/registry/miami/ui/textarea'\nimport {\n Tooltip,\n TooltipContent,\n TooltipTrigger,\n} from '~/registry/miami/ui/tooltip'\n\nexport default function Dashboard() {\n return (\n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n \n Playground\n \n \n \n \n \n \n \n \n \n Models\n \n \n \n \n \n \n \n \n \n API\n \n \n \n \n \n \n \n \n \n Documentation\n \n \n \n \n \n \n \n \n \n Settings\n \n \n \n \n \n \n \n \n \n \n \n Help\n \n \n \n \n \n \n \n \n \n Account\n \n \n \n \n
\n
\n Playground \n \n \n \n \n Settings \n \n \n \n \n Configuration \n \n Configure the settings for the model and messages.\n \n \n \n \n \n Settings\n \n \n
Model \n
\n \n \n \n \n \n \n
\n
\n
\n Neural\n {' '}\n \n Genesis\n \n
\n
\n Our fastest model for general use cases.\n
\n
\n
\n \n \n \n
\n
\n
\n Neural\n {' '}\n \n Explorer\n \n
\n
\n Performance and speed for efficiency.\n
\n
\n
\n \n \n \n
\n
\n
\n Neural\n {' '}\n \n Quantum\n \n
\n
\n The most powerful model for complex\n computations.\n
\n
\n
\n \n \n \n
\n \n Temperature \n \n
\n \n Top P \n \n
\n \n Top K \n \n
\n \n \n \n Messages\n \n \n Role \n \n \n \n \n \n System \n User \n Assistant \n \n \n
\n \n Content \n \n
\n \n \n \n \n \n \n Share\n \n \n
\n \n
\n \n \n Settings\n \n \n
Model \n
\n \n \n \n \n \n \n
\n
\n
\n Neural\n {' '}\n \n Genesis\n \n
\n
\n Our fastest model for general use cases.\n
\n
\n
\n \n \n \n
\n
\n
\n Neural\n {' '}\n \n Explorer\n \n
\n
\n Performance and speed for efficiency.\n
\n
\n
\n \n \n \n
\n
\n
\n Neural\n {' '}\n \n Quantum\n \n
\n
\n The most powerful model for complex computations.\n
\n
\n
\n \n \n \n
\n \n Temperature \n \n
\n \n \n \n \n Messages\n \n \n Role \n \n \n \n \n \n System \n User \n Assistant \n \n \n
\n \n Content \n \n
\n \n \n
\n \n
\n Output\n \n
\n
\n \n Message\n \n \n \n
\n \n \n \n Attach file \n \n \n Attach File \n \n
\n \n \n \n Use Microphone \n \n \n Use Microphone \n \n
\n Send Message\n \n \n
\n \n
\n \n
\n
\n )\n}\n",
+ "type": "registry:block",
+ "target": ""
+ }
+ ]
}
diff --git a/apps/web/public/r/styles/miami/dashboard-04.json b/apps/web/public/r/styles/miami/dashboard-04.json
index cc28eba5..f795dc11 100644
--- a/apps/web/public/r/styles/miami/dashboard-04.json
+++ b/apps/web/public/r/styles/miami/dashboard-04.json
@@ -1,18 +1,13 @@
{
- "name": "dashboard-04",
- "type": "registry:block",
- "registryDependencies": [
- "button",
- "card",
- "dropdown-menu",
- "input"
- ],
- "files": [
- {
- "path": "block/dashboard-04.tsx",
- "content": "import Link from 'next/link'\nimport { CircleUser, Menu, Package2, Search } from 'lucide-react'\n\nimport { Button } from '~/registry/miami/ui/button'\nimport {\n Card,\n CardContent,\n CardDescription,\n CardFooter,\n CardHeader,\n CardTitle,\n} from '~/registry/miami/ui/card'\nimport { Checkbox } from '~/registry/miami/ui/checkbox'\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuLabel,\n DropdownMenuSeparator,\n DropdownMenuTrigger,\n} from '~/registry/miami/ui/dropdown-menu'\nimport { Input } from '~/registry/miami/ui/input'\nimport { Sheet, SheetContent, SheetTrigger } from '~/registry/miami/ui/sheet'\n\nexport default function Dashboard() {\n return (\n \n
\n \n \n \n Acme Inc \n \n \n Dashboard\n \n \n Orders\n \n \n Products\n \n \n Customers\n \n \n Settings\n \n \n \n \n \n \n Toggle navigation menu \n \n \n \n \n \n \n Acme Inc \n \n \n Dashboard\n \n \n Orders\n \n \n Products\n \n \n Customers\n \n \n Settings\n \n \n \n \n \n
\n \n \n \n
\n \n
\n \n \n \n Toggle user menu \n \n \n \n My Account \n \n Settings \n Support \n \n Logout \n \n \n
\n \n
\n \n
Settings \n \n \n
\n \n General\n \n Security\n Integrations\n Support\n Organizations\n Advanced\n \n
\n
\n \n
\n )\n}\n",
- "type": "registry:block",
- "target": ""
- }
- ]
+ "name": "dashboard-04",
+ "type": "registry:block",
+ "registryDependencies": ["button", "card", "dropdown-menu", "input"],
+ "files": [
+ {
+ "path": "block/dashboard-04.tsx",
+ "content": "import Link from 'next/link'\nimport { CircleUser, Menu, Package2, Search } from 'lucide-react'\n\nimport { Button } from '~/registry/miami/ui/button'\nimport {\n Card,\n CardContent,\n CardDescription,\n CardFooter,\n CardHeader,\n CardTitle,\n} from '~/registry/miami/ui/card'\nimport { Checkbox } from '~/registry/miami/ui/checkbox'\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuLabel,\n DropdownMenuSeparator,\n DropdownMenuTrigger,\n} from '~/registry/miami/ui/dropdown-menu'\nimport { Input } from '~/registry/miami/ui/input'\nimport { Sheet, SheetContent, SheetTrigger } from '~/registry/miami/ui/sheet'\n\nexport default function Dashboard() {\n return (\n \n
\n \n \n \n Acme Inc \n \n \n Dashboard\n \n \n Orders\n \n \n Products\n \n \n Customers\n \n \n Settings\n \n \n \n \n \n \n Toggle navigation menu \n \n \n \n \n \n \n Acme Inc \n \n \n Dashboard\n \n \n Orders\n \n \n Products\n \n \n Customers\n \n \n Settings\n \n \n \n \n \n
\n \n \n \n
\n \n
\n \n \n \n Toggle user menu \n \n \n \n My Account \n \n Settings \n Support \n \n Logout \n \n \n
\n \n
\n \n
Settings \n \n \n
\n \n General\n \n Security\n Integrations\n Support\n Organizations\n Advanced\n \n
\n
\n \n
\n )\n}\n",
+ "type": "registry:block",
+ "target": ""
+ }
+ ]
}
diff --git a/apps/web/public/r/styles/miami/dashboard-05.json b/apps/web/public/r/styles/miami/dashboard-05.json
index a0cb541c..1abacd40 100644
--- a/apps/web/public/r/styles/miami/dashboard-05.json
+++ b/apps/web/public/r/styles/miami/dashboard-05.json
@@ -1,27 +1,27 @@
{
- "name": "dashboard-05",
- "type": "registry:block",
- "registryDependencies": [
- "badge",
- "breadcrumb",
- "button",
- "card",
- "dropdown-menu",
- "input",
- "pagination",
- "progress",
- "separator",
- "sheet",
- "table",
- "tabs",
- "tooltip"
- ],
- "files": [
- {
- "path": "block/dashboard-05.tsx",
- "content": "import * as React from 'react'\nimport Image from 'next/image'\nimport Link from 'next/link'\nimport {\n ChevronLeft,\n ChevronRight,\n Copy,\n CreditCard,\n File,\n Home,\n LineChart,\n ListFilter,\n MoreVertical,\n Package,\n Package2,\n PanelLeft,\n Search,\n Settings,\n ShoppingCart,\n Truck,\n Users2,\n} from 'lucide-react'\n\nimport { Badge } from '~/registry/miami/ui/badge'\nimport {\n Breadcrumb,\n BreadcrumbItem,\n BreadcrumbLink,\n BreadcrumbList,\n BreadcrumbPage,\n BreadcrumbSeparator,\n} from '~/registry/miami/ui/breadcrumb'\nimport { Button } from '~/registry/miami/ui/button'\nimport {\n Card,\n CardContent,\n CardDescription,\n CardFooter,\n CardHeader,\n CardTitle,\n} from '~/registry/miami/ui/card'\nimport {\n DropdownMenu,\n DropdownMenuCheckboxItem,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuLabel,\n DropdownMenuSeparator,\n DropdownMenuTrigger,\n} from '~/registry/miami/ui/dropdown-menu'\nimport { Input } from '~/registry/miami/ui/input'\nimport {\n Pagination,\n PaginationContent,\n PaginationItem,\n} from '~/registry/miami/ui/pagination'\nimport { Progress } from '~/registry/miami/ui/progress'\nimport { Separator } from '~/registry/miami/ui/separator'\nimport { Sheet, SheetContent, SheetTrigger } from '~/registry/miami/ui/sheet'\nimport {\n Table,\n TableBody,\n TableCell,\n TableHead,\n TableHeader,\n TableRow,\n} from '~/registry/miami/ui/table'\nimport {\n Tabs,\n TabsContent,\n TabsList,\n TabsTrigger,\n} from '~/registry/miami/ui/tabs'\nimport {\n Tooltip,\n TooltipContent,\n TooltipTrigger,\n} from '~/registry/miami/ui/tooltip'\n\nexport default function Dashboard() {\n return (\n \n
\n \n \n \n Acme Inc \n \n \n \n \n \n Dashboard \n \n \n Dashboard \n \n \n \n \n \n Orders \n \n \n Orders \n \n \n \n \n \n Products \n \n \n Products \n \n \n \n \n \n Customers \n \n \n Customers \n \n \n \n \n \n Analytics \n \n \n Analytics \n \n \n \n \n \n \n \n Settings \n \n \n Settings \n \n \n \n
\n
\n
\n \n
\n
\n \n Your Orders \n \n Introducing Our Dynamic Orders Dashboard for Seamless\n Management and Insightful Analysis.\n \n \n \n Create New Order \n \n \n
\n \n This Week \n $1,329 \n \n \n \n +25% from last week\n
\n \n \n \n \n \n
\n \n This Month \n $5,329 \n \n \n \n +10% from last month\n
\n \n \n \n \n \n
\n
\n \n
\n Week \n Month \n Year \n \n
\n \n \n \n \n Filter \n \n \n \n Filter by \n \n \n Fulfilled\n \n \n Declined\n \n \n Refunded\n \n \n \n \n \n Export \n \n
\n
\n \n \n \n Orders \n \n Recent orders from your store.\n \n \n \n \n \n \n Customer \n \n Type\n \n \n Status\n \n \n Date\n \n Amount \n \n \n \n \n \n Liam Johnson
\n \n liam@example.com\n
\n \n \n Sale\n \n \n \n Fulfilled\n \n \n \n 2023-06-23\n \n $250.00 \n \n \n \n Olivia Smith
\n \n olivia@example.com\n
\n \n \n Refund\n \n \n \n Declined\n \n \n \n 2023-06-24\n \n $150.00 \n \n {/* \n \n Liam Johnson
\n \n liam@example.com\n
\n \n \n Sale\n \n \n \n Fulfilled\n \n \n \n 2023-06-23\n \n $250.00 \n */}\n \n \n Noah Williams
\n \n noah@example.com\n
\n \n \n Subscription\n \n \n \n Fulfilled\n \n \n \n 2023-06-25\n \n $350.00 \n \n \n \n Emma Brown
\n \n emma@example.com\n
\n \n \n Sale\n \n \n \n Fulfilled\n \n \n \n 2023-06-26\n \n $450.00 \n \n \n \n Liam Johnson
\n \n liam@example.com\n
\n \n \n Sale\n \n \n \n Fulfilled\n \n \n \n 2023-06-23\n \n $250.00 \n \n \n \n Olivia Smith
\n \n olivia@example.com\n
\n \n \n Refund\n \n \n \n Declined\n \n \n \n 2023-06-24\n \n $150.00 \n \n \n \n Emma Brown
\n \n emma@example.com\n
\n \n \n Sale\n \n \n \n Fulfilled\n \n \n \n 2023-06-26\n \n $450.00 \n \n \n
\n \n \n \n \n
\n \n
\n \n \n \n Order Oe31b70H\n \n \n Copy Order ID \n \n \n Date: November 23, 2023 \n
\n \n \n \n \n Track Order\n \n \n \n \n \n \n More \n \n \n \n Edit \n Export \n \n Trash \n \n \n
\n \n \n \n
Order Details
\n
\n \n \n Glimmer Lamps x\n {' '}\n 2 \n \n $250.00 \n \n \n \n Aqua Filters x\n {' '}\n 1 \n \n $49.00 \n \n \n
\n
\n \n Subtotal \n $299.00 \n \n \n Shipping \n $5.00 \n \n \n Tax \n $25.00 \n \n \n Total \n $329.00 \n \n \n
\n \n \n
\n
Shipping Information
\n
\n Liam Johnson \n 1234 Main St. \n Anytown, CA 12345 \n \n
\n
\n
Billing Information
\n
\n Same as shipping address\n
\n
\n
\n \n \n
Customer Information
\n
\n \n
Customer \n Liam Johnson \n \n \n \n \n
\n \n \n
Payment Information
\n
\n \n
\n \n Visa\n \n **** **** **** 4532 \n \n \n
\n \n \n \n Updated\n {' '}\n November 23, 2023 \n
\n \n \n \n \n \n Previous Order \n \n \n \n \n \n Next Order \n \n \n \n \n \n \n
\n \n
\n
\n )\n}\n",
- "type": "registry:block",
- "target": ""
- }
- ]
+ "name": "dashboard-05",
+ "type": "registry:block",
+ "registryDependencies": [
+ "badge",
+ "breadcrumb",
+ "button",
+ "card",
+ "dropdown-menu",
+ "input",
+ "pagination",
+ "progress",
+ "separator",
+ "sheet",
+ "table",
+ "tabs",
+ "tooltip"
+ ],
+ "files": [
+ {
+ "path": "block/dashboard-05.tsx",
+ "content": "import * as React from 'react'\nimport Image from 'next/image'\nimport Link from 'next/link'\nimport {\n ChevronLeft,\n ChevronRight,\n Copy,\n CreditCard,\n File,\n Home,\n LineChart,\n ListFilter,\n MoreVertical,\n Package,\n Package2,\n PanelLeft,\n Search,\n Settings,\n ShoppingCart,\n Truck,\n Users2,\n} from 'lucide-react'\n\nimport { Badge } from '~/registry/miami/ui/badge'\nimport {\n Breadcrumb,\n BreadcrumbItem,\n BreadcrumbLink,\n BreadcrumbList,\n BreadcrumbPage,\n BreadcrumbSeparator,\n} from '~/registry/miami/ui/breadcrumb'\nimport { Button } from '~/registry/miami/ui/button'\nimport {\n Card,\n CardContent,\n CardDescription,\n CardFooter,\n CardHeader,\n CardTitle,\n} from '~/registry/miami/ui/card'\nimport {\n DropdownMenu,\n DropdownMenuCheckboxItem,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuLabel,\n DropdownMenuSeparator,\n DropdownMenuTrigger,\n} from '~/registry/miami/ui/dropdown-menu'\nimport { Input } from '~/registry/miami/ui/input'\nimport {\n Pagination,\n PaginationContent,\n PaginationItem,\n} from '~/registry/miami/ui/pagination'\nimport { Progress } from '~/registry/miami/ui/progress'\nimport { Separator } from '~/registry/miami/ui/separator'\nimport { Sheet, SheetContent, SheetTrigger } from '~/registry/miami/ui/sheet'\nimport {\n Table,\n TableBody,\n TableCell,\n TableHead,\n TableHeader,\n TableRow,\n} from '~/registry/miami/ui/table'\nimport {\n Tabs,\n TabsContent,\n TabsList,\n TabsTrigger,\n} from '~/registry/miami/ui/tabs'\nimport {\n Tooltip,\n TooltipContent,\n TooltipTrigger,\n} from '~/registry/miami/ui/tooltip'\n\nexport default function Dashboard() {\n return (\n \n
\n \n \n \n Acme Inc \n \n \n \n \n \n Dashboard \n \n \n Dashboard \n \n \n \n \n \n Orders \n \n \n Orders \n \n \n \n \n \n Products \n \n \n Products \n \n \n \n \n \n Customers \n \n \n Customers \n \n \n \n \n \n Analytics \n \n \n Analytics \n \n \n \n \n \n \n \n Settings \n \n \n Settings \n \n \n \n
\n
\n
\n \n
\n
\n \n Your Orders \n \n Introducing Our Dynamic Orders Dashboard for Seamless\n Management and Insightful Analysis.\n \n \n \n Create New Order \n \n \n
\n \n This Week \n $1,329 \n \n \n \n +25% from last week\n
\n \n \n \n \n \n
\n \n This Month \n $5,329 \n \n \n \n +10% from last month\n
\n \n \n \n \n \n
\n
\n \n
\n Week \n Month \n Year \n \n
\n \n \n \n \n Filter \n \n \n \n Filter by \n \n \n Fulfilled\n \n \n Declined\n \n \n Refunded\n \n \n \n \n \n Export \n \n
\n
\n \n \n \n Orders \n \n Recent orders from your store.\n \n \n \n \n \n \n Customer \n \n Type\n \n \n Status\n \n \n Date\n \n Amount \n \n \n \n \n \n Liam Johnson
\n \n liam@example.com\n
\n \n \n Sale\n \n \n \n Fulfilled\n \n \n \n 2023-06-23\n \n $250.00 \n \n \n \n Olivia Smith
\n \n olivia@example.com\n
\n \n \n Refund\n \n \n \n Declined\n \n \n \n 2023-06-24\n \n $150.00 \n \n {/* \n \n Liam Johnson
\n \n liam@example.com\n
\n \n \n Sale\n \n \n \n Fulfilled\n \n \n \n 2023-06-23\n \n $250.00 \n */}\n \n \n Noah Williams
\n \n noah@example.com\n
\n \n \n Subscription\n \n \n \n Fulfilled\n \n \n \n 2023-06-25\n \n $350.00 \n \n \n \n Emma Brown
\n \n emma@example.com\n
\n \n \n Sale\n \n \n \n Fulfilled\n \n \n \n 2023-06-26\n \n $450.00 \n \n \n \n Liam Johnson
\n \n liam@example.com\n
\n \n \n Sale\n \n \n \n Fulfilled\n \n \n \n 2023-06-23\n \n $250.00 \n \n \n \n Olivia Smith
\n \n olivia@example.com\n
\n \n \n Refund\n \n \n \n Declined\n \n \n \n 2023-06-24\n \n $150.00 \n \n \n \n Emma Brown
\n \n emma@example.com\n
\n \n \n Sale\n \n \n \n Fulfilled\n \n \n \n 2023-06-26\n \n $450.00 \n \n \n
\n \n \n \n \n
\n \n
\n \n \n \n Order Oe31b70H\n \n \n Copy Order ID \n \n \n Date: November 23, 2023 \n
\n \n \n \n \n Track Order\n \n \n \n \n \n \n More \n \n \n \n Edit \n Export \n \n Trash \n \n \n
\n \n \n \n
Order Details
\n
\n \n \n Glimmer Lamps x\n {' '}\n 2 \n \n $250.00 \n \n \n \n Aqua Filters x\n {' '}\n 1 \n \n $49.00 \n \n \n
\n
\n \n Subtotal \n $299.00 \n \n \n Shipping \n $5.00 \n \n \n Tax \n $25.00 \n \n \n Total \n $329.00 \n \n \n
\n \n \n
\n
Shipping Information
\n
\n Liam Johnson \n 1234 Main St. \n Anytown, CA 12345 \n \n
\n
\n
Billing Information
\n
\n Same as shipping address\n
\n
\n
\n \n \n
Customer Information
\n
\n \n
Customer \n Liam Johnson \n \n \n \n \n
\n \n \n
Payment Information
\n
\n \n
\n \n Visa\n \n **** **** **** 4532 \n \n \n
\n \n \n \n Updated\n {' '}\n November 23, 2023 \n
\n \n \n \n \n \n Previous Order \n \n \n \n \n \n Next Order \n \n \n \n \n \n \n
\n \n
\n
\n )\n}\n",
+ "type": "registry:block",
+ "target": ""
+ }
+ ]
}
diff --git a/apps/web/public/r/styles/miami/dashboard-06.json b/apps/web/public/r/styles/miami/dashboard-06.json
index c893c5aa..062d27a1 100644
--- a/apps/web/public/r/styles/miami/dashboard-06.json
+++ b/apps/web/public/r/styles/miami/dashboard-06.json
@@ -1,24 +1,24 @@
{
- "name": "dashboard-06",
- "type": "registry:block",
- "registryDependencies": [
- "badge",
- "breadcrumb",
- "button",
- "card",
- "dropdown-menu",
- "input",
- "sheet",
- "table",
- "tabs",
- "tooltip"
- ],
- "files": [
- {
- "path": "block/dashboard-06.tsx",
- "content": "import Image from 'next/image'\nimport Link from 'next/link'\nimport {\n File,\n Home,\n LineChart,\n ListFilter,\n MoreHorizontal,\n Package,\n Package2,\n PanelLeft,\n PlusCircle,\n Search,\n Settings,\n ShoppingCart,\n Users2,\n} from 'lucide-react'\n\nimport { Badge } from '~/registry/miami/ui/badge'\nimport {\n Breadcrumb,\n BreadcrumbItem,\n BreadcrumbLink,\n BreadcrumbList,\n BreadcrumbPage,\n BreadcrumbSeparator,\n} from '~/registry/miami/ui/breadcrumb'\nimport { Button } from '~/registry/miami/ui/button'\nimport {\n Card,\n CardContent,\n CardDescription,\n CardFooter,\n CardHeader,\n CardTitle,\n} from '~/registry/miami/ui/card'\nimport {\n DropdownMenu,\n DropdownMenuCheckboxItem,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuLabel,\n DropdownMenuSeparator,\n DropdownMenuTrigger,\n} from '~/registry/miami/ui/dropdown-menu'\nimport { Input } from '~/registry/miami/ui/input'\nimport { Sheet, SheetContent, SheetTrigger } from '~/registry/miami/ui/sheet'\nimport {\n Table,\n TableBody,\n TableCell,\n TableHead,\n TableHeader,\n TableRow,\n} from '~/registry/miami/ui/table'\nimport {\n Tabs,\n TabsContent,\n TabsList,\n TabsTrigger,\n} from '~/registry/miami/ui/tabs'\nimport {\n Tooltip,\n TooltipContent,\n TooltipTrigger,\n} from '~/registry/miami/ui/tooltip'\n\nexport default function Dashboard() {\n return (\n \n
\n \n \n \n Acme Inc \n \n \n \n \n \n Dashboard \n \n \n Dashboard \n \n \n \n \n \n Orders \n \n \n Orders \n \n \n \n \n \n Products \n \n \n Products \n \n \n \n \n \n Customers \n \n \n Customers \n \n \n \n \n \n Analytics \n \n \n Analytics \n \n \n \n \n \n \n \n Settings \n \n \n Settings \n \n \n \n
\n
\n
\n \n \n
\n All \n Active \n Draft \n \n Archived\n \n \n
\n
\n \n \n \n \n Filter\n \n \n \n \n Filter by \n \n \n Active\n \n Draft \n \n Archived\n \n \n \n
\n \n \n Export\n \n \n
\n \n \n Add Product\n \n \n
\n
\n \n \n \n Products \n \n Manage your products and view their sales performance.\n \n \n \n \n \n \n \n Image \n \n Name \n Status \n Price \n \n Total Sales\n \n \n Created at\n \n \n Actions \n \n \n \n \n \n \n \n \n \n Laser Lemonade Machine\n \n \n Draft \n \n $499.99 \n \n 25\n \n \n 2023-07-12 10:42 AM\n \n \n \n \n \n \n Toggle menu \n \n \n \n Actions \n Edit \n Delete \n \n \n \n \n \n \n \n \n \n Hypernova Headphones\n \n \n Active \n \n $129.99 \n \n 100\n \n \n 2023-10-18 03:21 PM\n \n \n \n \n \n \n Toggle menu \n \n \n \n Actions \n Edit \n Delete \n \n \n \n \n \n \n \n \n \n AeroGlow Desk Lamp\n \n \n Active \n \n $39.99 \n \n 50\n \n \n 2023-11-29 08:15 AM\n \n \n \n \n \n \n Toggle menu \n \n \n \n Actions \n Edit \n Delete \n \n \n \n \n \n \n \n \n \n TechTonic Energy Drink\n \n \n Draft \n \n $2.99 \n \n 0\n \n \n 2023-12-25 11:59 PM\n \n \n \n \n \n \n Toggle menu \n \n \n \n Actions \n Edit \n Delete \n \n \n \n \n \n \n \n \n \n Gamer Gear Pro Controller\n \n \n Active \n \n $59.99 \n \n 75\n \n \n 2024-01-01 12:00 AM\n \n \n \n \n \n \n Toggle menu \n \n \n \n Actions \n Edit \n Delete \n \n \n \n \n \n \n \n \n \n Luminous VR Headset\n \n \n Active \n \n $199.99 \n \n 30\n \n \n 2024-02-14 02:14 PM\n \n \n \n \n \n \n Toggle menu \n \n \n \n Actions \n Edit \n Delete \n \n \n \n \n \n
\n \n \n \n Showing\n {' '}\n 1-10 \n {' '}\n of\n 32 \n {' '}\n products\n
\n \n \n \n \n \n
\n
\n )\n}\n",
- "type": "registry:block",
- "target": ""
- }
- ]
+ "name": "dashboard-06",
+ "type": "registry:block",
+ "registryDependencies": [
+ "badge",
+ "breadcrumb",
+ "button",
+ "card",
+ "dropdown-menu",
+ "input",
+ "sheet",
+ "table",
+ "tabs",
+ "tooltip"
+ ],
+ "files": [
+ {
+ "path": "block/dashboard-06.tsx",
+ "content": "import Image from 'next/image'\nimport Link from 'next/link'\nimport {\n File,\n Home,\n LineChart,\n ListFilter,\n MoreHorizontal,\n Package,\n Package2,\n PanelLeft,\n PlusCircle,\n Search,\n Settings,\n ShoppingCart,\n Users2,\n} from 'lucide-react'\n\nimport { Badge } from '~/registry/miami/ui/badge'\nimport {\n Breadcrumb,\n BreadcrumbItem,\n BreadcrumbLink,\n BreadcrumbList,\n BreadcrumbPage,\n BreadcrumbSeparator,\n} from '~/registry/miami/ui/breadcrumb'\nimport { Button } from '~/registry/miami/ui/button'\nimport {\n Card,\n CardContent,\n CardDescription,\n CardFooter,\n CardHeader,\n CardTitle,\n} from '~/registry/miami/ui/card'\nimport {\n DropdownMenu,\n DropdownMenuCheckboxItem,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuLabel,\n DropdownMenuSeparator,\n DropdownMenuTrigger,\n} from '~/registry/miami/ui/dropdown-menu'\nimport { Input } from '~/registry/miami/ui/input'\nimport { Sheet, SheetContent, SheetTrigger } from '~/registry/miami/ui/sheet'\nimport {\n Table,\n TableBody,\n TableCell,\n TableHead,\n TableHeader,\n TableRow,\n} from '~/registry/miami/ui/table'\nimport {\n Tabs,\n TabsContent,\n TabsList,\n TabsTrigger,\n} from '~/registry/miami/ui/tabs'\nimport {\n Tooltip,\n TooltipContent,\n TooltipTrigger,\n} from '~/registry/miami/ui/tooltip'\n\nexport default function Dashboard() {\n return (\n \n
\n \n \n \n Acme Inc \n \n \n \n \n \n Dashboard \n \n \n Dashboard \n \n \n \n \n \n Orders \n \n \n Orders \n \n \n \n \n \n Products \n \n \n Products \n \n \n \n \n \n Customers \n \n \n Customers \n \n \n \n \n \n Analytics \n \n \n Analytics \n \n \n \n \n \n \n \n Settings \n \n \n Settings \n \n \n \n
\n
\n
\n \n \n
\n All \n Active \n Draft \n \n Archived\n \n \n
\n
\n \n \n \n \n Filter\n \n \n \n \n Filter by \n \n \n Active\n \n Draft \n \n Archived\n \n \n \n
\n \n \n Export\n \n \n
\n \n \n Add Product\n \n \n
\n
\n \n \n \n Products \n \n Manage your products and view their sales performance.\n \n \n \n \n \n \n \n Image \n \n Name \n Status \n Price \n \n Total Sales\n \n \n Created at\n \n \n Actions \n \n \n \n \n \n \n \n \n \n Laser Lemonade Machine\n \n \n Draft \n \n $499.99 \n \n 25\n \n \n 2023-07-12 10:42 AM\n \n \n \n \n \n \n Toggle menu \n \n \n \n Actions \n Edit \n Delete \n \n \n \n \n \n \n \n \n \n Hypernova Headphones\n \n \n Active \n \n $129.99 \n \n 100\n \n \n 2023-10-18 03:21 PM\n \n \n \n \n \n \n Toggle menu \n \n \n \n Actions \n Edit \n Delete \n \n \n \n \n \n \n \n \n \n AeroGlow Desk Lamp\n \n \n Active \n \n $39.99 \n \n 50\n \n \n 2023-11-29 08:15 AM\n \n \n \n \n \n \n Toggle menu \n \n \n \n Actions \n Edit \n Delete \n \n \n \n \n \n \n \n \n \n TechTonic Energy Drink\n \n \n Draft \n \n $2.99 \n \n 0\n \n \n 2023-12-25 11:59 PM\n \n \n \n \n \n \n Toggle menu \n \n \n \n Actions \n Edit \n Delete \n \n \n \n \n \n \n \n \n \n Gamer Gear Pro Controller\n \n \n Active \n \n $59.99 \n \n 75\n \n \n 2024-01-01 12:00 AM\n \n \n \n \n \n \n Toggle menu \n \n \n \n Actions \n Edit \n Delete \n \n \n \n \n \n \n \n \n \n Luminous VR Headset\n \n \n Active \n \n $199.99 \n \n 30\n \n \n 2024-02-14 02:14 PM\n \n \n \n \n \n \n Toggle menu \n \n \n \n Actions \n Edit \n Delete \n \n \n \n \n \n
\n \n \n \n Showing\n {' '}\n 1-10 \n {' '}\n of\n 32 \n {' '}\n products\n
\n \n \n \n \n \n
\n
\n )\n}\n",
+ "type": "registry:block",
+ "target": ""
+ }
+ ]
}
diff --git a/apps/web/public/r/styles/miami/dashboard-07.json b/apps/web/public/r/styles/miami/dashboard-07.json
index ba6b6504..2d12c969 100644
--- a/apps/web/public/r/styles/miami/dashboard-07.json
+++ b/apps/web/public/r/styles/miami/dashboard-07.json
@@ -1,27 +1,27 @@
{
- "name": "dashboard-07",
- "type": "registry:block",
- "registryDependencies": [
- "badge",
- "breadcrumb",
- "button",
- "card",
- "dropdown-menu",
- "input",
- "pagination",
- "progress",
- "separator",
- "sheet",
- "table",
- "tabs",
- "tooltip"
- ],
- "files": [
- {
- "path": "block/dashboard-07.tsx",
- "content": "import Image from 'next/image'\nimport Link from 'next/link'\nimport {\n ChevronLeft,\n Home,\n LineChart,\n Package,\n Package2,\n PanelLeft,\n PlusCircle,\n Search,\n Settings,\n ShoppingCart,\n Upload,\n Users2,\n} from 'lucide-react'\n\nimport { Badge } from '~/registry/miami/ui/badge'\nimport {\n Breadcrumb,\n BreadcrumbItem,\n BreadcrumbLink,\n BreadcrumbList,\n BreadcrumbPage,\n BreadcrumbSeparator,\n} from '~/registry/miami/ui/breadcrumb'\nimport { Button } from '~/registry/miami/ui/button'\nimport {\n Card,\n CardContent,\n CardDescription,\n CardFooter,\n CardHeader,\n CardTitle,\n} from '~/registry/miami/ui/card'\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuLabel,\n DropdownMenuSeparator,\n DropdownMenuTrigger,\n} from '~/registry/miami/ui/dropdown-menu'\nimport { Input } from '~/registry/miami/ui/input'\nimport { Label } from '~/registry/miami/ui/label'\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from '~/registry/miami/ui/select'\nimport { Sheet, SheetContent, SheetTrigger } from '~/registry/miami/ui/sheet'\nimport {\n Table,\n TableBody,\n TableCell,\n TableHead,\n TableHeader,\n TableRow,\n} from '~/registry/miami/ui/table'\nimport { Textarea } from '~/registry/miami/ui/textarea'\nimport {\n ToggleGroup,\n ToggleGroupItem,\n} from '~/registry/miami/ui/toggle-group'\nimport {\n Tooltip,\n TooltipContent,\n TooltipTrigger,\n} from '~/registry/miami/ui/tooltip'\n\nexport default function Dashboard() {\n return (\n \n
\n \n \n \n Acme Inc \n \n \n \n \n \n Dashboard \n \n \n Dashboard \n \n \n \n \n \n Orders \n \n \n Orders \n \n \n \n \n \n Products \n \n \n Products \n \n \n \n \n \n Customers \n \n \n Customers \n \n \n \n \n \n Analytics \n \n \n Analytics \n \n \n \n \n \n \n \n Settings \n \n \n Settings \n \n \n \n
\n
\n
\n \n
\n
\n \n Back \n \n
\n Pro Controller\n \n
\n In stock\n \n
\n \n Discard\n \n Save Product \n
\n
\n
\n
\n
\n \n Product Details \n \n Lipsum dolor sit amet, consectetur adipiscing elit\n \n \n \n \n
\n Name \n \n
\n
\n Description \n \n
\n
\n \n \n
\n \n Stock \n \n Lipsum dolor sit amet, consectetur adipiscing elit\n \n \n \n \n \n \n \n \n Add Variant\n \n \n \n
\n \n Product Category \n \n \n \n
\n Category \n \n \n \n \n \n Clothing \n \n Electronics\n \n \n Accessories\n \n \n \n
\n
\n \n Subcategory (optional)\n \n \n \n \n \n \n T-Shirts \n Hoodies \n \n Sweatshirts\n \n \n \n
\n
\n \n \n
\n
\n
\n \n Product Status \n \n \n \n
\n Status \n \n \n \n \n \n Draft \n Active \n Archived \n \n \n
\n
\n \n \n
\n \n Product Images \n \n Lipsum dolor sit amet, consectetur adipiscing elit\n \n \n \n \n
\n
\n \n \n \n \n \n \n \n \n Upload \n \n
\n
\n \n \n
\n \n Archive Product \n \n Lipsum dolor sit amet, consectetur adipiscing elit.\n \n \n \n
\n \n Archive Product\n \n \n \n
\n
\n
\n \n Discard\n \n Save Product \n
\n
\n \n
\n
\n )\n}\n",
- "type": "registry:block",
- "target": ""
- }
- ]
+ "name": "dashboard-07",
+ "type": "registry:block",
+ "registryDependencies": [
+ "badge",
+ "breadcrumb",
+ "button",
+ "card",
+ "dropdown-menu",
+ "input",
+ "pagination",
+ "progress",
+ "separator",
+ "sheet",
+ "table",
+ "tabs",
+ "tooltip"
+ ],
+ "files": [
+ {
+ "path": "block/dashboard-07.tsx",
+ "content": "import Image from 'next/image'\nimport Link from 'next/link'\nimport {\n ChevronLeft,\n Home,\n LineChart,\n Package,\n Package2,\n PanelLeft,\n PlusCircle,\n Search,\n Settings,\n ShoppingCart,\n Upload,\n Users2,\n} from 'lucide-react'\n\nimport { Badge } from '~/registry/miami/ui/badge'\nimport {\n Breadcrumb,\n BreadcrumbItem,\n BreadcrumbLink,\n BreadcrumbList,\n BreadcrumbPage,\n BreadcrumbSeparator,\n} from '~/registry/miami/ui/breadcrumb'\nimport { Button } from '~/registry/miami/ui/button'\nimport {\n Card,\n CardContent,\n CardDescription,\n CardFooter,\n CardHeader,\n CardTitle,\n} from '~/registry/miami/ui/card'\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuLabel,\n DropdownMenuSeparator,\n DropdownMenuTrigger,\n} from '~/registry/miami/ui/dropdown-menu'\nimport { Input } from '~/registry/miami/ui/input'\nimport { Label } from '~/registry/miami/ui/label'\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from '~/registry/miami/ui/select'\nimport { Sheet, SheetContent, SheetTrigger } from '~/registry/miami/ui/sheet'\nimport {\n Table,\n TableBody,\n TableCell,\n TableHead,\n TableHeader,\n TableRow,\n} from '~/registry/miami/ui/table'\nimport { Textarea } from '~/registry/miami/ui/textarea'\nimport {\n ToggleGroup,\n ToggleGroupItem,\n} from '~/registry/miami/ui/toggle-group'\nimport {\n Tooltip,\n TooltipContent,\n TooltipTrigger,\n} from '~/registry/miami/ui/tooltip'\n\nexport default function Dashboard() {\n return (\n \n
\n \n \n \n Acme Inc \n \n \n \n \n \n Dashboard \n \n \n Dashboard \n \n \n \n \n \n Orders \n \n \n Orders \n \n \n \n \n \n Products \n \n \n Products \n \n \n \n \n \n Customers \n \n \n Customers \n \n \n \n \n \n Analytics \n \n \n Analytics \n \n \n \n \n \n \n \n Settings \n \n \n Settings \n \n \n \n
\n
\n
\n \n
\n
\n \n Back \n \n
\n Pro Controller\n \n
\n In stock\n \n
\n \n Discard\n \n Save Product \n
\n
\n
\n
\n
\n \n Product Details \n \n Lipsum dolor sit amet, consectetur adipiscing elit\n \n \n \n \n
\n Name \n \n
\n
\n Description \n \n
\n
\n \n \n
\n \n Stock \n \n Lipsum dolor sit amet, consectetur adipiscing elit\n \n \n \n \n \n \n \n \n Add Variant\n \n \n \n
\n \n Product Category \n \n \n \n
\n Category \n \n \n \n \n \n Clothing \n \n Electronics\n \n \n Accessories\n \n \n \n
\n
\n \n Subcategory (optional)\n \n \n \n \n \n \n T-Shirts \n Hoodies \n \n Sweatshirts\n \n \n \n
\n
\n \n \n
\n
\n
\n \n Product Status \n \n \n \n
\n Status \n \n \n \n \n \n Draft \n Active \n Archived \n \n \n
\n
\n \n \n
\n \n Product Images \n \n Lipsum dolor sit amet, consectetur adipiscing elit\n \n \n \n \n
\n
\n \n \n \n \n \n \n \n \n Upload \n \n
\n
\n \n \n
\n \n Archive Product \n \n Lipsum dolor sit amet, consectetur adipiscing elit.\n \n \n \n
\n \n Archive Product\n \n \n \n
\n
\n
\n \n Discard\n \n Save Product \n
\n
\n \n
\n
\n )\n}\n",
+ "type": "registry:block",
+ "target": ""
+ }
+ ]
}
diff --git a/apps/web/public/r/styles/miami/demo-sidebar-controlled.json b/apps/web/public/r/styles/miami/demo-sidebar-controlled.json
index 0c857263..923565f4 100644
--- a/apps/web/public/r/styles/miami/demo-sidebar-controlled.json
+++ b/apps/web/public/r/styles/miami/demo-sidebar-controlled.json
@@ -1,12 +1,12 @@
{
- "name": "demo-sidebar-controlled",
- "type": "registry:block",
- "description": "",
- "files": [
- {
- "path": "block/demo-sidebar-controlled.tsx",
- "content": "'use client'\n\nimport * as React from 'react'\nimport {\n Frame,\n LifeBuoy,\n Map,\n PanelLeftClose,\n PanelLeftOpen,\n PieChart,\n Send,\n} from 'lucide-react'\n\nimport { Button } from '~/registry/miami/ui/button'\nimport {\n Sidebar,\n SidebarContent,\n SidebarGroup,\n SidebarGroupContent,\n SidebarGroupLabel,\n SidebarInset,\n SidebarMenu,\n SidebarMenuButton,\n SidebarMenuItem,\n SidebarProvider,\n} from '~/registry/miami/ui/sidebar'\n\nconst projects = [\n {\n name: 'Design Engineering',\n url: '#',\n icon: Frame,\n },\n {\n name: 'Sales & Marketing',\n url: '#',\n icon: PieChart,\n },\n {\n name: 'Travel',\n url: '#',\n icon: Map,\n },\n {\n name: 'Support',\n url: '#',\n icon: LifeBuoy,\n },\n {\n name: 'Feedback',\n url: '#',\n icon: Send,\n },\n]\n\nexport default function AppSidebar() {\n const [open, setOpen] = React.useState(true)\n\n return (\n \n \n \n \n Projects \n \n \n {projects.map(project => (\n \n \n \n \n {project.name} \n \n \n \n ))}\n \n \n \n \n \n \n \n setOpen(open => !open)}\n size=\"sm\"\n variant=\"ghost\"\n >\n {open ? : }\n \n {open ? 'Open' : 'Close'}\n {' '}\n Sidebar\n \n \n \n \n \n )\n}\n",
- "type": "registry:component"
- }
- ]
+ "name": "demo-sidebar-controlled",
+ "type": "registry:block",
+ "description": "",
+ "files": [
+ {
+ "path": "block/demo-sidebar-controlled.tsx",
+ "content": "'use client'\n\nimport * as React from 'react'\nimport {\n Frame,\n LifeBuoy,\n Map,\n PanelLeftClose,\n PanelLeftOpen,\n PieChart,\n Send,\n} from 'lucide-react'\n\nimport { Button } from '~/registry/miami/ui/button'\nimport {\n Sidebar,\n SidebarContent,\n SidebarGroup,\n SidebarGroupContent,\n SidebarGroupLabel,\n SidebarInset,\n SidebarMenu,\n SidebarMenuButton,\n SidebarMenuItem,\n SidebarProvider,\n} from '~/registry/miami/ui/sidebar'\n\nconst projects = [\n {\n name: 'Design Engineering',\n url: '#',\n icon: Frame,\n },\n {\n name: 'Sales & Marketing',\n url: '#',\n icon: PieChart,\n },\n {\n name: 'Travel',\n url: '#',\n icon: Map,\n },\n {\n name: 'Support',\n url: '#',\n icon: LifeBuoy,\n },\n {\n name: 'Feedback',\n url: '#',\n icon: Send,\n },\n]\n\nexport default function AppSidebar() {\n const [open, setOpen] = React.useState(true)\n\n return (\n \n \n \n \n Projects \n \n \n {projects.map(project => (\n \n \n \n \n {project.name} \n \n \n \n ))}\n \n \n \n \n \n \n \n setOpen(open => !open)}\n size=\"sm\"\n variant=\"ghost\"\n >\n {open ? : }\n \n {open ? 'Open' : 'Close'}\n {' '}\n Sidebar\n \n \n \n \n \n )\n}\n",
+ "type": "registry:component"
+ }
+ ]
}
diff --git a/apps/web/public/r/styles/miami/demo-sidebar-footer.json b/apps/web/public/r/styles/miami/demo-sidebar-footer.json
index 4e3de794..5b13719b 100644
--- a/apps/web/public/r/styles/miami/demo-sidebar-footer.json
+++ b/apps/web/public/r/styles/miami/demo-sidebar-footer.json
@@ -1,12 +1,12 @@
{
- "name": "demo-sidebar-footer",
- "type": "registry:block",
- "description": "",
- "files": [
- {
- "path": "block/demo-sidebar-footer.tsx",
- "content": "'use client'\n\nimport { ChevronDown, ChevronUp, User2 } from 'lucide-react'\n\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuTrigger,\n} from '~/registry/miami/ui/dropdown-menu'\nimport {\n Sidebar,\n SidebarContent,\n SidebarFooter,\n SidebarHeader,\n SidebarInset,\n SidebarMenu,\n SidebarMenuButton,\n SidebarMenuItem,\n SidebarProvider,\n SidebarTrigger,\n} from '~/registry/miami/ui/sidebar'\n\nexport default function AppSidebar() {\n return (\n \n \n \n \n \n \n \n \n \n \n Username\n \n \n \n \n \n Account \n \n \n Billing \n \n \n Sign out \n \n \n \n \n \n \n \n \n \n \n \n )\n}\n",
- "type": "registry:component"
- }
- ]
+ "name": "demo-sidebar-footer",
+ "type": "registry:block",
+ "description": "",
+ "files": [
+ {
+ "path": "block/demo-sidebar-footer.tsx",
+ "content": "'use client'\n\nimport { ChevronDown, ChevronUp, User2 } from 'lucide-react'\n\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuTrigger,\n} from '~/registry/miami/ui/dropdown-menu'\nimport {\n Sidebar,\n SidebarContent,\n SidebarFooter,\n SidebarHeader,\n SidebarInset,\n SidebarMenu,\n SidebarMenuButton,\n SidebarMenuItem,\n SidebarProvider,\n SidebarTrigger,\n} from '~/registry/miami/ui/sidebar'\n\nexport default function AppSidebar() {\n return (\n \n \n \n \n \n \n \n \n \n \n Username\n \n \n \n \n \n Account \n \n \n Billing \n \n \n Sign out \n \n \n \n \n \n \n \n \n \n \n \n )\n}\n",
+ "type": "registry:component"
+ }
+ ]
}
diff --git a/apps/web/public/r/styles/miami/demo-sidebar-group-action.json b/apps/web/public/r/styles/miami/demo-sidebar-group-action.json
index 3d8ce3ed..3f1bdf0a 100644
--- a/apps/web/public/r/styles/miami/demo-sidebar-group-action.json
+++ b/apps/web/public/r/styles/miami/demo-sidebar-group-action.json
@@ -1,12 +1,12 @@
{
- "name": "demo-sidebar-group-action",
- "type": "registry:block",
- "description": "",
- "files": [
- {
- "path": "block/demo-sidebar-group-action.tsx",
- "content": "'use client'\n\nimport {\n ChevronDown,\n Frame,\n LifeBuoy,\n Map,\n PieChart,\n Plus,\n Send,\n} from 'lucide-react'\nimport { Toaster, toast } from 'sonner'\n\nimport {\n Sidebar,\n SidebarContent,\n SidebarGroup,\n SidebarGroupAction,\n SidebarGroupContent,\n SidebarGroupLabel,\n SidebarMenu,\n SidebarMenuButton,\n SidebarMenuItem,\n SidebarProvider,\n} from '~/registry/miami/ui/sidebar'\n\nexport default function AppSidebar() {\n return (\n \n \n \n \n \n Projects \n toast('You clicked the group action!')}\n >\n \n {' '}\n Add Project \n \n \n \n \n \n \n \n Design Engineering \n \n \n \n \n \n \n \n Sales & Marketing \n \n \n \n \n \n \n \n Travel \n \n \n \n \n \n \n \n \n \n )\n}\n",
- "type": "registry:component"
- }
- ]
+ "name": "demo-sidebar-group-action",
+ "type": "registry:block",
+ "description": "",
+ "files": [
+ {
+ "path": "block/demo-sidebar-group-action.tsx",
+ "content": "'use client'\n\nimport {\n ChevronDown,\n Frame,\n LifeBuoy,\n Map,\n PieChart,\n Plus,\n Send,\n} from 'lucide-react'\nimport { Toaster, toast } from 'sonner'\n\nimport {\n Sidebar,\n SidebarContent,\n SidebarGroup,\n SidebarGroupAction,\n SidebarGroupContent,\n SidebarGroupLabel,\n SidebarMenu,\n SidebarMenuButton,\n SidebarMenuItem,\n SidebarProvider,\n} from '~/registry/miami/ui/sidebar'\n\nexport default function AppSidebar() {\n return (\n \n \n \n \n \n Projects \n toast('You clicked the group action!')}\n >\n \n {' '}\n Add Project \n \n \n \n \n \n \n \n Design Engineering \n \n \n \n \n \n \n \n Sales & Marketing \n \n \n \n \n \n \n \n Travel \n \n \n \n \n \n \n \n \n \n )\n}\n",
+ "type": "registry:component"
+ }
+ ]
}
diff --git a/apps/web/public/r/styles/miami/demo-sidebar-group-collapsible.json b/apps/web/public/r/styles/miami/demo-sidebar-group-collapsible.json
index ecb2df25..d9e05b8f 100644
--- a/apps/web/public/r/styles/miami/demo-sidebar-group-collapsible.json
+++ b/apps/web/public/r/styles/miami/demo-sidebar-group-collapsible.json
@@ -1,12 +1,12 @@
{
- "name": "demo-sidebar-group-collapsible",
- "type": "registry:block",
- "description": "",
- "files": [
- {
- "path": "block/demo-sidebar-group-collapsible.tsx",
- "content": "'use client'\n\nimport { ChevronDown, LifeBuoy, Send } from 'lucide-react'\n\nimport {\n Collapsible,\n CollapsibleContent,\n CollapsibleTrigger,\n} from '~/registry/miami/ui/collapsible'\nimport {\n Sidebar,\n SidebarContent,\n SidebarGroup,\n SidebarGroupContent,\n SidebarGroupLabel,\n SidebarMenu,\n SidebarMenuButton,\n SidebarMenuItem,\n SidebarProvider,\n} from '~/registry/miami/ui/sidebar'\n\nexport default function AppSidebar() {\n return (\n \n \n \n \n \n \n \n Help\n \n \n \n \n \n \n \n \n \n Support\n \n \n \n \n \n Feedback\n \n \n \n \n \n \n \n \n \n \n )\n}\n",
- "type": "registry:component"
- }
- ]
+ "name": "demo-sidebar-group-collapsible",
+ "type": "registry:block",
+ "description": "",
+ "files": [
+ {
+ "path": "block/demo-sidebar-group-collapsible.tsx",
+ "content": "'use client'\n\nimport { ChevronDown, LifeBuoy, Send } from 'lucide-react'\n\nimport {\n Collapsible,\n CollapsibleContent,\n CollapsibleTrigger,\n} from '~/registry/miami/ui/collapsible'\nimport {\n Sidebar,\n SidebarContent,\n SidebarGroup,\n SidebarGroupContent,\n SidebarGroupLabel,\n SidebarMenu,\n SidebarMenuButton,\n SidebarMenuItem,\n SidebarProvider,\n} from '~/registry/miami/ui/sidebar'\n\nexport default function AppSidebar() {\n return (\n \n \n \n \n \n \n \n Help\n \n \n \n \n \n \n \n \n \n Support\n \n \n \n \n \n Feedback\n \n \n \n \n \n \n \n \n \n \n )\n}\n",
+ "type": "registry:component"
+ }
+ ]
}
diff --git a/apps/web/public/r/styles/miami/demo-sidebar-group.json b/apps/web/public/r/styles/miami/demo-sidebar-group.json
index 39f43fd9..08ff95ac 100644
--- a/apps/web/public/r/styles/miami/demo-sidebar-group.json
+++ b/apps/web/public/r/styles/miami/demo-sidebar-group.json
@@ -1,12 +1,12 @@
{
- "name": "demo-sidebar-group",
- "type": "registry:block",
- "description": "",
- "files": [
- {
- "path": "block/demo-sidebar-group.tsx",
- "content": "'use client'\n\nimport { LifeBuoy, Send } from 'lucide-react'\n\nimport {\n Sidebar,\n SidebarContent,\n SidebarGroup,\n SidebarGroupContent,\n SidebarGroupLabel,\n SidebarMenu,\n SidebarMenuButton,\n SidebarMenuItem,\n SidebarProvider,\n} from '~/registry/miami/ui/sidebar'\n\nexport default function AppSidebar() {\n return (\n \n \n \n \n Help \n \n \n \n \n \n Support\n \n \n \n \n \n Feedback\n \n \n \n \n \n \n \n \n )\n}\n",
- "type": "registry:component"
- }
- ]
+ "name": "demo-sidebar-group",
+ "type": "registry:block",
+ "description": "",
+ "files": [
+ {
+ "path": "block/demo-sidebar-group.tsx",
+ "content": "'use client'\n\nimport { LifeBuoy, Send } from 'lucide-react'\n\nimport {\n Sidebar,\n SidebarContent,\n SidebarGroup,\n SidebarGroupContent,\n SidebarGroupLabel,\n SidebarMenu,\n SidebarMenuButton,\n SidebarMenuItem,\n SidebarProvider,\n} from '~/registry/miami/ui/sidebar'\n\nexport default function AppSidebar() {\n return (\n \n \n \n \n Help \n \n \n \n \n \n Support\n \n \n \n \n \n Feedback\n \n \n \n \n \n \n \n \n )\n}\n",
+ "type": "registry:component"
+ }
+ ]
}
diff --git a/apps/web/public/r/styles/miami/demo-sidebar-header.json b/apps/web/public/r/styles/miami/demo-sidebar-header.json
index ff1e6515..26db4269 100644
--- a/apps/web/public/r/styles/miami/demo-sidebar-header.json
+++ b/apps/web/public/r/styles/miami/demo-sidebar-header.json
@@ -1,12 +1,12 @@
{
- "name": "demo-sidebar-header",
- "type": "registry:block",
- "description": "",
- "files": [
- {
- "path": "block/demo-sidebar-header.tsx",
- "content": "'use client'\n\nimport { ChevronDown } from 'lucide-react'\n\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuTrigger,\n} from '~/registry/miami/ui/dropdown-menu'\nimport {\n Sidebar,\n SidebarHeader,\n SidebarInset,\n SidebarMenu,\n SidebarMenuButton,\n SidebarMenuItem,\n SidebarProvider,\n SidebarTrigger,\n} from '~/registry/miami/ui/sidebar'\n\nexport default function AppSidebar() {\n return (\n \n \n \n \n \n \n \n \n Select Workspace\n \n \n \n \n \n Acme Inc \n \n \n Acme Corp. \n \n \n \n \n \n \n \n \n \n \n \n )\n}\n",
- "type": "registry:component"
- }
- ]
+ "name": "demo-sidebar-header",
+ "type": "registry:block",
+ "description": "",
+ "files": [
+ {
+ "path": "block/demo-sidebar-header.tsx",
+ "content": "'use client'\n\nimport { ChevronDown } from 'lucide-react'\n\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuTrigger,\n} from '~/registry/miami/ui/dropdown-menu'\nimport {\n Sidebar,\n SidebarHeader,\n SidebarInset,\n SidebarMenu,\n SidebarMenuButton,\n SidebarMenuItem,\n SidebarProvider,\n SidebarTrigger,\n} from '~/registry/miami/ui/sidebar'\n\nexport default function AppSidebar() {\n return (\n \n \n \n \n \n \n \n \n Select Workspace\n \n \n \n \n \n Acme Inc \n \n \n Acme Corp. \n \n \n \n \n \n \n \n \n \n \n \n )\n}\n",
+ "type": "registry:component"
+ }
+ ]
}
diff --git a/apps/web/public/r/styles/miami/demo-sidebar-menu-action.json b/apps/web/public/r/styles/miami/demo-sidebar-menu-action.json
index 5340569e..1f5c1dc1 100644
--- a/apps/web/public/r/styles/miami/demo-sidebar-menu-action.json
+++ b/apps/web/public/r/styles/miami/demo-sidebar-menu-action.json
@@ -1,12 +1,12 @@
{
- "name": "demo-sidebar-menu-action",
- "type": "registry:block",
- "description": "",
- "files": [
- {
- "path": "block/demo-sidebar-menu-action.tsx",
- "content": "'use client'\n\nimport {\n Frame,\n LifeBuoy,\n Map,\n MoreHorizontal,\n PieChart,\n Send,\n} from 'lucide-react'\n\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuTrigger,\n} from '~/registry/miami/ui/dropdown-menu'\nimport {\n Sidebar,\n SidebarContent,\n SidebarGroup,\n SidebarGroupContent,\n SidebarGroupLabel,\n SidebarMenu,\n SidebarMenuAction,\n SidebarMenuButton,\n SidebarMenuItem,\n SidebarProvider,\n} from '~/registry/miami/ui/sidebar'\n\nconst projects = [\n {\n name: 'Design Engineering',\n url: '#',\n icon: Frame,\n },\n {\n name: 'Sales & Marketing',\n url: '#',\n icon: PieChart,\n },\n {\n name: 'Travel',\n url: '#',\n icon: Map,\n },\n {\n name: 'Support',\n url: '#',\n icon: LifeBuoy,\n },\n {\n name: 'Feedback',\n url: '#',\n icon: Send,\n },\n]\n\nexport default function AppSidebar() {\n return (\n \n \n \n \n Projects \n \n \n {projects.map((project, index) => (\n \n \n \n \n {project.name} \n \n \n \n \n \n \n More \n \n \n \n \n Edit Project \n \n \n Delete Project \n \n \n \n \n ))}\n \n \n \n \n \n \n )\n}\n",
- "type": "registry:component"
- }
- ]
+ "name": "demo-sidebar-menu-action",
+ "type": "registry:block",
+ "description": "",
+ "files": [
+ {
+ "path": "block/demo-sidebar-menu-action.tsx",
+ "content": "'use client'\n\nimport {\n Frame,\n LifeBuoy,\n Map,\n MoreHorizontal,\n PieChart,\n Send,\n} from 'lucide-react'\n\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuTrigger,\n} from '~/registry/miami/ui/dropdown-menu'\nimport {\n Sidebar,\n SidebarContent,\n SidebarGroup,\n SidebarGroupContent,\n SidebarGroupLabel,\n SidebarMenu,\n SidebarMenuAction,\n SidebarMenuButton,\n SidebarMenuItem,\n SidebarProvider,\n} from '~/registry/miami/ui/sidebar'\n\nconst projects = [\n {\n name: 'Design Engineering',\n url: '#',\n icon: Frame,\n },\n {\n name: 'Sales & Marketing',\n url: '#',\n icon: PieChart,\n },\n {\n name: 'Travel',\n url: '#',\n icon: Map,\n },\n {\n name: 'Support',\n url: '#',\n icon: LifeBuoy,\n },\n {\n name: 'Feedback',\n url: '#',\n icon: Send,\n },\n]\n\nexport default function AppSidebar() {\n return (\n \n \n \n \n Projects \n \n \n {projects.map((project, index) => (\n \n \n \n \n {project.name} \n \n \n \n \n \n \n More \n \n \n \n \n Edit Project \n \n \n Delete Project \n \n \n \n \n ))}\n \n \n \n \n \n \n )\n}\n",
+ "type": "registry:component"
+ }
+ ]
}
diff --git a/apps/web/public/r/styles/miami/demo-sidebar-menu-badge.json b/apps/web/public/r/styles/miami/demo-sidebar-menu-badge.json
index 00bda1aa..3ab98bfa 100644
--- a/apps/web/public/r/styles/miami/demo-sidebar-menu-badge.json
+++ b/apps/web/public/r/styles/miami/demo-sidebar-menu-badge.json
@@ -1,12 +1,12 @@
{
- "name": "demo-sidebar-menu-badge",
- "type": "registry:block",
- "description": "",
- "files": [
- {
- "path": "block/demo-sidebar-menu-badge.tsx",
- "content": "'use client'\n\nimport { Frame, LifeBuoy, Map, PieChart, Send } from 'lucide-react'\n\nimport {\n Sidebar,\n SidebarContent,\n SidebarGroup,\n SidebarGroupContent,\n SidebarGroupLabel,\n SidebarMenu,\n SidebarMenuBadge,\n SidebarMenuButton,\n SidebarMenuItem,\n SidebarProvider,\n} from '~/registry/miami/ui/sidebar'\n\nconst projects = [\n {\n name: 'Design Engineering',\n url: '#',\n icon: Frame,\n badge: '24',\n },\n {\n name: 'Sales & Marketing',\n url: '#',\n icon: PieChart,\n badge: '12',\n },\n {\n name: 'Travel',\n url: '#',\n icon: Map,\n badge: '3',\n },\n {\n name: 'Support',\n url: '#',\n icon: LifeBuoy,\n badge: '21',\n },\n {\n name: 'Feedback',\n url: '#',\n icon: Send,\n badge: '8',\n },\n]\n\nexport default function AppSidebar() {\n return (\n \n \n \n \n Projects \n \n \n {projects.map(project => (\n \n \n \n \n {project.name} \n \n \n {project.badge} \n \n ))}\n \n \n \n \n \n \n )\n}\n",
- "type": "registry:component"
- }
- ]
+ "name": "demo-sidebar-menu-badge",
+ "type": "registry:block",
+ "description": "",
+ "files": [
+ {
+ "path": "block/demo-sidebar-menu-badge.tsx",
+ "content": "'use client'\n\nimport { Frame, LifeBuoy, Map, PieChart, Send } from 'lucide-react'\n\nimport {\n Sidebar,\n SidebarContent,\n SidebarGroup,\n SidebarGroupContent,\n SidebarGroupLabel,\n SidebarMenu,\n SidebarMenuBadge,\n SidebarMenuButton,\n SidebarMenuItem,\n SidebarProvider,\n} from '~/registry/miami/ui/sidebar'\n\nconst projects = [\n {\n name: 'Design Engineering',\n url: '#',\n icon: Frame,\n badge: '24',\n },\n {\n name: 'Sales & Marketing',\n url: '#',\n icon: PieChart,\n badge: '12',\n },\n {\n name: 'Travel',\n url: '#',\n icon: Map,\n badge: '3',\n },\n {\n name: 'Support',\n url: '#',\n icon: LifeBuoy,\n badge: '21',\n },\n {\n name: 'Feedback',\n url: '#',\n icon: Send,\n badge: '8',\n },\n]\n\nexport default function AppSidebar() {\n return (\n \n \n \n \n Projects \n \n \n {projects.map(project => (\n \n \n \n \n {project.name} \n \n \n {project.badge} \n \n ))}\n \n \n \n \n \n \n )\n}\n",
+ "type": "registry:component"
+ }
+ ]
}
diff --git a/apps/web/public/r/styles/miami/demo-sidebar-menu-collapsible.json b/apps/web/public/r/styles/miami/demo-sidebar-menu-collapsible.json
index 7af9afe2..49deffc5 100644
--- a/apps/web/public/r/styles/miami/demo-sidebar-menu-collapsible.json
+++ b/apps/web/public/r/styles/miami/demo-sidebar-menu-collapsible.json
@@ -1,12 +1,12 @@
{
- "name": "demo-sidebar-menu-collapsible",
- "type": "registry:block",
- "description": "",
- "files": [
- {
- "path": "block/demo-sidebar-menu-collapsible.tsx",
- "content": "'use client'\n\nimport { ChevronRight } from 'lucide-react'\n\nimport {\n Collapsible,\n CollapsibleContent,\n CollapsibleTrigger,\n} from '~/registry/miami/ui/collapsible'\nimport {\n Sidebar,\n SidebarContent,\n SidebarGroup,\n SidebarGroupContent,\n SidebarGroupLabel,\n SidebarMenu,\n SidebarMenuButton,\n SidebarMenuItem,\n SidebarMenuSub,\n SidebarMenuSubButton,\n SidebarMenuSubItem,\n SidebarProvider,\n} from '~/registry/miami/ui/sidebar'\n\nconst items = [\n {\n title: 'Getting Started',\n url: '#',\n items: [\n {\n title: 'Installation',\n url: '#',\n },\n {\n title: 'Project Structure',\n url: '#',\n },\n ],\n },\n {\n title: 'Building Your Application',\n url: '#',\n items: [\n {\n title: 'Routing',\n url: '#',\n },\n {\n title: 'Data Fetching',\n url: '#',\n isActive: true,\n },\n {\n title: 'Rendering',\n url: '#',\n },\n {\n title: 'Caching',\n url: '#',\n },\n {\n title: 'Styling',\n url: '#',\n },\n {\n title: 'Optimizing',\n url: '#',\n },\n {\n title: 'Configuring',\n url: '#',\n },\n {\n title: 'Testing',\n url: '#',\n },\n {\n title: 'Authentication',\n url: '#',\n },\n {\n title: 'Deploying',\n url: '#',\n },\n {\n title: 'Upgrading',\n url: '#',\n },\n {\n title: 'Examples',\n url: '#',\n },\n ],\n },\n {\n title: 'API Reference',\n url: '#',\n items: [\n {\n title: 'Components',\n url: '#',\n },\n {\n title: 'File Conventions',\n url: '#',\n },\n {\n title: 'Functions',\n url: '#',\n },\n {\n title: 'next.config.js Options',\n url: '#',\n },\n {\n title: 'CLI',\n url: '#',\n },\n {\n title: 'Edge Runtime',\n url: '#',\n },\n ],\n },\n {\n title: 'Architecture',\n url: '#',\n items: [\n {\n title: 'Accessibility',\n url: '#',\n },\n {\n title: 'Fast Refresh',\n url: '#',\n },\n {\n title: 'Next.js Compiler',\n url: '#',\n },\n {\n title: 'Supported Browsers',\n url: '#',\n },\n {\n title: 'Turbopack',\n url: '#',\n },\n ],\n },\n]\n\nexport default function AppSidebar() {\n return (\n \n \n \n \n \n \n {items.map((item, index) => (\n \n \n \n \n {item.title} \n \n \n \n \n \n {item.items.map((subItem, subIndex) => (\n \n \n \n {subItem.title} \n \n \n \n ))}\n \n \n \n \n ))}\n \n \n \n \n \n \n )\n}\n",
- "type": "registry:component"
- }
- ]
+ "name": "demo-sidebar-menu-collapsible",
+ "type": "registry:block",
+ "description": "",
+ "files": [
+ {
+ "path": "block/demo-sidebar-menu-collapsible.tsx",
+ "content": "'use client'\n\nimport { ChevronRight } from 'lucide-react'\n\nimport {\n Collapsible,\n CollapsibleContent,\n CollapsibleTrigger,\n} from '~/registry/miami/ui/collapsible'\nimport {\n Sidebar,\n SidebarContent,\n SidebarGroup,\n SidebarGroupContent,\n SidebarGroupLabel,\n SidebarMenu,\n SidebarMenuButton,\n SidebarMenuItem,\n SidebarMenuSub,\n SidebarMenuSubButton,\n SidebarMenuSubItem,\n SidebarProvider,\n} from '~/registry/miami/ui/sidebar'\n\nconst items = [\n {\n title: 'Getting Started',\n url: '#',\n items: [\n {\n title: 'Installation',\n url: '#',\n },\n {\n title: 'Project Structure',\n url: '#',\n },\n ],\n },\n {\n title: 'Building Your Application',\n url: '#',\n items: [\n {\n title: 'Routing',\n url: '#',\n },\n {\n title: 'Data Fetching',\n url: '#',\n isActive: true,\n },\n {\n title: 'Rendering',\n url: '#',\n },\n {\n title: 'Caching',\n url: '#',\n },\n {\n title: 'Styling',\n url: '#',\n },\n {\n title: 'Optimizing',\n url: '#',\n },\n {\n title: 'Configuring',\n url: '#',\n },\n {\n title: 'Testing',\n url: '#',\n },\n {\n title: 'Authentication',\n url: '#',\n },\n {\n title: 'Deploying',\n url: '#',\n },\n {\n title: 'Upgrading',\n url: '#',\n },\n {\n title: 'Examples',\n url: '#',\n },\n ],\n },\n {\n title: 'API Reference',\n url: '#',\n items: [\n {\n title: 'Components',\n url: '#',\n },\n {\n title: 'File Conventions',\n url: '#',\n },\n {\n title: 'Functions',\n url: '#',\n },\n {\n title: 'next.config.js Options',\n url: '#',\n },\n {\n title: 'CLI',\n url: '#',\n },\n {\n title: 'Edge Runtime',\n url: '#',\n },\n ],\n },\n {\n title: 'Architecture',\n url: '#',\n items: [\n {\n title: 'Accessibility',\n url: '#',\n },\n {\n title: 'Fast Refresh',\n url: '#',\n },\n {\n title: 'Next.js Compiler',\n url: '#',\n },\n {\n title: 'Supported Browsers',\n url: '#',\n },\n {\n title: 'Turbopack',\n url: '#',\n },\n ],\n },\n]\n\nexport default function AppSidebar() {\n return (\n \n \n \n \n \n \n {items.map((item, index) => (\n \n \n \n \n {item.title} \n \n \n \n \n \n {item.items.map((subItem, subIndex) => (\n \n \n \n {subItem.title} \n \n \n \n ))}\n \n \n \n \n ))}\n \n \n \n \n \n \n )\n}\n",
+ "type": "registry:component"
+ }
+ ]
}
diff --git a/apps/web/public/r/styles/miami/demo-sidebar-menu-sub.json b/apps/web/public/r/styles/miami/demo-sidebar-menu-sub.json
index 50e5bced..6c0738ca 100644
--- a/apps/web/public/r/styles/miami/demo-sidebar-menu-sub.json
+++ b/apps/web/public/r/styles/miami/demo-sidebar-menu-sub.json
@@ -1,12 +1,12 @@
{
- "name": "demo-sidebar-menu-sub",
- "type": "registry:block",
- "description": "",
- "files": [
- {
- "path": "block/demo-sidebar-menu-sub.tsx",
- "content": "'use client'\n\nimport {\n Sidebar,\n SidebarContent,\n SidebarGroup,\n SidebarGroupContent,\n SidebarMenu,\n SidebarMenuButton,\n SidebarMenuItem,\n SidebarMenuSub,\n SidebarMenuSubButton,\n SidebarMenuSubItem,\n SidebarProvider,\n} from '~/registry/miami/ui/sidebar'\n\nconst items = [\n {\n title: 'Getting Started',\n url: '#',\n items: [\n {\n title: 'Installation',\n url: '#',\n },\n {\n title: 'Project Structure',\n url: '#',\n },\n ],\n },\n {\n title: 'Building Your Application',\n url: '#',\n items: [\n {\n title: 'Routing',\n url: '#',\n },\n {\n title: 'Data Fetching',\n url: '#',\n isActive: true,\n },\n {\n title: 'Rendering',\n url: '#',\n },\n {\n title: 'Caching',\n url: '#',\n },\n {\n title: 'Styling',\n url: '#',\n },\n {\n title: 'Optimizing',\n url: '#',\n },\n {\n title: 'Configuring',\n url: '#',\n },\n {\n title: 'Testing',\n url: '#',\n },\n {\n title: 'Authentication',\n url: '#',\n },\n {\n title: 'Deploying',\n url: '#',\n },\n {\n title: 'Upgrading',\n url: '#',\n },\n {\n title: 'Examples',\n url: '#',\n },\n ],\n },\n {\n title: 'API Reference',\n url: '#',\n items: [\n {\n title: 'Components',\n url: '#',\n },\n {\n title: 'File Conventions',\n url: '#',\n },\n {\n title: 'Functions',\n url: '#',\n },\n {\n title: 'next.config.js Options',\n url: '#',\n },\n {\n title: 'CLI',\n url: '#',\n },\n {\n title: 'Edge Runtime',\n url: '#',\n },\n ],\n },\n {\n title: 'Architecture',\n url: '#',\n items: [\n {\n title: 'Accessibility',\n url: '#',\n },\n {\n title: 'Fast Refresh',\n url: '#',\n },\n {\n title: 'Next.js Compiler',\n url: '#',\n },\n {\n title: 'Supported Browsers',\n url: '#',\n },\n {\n title: 'Turbopack',\n url: '#',\n },\n ],\n },\n]\n\nexport default function AppSidebar() {\n return (\n \n \n \n \n \n \n {items.map((item, index) => (\n \n \n \n {item.title} \n \n \n \n {item.items.map((subItem, subIndex) => (\n \n \n \n {subItem.title} \n \n \n \n ))}\n \n \n ))}\n \n \n \n \n \n \n )\n}\n",
- "type": "registry:component"
- }
- ]
+ "name": "demo-sidebar-menu-sub",
+ "type": "registry:block",
+ "description": "",
+ "files": [
+ {
+ "path": "block/demo-sidebar-menu-sub.tsx",
+ "content": "'use client'\n\nimport {\n Sidebar,\n SidebarContent,\n SidebarGroup,\n SidebarGroupContent,\n SidebarMenu,\n SidebarMenuButton,\n SidebarMenuItem,\n SidebarMenuSub,\n SidebarMenuSubButton,\n SidebarMenuSubItem,\n SidebarProvider,\n} from '~/registry/miami/ui/sidebar'\n\nconst items = [\n {\n title: 'Getting Started',\n url: '#',\n items: [\n {\n title: 'Installation',\n url: '#',\n },\n {\n title: 'Project Structure',\n url: '#',\n },\n ],\n },\n {\n title: 'Building Your Application',\n url: '#',\n items: [\n {\n title: 'Routing',\n url: '#',\n },\n {\n title: 'Data Fetching',\n url: '#',\n isActive: true,\n },\n {\n title: 'Rendering',\n url: '#',\n },\n {\n title: 'Caching',\n url: '#',\n },\n {\n title: 'Styling',\n url: '#',\n },\n {\n title: 'Optimizing',\n url: '#',\n },\n {\n title: 'Configuring',\n url: '#',\n },\n {\n title: 'Testing',\n url: '#',\n },\n {\n title: 'Authentication',\n url: '#',\n },\n {\n title: 'Deploying',\n url: '#',\n },\n {\n title: 'Upgrading',\n url: '#',\n },\n {\n title: 'Examples',\n url: '#',\n },\n ],\n },\n {\n title: 'API Reference',\n url: '#',\n items: [\n {\n title: 'Components',\n url: '#',\n },\n {\n title: 'File Conventions',\n url: '#',\n },\n {\n title: 'Functions',\n url: '#',\n },\n {\n title: 'next.config.js Options',\n url: '#',\n },\n {\n title: 'CLI',\n url: '#',\n },\n {\n title: 'Edge Runtime',\n url: '#',\n },\n ],\n },\n {\n title: 'Architecture',\n url: '#',\n items: [\n {\n title: 'Accessibility',\n url: '#',\n },\n {\n title: 'Fast Refresh',\n url: '#',\n },\n {\n title: 'Next.js Compiler',\n url: '#',\n },\n {\n title: 'Supported Browsers',\n url: '#',\n },\n {\n title: 'Turbopack',\n url: '#',\n },\n ],\n },\n]\n\nexport default function AppSidebar() {\n return (\n \n \n \n \n \n \n {items.map((item, index) => (\n \n \n \n {item.title} \n \n \n \n {item.items.map((subItem, subIndex) => (\n \n \n \n {subItem.title} \n \n \n \n ))}\n \n \n ))}\n \n \n \n \n \n \n )\n}\n",
+ "type": "registry:component"
+ }
+ ]
}
diff --git a/apps/web/public/r/styles/miami/demo-sidebar-menu.json b/apps/web/public/r/styles/miami/demo-sidebar-menu.json
index 4d4e6e80..89e563e2 100644
--- a/apps/web/public/r/styles/miami/demo-sidebar-menu.json
+++ b/apps/web/public/r/styles/miami/demo-sidebar-menu.json
@@ -1,12 +1,12 @@
{
- "name": "demo-sidebar-menu",
- "type": "registry:block",
- "description": "",
- "files": [
- {
- "path": "block/demo-sidebar-menu.tsx",
- "content": "'use client'\n\nimport { Frame, LifeBuoy, Map, PieChart, Send } from 'lucide-react'\n\nimport {\n Sidebar,\n SidebarContent,\n SidebarGroup,\n SidebarGroupContent,\n SidebarGroupLabel,\n SidebarMenu,\n SidebarMenuButton,\n SidebarMenuItem,\n SidebarProvider,\n} from '~/registry/miami/ui/sidebar'\n\nconst projects = [\n {\n name: 'Design Engineering',\n url: '#',\n icon: Frame,\n },\n {\n name: 'Sales & Marketing',\n url: '#',\n icon: PieChart,\n },\n {\n name: 'Travel',\n url: '#',\n icon: Map,\n },\n {\n name: 'Support',\n url: '#',\n icon: LifeBuoy,\n },\n {\n name: 'Feedback',\n url: '#',\n icon: Send,\n },\n]\n\nexport default function AppSidebar() {\n return (\n \n \n \n \n Projects \n \n \n {projects.map(project => (\n \n \n \n \n {project.name} \n \n \n \n ))}\n \n \n \n \n \n \n )\n}\n",
- "type": "registry:component"
- }
- ]
+ "name": "demo-sidebar-menu",
+ "type": "registry:block",
+ "description": "",
+ "files": [
+ {
+ "path": "block/demo-sidebar-menu.tsx",
+ "content": "'use client'\n\nimport { Frame, LifeBuoy, Map, PieChart, Send } from 'lucide-react'\n\nimport {\n Sidebar,\n SidebarContent,\n SidebarGroup,\n SidebarGroupContent,\n SidebarGroupLabel,\n SidebarMenu,\n SidebarMenuButton,\n SidebarMenuItem,\n SidebarProvider,\n} from '~/registry/miami/ui/sidebar'\n\nconst projects = [\n {\n name: 'Design Engineering',\n url: '#',\n icon: Frame,\n },\n {\n name: 'Sales & Marketing',\n url: '#',\n icon: PieChart,\n },\n {\n name: 'Travel',\n url: '#',\n icon: Map,\n },\n {\n name: 'Support',\n url: '#',\n icon: LifeBuoy,\n },\n {\n name: 'Feedback',\n url: '#',\n icon: Send,\n },\n]\n\nexport default function AppSidebar() {\n return (\n \n \n \n \n Projects \n \n \n {projects.map(project => (\n \n \n \n \n {project.name} \n \n \n \n ))}\n \n \n \n \n \n \n )\n}\n",
+ "type": "registry:component"
+ }
+ ]
}
diff --git a/apps/web/public/r/styles/miami/demo-sidebar-rsc.json b/apps/web/public/r/styles/miami/demo-sidebar-rsc.json
index 544517ad..9f87b8ed 100644
--- a/apps/web/public/r/styles/miami/demo-sidebar-rsc.json
+++ b/apps/web/public/r/styles/miami/demo-sidebar-rsc.json
@@ -1,12 +1,12 @@
{
- "name": "demo-sidebar-rsc",
- "type": "registry:block",
- "description": "",
- "files": [
- {
- "path": "block/demo-sidebar-rsc.tsx",
- "content": "import * as React from 'react'\nimport { Frame, LifeBuoy, Map, PieChart, Send } from 'lucide-react'\n\nimport {\n Sidebar,\n SidebarContent,\n SidebarGroup,\n SidebarGroupContent,\n SidebarGroupLabel,\n SidebarMenu,\n SidebarMenuButton,\n SidebarMenuItem,\n SidebarMenuSkeleton,\n SidebarProvider,\n} from '~/registry/miami/ui/sidebar'\n\nconst projects = [\n {\n name: 'Design Engineering',\n url: '#',\n icon: Frame,\n badge: '24',\n },\n {\n name: 'Sales & Marketing',\n url: '#',\n icon: PieChart,\n badge: '12',\n },\n {\n name: 'Travel',\n url: '#',\n icon: Map,\n badge: '3',\n },\n {\n name: 'Support',\n url: '#',\n icon: LifeBuoy,\n badge: '21',\n },\n {\n name: 'Feedback',\n url: '#',\n icon: Send,\n badge: '8',\n },\n]\n\n// Dummy fetch function\nasync function fetchProjects() {\n await new Promise(resolve => setTimeout(resolve, 3000))\n return projects\n}\n\nexport default function AppSidebar() {\n return (\n \n \n \n \n Projects \n \n }>\n \n \n \n \n \n \n \n )\n}\n\nfunction NavProjectsSkeleton() {\n return (\n \n {Array.from({ length: 5 }).map((_, index) => (\n \n \n \n ))}\n \n )\n}\n\nasync function NavProjects() {\n const projects = await fetchProjects()\n\n return (\n \n {projects.map(project => (\n \n \n \n \n {project.name} \n \n \n \n ))}\n \n )\n}\n",
- "type": "registry:component"
- }
- ]
+ "name": "demo-sidebar-rsc",
+ "type": "registry:block",
+ "description": "",
+ "files": [
+ {
+ "path": "block/demo-sidebar-rsc.tsx",
+ "content": "import * as React from 'react'\nimport { Frame, LifeBuoy, Map, PieChart, Send } from 'lucide-react'\n\nimport {\n Sidebar,\n SidebarContent,\n SidebarGroup,\n SidebarGroupContent,\n SidebarGroupLabel,\n SidebarMenu,\n SidebarMenuButton,\n SidebarMenuItem,\n SidebarMenuSkeleton,\n SidebarProvider,\n} from '~/registry/miami/ui/sidebar'\n\nconst projects = [\n {\n name: 'Design Engineering',\n url: '#',\n icon: Frame,\n badge: '24',\n },\n {\n name: 'Sales & Marketing',\n url: '#',\n icon: PieChart,\n badge: '12',\n },\n {\n name: 'Travel',\n url: '#',\n icon: Map,\n badge: '3',\n },\n {\n name: 'Support',\n url: '#',\n icon: LifeBuoy,\n badge: '21',\n },\n {\n name: 'Feedback',\n url: '#',\n icon: Send,\n badge: '8',\n },\n]\n\n// Dummy fetch function\nasync function fetchProjects() {\n await new Promise(resolve => setTimeout(resolve, 3000))\n return projects\n}\n\nexport default function AppSidebar() {\n return (\n \n \n \n \n Projects \n \n }>\n \n \n \n \n \n \n \n )\n}\n\nfunction NavProjectsSkeleton() {\n return (\n \n {Array.from({ length: 5 }).map((_, index) => (\n \n \n \n ))}\n \n )\n}\n\nasync function NavProjects() {\n const projects = await fetchProjects()\n\n return (\n \n {projects.map(project => (\n \n \n \n \n {project.name} \n \n \n \n ))}\n \n )\n}\n",
+ "type": "registry:component"
+ }
+ ]
}
diff --git a/apps/web/public/r/styles/miami/demo-sidebar.json b/apps/web/public/r/styles/miami/demo-sidebar.json
index 0acf1946..70413ece 100644
--- a/apps/web/public/r/styles/miami/demo-sidebar.json
+++ b/apps/web/public/r/styles/miami/demo-sidebar.json
@@ -1,12 +1,12 @@
{
- "name": "demo-sidebar",
- "type": "registry:block",
- "description": "",
- "files": [
- {
- "path": "block/demo-sidebar.tsx",
- "content": "'use client'\n\nimport { Calendar, Home, Inbox, Search, Settings } from 'lucide-react'\n\nimport {\n Sidebar,\n SidebarContent,\n SidebarGroup,\n SidebarGroupContent,\n SidebarGroupLabel,\n SidebarInset,\n SidebarMenu,\n SidebarMenuButton,\n SidebarMenuItem,\n SidebarProvider,\n SidebarTrigger,\n} from '~/registry/miami/ui/sidebar'\n\n// Menu items.\nconst items = [\n {\n title: 'Home',\n url: '#',\n icon: Home,\n },\n {\n title: 'Inbox',\n url: '#',\n icon: Inbox,\n },\n {\n title: 'Calendar',\n url: '#',\n icon: Calendar,\n },\n {\n title: 'Search',\n url: '#',\n icon: Search,\n },\n {\n title: 'Settings',\n url: '#',\n icon: Settings,\n },\n]\n\nexport default function AppSidebar() {\n return (\n \n \n \n \n Application \n \n \n {items.map(item => (\n \n \n \n \n {item.title} \n \n \n \n ))}\n \n \n \n \n \n \n \n \n \n )\n}\n",
- "type": "registry:component"
- }
- ]
+ "name": "demo-sidebar",
+ "type": "registry:block",
+ "description": "",
+ "files": [
+ {
+ "path": "block/demo-sidebar.tsx",
+ "content": "'use client'\n\nimport { Calendar, Home, Inbox, Search, Settings } from 'lucide-react'\n\nimport {\n Sidebar,\n SidebarContent,\n SidebarGroup,\n SidebarGroupContent,\n SidebarGroupLabel,\n SidebarInset,\n SidebarMenu,\n SidebarMenuButton,\n SidebarMenuItem,\n SidebarProvider,\n SidebarTrigger,\n} from '~/registry/miami/ui/sidebar'\n\n// Menu items.\nconst items = [\n {\n title: 'Home',\n url: '#',\n icon: Home,\n },\n {\n title: 'Inbox',\n url: '#',\n icon: Inbox,\n },\n {\n title: 'Calendar',\n url: '#',\n icon: Calendar,\n },\n {\n title: 'Search',\n url: '#',\n icon: Search,\n },\n {\n title: 'Settings',\n url: '#',\n icon: Settings,\n },\n]\n\nexport default function AppSidebar() {\n return (\n \n \n \n \n Application \n \n \n {items.map(item => (\n \n \n \n \n {item.title} \n \n \n \n ))}\n \n \n \n \n \n \n \n \n \n )\n}\n",
+ "type": "registry:component"
+ }
+ ]
}
diff --git a/apps/web/public/r/styles/miami/shine-border-demo-2.json b/apps/web/public/r/styles/miami/shine-border-demo-2.json
index 302de4aa..e1588468 100644
--- a/apps/web/public/r/styles/miami/shine-border-demo-2.json
+++ b/apps/web/public/r/styles/miami/shine-border-demo-2.json
@@ -6,7 +6,7 @@
"files": [
{
"path": "examples/shine-border-demo-2.tsx",
- "content": "import ShineBorder from \"~/registry/miami/ui/shine-border\"\n\nexport default function ShineBorderDemo() {\n return (\n \n Shine Border\n \n )\n}\n",
+ "content": "import { useTheme } from \"next-themes\"\n\nimport { ShineBorder } from \"~/registry/miami/ui/shine-border\"\n\nexport default function ShineBorderDemo() {\n const theme = useTheme()\n return (\n \n Shine Border\n \n )\n}\n",
"type": "registry:example",
"target": ""
}
diff --git a/apps/web/public/r/styles/miami/shine-border-demo.json b/apps/web/public/r/styles/miami/shine-border-demo.json
index eb0a49db..ca687ed0 100644
--- a/apps/web/public/r/styles/miami/shine-border-demo.json
+++ b/apps/web/public/r/styles/miami/shine-border-demo.json
@@ -6,7 +6,7 @@
"files": [
{
"path": "examples/shine-border-demo.tsx",
- "content": "import ShineBorder from \"~/registry/miami/ui/shine-border\"\n\nexport default function ShineBorderDemo() {\n return (\n \n \n Shine Border\n \n \n )\n}\n",
+ "content": "import { ShineBorder } from \"~/registry/miami/ui/shine-border\"\n\nexport default function ShineBorderDemo() {\n return (\n \n \n Shine Border\n \n \n )\n}\n",
"type": "registry:example",
"target": ""
}
diff --git a/apps/web/public/r/styles/miami/shine-border.json b/apps/web/public/r/styles/miami/shine-border.json
index 186adb59..7de7a28d 100644
--- a/apps/web/public/r/styles/miami/shine-border.json
+++ b/apps/web/public/r/styles/miami/shine-border.json
@@ -6,7 +6,7 @@
"files": [
{
"path": "ui/shine-border.tsx",
- "content": "\"use client\"\n\nimport { ny } from \"~/lib/utils\"\n\ntype TColorProp = string | string[]\n\ninterface ShineBorderProps {\n borderRadius?: number\n borderWidth?: number\n duration?: number\n color?: TColorProp\n className?: string\n children: React.ReactNode\n}\n\n/**\n * @name Shine Border\n * @description It is an animated background border effect component with easy to use and configurable props.\n * @param borderRadius defines the radius of the border.\n * @param borderWidth defines the width of the border.\n * @param duration defines the animation duration to be applied on the shining border\n * @param color a string or string array to define border color.\n * @param className defines the class name to be applied to the component\n * @param children contains react node elements.\n */\nexport default function ShineBorder({\n borderRadius = 8,\n borderWidth = 1,\n duration = 14,\n color = \"#000000\",\n className,\n children,\n}: ShineBorderProps) {\n return (\n \n )\n}\n",
+ "content": "\"use client\"\n\nimport { ny } from \"~/lib/utils\"\n\ntype TColorProp = string | string[]\n\ninterface ShineBorderProps {\n borderRadius?: number\n borderWidth?: number\n duration?: number\n color?: TColorProp\n className?: string\n children: React.ReactNode\n}\n\n/**\n * @name Shine Border\n * @description It is an animated background border effect component with easy to use and configurable props.\n * @param borderRadius defines the radius of the border.\n * @param borderWidth defines the width of the border.\n * @param duration defines the animation duration to be applied on the shining border\n * @param color a string or string array to define border color.\n * @param className defines the class name to be applied to the component\n * @param children contains react node elements.\n */\nexport function ShineBorder({\n borderRadius = 8,\n borderWidth = 1,\n duration = 14,\n color = \"#000000\",\n className,\n children,\n}: ShineBorderProps) {\n return (\n \n )\n}\n",
"type": "registry:ui",
"target": ""
}
diff --git a/apps/web/public/r/styles/miami/wavy-dot-pattern-demo.json b/apps/web/public/r/styles/miami/wavy-dot-pattern-demo.json
index e08ba029..bbaa3e73 100644
--- a/apps/web/public/r/styles/miami/wavy-dot-pattern-demo.json
+++ b/apps/web/public/r/styles/miami/wavy-dot-pattern-demo.json
@@ -1,14 +1,14 @@
{
- "$schema": "https://nyxbui.design/schema/registry-item.json",
- "name": "wavy-dot-pattern-demo",
- "type": "registry:example",
- "author": "nyxbui (https://nyxbui.design)",
- "files": [
- {
- "path": "examples/wavy-dot-pattern-demo.tsx",
- "content": "import WavyDotPattern from \"~/registry/miami/ui/wavy-dot-pattern\"\n\nexport default function WavyDotPatternDemo() {\n return (\n \n
\n Wavy Dot Pattern\n
\n\n
\n
\n )\n}\n",
- "type": "registry:example",
- "target": ""
- }
- ]
-}
\ No newline at end of file
+ "$schema": "https://nyxbui.design/schema/registry-item.json",
+ "name": "wavy-dot-pattern-demo",
+ "type": "registry:example",
+ "author": "nyxbui (https://nyxbui.design)",
+ "files": [
+ {
+ "path": "examples/wavy-dot-pattern-demo.tsx",
+ "content": "import WavyDotPattern from \"~/registry/miami/ui/wavy-dot-pattern\"\n\nexport default function WavyDotPatternDemo() {\n return (\n \n
\n Wavy Dot Pattern\n
\n\n
\n
\n )\n}\n",
+ "type": "registry:example",
+ "target": ""
+ }
+ ]
+}
diff --git a/apps/web/public/r/styles/miami/wavy-dot-pattern.json b/apps/web/public/r/styles/miami/wavy-dot-pattern.json
index b67ba1de..30850dd1 100644
--- a/apps/web/public/r/styles/miami/wavy-dot-pattern.json
+++ b/apps/web/public/r/styles/miami/wavy-dot-pattern.json
@@ -1,17 +1,15 @@
{
- "$schema": "https://nyxbui.design/schema/registry-item.json",
- "name": "wavy-dot-pattern",
- "type": "registry:ui",
- "author": "nyxbui (https://nyxbui.design)",
- "dependencies": [
- "react-anime"
- ],
- "files": [
- {
- "path": "ui/wavy-dot-pattern.tsx",
- "content": "\"use client\"\nimport { useState } from \"react\"\nimport { anime } from \"react-anime\"\nimport { ny } from \"~/lib/utils\"\n\ninterface WavyDotPatternProps {\n className?: string\n gridWidth?: number\n gridHeight?: number\n dotWidth?: number\n dotHeight?: number\n}\n\nexport function WavyDotPattern({\n className,\n gridWidth,\n gridHeight,\n dotWidth,\n dotHeight,\n}: WavyDotPatternProps) {\n const [dotClickDisabled, setDotClickDisabled] = useState(false)\n\n const handleDotClick = (e: any, width: number, height: number) => {\n setDotClickDisabled(true)\n\n anime({\n targets: \".dot-point\",\n scale: [\n { value: 1.35, easing: \"easeOutSine\", duration: 250 },\n { value: 1, easing: \"easeInOutQuad\", duration: 500 },\n ],\n translateY: [\n { value: -15, easing: \"easeOutSine\", duration: 250 },\n { value: 1, easing: \"easeInOutQuad\", duration: 500 },\n ],\n opacity: [\n { value: 0.7, easing: \"easeOutSine\", duration: 250 },\n { value: 0.35, easing: \"easeInOutQuad\", duration: 500 },\n ],\n delay: anime.stagger(100, {\n grid: [width, height],\n from: e.target.dataset.index,\n }),\n })\n\n setTimeout(() => setDotClickDisabled(false), 2000)\n }\n\n const GRID_WIDTH = gridWidth || 30\n const GRID_HEIGHT = gridHeight || 30\n\n const DOT_WIDTH = dotWidth ? `w-[${dotWidth}px]` : \"w-[8px]\"\n const DOT_HEIGHT = dotHeight ? `h-[${dotHeight}px]` : \"h-[8px]\"\n\n let index = 0\n\n const dots = []\n\n for (let i = 0; i < GRID_WIDTH; i++) {\n for (let j = 0; j < GRID_HEIGHT; j++) {\n dots.push(\n handleDotClick(e, GRID_WIDTH, GRID_HEIGHT)}\n data-index={index}\n key={`${i}-${j}`}\n disabled={dotClickDisabled}\n >\n
\n ,\n )\n index++\n }\n }\n\n return (\n \n {dots.map((dot) => dot)}\n
\n )\n}\n\nexport default WavyDotPattern\n",
- "type": "registry:ui",
- "target": ""
- }
- ]
-}
\ No newline at end of file
+ "$schema": "https://nyxbui.design/schema/registry-item.json",
+ "name": "wavy-dot-pattern",
+ "type": "registry:ui",
+ "author": "nyxbui (https://nyxbui.design)",
+ "dependencies": ["react-anime"],
+ "files": [
+ {
+ "path": "ui/wavy-dot-pattern.tsx",
+ "content": "\"use client\"\nimport { useState } from \"react\"\nimport { anime } from \"react-anime\"\nimport { ny } from \"~/lib/utils\"\n\ninterface WavyDotPatternProps {\n className?: string\n gridWidth?: number\n gridHeight?: number\n dotWidth?: number\n dotHeight?: number\n}\n\nexport function WavyDotPattern({\n className,\n gridWidth,\n gridHeight,\n dotWidth,\n dotHeight,\n}: WavyDotPatternProps) {\n const [dotClickDisabled, setDotClickDisabled] = useState(false)\n\n const handleDotClick = (e: any, width: number, height: number) => {\n setDotClickDisabled(true)\n\n anime({\n targets: \".dot-point\",\n scale: [\n { value: 1.35, easing: \"easeOutSine\", duration: 250 },\n { value: 1, easing: \"easeInOutQuad\", duration: 500 },\n ],\n translateY: [\n { value: -15, easing: \"easeOutSine\", duration: 250 },\n { value: 1, easing: \"easeInOutQuad\", duration: 500 },\n ],\n opacity: [\n { value: 0.7, easing: \"easeOutSine\", duration: 250 },\n { value: 0.35, easing: \"easeInOutQuad\", duration: 500 },\n ],\n delay: anime.stagger(100, {\n grid: [width, height],\n from: e.target.dataset.index,\n }),\n })\n\n setTimeout(() => setDotClickDisabled(false), 2000)\n }\n\n const GRID_WIDTH = gridWidth || 30\n const GRID_HEIGHT = gridHeight || 30\n\n const DOT_WIDTH = dotWidth ? `w-[${dotWidth}px]` : \"w-[8px]\"\n const DOT_HEIGHT = dotHeight ? `h-[${dotHeight}px]` : \"h-[8px]\"\n\n let index = 0\n\n const dots = []\n\n for (let i = 0; i < GRID_WIDTH; i++) {\n for (let j = 0; j < GRID_HEIGHT; j++) {\n dots.push(\n handleDotClick(e, GRID_WIDTH, GRID_HEIGHT)}\n data-index={index}\n key={`${i}-${j}`}\n disabled={dotClickDisabled}\n >\n
\n ,\n )\n index++\n }\n }\n\n return (\n \n {dots.map((dot) => dot)}\n
\n )\n}\n\nexport default WavyDotPattern\n",
+ "type": "registry:ui",
+ "target": ""
+ }
+ ]
+}
diff --git a/apps/web/public/schema.json b/apps/web/public/schema.json
index b6b0f4d4..c6081581 100644
--- a/apps/web/public/schema.json
+++ b/apps/web/public/schema.json
@@ -1,59 +1,59 @@
{
- "$schema": "http://json-schema.org/draft-07/schema#",
- "type": "object",
- "properties": {
- "style": {
- "type": "string",
- "enum": ["default", "miami"]
- },
- "tailwind": {
- "type": "object",
- "properties": {
- "config": {
- "type": "string"
- },
- "css": {
- "type": "string"
- },
- "baseColor": {
- "type": "string"
- },
- "cssVariables": {
- "type": "boolean"
- },
- "prefix": {
- "type": "string"
- }
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "type": "object",
+ "properties": {
+ "style": {
+ "type": "string",
+ "enum": ["default", "miami"]
},
- "required": ["config", "css", "baseColor", "cssVariables"]
- },
- "rsc": {
- "type": "boolean"
- },
- "tsx": {
- "type": "boolean"
- },
- "aliases": {
- "type": "object",
- "properties": {
- "utils": {
- "type": "string"
- },
- "components": {
- "type": "string"
- },
- "ui": {
- "type": "string"
- },
- "lib": {
- "type": "string"
- },
- "hooks": {
- "type": "string"
- }
+ "tailwind": {
+ "type": "object",
+ "properties": {
+ "config": {
+ "type": "string"
+ },
+ "css": {
+ "type": "string"
+ },
+ "baseColor": {
+ "type": "string"
+ },
+ "cssVariables": {
+ "type": "boolean"
+ },
+ "prefix": {
+ "type": "string"
+ }
+ },
+ "required": ["config", "css", "baseColor", "cssVariables"]
},
- "required": ["utils", "components"]
- }
- },
- "required": ["style", "tailwind", "rsc", "aliases"]
+ "rsc": {
+ "type": "boolean"
+ },
+ "tsx": {
+ "type": "boolean"
+ },
+ "aliases": {
+ "type": "object",
+ "properties": {
+ "utils": {
+ "type": "string"
+ },
+ "components": {
+ "type": "string"
+ },
+ "ui": {
+ "type": "string"
+ },
+ "lib": {
+ "type": "string"
+ },
+ "hooks": {
+ "type": "string"
+ }
+ },
+ "required": ["utils", "components"]
+ }
+ },
+ "required": ["style", "tailwind", "rsc", "aliases"]
}
diff --git a/apps/web/public/schema/registry-item.json b/apps/web/public/schema/registry-item.json
index 8d4fd3e2..1ffb2ff3 100644
--- a/apps/web/public/schema/registry-item.json
+++ b/apps/web/public/schema/registry-item.json
@@ -1,149 +1,149 @@
{
- "$schema": "https://json-schema.org/draft-07/schema#",
- "type": "object",
- "properties": {
- "name": {
- "type": "string"
- },
- "type": {
- "type": "string",
- "enum": [
- "registry:lib",
- "registry:block",
- "registry:component",
- "registry:ui",
- "registry:hook",
- "registry:theme",
- "registry:page",
- "registry:file"
- ]
- },
- "description": {
- "type": "string"
- },
- "title": {
- "type": "string"
- },
- "author": {
- "type": "string"
- },
- "dependencies": {
- "type": "array",
- "items": {
- "type": "string"
- }
- },
- "devDependencies": {
- "type": "array",
- "items": {
- "type": "string"
- }
- },
- "registryDependencies": {
- "type": "array",
- "items": {
- "type": "string"
- }
- },
- "files": {
- "type": "array",
- "items": {
- "type": "object",
- "properties": {
- "path": {
+ "$schema": "https://json-schema.org/draft-07/schema#",
+ "type": "object",
+ "properties": {
+ "name": {
+ "type": "string"
+ },
+ "type": {
+ "type": "string",
+ "enum": [
+ "registry:lib",
+ "registry:block",
+ "registry:component",
+ "registry:ui",
+ "registry:hook",
+ "registry:theme",
+ "registry:page",
+ "registry:file"
+ ]
+ },
+ "description": {
+ "type": "string"
+ },
+ "title": {
+ "type": "string"
+ },
+ "author": {
+ "type": "string"
+ },
+ "dependencies": {
+ "type": "array",
+ "items": {
"type": "string"
- },
- "content": {
+ }
+ },
+ "devDependencies": {
+ "type": "array",
+ "items": {
"type": "string"
- },
- "type": {
- "type": "string",
- "enum": [
- "registry:lib",
- "registry:block",
- "registry:component",
- "registry:ui",
- "registry:hook",
- "registry:theme",
- "registry:page",
- "registry:file"
- ]
- },
- "target": {
+ }
+ },
+ "registryDependencies": {
+ "type": "array",
+ "items": {
"type": "string"
- }
- },
- "if": {
- "properties": {
- "type": {
- "enum": ["registry:file", "registry:page"]
- }
- }
- },
- "then": {
- "required": ["path", "type", "target"]
- },
- "else": {
- "required": ["path", "type"]
- }
- }
- },
- "tailwind": {
- "type": "object",
- "properties": {
- "config": {
- "type": "object",
- "properties": {
- "content": {
- "type": "array",
- "items": {
- "type": "string"
- }
+ }
+ },
+ "files": {
+ "type": "array",
+ "items": {
+ "type": "object",
+ "properties": {
+ "path": {
+ "type": "string"
+ },
+ "content": {
+ "type": "string"
+ },
+ "type": {
+ "type": "string",
+ "enum": [
+ "registry:lib",
+ "registry:block",
+ "registry:component",
+ "registry:ui",
+ "registry:hook",
+ "registry:theme",
+ "registry:page",
+ "registry:file"
+ ]
+ },
+ "target": {
+ "type": "string"
+ }
+ },
+ "if": {
+ "properties": {
+ "type": {
+ "enum": ["registry:file", "registry:page"]
+ }
+ }
},
- "theme": {
- "type": "object",
- "additionalProperties": true
+ "then": {
+ "required": ["path", "type", "target"]
},
- "plugins": {
- "type": "array",
- "items": {
- "type": "string"
- }
+ "else": {
+ "required": ["path", "type"]
}
- }
- }
- }
- },
- "cssVars": {
- "type": "object",
- "properties": {
- "light": {
- "type": "object",
- "additionalProperties": {
- "type": "string"
- }
- },
- "dark": {
- "type": "object",
- "additionalProperties": {
+ }
+ },
+ "tailwind": {
+ "type": "object",
+ "properties": {
+ "config": {
+ "type": "object",
+ "properties": {
+ "content": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "theme": {
+ "type": "object",
+ "additionalProperties": true
+ },
+ "plugins": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ }
+ }
+ }
+ }
+ },
+ "cssVars": {
+ "type": "object",
+ "properties": {
+ "light": {
+ "type": "object",
+ "additionalProperties": {
+ "type": "string"
+ }
+ },
+ "dark": {
+ "type": "object",
+ "additionalProperties": {
+ "type": "string"
+ }
+ }
+ }
+ },
+ "meta": {
+ "type": "object",
+ "additionalProperties": true
+ },
+ "docs": {
+ "type": "string"
+ },
+ "categories": {
+ "type": "array",
+ "items": {
"type": "string"
- }
- }
- }
- },
- "meta": {
- "type": "object",
- "additionalProperties": true
- },
- "docs": {
- "type": "string"
- },
- "categories": {
- "type": "array",
- "items": {
- "type": "string"
+ }
}
- }
- },
- "required": ["name", "type"]
+ },
+ "required": ["name", "type"]
}
diff --git a/apps/web/public/site.webmanifest b/apps/web/public/site.webmanifest
index b20abb7c..49c45371 100644
--- a/apps/web/public/site.webmanifest
+++ b/apps/web/public/site.webmanifest
@@ -1,19 +1,19 @@
{
- "name": "",
- "short_name": "",
- "icons": [
- {
- "src": "/android-chrome-192x192.png",
- "sizes": "192x192",
- "type": "image/png"
- },
- {
- "src": "/android-chrome-512x512.png",
- "sizes": "512x512",
- "type": "image/png"
- }
- ],
- "theme_color": "#ffffff",
- "background_color": "#ffffff",
- "display": "standalone"
+ "name": "",
+ "short_name": "",
+ "icons": [
+ {
+ "src": "/android-chrome-192x192.png",
+ "sizes": "192x192",
+ "type": "image/png"
+ },
+ {
+ "src": "/android-chrome-512x512.png",
+ "sizes": "512x512",
+ "type": "image/png"
+ }
+ ],
+ "theme_color": "#ffffff",
+ "background_color": "#ffffff",
+ "display": "standalone"
}
diff --git a/apps/web/public/v0/styles/default/shine-border-demo-2.json b/apps/web/public/v0/styles/default/shine-border-demo-2.json
index f1469fd6..f3d3af28 100644
--- a/apps/web/public/v0/styles/default/shine-border-demo-2.json
+++ b/apps/web/public/v0/styles/default/shine-border-demo-2.json
@@ -6,7 +6,7 @@
"files": [
{
"path": "examples/shine-border-demo-2.tsx",
- "content": "import ShineBorder from \"@/components/ui/shine-border\"\n\nexport default function ShineBorderDemo() {\n return (\n \n Shine Border\n \n )\n}\n",
+ "content": "import { useTheme } from \"next-themes\"\n\nimport { ShineBorder } from \"@/components/ui/shine-border\"\n\nexport default function ShineBorderDemo() {\n const theme = useTheme()\n return (\n \n Shine Border\n \n )\n}\n",
"type": "registry:example",
"target": ""
}
diff --git a/apps/web/public/v0/styles/default/shine-border-demo.json b/apps/web/public/v0/styles/default/shine-border-demo.json
index f17ae1fb..a0904963 100644
--- a/apps/web/public/v0/styles/default/shine-border-demo.json
+++ b/apps/web/public/v0/styles/default/shine-border-demo.json
@@ -6,7 +6,7 @@
"files": [
{
"path": "examples/shine-border-demo.tsx",
- "content": "import ShineBorder from \"@/components/ui/shine-border\"\n\nexport default function ShineBorderDemo() {\n return (\n \n \n Shine Border\n \n \n )\n}\n",
+ "content": "import { ShineBorder } from \"@/components/ui/shine-border\"\n\nexport default function ShineBorderDemo() {\n return (\n \n \n Shine Border\n \n \n )\n}\n",
"type": "registry:example",
"target": ""
}
diff --git a/apps/web/public/v0/styles/default/shine-border.json b/apps/web/public/v0/styles/default/shine-border.json
index 9d563789..f6239eea 100644
--- a/apps/web/public/v0/styles/default/shine-border.json
+++ b/apps/web/public/v0/styles/default/shine-border.json
@@ -6,7 +6,7 @@
"files": [
{
"path": "ui/shine-border.tsx",
- "content": "\"use client\"\n\nimport { cn } from \"@/lib/utils\"\n\ntype TColorProp = string | string[]\n\ninterface ShineBorderProps {\n borderRadius?: number\n borderWidth?: number\n duration?: number\n color?: TColorProp\n className?: string\n children: React.ReactNode\n}\n\n/**\n * @name Shine Border\n * @description It is an animated background border effect component with easy to use and configurable props.\n * @param borderRadius defines the radius of the border.\n * @param borderWidth defines the width of the border.\n * @param duration defines the animation duration to be applied on the shining border\n * @param color a string or string array to define border color.\n * @param className defines the class name to be applied to the component\n * @param children contains react node elements.\n */\nexport default function ShineBorder({\n borderRadius = 8,\n borderWidth = 1,\n duration = 14,\n color = \"#000000\",\n className,\n children,\n}: ShineBorderProps) {\n return (\n \n )\n}\n",
+ "content": "\"use client\"\n\nimport { cn } from \"@/lib/utils\"\n\ntype TColorProp = string | string[]\n\ninterface ShineBorderProps {\n borderRadius?: number\n borderWidth?: number\n duration?: number\n color?: TColorProp\n className?: string\n children: React.ReactNode\n}\n\n/**\n * @name Shine Border\n * @description It is an animated background border effect component with easy to use and configurable props.\n * @param borderRadius defines the radius of the border.\n * @param borderWidth defines the width of the border.\n * @param duration defines the animation duration to be applied on the shining border\n * @param color a string or string array to define border color.\n * @param className defines the class name to be applied to the component\n * @param children contains react node elements.\n */\nexport function ShineBorder({\n borderRadius = 8,\n borderWidth = 1,\n duration = 14,\n color = \"#000000\",\n className,\n children,\n}: ShineBorderProps) {\n return (\n \n )\n}\n",
"type": "registry:ui",
"target": ""
}
diff --git a/apps/web/public/v0/styles/default/wavy-dot-pattern-demo.json b/apps/web/public/v0/styles/default/wavy-dot-pattern-demo.json
index 719ac89e..638811cf 100644
--- a/apps/web/public/v0/styles/default/wavy-dot-pattern-demo.json
+++ b/apps/web/public/v0/styles/default/wavy-dot-pattern-demo.json
@@ -1,14 +1,14 @@
{
- "$schema": "https://nyxbui.design/schema/registry-item.json",
- "name": "wavy-dot-pattern-demo",
- "type": "registry:example",
- "author": "nyxb (https://nyxbui.design)",
- "files": [
- {
- "path": "examples/wavy-dot-pattern-demo.tsx",
- "content": "import WavyDotPattern from \"@/components/ui/wavy-dot-pattern\"\n\nexport default function WavyDotPatternDemo() {\n return (\n \n
\n Wavy Dot Pattern\n
\n\n
\n
\n )\n}\n",
- "type": "registry:example",
- "target": ""
- }
- ]
-}
\ No newline at end of file
+ "$schema": "https://nyxbui.design/schema/registry-item.json",
+ "name": "wavy-dot-pattern-demo",
+ "type": "registry:example",
+ "author": "nyxb (https://nyxbui.design)",
+ "files": [
+ {
+ "path": "examples/wavy-dot-pattern-demo.tsx",
+ "content": "import WavyDotPattern from \"@/components/ui/wavy-dot-pattern\"\n\nexport default function WavyDotPatternDemo() {\n return (\n \n
\n Wavy Dot Pattern\n
\n\n
\n
\n )\n}\n",
+ "type": "registry:example",
+ "target": ""
+ }
+ ]
+}
diff --git a/apps/web/public/v0/styles/default/wavy-dot-pattern.json b/apps/web/public/v0/styles/default/wavy-dot-pattern.json
index ae7058d8..641162c2 100644
--- a/apps/web/public/v0/styles/default/wavy-dot-pattern.json
+++ b/apps/web/public/v0/styles/default/wavy-dot-pattern.json
@@ -1,17 +1,15 @@
{
- "$schema": "https://nyxbui.design/schema/registry-item.json",
- "name": "wavy-dot-pattern",
- "type": "registry:ui",
- "author": "nyxb (https://nyxbui.design)",
- "dependencies": [
- "react-anime"
- ],
- "files": [
- {
- "path": "ui/wavy-dot-pattern.tsx",
- "content": "\"use client\"\nimport { useState } from \"react\"\nimport { anime } from \"react-anime\"\nimport { cn } from \"@/lib/utils\"\n\ninterface WavyDotPatternProps {\n className?: string\n gridWidth?: number\n gridHeight?: number\n dotWidth?: number\n dotHeight?: number\n}\n\nexport function WavyDotPattern({\n className,\n gridWidth,\n gridHeight,\n dotWidth,\n dotHeight,\n}: WavyDotPatternProps) {\n const [dotClickDisabled, setDotClickDisabled] = useState(false)\n\n const handleDotClick = (e: any, width: number, height: number) => {\n setDotClickDisabled(true)\n\n anime({\n targets: \".dot-point\",\n scale: [\n { value: 1.35, easing: \"easeOutSine\", duration: 250 },\n { value: 1, easing: \"easeInOutQuad\", duration: 500 },\n ],\n translateY: [\n { value: -15, easing: \"easeOutSine\", duration: 250 },\n { value: 1, easing: \"easeInOutQuad\", duration: 500 },\n ],\n opacity: [\n { value: 0.7, easing: \"easeOutSine\", duration: 250 },\n { value: 0.35, easing: \"easeInOutQuad\", duration: 500 },\n ],\n delay: anime.stagger(100, {\n grid: [width, height],\n from: e.target.dataset.index,\n }),\n })\n\n setTimeout(() => setDotClickDisabled(false), 2000)\n }\n\n const GRID_WIDTH = gridWidth || 30\n const GRID_HEIGHT = gridHeight || 30\n\n const DOT_WIDTH = dotWidth ? `w-[${dotWidth}px]` : \"w-[8px]\"\n const DOT_HEIGHT = dotHeight ? `h-[${dotHeight}px]` : \"h-[8px]\"\n\n let index = 0\n\n const dots = []\n\n for (let i = 0; i < GRID_WIDTH; i++) {\n for (let j = 0; j < GRID_HEIGHT; j++) {\n dots.push(\n handleDotClick(e, GRID_WIDTH, GRID_HEIGHT)}\n data-index={index}\n key={`${i}-${j}`}\n disabled={dotClickDisabled}\n >\n
\n ,\n )\n index++\n }\n }\n\n return (\n \n {dots.map((dot) => dot)}\n
\n )\n}\n\nexport default WavyDotPattern\n",
- "type": "registry:ui",
- "target": ""
- }
- ]
-}
\ No newline at end of file
+ "$schema": "https://nyxbui.design/schema/registry-item.json",
+ "name": "wavy-dot-pattern",
+ "type": "registry:ui",
+ "author": "nyxb (https://nyxbui.design)",
+ "dependencies": ["react-anime"],
+ "files": [
+ {
+ "path": "ui/wavy-dot-pattern.tsx",
+ "content": "\"use client\"\nimport { useState } from \"react\"\nimport { anime } from \"react-anime\"\nimport { cn } from \"@/lib/utils\"\n\ninterface WavyDotPatternProps {\n className?: string\n gridWidth?: number\n gridHeight?: number\n dotWidth?: number\n dotHeight?: number\n}\n\nexport function WavyDotPattern({\n className,\n gridWidth,\n gridHeight,\n dotWidth,\n dotHeight,\n}: WavyDotPatternProps) {\n const [dotClickDisabled, setDotClickDisabled] = useState(false)\n\n const handleDotClick = (e: any, width: number, height: number) => {\n setDotClickDisabled(true)\n\n anime({\n targets: \".dot-point\",\n scale: [\n { value: 1.35, easing: \"easeOutSine\", duration: 250 },\n { value: 1, easing: \"easeInOutQuad\", duration: 500 },\n ],\n translateY: [\n { value: -15, easing: \"easeOutSine\", duration: 250 },\n { value: 1, easing: \"easeInOutQuad\", duration: 500 },\n ],\n opacity: [\n { value: 0.7, easing: \"easeOutSine\", duration: 250 },\n { value: 0.35, easing: \"easeInOutQuad\", duration: 500 },\n ],\n delay: anime.stagger(100, {\n grid: [width, height],\n from: e.target.dataset.index,\n }),\n })\n\n setTimeout(() => setDotClickDisabled(false), 2000)\n }\n\n const GRID_WIDTH = gridWidth || 30\n const GRID_HEIGHT = gridHeight || 30\n\n const DOT_WIDTH = dotWidth ? `w-[${dotWidth}px]` : \"w-[8px]\"\n const DOT_HEIGHT = dotHeight ? `h-[${dotHeight}px]` : \"h-[8px]\"\n\n let index = 0\n\n const dots = []\n\n for (let i = 0; i < GRID_WIDTH; i++) {\n for (let j = 0; j < GRID_HEIGHT; j++) {\n dots.push(\n handleDotClick(e, GRID_WIDTH, GRID_HEIGHT)}\n data-index={index}\n key={`${i}-${j}`}\n disabled={dotClickDisabled}\n >\n
\n ,\n )\n index++\n }\n }\n\n return (\n \n {dots.map((dot) => dot)}\n
\n )\n}\n\nexport default WavyDotPattern\n",
+ "type": "registry:ui",
+ "target": ""
+ }
+ ]
+}
diff --git a/apps/web/public/v0/styles/miami/shine-border-demo-2.json b/apps/web/public/v0/styles/miami/shine-border-demo-2.json
index f1469fd6..f3d3af28 100644
--- a/apps/web/public/v0/styles/miami/shine-border-demo-2.json
+++ b/apps/web/public/v0/styles/miami/shine-border-demo-2.json
@@ -6,7 +6,7 @@
"files": [
{
"path": "examples/shine-border-demo-2.tsx",
- "content": "import ShineBorder from \"@/components/ui/shine-border\"\n\nexport default function ShineBorderDemo() {\n return (\n \n Shine Border\n \n )\n}\n",
+ "content": "import { useTheme } from \"next-themes\"\n\nimport { ShineBorder } from \"@/components/ui/shine-border\"\n\nexport default function ShineBorderDemo() {\n const theme = useTheme()\n return (\n \n Shine Border\n \n )\n}\n",
"type": "registry:example",
"target": ""
}
diff --git a/apps/web/public/v0/styles/miami/shine-border-demo.json b/apps/web/public/v0/styles/miami/shine-border-demo.json
index f17ae1fb..a0904963 100644
--- a/apps/web/public/v0/styles/miami/shine-border-demo.json
+++ b/apps/web/public/v0/styles/miami/shine-border-demo.json
@@ -6,7 +6,7 @@
"files": [
{
"path": "examples/shine-border-demo.tsx",
- "content": "import ShineBorder from \"@/components/ui/shine-border\"\n\nexport default function ShineBorderDemo() {\n return (\n \n \n Shine Border\n \n \n )\n}\n",
+ "content": "import { ShineBorder } from \"@/components/ui/shine-border\"\n\nexport default function ShineBorderDemo() {\n return (\n \n \n Shine Border\n \n \n )\n}\n",
"type": "registry:example",
"target": ""
}
diff --git a/apps/web/public/v0/styles/miami/shine-border.json b/apps/web/public/v0/styles/miami/shine-border.json
index 9d563789..f6239eea 100644
--- a/apps/web/public/v0/styles/miami/shine-border.json
+++ b/apps/web/public/v0/styles/miami/shine-border.json
@@ -6,7 +6,7 @@
"files": [
{
"path": "ui/shine-border.tsx",
- "content": "\"use client\"\n\nimport { cn } from \"@/lib/utils\"\n\ntype TColorProp = string | string[]\n\ninterface ShineBorderProps {\n borderRadius?: number\n borderWidth?: number\n duration?: number\n color?: TColorProp\n className?: string\n children: React.ReactNode\n}\n\n/**\n * @name Shine Border\n * @description It is an animated background border effect component with easy to use and configurable props.\n * @param borderRadius defines the radius of the border.\n * @param borderWidth defines the width of the border.\n * @param duration defines the animation duration to be applied on the shining border\n * @param color a string or string array to define border color.\n * @param className defines the class name to be applied to the component\n * @param children contains react node elements.\n */\nexport default function ShineBorder({\n borderRadius = 8,\n borderWidth = 1,\n duration = 14,\n color = \"#000000\",\n className,\n children,\n}: ShineBorderProps) {\n return (\n \n )\n}\n",
+ "content": "\"use client\"\n\nimport { cn } from \"@/lib/utils\"\n\ntype TColorProp = string | string[]\n\ninterface ShineBorderProps {\n borderRadius?: number\n borderWidth?: number\n duration?: number\n color?: TColorProp\n className?: string\n children: React.ReactNode\n}\n\n/**\n * @name Shine Border\n * @description It is an animated background border effect component with easy to use and configurable props.\n * @param borderRadius defines the radius of the border.\n * @param borderWidth defines the width of the border.\n * @param duration defines the animation duration to be applied on the shining border\n * @param color a string or string array to define border color.\n * @param className defines the class name to be applied to the component\n * @param children contains react node elements.\n */\nexport function ShineBorder({\n borderRadius = 8,\n borderWidth = 1,\n duration = 14,\n color = \"#000000\",\n className,\n children,\n}: ShineBorderProps) {\n return (\n \n )\n}\n",
"type": "registry:ui",
"target": ""
}
diff --git a/apps/web/public/v0/styles/miami/wavy-dot-pattern-demo.json b/apps/web/public/v0/styles/miami/wavy-dot-pattern-demo.json
index 719ac89e..638811cf 100644
--- a/apps/web/public/v0/styles/miami/wavy-dot-pattern-demo.json
+++ b/apps/web/public/v0/styles/miami/wavy-dot-pattern-demo.json
@@ -1,14 +1,14 @@
{
- "$schema": "https://nyxbui.design/schema/registry-item.json",
- "name": "wavy-dot-pattern-demo",
- "type": "registry:example",
- "author": "nyxb (https://nyxbui.design)",
- "files": [
- {
- "path": "examples/wavy-dot-pattern-demo.tsx",
- "content": "import WavyDotPattern from \"@/components/ui/wavy-dot-pattern\"\n\nexport default function WavyDotPatternDemo() {\n return (\n \n
\n Wavy Dot Pattern\n
\n\n
\n
\n )\n}\n",
- "type": "registry:example",
- "target": ""
- }
- ]
-}
\ No newline at end of file
+ "$schema": "https://nyxbui.design/schema/registry-item.json",
+ "name": "wavy-dot-pattern-demo",
+ "type": "registry:example",
+ "author": "nyxb (https://nyxbui.design)",
+ "files": [
+ {
+ "path": "examples/wavy-dot-pattern-demo.tsx",
+ "content": "import WavyDotPattern from \"@/components/ui/wavy-dot-pattern\"\n\nexport default function WavyDotPatternDemo() {\n return (\n \n
\n Wavy Dot Pattern\n
\n\n
\n
\n )\n}\n",
+ "type": "registry:example",
+ "target": ""
+ }
+ ]
+}
diff --git a/apps/web/public/v0/styles/miami/wavy-dot-pattern.json b/apps/web/public/v0/styles/miami/wavy-dot-pattern.json
index ae7058d8..641162c2 100644
--- a/apps/web/public/v0/styles/miami/wavy-dot-pattern.json
+++ b/apps/web/public/v0/styles/miami/wavy-dot-pattern.json
@@ -1,17 +1,15 @@
{
- "$schema": "https://nyxbui.design/schema/registry-item.json",
- "name": "wavy-dot-pattern",
- "type": "registry:ui",
- "author": "nyxb (https://nyxbui.design)",
- "dependencies": [
- "react-anime"
- ],
- "files": [
- {
- "path": "ui/wavy-dot-pattern.tsx",
- "content": "\"use client\"\nimport { useState } from \"react\"\nimport { anime } from \"react-anime\"\nimport { cn } from \"@/lib/utils\"\n\ninterface WavyDotPatternProps {\n className?: string\n gridWidth?: number\n gridHeight?: number\n dotWidth?: number\n dotHeight?: number\n}\n\nexport function WavyDotPattern({\n className,\n gridWidth,\n gridHeight,\n dotWidth,\n dotHeight,\n}: WavyDotPatternProps) {\n const [dotClickDisabled, setDotClickDisabled] = useState(false)\n\n const handleDotClick = (e: any, width: number, height: number) => {\n setDotClickDisabled(true)\n\n anime({\n targets: \".dot-point\",\n scale: [\n { value: 1.35, easing: \"easeOutSine\", duration: 250 },\n { value: 1, easing: \"easeInOutQuad\", duration: 500 },\n ],\n translateY: [\n { value: -15, easing: \"easeOutSine\", duration: 250 },\n { value: 1, easing: \"easeInOutQuad\", duration: 500 },\n ],\n opacity: [\n { value: 0.7, easing: \"easeOutSine\", duration: 250 },\n { value: 0.35, easing: \"easeInOutQuad\", duration: 500 },\n ],\n delay: anime.stagger(100, {\n grid: [width, height],\n from: e.target.dataset.index,\n }),\n })\n\n setTimeout(() => setDotClickDisabled(false), 2000)\n }\n\n const GRID_WIDTH = gridWidth || 30\n const GRID_HEIGHT = gridHeight || 30\n\n const DOT_WIDTH = dotWidth ? `w-[${dotWidth}px]` : \"w-[8px]\"\n const DOT_HEIGHT = dotHeight ? `h-[${dotHeight}px]` : \"h-[8px]\"\n\n let index = 0\n\n const dots = []\n\n for (let i = 0; i < GRID_WIDTH; i++) {\n for (let j = 0; j < GRID_HEIGHT; j++) {\n dots.push(\n handleDotClick(e, GRID_WIDTH, GRID_HEIGHT)}\n data-index={index}\n key={`${i}-${j}`}\n disabled={dotClickDisabled}\n >\n
\n ,\n )\n index++\n }\n }\n\n return (\n \n {dots.map((dot) => dot)}\n
\n )\n}\n\nexport default WavyDotPattern\n",
- "type": "registry:ui",
- "target": ""
- }
- ]
-}
\ No newline at end of file
+ "$schema": "https://nyxbui.design/schema/registry-item.json",
+ "name": "wavy-dot-pattern",
+ "type": "registry:ui",
+ "author": "nyxb (https://nyxbui.design)",
+ "dependencies": ["react-anime"],
+ "files": [
+ {
+ "path": "ui/wavy-dot-pattern.tsx",
+ "content": "\"use client\"\nimport { useState } from \"react\"\nimport { anime } from \"react-anime\"\nimport { cn } from \"@/lib/utils\"\n\ninterface WavyDotPatternProps {\n className?: string\n gridWidth?: number\n gridHeight?: number\n dotWidth?: number\n dotHeight?: number\n}\n\nexport function WavyDotPattern({\n className,\n gridWidth,\n gridHeight,\n dotWidth,\n dotHeight,\n}: WavyDotPatternProps) {\n const [dotClickDisabled, setDotClickDisabled] = useState(false)\n\n const handleDotClick = (e: any, width: number, height: number) => {\n setDotClickDisabled(true)\n\n anime({\n targets: \".dot-point\",\n scale: [\n { value: 1.35, easing: \"easeOutSine\", duration: 250 },\n { value: 1, easing: \"easeInOutQuad\", duration: 500 },\n ],\n translateY: [\n { value: -15, easing: \"easeOutSine\", duration: 250 },\n { value: 1, easing: \"easeInOutQuad\", duration: 500 },\n ],\n opacity: [\n { value: 0.7, easing: \"easeOutSine\", duration: 250 },\n { value: 0.35, easing: \"easeInOutQuad\", duration: 500 },\n ],\n delay: anime.stagger(100, {\n grid: [width, height],\n from: e.target.dataset.index,\n }),\n })\n\n setTimeout(() => setDotClickDisabled(false), 2000)\n }\n\n const GRID_WIDTH = gridWidth || 30\n const GRID_HEIGHT = gridHeight || 30\n\n const DOT_WIDTH = dotWidth ? `w-[${dotWidth}px]` : \"w-[8px]\"\n const DOT_HEIGHT = dotHeight ? `h-[${dotHeight}px]` : \"h-[8px]\"\n\n let index = 0\n\n const dots = []\n\n for (let i = 0; i < GRID_WIDTH; i++) {\n for (let j = 0; j < GRID_HEIGHT; j++) {\n dots.push(\n handleDotClick(e, GRID_WIDTH, GRID_HEIGHT)}\n data-index={index}\n key={`${i}-${j}`}\n disabled={dotClickDisabled}\n >\n
\n ,\n )\n index++\n }\n }\n\n return (\n \n {dots.map((dot) => dot)}\n
\n )\n}\n\nexport default WavyDotPattern\n",
+ "type": "registry:ui",
+ "target": ""
+ }
+ ]
+}
diff --git a/apps/web/registry/default/examples/shine-border-demo-2.tsx b/apps/web/registry/default/examples/shine-border-demo-2.tsx
index 57a8aafa..d6c63ddb 100644
--- a/apps/web/registry/default/examples/shine-border-demo-2.tsx
+++ b/apps/web/registry/default/examples/shine-border-demo-2.tsx
@@ -1,8 +1,14 @@
-import ShineBorder from "~/registry/default/ui/shine-border"
+import { useTheme } from "next-themes"
+
+import { ShineBorder } from "~/registry/default/ui/shine-border"
export default function ShineBorderDemo() {
+ const theme = useTheme()
return (
-
+
Shine Border
)
diff --git a/apps/web/registry/default/examples/shine-border-demo.tsx b/apps/web/registry/default/examples/shine-border-demo.tsx
index b090ccc1..5efb3406 100644
--- a/apps/web/registry/default/examples/shine-border-demo.tsx
+++ b/apps/web/registry/default/examples/shine-border-demo.tsx
@@ -1,9 +1,9 @@
-import ShineBorder from "~/registry/default/ui/shine-border"
+import { ShineBorder } from "~/registry/default/ui/shine-border"
export default function ShineBorderDemo() {
return (
diff --git a/apps/web/registry/default/ui/shine-border.tsx b/apps/web/registry/default/ui/shine-border.tsx
index 97b43564..040284de 100644
--- a/apps/web/registry/default/ui/shine-border.tsx
+++ b/apps/web/registry/default/ui/shine-border.tsx
@@ -23,7 +23,7 @@ interface ShineBorderProps {
* @param className defines the class name to be applied to the component
* @param children contains react node elements.
*/
-export default function ShineBorder({
+export function ShineBorder({
borderRadius = 8,
borderWidth = 1,
duration = 14,
@@ -39,7 +39,7 @@ export default function ShineBorder({
} as React.CSSProperties
}
className={ny(
- "relative grid min-h-[60px] w-fit min-w-[300px] place-items-center rounded-[--border-radius] bg-white p-3 text-black dark:bg-black dark:text-white",
+ "relative min-h-[60px] w-fit min-w-[300px] place-items-center rounded-[--border-radius] bg-white p-3 text-black dark:bg-black dark:text-white",
className,
)}
>
@@ -50,10 +50,10 @@ export default function ShineBorder({
"--border-radius": `${borderRadius}px`,
"--duration": `${duration}s`,
"--mask-linear-gradient": `linear-gradient(#fff 0 0) content-box, linear-gradient(#fff 0 0)`,
- "--background-radial-gradient": `radial-gradient(transparent,transparent, ${Array.isArray(color) ? color.join(",") : color},transparent,transparent)`,
+ "--background-radial-gradient": `radial-gradient(transparent,transparent, ${color instanceof Array ? color.join(",") : color},transparent,transparent)`,
} as React.CSSProperties
}
- className={`before:bg-shine-size motion-safe:before:animate-shine before:absolute before:inset-0 before:aspect-square before:size-full before:rounded-[--border-radius] before:p-[--border-width] before:will-change-[background-position] before:content-[""] before:![-webkit-mask-composite:xor] before:![mask-composite:exclude] before:[background-image:--background-radial-gradient] before:[background-size:300%_300%] before:[mask:--mask-linear-gradient]`}
+ className={`before:bg-shine-size pointer-events-none before:absolute before:inset-0 before:size-full before:rounded-[--border-radius] before:p-[--border-width] before:will-change-[background-position] before:content-[""] before:![-webkit-mask-composite:xor] before:![mask-composite:exclude] before:[background-image:--background-radial-gradient] before:[background-size:300%_300%] before:[mask:--mask-linear-gradient] motion-safe:before:animate-shine`}
>
{children}
diff --git a/apps/web/registry/miami/examples/shine-border-demo-2.tsx b/apps/web/registry/miami/examples/shine-border-demo-2.tsx
index 1742d184..b6386b66 100644
--- a/apps/web/registry/miami/examples/shine-border-demo-2.tsx
+++ b/apps/web/registry/miami/examples/shine-border-demo-2.tsx
@@ -1,8 +1,14 @@
-import ShineBorder from "~/registry/miami/ui/shine-border"
+import { useTheme } from "next-themes"
+
+import { ShineBorder } from "~/registry/miami/ui/shine-border"
export default function ShineBorderDemo() {
+ const theme = useTheme()
return (
-
+
Shine Border
)
diff --git a/apps/web/registry/miami/examples/shine-border-demo.tsx b/apps/web/registry/miami/examples/shine-border-demo.tsx
index 143f1b1c..22b9c0b0 100644
--- a/apps/web/registry/miami/examples/shine-border-demo.tsx
+++ b/apps/web/registry/miami/examples/shine-border-demo.tsx
@@ -1,9 +1,9 @@
-import ShineBorder from "~/registry/miami/ui/shine-border"
+import { ShineBorder } from "~/registry/miami/ui/shine-border"
export default function ShineBorderDemo() {
return (
diff --git a/apps/web/registry/miami/ui/shine-border.tsx b/apps/web/registry/miami/ui/shine-border.tsx
index 97b43564..040284de 100644
--- a/apps/web/registry/miami/ui/shine-border.tsx
+++ b/apps/web/registry/miami/ui/shine-border.tsx
@@ -23,7 +23,7 @@ interface ShineBorderProps {
* @param className defines the class name to be applied to the component
* @param children contains react node elements.
*/
-export default function ShineBorder({
+export function ShineBorder({
borderRadius = 8,
borderWidth = 1,
duration = 14,
@@ -39,7 +39,7 @@ export default function ShineBorder({
} as React.CSSProperties
}
className={ny(
- "relative grid min-h-[60px] w-fit min-w-[300px] place-items-center rounded-[--border-radius] bg-white p-3 text-black dark:bg-black dark:text-white",
+ "relative min-h-[60px] w-fit min-w-[300px] place-items-center rounded-[--border-radius] bg-white p-3 text-black dark:bg-black dark:text-white",
className,
)}
>
@@ -50,10 +50,10 @@ export default function ShineBorder({
"--border-radius": `${borderRadius}px`,
"--duration": `${duration}s`,
"--mask-linear-gradient": `linear-gradient(#fff 0 0) content-box, linear-gradient(#fff 0 0)`,
- "--background-radial-gradient": `radial-gradient(transparent,transparent, ${Array.isArray(color) ? color.join(",") : color},transparent,transparent)`,
+ "--background-radial-gradient": `radial-gradient(transparent,transparent, ${color instanceof Array ? color.join(",") : color},transparent,transparent)`,
} as React.CSSProperties
}
- className={`before:bg-shine-size motion-safe:before:animate-shine before:absolute before:inset-0 before:aspect-square before:size-full before:rounded-[--border-radius] before:p-[--border-width] before:will-change-[background-position] before:content-[""] before:![-webkit-mask-composite:xor] before:![mask-composite:exclude] before:[background-image:--background-radial-gradient] before:[background-size:300%_300%] before:[mask:--mask-linear-gradient]`}
+ className={`before:bg-shine-size pointer-events-none before:absolute before:inset-0 before:size-full before:rounded-[--border-radius] before:p-[--border-width] before:will-change-[background-position] before:content-[""] before:![-webkit-mask-composite:xor] before:![mask-composite:exclude] before:[background-image:--background-radial-gradient] before:[background-size:300%_300%] before:[mask:--mask-linear-gradient] motion-safe:before:animate-shine`}
>
{children}
diff --git a/apps/web/scripts/capture-screenshots.mts b/apps/web/scripts/capture-screenshots.mts
index c5121a84..cce9a574 100644
--- a/apps/web/scripts/capture-screenshots.mts
+++ b/apps/web/scripts/capture-screenshots.mts
@@ -1,36 +1,36 @@
/* eslint-disable no-console */
-import puppeteer from 'puppeteer'
+import puppeteer from "puppeteer"
const BLOCKS = [
- 'login-01',
- 'sidebar-01',
- 'sidebar-02',
- 'sidebar-03',
- 'sidebar-04',
- 'sidebar-05',
- 'sidebar-06',
- 'sidebar-07',
- 'sidebar-08',
- 'sidebar-09',
- 'sidebar-10',
- 'sidebar-11',
- 'sidebar-12',
- 'sidebar-13',
- 'sidebar-14',
- 'sidebar-15',
- 'demo-sidebar',
- 'demo-sidebar-header',
- 'demo-sidebar-footer',
- 'demo-sidebar-group',
- 'demo-sidebar-group-collapsible',
- 'demo-sidebar-group-action',
- 'demo-sidebar-menu',
- 'demo-sidebar-menu-action',
- 'demo-sidebar-menu-sub',
- 'demo-sidebar-menu-collapsible',
- 'demo-sidebar-menu-badge',
- 'demo-sidebar-rsc',
- 'demo-sidebar-controlled',
+ "login-01",
+ "sidebar-01",
+ "sidebar-02",
+ "sidebar-03",
+ "sidebar-04",
+ "sidebar-05",
+ "sidebar-06",
+ "sidebar-07",
+ "sidebar-08",
+ "sidebar-09",
+ "sidebar-10",
+ "sidebar-11",
+ "sidebar-12",
+ "sidebar-13",
+ "sidebar-14",
+ "sidebar-15",
+ "demo-sidebar",
+ "demo-sidebar-header",
+ "demo-sidebar-footer",
+ "demo-sidebar-group",
+ "demo-sidebar-group-collapsible",
+ "demo-sidebar-group-action",
+ "demo-sidebar-menu",
+ "demo-sidebar-menu-action",
+ "demo-sidebar-menu-sub",
+ "demo-sidebar-menu-collapsible",
+ "demo-sidebar-menu-badge",
+ "demo-sidebar-rsc",
+ "demo-sidebar-controlled",
]
try {
@@ -42,19 +42,19 @@ try {
},
})
- console.log('☀️ Capturing screenshots for light theme')
+ console.log("☀️ Capturing screenshots for light theme")
for (const block of BLOCKS) {
const pageUrl = `http://localhost:3333/blocks/miami/${block}`
console.log(`- ${block}`)
const page = await browser.newPage()
await page.goto(pageUrl, {
- waitUntil: 'networkidle2',
+ waitUntil: "networkidle2",
})
// Hide Tailwind indicator
await page.evaluate(() => {
- const indicator = document.querySelector('[data-tailwind-indicator]')
+ const indicator = document.querySelector("[data-tailwind-indicator]")
if (indicator) {
indicator.remove()
}
@@ -65,19 +65,19 @@ try {
})
}
- console.log('🌙 Capturing screenshots for dark theme')
+ console.log("🌙 Capturing screenshots for dark theme")
for (const block of BLOCKS) {
const pageUrl = `http://localhost:3333/blocks/miami/${block}`
console.log(`- ${block}`)
const page = await browser.newPage()
await page.goto(pageUrl, {
- waitUntil: 'networkidle2',
+ waitUntil: "networkidle2",
})
// Hide Tailwind indicator
await page.evaluate(() => {
- const indicator = document.querySelector('[data-tailwind-indicator]')
+ const indicator = document.querySelector("[data-tailwind-indicator]")
if (indicator) {
indicator.remove()
}
@@ -85,7 +85,7 @@ try {
// Set theme to dark
await page.evaluate(() => {
- localStorage.setItem('theme', 'dark')
+ localStorage.setItem("theme", "dark")
})
await page.screenshot({
@@ -94,9 +94,8 @@ try {
}
await browser.close()
- console.log('✅ Done!')
-}
-catch (error) {
+ console.log("✅ Done!")
+} catch (error) {
console.error(error)
process.exit(1)
}
diff --git a/apps/web/scripts/env.mjs b/apps/web/scripts/env.mjs
index a8f93cd9..627170f3 100644
--- a/apps/web/scripts/env.mjs
+++ b/apps/web/scripts/env.mjs
@@ -1,28 +1,28 @@
-import { createEnv } from "@t3-oss/env-nextjs";
-import { z } from "zod";
+import { createEnv } from "@t3-oss/env-nextjs"
+import { z } from "zod"
export const env = createEnv({
- /*
- * Serverside Environment variables, not available on the client.
- * Will throw if you access these variables on the client.
- */
- server: {},
- /*
- * Environment variables available on the client (and server).
- *
- * 💡 You'll get type errors if these are not prefixed with NEXT_PUBLIC_.
- */
- client: {
- NEXT_PUBLIC_APP_URL: z.string().min(1),
- },
+ /*
+ * Serverside Environment variables, not available on the client.
+ * Will throw if you access these variables on the client.
+ */
+ server: {},
+ /*
+ * Environment variables available on the client (and server).
+ *
+ * 💡 You'll get type errors if these are not prefixed with NEXT_PUBLIC_.
+ */
+ client: {
+ NEXT_PUBLIC_APP_URL: z.string().min(1),
+ },
- /*
- * Due to how Next.js bundles environment variables on Edge and Client,
- * we need to manually destructure them to make sure all are included in bundle.
- *
- * 💡 You'll get type errors if not all variables from `server` & `client` are included here.
- */
- runtimeEnv: {
- NEXT_PUBLIC_APP_URL: process.env.NEXT_PUBLIC_APP_URL,
- },
-});
+ /*
+ * Due to how Next.js bundles environment variables on Edge and Client,
+ * we need to manually destructure them to make sure all are included in bundle.
+ *
+ * 💡 You'll get type errors if not all variables from `server` & `client` are included here.
+ */
+ runtimeEnv: {
+ NEXT_PUBLIC_APP_URL: process.env.NEXT_PUBLIC_APP_URL,
+ },
+})
diff --git a/apps/web/scripts/eslint-fix.mts b/apps/web/scripts/eslint-fix.mts
index cb10b4d0..df186717 100644
--- a/apps/web/scripts/eslint-fix.mts
+++ b/apps/web/scripts/eslint-fix.mts
@@ -1,21 +1,20 @@
-import { exec } from 'node:child_process'
-import path from 'node:path'
-import cliProgress from 'cli-progress'
+import { exec } from "node:child_process"
+import path from "node:path"
+import cliProgress from "cli-progress"
const REGISTRY_PATHS = [
- path.join(process.cwd(), 'public/registry'),
- path.join(process.cwd(), '__registry__'),
- path.join(process.cwd(), 'registry/miami/block'),
- path.join(process.cwd(), 'registry/default/block'),
+ path.join(process.cwd(), "public/registry"),
+ path.join(process.cwd(), "__registry__"),
+ path.join(process.cwd(), "registry/miami/block"),
+ path.join(process.cwd(), "registry/default/block"),
]
function runEslintFix() {
return new Promise
((resolve, reject) => {
- exec(`eslint ${REGISTRY_PATHS.join(' ')} --fix`, (error) => {
+ exec(`eslint ${REGISTRY_PATHS.join(" ")} --fix`, (error) => {
if (error) {
// need empty
- }
- else {
+ } else {
// need empty
}
resolve()
@@ -25,7 +24,7 @@ function runEslintFix() {
async function main() {
const progressBar = new cliProgress.SingleBar({
- format: 'progress [{bar}] {percentage}% | {value}/{total}',
+ format: "progress [{bar}] {percentage}% | {value}/{total}",
})
progressBar.start(2, 0)
@@ -38,7 +37,7 @@ async function main() {
progressBar.stop()
// eslint-disable-next-line no-console
- console.log('\n ✔︎ All runs completed')
+ console.log("\n ✔︎ All runs completed")
}
main().catch((error) => {
diff --git a/apps/web/scripts/fix-import.mts b/apps/web/scripts/fix-import.mts
index d6ac5c9f..6b5b6491 100644
--- a/apps/web/scripts/fix-import.mts
+++ b/apps/web/scripts/fix-import.mts
@@ -8,16 +8,13 @@ export function fixImport(content: string) {
type: string,
component: string,
) => {
- if (type.endsWith('components')) {
+ if (type.endsWith("components")) {
return `~/components/${component}`
- }
- else if (type.endsWith('ui')) {
+ } else if (type.endsWith("ui")) {
return `~/components/ui/${component}`
- }
- else if (type.endsWith('hooks')) {
+ } else if (type.endsWith("hooks")) {
return `~/hooks/${component}`
- }
- else if (type.endsWith('lib')) {
+ } else if (type.endsWith("lib")) {
return `~/lib/${component}`
}
diff --git a/apps/web/tailwind.config.ts b/apps/web/tailwind.config.ts
index 65c2d6e7..0218ea30 100644
--- a/apps/web/tailwind.config.ts
+++ b/apps/web/tailwind.config.ts
@@ -1,11 +1,11 @@
-const baseConfig = require('../../tailwind.config.ts')
+const baseConfig = require("../../tailwind.config.ts")
/** @type {import('tailwindcss').Config} */
module.exports = {
...baseConfig,
content: [
...baseConfig.content,
- 'content/**/*.mdx',
- 'registry/**/*.{ts,tsx}',
+ "content/**/*.mdx",
+ "registry/**/*.{ts,tsx}",
],
}
diff --git a/apps/web/types/index.d.ts b/apps/web/types/index.d.ts
index 7033ef67..40be132e 100644
--- a/apps/web/types/index.d.ts
+++ b/apps/web/types/index.d.ts
@@ -1,4 +1,4 @@
-import type { Icons } from '~/components/icons'
+import type { Icons } from "~/components/icons"
declare global {
interface Window {
@@ -35,7 +35,7 @@ export interface SubscriptionPlan {
}
export type UserSubscriptionPlan = SubscriptionPlan &
- Pick & {
+ Pick & {
stripeCurrentPeriodEnd: number
isPro: boolean
}
diff --git a/apps/web/types/unist.ts b/apps/web/types/unist.ts
index 1d3f6a9c..dc191d7e 100644
--- a/apps/web/types/unist.ts
+++ b/apps/web/types/unist.ts
@@ -1,4 +1,4 @@
-import type { Node } from 'unist'
+import type { Node } from "unist"
export interface UnistNode extends Node {
type: string
diff --git a/biome.json b/biome.json
index 10f1d02b..e08e541f 100644
--- a/biome.json
+++ b/biome.json
@@ -7,7 +7,14 @@
},
"files": {
"ignoreUnknown": false,
- "ignore": ["./styles/", "./.contentlayer"]
+ "ignore": [
+ "./styles/",
+ "./.content-collections",
+ "./.next",
+ "./.turbo",
+ "./node_modules",
+ "./dist"
+ ]
},
"formatter": {
"enabled": true,
@@ -44,13 +51,16 @@
"noShadowRestrictedNames": "off",
"noExplicitAny": "off",
"noRedeclare": "off",
- "noSuspiciousSemicolonInJsx": "off"
+ "noSuspiciousSemicolonInJsx": "off",
+ "useIsArray": "off",
+ "noAssignInExpressions": "off"
},
"complexity": {
"noForEach": "off",
"useLiteralKeys": "off",
"useOptionalChain": "off",
- "noUselessSwitchCase": "off"
+ "noUselessSwitchCase": "off",
+ "noUselessFragments": "off"
},
"correctness": {
"useJsxKeyInIterable": "off",
@@ -58,6 +68,7 @@
"noUnnecessaryContinue": "off"
},
"a11y": {
+ "useKeyWithClickEvents": "off",
"useIframeTitle": "off",
"noSvgWithoutTitle": "off",
"useValidAnchor": "off",
@@ -66,7 +77,9 @@
"useSemanticElements": "off",
"useAltText": "off",
"useValidAriaRole": "off",
- "noRedundantRoles": "off"
+ "noRedundantRoles": "off",
+ "useMediaCaption": "off",
+ "useFocusableInteractive": "off"
},
"security": {
"noDangerouslySetInnerHtml": "off"
diff --git a/package.json b/package.json
index c1ddb80b..6d911dd0 100644
--- a/package.json
+++ b/package.json
@@ -1,7 +1,7 @@
{
"name": "nyxb-ui",
"private": true,
- "packageManager": "pnpm@9.4.0",
+ "packageManager": "pnpm@9.0.6",
"scripts": {
"build": "turbo build",
"build:cli": "turbo --filter=nyxbui build",
@@ -21,8 +21,8 @@
"typecheck": "turbo run typecheck",
"pub:beta": "cd packages/cli && pnpm pub:beta",
"pub:release": "cd packages/cli && pnpm pub:release",
- "lint": "turbo run lint",
- "lint:fix": "turbo run lint:fix",
+ "check": "turbo run check",
+ "check:fix": "turbo run check:fix",
"test": "turbo run test --force"
},
"dependencies": {
diff --git a/packages/nyxb/src/preflights/preflight-init.ts b/packages/nyxb/src/preflights/preflight-init.ts
index a3bc022d..16a864c3 100644
--- a/packages/nyxb/src/preflights/preflight-init.ts
+++ b/packages/nyxb/src/preflights/preflight-init.ts
@@ -1,12 +1,12 @@
-import path from 'path'
-import fs from 'fs-extra'
-import type { z } from 'zod'
-import type { initOptionsSchema } from '~/src/commands/init'
-import * as ERRORS from '~/src/utils/errors'
-import { getProjectInfo } from '~/src/utils/get-project-info'
-import { highlighter } from '~/src/utils/highlighter'
-import { logger } from '~/src/utils/logger'
-import { spinner } from '~/src/utils/spinner'
+import path from "path"
+import fs from "fs-extra"
+import type { z } from "zod"
+import type { initOptionsSchema } from "~/src/commands/init"
+import * as ERRORS from "~/src/utils/errors"
+import { getProjectInfo } from "~/src/utils/get-project-info"
+import { highlighter } from "~/src/utils/highlighter"
+import { logger } from "~/src/utils/logger"
+import { spinner } from "~/src/utils/spinner"
export async function preFlightInit(
options: z.infer,
@@ -16,8 +16,8 @@ export async function preFlightInit(
// Ensure target directory exists.
// Check for empty project. We assume if no package.json exists, the project is empty.
if (
- !fs.existsSync(options.cwd)
- || !fs.existsSync(path.resolve(options.cwd, 'package.json'))
+ !fs.existsSync(options.cwd) ||
+ !fs.existsSync(path.resolve(options.cwd, "package.json"))
) {
errors[ERRORS.MISSING_DIR_OR_EMPTY_PROJECT] = true
return {
@@ -31,19 +31,19 @@ export async function preFlightInit(
}).start()
if (
- fs.existsSync(path.resolve(options.cwd, 'nyxbui.json'))
- && !options.force
+ fs.existsSync(path.resolve(options.cwd, "nyxbui.json")) &&
+ !options.force
) {
projectSpinner?.fail()
logger.break()
logger.error(
- `A ${highlighter.info(
- 'nyxbui.json',
- )} file already exists at ${highlighter.info(
- options.cwd,
- )}.\nTo start over, remove the ${highlighter.info(
- 'nyxbui.json',
- )} file and run ${highlighter.info('init')} again.`,
+ `A ${highlighter.info(
+ "nyxbui.json",
+ )} file already exists at ${highlighter.info(
+ options.cwd,
+ )}.\nTo start over, remove the ${highlighter.info(
+ "nyxbui.json",
+ )} file and run ${highlighter.info("init")} again.`,
)
logger.break()
process.exit(1)
@@ -55,27 +55,27 @@ export async function preFlightInit(
silent: options.silent,
}).start()
const projectInfo = await getProjectInfo(options.cwd)
- if (!projectInfo || projectInfo?.framework.name === 'manual') {
+ if (!projectInfo || projectInfo?.framework.name === "manual") {
errors[ERRORS.UNSUPPORTED_FRAMEWORK] = true
frameworkSpinner?.fail()
logger.break()
if (projectInfo?.framework.links.installation) {
logger.error(
- `We could not detect a supported framework at ${highlighter.info(
- options.cwd,
- )}.\n`
- + `Visit ${highlighter.info(
- projectInfo?.framework.links.installation,
- )} to manually configure your project.\nOnce configured, you can use the cli to add components.`,
+ `We could not detect a supported framework at ${highlighter.info(
+ options.cwd,
+ )}.\n` +
+ `Visit ${highlighter.info(
+ projectInfo?.framework.links.installation,
+ )} to manually configure your project.\nOnce configured, you can use the cli to add components.`,
)
}
logger.break()
process.exit(1)
}
frameworkSpinner?.succeed(
- `Verifying framework. Found ${highlighter.info(
- projectInfo.framework.label,
- )}.`,
+ `Verifying framework. Found ${highlighter.info(
+ projectInfo.framework.label,
+ )}.`,
)
const tailwindSpinner = spinner(`Validating Tailwind CSS.`, {
@@ -84,8 +84,7 @@ export async function preFlightInit(
if (!projectInfo?.tailwindConfigFile || !projectInfo?.tailwindCssFile) {
errors[ERRORS.TAILWIND_NOT_CONFIGURED] = true
tailwindSpinner?.fail()
- }
- else {
+ } else {
tailwindSpinner?.succeed()
}
@@ -95,8 +94,7 @@ export async function preFlightInit(
if (!projectInfo?.aliasPrefix) {
errors[ERRORS.IMPORT_ALIAS_MISSING] = true
tsConfigSpinner?.fail()
- }
- else {
+ } else {
tsConfigSpinner?.succeed()
}
@@ -104,19 +102,19 @@ export async function preFlightInit(
if (errors[ERRORS.TAILWIND_NOT_CONFIGURED]) {
logger.break()
logger.error(
- `No Tailwind CSS configuration found at ${highlighter.info(
- options.cwd,
- )}.`,
+ `No Tailwind CSS configuration found at ${highlighter.info(
+ options.cwd,
+ )}.`,
)
logger.error(
- `It is likely you do not have Tailwind CSS installed or have an invalid configuration.`,
+ `It is likely you do not have Tailwind CSS installed or have an invalid configuration.`,
)
logger.error(`Install Tailwind CSS then try again.`)
if (projectInfo?.framework.links.tailwind) {
logger.error(
- `Visit ${highlighter.info(
- projectInfo?.framework.links.tailwind,
- )} to get started.`,
+ `Visit ${highlighter.info(
+ projectInfo?.framework.links.tailwind,
+ )} to get started.`,
)
}
}
@@ -126,9 +124,9 @@ export async function preFlightInit(
logger.error(`No import alias found in your tsconfig.json file.`)
if (projectInfo?.framework.links.installation) {
logger.error(
- `Visit ${highlighter.info(
- projectInfo?.framework.links.installation,
- )} to learn how to set an import alias.`,
+ `Visit ${highlighter.info(
+ projectInfo?.framework.links.installation,
+ )} to learn how to set an import alias.`,
)
}
}
diff --git a/packages/nyxb/src/registry/api.ts b/packages/nyxb/src/registry/api.ts
index 4bdf5358..2e16f6cf 100644
--- a/packages/nyxb/src/registry/api.ts
+++ b/packages/nyxb/src/registry/api.ts
@@ -1,8 +1,13 @@
-import path from 'path'
-import deepmerge from 'deepmerge'
-import { HttpsProxyAgent } from 'https-proxy-agent'
-import fetch from 'node-fetch'
-import { z } from 'zod'
+import path from "path"
+import deepmerge from "deepmerge"
+import { HttpsProxyAgent } from "https-proxy-agent"
+import fetch from "node-fetch"
+import { z } from "zod"
+import type { Config } from "~/src/utils/get-config"
+import { handleError } from "~/src/utils/handle-error"
+import { highlighter } from "~/src/utils/highlighter"
+import { logger } from "~/src/utils/logger"
+import { buildTailwindThemeColorsFromCssVars } from "~/src/utils/updaters/update-tailwind-config"
import {
iconsSchema,
registryBaseColorSchema,
@@ -11,14 +16,9 @@ import {
registryItemSchema,
registryResolvedItemsTreeSchema,
stylesSchema,
-} from './schema'
-import type { Config } from '~/src/utils/get-config'
-import { handleError } from '~/src/utils/handle-error'
-import { highlighter } from '~/src/utils/highlighter'
-import { logger } from '~/src/utils/logger'
-import { buildTailwindThemeColorsFromCssVars } from '~/src/utils/updaters/update-tailwind-config'
+} from "./schema"
-const REGISTRY_URL = process.env.REGISTRY_URL ?? 'https://nyxbui.design/r'
+const REGISTRY_URL = process.env.REGISTRY_URL ?? "https://nyxbui.design/r"
const agent = process.env.https_proxy
? new HttpsProxyAgent(process.env.https_proxy)
@@ -26,24 +26,22 @@ const agent = process.env.https_proxy
export async function getRegistryIndex() {
try {
- const [result] = await fetchRegistry(['index.json'])
+ const [result] = await fetchRegistry(["index.json"])
return registryIndexSchema.parse(result)
- }
- catch (error) {
- logger.error('\n')
+ } catch (error) {
+ logger.error("\n")
handleError(error)
}
}
export async function getRegistryStyles() {
try {
- const [result] = await fetchRegistry(['styles/index.json'])
+ const [result] = await fetchRegistry(["styles/index.json"])
return stylesSchema.parse(result)
- }
- catch (error) {
- logger.error('\n')
+ } catch (error) {
+ logger.error("\n")
handleError(error)
return []
}
@@ -51,10 +49,9 @@ export async function getRegistryStyles() {
export async function getRegistryIcons() {
try {
- const [result] = await fetchRegistry(['icons/index.json'])
+ const [result] = await fetchRegistry(["icons/index.json"])
return iconsSchema.parse(result)
- }
- catch (error) {
+ } catch (error) {
handleError(error)
return {}
}
@@ -67,8 +64,7 @@ export async function getRegistryItem(name: string, style: string) {
])
return registryItemSchema.parse(result)
- }
- catch (error) {
+ } catch (error) {
logger.break()
handleError(error)
return null
@@ -78,24 +74,24 @@ export async function getRegistryItem(name: string, style: string) {
export async function getRegistryBaseColors() {
return [
{
- name: 'neutral',
- label: 'Neutral',
+ name: "neutral",
+ label: "Neutral",
},
{
- name: 'gray',
- label: 'Gray',
+ name: "gray",
+ label: "Gray",
},
{
- name: 'zinc',
- label: 'Zinc',
+ name: "zinc",
+ label: "Zinc",
},
{
- name: 'stone',
- label: 'Stone',
+ name: "stone",
+ label: "Stone",
},
{
- name: 'slate',
- label: 'Slate',
+ name: "slate",
+ label: "Slate",
},
]
}
@@ -105,8 +101,7 @@ export async function getRegistryBaseColor(baseColor: string) {
const [result] = await fetchRegistry([`colors/${baseColor}.json`])
return registryBaseColorSchema.parse(result)
- }
- catch (error) {
+ } catch (error) {
handleError(error)
}
}
@@ -118,7 +113,7 @@ export async function resolveTree(
const tree: z.infer = []
for (const name of names) {
- const entry = index.find(entry => entry.name === name)
+ const entry = index.find((entry) => entry.name === name)
if (!entry) {
continue
@@ -127,14 +122,17 @@ export async function resolveTree(
tree.push(entry)
if (entry.registryDependencies) {
- const dependencies = await resolveTree(index, entry.registryDependencies)
+ const dependencies = await resolveTree(
+ index,
+ entry.registryDependencies,
+ )
tree.push(...dependencies)
}
}
return tree.filter(
(component, index, self) =>
- self.findIndex(c => c.name === component.name) === index,
+ self.findIndex((c) => c.name === component.name) === index,
)
}
@@ -143,29 +141,28 @@ export async function fetchTree(
tree: z.infer,
) {
try {
- const paths = tree.map(item => `styles/${style}/${item.name}.json`)
+ const paths = tree.map((item) => `styles/${style}/${item.name}.json`)
const result = await fetchRegistry(paths)
return registryIndexSchema.parse(result)
- }
- catch (error) {
+ } catch (error) {
handleError(error)
}
}
export async function getItemTargetPath(
config: Config,
- item: Pick, 'type'>,
+ item: Pick, "type">,
override?: string,
) {
if (override) {
return override
}
- if (item.type === 'registry:ui') {
+ if (item.type === "registry:ui") {
return config.resolvedPaths.ui ?? config.resolvedPaths.components
}
- const [parent, type] = item.type?.split(':') ?? []
+ const [parent, type] = item.type?.split(":") ?? []
if (!(parent in config.resolvedPaths)) {
return null
}
@@ -185,44 +182,44 @@ export async function fetchRegistry(paths: string[]) {
if (!response.ok) {
const errorMessages: { [key: number]: string } = {
- 400: 'Bad request',
- 401: 'Unauthorized',
- 403: 'Forbidden',
- 404: 'Not found',
- 500: 'Internal server error',
+ 400: "Bad request",
+ 401: "Unauthorized",
+ 403: "Forbidden",
+ 404: "Not found",
+ 500: "Internal server error",
}
if (response.status === 401) {
throw new Error(
- `You are not authorized to access the component at ${highlighter.info(
- url,
- )}.\nIf this is a remote registry, you may need to authenticate.`,
+ `You are not authorized to access the component at ${highlighter.info(
+ url,
+ )}.\nIf this is a remote registry, you may need to authenticate.`,
)
}
if (response.status === 404) {
throw new Error(
- `The component at ${highlighter.info(
- url,
- )} was not found.\nIt may not exist at the registry. Please make sure it is a valid component.`,
+ `The component at ${highlighter.info(
+ url,
+ )} was not found.\nIt may not exist at the registry. Please make sure it is a valid component.`,
)
}
if (response.status === 403) {
throw new Error(
- `You do not have access to the component at ${highlighter.info(
- url,
- )}.\nIf this is a remote registry, you may need to authenticate or a token.`,
+ `You do not have access to the component at ${highlighter.info(
+ url,
+ )}.\nIf this is a remote registry, you may need to authenticate or a token.`,
)
}
const result = await response.json()
- const message
- = result && typeof result === 'object' && 'error' in result
- ? result.error
- : response.statusText || errorMessages[response.status]
+ const message =
+ result && typeof result === "object" && "error" in result
+ ? result.error
+ : response.statusText || errorMessages[response.status]
throw new Error(
- `Failed to fetch from ${highlighter.info(url)}.\n${message}`,
+ `Failed to fetch from ${highlighter.info(url)}.\n${message}`,
)
}
@@ -231,16 +228,15 @@ export async function fetchRegistry(paths: string[]) {
)
return results
- }
- catch (error) {
- logger.error('\n')
+ } catch (error) {
+ logger.error("\n")
handleError(error)
return []
}
}
export async function registryResolveItemsTree(
- names: z.infer['name'][],
+ names: z.infer["name"][],
config: Config,
) {
try {
@@ -250,8 +246,8 @@ export async function registryResolveItemsTree(
}
// If we're resolving the index, we want it to go first.
- if (names.includes('index')) {
- names.unshift('index')
+ if (names.includes("index")) {
+ names.unshift("index")
}
const registryItems = await resolveRegistryItems(names, config)
@@ -266,9 +262,12 @@ export async function registryResolveItemsTree(
// the theme item if a base color is provided.
// We do this for index only.
// Other components will ship with their theme tokens.
- if (names.includes('index')) {
+ if (names.includes("index")) {
if (config.tailwind.baseColor) {
- const theme = await registryGetTheme(config.tailwind.baseColor, config)
+ const theme = await registryGetTheme(
+ config.tailwind.baseColor,
+ config,
+ )
if (theme) {
payload.unshift(theme)
}
@@ -285,7 +284,7 @@ export async function registryResolveItemsTree(
cssVars = deepmerge(cssVars, item.cssVars ?? {})
})
- let docs = ''
+ let docs = ""
payload.forEach((item) => {
if (item.docs) {
docs += `${item.docs}\n`
@@ -294,18 +293,17 @@ export async function registryResolveItemsTree(
return registryResolvedItemsTreeSchema.parse({
dependencies: deepmerge.all(
- payload.map(item => item.dependencies ?? []),
+ payload.map((item) => item.dependencies ?? []),
),
devDependencies: deepmerge.all(
- payload.map(item => item.devDependencies ?? []),
+ payload.map((item) => item.devDependencies ?? []),
),
- files: deepmerge.all(payload.map(item => item.files ?? [])),
+ files: deepmerge.all(payload.map((item) => item.files ?? [])),
tailwind,
cssVars,
docs,
})
- }
- catch (error) {
+ } catch (error) {
handleError(error)
return null
}
@@ -339,11 +337,10 @@ async function resolveRegistryDependencies(
await resolveDependencies(dependency)
}
}
- }
- catch (error) {
+ } catch (error) {
console.error(
- `Error fetching or parsing registry item at ${itemUrl}:`,
- error,
+ `Error fetching or parsing registry item at ${itemUrl}:`,
+ error,
)
}
}
@@ -361,15 +358,15 @@ export async function registryGetTheme(name: string, config: Config) {
// TODO: Move this to the registry i.e registry:theme.
const theme = {
name,
- type: 'registry:theme',
+ type: "registry:theme",
tailwind: {
config: {
theme: {
extend: {
borderRadius: {
- lg: 'var(--radius)',
- md: 'calc(var(--radius) - 2px)',
- sm: 'calc(var(--radius) - 4px)',
+ lg: "var(--radius)",
+ md: "calc(var(--radius) - 2px)",
+ sm: "calc(var(--radius) - 4px)",
},
colors: {},
},
@@ -378,7 +375,7 @@ export async function registryGetTheme(name: string, config: Config) {
},
cssVars: {
light: {
- radius: '0.5rem',
+ radius: "0.5rem",
},
dark: {},
},
@@ -409,7 +406,10 @@ function getRegistryUrl(path: string) {
// If the url contains /chat/b/, we assume it's the v0 registry.
// We need to add the /json suffix if it's missing.
const url = new URL(path)
- if (url.pathname.match(/\/chat\/b\//) && !url.pathname.endsWith('/json')) {
+ if (
+ url.pathname.match(/\/chat\/b\//) &&
+ !url.pathname.endsWith("/json")
+ ) {
url.pathname = `${url.pathname}/json`
}
@@ -423,8 +423,7 @@ function isUrl(path: string) {
try {
new URL(path)
return true
- }
- catch (error) {
+ } catch (error) {
return false
}
}
@@ -445,11 +444,11 @@ export async function resolveRegistryItems(names: string[], config: Config) {
export function getRegistryTypeAliasMap() {
return new Map([
- ['registry:ui', 'ui'],
- ['registry:lib', 'lib'],
- ['registry:hook', 'hooks'],
- ['registry:block', 'components'],
- ['registry:component', 'components'],
+ ["registry:ui", "ui"],
+ ["registry:lib", "lib"],
+ ["registry:hook", "hooks"],
+ ["registry:block", "components"],
+ ["registry:component", "components"],
])
}
diff --git a/packages/nyxb/src/registry/schema.ts b/packages/nyxb/src/registry/schema.ts
index fb9a65e8..c9526231 100644
--- a/packages/nyxb/src/registry/schema.ts
+++ b/packages/nyxb/src/registry/schema.ts
@@ -1,36 +1,36 @@
-import { z } from 'zod'
+import { z } from "zod"
// Note: if you edit the schema here, you must also edit the schema in the
// apps/www/public/schema/registry-item.json file.
export const registryItemTypeSchema = z.enum([
- 'registry:lib',
- 'registry:block',
- 'registry:component',
- 'registry:ui',
- 'registry:hook',
- 'registry:page',
- 'registry:file',
+ "registry:lib",
+ "registry:block",
+ "registry:component",
+ "registry:ui",
+ "registry:hook",
+ "registry:page",
+ "registry:file",
// Internal use only
- 'registry:theme',
- 'registry:example',
- 'registry:style',
- 'registry:internal',
+ "registry:theme",
+ "registry:example",
+ "registry:style",
+ "registry:internal",
])
-export const registryItemFileSchema = z.discriminatedUnion('type', [
+export const registryItemFileSchema = z.discriminatedUnion("type", [
// Target is required for registry:file and registry:page
z.object({
path: z.string(),
content: z.string().optional(),
- type: z.enum(['registry:file', 'registry:page']),
+ type: z.enum(["registry:file", "registry:page"]),
target: z.string(),
}),
z.object({
path: z.string(),
content: z.string().optional(),
- type: registryItemTypeSchema.exclude(['registry:file', 'registry:page']),
+ type: registryItemTypeSchema.exclude(["registry:file", "registry:page"]),
target: z.string().optional(),
}),
])
diff --git a/packages/nyxb/src/utils/icon-libraries.ts b/packages/nyxb/src/utils/icon-libraries.ts
index d0c30fcb..248c8f38 100644
--- a/packages/nyxb/src/utils/icon-libraries.ts
+++ b/packages/nyxb/src/utils/icon-libraries.ts
@@ -1,12 +1,12 @@
export const ICON_LIBRARIES = {
- lucide: {
- name: "lucide-react",
- package: "lucide-react",
- import: "lucide-react",
- },
- radix: {
- name: "@radix-ui/react-icons",
- package: "@radix-ui/react-icons",
- import: "@radix-ui/react-icons",
- },
+ lucide: {
+ name: "lucide-react",
+ package: "lucide-react",
+ import: "lucide-react",
+ },
+ radix: {
+ name: "@radix-ui/react-icons",
+ package: "@radix-ui/react-icons",
+ import: "@radix-ui/react-icons",
+ },
}
diff --git a/templates/monorepo-next/biome.json b/templates/monorepo-next/biome.json
index 68713339..e292a522 100644
--- a/templates/monorepo-next/biome.json
+++ b/templates/monorepo-next/biome.json
@@ -7,7 +7,15 @@
},
"files": {
"ignoreUnknown": false,
- "ignore": ["./styles/", "./.contentlayer"]
+ "ignore": [
+ "./styles/",
+ "./.content-collections",
+ "./.next",
+ "./.turbo",
+ "./node_modules",
+ "./dist",
+ "./__registry__"
+ ]
},
"formatter": {
"enabled": true,
@@ -35,19 +43,25 @@
"noParameterAssign": "off",
"useTemplate": "off",
"noUselessElse": "off",
- "useSelfClosingElements": "off"
+ "useSelfClosingElements": "off",
+ "useExponentiationOperator": "off"
},
"suspicious": {
"noImplicitAnyLet": "off",
"noArrayIndexKey": "off",
"noShadowRestrictedNames": "off",
"noExplicitAny": "off",
- "noRedeclare": "off"
+ "noRedeclare": "off",
+ "noSuspiciousSemicolonInJsx": "off",
+ "useIsArray": "off",
+ "noAssignInExpressions": "off"
},
"complexity": {
"noForEach": "off",
"useLiteralKeys": "off",
- "useOptionalChain": "off"
+ "useOptionalChain": "off",
+ "noUselessSwitchCase": "off",
+ "noUselessFragments": "off"
},
"correctness": {
"useJsxKeyInIterable": "off",
@@ -55,6 +69,7 @@
"noUnnecessaryContinue": "off"
},
"a11y": {
+ "useKeyWithClickEvents": "off",
"useIframeTitle": "off",
"noSvgWithoutTitle": "off",
"useValidAnchor": "off",
@@ -63,7 +78,9 @@
"useSemanticElements": "off",
"useAltText": "off",
"useValidAriaRole": "off",
- "noRedundantRoles": "off"
+ "noRedundantRoles": "off",
+ "useMediaCaption": "off",
+ "useFocusableInteractive": "off"
},
"security": {
"noDangerouslySetInnerHtml": "off"
diff --git a/turbo.json b/turbo.json
index 7e192add..e1c7ae18 100644
--- a/turbo.json
+++ b/turbo.json
@@ -28,10 +28,10 @@
},
"typecheck": {},
"check": {
- "dependsOn": ["^lint"]
+ "dependsOn": ["^check"]
},
"check:fix": {
- "dependsOn": ["^lint:fix"]
+ "dependsOn": ["^check:fix"]
},
"test": {
"cache": false,