@blips/ui 1.0.1 → 2.0.0

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 (59) hide show
  1. package/dist/index.cjs +3612 -2515
  2. package/dist/index.cjs.map +1 -1
  3. package/dist/index.d.cts +329 -484
  4. package/dist/index.d.ts +329 -484
  5. package/dist/index.js +3602 -2513
  6. package/dist/index.js.map +1 -1
  7. package/package.json +14 -12
  8. package/src/components/accordion.tsx +56 -46
  9. package/src/components/alert-dialog.tsx +166 -109
  10. package/src/components/alert.tsx +45 -38
  11. package/src/components/aspect-ratio.tsx +7 -1
  12. package/src/components/avatar.tsx +104 -45
  13. package/src/components/badge.tsx +25 -13
  14. package/src/components/breadcrumb.tsx +76 -82
  15. package/src/components/button-group.tsx +2 -2
  16. package/src/components/button.tsx +36 -28
  17. package/src/components/calendar.tsx +35 -28
  18. package/src/components/card.tsx +83 -70
  19. package/src/components/carousel.tsx +118 -137
  20. package/src/components/chart.tsx +197 -208
  21. package/src/components/checkbox.tsx +25 -21
  22. package/src/components/collapsible.tsx +25 -3
  23. package/src/components/command.tsx +138 -105
  24. package/src/components/context-menu.tsx +215 -161
  25. package/src/components/dialog.tsx +127 -91
  26. package/src/components/drawer.tsx +102 -83
  27. package/src/components/dropdown-menu.tsx +227 -170
  28. package/src/components/form.tsx +41 -52
  29. package/src/components/hover-card.tsx +36 -19
  30. package/src/components/input-group.tsx +4 -4
  31. package/src/components/input-otp.tsx +51 -43
  32. package/src/components/input.tsx +16 -17
  33. package/src/components/kbd.tsx +1 -1
  34. package/src/components/label.tsx +16 -18
  35. package/src/components/menubar.tsx +214 -192
  36. package/src/components/navigation-menu.tsx +140 -98
  37. package/src/components/pagination.tsx +97 -87
  38. package/src/components/popover.tsx +83 -23
  39. package/src/components/progress.tsx +23 -20
  40. package/src/components/radio-group.tsx +23 -20
  41. package/src/components/resizable.tsx +39 -31
  42. package/src/components/scroll-area.tsx +51 -39
  43. package/src/components/select.tsx +161 -131
  44. package/src/components/separator.tsx +13 -14
  45. package/src/components/sheet.tsx +112 -109
  46. package/src/components/sidebar.tsx +422 -470
  47. package/src/components/skeleton.tsx +4 -6
  48. package/src/components/slider.tsx +57 -20
  49. package/src/components/sonner.tsx +19 -24
  50. package/src/components/spinner.tsx +3 -3
  51. package/src/components/switch.tsx +28 -20
  52. package/src/components/table.tsx +94 -95
  53. package/src/components/tabs.tsx +88 -50
  54. package/src/components/textarea.tsx +5 -9
  55. package/src/components/toggle-group.tsx +52 -30
  56. package/src/components/toggle.tsx +24 -20
  57. package/src/components/tooltip.tsx +46 -19
  58. package/src/globals.css +213 -96
  59. package/src/index.ts +27 -6
@@ -1,229 +1,206 @@
1
+ "use client"
2
+
1
3
  import * as React from "react"
4
+ import { Check, CaretRight, Circle } from "@phosphor-icons/react"
2
5
  import * as MenubarPrimitive from "@radix-ui/react-menubar"
3
- import { Check, ChevronRight, Circle } from "lucide-react"
4
6
 
5
- import { cn } from "@/lib/utils"
7
+ import { cn } from "../lib/utils"
8
+
9
+ function Menubar({
10
+ className,
11
+ ...props
12
+ }: React.ComponentProps<typeof MenubarPrimitive.Root>) {
13
+ return (
14
+ <MenubarPrimitive.Root
15
+ data-slot="menubar"
16
+ className={cn(
17
+ "flex h-9 items-center gap-1 rounded-md border bg-background p-1 shadow-xs",
18
+ className
19
+ )}
20
+ {...props}
21
+ />
22
+ )
23
+ }
6
24
 
7
25
  function MenubarMenu({
8
26
  ...props
9
27
  }: React.ComponentProps<typeof MenubarPrimitive.Menu>) {
10
- return <MenubarPrimitive.Menu {...props} />
28
+ return <MenubarPrimitive.Menu data-slot="menubar-menu" {...props} />
11
29
  }
12
30
 
13
31
  function MenubarGroup({
14
32
  ...props
15
33
  }: React.ComponentProps<typeof MenubarPrimitive.Group>) {
16
- return <MenubarPrimitive.Group {...props} />
34
+ return <MenubarPrimitive.Group data-slot="menubar-group" {...props} />
17
35
  }
18
36
 
19
37
  function MenubarPortal({
20
38
  ...props
21
39
  }: React.ComponentProps<typeof MenubarPrimitive.Portal>) {
22
- return <MenubarPrimitive.Portal {...props} />
40
+ return <MenubarPrimitive.Portal data-slot="menubar-portal" {...props} />
23
41
  }
24
42
 
25
43
  function MenubarRadioGroup({
26
44
  ...props
27
45
  }: React.ComponentProps<typeof MenubarPrimitive.RadioGroup>) {
28
- return <MenubarPrimitive.RadioGroup {...props} />
46
+ return (
47
+ <MenubarPrimitive.RadioGroup data-slot="menubar-radio-group" {...props} />
48
+ )
29
49
  }
30
50
 
31
- function MenubarSub({
51
+ function MenubarTrigger({
52
+ className,
32
53
  ...props
33
- }: React.ComponentProps<typeof MenubarPrimitive.Sub>) {
34
- return <MenubarPrimitive.Sub data-slot="menubar-sub" {...props} />
54
+ }: React.ComponentProps<typeof MenubarPrimitive.Trigger>) {
55
+ return (
56
+ <MenubarPrimitive.Trigger
57
+ data-slot="menubar-trigger"
58
+ className={cn(
59
+ "flex items-center rounded-sm px-2 py-1 text-sm font-medium outline-hidden select-none focus:bg-accent focus:text-accent-foreground data-[state=open]:bg-accent data-[state=open]:text-accent-foreground",
60
+ className
61
+ )}
62
+ {...props}
63
+ />
64
+ )
35
65
  }
36
66
 
37
- const Menubar = React.forwardRef<
38
- React.ElementRef<typeof MenubarPrimitive.Root>,
39
- React.ComponentPropsWithoutRef<typeof MenubarPrimitive.Root>
40
- >(({ className, ...props }, ref) => (
41
- <MenubarPrimitive.Root
42
- ref={ref}
43
- className={cn(
44
- "flex h-10 items-center space-x-1 rounded-md border bg-background p-1",
45
- className
46
- )}
47
- {...props}
48
- />
49
- ))
50
- Menubar.displayName = MenubarPrimitive.Root.displayName
51
-
52
- const MenubarTrigger = React.forwardRef<
53
- React.ElementRef<typeof MenubarPrimitive.Trigger>,
54
- React.ComponentPropsWithoutRef<typeof MenubarPrimitive.Trigger>
55
- >(({ className, ...props }, ref) => (
56
- <MenubarPrimitive.Trigger
57
- ref={ref}
58
- className={cn(
59
- "flex cursor-default select-none items-center rounded-sm px-3 py-1.5 text-sm font-medium outline-none focus:bg-accent focus:text-accent-foreground data-[state=open]:bg-accent data-[state=open]:text-accent-foreground",
60
- className
61
- )}
62
- {...props}
63
- />
64
- ))
65
- MenubarTrigger.displayName = MenubarPrimitive.Trigger.displayName
66
-
67
- const MenubarSubTrigger = React.forwardRef<
68
- React.ElementRef<typeof MenubarPrimitive.SubTrigger>,
69
- React.ComponentPropsWithoutRef<typeof MenubarPrimitive.SubTrigger> & {
70
- inset?: boolean
71
- }
72
- >(({ className, inset, children, ...props }, ref) => (
73
- <MenubarPrimitive.SubTrigger
74
- ref={ref}
75
- className={cn(
76
- "flex cursor-default select-none items-center rounded-sm px-2 py-1.5 text-sm outline-none focus:bg-accent focus:text-accent-foreground data-[state=open]:bg-accent data-[state=open]:text-accent-foreground",
77
- inset && "pl-8",
78
- className
79
- )}
80
- {...props}
81
- >
82
- {children}
83
- <ChevronRight className="ml-auto h-4 w-4" />
84
- </MenubarPrimitive.SubTrigger>
85
- ))
86
- MenubarSubTrigger.displayName = MenubarPrimitive.SubTrigger.displayName
87
-
88
- const MenubarSubContent = React.forwardRef<
89
- React.ElementRef<typeof MenubarPrimitive.SubContent>,
90
- React.ComponentPropsWithoutRef<typeof MenubarPrimitive.SubContent>
91
- >(({ className, ...props }, ref) => (
92
- <MenubarPrimitive.SubContent
93
- ref={ref}
94
- className={cn(
95
- "z-50 min-w-[8rem] overflow-hidden rounded-md border bg-popover p-1 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 origin-[--radix-menubar-content-transform-origin]",
96
- className
97
- )}
98
- {...props}
99
- />
100
- ))
101
- MenubarSubContent.displayName = MenubarPrimitive.SubContent.displayName
102
-
103
- const MenubarContent = React.forwardRef<
104
- React.ElementRef<typeof MenubarPrimitive.Content>,
105
- React.ComponentPropsWithoutRef<typeof MenubarPrimitive.Content>
106
- >(
107
- (
108
- { className, align = "start", alignOffset = -4, sideOffset = 8, ...props },
109
- ref
110
- ) => (
111
- <MenubarPrimitive.Portal>
67
+ function MenubarContent({
68
+ className,
69
+ align = "start",
70
+ alignOffset = -4,
71
+ sideOffset = 8,
72
+ ...props
73
+ }: React.ComponentProps<typeof MenubarPrimitive.Content>) {
74
+ return (
75
+ <MenubarPortal>
112
76
  <MenubarPrimitive.Content
113
- ref={ref}
77
+ data-slot="menubar-content"
114
78
  align={align}
115
79
  alignOffset={alignOffset}
116
80
  sideOffset={sideOffset}
117
81
  className={cn(
118
- "z-50 min-w-[12rem] overflow-hidden rounded-md border bg-popover p-1 text-popover-foreground shadow-md data-[state=open]:animate-in 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 origin-[--radix-menubar-content-transform-origin]",
82
+ "z-50 min-w-[12rem] origin-(--radix-menubar-content-transform-origin) overflow-hidden rounded-md border bg-popover p-1 text-popover-foreground shadow-md 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 data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95",
119
83
  className
120
84
  )}
121
85
  {...props}
122
86
  />
123
- </MenubarPrimitive.Portal>
87
+ </MenubarPortal>
88
+ )
89
+ }
90
+
91
+ function MenubarItem({
92
+ className,
93
+ inset,
94
+ variant = "default",
95
+ ...props
96
+ }: React.ComponentProps<typeof MenubarPrimitive.Item> & {
97
+ inset?: boolean
98
+ variant?: "default" | "destructive"
99
+ }) {
100
+ return (
101
+ <MenubarPrimitive.Item
102
+ data-slot="menubar-item"
103
+ data-inset={inset}
104
+ data-variant={variant}
105
+ className={cn(
106
+ "relative flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50 data-[inset]:pl-8 data-[variant=destructive]:text-destructive data-[variant=destructive]:focus:bg-destructive/10 data-[variant=destructive]:focus:text-destructive dark:data-[variant=destructive]:focus:bg-destructive/20 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 [&_svg:not([class*='text-'])]:text-muted-foreground data-[variant=destructive]:*:[svg]:text-destructive!",
107
+ className
108
+ )}
109
+ {...props}
110
+ />
111
+ )
112
+ }
113
+
114
+ function MenubarCheckboxItem({
115
+ className,
116
+ children,
117
+ checked,
118
+ ...props
119
+ }: React.ComponentProps<typeof MenubarPrimitive.CheckboxItem>) {
120
+ return (
121
+ <MenubarPrimitive.CheckboxItem
122
+ data-slot="menubar-checkbox-item"
123
+ className={cn(
124
+ "relative flex cursor-default items-center gap-2 rounded-xs py-1.5 pr-2 pl-8 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
125
+ className
126
+ )}
127
+ checked={checked}
128
+ {...props}
129
+ >
130
+ <span className="pointer-events-none absolute left-2 flex size-3.5 items-center justify-center">
131
+ <MenubarPrimitive.ItemIndicator>
132
+ <Check className="size-4" />
133
+ </MenubarPrimitive.ItemIndicator>
134
+ </span>
135
+ {children}
136
+ </MenubarPrimitive.CheckboxItem>
124
137
  )
125
- )
126
- MenubarContent.displayName = MenubarPrimitive.Content.displayName
127
-
128
- const MenubarItem = React.forwardRef<
129
- React.ElementRef<typeof MenubarPrimitive.Item>,
130
- React.ComponentPropsWithoutRef<typeof MenubarPrimitive.Item> & {
131
- inset?: boolean
132
- }
133
- >(({ className, inset, ...props }, ref) => (
134
- <MenubarPrimitive.Item
135
- ref={ref}
136
- className={cn(
137
- "relative flex cursor-default select-none items-center rounded-sm px-2 py-1.5 text-sm outline-none focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50",
138
- inset && "pl-8",
139
- className
140
- )}
141
- {...props}
142
- />
143
- ))
144
- MenubarItem.displayName = MenubarPrimitive.Item.displayName
145
-
146
- const MenubarCheckboxItem = React.forwardRef<
147
- React.ElementRef<typeof MenubarPrimitive.CheckboxItem>,
148
- React.ComponentPropsWithoutRef<typeof MenubarPrimitive.CheckboxItem>
149
- >(({ className, children, checked, ...props }, ref) => (
150
- <MenubarPrimitive.CheckboxItem
151
- ref={ref}
152
- className={cn(
153
- "relative flex cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50",
154
- className
155
- )}
156
- checked={checked}
157
- {...props}
158
- >
159
- <span className="absolute left-2 flex h-3.5 w-3.5 items-center justify-center">
160
- <MenubarPrimitive.ItemIndicator>
161
- <Check className="h-4 w-4" />
162
- </MenubarPrimitive.ItemIndicator>
163
- </span>
164
- {children}
165
- </MenubarPrimitive.CheckboxItem>
166
- ))
167
- MenubarCheckboxItem.displayName = MenubarPrimitive.CheckboxItem.displayName
168
-
169
- const MenubarRadioItem = React.forwardRef<
170
- React.ElementRef<typeof MenubarPrimitive.RadioItem>,
171
- React.ComponentPropsWithoutRef<typeof MenubarPrimitive.RadioItem>
172
- >(({ className, children, ...props }, ref) => (
173
- <MenubarPrimitive.RadioItem
174
- ref={ref}
175
- className={cn(
176
- "relative flex cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50",
177
- className
178
- )}
179
- {...props}
180
- >
181
- <span className="absolute left-2 flex h-3.5 w-3.5 items-center justify-center">
182
- <MenubarPrimitive.ItemIndicator>
183
- <Circle className="h-2 w-2 fill-current" />
184
- </MenubarPrimitive.ItemIndicator>
185
- </span>
186
- {children}
187
- </MenubarPrimitive.RadioItem>
188
- ))
189
- MenubarRadioItem.displayName = MenubarPrimitive.RadioItem.displayName
190
-
191
- const MenubarLabel = React.forwardRef<
192
- React.ElementRef<typeof MenubarPrimitive.Label>,
193
- React.ComponentPropsWithoutRef<typeof MenubarPrimitive.Label> & {
194
- inset?: boolean
195
- }
196
- >(({ className, inset, ...props }, ref) => (
197
- <MenubarPrimitive.Label
198
- ref={ref}
199
- className={cn(
200
- "px-2 py-1.5 text-sm font-semibold",
201
- inset && "pl-8",
202
- className
203
- )}
204
- {...props}
205
- />
206
- ))
207
- MenubarLabel.displayName = MenubarPrimitive.Label.displayName
208
-
209
- const MenubarSeparator = React.forwardRef<
210
- React.ElementRef<typeof MenubarPrimitive.Separator>,
211
- React.ComponentPropsWithoutRef<typeof MenubarPrimitive.Separator>
212
- >(({ className, ...props }, ref) => (
213
- <MenubarPrimitive.Separator
214
- ref={ref}
215
- className={cn("-mx-1 my-1 h-px bg-muted", className)}
216
- {...props}
217
- />
218
- ))
219
- MenubarSeparator.displayName = MenubarPrimitive.Separator.displayName
220
-
221
- const MenubarShortcut = ({
138
+ }
139
+
140
+ function MenubarRadioItem({
222
141
  className,
142
+ children,
223
143
  ...props
224
- }: React.HTMLAttributes<HTMLSpanElement>) => {
144
+ }: React.ComponentProps<typeof MenubarPrimitive.RadioItem>) {
145
+ return (
146
+ <MenubarPrimitive.RadioItem
147
+ data-slot="menubar-radio-item"
148
+ className={cn(
149
+ "relative flex cursor-default items-center gap-2 rounded-xs py-1.5 pr-2 pl-8 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
150
+ className
151
+ )}
152
+ {...props}
153
+ >
154
+ <span className="pointer-events-none absolute left-2 flex size-3.5 items-center justify-center">
155
+ <MenubarPrimitive.ItemIndicator>
156
+ <Circle className="size-2 fill-current" />
157
+ </MenubarPrimitive.ItemIndicator>
158
+ </span>
159
+ {children}
160
+ </MenubarPrimitive.RadioItem>
161
+ )
162
+ }
163
+
164
+ function MenubarLabel({
165
+ className,
166
+ inset,
167
+ ...props
168
+ }: React.ComponentProps<typeof MenubarPrimitive.Label> & {
169
+ inset?: boolean
170
+ }) {
171
+ return (
172
+ <MenubarPrimitive.Label
173
+ data-slot="menubar-label"
174
+ data-inset={inset}
175
+ className={cn(
176
+ "px-2 py-1.5 text-sm font-medium data-[inset]:pl-8",
177
+ className
178
+ )}
179
+ {...props}
180
+ />
181
+ )
182
+ }
183
+
184
+ function MenubarSeparator({
185
+ className,
186
+ ...props
187
+ }: React.ComponentProps<typeof MenubarPrimitive.Separator>) {
188
+ return (
189
+ <MenubarPrimitive.Separator
190
+ data-slot="menubar-separator"
191
+ className={cn("-mx-1 my-1 h-px bg-border", className)}
192
+ {...props}
193
+ />
194
+ )
195
+ }
196
+
197
+ function MenubarShortcut({
198
+ className,
199
+ ...props
200
+ }: React.ComponentProps<"span">) {
225
201
  return (
226
202
  <span
203
+ data-slot="menubar-shortcut"
227
204
  className={cn(
228
205
  "ml-auto text-xs tracking-widest text-muted-foreground",
229
206
  className
@@ -232,23 +209,68 @@ const MenubarShortcut = ({
232
209
  />
233
210
  )
234
211
  }
235
- MenubarShortcut.displayname = "MenubarShortcut"
212
+
213
+ function MenubarSub({
214
+ ...props
215
+ }: React.ComponentProps<typeof MenubarPrimitive.Sub>) {
216
+ return <MenubarPrimitive.Sub data-slot="menubar-sub" {...props} />
217
+ }
218
+
219
+ function MenubarSubTrigger({
220
+ className,
221
+ inset,
222
+ children,
223
+ ...props
224
+ }: React.ComponentProps<typeof MenubarPrimitive.SubTrigger> & {
225
+ inset?: boolean
226
+ }) {
227
+ return (
228
+ <MenubarPrimitive.SubTrigger
229
+ data-slot="menubar-sub-trigger"
230
+ data-inset={inset}
231
+ className={cn(
232
+ "flex cursor-default items-center rounded-sm px-2 py-1.5 text-sm outline-none select-none focus:bg-accent focus:text-accent-foreground data-[inset]:pl-8 data-[state=open]:bg-accent data-[state=open]:text-accent-foreground",
233
+ className
234
+ )}
235
+ {...props}
236
+ >
237
+ {children}
238
+ <CaretRight className="ml-auto h-4 w-4" />
239
+ </MenubarPrimitive.SubTrigger>
240
+ )
241
+ }
242
+
243
+ function MenubarSubContent({
244
+ className,
245
+ ...props
246
+ }: React.ComponentProps<typeof MenubarPrimitive.SubContent>) {
247
+ return (
248
+ <MenubarPrimitive.SubContent
249
+ data-slot="menubar-sub-content"
250
+ className={cn(
251
+ "z-50 min-w-[8rem] origin-(--radix-menubar-content-transform-origin) overflow-hidden rounded-md border bg-popover p-1 text-popover-foreground shadow-lg 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 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95",
252
+ className
253
+ )}
254
+ {...props}
255
+ />
256
+ )
257
+ }
236
258
 
237
259
  export {
238
260
  Menubar,
261
+ MenubarPortal,
239
262
  MenubarMenu,
240
263
  MenubarTrigger,
241
264
  MenubarContent,
242
- MenubarItem,
265
+ MenubarGroup,
243
266
  MenubarSeparator,
244
267
  MenubarLabel,
268
+ MenubarItem,
269
+ MenubarShortcut,
245
270
  MenubarCheckboxItem,
246
271
  MenubarRadioGroup,
247
272
  MenubarRadioItem,
248
- MenubarPortal,
249
- MenubarSubContent,
250
- MenubarSubTrigger,
251
- MenubarGroup,
252
273
  MenubarSub,
253
- MenubarShortcut,
274
+ MenubarSubTrigger,
275
+ MenubarSubContent,
254
276
  }