,\n ReactDialog.DialogTitleProps {}\n\nconst DialogHeader = ({\n children,\n className,\n position,\n variant,\n asChild,\n ...props\n}: IDialogHeaderProps) => {\n return (\n \n {asChild ? (\n children\n ) : (\n {children} \n )}\n
\n );\n};\n\nconst DialogComponent = Object.assign(Dialog, {\n Trigger: DialogTrigger,\n Header: DialogHeader,\n Content: DialogContent,\n Description: DialogDescription,\n Footer: DialogFooter,\n});\n\nexport { DialogComponent as Dialog };\n",
+ "type": "registry:component"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/input.json b/public/r/input.json
new file mode 100644
index 0000000..75e82cd
--- /dev/null
+++ b/public/r/input.json
@@ -0,0 +1,14 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "input",
+ "type": "registry:component",
+ "title": "Input",
+ "description": "This pretty input makes your users want to type stuff! ⌨️",
+ "files": [
+ {
+ "path": "packages/ui/Form/Input.tsx",
+ "content": "import React, { InputHTMLAttributes } from \"react\";\n\ninterface InputProps extends InputHTMLAttributes {\n className?: string;\n}\n\nexport const Input: React.FC = ({\n type = \"text\",\n placeholder = \"Enter text\",\n className = \"\",\n ...props\n}) => {\n console.log(props);\n return (\n \n );\n};\n",
+ "type": "registry:component"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/label.json b/public/r/label.json
new file mode 100644
index 0000000..31e81d3
--- /dev/null
+++ b/public/r/label.json
@@ -0,0 +1,14 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "label",
+ "type": "registry:component",
+ "title": "Label",
+ "description": "Label for form fields",
+ "files": [
+ {
+ "path": "packages/ui/Form/Label.tsx",
+ "content": "import * as React from \"react\";\nimport * as LabelPrimitive from \"@radix-ui/react-label\";\nimport { cva } from \"class-variance-authority\";\n\nimport { cn } from \"@/lib/utils\";\n\nconst labelVariants = cva(\n \"leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70\"\n);\n\nconst Label = ({\n className,\n ...props\n}: React.ComponentProps) => (\n \n);\n\nexport { Label };\n",
+ "type": "registry:component"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/menu.json b/public/r/menu.json
new file mode 100644
index 0000000..2fd889f
--- /dev/null
+++ b/public/r/menu.json
@@ -0,0 +1,14 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "menu",
+ "type": "registry:component",
+ "title": "Menu",
+ "description": "Show your users a list of actions they can take. 📋",
+ "files": [
+ {
+ "path": "packages/ui/Menu/Menu.tsx",
+ "content": "\"use client\";\n\nimport { cn } from \"@/lib/utils\";\nimport * as DropdownMenu from \"@radix-ui/react-dropdown-menu\";\nimport React, { ComponentPropsWithoutRef, HTMLAttributes } from \"react\";\n\nconst Menu = DropdownMenu.Root;\nconst Trigger = DropdownMenu.Trigger;\n\ninterface IMenuContent\n extends ComponentPropsWithoutRef {}\n\nconst Content = ({ className, ...props }: IMenuContent) => (\n \n \n \n);\n\nconst MenuItem = React.forwardRef<\n HTMLDivElement,\n ComponentPropsWithoutRef\n>(({ className, ...props }, ref) => (\n \n));\nMenuItem.displayName = \"MenuItem\";\n\nconst MenuComponent = Object.assign(Menu, {\n Trigger,\n Content,\n Item: MenuItem,\n});\n\nexport { MenuComponent as Menu };\n",
+ "type": "registry:component"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/radio.json b/public/r/radio.json
new file mode 100644
index 0000000..72bf2c2
--- /dev/null
+++ b/public/r/radio.json
@@ -0,0 +1,14 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "radio",
+ "type": "registry:component",
+ "title": "Radio",
+ "description": "Sometimes you need to pick multiple options! That's where the Radio component comes into play.",
+ "files": [
+ {
+ "path": "packages/ui/Form/Radio.tsx",
+ "content": "import { cn } from \"@/lib/utils\";\nimport * as RadioPrimitive from \"@radix-ui/react-radio-group\";\nimport { cva, VariantProps } from \"class-variance-authority\";\n\nconst radioVariants = cva(\"border-black border-2\", {\n variants: {\n variant: {\n default: \"\",\n outline: \"\",\n solid: \"\",\n },\n size: {\n sm: \"h-4 w-4\",\n md: \"h-5 w-5\",\n lg: \"h-6 w-6\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"md\",\n },\n});\n\nconst radioIndicatorVariants = cva(\"flex \", {\n variants: {\n variant: {\n default: \"bg-primary-500 border-2 border-black\",\n outline: \"border-2 border-black\",\n solid: \"bg-black\",\n },\n size: {\n sm: \"h-2 w-2\",\n md: \"h-2.5 w-2.5\",\n lg: \"h-3.5 w-3.5\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"md\",\n },\n});\n\ninterface RadioGroupProps\n extends React.ComponentProps {}\n\nexport const RadioGroupRoot = ({ className, ...props }: RadioGroupProps) => (\n \n);\n\ninterface RadioProps\n extends React.ComponentProps,\n VariantProps {}\n\nexport const RadioItem = ({\n children,\n className,\n size,\n variant,\n ...props\n}: RadioProps) => (\n \n \n \n \n {children}\n \n);\n\nconst RadioComponent = Object.assign(RadioGroupRoot, {\n Item: RadioItem,\n});\n\nexport { RadioComponent as RadioGroup };\n",
+ "type": "registry:component"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/select.json b/public/r/select.json
new file mode 100644
index 0000000..b73a70b
--- /dev/null
+++ b/public/r/select.json
@@ -0,0 +1,14 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "select",
+ "type": "registry:component",
+ "title": "Select",
+ "description": "Let your users pick what they want.",
+ "files": [
+ {
+ "path": "packages/ui/Form/Select.tsx",
+ "content": "\"use client\";\n\nimport { cn } from \"@/lib/utils\";\nimport * as SelectPrimitive from \"@radix-ui/react-select\";\nimport { Check, ChevronDown } from \"lucide-react\";\nimport React from \"react\";\n\nconst Select = SelectPrimitive.Root;\n\nconst SelectTrigger = ({\n className,\n children,\n ...props\n}: SelectPrimitive.SelectTriggerProps) => {\n return (\n \n {children}\n \n \n \n \n );\n};\n\nconst SelectValue = SelectPrimitive.Value;\n\nconst SelectIcon = SelectPrimitive.Icon;\n\nconst SelectContent = ({\n className,\n children,\n position = \"popper\",\n ...props\n}: SelectPrimitive.SelectContentProps) => {\n return (\n \n \n \n {children}\n \n \n \n );\n};\n\nconst SelectGroup = SelectPrimitive.Group;\n\nconst SelectItem = ({\n className,\n children,\n ...props\n}: SelectPrimitive.SelectItemProps) => (\n \n {children} \n\n \n \n \n \n \n \n);\nconst SelectLabel = SelectPrimitive.Label;\nconst SelectSeparator = SelectPrimitive.Separator;\n\nconst SelectObj = Object.assign(Select, {\n Trigger: SelectTrigger,\n Value: SelectValue,\n Icon: SelectIcon,\n Content: SelectContent,\n Group: SelectGroup,\n Item: SelectItem,\n Label: SelectLabel,\n Separator: SelectSeparator,\n});\n\nexport { SelectObj as Select };\n",
+ "type": "registry:component"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/switch.json b/public/r/switch.json
new file mode 100644
index 0000000..d17a9cc
--- /dev/null
+++ b/public/r/switch.json
@@ -0,0 +1,14 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "switch",
+ "type": "registry:component",
+ "title": "Switch",
+ "description": "Let users to turn on or off your marketing emails or notifications.",
+ "files": [
+ {
+ "path": "packages/ui/Form/Switch.tsx",
+ "content": "\"use client\";\n\nimport * as React from \"react\";\nimport * as SwitchPrimitives from \"@radix-ui/react-switch\";\n\nimport { cn } from \"@/lib/utils\";\n\nconst Switch = ({ className, ...props }: SwitchPrimitives.SwitchProps) => (\n \n \n \n);\n\nexport { Switch };\n",
+ "type": "registry:component"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/tab.json b/public/r/tab.json
new file mode 100644
index 0000000..8fdaae3
--- /dev/null
+++ b/public/r/tab.json
@@ -0,0 +1,14 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "tab",
+ "type": "registry:component",
+ "title": "Tab",
+ "description": "Switch between different views using tabs.",
+ "files": [
+ {
+ "path": "packages/ui/Tabs/Tab.tsx",
+ "content": "import { cn } from \"@/lib/utils\";\nimport {\n Tab,\n TabGroup,\n TabList,\n TabListProps,\n TabPanel,\n TabPanelProps,\n TabPanels,\n TabProps,\n} from \"@headlessui/react\";\n\nconst Tabs = TabGroup;\nconst TabsPanels = TabPanels;\n\ninterface ITabsTriggerList extends TabListProps {\n className?: string;\n}\nconst TabsTriggerList = ({\n children,\n className,\n ...props\n}: ITabsTriggerList) => {\n return (\n \n {children}\n \n );\n};\n\ninterface ITabsTrigger extends TabProps {\n className?: string;\n}\nconst TabsTrigger = ({ children, className, ...props }: ITabsTrigger) => {\n return (\n \n {children}\n \n );\n};\n\ninterface ITabsContent extends TabPanelProps {\n className?: string;\n}\nconst TabsContent = ({ children, className, ...props }: ITabsContent) => {\n return (\n \n {children}\n \n );\n};\n\nexport { Tabs, TabsPanels, TabsTrigger, TabsContent, TabsTriggerList };\n",
+ "type": "registry:component"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/text.json b/public/r/text.json
new file mode 100644
index 0000000..3582faa
--- /dev/null
+++ b/public/r/text.json
@@ -0,0 +1,14 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "text",
+ "type": "registry:component",
+ "title": "text",
+ "description": "Show your texts in different styles. 💅",
+ "files": [
+ {
+ "path": "packages/ui/Text/Text.tsx",
+ "content": "import type { ElementType, HTMLAttributes } from \"react\";\nimport { type VariantProps, cva } from \"class-variance-authority\";\nimport { cn } from \"@/lib/utils\";\n\nconst textVariants = cva(\"font-head\", {\n variants: {\n as: {\n p: \"font-sans text-base\",\n li: \"font-sans text-base\",\n a: \"font-sans text-base hover:underline underline-offset-2 decoration-primary-500\",\n h1: \"text-5xl lg:text-6xl font-bold\",\n h2: \"text-3xl lg:text-4xl font-semibold\",\n h3: \"text-2xl font-medium\",\n h4: \"text-xl font-normal\",\n h5: \"text-lg font-normal\",\n h6: \"text-base font-normal\",\n },\n },\n defaultVariants: {\n as: \"p\",\n },\n});\n\ninterface TextProps\n extends Omit, \"className\">,\n VariantProps {\n className?: string;\n}\n\nexport const Text = (props: TextProps) => {\n const { className, as, ...otherProps } = props;\n const Tag: ElementType = as || \"p\";\n\n return (\n \n );\n};\n",
+ "type": "registry:component"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/r/textarea.json b/public/r/textarea.json
new file mode 100644
index 0000000..f2a5f53
--- /dev/null
+++ b/public/r/textarea.json
@@ -0,0 +1,14 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "textarea",
+ "type": "registry:component",
+ "title": "textarea",
+ "description": "This pretty input makes your users want to type lots of stuff! ⌨️ ⌨",
+ "files": [
+ {
+ "path": "packages/ui/Form/Textarea.tsx",
+ "content": "import React from \"react\";\n\nexport function Textarea({\n type = \"text\",\n placeholder = \"Enter text...\",\n className = \"\",\n ...props\n}) {\n return (\n \n );\n}\n",
+ "type": "registry:component"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/registry.json b/registry.json
new file mode 100644
index 0000000..a2e351f
--- /dev/null
+++ b/registry.json
@@ -0,0 +1,211 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry.json",
+ "name": "retro ui",
+ "homepage": "https://retroui.dev",
+ "items": [
+ {
+ "name": "accordion",
+ "type": "registry:component",
+ "title": "Accordion",
+ "description": "This collapsible component let's your users read only the content they care about. 😌",
+ "files": [
+ {
+ "path": "packages/ui/Accordions/Accordion.tsx",
+ "type": "registry:component"
+ }
+ ]
+ },
+ {
+ "name": "alert",
+ "type": "registry:component",
+ "title": "Alert",
+ "description": "Notify your users about important events and updates. 📣",
+ "files": [
+ {
+ "path": "packages/ui/Alerts/Alert.tsx",
+ "type": "registry:component"
+ }
+ ]
+ },
+ {
+ "name": "avatar",
+ "type": "registry:component",
+ "title": "Avatar",
+ "description": "Default rounded avatar that can show your users profile picture. ✨",
+ "files": [
+ {
+ "path": "packages/ui/Avatars/Avatar.tsx",
+ "type": "registry:component"
+ }
+ ]
+ },
+ {
+ "name": "badge",
+ "type": "registry:component",
+ "title": "Badge",
+ "description": "The component that looks like a button but isn't clickable!",
+ "files": [
+ {
+ "path": "packages/ui/Badges/Badge.tsx",
+ "type": "registry:component"
+ }
+ ]
+ },
+ {
+ "name": "button",
+ "type": "registry:component",
+ "title": "Retro Button",
+ "description": "This bold button makes sure your users click on it and perform the actions you want!",
+ "files": [
+ {
+ "path": "packages/ui/Buttons/Button.tsx",
+ "type": "registry:component"
+ }
+ ]
+ },
+ {
+ "name": "card",
+ "type": "registry:component",
+ "title": "Card",
+ "description": "A customizable card component to visualize your content. 📝",
+ "files": [
+ {
+ "path": "packages/ui/Cards/Card.tsx",
+ "type": "registry:component"
+ }
+ ]
+ },
+ {
+ "name": "checkbox",
+ "type": "registry:component",
+ "title": "Checkbox",
+ "description": "Let users confirm or reject an option.",
+ "files": [
+ {
+ "path": "packages/ui/Form/Checkbox.tsx",
+ "type": "registry:component"
+ }
+ ]
+ },
+ {
+ "name": "dialog",
+ "type": "registry:component",
+ "title": "Dialog",
+ "description": "An impactful dialog that ensures your important messages and actions get the attention they deserve! 💬✨",
+ "files": [
+ {
+ "path": "packages/ui/Dialog/Dialog.tsx",
+ "type": "registry:component"
+ }
+ ]
+ },
+ {
+ "name": "input",
+ "type": "registry:component",
+ "title": "Input",
+ "description": "This pretty input makes your users want to type stuff! ⌨️",
+ "files": [
+ {
+ "path": "packages/ui/Form/Input.tsx",
+ "type": "registry:component"
+ }
+ ]
+ },
+ {
+ "name": "label",
+ "type": "registry:component",
+ "title": "Label",
+ "description": "Label for form fields",
+ "files": [
+ {
+ "path": "packages/ui/Form/Label.tsx",
+ "type": "registry:component"
+ }
+ ]
+ },
+ {
+ "name": "menu",
+ "type": "registry:component",
+ "title": "Menu",
+ "description": "Show your users a list of actions they can take. 📋",
+ "files": [
+ {
+ "path": "packages/ui/Menu/Menu.tsx",
+ "type": "registry:component"
+ }
+ ]
+ },
+ {
+ "name": "radio",
+ "type": "registry:component",
+ "title": "Radio",
+ "description": "Sometimes you need to pick multiple options! That's where the Radio component comes into play.",
+ "files": [
+ {
+ "path": "packages/ui/Form/Radio.tsx",
+ "type": "registry:component"
+ }
+ ]
+ },
+ {
+ "name": "select",
+ "type": "registry:component",
+ "title": "Select",
+ "description": "Let your users pick what they want.",
+ "files": [
+ {
+ "path": "packages/ui/Form/Select.tsx",
+ "type": "registry:component"
+ }
+ ]
+ },
+ {
+ "name": "switch",
+ "type": "registry:component",
+ "title": "Switch",
+ "description": "Let users to turn on or off your marketing emails or notifications.",
+ "files": [
+ {
+ "path": "packages/ui/Form/Switch.tsx",
+ "type": "registry:component"
+ }
+ ]
+ },
+ {
+ "name": "tab",
+ "type": "registry:component",
+ "title": "Tab",
+ "description": "Switch between different views using tabs.",
+ "files": [
+ {
+ "path": "packages/ui/Tabs/Tab.tsx",
+ "type": "registry:component"
+ }
+ ]
+ },
+ {
+ "name": "text",
+ "type": "registry:component",
+ "title": "text",
+ "description": "Show your texts in different styles. 💅",
+ "files": [
+ {
+ "path": "packages/ui/Text/Text.tsx",
+ "type": "registry:component"
+ }
+ ]
+ },
+ {
+ "name": "textarea",
+ "type": "registry:component",
+ "title": "textarea",
+ "description": "This pretty input makes your users want to type lots of stuff! ⌨️ ⌨",
+ "files": [
+ {
+ "path": "packages/ui/Form/Textarea.tsx",
+ "type": "registry:component"
+ }
+ ]
+ }
+ ]
+}
\ No newline at end of file