@redbamboo/ui 0.1.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 (73) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +78 -0
  3. package/dist/components/app-header.d.ts +14 -0
  4. package/dist/components/app-header.d.ts.map +1 -0
  5. package/dist/components/badge.d.ts +8 -0
  6. package/dist/components/badge.d.ts.map +1 -0
  7. package/dist/components/button.d.ts +9 -0
  8. package/dist/components/button.d.ts.map +1 -0
  9. package/dist/components/card.d.ts +12 -0
  10. package/dist/components/card.d.ts.map +1 -0
  11. package/dist/components/collapsible.d.ts +6 -0
  12. package/dist/components/collapsible.d.ts.map +1 -0
  13. package/dist/components/dialog.d.ts +18 -0
  14. package/dist/components/dialog.d.ts.map +1 -0
  15. package/dist/components/dropdown-menu.d.ts +25 -0
  16. package/dist/components/dropdown-menu.d.ts.map +1 -0
  17. package/dist/components/input.d.ts +4 -0
  18. package/dist/components/input.d.ts.map +1 -0
  19. package/dist/components/json-highlight.d.ts +4 -0
  20. package/dist/components/json-highlight.d.ts.map +1 -0
  21. package/dist/components/label.d.ts +4 -0
  22. package/dist/components/label.d.ts.map +1 -0
  23. package/dist/components/modal.d.ts +33 -0
  24. package/dist/components/modal.d.ts.map +1 -0
  25. package/dist/components/popover.d.ts +10 -0
  26. package/dist/components/popover.d.ts.map +1 -0
  27. package/dist/components/scroll-area.d.ts +5 -0
  28. package/dist/components/scroll-area.d.ts.map +1 -0
  29. package/dist/components/select.d.ts +13 -0
  30. package/dist/components/select.d.ts.map +1 -0
  31. package/dist/components/separator.d.ts +4 -0
  32. package/dist/components/separator.d.ts.map +1 -0
  33. package/dist/components/slider.d.ts +4 -0
  34. package/dist/components/slider.d.ts.map +1 -0
  35. package/dist/components/switch.d.ts +6 -0
  36. package/dist/components/switch.d.ts.map +1 -0
  37. package/dist/components/table.d.ts +11 -0
  38. package/dist/components/table.d.ts.map +1 -0
  39. package/dist/components/tabs.d.ts +11 -0
  40. package/dist/components/tabs.d.ts.map +1 -0
  41. package/dist/components/tooltip.d.ts +7 -0
  42. package/dist/components/tooltip.d.ts.map +1 -0
  43. package/dist/index.css +2 -0
  44. package/dist/index.d.ts +24 -0
  45. package/dist/index.d.ts.map +1 -0
  46. package/dist/index.js +2648 -0
  47. package/dist/utils.d.ts +3 -0
  48. package/dist/utils.d.ts.map +1 -0
  49. package/package.json +49 -0
  50. package/src/components/app-header.css +40 -0
  51. package/src/components/app-header.tsx +57 -0
  52. package/src/components/badge.tsx +52 -0
  53. package/src/components/button.tsx +58 -0
  54. package/src/components/card.tsx +103 -0
  55. package/src/components/collapsible.tsx +21 -0
  56. package/src/components/dialog.tsx +155 -0
  57. package/src/components/dropdown-menu.tsx +240 -0
  58. package/src/components/input.tsx +20 -0
  59. package/src/components/json-highlight.tsx +84 -0
  60. package/src/components/label.tsx +21 -0
  61. package/src/components/modal.tsx +114 -0
  62. package/src/components/popover.tsx +90 -0
  63. package/src/components/scroll-area.tsx +52 -0
  64. package/src/components/select.tsx +145 -0
  65. package/src/components/separator.tsx +23 -0
  66. package/src/components/slider.tsx +41 -0
  67. package/src/components/switch.tsx +30 -0
  68. package/src/components/table.tsx +114 -0
  69. package/src/components/tabs.tsx +80 -0
  70. package/src/components/tooltip.tsx +64 -0
  71. package/src/index.ts +141 -0
  72. package/src/tokens.css +397 -0
  73. package/src/utils.ts +6 -0
@@ -0,0 +1,145 @@
1
+ import { Select as SelectPrimitive } from "@base-ui/react/select"
2
+ import { cn } from "../utils"
3
+
4
+ function Select({
5
+ ...props
6
+ }: React.ComponentProps<typeof SelectPrimitive.Root>) {
7
+ return <SelectPrimitive.Root data-slot="select" {...props} />
8
+ }
9
+
10
+ function SelectValue({
11
+ ...props
12
+ }: SelectPrimitive.Value.Props) {
13
+ return <SelectPrimitive.Value data-slot="select-value" {...props} />
14
+ }
15
+
16
+ function SelectTrigger({
17
+ className,
18
+ size = "default",
19
+ children,
20
+ ...props
21
+ }: SelectPrimitive.Trigger.Props & {
22
+ size?: "sm" | "default"
23
+ }) {
24
+ return (
25
+ <SelectPrimitive.Trigger
26
+ data-slot="select-trigger"
27
+ data-size={size}
28
+ className={cn(
29
+ "flex w-fit items-center justify-between gap-1.5 rounded-lg border border-input bg-transparent py-2 pr-2 pl-2.5 text-sm whitespace-nowrap transition-colors outline-none select-none focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 data-placeholder:text-muted-foreground data-[size=default]:h-8 data-[size=sm]:h-7 data-[size=sm]:rounded-[min(var(--radius-md),10px)] dark:bg-input/30 dark:hover:bg-input/50 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
30
+ className
31
+ )}
32
+ {...props}
33
+ >
34
+ {children}
35
+ <SelectPrimitive.Icon data-slot="select-icon">
36
+ <i className="fa-solid fa-chevron-down pointer-events-none size-4 text-muted-foreground" />
37
+ </SelectPrimitive.Icon>
38
+ </SelectPrimitive.Trigger>
39
+ )
40
+ }
41
+
42
+ function SelectContent({
43
+ className,
44
+ children,
45
+ side = "bottom",
46
+ align = "start",
47
+ ...props
48
+ }: SelectPrimitive.Popup.Props &
49
+ Pick<SelectPrimitive.Positioner.Props, "align" | "side">) {
50
+ return (
51
+ <SelectPrimitive.Portal>
52
+ <SelectPrimitive.Positioner
53
+ align={align}
54
+ side={side}
55
+ sideOffset={4}
56
+ className="z-50"
57
+ >
58
+ <SelectPrimitive.Popup
59
+ data-slot="select-content"
60
+ className={cn(
61
+ "min-w-36 origin-(--transform-origin) overflow-y-auto rounded-lg bg-popover p-1 text-popover-foreground shadow-md ring-1 ring-foreground/10 duration-100 data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95",
62
+ className
63
+ )}
64
+ {...props}
65
+ >
66
+ {children}
67
+ </SelectPrimitive.Popup>
68
+ </SelectPrimitive.Positioner>
69
+ </SelectPrimitive.Portal>
70
+ )
71
+ }
72
+
73
+ function SelectItem({
74
+ className,
75
+ children,
76
+ ...props
77
+ }: SelectPrimitive.Item.Props) {
78
+ return (
79
+ <SelectPrimitive.Item
80
+ data-slot="select-item"
81
+ className={cn(
82
+ "relative flex w-full cursor-default items-center gap-1.5 rounded-md py-1 pr-8 pl-1.5 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",
83
+ className
84
+ )}
85
+ {...props}
86
+ >
87
+ <span className="pointer-events-none absolute right-2 flex size-4 items-center justify-center">
88
+ <SelectPrimitive.ItemIndicator>
89
+ <i className="fa-solid fa-check pointer-events-none" />
90
+ </SelectPrimitive.ItemIndicator>
91
+ </span>
92
+ <SelectPrimitive.ItemText>{children}</SelectPrimitive.ItemText>
93
+ </SelectPrimitive.Item>
94
+ )
95
+ }
96
+
97
+ function SelectSeparator({
98
+ className,
99
+ ...props
100
+ }: React.ComponentProps<"div">) {
101
+ return (
102
+ <div
103
+ data-slot="select-separator"
104
+ className={cn("pointer-events-none -mx-1 my-1 h-px bg-border", className)}
105
+ {...props}
106
+ />
107
+ )
108
+ }
109
+
110
+ function SelectLabel({
111
+ className,
112
+ ...props
113
+ }: React.ComponentProps<"div">) {
114
+ return (
115
+ <div
116
+ data-slot="select-label"
117
+ className={cn("px-1.5 py-1 text-xs text-muted-foreground", className)}
118
+ {...props}
119
+ />
120
+ )
121
+ }
122
+
123
+ function SelectGroup({
124
+ className,
125
+ ...props
126
+ }: SelectPrimitive.Group.Props) {
127
+ return (
128
+ <SelectPrimitive.Group
129
+ data-slot="select-group"
130
+ className={cn("scroll-my-1 p-1", className)}
131
+ {...props}
132
+ />
133
+ )
134
+ }
135
+
136
+ export {
137
+ Select,
138
+ SelectContent,
139
+ SelectGroup,
140
+ SelectItem,
141
+ SelectLabel,
142
+ SelectSeparator,
143
+ SelectTrigger,
144
+ SelectValue,
145
+ }
@@ -0,0 +1,23 @@
1
+ import { Separator as SeparatorPrimitive } from "@base-ui/react/separator"
2
+
3
+ import { cn } from "../utils"
4
+
5
+ function Separator({
6
+ className,
7
+ orientation = "horizontal",
8
+ ...props
9
+ }: SeparatorPrimitive.Props) {
10
+ return (
11
+ <SeparatorPrimitive
12
+ data-slot="separator"
13
+ orientation={orientation}
14
+ className={cn(
15
+ "shrink-0 bg-border data-horizontal:h-px data-horizontal:w-full data-vertical:w-px data-vertical:self-stretch",
16
+ className
17
+ )}
18
+ {...props}
19
+ />
20
+ )
21
+ }
22
+
23
+ export { Separator }
@@ -0,0 +1,41 @@
1
+ import { Slider as SliderPrimitive } from "@base-ui/react/slider"
2
+
3
+ import { cn } from "../utils"
4
+
5
+ function Slider({
6
+ className,
7
+ defaultValue,
8
+ value,
9
+ ...props
10
+ }: SliderPrimitive.Root.Props) {
11
+ return (
12
+ <SliderPrimitive.Root
13
+ data-slot="slider"
14
+ defaultValue={defaultValue}
15
+ value={value}
16
+ className={cn(
17
+ "relative flex w-full touch-none items-center select-none data-disabled:opacity-50",
18
+ className
19
+ )}
20
+ {...props}
21
+ >
22
+ <SliderPrimitive.Control data-slot="slider-control" className="flex w-full items-center">
23
+ <SliderPrimitive.Track
24
+ data-slot="slider-track"
25
+ className="relative h-1 w-full grow overflow-hidden rounded-full bg-muted"
26
+ >
27
+ <SliderPrimitive.Indicator
28
+ data-slot="slider-indicator"
29
+ className="absolute h-full bg-primary"
30
+ />
31
+ <SliderPrimitive.Thumb
32
+ data-slot="slider-thumb"
33
+ className="relative block size-3 shrink-0 rounded-full border border-ring bg-white ring-ring/50 transition-[color,box-shadow] select-none after:absolute after:-inset-2 hover:ring-3 focus-visible:ring-3 focus-visible:outline-hidden active:ring-3 disabled:pointer-events-none disabled:opacity-50"
34
+ />
35
+ </SliderPrimitive.Track>
36
+ </SliderPrimitive.Control>
37
+ </SliderPrimitive.Root>
38
+ )
39
+ }
40
+
41
+ export { Slider }
@@ -0,0 +1,30 @@
1
+ import { Switch as SwitchPrimitive } from "@base-ui/react/switch"
2
+
3
+ import { cn } from "../utils"
4
+
5
+ function Switch({
6
+ className,
7
+ size = "default",
8
+ ...props
9
+ }: SwitchPrimitive.Root.Props & {
10
+ size?: "sm" | "default"
11
+ }) {
12
+ return (
13
+ <SwitchPrimitive.Root
14
+ data-slot="switch"
15
+ data-size={size}
16
+ className={cn(
17
+ "peer group/switch relative inline-flex shrink-0 items-center rounded-full border border-transparent transition-all outline-none after:absolute after:-inset-x-3 after:-inset-y-2 focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 data-[size=default]:h-[18.4px] data-[size=default]:w-[32px] data-[size=sm]:h-[14px] data-[size=sm]:w-[24px] dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 data-checked:bg-primary data-unchecked:bg-input dark:data-unchecked:bg-input/80 data-disabled:cursor-not-allowed data-disabled:opacity-50",
18
+ className
19
+ )}
20
+ {...props}
21
+ >
22
+ <SwitchPrimitive.Thumb
23
+ data-slot="switch-thumb"
24
+ className="pointer-events-none block rounded-full bg-background ring-0 transition-transform group-data-[size=default]/switch:size-4 group-data-[size=sm]/switch:size-3 group-data-[size=default]/switch:data-checked:translate-x-[calc(100%-2px)] group-data-[size=sm]/switch:data-checked:translate-x-[calc(100%-2px)] dark:data-checked:bg-primary-foreground group-data-[size=default]/switch:data-unchecked:translate-x-0 group-data-[size=sm]/switch:data-unchecked:translate-x-0 dark:data-unchecked:bg-foreground"
25
+ />
26
+ </SwitchPrimitive.Root>
27
+ )
28
+ }
29
+
30
+ export { Switch }
@@ -0,0 +1,114 @@
1
+ import * as React from "react"
2
+
3
+ import { cn } from "../utils"
4
+
5
+ function Table({ className, ...props }: React.ComponentProps<"table">) {
6
+ return (
7
+ <div
8
+ data-slot="table-container"
9
+ className="relative w-full overflow-x-auto"
10
+ >
11
+ <table
12
+ data-slot="table"
13
+ className={cn("w-full caption-bottom text-sm", className)}
14
+ {...props}
15
+ />
16
+ </div>
17
+ )
18
+ }
19
+
20
+ function TableHeader({ className, ...props }: React.ComponentProps<"thead">) {
21
+ return (
22
+ <thead
23
+ data-slot="table-header"
24
+ className={cn("[&_tr]:border-b", className)}
25
+ {...props}
26
+ />
27
+ )
28
+ }
29
+
30
+ function TableBody({ className, ...props }: React.ComponentProps<"tbody">) {
31
+ return (
32
+ <tbody
33
+ data-slot="table-body"
34
+ className={cn("[&_tr:last-child]:border-0", className)}
35
+ {...props}
36
+ />
37
+ )
38
+ }
39
+
40
+ function TableFooter({ className, ...props }: React.ComponentProps<"tfoot">) {
41
+ return (
42
+ <tfoot
43
+ data-slot="table-footer"
44
+ className={cn(
45
+ "border-t bg-muted/50 font-medium [&>tr]:last:border-b-0",
46
+ className
47
+ )}
48
+ {...props}
49
+ />
50
+ )
51
+ }
52
+
53
+ function TableRow({ className, ...props }: React.ComponentProps<"tr">) {
54
+ return (
55
+ <tr
56
+ data-slot="table-row"
57
+ className={cn(
58
+ "border-b transition-colors hover:bg-muted/50 has-aria-expanded:bg-muted/50 data-[state=selected]:bg-muted",
59
+ className
60
+ )}
61
+ {...props}
62
+ />
63
+ )
64
+ }
65
+
66
+ function TableHead({ className, ...props }: React.ComponentProps<"th">) {
67
+ return (
68
+ <th
69
+ data-slot="table-head"
70
+ className={cn(
71
+ "h-10 px-2 text-left align-middle font-medium whitespace-nowrap text-foreground [&:has([role=checkbox])]:pr-0",
72
+ className
73
+ )}
74
+ {...props}
75
+ />
76
+ )
77
+ }
78
+
79
+ function TableCell({ className, ...props }: React.ComponentProps<"td">) {
80
+ return (
81
+ <td
82
+ data-slot="table-cell"
83
+ className={cn(
84
+ "p-2 align-middle whitespace-nowrap [&:has([role=checkbox])]:pr-0",
85
+ className
86
+ )}
87
+ {...props}
88
+ />
89
+ )
90
+ }
91
+
92
+ function TableCaption({
93
+ className,
94
+ ...props
95
+ }: React.ComponentProps<"caption">) {
96
+ return (
97
+ <caption
98
+ data-slot="table-caption"
99
+ className={cn("mt-4 text-sm text-muted-foreground", className)}
100
+ {...props}
101
+ />
102
+ )
103
+ }
104
+
105
+ export {
106
+ Table,
107
+ TableHeader,
108
+ TableBody,
109
+ TableFooter,
110
+ TableHead,
111
+ TableRow,
112
+ TableCell,
113
+ TableCaption,
114
+ }
@@ -0,0 +1,80 @@
1
+ import { Tabs as TabsPrimitive } from "@base-ui/react/tabs"
2
+ import { cva, type VariantProps } from "class-variance-authority"
3
+
4
+ import { cn } from "../utils"
5
+
6
+ function Tabs({
7
+ className,
8
+ orientation = "horizontal",
9
+ ...props
10
+ }: TabsPrimitive.Root.Props) {
11
+ return (
12
+ <TabsPrimitive.Root
13
+ data-slot="tabs"
14
+ data-orientation={orientation}
15
+ className={cn(
16
+ "group/tabs flex gap-2 data-horizontal:flex-col",
17
+ className
18
+ )}
19
+ {...props}
20
+ />
21
+ )
22
+ }
23
+
24
+ const tabsListVariants = cva(
25
+ "group/tabs-list inline-flex w-fit items-center justify-center rounded-lg p-[3px] text-muted-foreground group-data-horizontal/tabs:h-8 group-data-vertical/tabs:h-fit group-data-vertical/tabs:flex-col data-[variant=line]:rounded-none",
26
+ {
27
+ variants: {
28
+ variant: {
29
+ default: "bg-muted",
30
+ line: "gap-1 bg-transparent",
31
+ },
32
+ },
33
+ defaultVariants: {
34
+ variant: "default",
35
+ },
36
+ }
37
+ )
38
+
39
+ function TabsList({
40
+ className,
41
+ variant = "default",
42
+ ...props
43
+ }: TabsPrimitive.List.Props & VariantProps<typeof tabsListVariants>) {
44
+ return (
45
+ <TabsPrimitive.List
46
+ data-slot="tabs-list"
47
+ data-variant={variant}
48
+ className={cn(tabsListVariants({ variant }), className)}
49
+ {...props}
50
+ />
51
+ )
52
+ }
53
+
54
+ function TabsTrigger({ className, ...props }: TabsPrimitive.Tab.Props) {
55
+ return (
56
+ <TabsPrimitive.Tab
57
+ data-slot="tabs-trigger"
58
+ className={cn(
59
+ "relative inline-flex h-[calc(100%-1px)] flex-1 items-center justify-center gap-1.5 rounded-md border border-transparent px-1.5 py-0.5 text-sm font-medium whitespace-nowrap text-foreground/60 transition-all group-data-vertical/tabs:w-full group-data-vertical/tabs:justify-start hover:text-foreground focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 focus-visible:outline-1 focus-visible:outline-ring disabled:pointer-events-none disabled:opacity-50 has-data-[icon=inline-end]:pr-1 has-data-[icon=inline-start]:pl-1 aria-disabled:pointer-events-none aria-disabled:opacity-50 dark:text-muted-foreground dark:hover:text-foreground group-data-[variant=default]/tabs-list:data-active:shadow-sm group-data-[variant=line]/tabs-list:data-active:shadow-none [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
60
+ "group-data-[variant=line]/tabs-list:bg-transparent group-data-[variant=line]/tabs-list:data-active:bg-transparent dark:group-data-[variant=line]/tabs-list:data-active:border-transparent dark:group-data-[variant=line]/tabs-list:data-active:bg-transparent",
61
+ "data-active:bg-background data-active:text-foreground dark:data-active:border-input dark:data-active:bg-input/30 dark:data-active:text-foreground",
62
+ "after:absolute after:bg-foreground after:opacity-0 after:transition-opacity group-data-horizontal/tabs:after:inset-x-0 group-data-horizontal/tabs:after:bottom-[-5px] group-data-horizontal/tabs:after:h-0.5 group-data-vertical/tabs:after:inset-y-0 group-data-vertical/tabs:after:-right-1 group-data-vertical/tabs:after:w-0.5 group-data-[variant=line]/tabs-list:data-active:after:opacity-100",
63
+ className
64
+ )}
65
+ {...props}
66
+ />
67
+ )
68
+ }
69
+
70
+ function TabsContent({ className, ...props }: TabsPrimitive.Panel.Props) {
71
+ return (
72
+ <TabsPrimitive.Panel
73
+ data-slot="tabs-content"
74
+ className={cn("flex-1 text-sm outline-none", className)}
75
+ {...props}
76
+ />
77
+ )
78
+ }
79
+
80
+ export { Tabs, TabsList, TabsTrigger, TabsContent, tabsListVariants }
@@ -0,0 +1,64 @@
1
+ import { Tooltip as TooltipPrimitive } from "@base-ui/react/tooltip"
2
+
3
+ import { cn } from "../utils"
4
+
5
+ function TooltipProvider({
6
+ delay = 0,
7
+ ...props
8
+ }: TooltipPrimitive.Provider.Props) {
9
+ return (
10
+ <TooltipPrimitive.Provider
11
+ data-slot="tooltip-provider"
12
+ delay={delay}
13
+ {...props}
14
+ />
15
+ )
16
+ }
17
+
18
+ function Tooltip({ ...props }: TooltipPrimitive.Root.Props) {
19
+ return <TooltipPrimitive.Root data-slot="tooltip" {...props} />
20
+ }
21
+
22
+ function TooltipTrigger({ ...props }: TooltipPrimitive.Trigger.Props) {
23
+ return <TooltipPrimitive.Trigger data-slot="tooltip-trigger" {...props} />
24
+ }
25
+
26
+ function TooltipContent({
27
+ className,
28
+ side = "top",
29
+ sideOffset = 4,
30
+ align = "center",
31
+ alignOffset = 0,
32
+ children,
33
+ ...props
34
+ }: TooltipPrimitive.Popup.Props &
35
+ Pick<
36
+ TooltipPrimitive.Positioner.Props,
37
+ "align" | "alignOffset" | "side" | "sideOffset"
38
+ >) {
39
+ return (
40
+ <TooltipPrimitive.Portal>
41
+ <TooltipPrimitive.Positioner
42
+ align={align}
43
+ alignOffset={alignOffset}
44
+ side={side}
45
+ sideOffset={sideOffset}
46
+ className="isolate z-50"
47
+ >
48
+ <TooltipPrimitive.Popup
49
+ data-slot="tooltip-content"
50
+ className={cn(
51
+ "z-50 inline-flex w-fit max-w-xs origin-(--transform-origin) items-center gap-1.5 rounded-md bg-foreground px-3 py-1.5 text-xs text-background has-data-[slot=kbd]:pr-1.5 data-[side=bottom]:slide-in-from-top-2 data-[side=inline-end]:slide-in-from-left-2 data-[side=inline-start]:slide-in-from-right-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-[slot=kbd]:relative **:data-[slot=kbd]:isolate **:data-[slot=kbd]:z-50 **:data-[slot=kbd]:rounded-sm data-[state=delayed-open]:animate-in data-[state=delayed-open]:fade-in-0 data-[state=delayed-open]:zoom-in-95 data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95",
52
+ className
53
+ )}
54
+ {...props}
55
+ >
56
+ {children}
57
+ <TooltipPrimitive.Arrow className="z-50 size-2.5 translate-y-[calc(-50%-2px)] rotate-45 rounded-[2px] bg-foreground fill-foreground data-[side=bottom]:top-1 data-[side=inline-end]:top-1/2! data-[side=inline-end]:-left-1 data-[side=inline-end]:-translate-y-1/2 data-[side=inline-start]:top-1/2! data-[side=inline-start]:-right-1 data-[side=inline-start]:-translate-y-1/2 data-[side=left]:top-1/2! data-[side=left]:-right-1 data-[side=left]:-translate-y-1/2 data-[side=right]:top-1/2! data-[side=right]:-left-1 data-[side=right]:-translate-y-1/2 data-[side=top]:-bottom-2.5" />
58
+ </TooltipPrimitive.Popup>
59
+ </TooltipPrimitive.Positioner>
60
+ </TooltipPrimitive.Portal>
61
+ )
62
+ }
63
+
64
+ export { Tooltip, TooltipTrigger, TooltipContent, TooltipProvider }
package/src/index.ts ADDED
@@ -0,0 +1,141 @@
1
+ // Utilities
2
+ export { cn } from "./utils"
3
+
4
+ // Components
5
+ export { Button, buttonVariants } from "./components/button"
6
+
7
+ export {
8
+ Badge,
9
+ badgeVariants,
10
+ } from "./components/badge"
11
+
12
+ export {
13
+ Card,
14
+ CardHeader,
15
+ CardFooter,
16
+ CardTitle,
17
+ CardAction,
18
+ CardDescription,
19
+ CardContent,
20
+ } from "./components/card"
21
+
22
+ export { Input } from "./components/input"
23
+ export { Label } from "./components/label"
24
+
25
+ export {
26
+ Tabs,
27
+ TabsList,
28
+ TabsTrigger,
29
+ TabsContent,
30
+ tabsListVariants,
31
+ } from "./components/tabs"
32
+
33
+ export {
34
+ Select,
35
+ SelectContent,
36
+ SelectGroup,
37
+ SelectItem,
38
+ SelectLabel,
39
+ SelectSeparator,
40
+ SelectTrigger,
41
+ SelectValue,
42
+ } from "./components/select"
43
+
44
+ export { Separator } from "./components/separator"
45
+ export { Switch } from "./components/switch"
46
+ export { Slider } from "./components/slider"
47
+
48
+ export {
49
+ Popover,
50
+ PopoverContent,
51
+ PopoverDescription,
52
+ PopoverHeader,
53
+ PopoverTitle,
54
+ PopoverTrigger,
55
+ } from "./components/popover"
56
+
57
+ export {
58
+ DropdownMenu,
59
+ DropdownMenuTrigger,
60
+ DropdownMenuContent,
61
+ DropdownMenuGroup,
62
+ DropdownMenuItem,
63
+ DropdownMenuCheckboxItem,
64
+ DropdownMenuRadioGroup,
65
+ DropdownMenuRadioItem,
66
+ DropdownMenuLabel,
67
+ DropdownMenuSeparator,
68
+ DropdownMenuShortcut,
69
+ DropdownMenuSub,
70
+ DropdownMenuSubTrigger,
71
+ DropdownMenuSubContent,
72
+ } from "./components/dropdown-menu"
73
+
74
+ export {
75
+ Collapsible,
76
+ CollapsibleTrigger,
77
+ CollapsibleContent,
78
+ } from "./components/collapsible"
79
+
80
+ export {
81
+ Table,
82
+ TableHeader,
83
+ TableBody,
84
+ TableFooter,
85
+ TableHead,
86
+ TableRow,
87
+ TableCell,
88
+ TableCaption,
89
+ } from "./components/table"
90
+
91
+ export {
92
+ ModalBase,
93
+ ModalHeader,
94
+ ModalSection,
95
+ ModalFooter,
96
+ } from "./components/modal"
97
+
98
+ export type {
99
+ ModalSize,
100
+ ModalBaseProps,
101
+ ModalHeaderProps,
102
+ ModalSectionProps,
103
+ ModalFooterProps,
104
+ } from "./components/modal"
105
+
106
+ export {
107
+ Tooltip,
108
+ TooltipTrigger,
109
+ TooltipContent,
110
+ TooltipProvider,
111
+ } from "./components/tooltip"
112
+
113
+ export {
114
+ ScrollArea,
115
+ ScrollBar,
116
+ } from "./components/scroll-area"
117
+
118
+ export {
119
+ Dialog,
120
+ DialogClose,
121
+ DialogContent,
122
+ DialogDescription,
123
+ DialogFooter,
124
+ DialogHeader,
125
+ DialogOverlay,
126
+ DialogPortal,
127
+ DialogTitle,
128
+ DialogTrigger,
129
+ } from "./components/dialog"
130
+
131
+ export { JsonHighlight } from "./components/json-highlight"
132
+
133
+ export {
134
+ AppHeader,
135
+ AppHeaderBrand,
136
+ } from "./components/app-header"
137
+
138
+ export type {
139
+ AppHeaderProps,
140
+ AppHeaderBrandProps,
141
+ } from "./components/app-header"