@dust-tt/sparkle 0.2.260 → 0.2.261
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.
- package/dist/cjs/index.js +8058 -343
- package/dist/cjs/index.js.map +1 -1
- package/dist/esm/components/NewDropdown.d.ts +58 -0
- package/dist/esm/components/NewDropdown.d.ts.map +1 -0
- package/dist/esm/components/NewDropdown.js +105 -0
- package/dist/esm/components/NewDropdown.js.map +1 -0
- package/dist/esm/components/Popover.d.ts +15 -0
- package/dist/esm/components/Popover.d.ts.map +1 -0
- package/dist/esm/components/Popover.js +20 -0
- package/dist/esm/components/Popover.js.map +1 -0
- package/dist/esm/components/index.d.ts +2 -0
- package/dist/esm/components/index.d.ts.map +1 -1
- package/dist/esm/components/index.js +2 -0
- package/dist/esm/components/index.js.map +1 -1
- package/dist/esm/lib/utils.d.ts +2 -0
- package/dist/esm/lib/utils.d.ts.map +1 -1
- package/dist/esm/lib/utils.js +9 -0
- package/dist/esm/lib/utils.js.map +1 -1
- package/dist/esm/stories/NewDropdown.stories.d.ts +8 -0
- package/dist/esm/stories/NewDropdown.stories.d.ts.map +1 -0
- package/dist/esm/stories/NewDropdown.stories.js +136 -0
- package/dist/esm/stories/NewDropdown.stories.js.map +1 -0
- package/dist/esm/stories/Popover.stories.d.ts +11 -0
- package/dist/esm/stories/Popover.stories.d.ts.map +1 -0
- package/dist/esm/stories/Popover.stories.js +33 -0
- package/dist/esm/stories/Popover.stories.js.map +1 -0
- package/dist/sparkle.css +361 -1
- package/package.json +6 -1
- package/src/components/NewDropdown.tsx +315 -0
- package/src/components/Popover.tsx +67 -0
- package/src/components/index.ts +19 -1
- package/src/lib/utils.ts +7 -0
- package/src/stories/NewDropdown.stories.tsx +282 -0
- package/src/stories/Popover.stories.tsx +102 -0
|
@@ -0,0 +1,315 @@
|
|
|
1
|
+
import * as DropdownMenuPrimitive from "@radix-ui/react-dropdown-menu";
|
|
2
|
+
import * as React from "react";
|
|
3
|
+
|
|
4
|
+
import {
|
|
5
|
+
CheckIcon,
|
|
6
|
+
ChevronRightIcon,
|
|
7
|
+
CircleIcon,
|
|
8
|
+
Icon,
|
|
9
|
+
} from "@sparkle/index_with_tw_base";
|
|
10
|
+
import { cn } from "@sparkle/lib/utils";
|
|
11
|
+
|
|
12
|
+
export const menuStyleClasses = {
|
|
13
|
+
inset: "s-pl-8",
|
|
14
|
+
container: cn(
|
|
15
|
+
"s-rounded-lg s-border s-border-hovering s-bg-white s-p-1 s-text-primary-950",
|
|
16
|
+
"s-z-50 s-min-w-[8rem] s-overflow-hidden",
|
|
17
|
+
"data-[state=open]:s-animate-in data-[state=closed]:s-animate-out data-[state=closed]:s-fade-out-0 data-[state=open]:s-fade-in-0 data-[state=closed]:s-zoom-out-95 data-[state=open]:s-zoom-in-95 data-[side=bottom]:s-slide-in-from-top-2 data-[side=left]:s-slide-in-from-right-2 data-[side=right]:s-slide-in-from-left-2 data-[side=top]:s-slide-in-from-bottom-2"
|
|
18
|
+
),
|
|
19
|
+
item: cn(
|
|
20
|
+
"s-relative s-flex s-gap-2 s-cursor-pointer s-select-none s-items-center s-outline-none",
|
|
21
|
+
"s-rounded-md s-text-sm s-font-medium focus:s-text-primary-950 focus:s-bg-primary-100 s-px-2 s-py-2",
|
|
22
|
+
"s-transition-colors s-duration-300 data-[disabled]:s-pointer-events-none data-[disabled]:s-text-primary-400"
|
|
23
|
+
),
|
|
24
|
+
subTrigger: {
|
|
25
|
+
default: "s-mr-1 s-ml-auto s-tracking-widest s-text-primary-400",
|
|
26
|
+
span: "s-absolute s-left-2 s-flex s-h-3.5 s-w-3.5 s-items-center s-justify-center",
|
|
27
|
+
},
|
|
28
|
+
label: "s-font-semibold s-px-2 s-py-2 s-text-xs s-text-muted-foreground",
|
|
29
|
+
description:
|
|
30
|
+
"s-grow s-truncate s-text-sm s-font-regular s-text-element-700 dark:s-text-element-600-dark",
|
|
31
|
+
separator: "-s-mx-1 s-my-1 s-h-px s-bg-separator",
|
|
32
|
+
shortcut: "s-ml-auto s-text-xs s-tracking-widest s-text-primary-400",
|
|
33
|
+
};
|
|
34
|
+
|
|
35
|
+
const NewDropdownMenu = DropdownMenuPrimitive.Root;
|
|
36
|
+
const NewDropdownMenuGroup = DropdownMenuPrimitive.Group;
|
|
37
|
+
const NewDropdownMenuPortal = DropdownMenuPrimitive.Portal;
|
|
38
|
+
const NewDropdownMenuSub = DropdownMenuPrimitive.Sub;
|
|
39
|
+
const NewDropdownMenuRadioGroup = DropdownMenuPrimitive.RadioGroup;
|
|
40
|
+
const NewDropdownMenuTrigger = DropdownMenuPrimitive.Trigger;
|
|
41
|
+
|
|
42
|
+
interface LabelAndIconProps {
|
|
43
|
+
label: string;
|
|
44
|
+
icon?: React.ComponentType;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
type Simplify<T> = { [K in keyof T]: T[K] };
|
|
48
|
+
|
|
49
|
+
type EitherChildrenOrProps<BaseProps, ExtraProps> =
|
|
50
|
+
| (BaseProps & ExtraProps & { children?: never })
|
|
51
|
+
| (BaseProps & { [K in keyof ExtraProps]?: never });
|
|
52
|
+
|
|
53
|
+
type MutuallyExclusiveProps<BaseProps, ExtraProps> = Simplify<
|
|
54
|
+
EitherChildrenOrProps<BaseProps, ExtraProps>
|
|
55
|
+
>;
|
|
56
|
+
|
|
57
|
+
interface ItemWithLabelIconAndDescriptionProps {
|
|
58
|
+
label?: string;
|
|
59
|
+
icon?: React.ComponentType;
|
|
60
|
+
description?: string;
|
|
61
|
+
children?: React.ReactNode;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
const ItemWithLabelIconAndDescription = <
|
|
65
|
+
T extends ItemWithLabelIconAndDescriptionProps,
|
|
66
|
+
>({
|
|
67
|
+
label,
|
|
68
|
+
icon,
|
|
69
|
+
description,
|
|
70
|
+
children,
|
|
71
|
+
}: T) => {
|
|
72
|
+
return (
|
|
73
|
+
<>
|
|
74
|
+
{label && (
|
|
75
|
+
<div className="s-grid s-grid-cols-[auto,1fr] s-gap-x-1">
|
|
76
|
+
{icon && (
|
|
77
|
+
<div
|
|
78
|
+
className={cn(
|
|
79
|
+
"s-flex",
|
|
80
|
+
description ? "s-items-start s-pt-0.5" : "s-items-center"
|
|
81
|
+
)}
|
|
82
|
+
>
|
|
83
|
+
<Icon size="xs" visual={icon} />
|
|
84
|
+
</div>
|
|
85
|
+
)}
|
|
86
|
+
<div className="s-flex s-flex-col">
|
|
87
|
+
<span>{label}</span>
|
|
88
|
+
{description && (
|
|
89
|
+
<span className={menuStyleClasses.description}>
|
|
90
|
+
{description}
|
|
91
|
+
</span>
|
|
92
|
+
)}
|
|
93
|
+
</div>
|
|
94
|
+
</div>
|
|
95
|
+
)}
|
|
96
|
+
{children}
|
|
97
|
+
</>
|
|
98
|
+
);
|
|
99
|
+
};
|
|
100
|
+
|
|
101
|
+
const NewDropdownMenuSubTrigger = React.forwardRef<
|
|
102
|
+
React.ElementRef<typeof DropdownMenuPrimitive.SubTrigger>,
|
|
103
|
+
MutuallyExclusiveProps<
|
|
104
|
+
React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.SubTrigger>,
|
|
105
|
+
LabelAndIconProps
|
|
106
|
+
> & {
|
|
107
|
+
inset?: boolean;
|
|
108
|
+
}
|
|
109
|
+
>(({ className, label, icon, children, inset, ...props }, ref) => (
|
|
110
|
+
<DropdownMenuPrimitive.SubTrigger
|
|
111
|
+
ref={ref}
|
|
112
|
+
className={cn(
|
|
113
|
+
menuStyleClasses.item,
|
|
114
|
+
inset ? menuStyleClasses.inset : "",
|
|
115
|
+
className || ""
|
|
116
|
+
)}
|
|
117
|
+
{...props}
|
|
118
|
+
>
|
|
119
|
+
{label && (
|
|
120
|
+
<>
|
|
121
|
+
{icon && <Icon size="xs" visual={icon} />}
|
|
122
|
+
{label}
|
|
123
|
+
<span className={menuStyleClasses.subTrigger.default}>
|
|
124
|
+
<Icon size="xs" visual={ChevronRightIcon} />
|
|
125
|
+
</span>
|
|
126
|
+
</>
|
|
127
|
+
)}
|
|
128
|
+
{children}
|
|
129
|
+
</DropdownMenuPrimitive.SubTrigger>
|
|
130
|
+
));
|
|
131
|
+
NewDropdownMenuSubTrigger.displayName =
|
|
132
|
+
DropdownMenuPrimitive.SubTrigger.displayName;
|
|
133
|
+
|
|
134
|
+
const NewDropdownMenuSubContent = React.forwardRef<
|
|
135
|
+
React.ElementRef<typeof DropdownMenuPrimitive.SubContent>,
|
|
136
|
+
React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.SubContent>
|
|
137
|
+
>(({ className, ...props }, ref) => (
|
|
138
|
+
<DropdownMenuPrimitive.SubContent
|
|
139
|
+
ref={ref}
|
|
140
|
+
className={cn(menuStyleClasses.container, "s-shadow-lg", className || "")}
|
|
141
|
+
{...props}
|
|
142
|
+
/>
|
|
143
|
+
));
|
|
144
|
+
NewDropdownMenuSubContent.displayName =
|
|
145
|
+
DropdownMenuPrimitive.SubContent.displayName;
|
|
146
|
+
|
|
147
|
+
const NewDropdownMenuContent = React.forwardRef<
|
|
148
|
+
React.ElementRef<typeof DropdownMenuPrimitive.Content>,
|
|
149
|
+
React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Content>
|
|
150
|
+
>(({ className, sideOffset = 4, ...props }, ref) => (
|
|
151
|
+
<DropdownMenuPrimitive.Portal>
|
|
152
|
+
<DropdownMenuPrimitive.Content
|
|
153
|
+
ref={ref}
|
|
154
|
+
sideOffset={sideOffset}
|
|
155
|
+
className={cn(menuStyleClasses.container, "s-shadow-md", className || "")}
|
|
156
|
+
{...props}
|
|
157
|
+
/>
|
|
158
|
+
</DropdownMenuPrimitive.Portal>
|
|
159
|
+
));
|
|
160
|
+
NewDropdownMenuContent.displayName = DropdownMenuPrimitive.Content.displayName;
|
|
161
|
+
|
|
162
|
+
const NewDropdownMenuItem = React.forwardRef<
|
|
163
|
+
React.ElementRef<typeof DropdownMenuPrimitive.Item>,
|
|
164
|
+
MutuallyExclusiveProps<
|
|
165
|
+
React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Item> & {
|
|
166
|
+
inset?: boolean;
|
|
167
|
+
},
|
|
168
|
+
LabelAndIconProps & { description?: string }
|
|
169
|
+
>
|
|
170
|
+
>(({ children, description, className, inset, icon, label, ...props }, ref) => (
|
|
171
|
+
<DropdownMenuPrimitive.Item
|
|
172
|
+
ref={ref}
|
|
173
|
+
className={cn(
|
|
174
|
+
menuStyleClasses.item,
|
|
175
|
+
inset ? menuStyleClasses.inset : "",
|
|
176
|
+
className || ""
|
|
177
|
+
)}
|
|
178
|
+
{...props}
|
|
179
|
+
>
|
|
180
|
+
<ItemWithLabelIconAndDescription
|
|
181
|
+
label={label}
|
|
182
|
+
icon={icon}
|
|
183
|
+
description={description}
|
|
184
|
+
>
|
|
185
|
+
{children}
|
|
186
|
+
</ItemWithLabelIconAndDescription>
|
|
187
|
+
</DropdownMenuPrimitive.Item>
|
|
188
|
+
));
|
|
189
|
+
NewDropdownMenuItem.displayName = DropdownMenuPrimitive.Item.displayName;
|
|
190
|
+
|
|
191
|
+
const NewDropdownMenuCheckboxItem = React.forwardRef<
|
|
192
|
+
React.ElementRef<typeof DropdownMenuPrimitive.CheckboxItem>,
|
|
193
|
+
React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.CheckboxItem>
|
|
194
|
+
>(({ className, children, checked, ...props }, ref) => (
|
|
195
|
+
<DropdownMenuPrimitive.CheckboxItem
|
|
196
|
+
ref={ref}
|
|
197
|
+
className={cn(
|
|
198
|
+
menuStyleClasses.item,
|
|
199
|
+
menuStyleClasses.inset,
|
|
200
|
+
className || ""
|
|
201
|
+
)}
|
|
202
|
+
checked={checked}
|
|
203
|
+
{...props}
|
|
204
|
+
>
|
|
205
|
+
<span className={menuStyleClasses.subTrigger.span}>
|
|
206
|
+
<DropdownMenuPrimitive.ItemIndicator>
|
|
207
|
+
<Icon size="xs" visual={CheckIcon} />
|
|
208
|
+
</DropdownMenuPrimitive.ItemIndicator>
|
|
209
|
+
</span>
|
|
210
|
+
{children}
|
|
211
|
+
</DropdownMenuPrimitive.CheckboxItem>
|
|
212
|
+
));
|
|
213
|
+
NewDropdownMenuCheckboxItem.displayName =
|
|
214
|
+
DropdownMenuPrimitive.CheckboxItem.displayName;
|
|
215
|
+
|
|
216
|
+
const NewDropdownMenuRadioItem = React.forwardRef<
|
|
217
|
+
React.ElementRef<typeof DropdownMenuPrimitive.RadioItem>,
|
|
218
|
+
MutuallyExclusiveProps<
|
|
219
|
+
React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.RadioItem>,
|
|
220
|
+
LabelAndIconProps & { description?: string }
|
|
221
|
+
>
|
|
222
|
+
>(({ className, children, description, label, icon, ...props }, ref) => (
|
|
223
|
+
<DropdownMenuPrimitive.RadioItem
|
|
224
|
+
ref={ref}
|
|
225
|
+
className={cn(
|
|
226
|
+
menuStyleClasses.item,
|
|
227
|
+
menuStyleClasses.inset,
|
|
228
|
+
className || ""
|
|
229
|
+
)}
|
|
230
|
+
{...props}
|
|
231
|
+
>
|
|
232
|
+
<span className={menuStyleClasses.subTrigger.span}>
|
|
233
|
+
<DropdownMenuPrimitive.ItemIndicator>
|
|
234
|
+
<Icon size="xs" visual={CircleIcon} />
|
|
235
|
+
</DropdownMenuPrimitive.ItemIndicator>
|
|
236
|
+
</span>
|
|
237
|
+
<ItemWithLabelIconAndDescription
|
|
238
|
+
label={label}
|
|
239
|
+
icon={icon}
|
|
240
|
+
description={description}
|
|
241
|
+
>
|
|
242
|
+
{children}
|
|
243
|
+
</ItemWithLabelIconAndDescription>
|
|
244
|
+
</DropdownMenuPrimitive.RadioItem>
|
|
245
|
+
));
|
|
246
|
+
NewDropdownMenuRadioItem.displayName =
|
|
247
|
+
DropdownMenuPrimitive.RadioItem.displayName;
|
|
248
|
+
|
|
249
|
+
const NewDropdownMenuLabel = React.forwardRef<
|
|
250
|
+
React.ElementRef<typeof DropdownMenuPrimitive.Label>,
|
|
251
|
+
MutuallyExclusiveProps<
|
|
252
|
+
React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Label> & {
|
|
253
|
+
inset?: boolean;
|
|
254
|
+
},
|
|
255
|
+
LabelAndIconProps
|
|
256
|
+
>
|
|
257
|
+
>(({ children, className, inset, label, ...props }, ref) => (
|
|
258
|
+
<DropdownMenuPrimitive.Label
|
|
259
|
+
ref={ref}
|
|
260
|
+
className={cn(
|
|
261
|
+
menuStyleClasses.label,
|
|
262
|
+
inset ? menuStyleClasses.inset : "",
|
|
263
|
+
className || ""
|
|
264
|
+
)}
|
|
265
|
+
{...props}
|
|
266
|
+
>
|
|
267
|
+
{label && <>{label}</>}
|
|
268
|
+
{children}
|
|
269
|
+
</DropdownMenuPrimitive.Label>
|
|
270
|
+
));
|
|
271
|
+
NewDropdownMenuLabel.displayName = DropdownMenuPrimitive.Label.displayName;
|
|
272
|
+
|
|
273
|
+
const NewDropdownMenuSeparator = React.forwardRef<
|
|
274
|
+
React.ElementRef<typeof DropdownMenuPrimitive.Separator>,
|
|
275
|
+
React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Separator>
|
|
276
|
+
>(({ className, ...props }, ref) => (
|
|
277
|
+
<DropdownMenuPrimitive.Separator
|
|
278
|
+
ref={ref}
|
|
279
|
+
className={cn(menuStyleClasses.separator, className || "")}
|
|
280
|
+
{...props}
|
|
281
|
+
/>
|
|
282
|
+
));
|
|
283
|
+
NewDropdownMenuSeparator.displayName =
|
|
284
|
+
DropdownMenuPrimitive.Separator.displayName;
|
|
285
|
+
|
|
286
|
+
const NewDropdownMenuShortcut = ({
|
|
287
|
+
className,
|
|
288
|
+
...props
|
|
289
|
+
}: React.HTMLAttributes<HTMLSpanElement>) => {
|
|
290
|
+
return (
|
|
291
|
+
<span
|
|
292
|
+
className={cn(menuStyleClasses.shortcut, className || "")}
|
|
293
|
+
{...props}
|
|
294
|
+
/>
|
|
295
|
+
);
|
|
296
|
+
};
|
|
297
|
+
NewDropdownMenuShortcut.displayName = "NewDropdownMenuShortcut";
|
|
298
|
+
|
|
299
|
+
export {
|
|
300
|
+
NewDropdownMenu,
|
|
301
|
+
NewDropdownMenuCheckboxItem,
|
|
302
|
+
NewDropdownMenuContent,
|
|
303
|
+
NewDropdownMenuGroup,
|
|
304
|
+
NewDropdownMenuItem,
|
|
305
|
+
NewDropdownMenuLabel,
|
|
306
|
+
NewDropdownMenuPortal,
|
|
307
|
+
NewDropdownMenuRadioGroup,
|
|
308
|
+
NewDropdownMenuRadioItem,
|
|
309
|
+
NewDropdownMenuSeparator,
|
|
310
|
+
NewDropdownMenuShortcut,
|
|
311
|
+
NewDropdownMenuSub,
|
|
312
|
+
NewDropdownMenuSubContent,
|
|
313
|
+
NewDropdownMenuSubTrigger,
|
|
314
|
+
NewDropdownMenuTrigger,
|
|
315
|
+
};
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import * as PopoverPrimitive from "@radix-ui/react-popover";
|
|
2
|
+
import * as React from "react";
|
|
3
|
+
|
|
4
|
+
import { cn } from "@sparkle/lib/utils";
|
|
5
|
+
|
|
6
|
+
const PopoverRoot = PopoverPrimitive.Root;
|
|
7
|
+
|
|
8
|
+
const PopoverTrigger = PopoverPrimitive.Trigger;
|
|
9
|
+
|
|
10
|
+
interface PopoverContentProps
|
|
11
|
+
extends React.ComponentPropsWithoutRef<typeof PopoverPrimitive.Content> {
|
|
12
|
+
fullWidth?: boolean;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
const PopoverContent = React.forwardRef<
|
|
16
|
+
React.ElementRef<typeof PopoverPrimitive.Content>,
|
|
17
|
+
PopoverContentProps
|
|
18
|
+
>(
|
|
19
|
+
(
|
|
20
|
+
{
|
|
21
|
+
className,
|
|
22
|
+
align = "center",
|
|
23
|
+
sideOffset = 4,
|
|
24
|
+
fullWidth = false,
|
|
25
|
+
...props
|
|
26
|
+
},
|
|
27
|
+
ref
|
|
28
|
+
) => (
|
|
29
|
+
<PopoverPrimitive.Portal>
|
|
30
|
+
<PopoverPrimitive.Content
|
|
31
|
+
ref={ref}
|
|
32
|
+
align={align}
|
|
33
|
+
sideOffset={sideOffset}
|
|
34
|
+
className={cn(
|
|
35
|
+
"data-[state=open]:s-animate-in data-[state=open]:s-fade-in-0 data-[state=open]:s-zoom-in-95",
|
|
36
|
+
"data-[state=closed]:s-animate-out data-[state=closed]:s-fade-out-0 data-[state=closed]:s-zoom-out-95",
|
|
37
|
+
"data-[side=bottom]:s-slide-in-from-top-2",
|
|
38
|
+
"data-[side=left]:s-slide-in-from-right-2",
|
|
39
|
+
"data-[side=right]:s-slide-in-from-left-2",
|
|
40
|
+
"data-[side=top]:s-slide-in-from-bottom-2",
|
|
41
|
+
"s-border-border s-text-primary-950 s-z-50 s-rounded-lg s-border s-bg-background s-shadow-md s-outline-none",
|
|
42
|
+
fullWidth ? "s-grow" : "s-w-72 s-p-4",
|
|
43
|
+
className
|
|
44
|
+
)}
|
|
45
|
+
{...props}
|
|
46
|
+
/>
|
|
47
|
+
</PopoverPrimitive.Portal>
|
|
48
|
+
)
|
|
49
|
+
);
|
|
50
|
+
|
|
51
|
+
interface PopoverProps extends Omit<PopoverContentProps, "content"> {
|
|
52
|
+
trigger: React.ReactNode;
|
|
53
|
+
content: React.ReactNode;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
function Popover({ trigger, content, ...props }: PopoverProps) {
|
|
57
|
+
return (
|
|
58
|
+
<PopoverRoot>
|
|
59
|
+
<PopoverTrigger>{trigger}</PopoverTrigger>
|
|
60
|
+
<PopoverContent {...props}>{content}</PopoverContent>
|
|
61
|
+
</PopoverRoot>
|
|
62
|
+
);
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
PopoverContent.displayName = PopoverPrimitive.Content.displayName;
|
|
66
|
+
|
|
67
|
+
export { Popover, PopoverContent, PopoverRoot, PopoverTrigger };
|
package/src/components/index.ts
CHANGED
|
@@ -31,10 +31,28 @@ export { Input } from "./Input";
|
|
|
31
31
|
export { Item } from "./Item";
|
|
32
32
|
export { Markdown } from "./Markdown";
|
|
33
33
|
export { Modal } from "./Modal";
|
|
34
|
+
export {
|
|
35
|
+
NewDropdownMenu,
|
|
36
|
+
NewDropdownMenuCheckboxItem,
|
|
37
|
+
NewDropdownMenuContent,
|
|
38
|
+
NewDropdownMenuGroup,
|
|
39
|
+
NewDropdownMenuItem,
|
|
40
|
+
NewDropdownMenuLabel,
|
|
41
|
+
NewDropdownMenuPortal,
|
|
42
|
+
NewDropdownMenuRadioGroup,
|
|
43
|
+
NewDropdownMenuRadioItem,
|
|
44
|
+
NewDropdownMenuSeparator,
|
|
45
|
+
NewDropdownMenuShortcut,
|
|
46
|
+
NewDropdownMenuSub,
|
|
47
|
+
NewDropdownMenuSubContent,
|
|
48
|
+
NewDropdownMenuSubTrigger,
|
|
49
|
+
NewDropdownMenuTrigger,
|
|
50
|
+
} from "./NewDropdown";
|
|
34
51
|
export { Notification } from "./Notification";
|
|
35
52
|
export { Page } from "./Page";
|
|
36
53
|
export { PaginatedCitationsGrid } from "./PaginatedCitationsGrid";
|
|
37
54
|
export { Pagination } from "./Pagination";
|
|
55
|
+
export { Popover, PopoverContent, PopoverRoot, PopoverTrigger } from "./Popover";
|
|
38
56
|
export { Popup } from "./Popup";
|
|
39
57
|
export { PriceTable } from "./PriceTable";
|
|
40
58
|
export { RadioButton } from "./RadioButton";
|
|
@@ -52,4 +70,4 @@ export {
|
|
|
52
70
|
TooltipTrigger,
|
|
53
71
|
} from "./Tooltip";
|
|
54
72
|
export { Tree } from "./Tree";
|
|
55
|
-
export { ZoomableImageCitationWrapper } from "./ZoomableImageCitationWrapper";
|
|
73
|
+
export { ZoomableImageCitationWrapper } from "./ZoomableImageCitationWrapper";
|
package/src/lib/utils.ts
CHANGED
|
@@ -1,4 +1,7 @@
|
|
|
1
|
+
import type { ClassValue } from "clsx";
|
|
2
|
+
import { clsx } from "clsx";
|
|
1
3
|
import { useCallback, useState } from "react";
|
|
4
|
+
import { twMerge } from "tailwind-merge";
|
|
2
5
|
|
|
3
6
|
export function classNames(...classes: string[]) {
|
|
4
7
|
return classes.filter(Boolean).join(" ");
|
|
@@ -35,3 +38,7 @@ export function useCopyToClipboard(
|
|
|
35
38
|
|
|
36
39
|
return [isCopied, copy];
|
|
37
40
|
}
|
|
41
|
+
|
|
42
|
+
export function cn(...inputs: ClassValue[]) {
|
|
43
|
+
return twMerge(clsx(inputs));
|
|
44
|
+
}
|