buildgrid-ui 1.1.0-alpha.4 → 1.1.0-dev.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (66) hide show
  1. package/.storybook/main.ts +24 -25
  2. package/CHANGELOG.md +17 -0
  3. package/dist/buildgrid-ui.es.js +5259 -891
  4. package/dist/buildgrid-ui.umd.js +91 -11
  5. package/dist/components/adaptative-input/adaptative-input.d.ts +9 -0
  6. package/dist/components/adaptative-input/index.d.ts +1 -0
  7. package/dist/components/autocomplete/autocomplete.d.ts +14 -0
  8. package/dist/components/autocomplete/index.d.ts +1 -0
  9. package/dist/components/avatar/avatar.d.ts +6 -0
  10. package/dist/components/avatar/index.d.ts +1 -0
  11. package/dist/components/badge/index.d.ts +1 -1
  12. package/dist/components/button/{Button.d.ts → button.d.ts} +4 -3
  13. package/dist/components/button/index.d.ts +1 -1
  14. package/dist/components/card/index.d.ts +1 -1
  15. package/dist/components/checkbox/checkbox.d.ts +4 -0
  16. package/dist/components/checkbox/index.d.ts +1 -0
  17. package/dist/components/dropdown-menu/dropdown-menu.d.ts +27 -0
  18. package/dist/components/dropdown-menu/index.d.ts +1 -0
  19. package/dist/components/index.d.ts +7 -0
  20. package/dist/components/input/index.d.ts +1 -0
  21. package/dist/components/input/input.d.ts +9 -0
  22. package/dist/components/popover/index.d.ts +1 -0
  23. package/dist/components/popover/popover.d.ts +7 -0
  24. package/dist/components/skeleton/index.d.ts +1 -1
  25. package/dist/index.d.ts +7 -0
  26. package/package.json +7 -2
  27. package/src/components/adaptative-input/adaptative-input.stories.tsx +30 -0
  28. package/src/components/adaptative-input/adaptative-input.tsx +66 -0
  29. package/src/components/adaptative-input/index.ts +1 -0
  30. package/src/components/autocomplete/autocomplete.stories.tsx +85 -0
  31. package/src/components/autocomplete/autocomplete.tsx +136 -0
  32. package/src/components/autocomplete/index.ts +1 -0
  33. package/src/components/avatar/avatar.stories.tsx +29 -0
  34. package/src/components/avatar/avatar.tsx +48 -0
  35. package/src/components/avatar/index.ts +1 -0
  36. package/src/components/badge/{Badge.stories.tsx → badge.stories.tsx} +1 -1
  37. package/src/components/badge/index.ts +1 -1
  38. package/src/components/button/button.stories.tsx +62 -0
  39. package/src/components/button/button.tsx +82 -0
  40. package/src/components/button/index.ts +1 -1
  41. package/src/components/card/{Card.stories.tsx → card.stories.tsx} +1 -1
  42. package/src/components/card/index.ts +1 -1
  43. package/src/components/checkbox/checkbox.stories.tsx +36 -0
  44. package/src/components/checkbox/checkbox.tsx +28 -0
  45. package/src/components/checkbox/index.ts +1 -0
  46. package/src/components/dropdown-menu/dropdown-menu.stories.tsx +90 -0
  47. package/src/components/dropdown-menu/dropdown-menu.tsx +192 -0
  48. package/src/components/dropdown-menu/index.ts +1 -0
  49. package/src/components/index.ts +7 -0
  50. package/src/components/input/index.ts +1 -0
  51. package/src/components/input/input.stories.tsx +22 -0
  52. package/src/components/input/input.tsx +41 -0
  53. package/src/components/popover/index.ts +1 -0
  54. package/src/components/popover/popover.stories.tsx +32 -0
  55. package/src/components/popover/popover.tsx +30 -0
  56. package/src/components/skeleton/index.ts +1 -1
  57. package/src/index.ts +7 -0
  58. package/src/components/button/Button.stories.tsx +0 -40
  59. package/src/components/button/Button.tsx +0 -57
  60. /package/dist/components/badge/{Badge.d.ts → badge.d.ts} +0 -0
  61. /package/dist/components/card/{Card.d.ts → card.d.ts} +0 -0
  62. /package/dist/components/skeleton/{Skeleton.d.ts → skeleton.d.ts} +0 -0
  63. /package/src/components/badge/{Badge.tsx → badge.tsx} +0 -0
  64. /package/src/components/card/{Card.tsx → card.tsx} +0 -0
  65. /package/src/components/skeleton/{Skeleton.stories.tsx → skeleton.stories.tsx} +0 -0
  66. /package/src/components/skeleton/{Skeleton.tsx → skeleton.tsx} +0 -0
@@ -0,0 +1,62 @@
1
+ // organize-imports-ignore
2
+ import React from 'react'
3
+ import type { Meta, StoryObj } from '@storybook/react'
4
+ import { Button, ButtonProps } from './button'
5
+
6
+ const meta: Meta<typeof Button> = {
7
+ component: Button,
8
+ }
9
+
10
+ export default meta
11
+ type Story = StoryObj<typeof Button>
12
+
13
+ const variants: Array<ButtonProps['variant']> = [
14
+ 'default',
15
+ 'secondary',
16
+ 'destructive',
17
+ 'outline',
18
+ 'ghost',
19
+ 'link',
20
+ ]
21
+
22
+ const Template = (args: ButtonProps) => {
23
+ return (
24
+ <div className="flex gap-2 flex-wrap">
25
+ {Object.values(variants).map((variant) => (
26
+ <Button
27
+ {...args}
28
+ variant={variant as ButtonProps['variant']}
29
+ className="capitalize"
30
+ >
31
+ {variant}
32
+ </Button>
33
+ ))}
34
+ </div>
35
+ )
36
+ }
37
+
38
+ export const Default: Story = {
39
+ render: Template.bind({}),
40
+ args: {},
41
+ }
42
+
43
+ const TemplateIsLoading = () => {
44
+ return (
45
+ <div className="flex gap-2 flex-wrap">
46
+ {Object.values(variants).map((variant) => (
47
+ <Button
48
+ isLoading
49
+ variant={variant as ButtonProps['variant']}
50
+ className="capitalize"
51
+ >
52
+ {variant}
53
+ </Button>
54
+ ))}
55
+ </div>
56
+ )
57
+ }
58
+
59
+ export const Loading: Story = {
60
+ render: TemplateIsLoading.bind({}),
61
+ args: {},
62
+ }
@@ -0,0 +1,82 @@
1
+ import { Slot } from '@radix-ui/react-slot'
2
+ import { cva, type VariantProps } from 'class-variance-authority'
3
+ import * as React from 'react'
4
+ import { cn } from '../../lib/utils/cn'
5
+
6
+ const buttonVariants = cva(
7
+ 'inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md 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 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0',
8
+ {
9
+ variants: {
10
+ variant: {
11
+ default: 'bg-primary text-primary-foreground shadow hover:bg-primary/90',
12
+ destructive:
13
+ 'bg-destructive text-destructive-foreground shadow-sm hover:bg-destructive/90',
14
+ outline:
15
+ 'border border-input bg-background shadow-sm hover:bg-accent hover:text-accent-foreground',
16
+ secondary:
17
+ 'bg-secondary text-secondary-foreground shadow-sm hover:bg-secondary/80',
18
+ ghost: 'hover:bg-accent hover:text-accent-foreground',
19
+ link: 'text-primary underline-offset-4 hover:underline',
20
+ },
21
+ size: {
22
+ default: 'h-9 px-4 py-2',
23
+ sm: 'h-8 rounded-md px-3 text-xs',
24
+ lg: 'h-10 rounded-md px-8',
25
+ xl: 'h-12 rounded-md px-10 text-xl',
26
+ icon: 'h-9 w-9',
27
+ },
28
+ },
29
+ defaultVariants: {
30
+ variant: 'default',
31
+ size: 'default',
32
+ },
33
+ },
34
+ )
35
+
36
+ export interface ButtonProps
37
+ extends React.ButtonHTMLAttributes<HTMLButtonElement>,
38
+ VariantProps<typeof buttonVariants> {
39
+ isLoading?: boolean
40
+ asChild?: boolean
41
+ }
42
+
43
+ const Button = React.forwardRef<HTMLButtonElement, ButtonProps>(
44
+ ({ className, variant, size, isLoading = false, asChild = false, ...props }, ref) => {
45
+ const Comp = asChild ? Slot : 'button'
46
+ return (
47
+ <Comp
48
+ className={cn(buttonVariants({ variant, size, className }))}
49
+ ref={ref}
50
+ {...props}
51
+ disabled={isLoading || props.disabled}
52
+ >
53
+ {isLoading && (
54
+ <svg
55
+ className="animate-spin -ml-1 h-5 w-5"
56
+ xmlns="http://www.w3.org/2000/svg"
57
+ fill="none"
58
+ viewBox="0 0 24 24"
59
+ >
60
+ <circle
61
+ className="opacity-25"
62
+ cx="12"
63
+ cy="12"
64
+ r="10"
65
+ stroke="currentColor"
66
+ strokeWidth="4"
67
+ />
68
+ <path
69
+ className="opacity-75"
70
+ fill="currentColor"
71
+ d="M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z"
72
+ />
73
+ </svg>
74
+ )}
75
+ {props.children}
76
+ </Comp>
77
+ )
78
+ },
79
+ )
80
+ Button.displayName = 'Button'
81
+
82
+ export { Button, buttonVariants }
@@ -1 +1 @@
1
- export * from "./Button";
1
+ export * from './button'
@@ -9,7 +9,7 @@ import {
9
9
  CardHeader,
10
10
  CardTitle,
11
11
  } from './Card'
12
- import { Button } from '../button/Button'
12
+ import { Button } from '../button/button'
13
13
 
14
14
  const meta: Meta<typeof Card> = {
15
15
  component: Card,
@@ -1 +1 @@
1
- export * from './Card'
1
+ export * from './card'
@@ -0,0 +1,36 @@
1
+ // organize-imports-ignore
2
+ import React from 'react'
3
+ import type { Meta, StoryObj } from '@storybook/react'
4
+
5
+ import { Checkbox } from './checkbox'
6
+
7
+ const meta: Meta<typeof Checkbox> = {
8
+ component: Checkbox,
9
+ }
10
+
11
+ export default meta
12
+ type Story = StoryObj<typeof Checkbox>
13
+
14
+ const Template = () => {
15
+ return (
16
+ <div className="items-top flex space-x-2">
17
+ <Checkbox id="terms1" />
18
+ <div className="grid gap-1.5 leading-none">
19
+ <label
20
+ htmlFor="terms1"
21
+ className="text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70"
22
+ >
23
+ Accept terms and conditions
24
+ </label>
25
+ <p className="text-sm text-muted-foreground">
26
+ You agree to our Terms of Service and Privacy Policy.
27
+ </p>
28
+ </div>
29
+ </div>
30
+ )
31
+ }
32
+
33
+ export const Default: Story = {
34
+ render: Template.bind({}),
35
+ args: {},
36
+ }
@@ -0,0 +1,28 @@
1
+ import * as CheckboxPrimitive from '@radix-ui/react-checkbox'
2
+ import { Check } from 'lucide-react'
3
+ import * as React from 'react'
4
+
5
+ import { cn } from '@/lib/utils/cn'
6
+
7
+ const Checkbox = React.forwardRef<
8
+ React.ElementRef<typeof CheckboxPrimitive.Root>,
9
+ React.ComponentPropsWithoutRef<typeof CheckboxPrimitive.Root>
10
+ >(({ className, ...props }, ref) => (
11
+ <CheckboxPrimitive.Root
12
+ ref={ref}
13
+ className={cn(
14
+ 'peer h-4 w-4 shrink-0 rounded-sm border border-primary shadow focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:cursor-not-allowed disabled:opacity-50 data-[state=checked]:bg-primary data-[state=checked]:text-primary-foreground',
15
+ className,
16
+ )}
17
+ {...props}
18
+ >
19
+ <CheckboxPrimitive.Indicator
20
+ className={cn('flex items-center justify-center text-current')}
21
+ >
22
+ <Check className="h-4 w-4" />
23
+ </CheckboxPrimitive.Indicator>
24
+ </CheckboxPrimitive.Root>
25
+ ))
26
+ Checkbox.displayName = CheckboxPrimitive.Root.displayName
27
+
28
+ export { Checkbox }
@@ -0,0 +1 @@
1
+ export * from './checkbox'
@@ -0,0 +1,90 @@
1
+ // organize-imports-ignore
2
+ import React from 'react'
3
+ import type { Meta, StoryObj } from '@storybook/react'
4
+
5
+ import {
6
+ DropdownMenu,
7
+ DropdownMenuContent,
8
+ DropdownMenuItem,
9
+ DropdownMenuLabel,
10
+ DropdownMenuPortal,
11
+ DropdownMenuSeparator,
12
+ DropdownMenuSub,
13
+ DropdownMenuSubContent,
14
+ DropdownMenuSubTrigger,
15
+ DropdownMenuTrigger,
16
+ } from './dropdown-menu'
17
+ import { Button } from '../button/button'
18
+ import {
19
+ Key,
20
+ Mail,
21
+ MessageSquare,
22
+ Pencil,
23
+ PlusCircle,
24
+ Settings2,
25
+ Trash,
26
+ UserPlus,
27
+ } from 'lucide-react'
28
+
29
+ const meta: Meta<typeof DropdownMenu> = {
30
+ component: DropdownMenu,
31
+ }
32
+
33
+ export default meta
34
+ type Story = StoryObj<typeof DropdownMenu>
35
+
36
+ const Template = () => {
37
+ return (
38
+ <DropdownMenu>
39
+ <DropdownMenuTrigger asChild>
40
+ <Button variant="outline" size="icon">
41
+ <Settings2 className="w-6 h-6" />
42
+ <span className="sr-only">Open settings</span>
43
+ </Button>
44
+ </DropdownMenuTrigger>
45
+ <DropdownMenuContent align="end">
46
+ <DropdownMenuLabel>Jhon Doe</DropdownMenuLabel>
47
+ <DropdownMenuSeparator />
48
+ <DropdownMenuItem>
49
+ <Pencil /> Edit
50
+ </DropdownMenuItem>
51
+ <DropdownMenuItem>
52
+ <Trash /> Delete
53
+ </DropdownMenuItem>
54
+ <DropdownMenuSeparator />
55
+ <DropdownMenuItem>
56
+ <Key /> Send password reset
57
+ </DropdownMenuItem>
58
+ <DropdownMenuSeparator />
59
+ <DropdownMenuSub>
60
+ <DropdownMenuSubTrigger>
61
+ <UserPlus />
62
+ <span>Invite users</span>
63
+ </DropdownMenuSubTrigger>
64
+ <DropdownMenuPortal>
65
+ <DropdownMenuSubContent>
66
+ <DropdownMenuItem>
67
+ <Mail />
68
+ <span>Email</span>
69
+ </DropdownMenuItem>
70
+ <DropdownMenuItem>
71
+ <MessageSquare />
72
+ <span>Message</span>
73
+ </DropdownMenuItem>
74
+ <DropdownMenuSeparator />
75
+ <DropdownMenuItem>
76
+ <PlusCircle />
77
+ <span>More...</span>
78
+ </DropdownMenuItem>
79
+ </DropdownMenuSubContent>
80
+ </DropdownMenuPortal>
81
+ </DropdownMenuSub>
82
+ </DropdownMenuContent>
83
+ </DropdownMenu>
84
+ )
85
+ }
86
+
87
+ export const Default: Story = {
88
+ render: Template.bind({}),
89
+ args: {},
90
+ }
@@ -0,0 +1,192 @@
1
+ import * as DropdownMenuPrimitive from '@radix-ui/react-dropdown-menu'
2
+ import { Check, ChevronRight, Circle } from 'lucide-react'
3
+ import * as React from 'react'
4
+
5
+ import { cn } from '@/lib/utils/cn'
6
+
7
+ const DropdownMenu = DropdownMenuPrimitive.Root
8
+
9
+ const DropdownMenuTrigger = DropdownMenuPrimitive.Trigger
10
+
11
+ const DropdownMenuGroup = DropdownMenuPrimitive.Group
12
+
13
+ const DropdownMenuPortal = DropdownMenuPrimitive.Portal
14
+
15
+ const DropdownMenuSub = DropdownMenuPrimitive.Sub
16
+
17
+ const DropdownMenuRadioGroup = DropdownMenuPrimitive.RadioGroup
18
+
19
+ const DropdownMenuSubTrigger = React.forwardRef<
20
+ React.ElementRef<typeof DropdownMenuPrimitive.SubTrigger>,
21
+ React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.SubTrigger> & {
22
+ inset?: boolean
23
+ }
24
+ >(({ className, inset, children, ...props }, ref) => (
25
+ <DropdownMenuPrimitive.SubTrigger
26
+ ref={ref}
27
+ className={cn(
28
+ 'flex cursor-default gap-2 select-none items-center rounded-sm px-2 py-1.5 text-sm outline-none focus:bg-accent data-[state=open]:bg-accent [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0',
29
+ inset && 'pl-8',
30
+ className,
31
+ )}
32
+ {...props}
33
+ >
34
+ {children}
35
+ <ChevronRight className="ml-auto" />
36
+ </DropdownMenuPrimitive.SubTrigger>
37
+ ))
38
+ DropdownMenuSubTrigger.displayName = DropdownMenuPrimitive.SubTrigger.displayName
39
+
40
+ const DropdownMenuSubContent = React.forwardRef<
41
+ React.ElementRef<typeof DropdownMenuPrimitive.SubContent>,
42
+ React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.SubContent>
43
+ >(({ className, ...props }, ref) => (
44
+ <DropdownMenuPrimitive.SubContent
45
+ ref={ref}
46
+ className={cn(
47
+ 'z-50 min-w-[8rem] overflow-hidden rounded-md border bg-popover p-1 text-popover-foreground shadow-lg 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',
48
+ className,
49
+ )}
50
+ {...props}
51
+ />
52
+ ))
53
+ DropdownMenuSubContent.displayName = DropdownMenuPrimitive.SubContent.displayName
54
+
55
+ const DropdownMenuContent = React.forwardRef<
56
+ React.ElementRef<typeof DropdownMenuPrimitive.Content>,
57
+ React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Content>
58
+ >(({ className, sideOffset = 4, ...props }, ref) => (
59
+ <DropdownMenuPrimitive.Portal>
60
+ <DropdownMenuPrimitive.Content
61
+ ref={ref}
62
+ sideOffset={sideOffset}
63
+ className={cn(
64
+ 'z-50 min-w-[8rem] overflow-hidden rounded-md border bg-popover p-1 text-popover-foreground shadow-md',
65
+ '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',
66
+ className,
67
+ )}
68
+ {...props}
69
+ />
70
+ </DropdownMenuPrimitive.Portal>
71
+ ))
72
+ DropdownMenuContent.displayName = DropdownMenuPrimitive.Content.displayName
73
+
74
+ const DropdownMenuItem = React.forwardRef<
75
+ React.ElementRef<typeof DropdownMenuPrimitive.Item>,
76
+ React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Item> & {
77
+ inset?: boolean
78
+ }
79
+ >(({ className, inset, ...props }, ref) => (
80
+ <DropdownMenuPrimitive.Item
81
+ ref={ref}
82
+ className={cn(
83
+ 'relative flex cursor-default select-none items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-none transition-colors focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&>svg]:size-4 [&>svg]:shrink-0',
84
+ inset && 'pl-8',
85
+ className,
86
+ )}
87
+ {...props}
88
+ />
89
+ ))
90
+ DropdownMenuItem.displayName = DropdownMenuPrimitive.Item.displayName
91
+
92
+ const DropdownMenuCheckboxItem = React.forwardRef<
93
+ React.ElementRef<typeof DropdownMenuPrimitive.CheckboxItem>,
94
+ React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.CheckboxItem>
95
+ >(({ className, children, checked, ...props }, ref) => (
96
+ <DropdownMenuPrimitive.CheckboxItem
97
+ ref={ref}
98
+ className={cn(
99
+ 'relative flex cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none transition-colors focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50',
100
+ className,
101
+ )}
102
+ checked={checked}
103
+ {...props}
104
+ >
105
+ <span className="absolute left-2 flex h-3.5 w-3.5 items-center justify-center">
106
+ <DropdownMenuPrimitive.ItemIndicator>
107
+ <Check className="h-4 w-4" />
108
+ </DropdownMenuPrimitive.ItemIndicator>
109
+ </span>
110
+ {children}
111
+ </DropdownMenuPrimitive.CheckboxItem>
112
+ ))
113
+ DropdownMenuCheckboxItem.displayName = DropdownMenuPrimitive.CheckboxItem.displayName
114
+
115
+ const DropdownMenuRadioItem = React.forwardRef<
116
+ React.ElementRef<typeof DropdownMenuPrimitive.RadioItem>,
117
+ React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.RadioItem>
118
+ >(({ className, children, ...props }, ref) => (
119
+ <DropdownMenuPrimitive.RadioItem
120
+ ref={ref}
121
+ className={cn(
122
+ 'relative flex cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none transition-colors focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50',
123
+ className,
124
+ )}
125
+ {...props}
126
+ >
127
+ <span className="absolute left-2 flex h-3.5 w-3.5 items-center justify-center">
128
+ <DropdownMenuPrimitive.ItemIndicator>
129
+ <Circle className="h-2 w-2 fill-current" />
130
+ </DropdownMenuPrimitive.ItemIndicator>
131
+ </span>
132
+ {children}
133
+ </DropdownMenuPrimitive.RadioItem>
134
+ ))
135
+ DropdownMenuRadioItem.displayName = DropdownMenuPrimitive.RadioItem.displayName
136
+
137
+ const DropdownMenuLabel = React.forwardRef<
138
+ React.ElementRef<typeof DropdownMenuPrimitive.Label>,
139
+ React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Label> & {
140
+ inset?: boolean
141
+ }
142
+ >(({ className, inset, ...props }, ref) => (
143
+ <DropdownMenuPrimitive.Label
144
+ ref={ref}
145
+ className={cn('px-2 py-1.5 text-sm font-semibold', inset && 'pl-8', className)}
146
+ {...props}
147
+ />
148
+ ))
149
+ DropdownMenuLabel.displayName = DropdownMenuPrimitive.Label.displayName
150
+
151
+ const DropdownMenuSeparator = React.forwardRef<
152
+ React.ElementRef<typeof DropdownMenuPrimitive.Separator>,
153
+ React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Separator>
154
+ >(({ className, ...props }, ref) => (
155
+ <DropdownMenuPrimitive.Separator
156
+ ref={ref}
157
+ className={cn('-mx-1 my-1 h-px bg-muted', className)}
158
+ {...props}
159
+ />
160
+ ))
161
+ DropdownMenuSeparator.displayName = DropdownMenuPrimitive.Separator.displayName
162
+
163
+ const DropdownMenuShortcut = ({
164
+ className,
165
+ ...props
166
+ }: React.HTMLAttributes<HTMLSpanElement>) => {
167
+ return (
168
+ <span
169
+ className={cn('ml-auto text-xs tracking-widest opacity-60', className)}
170
+ {...props}
171
+ />
172
+ )
173
+ }
174
+ DropdownMenuShortcut.displayName = 'DropdownMenuShortcut'
175
+
176
+ export {
177
+ DropdownMenu,
178
+ DropdownMenuCheckboxItem,
179
+ DropdownMenuContent,
180
+ DropdownMenuGroup,
181
+ DropdownMenuItem,
182
+ DropdownMenuLabel,
183
+ DropdownMenuPortal,
184
+ DropdownMenuRadioGroup,
185
+ DropdownMenuRadioItem,
186
+ DropdownMenuSeparator,
187
+ DropdownMenuShortcut,
188
+ DropdownMenuSub,
189
+ DropdownMenuSubContent,
190
+ DropdownMenuSubTrigger,
191
+ DropdownMenuTrigger,
192
+ }
@@ -0,0 +1 @@
1
+ export * from './dropdown-menu'
@@ -1,4 +1,11 @@
1
+ export * from './adaptative-input'
2
+ export * from './autocomplete'
3
+ export * from './avatar'
1
4
  export * from './badge'
2
5
  export * from './button'
3
6
  export * from './card'
7
+ export * from './checkbox'
8
+ export * from './dropdown-menu'
9
+ export * from './input'
10
+ export * from './popover'
4
11
  export * from './skeleton'
@@ -0,0 +1 @@
1
+ export * from './input'
@@ -0,0 +1,22 @@
1
+ // organize-imports-ignore
2
+ import React from 'react'
3
+ import type { Meta, StoryObj } from '@storybook/react'
4
+
5
+ import { Input } from './input'
6
+
7
+ const meta: Meta<typeof Input> = {
8
+ title: 'Components/Input/Simple',
9
+ component: Input,
10
+ }
11
+
12
+ export default meta
13
+ type Story = StoryObj<typeof Input>
14
+
15
+ const Template = () => {
16
+ return <Input className="w-64" />
17
+ }
18
+
19
+ export const Default: Story = {
20
+ render: Template.bind({}),
21
+ args: {},
22
+ }
@@ -0,0 +1,41 @@
1
+ import { cn } from '@/lib/utils/cn'
2
+ import { cva, VariantProps } from 'class-variance-authority'
3
+ import * as React from 'react'
4
+
5
+ const inputVariants = cva(
6
+ 'flex h-9 w-full rounded-md border border-input bg-transparent px-3 py-1 text-base shadow-sm transition-colors file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-foreground placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:cursor-not-allowed disabled:opacity-50',
7
+ {
8
+ variants: {
9
+ sizing: {
10
+ sm: 'h-8 text-xs px-2',
11
+ md: 'h-10 text-sm px-3',
12
+ lg: 'h-12 text-base px-4',
13
+ xl: 'h-14 text-lg px-5',
14
+ '2xl': 'h-16 text-xl px-6',
15
+ },
16
+ },
17
+ defaultVariants: {
18
+ sizing: 'md',
19
+ },
20
+ },
21
+ )
22
+
23
+ export interface InputProps
24
+ extends React.InputHTMLAttributes<HTMLInputElement>,
25
+ VariantProps<typeof inputVariants> {}
26
+
27
+ const Input = React.forwardRef<HTMLInputElement, InputProps>(
28
+ ({ className, sizing, type, ...props }, ref) => {
29
+ return (
30
+ <input
31
+ type={type}
32
+ className={cn(inputVariants({ sizing, className }))}
33
+ ref={ref}
34
+ {...props}
35
+ />
36
+ )
37
+ },
38
+ )
39
+ Input.displayName = 'Input'
40
+
41
+ export { Input }
@@ -0,0 +1 @@
1
+ export * from './popover'
@@ -0,0 +1,32 @@
1
+ // organize-imports-ignore
2
+ import React from 'react'
3
+ import type { Meta, StoryObj } from '@storybook/react'
4
+
5
+ import { Popover, PopoverContent, PopoverTrigger } from './popover'
6
+ import { Button } from '../button/button'
7
+
8
+ const meta: Meta<typeof Popover> = {
9
+ component: Popover,
10
+ }
11
+
12
+ export default meta
13
+ type Story = StoryObj<typeof Popover>
14
+
15
+ const Template = () => {
16
+ const variants = ['default', 'secondary', 'destructive', 'outline']
17
+ return (
18
+ <Popover>
19
+ <PopoverTrigger asChild>
20
+ <Button variant="outline">Open popover</Button>
21
+ </PopoverTrigger>
22
+ <PopoverContent className="w-80">
23
+ <div className="bg-gray-200 p-6 w-full h-20">Popover content</div>
24
+ </PopoverContent>
25
+ </Popover>
26
+ )
27
+ }
28
+
29
+ export const Default: Story = {
30
+ render: Template.bind({}),
31
+ args: {},
32
+ }
@@ -0,0 +1,30 @@
1
+ import { cn } from '@/lib'
2
+ import * as PopoverPrimitive from '@radix-ui/react-popover'
3
+ import * as React from 'react'
4
+
5
+ const Popover = PopoverPrimitive.Root
6
+
7
+ const PopoverTrigger = PopoverPrimitive.Trigger
8
+
9
+ const PopoverAnchor = PopoverPrimitive.Anchor
10
+
11
+ const PopoverContent = React.forwardRef<
12
+ React.ElementRef<typeof PopoverPrimitive.Content>,
13
+ React.ComponentPropsWithoutRef<typeof PopoverPrimitive.Content>
14
+ >(({ className, align = 'center', sideOffset = 4, ...props }, ref) => (
15
+ <PopoverPrimitive.Portal>
16
+ <PopoverPrimitive.Content
17
+ ref={ref}
18
+ align={align}
19
+ sideOffset={sideOffset}
20
+ className={cn(
21
+ 'z-50 w-72 rounded-md border bg-popover p-4 text-popover-foreground shadow-md outline-none 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',
22
+ className,
23
+ )}
24
+ {...props}
25
+ />
26
+ </PopoverPrimitive.Portal>
27
+ ))
28
+ PopoverContent.displayName = PopoverPrimitive.Content.displayName
29
+
30
+ export { Popover, PopoverAnchor, PopoverContent, PopoverTrigger }
@@ -1 +1 @@
1
- export * from './Skeleton'
1
+ export * from './skeleton'
package/src/index.ts CHANGED
@@ -1,5 +1,12 @@
1
+ export * from './components/adaptative-input'
2
+ export * from './components/autocomplete'
3
+ export * from './components/avatar'
1
4
  export * from './components/badge'
2
5
  export * from './components/button'
3
6
  export * from './components/card'
7
+ export * from './components/checkbox'
8
+ export * from './components/dropdown-menu'
9
+ export * from './components/input'
10
+ export * from './components/popover'
4
11
  export * from './components/skeleton'
5
12
  export * from './lib/utils/cn'