@ciridae/ui 0.2.4 → 0.3.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.
- package/dist/components/ui/app-shell-page.d.ts +22 -0
- package/dist/components/ui/app-shell-page.js +17 -0
- package/dist/components/ui/item.d.ts +1 -1
- package/dist/styled-system/styles.css +393 -61
- package/dist/styles.css +2 -0
- package/package.json +6 -260
- package/dist/components/agentic/agent-card.d.ts +0 -28
- package/dist/components/agentic/agent-card.js +0 -27
- package/dist/components/agentic/agent-composer.d.ts +0 -44
- package/dist/components/agentic/agent-composer.js +0 -104
- package/dist/components/agentic/agent-context.d.ts +0 -28
- package/dist/components/agentic/agent-context.js +0 -102
- package/dist/components/agentic/agent-plan.d.ts +0 -27
- package/dist/components/agentic/agent-plan.js +0 -43
- package/dist/components/agentic/agent-queue.d.ts +0 -46
- package/dist/components/agentic/agent-queue.js +0 -53
- package/dist/components/agentic/agent-task.d.ts +0 -16
- package/dist/components/agentic/agent-task.js +0 -20
- package/dist/components/agentic/approval-request.d.ts +0 -24
- package/dist/components/agentic/approval-request.js +0 -57
- package/dist/components/agentic/artifact.d.ts +0 -24
- package/dist/components/agentic/artifact.js +0 -72
- package/dist/components/agentic/attachments.d.ts +0 -124
- package/dist/components/agentic/attachments.js +0 -595
- package/dist/components/agentic/audio-player.d.ts +0 -16
- package/dist/components/agentic/audio-player.js +0 -21
- package/dist/components/agentic/canvas.d.ts +0 -10
- package/dist/components/agentic/canvas.js +0 -22
- package/dist/components/agentic/clipboard.d.ts +0 -2
- package/dist/components/agentic/clipboard.js +0 -12
- package/dist/components/agentic/code-block.d.ts +0 -43
- package/dist/components/agentic/code-block.js +0 -92
- package/dist/components/agentic/commit.d.ts +0 -57
- package/dist/components/agentic/commit.js +0 -85
- package/dist/components/agentic/connection.d.ts +0 -3
- package/dist/components/agentic/connection.js +0 -8
- package/dist/components/agentic/controls.d.ts +0 -6
- package/dist/components/agentic/controls.js +0 -7
- package/dist/components/agentic/conversation.d.ts +0 -25
- package/dist/components/agentic/conversation.js +0 -56
- package/dist/components/agentic/edge.d.ts +0 -8
- package/dist/components/agentic/edge.js +0 -65
- package/dist/components/agentic/effort-selector.d.ts +0 -43
- package/dist/components/agentic/effort-selector.js +0 -47
- package/dist/components/agentic/environment-variables.d.ts +0 -32
- package/dist/components/agentic/environment-variables.js +0 -66
- package/dist/components/agentic/file-tree.d.ts +0 -24
- package/dist/components/agentic/file-tree.js +0 -56
- package/dist/components/agentic/image.d.ts +0 -9
- package/dist/components/agentic/image.js +0 -11
- package/dist/components/agentic/inline-citation.d.ts +0 -40
- package/dist/components/agentic/inline-citation.js +0 -111
- package/dist/components/agentic/jsx-preview.d.ts +0 -19
- package/dist/components/agentic/jsx-preview.js +0 -34
- package/dist/components/agentic/message-branch.d.ts +0 -20
- package/dist/components/agentic/message-branch.js +0 -83
- package/dist/components/agentic/message-response.css +0 -265
- package/dist/components/agentic/message-response.css.d.ts +0 -2
- package/dist/components/agentic/message.d.ts +0 -27
- package/dist/components/agentic/message.js +0 -57
- package/dist/components/agentic/mic-selector.d.ts +0 -58
- package/dist/components/agentic/mic-selector.js +0 -173
- package/dist/components/agentic/model-selector.d.ts +0 -39
- package/dist/components/agentic/model-selector.js +0 -47
- package/dist/components/agentic/node.d.ts +0 -26
- package/dist/components/agentic/node.js +0 -29
- package/dist/components/agentic/open-in-chat.d.ts +0 -9
- package/dist/components/agentic/open-in-chat.js +0 -8
- package/dist/components/agentic/package-info.d.ts +0 -30
- package/dist/components/agentic/package-info.js +0 -44
- package/dist/components/agentic/panel.d.ts +0 -6
- package/dist/components/agentic/panel.js +0 -7
- package/dist/components/agentic/persona.d.ts +0 -16
- package/dist/components/agentic/persona.js +0 -116
- package/dist/components/agentic/prompt-input-action-menu.d.ts +0 -16
- package/dist/components/agentic/prompt-input-action-menu.js +0 -22
- package/dist/components/agentic/prompt-input-command.d.ts +0 -18
- package/dist/components/agentic/prompt-input-command.js +0 -25
- package/dist/components/agentic/prompt-input-hover-card.d.ts +0 -10
- package/dist/components/agentic/prompt-input-hover-card.js +0 -13
- package/dist/components/agentic/prompt-input-select.d.ts +0 -14
- package/dist/components/agentic/prompt-input-select.js +0 -19
- package/dist/components/agentic/prompt-input-tabs.d.ts +0 -17
- package/dist/components/agentic/prompt-input-tabs.js +0 -45
- package/dist/components/agentic/prompt-input.d.ts +0 -79
- package/dist/components/agentic/prompt-input.js +0 -206
- package/dist/components/agentic/reasoning.d.ts +0 -21
- package/dist/components/agentic/reasoning.js +0 -106
- package/dist/components/agentic/run-checkpoint.d.ts +0 -13
- package/dist/components/agentic/run-checkpoint.js +0 -19
- package/dist/components/agentic/run-trace.d.ts +0 -30
- package/dist/components/agentic/run-trace.js +0 -56
- package/dist/components/agentic/sandbox.d.ts +0 -24
- package/dist/components/agentic/sandbox.js +0 -33
- package/dist/components/agentic/schema-display.d.ts +0 -39
- package/dist/components/agentic/schema-display.js +0 -56
- package/dist/components/agentic/shimmer.d.ts +0 -11
- package/dist/components/agentic/shimmer.js +0 -16
- package/dist/components/agentic/snippet.d.ts +0 -18
- package/dist/components/agentic/snippet.js +0 -35
- package/dist/components/agentic/sources.d.ts +0 -16
- package/dist/components/agentic/sources.js +0 -17
- package/dist/components/agentic/speech-input.d.ts +0 -24
- package/dist/components/agentic/speech-input.js +0 -30
- package/dist/components/agentic/stack-trace.d.ts +0 -27
- package/dist/components/agentic/stack-trace.js +0 -76
- package/dist/components/agentic/suggestion.d.ts +0 -12
- package/dist/components/agentic/suggestion.js +0 -15
- package/dist/components/agentic/terminal.d.ts +0 -24
- package/dist/components/agentic/terminal.js +0 -47
- package/dist/components/agentic/test-results.d.ts +0 -51
- package/dist/components/agentic/test-results.js +0 -83
- package/dist/components/agentic/theme.d.ts +0 -5
- package/dist/components/agentic/theme.js +0 -31
- package/dist/components/agentic/tool.d.ts +0 -25
- package/dist/components/agentic/tool.js +0 -73
- package/dist/components/agentic/toolbar.d.ts +0 -6
- package/dist/components/agentic/toolbar.js +0 -7
- package/dist/components/agentic/transcription.d.ts +0 -20
- package/dist/components/agentic/transcription.js +0 -32
- package/dist/components/agentic/types.d.ts +0 -172
- package/dist/components/agentic/types.js +0 -1
- package/dist/components/agentic/use-controllable-state.d.ts +0 -6
- package/dist/components/agentic/use-controllable-state.js +0 -13
- package/dist/components/agentic/voice-selector.d.ts +0 -69
- package/dist/components/agentic/voice-selector.js +0 -122
- package/dist/components/agentic/web-preview.d.ts +0 -25
- package/dist/components/agentic/web-preview.js +0 -33
|
@@ -1,122 +0,0 @@
|
|
|
1
|
-
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
|
-
/* eslint-disable max-lines, react-refresh/only-export-components */
|
|
3
|
-
import { CircleSmallIcon, MarsIcon, PauseIcon, PlayIcon, TransgenderIcon, VenusAndMarsIcon, VenusIcon, } from "lucide-react";
|
|
4
|
-
import * as React from "react";
|
|
5
|
-
import { Button } from "@ciridae/ui/button";
|
|
6
|
-
import { Command, CommandDialog, CommandEmpty, CommandGroup, CommandInput, CommandItem, CommandList, CommandSeparator, CommandShortcut, } from "@ciridae/ui/command";
|
|
7
|
-
import { Dialog, DialogContent, DialogTitle, DialogTrigger } from "@ciridae/ui/dialog";
|
|
8
|
-
import { Spinner } from "@ciridae/ui/spinner";
|
|
9
|
-
import { cn } from "@ciridae/ui/utils";
|
|
10
|
-
import { useControllableState } from "./use-controllable-state";
|
|
11
|
-
const VoiceSelectorContext = React.createContext(null);
|
|
12
|
-
function VoiceSelector({ children, defaultOpen = false, defaultValue, onOpenChange, onValueChange, open: openProp, value: valueProp, voices = [], ...props }) {
|
|
13
|
-
const [value, setValue] = useControllableState({
|
|
14
|
-
defaultValue,
|
|
15
|
-
onChange: onValueChange,
|
|
16
|
-
value: valueProp,
|
|
17
|
-
});
|
|
18
|
-
const [open, setOpen] = useControllableState({
|
|
19
|
-
defaultValue: defaultOpen,
|
|
20
|
-
onChange: onOpenChange,
|
|
21
|
-
value: openProp,
|
|
22
|
-
});
|
|
23
|
-
const contextValue = React.useMemo(() => ({ open, setOpen, setValue, value, voices }), [open, setOpen, setValue, value, voices]);
|
|
24
|
-
return (_jsx(VoiceSelectorContext.Provider, { value: contextValue, children: _jsx(Dialog, { onOpenChange: setOpen, open: open, ...props, children: children ?? _jsx(VoiceSelectorDefaultContent, {}) }) }));
|
|
25
|
-
}
|
|
26
|
-
function VoiceSelectorDefaultContent() {
|
|
27
|
-
const { voices } = useVoiceSelector();
|
|
28
|
-
return (_jsxs(_Fragment, { children: [_jsx(VoiceSelectorTrigger, { asChild: true, children: _jsx(Button, { className: "w-64 justify-between", variant: "outline", children: _jsx(VoiceSelectorValue, { className: "max-w-52 text-left" }) }) }), _jsxs(VoiceSelectorContent, { children: [_jsx(VoiceSelectorInput, { placeholder: "Search voices..." }), _jsxs(VoiceSelectorList, { children: [_jsx(VoiceSelectorEmpty, { children: "No voices found." }), _jsx(VoiceSelectorGroup, { heading: "Voices", children: voices.map((voice) => (_jsx(VoiceSelectorItem, { voice: voice }, voice.id))) })] })] })] }));
|
|
29
|
-
}
|
|
30
|
-
function useVoiceSelector() {
|
|
31
|
-
const context = React.useContext(VoiceSelectorContext);
|
|
32
|
-
if (!context)
|
|
33
|
-
throw new Error("VoiceSelector components must be used within VoiceSelector");
|
|
34
|
-
return context;
|
|
35
|
-
}
|
|
36
|
-
function VoiceSelectorTrigger(props) {
|
|
37
|
-
return _jsx(DialogTrigger, { ...props });
|
|
38
|
-
}
|
|
39
|
-
function VoiceSelectorContent({ children, className, title = "Voice selector", ...props }) {
|
|
40
|
-
return (_jsxs(DialogContent, { "aria-describedby": undefined, className: cn("overflow-hidden p-0 sm:max-w-xl", className), ...props, children: [_jsx(DialogTitle, { className: "sr-only", children: title }), _jsx(Command, { className: "**:data-[slot=command-input-wrapper]:h-auto", children: children })] }));
|
|
41
|
-
}
|
|
42
|
-
function VoiceSelectorDialog(props) {
|
|
43
|
-
return _jsx(CommandDialog, { ...props });
|
|
44
|
-
}
|
|
45
|
-
function VoiceSelectorInput({ className, ...props }) {
|
|
46
|
-
return _jsx(CommandInput, { className: cn("h-auto py-3", className), ...props });
|
|
47
|
-
}
|
|
48
|
-
function VoiceSelectorList(props) {
|
|
49
|
-
return _jsx(CommandList, { ...props });
|
|
50
|
-
}
|
|
51
|
-
function VoiceSelectorEmpty(props) {
|
|
52
|
-
return _jsx(CommandEmpty, { ...props });
|
|
53
|
-
}
|
|
54
|
-
function VoiceSelectorGroup(props) {
|
|
55
|
-
return _jsx(CommandGroup, { ...props });
|
|
56
|
-
}
|
|
57
|
-
function VoiceSelectorItem({ children, onSelect, value, voice, ...props }) {
|
|
58
|
-
const { setOpen, setValue } = useVoiceSelector();
|
|
59
|
-
const itemValue = value ?? voice?.id;
|
|
60
|
-
return (_jsx(CommandItem, { onSelect: (currentValue) => {
|
|
61
|
-
setValue(itemValue ?? currentValue);
|
|
62
|
-
setOpen(false);
|
|
63
|
-
onSelect?.(currentValue);
|
|
64
|
-
}, value: itemValue, ...props, children: children ?? (voice ? _jsx(VoiceSelectorOption, { voice: voice }) : null) }));
|
|
65
|
-
}
|
|
66
|
-
function VoiceSelectorOption({ voice }) {
|
|
67
|
-
return (_jsxs("div", { className: "flex min-w-0 flex-1 items-center gap-3", children: [_jsxs("div", { className: "grid min-w-0 flex-1 gap-1", children: [_jsx(VoiceSelectorName, { children: voice.label }), _jsxs(VoiceSelectorAttributes, { children: [voice.gender ? _jsx(VoiceSelectorGender, { value: voice.gender }) : null, voice.accent ? _jsx(VoiceSelectorAccent, { value: voice.accent }) : null, voice.age ? _jsx(VoiceSelectorAge, { children: voice.age }) : null] }), voice.description ? (_jsx(VoiceSelectorDescription, { children: voice.description })) : null] }), voice.previewLabel ? (_jsx(VoiceSelectorShortcut, { children: voice.previewLabel })) : null] }));
|
|
68
|
-
}
|
|
69
|
-
function VoiceSelectorShortcut(props) {
|
|
70
|
-
return _jsx(CommandShortcut, { ...props });
|
|
71
|
-
}
|
|
72
|
-
function VoiceSelectorSeparator(props) {
|
|
73
|
-
return _jsx(CommandSeparator, { ...props });
|
|
74
|
-
}
|
|
75
|
-
function VoiceSelectorGender({ className, value, ...props }) {
|
|
76
|
-
return (_jsx("span", { className: cn("inline-flex items-center gap-1", className), ...props, children: _jsx(VoiceSelectorGenderIcon, { value: value }) }));
|
|
77
|
-
}
|
|
78
|
-
function VoiceSelectorAccent({ children, className, value, ...props }) {
|
|
79
|
-
return (_jsx("span", { className: cn("font-mono text-[0.6875rem] uppercase", className), ...props, children: children ?? value }));
|
|
80
|
-
}
|
|
81
|
-
function VoiceSelectorAge({ className, ...props }) {
|
|
82
|
-
return _jsx("span", { className: cn("text-[0.6875rem]", className), ...props });
|
|
83
|
-
}
|
|
84
|
-
function VoiceSelectorName({ className, ...props }) {
|
|
85
|
-
return _jsx("span", { className: cn("truncate font-medium", className), ...props });
|
|
86
|
-
}
|
|
87
|
-
function VoiceSelectorDescription({ className, ...props }) {
|
|
88
|
-
return _jsx("span", { className: cn("truncate text-xs text-muted-foreground", className), ...props });
|
|
89
|
-
}
|
|
90
|
-
function VoiceSelectorAttributes({ className, ...props }) {
|
|
91
|
-
return (_jsx("div", { className: cn("flex min-w-0 items-center gap-1.5 text-xs text-muted-foreground", className), ...props }));
|
|
92
|
-
}
|
|
93
|
-
function VoiceSelectorBullet({ className, ...props }) {
|
|
94
|
-
return (_jsx("span", { className: cn("text-muted-foreground", className), ...props, children: "-" }));
|
|
95
|
-
}
|
|
96
|
-
function VoiceSelectorValue({ className, placeholder = "Select voice", ...props }) {
|
|
97
|
-
const { value, voices } = useVoiceSelector();
|
|
98
|
-
const voice = voices.find((candidate) => candidate.id === value);
|
|
99
|
-
return (_jsx("span", { className: cn("truncate", className), ...props, children: voice?.label ?? placeholder }));
|
|
100
|
-
}
|
|
101
|
-
function VoiceSelectorPreview({ className, loading, onClick, onPlay, playing, type = "button", ...props }) {
|
|
102
|
-
const Icon = loading ? Spinner : playing ? PauseIcon : PlayIcon;
|
|
103
|
-
return (_jsx("button", { "aria-label": playing ? "Pause voice preview" : "Play voice preview", className: cn("inline-flex size-7 shrink-0 items-center justify-center rounded-md border bg-background text-foreground transition-colors hover:bg-accent hover:text-accent-foreground", className), onClick: (event) => {
|
|
104
|
-
event.stopPropagation();
|
|
105
|
-
onClick?.(event);
|
|
106
|
-
if (!event.defaultPrevented)
|
|
107
|
-
onPlay?.();
|
|
108
|
-
}, ...props, type: type, children: _jsx(Icon, { className: "size-3.5" }) }));
|
|
109
|
-
}
|
|
110
|
-
function VoiceSelectorGenderIcon({ value }) {
|
|
111
|
-
if (value === "male")
|
|
112
|
-
return _jsx(MarsIcon, { className: "size-3.5" });
|
|
113
|
-
if (value === "female")
|
|
114
|
-
return _jsx(VenusIcon, { className: "size-3.5" });
|
|
115
|
-
if (value === "transgender")
|
|
116
|
-
return _jsx(TransgenderIcon, { className: "size-3.5" });
|
|
117
|
-
if (value === "androgyne" || value === "intersex") {
|
|
118
|
-
return _jsx(VenusAndMarsIcon, { className: "size-3.5" });
|
|
119
|
-
}
|
|
120
|
-
return _jsx(CircleSmallIcon, { className: "size-3.5" });
|
|
121
|
-
}
|
|
122
|
-
export { VoiceSelector, VoiceSelectorAccent, VoiceSelectorAge, VoiceSelectorAttributes, VoiceSelectorBullet, VoiceSelectorContent, VoiceSelectorDescription, VoiceSelectorDialog, VoiceSelectorEmpty, VoiceSelectorGender, VoiceSelectorGroup, VoiceSelectorInput, VoiceSelectorItem, VoiceSelectorList, VoiceSelectorName, VoiceSelectorPreview, VoiceSelectorSeparator, VoiceSelectorShortcut, VoiceSelectorTrigger, VoiceSelectorValue, useVoiceSelector, };
|
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
import type * as React from "react";
|
|
2
|
-
import { Button } from "@ciridae/ui/button";
|
|
3
|
-
import { Input } from "@ciridae/ui/input";
|
|
4
|
-
type WebPreviewProps = React.ComponentProps<"div"> & {
|
|
5
|
-
url: string;
|
|
6
|
-
};
|
|
7
|
-
type WebPreviewNavigationProps = React.ComponentProps<"div">;
|
|
8
|
-
type WebPreviewNavigationButtonProps = React.ComponentProps<typeof Button> & {
|
|
9
|
-
action?: "back" | "forward" | "reload";
|
|
10
|
-
};
|
|
11
|
-
type WebPreviewUrlProps = Omit<React.ComponentProps<typeof Input>, "value"> & {
|
|
12
|
-
value?: string;
|
|
13
|
-
};
|
|
14
|
-
type WebPreviewBodyProps = React.ComponentProps<"iframe"> & {
|
|
15
|
-
src?: string;
|
|
16
|
-
};
|
|
17
|
-
type WebPreviewConsoleProps = React.ComponentProps<"div">;
|
|
18
|
-
declare function WebPreview({ children, className, url, ...props }: WebPreviewProps): React.JSX.Element;
|
|
19
|
-
declare function WebPreviewNavigation({ className, ...props }: WebPreviewNavigationProps): React.JSX.Element;
|
|
20
|
-
declare function WebPreviewNavigationButton({ action, children, ...props }: WebPreviewNavigationButtonProps): React.JSX.Element;
|
|
21
|
-
declare function WebPreviewUrl({ className, value, ...props }: WebPreviewUrlProps): React.JSX.Element;
|
|
22
|
-
declare function WebPreviewBody({ className, referrerPolicy, sandbox, src, title, ...props }: WebPreviewBodyProps): React.JSX.Element;
|
|
23
|
-
declare function WebPreviewConsole({ className, ...props }: WebPreviewConsoleProps): React.JSX.Element;
|
|
24
|
-
export { WebPreview, WebPreviewBody, WebPreviewConsole, WebPreviewNavigation, WebPreviewNavigationButton, WebPreviewUrl, };
|
|
25
|
-
export type { WebPreviewBodyProps, WebPreviewConsoleProps, WebPreviewNavigationButtonProps, WebPreviewNavigationProps, WebPreviewProps, WebPreviewUrlProps, };
|
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
-
import { ArrowLeftIcon, ArrowRightIcon, RotateCwIcon } from "lucide-react";
|
|
3
|
-
import { createContext, useContext, useMemo } from "react";
|
|
4
|
-
import { Button } from "@ciridae/ui/button";
|
|
5
|
-
import { Input } from "@ciridae/ui/input";
|
|
6
|
-
import { cn } from "@ciridae/ui/utils";
|
|
7
|
-
const WebPreviewContext = createContext({ url: "" });
|
|
8
|
-
function useWebPreview() {
|
|
9
|
-
return useContext(WebPreviewContext);
|
|
10
|
-
}
|
|
11
|
-
function WebPreview({ children, className, url, ...props }) {
|
|
12
|
-
const contextValue = useMemo(() => ({ url }), [url]);
|
|
13
|
-
return (_jsx(WebPreviewContext.Provider, { value: contextValue, children: _jsx("div", { "data-slot": "web-preview", className: cn("flex min-h-0 w-full flex-col overflow-hidden rounded-lg border bg-card", className), ...props, children: children }) }));
|
|
14
|
-
}
|
|
15
|
-
function WebPreviewNavigation({ className, ...props }) {
|
|
16
|
-
return (_jsx("div", { "data-slot": "web-preview-navigation", className: cn("flex min-w-0 items-center gap-2 border-b p-2", className), ...props }));
|
|
17
|
-
}
|
|
18
|
-
function WebPreviewNavigationButton({ action = "reload", children, ...props }) {
|
|
19
|
-
const Icon = action === "back" ? ArrowLeftIcon : action === "forward" ? ArrowRightIcon : RotateCwIcon;
|
|
20
|
-
return (_jsx(Button, { "aria-label": action, size: "icon", type: "button", variant: "ghost", ...props, children: children ?? _jsx(Icon, { "aria-hidden": "true", className: "size-4" }) }));
|
|
21
|
-
}
|
|
22
|
-
function WebPreviewUrl({ className, value, ...props }) {
|
|
23
|
-
const { url } = useWebPreview();
|
|
24
|
-
return (_jsx(Input, { "data-slot": "web-preview-url", readOnly: true, value: value ?? url, className: cn("h-8 flex-1 font-mono text-xs", className), ...props }));
|
|
25
|
-
}
|
|
26
|
-
function WebPreviewBody({ className, referrerPolicy = "no-referrer", sandbox = "allow-scripts", src, title = "Web preview", ...props }) {
|
|
27
|
-
const { url } = useWebPreview();
|
|
28
|
-
return (_jsx("iframe", { "data-slot": "web-preview-body", className: cn("min-h-80 w-full flex-1 bg-background", className), referrerPolicy: referrerPolicy, sandbox: sandbox, src: src ?? url, title: title, ...props }));
|
|
29
|
-
}
|
|
30
|
-
function WebPreviewConsole({ className, ...props }) {
|
|
31
|
-
return (_jsx("div", { "data-slot": "web-preview-console", className: cn("border-t bg-muted/40 p-3 font-mono text-xs text-muted-foreground", className), ...props }));
|
|
32
|
-
}
|
|
33
|
-
export { WebPreview, WebPreviewBody, WebPreviewConsole, WebPreviewNavigation, WebPreviewNavigationButton, WebPreviewUrl, };
|