diff --git a/package.json b/package.json index d4fa59b..582dbc2 100644 --- a/package.json +++ b/package.json @@ -30,5 +30,8 @@ "prettier": "^3.8.1", "typescript": "^5.7.2" }, - "dependencies": {} + "dependencies": { + "next-themes": "^0.4.6", + "sonner": "^2.0.7" + } } diff --git a/packages/web/__registry__/index.tsx b/packages/web/__registry__/index.tsx index f7a82eb..175e98b 100644 --- a/packages/web/__registry__/index.tsx +++ b/packages/web/__registry__/index.tsx @@ -2171,7 +2171,7 @@ export const Index: Record = { { path: 'registry/ui/mc-combobox.tsx', content: - "'use client';\n\nimport { Combobox as ComboboxPrimitive } from '@base-ui/react';\nimport { CheckIcon, ChevronsUpDown, SearchIcon } from 'lucide-react';\nimport { cn } from '@/lib/utils';\n\nconst McCombobox = ComboboxPrimitive.Root;\n\nfunction McComboboxValue({ ...props }: ComboboxPrimitive.Value.Props) {\n return ;\n}\n\nfunction McComboboxTrigger({\n className,\n placeholder,\n ...props\n}: ComboboxPrimitive.Trigger.Props & { placeholder?: string }) {\n return (\n \n \n \n \n );\n}\n\nfunction McComboboxSearch({\n className,\n placeholder,\n ...props\n}: ComboboxPrimitive.Input.Props & { placeholder?: string }) {\n return (\n
\n \n \n
\n );\n}\n\nfunction McComboboxContent({\n className,\n side = 'bottom',\n sideOffset = 8,\n align = 'start',\n ...props\n}: ComboboxPrimitive.Popup.Props &\n Pick) {\n return (\n \n \n \n \n \n );\n}\n\nfunction McComboboxList({ className, ...props }: ComboboxPrimitive.List.Props) {\n return (\n \n );\n}\n\nfunction McComboboxItem({ className, children, ...props }: ComboboxPrimitive.Item.Props) {\n return (\n \n {children}\n \n \n \n \n );\n}\n\nexport {\n McCombobox,\n McComboboxTrigger,\n McComboboxSearch,\n McComboboxContent,\n McComboboxList,\n McComboboxItem,\n McComboboxValue,\n};\n", + "'use client';\r\n\r\nimport { Combobox as ComboboxPrimitive } from '@base-ui/react';\r\nimport { CheckIcon, ChevronsUpDown, SearchIcon } from 'lucide-react';\r\nimport { cn } from '@/lib/utils';\r\n\r\nconst McCombobox = ComboboxPrimitive.Root;\r\n\r\nfunction McComboboxValue({ ...props }: ComboboxPrimitive.Value.Props) {\r\n return ;\r\n}\r\n\r\nfunction McComboboxTrigger({\r\n className,\r\n placeholder,\r\n ...props\r\n}: ComboboxPrimitive.Trigger.Props & { placeholder?: string }) {\r\n return (\r\n \r\n \r\n \r\n \r\n );\r\n}\r\n\r\nfunction McComboboxSearch({\r\n className,\r\n placeholder,\r\n ...props\r\n}: ComboboxPrimitive.Input.Props & { placeholder?: string }) {\r\n return (\r\n
\r\n \r\n \r\n
\r\n );\r\n}\r\n\r\nfunction McComboboxContent({\r\n className,\r\n side = 'bottom',\r\n sideOffset = 8,\r\n align = 'start',\r\n ...props\r\n}: ComboboxPrimitive.Popup.Props &\r\n Pick) {\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n );\r\n}\r\n\r\nfunction McComboboxList({ className, ...props }: ComboboxPrimitive.List.Props) {\r\n return (\r\n \r\n );\r\n}\r\n\r\nfunction McComboboxItem({ className, children, ...props }: ComboboxPrimitive.Item.Props) {\r\n return (\r\n \r\n {children}\r\n \r\n \r\n \r\n \r\n );\r\n}\r\n\r\nexport {\r\n McCombobox,\r\n McComboboxTrigger,\r\n McComboboxSearch,\r\n McComboboxContent,\r\n McComboboxList,\r\n McComboboxItem,\r\n McComboboxValue,\r\n};\r\n", type: 'registry:component', }, ], @@ -2275,7 +2275,7 @@ export const Index: Record = { { path: 'registry/ui/mc-alert-dialog.tsx', content: - "'use client';\n\nimport * as React from 'react';\nimport { AlertDialog as AlertDialogPrimitive } from '@base-ui/react/alert-dialog';\n\nimport { cn } from '@/lib/utils';\nimport { Button } from '@/components/ui/button';\n\nfunction McAlertDialog({ ...props }: AlertDialogPrimitive.Root.Props) {\n return ;\n}\n\nfunction McAlertDialogTrigger({ ...props }: AlertDialogPrimitive.Trigger.Props) {\n return ;\n}\n\nfunction McAlertDialogPortal({ ...props }: AlertDialogPrimitive.Portal.Props) {\n return ;\n}\n\nfunction McAlertDialogOverlay({ className, ...props }: AlertDialogPrimitive.Backdrop.Props) {\n return (\n \n );\n}\n\nfunction McAlertDialogContent({\n className,\n size = 'default',\n ...props\n}: AlertDialogPrimitive.Popup.Props & {\n size?: 'default' | 'sm';\n}) {\n return (\n \n \n \n \n );\n}\n\nfunction McAlertDialogFooter({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n \n );\n}\n\nfunction McAlertDialogHeader({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n \n );\n}\n\nfunction McAlertDialogMedia({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n \n );\n}\n\nfunction McAlertDialogTitle({\n className,\n media,\n icon,\n ...props\n}: React.ComponentProps & {\n media?: boolean;\n icon?: React.ReactNode;\n}) {\n return (\n \n {media && icon && {icon}}\n \n \n );\n}\n\nfunction McAlertDialogDescription({\n className,\n ...props\n}: React.ComponentProps) {\n return (\n \n );\n}\n\nfunction McAlertDialogAction({ className, ...props }: React.ComponentProps) {\n return } />\n \n \n Are you absolutely sure?\n \n This action cannot be undone. This will permanently delete your account from our\n servers.\n \n \n \n Cancel\n Continue\n \n \n \n );\n}\n", + "import {\r\n McAlertDialog,\r\n McAlertDialogAction,\r\n McAlertDialogCancel,\r\n McAlertDialogContent,\r\n McAlertDialogDescription,\r\n McAlertDialogFooter,\r\n McAlertDialogHeader,\r\n McAlertDialogTitle,\r\n McAlertDialogTrigger,\r\n} from '@/registry/ui/mc-alert-dialog';\r\nimport { Button } from '@/components/ui/button';\r\n\r\nexport default function McAlertDialogDemo() {\r\n return (\r\n \r\n Show Dialog} />\r\n \r\n \r\n Are you absolutely sure?\r\n \r\n This action cannot be undone. This will permanently delete your account from our\r\n servers.\r\n \r\n \r\n \r\n Cancel\r\n Continue\r\n \r\n \r\n \r\n );\r\n}\r\n", type: 'registry:example', }, ], component: React.lazy(() => import('@/registry/examples/mc-alert-dialog-demo.tsx')), source: - "import {\n McAlertDialog,\n McAlertDialogAction,\n McAlertDialogCancel,\n McAlertDialogContent,\n McAlertDialogDescription,\n McAlertDialogFooter,\n McAlertDialogHeader,\n McAlertDialogTitle,\n McAlertDialogTrigger,\n} from '@/registry/ui/mc-alert-dialog';\nimport { Button } from '@/components/ui/button';\n\nexport default function McAlertDialogDemo() {\n return (\n \n Show Dialog} />\n \n \n Are you absolutely sure?\n \n This action cannot be undone. This will permanently delete your account from our\n servers.\n \n \n \n Cancel\n Continue\n \n \n \n );\n}\n", + "import {\r\n McAlertDialog,\r\n McAlertDialogAction,\r\n McAlertDialogCancel,\r\n McAlertDialogContent,\r\n McAlertDialogDescription,\r\n McAlertDialogFooter,\r\n McAlertDialogHeader,\r\n McAlertDialogTitle,\r\n McAlertDialogTrigger,\r\n} from '@/registry/ui/mc-alert-dialog';\r\nimport { Button } from '@/components/ui/button';\r\n\r\nexport default function McAlertDialogDemo() {\r\n return (\r\n \r\n Show Dialog} />\r\n \r\n \r\n Are you absolutely sure?\r\n \r\n This action cannot be undone. This will permanently delete your account from our\r\n servers.\r\n \r\n \r\n \r\n Cancel\r\n Continue\r\n \r\n \r\n \r\n );\r\n}\r\n", }, 'mc-alert-demo': { name: 'mc-alert-demo', @@ -2745,13 +2758,13 @@ export const Index: Record = { { path: 'registry/examples/mc-sonner-demo.tsx', content: - "'use client';\nimport McSonner, { toast } from '../ui/mc-sonner';\nexport default function McSonnerDemo() {\n return (\n
\n \n toast('Event has been created', {\n description: 'Sunday, December 03, 2023 at 9:00 AM',\n action: {\n label: 'undo',\n onClick: () => console.log('Undo du toast simple cliqué'),\n },\n })\n }\n className=\"px-5 py-2.5 bg-primary text-background rounded-lg text-sm font-medium transition-all shadow-sm cursor-pointer\"\n >\n Show Toast\n \n \n
\n );\n}\n", + "'use client';\r\nimport McSonner, { toast } from '../ui/mc-sonner';\r\nexport default function McSonnerDemo() {\r\n return (\r\n
\r\n \r\n toast('Event has been created', {\r\n description: 'Sunday, December 03, 2023 at 9:00 AM',\r\n action: {\r\n label: 'undo',\r\n onClick: () => console.log('Undo du toast simple cliqué'),\r\n },\r\n })\r\n }\r\n className=\"px-5 py-2.5 bg-primary text-background rounded-lg text-sm font-medium transition-all shadow-sm cursor-pointer\"\r\n >\r\n Show Toast\r\n \r\n \r\n
\r\n );\r\n}\r\n", type: 'registry:example', }, ], component: React.lazy(() => import('@/registry/examples/mc-sonner-demo.tsx')), source: - "'use client';\nimport McSonner, { toast } from '../ui/mc-sonner';\nexport default function McSonnerDemo() {\n return (\n
\n \n toast('Event has been created', {\n description: 'Sunday, December 03, 2023 at 9:00 AM',\n action: {\n label: 'undo',\n onClick: () => console.log('Undo du toast simple cliqué'),\n },\n })\n }\n className=\"px-5 py-2.5 bg-primary text-background rounded-lg text-sm font-medium transition-all shadow-sm cursor-pointer\"\n >\n Show Toast\n \n \n
\n );\n}\n", + "'use client';\r\nimport McSonner, { toast } from '../ui/mc-sonner';\r\nexport default function McSonnerDemo() {\r\n return (\r\n
\r\n \r\n toast('Event has been created', {\r\n description: 'Sunday, December 03, 2023 at 9:00 AM',\r\n action: {\r\n label: 'undo',\r\n onClick: () => console.log('Undo du toast simple cliqué'),\r\n },\r\n })\r\n }\r\n className=\"px-5 py-2.5 bg-primary text-background rounded-lg text-sm font-medium transition-all shadow-sm cursor-pointer\"\r\n >\r\n Show Toast\r\n \r\n \r\n
\r\n );\r\n}\r\n", }, 'mc-tooltip-demo': { name: 'mc-tooltip-demo', @@ -2761,13 +2774,13 @@ export const Index: Record = { { path: 'registry/examples/mc-tooltip-demo.tsx', content: - 'import { Button } from \'@/components/ui/button\';\nimport { McTooltip, McTooltipContent, McTooltipTrigger } from \'../ui/mc-tooltip\';\n\nexport default function McTooltipDemo() {\n return (\n \n Hover} />\n \n \n );\n}\n', + 'import { Button } from \'@/components/ui/button\';\r\nimport { McTooltip, McTooltipContent, McTooltipTrigger } from \'../ui/mc-tooltip\';\r\n\r\nexport default function McTooltipDemo() {\r\n return (\r\n \r\n Hover} />\r\n \r\n \r\n );\r\n}\r\n', type: 'registry:example', }, ], component: React.lazy(() => import('@/registry/examples/mc-tooltip-demo.tsx')), source: - 'import { Button } from \'@/components/ui/button\';\nimport { McTooltip, McTooltipContent, McTooltipTrigger } from \'../ui/mc-tooltip\';\n\nexport default function McTooltipDemo() {\n return (\n \n Hover} />\n \n \n );\n}\n', + 'import { Button } from \'@/components/ui/button\';\r\nimport { McTooltip, McTooltipContent, McTooltipTrigger } from \'../ui/mc-tooltip\';\r\n\r\nexport default function McTooltipDemo() {\r\n return (\r\n \r\n Hover} />\r\n \r\n \r\n );\r\n}\r\n', }, 'mc-popover-demo': { name: 'mc-popover-demo', @@ -2777,13 +2790,13 @@ export const Index: Record = { { path: 'registry/examples/mc-popover-demo.tsx', content: - "import { McButton } from '../ui/mc-button';\nimport {\n McPopover,\n McPopoverContent,\n McPopoverDescription,\n McPopoverHeader,\n McPopoverTitle,\n McPopoverTrigger,\n} from '../ui/mc-popover';\n\nconst fields = [\n { id: 'width', label: 'Width' },\n { id: 'height', label: 'Height' },\n { id: 'depth', label: 'Depth' },\n { id: 'offset', label: 'Offset' },\n] as const;\n\nexport default function McPopoverDemo() {\n return (\n
\n \n \n Popover\n \n }\n />\n \n \n Dimensions\n Set the dimensions for the layer.\n \n\n
\n {fields.map((field) => (\n
\n \n {field.label}\n \n \n
\n ))}\n
\n
\n
\n
\n );\n}\n", + "import { McButton } from '../ui/mc-button';\r\nimport {\r\n McPopover,\r\n McPopoverContent,\r\n McPopoverDescription,\r\n McPopoverHeader,\r\n McPopoverTitle,\r\n McPopoverTrigger,\r\n} from '../ui/mc-popover';\r\n\r\nconst fields = [\r\n { id: 'width', label: 'Width' },\r\n { id: 'height', label: 'Height' },\r\n { id: 'depth', label: 'Depth' },\r\n { id: 'offset', label: 'Offset' },\r\n] as const;\r\n\r\nexport default function McPopoverDemo() {\r\n return (\r\n
\r\n \r\n \r\n Popover\r\n \r\n }\r\n />\r\n \r\n \r\n Dimensions\r\n Set the dimensions for the layer.\r\n \r\n\r\n
\r\n {fields.map((field) => (\r\n
\r\n \r\n {field.label}\r\n \r\n \r\n
\r\n ))}\r\n
\r\n
\r\n
\r\n
\r\n );\r\n}\r\n", type: 'registry:example', }, ], component: React.lazy(() => import('@/registry/examples/mc-popover-demo.tsx')), source: - "import { McButton } from '../ui/mc-button';\nimport {\n McPopover,\n McPopoverContent,\n McPopoverDescription,\n McPopoverHeader,\n McPopoverTitle,\n McPopoverTrigger,\n} from '../ui/mc-popover';\n\nconst fields = [\n { id: 'width', label: 'Width' },\n { id: 'height', label: 'Height' },\n { id: 'depth', label: 'Depth' },\n { id: 'offset', label: 'Offset' },\n] as const;\n\nexport default function McPopoverDemo() {\n return (\n
\n \n \n Popover\n \n }\n />\n \n \n Dimensions\n Set the dimensions for the layer.\n \n\n
\n {fields.map((field) => (\n
\n \n {field.label}\n \n \n
\n ))}\n
\n
\n
\n
\n );\n}\n", + "import { McButton } from '../ui/mc-button';\r\nimport {\r\n McPopover,\r\n McPopoverContent,\r\n McPopoverDescription,\r\n McPopoverHeader,\r\n McPopoverTitle,\r\n McPopoverTrigger,\r\n} from '../ui/mc-popover';\r\n\r\nconst fields = [\r\n { id: 'width', label: 'Width' },\r\n { id: 'height', label: 'Height' },\r\n { id: 'depth', label: 'Depth' },\r\n { id: 'offset', label: 'Offset' },\r\n] as const;\r\n\r\nexport default function McPopoverDemo() {\r\n return (\r\n
\r\n \r\n \r\n Popover\r\n \r\n }\r\n />\r\n \r\n \r\n Dimensions\r\n Set the dimensions for the layer.\r\n \r\n\r\n
\r\n {fields.map((field) => (\r\n
\r\n \r\n {field.label}\r\n \r\n \r\n
\r\n ))}\r\n
\r\n
\r\n
\r\n
\r\n );\r\n}\r\n", }, 'mc-dropdown-menu-demo': { name: 'mc-dropdown-menu-demo', @@ -2793,13 +2806,13 @@ export const Index: Record = { { path: 'registry/examples/mc-dropdown-menu-demo.tsx', content: - '\'use client\';\n\nimport { Button } from \'@/components/ui/button\';\nimport {\n McDropdownMenu,\n McDropdownMenuContent,\n McDropdownMenuGroup,\n McDropdownMenuItem,\n McDropdownMenuLabel,\n McDropdownMenuPortal,\n McDropdownMenuSeparator,\n McDropdownMenuSub,\n McDropdownMenuSubContent,\n McDropdownMenuSubTrigger,\n McDropdownMenuTrigger,\n} from \'@/registry/ui/mc-dropdown-menu\';\n\nexport default function McDropdownMenuDemo() {\n return (\n \n \n Open\n \n }\n />\n \n \n My Account\n Profile\n Settings\n \n \n \n Team\n \n Invite users\n \n \n Email\n Message\n \n More...\n \n \n \n \n \n \n Log out\n \n \n \n );\n}\n', + '\'use client\';\r\n\r\nimport { Button } from \'@/components/ui/button\';\r\nimport {\r\n McDropdownMenu,\r\n McDropdownMenuContent,\r\n McDropdownMenuGroup,\r\n McDropdownMenuItem,\r\n McDropdownMenuLabel,\r\n McDropdownMenuPortal,\r\n McDropdownMenuSeparator,\r\n McDropdownMenuSub,\r\n McDropdownMenuSubContent,\r\n McDropdownMenuSubTrigger,\r\n McDropdownMenuTrigger,\r\n} from \'@/registry/ui/mc-dropdown-menu\';\r\n\r\nexport default function McDropdownMenuDemo() {\r\n return (\r\n \r\n \r\n Open\r\n \r\n }\r\n />\r\n \r\n \r\n My Account\r\n Profile\r\n Settings\r\n \r\n \r\n \r\n Team\r\n \r\n Invite users\r\n \r\n \r\n Email\r\n Message\r\n \r\n More...\r\n \r\n \r\n \r\n \r\n \r\n \r\n Log out\r\n \r\n \r\n \r\n );\r\n}\r\n', type: 'registry:example', }, ], component: React.lazy(() => import('@/registry/examples/mc-dropdown-menu-demo.tsx')), source: - '\'use client\';\n\nimport { Button } from \'@/components/ui/button\';\nimport {\n McDropdownMenu,\n McDropdownMenuContent,\n McDropdownMenuGroup,\n McDropdownMenuItem,\n McDropdownMenuLabel,\n McDropdownMenuPortal,\n McDropdownMenuSeparator,\n McDropdownMenuSub,\n McDropdownMenuSubContent,\n McDropdownMenuSubTrigger,\n McDropdownMenuTrigger,\n} from \'@/registry/ui/mc-dropdown-menu\';\n\nexport default function McDropdownMenuDemo() {\n return (\n \n \n Open\n \n }\n />\n \n \n My Account\n Profile\n Settings\n \n \n \n Team\n \n Invite users\n \n \n Email\n Message\n \n More...\n \n \n \n \n \n \n Log out\n \n \n \n );\n}\n', + '\'use client\';\r\n\r\nimport { Button } from \'@/components/ui/button\';\r\nimport {\r\n McDropdownMenu,\r\n McDropdownMenuContent,\r\n McDropdownMenuGroup,\r\n McDropdownMenuItem,\r\n McDropdownMenuLabel,\r\n McDropdownMenuPortal,\r\n McDropdownMenuSeparator,\r\n McDropdownMenuSub,\r\n McDropdownMenuSubContent,\r\n McDropdownMenuSubTrigger,\r\n McDropdownMenuTrigger,\r\n} from \'@/registry/ui/mc-dropdown-menu\';\r\n\r\nexport default function McDropdownMenuDemo() {\r\n return (\r\n \r\n \r\n Open\r\n \r\n }\r\n />\r\n \r\n \r\n My Account\r\n Profile\r\n Settings\r\n \r\n \r\n \r\n Team\r\n \r\n Invite users\r\n \r\n \r\n Email\r\n Message\r\n \r\n More...\r\n \r\n \r\n \r\n \r\n \r\n \r\n Log out\r\n \r\n \r\n \r\n );\r\n}\r\n', }, 'mc-context-menu-demo': { name: 'mc-context-menu-demo', @@ -2809,13 +2822,13 @@ export const Index: Record = { { path: 'registry/examples/mc-context-menu-demo.tsx', content: - 'import {\n McContextMenu,\n McContextMenuCheckboxItem,\n McContextMenuContent,\n McContextMenuGroup,\n McContextMenuItem,\n McContextMenuLabel,\n McContextMenuRadioGroup,\n McContextMenuRadioItem,\n McContextMenuSeparator,\n McContextMenuShortcut,\n McContextMenuSub,\n McContextMenuSubContent,\n McContextMenuSubTrigger,\n McContextMenuTrigger,\n} from \'@/registry/ui/mc-context-menu\';\n\nexport default function McContextMenuDemo() {\n return (\n \n \n Right click here\n \n \n \n Actions\n \n Back\n Alt+Left\n \n \n Forward\n Alt+Right\n \n Reload\n \n \n More tools\n \n Save page as...\n Create shortcut...\n Inspect\n \n \n \n Show bookmarks\n Show full URLs\n \n \n Density\n \n Compact\n Comfortable\n \n \n \n \n );\n}\n', + 'import {\r\n McContextMenu,\r\n McContextMenuCheckboxItem,\r\n McContextMenuContent,\r\n McContextMenuGroup,\r\n McContextMenuItem,\r\n McContextMenuLabel,\r\n McContextMenuRadioGroup,\r\n McContextMenuRadioItem,\r\n McContextMenuSeparator,\r\n McContextMenuShortcut,\r\n McContextMenuSub,\r\n McContextMenuSubContent,\r\n McContextMenuSubTrigger,\r\n McContextMenuTrigger,\r\n} from \'@/registry/ui/mc-context-menu\';\r\n\r\nexport default function McContextMenuDemo() {\r\n return (\r\n \r\n \r\n Right click here\r\n \r\n \r\n \r\n Actions\r\n \r\n Back\r\n Alt+Left\r\n \r\n \r\n Forward\r\n Alt+Right\r\n \r\n Reload\r\n \r\n \r\n More tools\r\n \r\n Save page as...\r\n Create shortcut...\r\n Inspect\r\n \r\n \r\n \r\n Show bookmarks\r\n Show full URLs\r\n \r\n \r\n Density\r\n \r\n Compact\r\n Comfortable\r\n \r\n \r\n \r\n \r\n );\r\n}\r\n', type: 'registry:example', }, ], component: React.lazy(() => import('@/registry/examples/mc-context-menu-demo.tsx')), source: - 'import {\n McContextMenu,\n McContextMenuCheckboxItem,\n McContextMenuContent,\n McContextMenuGroup,\n McContextMenuItem,\n McContextMenuLabel,\n McContextMenuRadioGroup,\n McContextMenuRadioItem,\n McContextMenuSeparator,\n McContextMenuShortcut,\n McContextMenuSub,\n McContextMenuSubContent,\n McContextMenuSubTrigger,\n McContextMenuTrigger,\n} from \'@/registry/ui/mc-context-menu\';\n\nexport default function McContextMenuDemo() {\n return (\n \n \n Right click here\n \n \n \n Actions\n \n Back\n Alt+Left\n \n \n Forward\n Alt+Right\n \n Reload\n \n \n More tools\n \n Save page as...\n Create shortcut...\n Inspect\n \n \n \n Show bookmarks\n Show full URLs\n \n \n Density\n \n Compact\n Comfortable\n \n \n \n \n );\n}\n', + 'import {\r\n McContextMenu,\r\n McContextMenuCheckboxItem,\r\n McContextMenuContent,\r\n McContextMenuGroup,\r\n McContextMenuItem,\r\n McContextMenuLabel,\r\n McContextMenuRadioGroup,\r\n McContextMenuRadioItem,\r\n McContextMenuSeparator,\r\n McContextMenuShortcut,\r\n McContextMenuSub,\r\n McContextMenuSubContent,\r\n McContextMenuSubTrigger,\r\n McContextMenuTrigger,\r\n} from \'@/registry/ui/mc-context-menu\';\r\n\r\nexport default function McContextMenuDemo() {\r\n return (\r\n \r\n \r\n Right click here\r\n \r\n \r\n \r\n Actions\r\n \r\n Back\r\n Alt+Left\r\n \r\n \r\n Forward\r\n Alt+Right\r\n \r\n Reload\r\n \r\n \r\n More tools\r\n \r\n Save page as...\r\n Create shortcut...\r\n Inspect\r\n \r\n \r\n \r\n Show bookmarks\r\n Show full URLs\r\n \r\n \r\n Density\r\n \r\n Compact\r\n Comfortable\r\n \r\n \r\n \r\n \r\n );\r\n}\r\n', }, 'mc-accordion-demo': { name: 'mc-accordion-demo', @@ -2825,13 +2838,13 @@ export const Index: Record = { { path: 'registry/examples/mc-accordion-demo.tsx', content: - 'import {\n McAccordion,\n McAccordionContent,\n McAccordionItem,\n McAccordionTrigger,\n} from \'../ui/mc-accordion\';\n\nexport function AccordionDemo() {\n return (\n \n \n Product Information\n \n

\n Our flagship product combines cutting-edge technology with sleek design. Built with\n premium materials, it offers unparalleled performance and reliability.\n

\n

\n Key features include advanced processing capabilities, and an intuitive user interface\n designed for both beginners and experts.\n

\n
\n
\n \n Shipping Details\n \n

We offer standard (5-7 days), express (2-3 days), and overnight shipping.

\n

\n Free shipping on international orders is available once the minimum order amount is\n reached.\n

\n
\n
\n \n Return Policy\n \n

\n Returns accepted within 30 days. Items must be unused and in original packaging. Refunds\n processed within 5-7 business days.\n

\n
\n
\n
\n );\n}\n\nexport default AccordionDemo;\n', + 'import {\r\n McAccordion,\r\n McAccordionContent,\r\n McAccordionItem,\r\n McAccordionTrigger,\r\n} from \'../ui/mc-accordion\';\r\n\r\nexport function AccordionDemo() {\r\n return (\r\n \r\n \r\n Product Information\r\n \r\n

\r\n Our flagship product combines cutting-edge technology with sleek design. Built with\r\n premium materials, it offers unparalleled performance and reliability.\r\n

\r\n

\r\n Key features include advanced processing capabilities, and an intuitive user interface\r\n designed for both beginners and experts.\r\n

\r\n
\r\n
\r\n \r\n Shipping Details\r\n \r\n

We offer standard (5-7 days), express (2-3 days), and overnight shipping.

\r\n

\r\n Free shipping on international orders is available once the minimum order amount is\r\n reached.\r\n

\r\n
\r\n
\r\n \r\n Return Policy\r\n \r\n

\r\n Returns accepted within 30 days. Items must be unused and in original packaging. Refunds\r\n processed within 5-7 business days.\r\n

\r\n
\r\n
\r\n
\r\n );\r\n}\r\n\r\nexport default AccordionDemo;\r\n', type: 'registry:example', }, ], component: React.lazy(() => import('@/registry/examples/mc-accordion-demo.tsx')), source: - 'import {\n McAccordion,\n McAccordionContent,\n McAccordionItem,\n McAccordionTrigger,\n} from \'../ui/mc-accordion\';\n\nexport function AccordionDemo() {\n return (\n \n \n Product Information\n \n

\n Our flagship product combines cutting-edge technology with sleek design. Built with\n premium materials, it offers unparalleled performance and reliability.\n

\n

\n Key features include advanced processing capabilities, and an intuitive user interface\n designed for both beginners and experts.\n

\n
\n
\n \n Shipping Details\n \n

We offer standard (5-7 days), express (2-3 days), and overnight shipping.

\n

\n Free shipping on international orders is available once the minimum order amount is\n reached.\n

\n
\n
\n \n Return Policy\n \n

\n Returns accepted within 30 days. Items must be unused and in original packaging. Refunds\n processed within 5-7 business days.\n

\n
\n
\n
\n );\n}\n\nexport default AccordionDemo;\n', + 'import {\r\n McAccordion,\r\n McAccordionContent,\r\n McAccordionItem,\r\n McAccordionTrigger,\r\n} from \'../ui/mc-accordion\';\r\n\r\nexport function AccordionDemo() {\r\n return (\r\n \r\n \r\n Product Information\r\n \r\n

\r\n Our flagship product combines cutting-edge technology with sleek design. Built with\r\n premium materials, it offers unparalleled performance and reliability.\r\n

\r\n

\r\n Key features include advanced processing capabilities, and an intuitive user interface\r\n designed for both beginners and experts.\r\n

\r\n
\r\n
\r\n \r\n Shipping Details\r\n \r\n

We offer standard (5-7 days), express (2-3 days), and overnight shipping.

\r\n

\r\n Free shipping on international orders is available once the minimum order amount is\r\n reached.\r\n

\r\n
\r\n
\r\n \r\n Return Policy\r\n \r\n

\r\n Returns accepted within 30 days. Items must be unused and in original packaging. Refunds\r\n processed within 5-7 business days.\r\n

\r\n
\r\n
\r\n
\r\n );\r\n}\r\n\r\nexport default AccordionDemo;\r\n', }, 'mc-separator-demo': { name: 'mc-separator-demo', @@ -2857,13 +2870,13 @@ export const Index: Record = { { path: 'registry/examples/mc-scrollarea-demo.tsx', content: - 'import { McScrollArea } from \'@/registry/ui/mc-scrollarea\';\n\nconst tags = Array.from({ length: 50 }).map((_, i, a) => `v1.2.0-beta.${a.length - i}`);\n\nexport default function McScrollAreaDemo() {\n return ;\n}\n', + 'import { McScrollArea } from \'@/registry/ui/mc-scrollarea\';\r\n\r\nconst tags = Array.from({ length: 50 }).map((_, i, a) => `v1.2.0-beta.${a.length - i}`);\r\n\r\nexport default function McScrollAreaDemo() {\r\n return ;\r\n}\r\n', type: 'registry:example', }, ], component: React.lazy(() => import('@/registry/examples/mc-scrollarea-demo.tsx')), source: - 'import { McScrollArea } from \'@/registry/ui/mc-scrollarea\';\n\nconst tags = Array.from({ length: 50 }).map((_, i, a) => `v1.2.0-beta.${a.length - i}`);\n\nexport default function McScrollAreaDemo() {\n return ;\n}\n', + 'import { McScrollArea } from \'@/registry/ui/mc-scrollarea\';\r\n\r\nconst tags = Array.from({ length: 50 }).map((_, i, a) => `v1.2.0-beta.${a.length - i}`);\r\n\r\nexport default function McScrollAreaDemo() {\r\n return ;\r\n}\r\n', }, 'mc-skeleton-demo': { name: 'mc-skeleton-demo', @@ -2873,13 +2886,13 @@ export const Index: Record = { { path: 'registry/examples/mc-skeleton-demo.tsx', content: - 'import { McSkeleton } from \'../ui/mc-skeleton\';\n\nexport default function McSkeletonDemo() {\n return (\n
\n
\n {Array.from({ length: 3 }).map((_, i) => (\n
\n \n
\n \n \n \n
\n
\n ))}\n
\n
\n );\n}\n', + 'import { McSkeleton } from \'../ui/mc-skeleton\';\r\n\r\nexport default function McSkeletonDemo() {\r\n return (\r\n
\r\n
\r\n {Array.from({ length: 3 }).map((_, i) => (\r\n
\r\n \r\n
\r\n \r\n \r\n \r\n
\r\n
\r\n ))}\r\n
\r\n
\r\n );\r\n}\r\n', type: 'registry:example', }, ], component: React.lazy(() => import('@/registry/examples/mc-skeleton-demo.tsx')), source: - 'import { McSkeleton } from \'../ui/mc-skeleton\';\n\nexport default function McSkeletonDemo() {\n return (\n
\n
\n {Array.from({ length: 3 }).map((_, i) => (\n
\n \n
\n \n \n \n
\n
\n ))}\n
\n
\n );\n}\n', + 'import { McSkeleton } from \'../ui/mc-skeleton\';\r\n\r\nexport default function McSkeletonDemo() {\r\n return (\r\n
\r\n
\r\n {Array.from({ length: 3 }).map((_, i) => (\r\n
\r\n \r\n
\r\n \r\n \r\n \r\n
\r\n
\r\n ))}\r\n
\r\n
\r\n );\r\n}\r\n', }, 'mc-badge-demo': { name: 'mc-badge-demo', @@ -2889,13 +2902,13 @@ export const Index: Record = { { path: 'registry/examples/mc-badge-demo.tsx', content: - 'import { ArrowRight } from \'lucide-react\';\nimport { McBadge } from \'../ui/mc-badge\';\n\nconst DotIcon = ({ className }: { className?: string }) => (\n \n);\n\nexport default function McBadgeDemo() {\n return (\n
\n Label\n Secondary\n Destructive\n Outline\n } iconPosition="start">\n Status\n \n } iconPosition="end">\n Learn more\n \n }\n iconPosition="end"\n >\n We’ve just released a new feature\n \n\n \n Label\n \n
\n );\n}\n', + 'import { ArrowRight } from \'lucide-react\';\r\nimport { McBadge } from \'../ui/mc-badge\';\r\n\r\nconst DotIcon = ({ className }: { className?: string }) => (\r\n \r\n);\r\n\r\nexport default function McBadgeDemo() {\r\n return (\r\n
\r\n Label\r\n Secondary\r\n Destructive\r\n Outline\r\n } iconPosition="start">\r\n Status\r\n \r\n } iconPosition="end">\r\n Learn more\r\n \r\n }\r\n iconPosition="end"\r\n >\r\n We’ve just released a new feature\r\n \r\n\r\n \r\n Label\r\n \r\n
\r\n );\r\n}\r\n', type: 'registry:example', }, ], component: React.lazy(() => import('@/registry/examples/mc-badge-demo.tsx')), source: - 'import { ArrowRight } from \'lucide-react\';\nimport { McBadge } from \'../ui/mc-badge\';\n\nconst DotIcon = ({ className }: { className?: string }) => (\n \n);\n\nexport default function McBadgeDemo() {\n return (\n
\n Label\n Secondary\n Destructive\n Outline\n } iconPosition="start">\n Status\n \n } iconPosition="end">\n Learn more\n \n }\n iconPosition="end"\n >\n We’ve just released a new feature\n \n\n \n Label\n \n
\n );\n}\n', + 'import { ArrowRight } from \'lucide-react\';\r\nimport { McBadge } from \'../ui/mc-badge\';\r\n\r\nconst DotIcon = ({ className }: { className?: string }) => (\r\n \r\n);\r\n\r\nexport default function McBadgeDemo() {\r\n return (\r\n
\r\n Label\r\n Secondary\r\n Destructive\r\n Outline\r\n } iconPosition="start">\r\n Status\r\n \r\n } iconPosition="end">\r\n Learn more\r\n \r\n }\r\n iconPosition="end"\r\n >\r\n We’ve just released a new feature\r\n \r\n\r\n \r\n Label\r\n \r\n
\r\n );\r\n}\r\n', }, 'mc-avatar-demo': { name: 'mc-avatar-demo', @@ -2905,13 +2918,13 @@ export const Index: Record = { { path: 'registry/examples/mc-avatar-demo.tsx', content: - 'import {\n McAvatar,\n McAvatarBadge,\n McAvatarFallback,\n McAvatarGroup,\n McAvatarGroupCount,\n McAvatarImage,\n} from \'@/registry/ui/mc-avatar\';\n\nexport default function AvatarDemo() {\n return (\n
\n \n \n CN\n \n \n \n ER\n \n \n \n \n \n CN\n \n \n \n LR\n \n \n \n ER\n \n +3\n \n
\n );\n}\n', + 'import {\r\n McAvatar,\r\n McAvatarBadge,\r\n McAvatarFallback,\r\n McAvatarGroup,\r\n McAvatarGroupCount,\r\n McAvatarImage,\r\n} from \'@/registry/ui/mc-avatar\';\r\n\r\nexport default function AvatarDemo() {\r\n return (\r\n
\r\n \r\n \r\n CN\r\n \r\n \r\n \r\n ER\r\n \r\n \r\n \r\n \r\n \r\n CN\r\n \r\n \r\n \r\n LR\r\n \r\n \r\n \r\n ER\r\n \r\n +3\r\n \r\n
\r\n );\r\n}\r\n', type: 'registry:example', }, ], component: React.lazy(() => import('@/registry/examples/mc-avatar-demo.tsx')), source: - 'import {\n McAvatar,\n McAvatarBadge,\n McAvatarFallback,\n McAvatarGroup,\n McAvatarGroupCount,\n McAvatarImage,\n} from \'@/registry/ui/mc-avatar\';\n\nexport default function AvatarDemo() {\n return (\n
\n \n \n CN\n \n \n \n ER\n \n \n \n \n \n CN\n \n \n \n LR\n \n \n \n ER\n \n +3\n \n
\n );\n}\n', + 'import {\r\n McAvatar,\r\n McAvatarBadge,\r\n McAvatarFallback,\r\n McAvatarGroup,\r\n McAvatarGroupCount,\r\n McAvatarImage,\r\n} from \'@/registry/ui/mc-avatar\';\r\n\r\nexport default function AvatarDemo() {\r\n return (\r\n
\r\n \r\n \r\n CN\r\n \r\n \r\n \r\n ER\r\n \r\n \r\n \r\n \r\n \r\n CN\r\n \r\n \r\n \r\n LR\r\n \r\n \r\n \r\n ER\r\n \r\n +3\r\n \r\n
\r\n );\r\n}\r\n', }, 'mc-hover-card-demo': { name: 'mc-hover-card-demo', @@ -2921,12 +2934,28 @@ export const Index: Record = { { path: 'registry/examples/mc-hover-card-demo.tsx', content: - 'import { McHoverCard, McHoverCardContent, McHoverCardTrigger } from \'../ui/mc-hover-card\';\n\nexport default function McHoverCardDemo() {\n return (\n
\n \n \n \n \n \n \n
\n );\n}\n', + 'import { McHoverCard, McHoverCardContent, McHoverCardTrigger } from \'../ui/mc-hover-card\';\r\n\r\nexport default function McHoverCardDemo() {\r\n return (\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n );\r\n}\r\n', type: 'registry:example', }, ], component: React.lazy(() => import('@/registry/examples/mc-hover-card-demo.tsx')), source: - 'import { McHoverCard, McHoverCardContent, McHoverCardTrigger } from \'../ui/mc-hover-card\';\n\nexport default function McHoverCardDemo() {\n return (\n
\n \n \n \n \n \n \n
\n );\n}\n', + 'import { McHoverCard, McHoverCardContent, McHoverCardTrigger } from \'../ui/mc-hover-card\';\r\n\r\nexport default function McHoverCardDemo() {\r\n return (\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n );\r\n}\r\n', + }, + 'mc-slider-demo': { + name: 'mc-slider-demo', + description: 'Demo for MicroClub Slider', + type: 'registry:example', + files: [ + { + path: 'registry/examples/mc-slider-demo.tsx', + content: + 'import { McSlider } from \'@/registry/ui/mc-slider\';\n\nexport default function SliderDemo() {\n return ;\n}\n', + type: 'registry:example', + }, + ], + component: React.lazy(() => import('@/registry/examples/mc-slider-demo.tsx')), + source: + 'import { McSlider } from \'@/registry/ui/mc-slider\';\n\nexport default function SliderDemo() {\n return ;\n}\n', }, }; diff --git a/packages/web/__registry__/registry.autogenerated.json b/packages/web/__registry__/registry.autogenerated.json index b3ef73f..28a6b6a 100644 --- a/packages/web/__registry__/registry.autogenerated.json +++ b/packages/web/__registry__/registry.autogenerated.json @@ -2544,6 +2544,19 @@ } ], "type": "registry:component" + }, + { + "name": "mc-slider", + "title": "MicroClub Slider", + "description": "A slider component for MicroClub UI", + "dependencies": ["@base-ui/react"], + "files": [ + { + "path": "registry/ui/mc-slider.tsx", + "type": "registry:component" + } + ], + "type": "registry:component" } ] } diff --git a/packages/web/content/docs/components/mc-slider.mdx b/packages/web/content/docs/components/mc-slider.mdx index 23f336c..b83ec24 100644 --- a/packages/web/content/docs/components/mc-slider.mdx +++ b/packages/web/content/docs/components/mc-slider.mdx @@ -1,9 +1,110 @@ --- title: MC Slider -description: A component for selecting a value from a range. +description: A flexible slider for selecting a value from a range. --- - - This component is coming soon. Check our [contributing guide](/docs/introduction#contributing) for - more information. - +## Overview + +The `mc-slider` is a core component of the MicroClub UI library. Built on the **@base-ui/react** slider primitive, it provides an accessible, keyboard-friendly range control with MicroClub's signature styling via **Tailwind CSS v4**. + +As part of the MicroClub library, this component is designed for **instant deployment into your codebase**, giving you full ownership of its look and behavior. + +## Preview + + + + + + + + + + +## Add to Your Project + +Deploy the `mc-slider` directly to your `components/ui` directory: + + + npx mcoli-ui@latest add mc-slider + pnpm dlx mcoli-ui@latest add mc-slider + yarn dlx mcoli-ui@latest add mc-slider + bunx mcoli-ui@latest add mc-slider + + +### Manual Setup + +If you prefer manual control: + + + +Install the core dependencies + + + npm install clsx tailwind-merge @base-ui/react + pnpm add clsx tailwind-merge @base-ui/react + yarn add clsx tailwind-merge @base-ui/react + bun add clsx tailwind-merge @base-ui/react + + +Copy the source code + + + +Adjust import paths + +Ensure your `@/lib/utils` or equivalent classname helper is correctly imported. + + + +## Usage + +```tsx +import { McSlider } from '@/components/ui/mc-slider'; + +export default function Example() { + return ; +} +``` + +## Examples + +### Basic + +```tsx + +``` + +### Range + +```tsx + +``` + +### Vertical + +```tsx + +``` + +### Disabled + +```tsx + +``` + +## API Reference + +### Props + +| Prop | Type | Default | Description | +| -------------- | ---------------------------- | -------------- | ------------------------------- | +| `defaultValue` | `number[]` | `undefined` | Initial value(s) for the slider | +| `value` | `number[]` | `undefined` | Controlled value(s) | +| `min` | `number` | `0` | Minimum slider value | +| `max` | `number` | `100` | Maximum slider value | +| `step` | `number` | `1` | Increment step | +| `orientation` | `"horizontal" \| "vertical"` | `"horizontal"` | Slider orientation | +| `disabled` | `boolean` | `false` | Disables interaction | +| `className` | `string` | `undefined` | Additional CSS classes | + +All other props from `@base-ui/react/slider` are supported. diff --git a/packages/web/public/r/mc-accordion.json b/packages/web/public/r/mc-accordion.json index 9f2547d..97a43e6 100644 --- a/packages/web/public/r/mc-accordion.json +++ b/packages/web/public/r/mc-accordion.json @@ -7,7 +7,7 @@ "files": [ { "path": "registry/ui/mc-accordion.tsx", - "content": "import { Accordion as AccordionPrimitive } from '@base-ui/react/accordion';\nimport { ChevronDownIcon, ChevronUpIcon } from 'lucide-react';\n\nimport { cn } from '@/lib/utils';\n\nfunction McAccordion({ className, ...props }: AccordionPrimitive.Root.Props) {\n return (\n \n );\n}\n\nfunction McAccordionItem({ className, ...props }: AccordionPrimitive.Item.Props) {\n return (\n \n );\n}\n\nfunction McAccordionTrigger({ className, children, ...props }: AccordionPrimitive.Trigger.Props) {\n return (\n \n \n {children}\n \n \n );\n}\n\nfunction McAccordionContent({ className, children, ...props }: AccordionPrimitive.Panel.Props) {\n return (\n \n \n {children}\n \n \n );\n}\n\nexport { McAccordion, McAccordionItem, McAccordionTrigger, McAccordionContent };\n", + "content": "import { Accordion as AccordionPrimitive } from '@base-ui/react/accordion';\r\nimport { ChevronDownIcon, ChevronUpIcon } from 'lucide-react';\r\n\r\nimport { cn } from '@/lib/utils';\r\n\r\nfunction McAccordion({ className, ...props }: AccordionPrimitive.Root.Props) {\r\n return (\r\n \r\n );\r\n}\r\n\r\nfunction McAccordionItem({ className, ...props }: AccordionPrimitive.Item.Props) {\r\n return (\r\n \r\n );\r\n}\r\n\r\nfunction McAccordionTrigger({ className, children, ...props }: AccordionPrimitive.Trigger.Props) {\r\n return (\r\n \r\n \r\n {children}\r\n \r\n \r\n );\r\n}\r\n\r\nfunction McAccordionContent({ className, children, ...props }: AccordionPrimitive.Panel.Props) {\r\n return (\r\n \r\n \r\n {children}\r\n \r\n \r\n );\r\n}\r\n\r\nexport { McAccordion, McAccordionItem, McAccordionTrigger, McAccordionContent };\r\n", "type": "registry:component" } ], diff --git a/packages/web/public/r/mc-alert-dialog.json b/packages/web/public/r/mc-alert-dialog.json index 4c290cf..5badbfc 100644 --- a/packages/web/public/r/mc-alert-dialog.json +++ b/packages/web/public/r/mc-alert-dialog.json @@ -7,7 +7,7 @@ "files": [ { "path": "registry/ui/mc-alert-dialog.tsx", - "content": "'use client';\n\nimport * as React from 'react';\nimport { AlertDialog as AlertDialogPrimitive } from '@base-ui/react/alert-dialog';\n\nimport { cn } from '@/lib/utils';\nimport { Button } from '@/components/ui/button';\n\nfunction McAlertDialog({ ...props }: AlertDialogPrimitive.Root.Props) {\n return ;\n}\n\nfunction McAlertDialogTrigger({ ...props }: AlertDialogPrimitive.Trigger.Props) {\n return ;\n}\n\nfunction McAlertDialogPortal({ ...props }: AlertDialogPrimitive.Portal.Props) {\n return ;\n}\n\nfunction McAlertDialogOverlay({ className, ...props }: AlertDialogPrimitive.Backdrop.Props) {\n return (\n \n );\n}\n\nfunction McAlertDialogContent({\n className,\n size = 'default',\n ...props\n}: AlertDialogPrimitive.Popup.Props & {\n size?: 'default' | 'sm';\n}) {\n return (\n \n \n \n \n );\n}\n\nfunction McAlertDialogFooter({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n \n );\n}\n\nfunction McAlertDialogHeader({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n \n );\n}\n\nfunction McAlertDialogMedia({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n \n );\n}\n\nfunction McAlertDialogTitle({\n className,\n media,\n icon,\n ...props\n}: React.ComponentProps & {\n media?: boolean;\n icon?: React.ReactNode;\n}) {\n return (\n \n {media && icon && {icon}}\n \n \n );\n}\n\nfunction McAlertDialogDescription({\n className,\n ...props\n}: React.ComponentProps) {\n return (\n \n );\n}\n\nfunction McAlertDialogAction({ className, ...props }: React.ComponentProps) {\n return