@schemavaults/ui 0.90.0 → 0.92.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/attachment-card/attachment-card.d.ts +92 -0
- package/dist/components/ui/attachment-card/attachment-card.js +364 -0
- package/dist/components/ui/attachment-card/attachment-card.js.map +1 -0
- package/dist/components/ui/attachment-card/index.d.ts +2 -0
- package/dist/components/ui/attachment-card/index.js +2 -0
- package/dist/components/ui/attachment-card/index.js.map +1 -0
- package/dist/components/ui/device-frame/device-frame.d.ts +72 -0
- package/dist/components/ui/device-frame/device-frame.js +178 -0
- package/dist/components/ui/device-frame/device-frame.js.map +1 -0
- package/dist/components/ui/device-frame/index.d.ts +2 -0
- package/dist/components/ui/device-frame/index.js +2 -0
- package/dist/components/ui/device-frame/index.js.map +1 -0
- package/dist/components/ui/index.d.ts +4 -0
- package/dist/components/ui/index.js +2 -0
- package/dist/components/ui/index.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
import { type VariantProps } from "class-variance-authority";
|
|
2
|
+
import { type AnchorHTMLAttributes, type HTMLAttributes, type MouseEvent, type ReactElement, type ReactNode, type Ref } from "react";
|
|
3
|
+
export declare const attachmentCardVariantIds: readonly ["default", "muted", "outline", "ghost"];
|
|
4
|
+
export type AttachmentCardVariantId = (typeof attachmentCardVariantIds)[number];
|
|
5
|
+
export declare const attachmentCardSizeIds: readonly ["sm", "md", "lg"];
|
|
6
|
+
export type AttachmentCardSizeId = (typeof attachmentCardSizeIds)[number];
|
|
7
|
+
export declare const attachmentCardStatusIds: readonly ["idle", "uploading", "error", "complete"];
|
|
8
|
+
export type AttachmentCardStatusId = (typeof attachmentCardStatusIds)[number];
|
|
9
|
+
export declare const attachmentCardFileKindIds: readonly ["image", "video", "audio", "text", "code", "archive", "spreadsheet", "json", "pdf", "generic"];
|
|
10
|
+
export type AttachmentCardFileKindId = (typeof attachmentCardFileKindIds)[number];
|
|
11
|
+
export declare const attachmentCardVariants: (props?: ({
|
|
12
|
+
variant?: "default" | "outline" | "ghost" | "muted" | null | undefined;
|
|
13
|
+
size?: "sm" | "lg" | "md" | null | undefined;
|
|
14
|
+
interactive?: boolean | null | undefined;
|
|
15
|
+
status?: "error" | "idle" | "uploading" | "complete" | null | undefined;
|
|
16
|
+
} & import("class-variance-authority/types").ClassProp) | undefined) => string;
|
|
17
|
+
/**
|
|
18
|
+
* Infer the file kind (used for icon + colour) from an explicit `fileType`
|
|
19
|
+
* (extension or MIME type) or, as a fallback, from the extension of `name`.
|
|
20
|
+
*/
|
|
21
|
+
export declare function inferAttachmentFileKind(name: string, fileType?: string): AttachmentCardFileKindId;
|
|
22
|
+
/**
|
|
23
|
+
* Format a byte count as a human-readable string using 1024-based units.
|
|
24
|
+
* `0` renders as `"0 B"`; negative values are clamped to `0`.
|
|
25
|
+
*/
|
|
26
|
+
export declare function formatBytes(bytes: number, fractionDigits?: number): string;
|
|
27
|
+
export interface AttachmentCardProps extends Omit<HTMLAttributes<HTMLDivElement>, "children">, Omit<VariantProps<typeof attachmentCardVariants>, "interactive"> {
|
|
28
|
+
/** File name (shown as the primary label). Required. */
|
|
29
|
+
name: string;
|
|
30
|
+
/** File size in bytes. Rendered with {@link formatBytes}. */
|
|
31
|
+
bytes?: number;
|
|
32
|
+
/** File extension (e.g. `"pdf"`) or MIME type (e.g. `"image/png"`). Used to pick the icon and colour. */
|
|
33
|
+
fileType?: string;
|
|
34
|
+
/** Explicit override of the inferred file kind. */
|
|
35
|
+
kind?: AttachmentCardFileKindId;
|
|
36
|
+
/** Secondary line rendered under the file name (e.g. uploader, timestamp). */
|
|
37
|
+
description?: ReactNode;
|
|
38
|
+
/** URL for an image preview shown in place of the file icon. Ignored on error. */
|
|
39
|
+
previewSrc?: string;
|
|
40
|
+
/** Optional href — makes the file name a link. */
|
|
41
|
+
href?: string;
|
|
42
|
+
/** Passed through to the underlying `<a>` when `href` is set. */
|
|
43
|
+
target?: AnchorHTMLAttributes<HTMLAnchorElement>["target"];
|
|
44
|
+
/** Passed through to the underlying `<a>` when `href` is set. */
|
|
45
|
+
rel?: AnchorHTMLAttributes<HTMLAnchorElement>["rel"];
|
|
46
|
+
/** Passed through to the underlying `<a>` when `href` is set. */
|
|
47
|
+
download?: AnchorHTMLAttributes<HTMLAnchorElement>["download"];
|
|
48
|
+
/** Upload/processing progress from 0-100. Only rendered when `status === "uploading"`. */
|
|
49
|
+
progress?: number;
|
|
50
|
+
/** Lifecycle state. `"error"` applies a destructive treatment; `"uploading"` shows the progress bar. */
|
|
51
|
+
status?: AttachmentCardStatusId;
|
|
52
|
+
/** Error message shown under the file name when `status === "error"`. */
|
|
53
|
+
errorMessage?: ReactNode;
|
|
54
|
+
/** Override the icon inside the icon box. */
|
|
55
|
+
icon?: ReactNode;
|
|
56
|
+
/** Right-side slot for custom actions (buttons, menus, etc.). */
|
|
57
|
+
actions?: ReactNode;
|
|
58
|
+
/** Convenience remove button rendered at the far right. Overridden by `actions`. */
|
|
59
|
+
onRemove?: (event: MouseEvent<HTMLButtonElement>) => void;
|
|
60
|
+
/** Label for the remove button (defaults to `"Remove {name}"`). */
|
|
61
|
+
removeLabel?: string;
|
|
62
|
+
/** Convenience retry button rendered when `status === "error"`. */
|
|
63
|
+
onRetry?: (event: MouseEvent<HTMLButtonElement>) => void;
|
|
64
|
+
/** Label for the retry button (defaults to `"Retry {name}"`). */
|
|
65
|
+
retryLabel?: string;
|
|
66
|
+
/** Convenience download button rendered when `href` is set. */
|
|
67
|
+
showDownloadButton?: boolean;
|
|
68
|
+
/** Label for the download button (defaults to `"Download {name}"`). */
|
|
69
|
+
downloadLabel?: string;
|
|
70
|
+
/** Extra classes for the icon box wrapper. */
|
|
71
|
+
iconClassName?: string;
|
|
72
|
+
/** Extra classes for the file name element. */
|
|
73
|
+
nameClassName?: string;
|
|
74
|
+
ref?: Ref<HTMLDivElement>;
|
|
75
|
+
}
|
|
76
|
+
declare function AttachmentCard({ name, bytes, fileType, kind, description, previewSrc, href, target, rel, download, progress, status, errorMessage, icon, actions, onRemove, removeLabel, onRetry, retryLabel, showDownloadButton, downloadLabel, variant, size, className, iconClassName, nameClassName, ref, ...props }: AttachmentCardProps): ReactElement;
|
|
77
|
+
declare namespace AttachmentCard {
|
|
78
|
+
var displayName: string;
|
|
79
|
+
}
|
|
80
|
+
export interface AttachmentCardListProps extends HTMLAttributes<HTMLUListElement> {
|
|
81
|
+
ref?: Ref<HTMLUListElement>;
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Convenience list wrapper for stacking multiple `AttachmentCard`s. Uses
|
|
85
|
+
* an unordered list under the hood so the collection is announced as a
|
|
86
|
+
* list to assistive tech; each direct child is wrapped in an `<li>`.
|
|
87
|
+
*/
|
|
88
|
+
declare function AttachmentCardList({ className, children, ref, ...props }: AttachmentCardListProps): ReactElement;
|
|
89
|
+
declare namespace AttachmentCardList {
|
|
90
|
+
var displayName: string;
|
|
91
|
+
}
|
|
92
|
+
export { AttachmentCard, AttachmentCardList };
|
|
@@ -0,0 +1,364 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { cva } from "class-variance-authority";
|
|
4
|
+
import { AlertCircle, Check, Download, File as FileIcon, FileArchive, FileAudio, FileCode, FileImage, FileJson, FileSpreadsheet, FileText, FileVideo, RotateCw, X, } from "lucide-react";
|
|
5
|
+
import { cn } from "../../../lib/utils";
|
|
6
|
+
export const attachmentCardVariantIds = [
|
|
7
|
+
"default",
|
|
8
|
+
"muted",
|
|
9
|
+
"outline",
|
|
10
|
+
"ghost",
|
|
11
|
+
];
|
|
12
|
+
export const attachmentCardSizeIds = [
|
|
13
|
+
"sm",
|
|
14
|
+
"md",
|
|
15
|
+
"lg",
|
|
16
|
+
];
|
|
17
|
+
export const attachmentCardStatusIds = [
|
|
18
|
+
"idle",
|
|
19
|
+
"uploading",
|
|
20
|
+
"error",
|
|
21
|
+
"complete",
|
|
22
|
+
];
|
|
23
|
+
export const attachmentCardFileKindIds = [
|
|
24
|
+
"image",
|
|
25
|
+
"video",
|
|
26
|
+
"audio",
|
|
27
|
+
"text",
|
|
28
|
+
"code",
|
|
29
|
+
"archive",
|
|
30
|
+
"spreadsheet",
|
|
31
|
+
"json",
|
|
32
|
+
"pdf",
|
|
33
|
+
"generic",
|
|
34
|
+
];
|
|
35
|
+
export const attachmentCardVariants = cva("group/attachment relative flex w-full items-center gap-3 overflow-hidden rounded-lg text-left transition-colors", {
|
|
36
|
+
variants: {
|
|
37
|
+
variant: {
|
|
38
|
+
default: "border border-border bg-card text-card-foreground hover:bg-accent/40",
|
|
39
|
+
muted: "border border-transparent bg-muted/60 text-foreground hover:bg-muted",
|
|
40
|
+
outline: "border border-border bg-transparent text-foreground hover:bg-accent/30",
|
|
41
|
+
ghost: "border border-transparent bg-transparent text-foreground hover:bg-accent/30",
|
|
42
|
+
},
|
|
43
|
+
size: {
|
|
44
|
+
sm: "p-2 text-xs gap-2.5",
|
|
45
|
+
md: "p-3 text-sm gap-3",
|
|
46
|
+
lg: "p-4 text-base gap-4",
|
|
47
|
+
},
|
|
48
|
+
interactive: {
|
|
49
|
+
true: "cursor-pointer focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background",
|
|
50
|
+
false: "",
|
|
51
|
+
},
|
|
52
|
+
status: {
|
|
53
|
+
idle: "",
|
|
54
|
+
uploading: "",
|
|
55
|
+
error: "border-destructive/60 bg-destructive/5 hover:bg-destructive/10 dark:bg-destructive/10",
|
|
56
|
+
complete: "",
|
|
57
|
+
},
|
|
58
|
+
},
|
|
59
|
+
defaultVariants: {
|
|
60
|
+
variant: "default",
|
|
61
|
+
size: "md",
|
|
62
|
+
interactive: false,
|
|
63
|
+
status: "idle",
|
|
64
|
+
},
|
|
65
|
+
});
|
|
66
|
+
const iconBoxVariants = cva("relative flex shrink-0 items-center justify-center overflow-hidden rounded-md", {
|
|
67
|
+
variants: {
|
|
68
|
+
size: {
|
|
69
|
+
sm: "size-8 [&>svg]:size-4",
|
|
70
|
+
md: "size-10 [&>svg]:size-5",
|
|
71
|
+
lg: "size-12 [&>svg]:size-6",
|
|
72
|
+
},
|
|
73
|
+
kind: {
|
|
74
|
+
image: "bg-sky-500/10 text-sky-600 dark:text-sky-400",
|
|
75
|
+
video: "bg-violet-500/10 text-violet-600 dark:text-violet-400",
|
|
76
|
+
audio: "bg-pink-500/10 text-pink-600 dark:text-pink-400",
|
|
77
|
+
text: "bg-muted text-muted-foreground",
|
|
78
|
+
code: "bg-emerald-500/10 text-emerald-600 dark:text-emerald-400",
|
|
79
|
+
archive: "bg-amber-500/10 text-amber-600 dark:text-amber-400",
|
|
80
|
+
spreadsheet: "bg-lime-500/10 text-lime-700 dark:bg-lime-500/15 dark:text-lime-300",
|
|
81
|
+
json: "bg-orange-500/10 text-orange-600 dark:text-orange-400",
|
|
82
|
+
pdf: "bg-red-500/10 text-red-600 dark:text-red-400",
|
|
83
|
+
generic: "bg-muted text-muted-foreground",
|
|
84
|
+
},
|
|
85
|
+
},
|
|
86
|
+
defaultVariants: {
|
|
87
|
+
size: "md",
|
|
88
|
+
kind: "generic",
|
|
89
|
+
},
|
|
90
|
+
});
|
|
91
|
+
const KIND_ICONS = {
|
|
92
|
+
image: FileImage,
|
|
93
|
+
video: FileVideo,
|
|
94
|
+
audio: FileAudio,
|
|
95
|
+
text: FileText,
|
|
96
|
+
code: FileCode,
|
|
97
|
+
archive: FileArchive,
|
|
98
|
+
spreadsheet: FileSpreadsheet,
|
|
99
|
+
json: FileJson,
|
|
100
|
+
pdf: FileText,
|
|
101
|
+
generic: FileIcon,
|
|
102
|
+
};
|
|
103
|
+
const EXTENSION_TO_KIND = {
|
|
104
|
+
// images
|
|
105
|
+
png: "image",
|
|
106
|
+
jpg: "image",
|
|
107
|
+
jpeg: "image",
|
|
108
|
+
gif: "image",
|
|
109
|
+
webp: "image",
|
|
110
|
+
svg: "image",
|
|
111
|
+
avif: "image",
|
|
112
|
+
heic: "image",
|
|
113
|
+
bmp: "image",
|
|
114
|
+
tiff: "image",
|
|
115
|
+
ico: "image",
|
|
116
|
+
// video
|
|
117
|
+
mp4: "video",
|
|
118
|
+
mov: "video",
|
|
119
|
+
webm: "video",
|
|
120
|
+
avi: "video",
|
|
121
|
+
mkv: "video",
|
|
122
|
+
m4v: "video",
|
|
123
|
+
// audio
|
|
124
|
+
mp3: "audio",
|
|
125
|
+
wav: "audio",
|
|
126
|
+
flac: "audio",
|
|
127
|
+
ogg: "audio",
|
|
128
|
+
m4a: "audio",
|
|
129
|
+
aac: "audio",
|
|
130
|
+
opus: "audio",
|
|
131
|
+
// pdf
|
|
132
|
+
pdf: "pdf",
|
|
133
|
+
// text / docs
|
|
134
|
+
txt: "text",
|
|
135
|
+
md: "text",
|
|
136
|
+
markdown: "text",
|
|
137
|
+
rtf: "text",
|
|
138
|
+
doc: "text",
|
|
139
|
+
docx: "text",
|
|
140
|
+
odt: "text",
|
|
141
|
+
// code
|
|
142
|
+
js: "code",
|
|
143
|
+
mjs: "code",
|
|
144
|
+
cjs: "code",
|
|
145
|
+
ts: "code",
|
|
146
|
+
tsx: "code",
|
|
147
|
+
jsx: "code",
|
|
148
|
+
py: "code",
|
|
149
|
+
rb: "code",
|
|
150
|
+
go: "code",
|
|
151
|
+
rs: "code",
|
|
152
|
+
java: "code",
|
|
153
|
+
kt: "code",
|
|
154
|
+
swift: "code",
|
|
155
|
+
c: "code",
|
|
156
|
+
cc: "code",
|
|
157
|
+
cpp: "code",
|
|
158
|
+
cxx: "code",
|
|
159
|
+
h: "code",
|
|
160
|
+
hpp: "code",
|
|
161
|
+
cs: "code",
|
|
162
|
+
php: "code",
|
|
163
|
+
sh: "code",
|
|
164
|
+
bash: "code",
|
|
165
|
+
zsh: "code",
|
|
166
|
+
fish: "code",
|
|
167
|
+
sql: "code",
|
|
168
|
+
html: "code",
|
|
169
|
+
htm: "code",
|
|
170
|
+
css: "code",
|
|
171
|
+
scss: "code",
|
|
172
|
+
less: "code",
|
|
173
|
+
vue: "code",
|
|
174
|
+
svelte: "code",
|
|
175
|
+
xml: "code",
|
|
176
|
+
yaml: "code",
|
|
177
|
+
yml: "code",
|
|
178
|
+
toml: "code",
|
|
179
|
+
// archives
|
|
180
|
+
zip: "archive",
|
|
181
|
+
tar: "archive",
|
|
182
|
+
gz: "archive",
|
|
183
|
+
tgz: "archive",
|
|
184
|
+
bz2: "archive",
|
|
185
|
+
rar: "archive",
|
|
186
|
+
"7z": "archive",
|
|
187
|
+
xz: "archive",
|
|
188
|
+
// spreadsheets
|
|
189
|
+
csv: "spreadsheet",
|
|
190
|
+
tsv: "spreadsheet",
|
|
191
|
+
xls: "spreadsheet",
|
|
192
|
+
xlsx: "spreadsheet",
|
|
193
|
+
ods: "spreadsheet",
|
|
194
|
+
numbers: "spreadsheet",
|
|
195
|
+
// json
|
|
196
|
+
json: "json",
|
|
197
|
+
jsonc: "json",
|
|
198
|
+
ndjson: "json",
|
|
199
|
+
json5: "json",
|
|
200
|
+
};
|
|
201
|
+
function extensionFromName(name) {
|
|
202
|
+
const lastDot = name.lastIndexOf(".");
|
|
203
|
+
if (lastDot < 0 || lastDot === name.length - 1)
|
|
204
|
+
return null;
|
|
205
|
+
return name.slice(lastDot + 1).toLowerCase();
|
|
206
|
+
}
|
|
207
|
+
function kindFromMimeType(mime) {
|
|
208
|
+
const lower = mime.toLowerCase();
|
|
209
|
+
if (lower.startsWith("image/"))
|
|
210
|
+
return "image";
|
|
211
|
+
if (lower.startsWith("video/"))
|
|
212
|
+
return "video";
|
|
213
|
+
if (lower.startsWith("audio/"))
|
|
214
|
+
return "audio";
|
|
215
|
+
if (lower === "application/pdf")
|
|
216
|
+
return "pdf";
|
|
217
|
+
if (lower === "application/json" || lower.endsWith("+json"))
|
|
218
|
+
return "json";
|
|
219
|
+
if (lower === "application/zip" ||
|
|
220
|
+
lower === "application/x-tar" ||
|
|
221
|
+
lower === "application/gzip" ||
|
|
222
|
+
lower === "application/x-7z-compressed" ||
|
|
223
|
+
lower === "application/x-rar-compressed" ||
|
|
224
|
+
lower === "application/x-bzip2") {
|
|
225
|
+
return "archive";
|
|
226
|
+
}
|
|
227
|
+
if (lower === "text/csv" ||
|
|
228
|
+
lower === "text/tab-separated-values" ||
|
|
229
|
+
lower === "application/vnd.ms-excel" ||
|
|
230
|
+
lower.startsWith("application/vnd.openxmlformats-officedocument.spreadsheet")) {
|
|
231
|
+
return "spreadsheet";
|
|
232
|
+
}
|
|
233
|
+
if (lower.startsWith("text/") &&
|
|
234
|
+
(lower === "text/html" ||
|
|
235
|
+
lower === "text/css" ||
|
|
236
|
+
lower === "text/javascript" ||
|
|
237
|
+
lower === "text/x-python" ||
|
|
238
|
+
lower === "text/x-c" ||
|
|
239
|
+
lower === "text/x-c++" ||
|
|
240
|
+
lower === "text/x-java-source")) {
|
|
241
|
+
return "code";
|
|
242
|
+
}
|
|
243
|
+
if (lower.startsWith("text/"))
|
|
244
|
+
return "text";
|
|
245
|
+
return "generic";
|
|
246
|
+
}
|
|
247
|
+
/**
|
|
248
|
+
* Infer the file kind (used for icon + colour) from an explicit `fileType`
|
|
249
|
+
* (extension or MIME type) or, as a fallback, from the extension of `name`.
|
|
250
|
+
*/
|
|
251
|
+
export function inferAttachmentFileKind(name, fileType) {
|
|
252
|
+
if (fileType) {
|
|
253
|
+
const trimmed = fileType.trim().toLowerCase();
|
|
254
|
+
if (trimmed.includes("/"))
|
|
255
|
+
return kindFromMimeType(trimmed);
|
|
256
|
+
const stripped = trimmed.startsWith(".") ? trimmed.slice(1) : trimmed;
|
|
257
|
+
if (EXTENSION_TO_KIND[stripped])
|
|
258
|
+
return EXTENSION_TO_KIND[stripped];
|
|
259
|
+
}
|
|
260
|
+
const ext = extensionFromName(name);
|
|
261
|
+
if (ext && EXTENSION_TO_KIND[ext])
|
|
262
|
+
return EXTENSION_TO_KIND[ext];
|
|
263
|
+
return "generic";
|
|
264
|
+
}
|
|
265
|
+
const BYTE_UNITS = ["B", "KB", "MB", "GB", "TB", "PB"];
|
|
266
|
+
/**
|
|
267
|
+
* Format a byte count as a human-readable string using 1024-based units.
|
|
268
|
+
* `0` renders as `"0 B"`; negative values are clamped to `0`.
|
|
269
|
+
*/
|
|
270
|
+
export function formatBytes(bytes, fractionDigits = 1) {
|
|
271
|
+
if (!Number.isFinite(bytes) || bytes <= 0)
|
|
272
|
+
return "0 B";
|
|
273
|
+
const exp = Math.min(Math.floor(Math.log(bytes) / Math.log(1024)), BYTE_UNITS.length - 1);
|
|
274
|
+
const value = bytes / Math.pow(1024, exp);
|
|
275
|
+
const unit = BYTE_UNITS[exp];
|
|
276
|
+
const rounded = exp === 0
|
|
277
|
+
? value.toFixed(0)
|
|
278
|
+
: value >= 100
|
|
279
|
+
? value.toFixed(0)
|
|
280
|
+
: value.toFixed(fractionDigits);
|
|
281
|
+
return `${rounded} ${unit}`;
|
|
282
|
+
}
|
|
283
|
+
const meterHeightBySize = {
|
|
284
|
+
sm: "h-1",
|
|
285
|
+
md: "h-1.5",
|
|
286
|
+
lg: "h-2",
|
|
287
|
+
};
|
|
288
|
+
const secondaryTextBySize = {
|
|
289
|
+
sm: "text-[0.7rem]",
|
|
290
|
+
md: "text-xs",
|
|
291
|
+
lg: "text-sm",
|
|
292
|
+
};
|
|
293
|
+
const actionButtonSizeBySize = {
|
|
294
|
+
sm: "size-6 [&>svg]:size-3",
|
|
295
|
+
md: "size-7 [&>svg]:size-3.5",
|
|
296
|
+
lg: "size-8 [&>svg]:size-4",
|
|
297
|
+
};
|
|
298
|
+
function AttachmentCard({ name, bytes, fileType, kind, description, previewSrc, href, target, rel, download, progress, status = "idle", errorMessage, icon, actions, onRemove, removeLabel, onRetry, retryLabel, showDownloadButton = false, downloadLabel, variant, size, className, iconClassName, nameClassName, ref, ...props }) {
|
|
299
|
+
const resolvedSize = size ?? "md";
|
|
300
|
+
const resolvedKind = kind ?? inferAttachmentFileKind(name, fileType);
|
|
301
|
+
const KindIcon = KIND_ICONS[resolvedKind];
|
|
302
|
+
const isUploading = status === "uploading";
|
|
303
|
+
const isError = status === "error";
|
|
304
|
+
const isComplete = status === "complete";
|
|
305
|
+
const showPreview = Boolean(previewSrc) && !isError;
|
|
306
|
+
const clampedProgress = typeof progress === "number" && Number.isFinite(progress)
|
|
307
|
+
? Math.max(0, Math.min(100, progress))
|
|
308
|
+
: undefined;
|
|
309
|
+
const progressText = isUploading && clampedProgress !== undefined
|
|
310
|
+
? `${Math.round(clampedProgress)}%`
|
|
311
|
+
: null;
|
|
312
|
+
const sizeText = typeof bytes === "number" && Number.isFinite(bytes) && bytes >= 0
|
|
313
|
+
? formatBytes(bytes)
|
|
314
|
+
: null;
|
|
315
|
+
const secondaryChips = [];
|
|
316
|
+
if (sizeText) {
|
|
317
|
+
secondaryChips.push(_jsx("span", { "data-slot": "attachment-card-size", className: "tabular-nums", children: sizeText }, "size"));
|
|
318
|
+
}
|
|
319
|
+
if (progressText) {
|
|
320
|
+
secondaryChips.push(_jsx("span", { "data-slot": "attachment-card-progress-text", className: "tabular-nums text-primary", children: progressText }, "progress"));
|
|
321
|
+
}
|
|
322
|
+
if (description !== undefined && description !== null && description !== "") {
|
|
323
|
+
secondaryChips.push(_jsx("span", { "data-slot": "attachment-card-description", className: "truncate", children: description }, "description"));
|
|
324
|
+
}
|
|
325
|
+
const NameTag = href ? "a" : "span";
|
|
326
|
+
const nameProps = href
|
|
327
|
+
? {
|
|
328
|
+
href,
|
|
329
|
+
target,
|
|
330
|
+
rel: rel ?? (target === "_blank" ? "noopener noreferrer" : undefined),
|
|
331
|
+
download,
|
|
332
|
+
className: cn("truncate font-medium text-foreground outline-none hover:underline focus-visible:underline focus-visible:ring-2 focus-visible:ring-ring rounded-sm", nameClassName),
|
|
333
|
+
}
|
|
334
|
+
: {
|
|
335
|
+
className: cn("truncate font-medium text-foreground", nameClassName),
|
|
336
|
+
};
|
|
337
|
+
const showDefaultRemove = onRemove !== undefined && actions === undefined;
|
|
338
|
+
const showDefaultRetry = isError && onRetry !== undefined;
|
|
339
|
+
const showDefaultDownload = showDownloadButton && href !== undefined && !isError && !isUploading;
|
|
340
|
+
return (_jsxs("div", { ref: ref, "data-slot": "attachment-card", "data-status": status, "data-kind": resolvedKind, role: "group", "aria-label": name, className: cn(attachmentCardVariants({
|
|
341
|
+
variant,
|
|
342
|
+
size: resolvedSize,
|
|
343
|
+
status,
|
|
344
|
+
interactive: false,
|
|
345
|
+
}), className), ...props, children: [_jsxs("div", { "aria-hidden": "true", "data-slot": "attachment-card-icon", className: cn(iconBoxVariants({ size: resolvedSize, kind: resolvedKind }), iconClassName), children: [showPreview ? (_jsx("img", { src: previewSrc, alt: "", className: "absolute inset-0 h-full w-full object-cover", loading: "lazy", decoding: "async" })) : icon ? (icon) : (_jsx(KindIcon, { "aria-hidden": "true" })), isComplete && (_jsx("span", { "aria-hidden": "true", className: "absolute -bottom-0.5 -right-0.5 flex size-3.5 items-center justify-center rounded-full bg-emerald-500 text-white ring-2 ring-card [&>svg]:size-2.5", children: _jsx(Check, { "aria-hidden": "true" }) })), isError && (_jsx("span", { "aria-hidden": "true", className: "absolute -bottom-0.5 -right-0.5 flex size-3.5 items-center justify-center rounded-full bg-destructive text-destructive-foreground ring-2 ring-card [&>svg]:size-2.5", children: _jsx(AlertCircle, { "aria-hidden": "true" }) }))] }), _jsxs("div", { className: "flex min-w-0 flex-1 flex-col gap-0.5", children: [_jsx("div", { className: "flex min-w-0 items-center gap-2", children: _jsx(NameTag, { "data-slot": "attachment-card-name", ...nameProps, children: name }) }), isError && errorMessage ? (_jsx("p", { "data-slot": "attachment-card-error", className: cn("truncate text-destructive", secondaryTextBySize[resolvedSize]), children: errorMessage })) : secondaryChips.length > 0 ? (_jsx("p", { "data-slot": "attachment-card-meta", className: cn("flex min-w-0 items-center gap-1.5 text-muted-foreground", secondaryTextBySize[resolvedSize]), children: secondaryChips.map((chip, i) => (_jsxs("span", { className: "inline-flex min-w-0 items-center gap-1.5", children: [i > 0 && (_jsx("span", { "aria-hidden": "true", className: "inline-block size-0.5 shrink-0 rounded-full bg-current opacity-50" })), chip] }, i))) })) : null, isUploading && (_jsx("div", { role: "progressbar", "aria-label": `Uploading ${name}`, "aria-valuemin": 0, "aria-valuemax": 100, "aria-valuenow": clampedProgress !== undefined ? Math.round(clampedProgress) : undefined, "aria-valuetext": progressText ?? undefined, "data-slot": "attachment-card-progress", className: cn("mt-1 w-full overflow-hidden rounded-full bg-muted", meterHeightBySize[resolvedSize]), children: _jsx("div", { className: cn("h-full rounded-full bg-primary transition-[width]", clampedProgress === undefined && "w-1/3 animate-pulse"), style: clampedProgress !== undefined
|
|
346
|
+
? { width: `${clampedProgress}%` }
|
|
347
|
+
: undefined }) }))] }), (actions ||
|
|
348
|
+
showDefaultRetry ||
|
|
349
|
+
showDefaultDownload ||
|
|
350
|
+
showDefaultRemove) && (_jsxs("div", { "data-slot": "attachment-card-actions", className: "ml-auto flex shrink-0 items-center gap-1", children: [actions, showDefaultRetry && (_jsx("button", { type: "button", onClick: onRetry, "aria-label": retryLabel ?? `Retry ${name}`, className: cn("inline-flex items-center justify-center rounded-md text-muted-foreground transition-colors hover:bg-accent hover:text-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring", actionButtonSizeBySize[resolvedSize]), children: _jsx(RotateCw, { "aria-hidden": "true" }) })), showDefaultDownload && (_jsx("a", { href: href, target: target, rel: rel ?? (target === "_blank" ? "noopener noreferrer" : undefined), download: download, "aria-label": downloadLabel ?? `Download ${name}`, className: cn("inline-flex items-center justify-center rounded-md text-muted-foreground transition-colors hover:bg-accent hover:text-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring", actionButtonSizeBySize[resolvedSize]), children: _jsx(Download, { "aria-hidden": "true" }) })), showDefaultRemove && (_jsx("button", { type: "button", onClick: onRemove, "aria-label": removeLabel ?? `Remove ${name}`, className: cn("inline-flex items-center justify-center rounded-md text-muted-foreground transition-colors hover:bg-destructive/10 hover:text-destructive focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring", actionButtonSizeBySize[resolvedSize]), children: _jsx(X, { "aria-hidden": "true" }) }))] }))] }));
|
|
351
|
+
}
|
|
352
|
+
AttachmentCard.displayName = "AttachmentCard";
|
|
353
|
+
/**
|
|
354
|
+
* Convenience list wrapper for stacking multiple `AttachmentCard`s. Uses
|
|
355
|
+
* an unordered list under the hood so the collection is announced as a
|
|
356
|
+
* list to assistive tech; each direct child is wrapped in an `<li>`.
|
|
357
|
+
*/
|
|
358
|
+
function AttachmentCardList({ className, children, ref, ...props }) {
|
|
359
|
+
const childArray = Array.isArray(children) ? children : [children];
|
|
360
|
+
return (_jsx("ul", { ref: ref, "data-slot": "attachment-card-list", className: cn("flex w-full flex-col gap-2", className), ...props, children: childArray.map((child, index) => (_jsx("li", { className: "w-full", children: child }, index))) }));
|
|
361
|
+
}
|
|
362
|
+
AttachmentCardList.displayName = "AttachmentCardList";
|
|
363
|
+
export { AttachmentCard, AttachmentCardList };
|
|
364
|
+
//# sourceMappingURL=attachment-card.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"attachment-card.js","sourceRoot":"","sources":["../../../../src/components/ui/attachment-card/attachment-card.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export { AttachmentCard, AttachmentCard as default, AttachmentCardList, attachmentCardVariants, attachmentCardVariantIds, attachmentCardSizeIds, attachmentCardStatusIds, attachmentCardFileKindIds, formatBytes, inferAttachmentFileKind, } from "./attachment-card";
|
|
2
|
+
export type * from "./attachment-card";
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export { AttachmentCard, AttachmentCard as default, AttachmentCardList, attachmentCardVariants, attachmentCardVariantIds, attachmentCardSizeIds, attachmentCardStatusIds, attachmentCardFileKindIds, formatBytes, inferAttachmentFileKind, } from "./attachment-card";
|
|
2
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/components/ui/attachment-card/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,cAAc,EACd,cAAc,IAAI,OAAO,EACzB,kBAAkB,EAClB,sBAAsB,EACtB,wBAAwB,EACxB,qBAAqB,EACrB,uBAAuB,EACvB,yBAAyB,EACzB,WAAW,EACX,uBAAuB,GACxB,MAAM,mBAAmB,CAAC"}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import { type VariantProps } from "class-variance-authority";
|
|
2
|
+
import type { HTMLAttributes, ReactElement, ReactNode, Ref } from "react";
|
|
3
|
+
export declare const deviceFrameVariantIds: ["phone-modern", "phone-classic", "tablet", "laptop"];
|
|
4
|
+
export type DeviceFrameVariantId = (typeof deviceFrameVariantIds)[number];
|
|
5
|
+
export declare const deviceFrameSizeIds: ["sm", "md", "lg"];
|
|
6
|
+
export type DeviceFrameSizeId = (typeof deviceFrameSizeIds)[number];
|
|
7
|
+
export declare const deviceFrameOrientationIds: ["portrait", "landscape"];
|
|
8
|
+
export type DeviceFrameOrientationId = (typeof deviceFrameOrientationIds)[number];
|
|
9
|
+
export declare const deviceFrameColorIds: ["graphite", "silver", "gold", "midnight"];
|
|
10
|
+
export type DeviceFrameColorId = (typeof deviceFrameColorIds)[number];
|
|
11
|
+
declare const deviceFrameVariants: (props?: ({
|
|
12
|
+
variant?: "phone-modern" | "phone-classic" | "tablet" | "laptop" | null | undefined;
|
|
13
|
+
} & import("class-variance-authority/types").ClassProp) | undefined) => string;
|
|
14
|
+
export interface DeviceFrameProps extends HTMLAttributes<HTMLDivElement>, VariantProps<typeof deviceFrameVariants> {
|
|
15
|
+
/** Device silhouette. Defaults to `phone-modern`. */
|
|
16
|
+
variant?: DeviceFrameVariantId;
|
|
17
|
+
/** Portrait (default) or landscape. Ignored for `laptop` (always landscape). */
|
|
18
|
+
orientation?: DeviceFrameOrientationId;
|
|
19
|
+
/** Preset frame size. Defaults to `md`. */
|
|
20
|
+
size?: DeviceFrameSizeId;
|
|
21
|
+
/** Bezel color. Defaults to `graphite`. */
|
|
22
|
+
color?: DeviceFrameColorId;
|
|
23
|
+
/**
|
|
24
|
+
* When true, the phone-modern variant renders a Dynamic Island. When false,
|
|
25
|
+
* it renders a traditional notch. Ignored for other variants.
|
|
26
|
+
*/
|
|
27
|
+
dynamicIsland?: boolean;
|
|
28
|
+
ref?: Ref<HTMLDivElement>;
|
|
29
|
+
}
|
|
30
|
+
declare function DeviceFrame({ className, variant, orientation, size, color, dynamicIsland, children, ref, ...props }: DeviceFrameProps): ReactElement;
|
|
31
|
+
declare namespace DeviceFrame {
|
|
32
|
+
var displayName: string;
|
|
33
|
+
}
|
|
34
|
+
declare const deviceFrameScreenVariants: (props?: ({
|
|
35
|
+
variant?: "phone-modern" | "phone-classic" | "tablet" | "laptop" | null | undefined;
|
|
36
|
+
} & import("class-variance-authority/types").ClassProp) | undefined) => string;
|
|
37
|
+
export interface DeviceFrameScreenProps extends HTMLAttributes<HTMLDivElement>, VariantProps<typeof deviceFrameScreenVariants> {
|
|
38
|
+
variant?: DeviceFrameVariantId;
|
|
39
|
+
ref?: Ref<HTMLDivElement>;
|
|
40
|
+
}
|
|
41
|
+
declare function DeviceFrameScreen({ className, variant, ref, ...props }: DeviceFrameScreenProps): ReactElement;
|
|
42
|
+
declare namespace DeviceFrameScreen {
|
|
43
|
+
var displayName: string;
|
|
44
|
+
}
|
|
45
|
+
export interface DeviceFrameStatusBarProps extends HTMLAttributes<HTMLDivElement> {
|
|
46
|
+
/** Displayed time. Defaults to `9:41` (Apple's canonical marketing time). */
|
|
47
|
+
time?: string;
|
|
48
|
+
/** Trailing icons cluster. Defaults to signal + wifi + battery. */
|
|
49
|
+
trailing?: ReactNode;
|
|
50
|
+
/** Skip the default padding accommodating a notch/island cutout. */
|
|
51
|
+
compact?: boolean;
|
|
52
|
+
ref?: Ref<HTMLDivElement>;
|
|
53
|
+
}
|
|
54
|
+
declare function DeviceFrameStatusBar({ className, time, trailing, compact, ref, ...props }: DeviceFrameStatusBarProps): ReactElement;
|
|
55
|
+
declare namespace DeviceFrameStatusBar {
|
|
56
|
+
var displayName: string;
|
|
57
|
+
}
|
|
58
|
+
export interface DeviceFrameHomeIndicatorProps extends HTMLAttributes<HTMLDivElement> {
|
|
59
|
+
ref?: Ref<HTMLDivElement>;
|
|
60
|
+
}
|
|
61
|
+
declare function DeviceFrameHomeIndicator({ className, ref, ...props }: DeviceFrameHomeIndicatorProps): ReactElement;
|
|
62
|
+
declare namespace DeviceFrameHomeIndicator {
|
|
63
|
+
var displayName: string;
|
|
64
|
+
}
|
|
65
|
+
export interface DeviceFrameContentProps extends HTMLAttributes<HTMLDivElement> {
|
|
66
|
+
ref?: Ref<HTMLDivElement>;
|
|
67
|
+
}
|
|
68
|
+
declare function DeviceFrameContent({ className, ref, ...props }: DeviceFrameContentProps): ReactElement;
|
|
69
|
+
declare namespace DeviceFrameContent {
|
|
70
|
+
var displayName: string;
|
|
71
|
+
}
|
|
72
|
+
export { DeviceFrame, DeviceFrameScreen, DeviceFrameStatusBar, DeviceFrameHomeIndicator, DeviceFrameContent, deviceFrameVariants, deviceFrameScreenVariants, };
|
|
@@ -0,0 +1,178 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
3
|
+
import { cva } from "class-variance-authority";
|
|
4
|
+
import { cn } from "../../../lib/utils";
|
|
5
|
+
export const deviceFrameVariantIds = [
|
|
6
|
+
"phone-modern",
|
|
7
|
+
"phone-classic",
|
|
8
|
+
"tablet",
|
|
9
|
+
"laptop",
|
|
10
|
+
];
|
|
11
|
+
export const deviceFrameSizeIds = [
|
|
12
|
+
"sm",
|
|
13
|
+
"md",
|
|
14
|
+
"lg",
|
|
15
|
+
];
|
|
16
|
+
export const deviceFrameOrientationIds = [
|
|
17
|
+
"portrait",
|
|
18
|
+
"landscape",
|
|
19
|
+
];
|
|
20
|
+
export const deviceFrameColorIds = [
|
|
21
|
+
"graphite",
|
|
22
|
+
"silver",
|
|
23
|
+
"gold",
|
|
24
|
+
"midnight",
|
|
25
|
+
];
|
|
26
|
+
const deviceBezelPalette = {
|
|
27
|
+
graphite: {
|
|
28
|
+
bezel: "bg-neutral-900 border-neutral-800 dark:bg-neutral-950 dark:border-neutral-900",
|
|
29
|
+
accent: "bg-neutral-800 dark:bg-neutral-900",
|
|
30
|
+
},
|
|
31
|
+
silver: {
|
|
32
|
+
bezel: "bg-neutral-200 border-neutral-300 dark:bg-neutral-300 dark:border-neutral-400",
|
|
33
|
+
accent: "bg-neutral-300 dark:bg-neutral-400",
|
|
34
|
+
},
|
|
35
|
+
gold: {
|
|
36
|
+
bezel: "bg-amber-100 border-amber-200 dark:bg-amber-200 dark:border-amber-300",
|
|
37
|
+
accent: "bg-amber-200 dark:bg-amber-300",
|
|
38
|
+
},
|
|
39
|
+
midnight: {
|
|
40
|
+
bezel: "bg-slate-950 border-slate-900 dark:bg-black dark:border-slate-950",
|
|
41
|
+
accent: "bg-slate-900 dark:bg-slate-950",
|
|
42
|
+
},
|
|
43
|
+
};
|
|
44
|
+
const deviceFrameVariants = cva("relative isolate box-content shrink-0 overflow-hidden border shadow-2xl", {
|
|
45
|
+
variants: {
|
|
46
|
+
variant: {
|
|
47
|
+
"phone-modern": "rounded-[2.75rem] p-[0.55rem]",
|
|
48
|
+
"phone-classic": "rounded-[2rem] px-[0.5rem] py-[3rem]",
|
|
49
|
+
tablet: "rounded-[1.75rem] p-[0.85rem]",
|
|
50
|
+
laptop: "rounded-t-xl rounded-b-none p-[0.6rem]",
|
|
51
|
+
},
|
|
52
|
+
},
|
|
53
|
+
defaultVariants: {
|
|
54
|
+
variant: "phone-modern",
|
|
55
|
+
},
|
|
56
|
+
});
|
|
57
|
+
const deviceFrameSizeMap = {
|
|
58
|
+
"phone-modern": {
|
|
59
|
+
portrait: {
|
|
60
|
+
sm: "w-[200px] aspect-[9/19.5]",
|
|
61
|
+
md: "w-[280px] aspect-[9/19.5]",
|
|
62
|
+
lg: "w-[360px] aspect-[9/19.5]",
|
|
63
|
+
},
|
|
64
|
+
landscape: {
|
|
65
|
+
sm: "w-[400px] aspect-[19.5/9]",
|
|
66
|
+
md: "w-[560px] aspect-[19.5/9]",
|
|
67
|
+
lg: "w-[720px] aspect-[19.5/9]",
|
|
68
|
+
},
|
|
69
|
+
},
|
|
70
|
+
"phone-classic": {
|
|
71
|
+
portrait: {
|
|
72
|
+
sm: "w-[200px] aspect-[9/16]",
|
|
73
|
+
md: "w-[280px] aspect-[9/16]",
|
|
74
|
+
lg: "w-[360px] aspect-[9/16]",
|
|
75
|
+
},
|
|
76
|
+
landscape: {
|
|
77
|
+
sm: "w-[400px] aspect-[16/9]",
|
|
78
|
+
md: "w-[560px] aspect-[16/9]",
|
|
79
|
+
lg: "w-[720px] aspect-[16/9]",
|
|
80
|
+
},
|
|
81
|
+
},
|
|
82
|
+
tablet: {
|
|
83
|
+
portrait: {
|
|
84
|
+
sm: "w-[300px] aspect-[3/4]",
|
|
85
|
+
md: "w-[420px] aspect-[3/4]",
|
|
86
|
+
lg: "w-[540px] aspect-[3/4]",
|
|
87
|
+
},
|
|
88
|
+
landscape: {
|
|
89
|
+
sm: "w-[400px] aspect-[4/3]",
|
|
90
|
+
md: "w-[560px] aspect-[4/3]",
|
|
91
|
+
lg: "w-[720px] aspect-[4/3]",
|
|
92
|
+
},
|
|
93
|
+
},
|
|
94
|
+
laptop: {
|
|
95
|
+
portrait: {
|
|
96
|
+
sm: "w-[500px] aspect-[16/10]",
|
|
97
|
+
md: "w-[700px] aspect-[16/10]",
|
|
98
|
+
lg: "w-[900px] aspect-[16/10]",
|
|
99
|
+
},
|
|
100
|
+
landscape: {
|
|
101
|
+
sm: "w-[500px] aspect-[16/10]",
|
|
102
|
+
md: "w-[700px] aspect-[16/10]",
|
|
103
|
+
lg: "w-[900px] aspect-[16/10]",
|
|
104
|
+
},
|
|
105
|
+
},
|
|
106
|
+
};
|
|
107
|
+
function DeviceFrame({ className, variant = "phone-modern", orientation = "portrait", size = "md", color = "graphite", dynamicIsland = true, children, ref, ...props }) {
|
|
108
|
+
const effectiveOrientation = variant === "laptop" ? "landscape" : orientation;
|
|
109
|
+
const sizeClasses = deviceFrameSizeMap[variant][effectiveOrientation][size];
|
|
110
|
+
const palette = deviceBezelPalette[color];
|
|
111
|
+
return (_jsxs("div", { ref: ref, "data-slot": "device-frame", "data-variant": variant, "data-orientation": effectiveOrientation, "data-size": size, "data-color": color, className: cn(deviceFrameVariants({ variant }), palette.bezel, sizeClasses, className), ...props, children: [variant === "phone-modern" ? (_jsx(PhoneModernOrnaments, { orientation: effectiveOrientation, dynamicIsland: dynamicIsland })) : null, variant === "phone-classic" ? (_jsx(PhoneClassicOrnaments, { orientation: effectiveOrientation, accent: palette.accent })) : null, variant === "tablet" ? (_jsx(TabletOrnaments, { accent: palette.accent })) : null, children, variant === "laptop" ? _jsx(LaptopBase, { color: color }) : null] }));
|
|
112
|
+
}
|
|
113
|
+
DeviceFrame.displayName = "DeviceFrame";
|
|
114
|
+
function PhoneModernOrnaments({ orientation, dynamicIsland, }) {
|
|
115
|
+
const positionClass = orientation === "portrait"
|
|
116
|
+
? "top-3 left-1/2 -translate-x-1/2"
|
|
117
|
+
: "left-3 top-1/2 -translate-y-1/2";
|
|
118
|
+
const shapeClass = dynamicIsland
|
|
119
|
+
? orientation === "portrait"
|
|
120
|
+
? "h-6 w-24 rounded-full"
|
|
121
|
+
: "h-24 w-6 rounded-full"
|
|
122
|
+
: orientation === "portrait"
|
|
123
|
+
? "h-6 w-32 rounded-b-2xl"
|
|
124
|
+
: "h-32 w-6 rounded-r-2xl";
|
|
125
|
+
const nonIslandPosition = !dynamicIsland && orientation === "portrait"
|
|
126
|
+
? "top-[0.55rem] left-1/2 -translate-x-1/2"
|
|
127
|
+
: !dynamicIsland && orientation === "landscape"
|
|
128
|
+
? "left-[0.55rem] top-1/2 -translate-y-1/2"
|
|
129
|
+
: positionClass;
|
|
130
|
+
return (_jsx("span", { "aria-hidden": "true", className: cn("pointer-events-none absolute z-20 bg-black", shapeClass, nonIslandPosition) }));
|
|
131
|
+
}
|
|
132
|
+
function PhoneClassicOrnaments({ orientation, accent, }) {
|
|
133
|
+
if (orientation === "portrait") {
|
|
134
|
+
return (_jsxs(_Fragment, { children: [_jsxs("span", { "aria-hidden": "true", className: "pointer-events-none absolute left-1/2 top-4 z-20 flex -translate-x-1/2 items-center gap-2", children: [_jsx("span", { className: "size-1.5 rounded-full bg-neutral-700/80" }), _jsx("span", { className: "h-1.5 w-12 rounded-full bg-neutral-800/80" })] }), _jsx("span", { "aria-hidden": "true", className: cn("pointer-events-none absolute bottom-3 left-1/2 z-20 size-8 -translate-x-1/2 rounded-full border-2", accent, "border-neutral-500/60") })] }));
|
|
135
|
+
}
|
|
136
|
+
return (_jsxs(_Fragment, { children: [_jsxs("span", { "aria-hidden": "true", className: "pointer-events-none absolute left-4 top-1/2 z-20 flex -translate-y-1/2 flex-col items-center gap-2", children: [_jsx("span", { className: "size-1.5 rounded-full bg-neutral-700/80" }), _jsx("span", { className: "h-12 w-1.5 rounded-full bg-neutral-800/80" })] }), _jsx("span", { "aria-hidden": "true", className: cn("pointer-events-none absolute right-3 top-1/2 z-20 size-8 -translate-y-1/2 rounded-full border-2", accent, "border-neutral-500/60") })] }));
|
|
137
|
+
}
|
|
138
|
+
function TabletOrnaments({ accent }) {
|
|
139
|
+
return (_jsx("span", { "aria-hidden": "true", className: cn("pointer-events-none absolute right-3 top-1/2 z-20 size-1.5 -translate-y-1/2 rounded-full", accent) }));
|
|
140
|
+
}
|
|
141
|
+
function LaptopBase({ color }) {
|
|
142
|
+
const palette = deviceBezelPalette[color];
|
|
143
|
+
return (_jsxs("div", { "aria-hidden": "true", "data-slot": "device-frame-laptop-base", className: "pointer-events-none absolute -bottom-[0.9rem] left-1/2 z-30 w-[112%] -translate-x-1/2", children: [_jsx("div", { className: cn("h-2 rounded-b-md border-x border-b", palette.bezel) }), _jsx("div", { className: "mx-auto h-1 w-24 rounded-b-md bg-neutral-600/60 dark:bg-neutral-700/60" })] }));
|
|
144
|
+
}
|
|
145
|
+
const deviceFrameScreenVariants = cva("relative z-10 flex h-full w-full flex-col overflow-hidden bg-background text-foreground", {
|
|
146
|
+
variants: {
|
|
147
|
+
variant: {
|
|
148
|
+
"phone-modern": "rounded-[2.25rem]",
|
|
149
|
+
"phone-classic": "rounded-md",
|
|
150
|
+
tablet: "rounded-[1rem]",
|
|
151
|
+
laptop: "rounded-md",
|
|
152
|
+
},
|
|
153
|
+
},
|
|
154
|
+
defaultVariants: {
|
|
155
|
+
variant: "phone-modern",
|
|
156
|
+
},
|
|
157
|
+
});
|
|
158
|
+
function DeviceFrameScreen({ className, variant = "phone-modern", ref, ...props }) {
|
|
159
|
+
return (_jsx("div", { ref: ref, "data-slot": "device-frame-screen", "data-variant": variant, className: cn(deviceFrameScreenVariants({ variant }), className), ...props }));
|
|
160
|
+
}
|
|
161
|
+
DeviceFrameScreen.displayName = "DeviceFrameScreen";
|
|
162
|
+
function DefaultStatusIcons() {
|
|
163
|
+
return (_jsxs("span", { className: "flex items-center gap-1.5", children: [_jsxs("svg", { "aria-hidden": "true", viewBox: "0 0 16 10", className: "h-2.5 w-3", fill: "currentColor", children: [_jsx("rect", { x: "0", y: "7", width: "2", height: "3", rx: "0.5" }), _jsx("rect", { x: "3.5", y: "5", width: "2", height: "5", rx: "0.5" }), _jsx("rect", { x: "7", y: "3", width: "2", height: "7", rx: "0.5" }), _jsx("rect", { x: "10.5", y: "0", width: "2", height: "10", rx: "0.5" })] }), _jsxs("svg", { "aria-hidden": "true", viewBox: "0 0 16 12", className: "h-2.5 w-3", fill: "none", stroke: "currentColor", strokeWidth: "1.25", strokeLinecap: "round", children: [_jsx("path", { d: "M1 5a10 10 0 0 1 14 0" }), _jsx("path", { d: "M3.5 7.5a6.5 6.5 0 0 1 9 0" }), _jsx("circle", { cx: "8", cy: "10", r: "0.75", fill: "currentColor", stroke: "none" })] }), _jsx("span", { "aria-hidden": "true", className: "ml-0.5 inline-flex h-3 w-6 items-center rounded-[3px] border border-current p-[1px]", children: _jsx("span", { className: "block h-full w-[70%] rounded-[1px] bg-current" }) })] }));
|
|
164
|
+
}
|
|
165
|
+
function DeviceFrameStatusBar({ className, time = "9:41", trailing, compact = false, ref, ...props }) {
|
|
166
|
+
return (_jsxs("div", { ref: ref, "data-slot": "device-frame-status-bar", className: cn("flex w-full shrink-0 items-center justify-between text-[0.7rem] font-semibold text-foreground", compact ? "px-4 py-1" : "px-6 py-2 pt-3", className), ...props, children: [_jsx("span", { className: "tabular-nums", children: time }), trailing ?? _jsx(DefaultStatusIcons, {})] }));
|
|
167
|
+
}
|
|
168
|
+
DeviceFrameStatusBar.displayName = "DeviceFrameStatusBar";
|
|
169
|
+
function DeviceFrameHomeIndicator({ className, ref, ...props }) {
|
|
170
|
+
return (_jsx("div", { ref: ref, "aria-hidden": "true", "data-slot": "device-frame-home-indicator", className: cn("flex w-full shrink-0 items-center justify-center py-2", className), ...props, children: _jsx("span", { className: "h-1 w-1/3 max-w-[8rem] rounded-full bg-foreground/70" }) }));
|
|
171
|
+
}
|
|
172
|
+
DeviceFrameHomeIndicator.displayName = "DeviceFrameHomeIndicator";
|
|
173
|
+
function DeviceFrameContent({ className, ref, ...props }) {
|
|
174
|
+
return (_jsx("div", { ref: ref, "data-slot": "device-frame-content", className: cn("relative flex-1 overflow-hidden", className), ...props }));
|
|
175
|
+
}
|
|
176
|
+
DeviceFrameContent.displayName = "DeviceFrameContent";
|
|
177
|
+
export { DeviceFrame, DeviceFrameScreen, DeviceFrameStatusBar, DeviceFrameHomeIndicator, DeviceFrameContent, deviceFrameVariants, deviceFrameScreenVariants, };
|
|
178
|
+
//# sourceMappingURL=device-frame.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"device-frame.js","sourceRoot":"","sources":["../../../../src/components/ui/device-frame/device-frame.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/components/ui/device-frame/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC"}
|
|
@@ -222,6 +222,8 @@ export * from "./browser-frame";
|
|
|
222
222
|
export type * from "./browser-frame";
|
|
223
223
|
export * from "./terminal-frame";
|
|
224
224
|
export type * from "./terminal-frame";
|
|
225
|
+
export * from "./device-frame";
|
|
226
|
+
export type * from "./device-frame";
|
|
225
227
|
export * from "./inline-edit";
|
|
226
228
|
export type * from "./inline-edit";
|
|
227
229
|
export * from "./split-button";
|
|
@@ -230,3 +232,5 @@ export * from "./ribbon";
|
|
|
230
232
|
export type * from "./ribbon";
|
|
231
233
|
export * from "./toolbar";
|
|
232
234
|
export type * from "./toolbar";
|
|
235
|
+
export * from "./attachment-card";
|
|
236
|
+
export type * from "./attachment-card";
|
|
@@ -110,8 +110,10 @@ export * from "./mark";
|
|
|
110
110
|
export * from "./http-method-badge";
|
|
111
111
|
export * from "./browser-frame";
|
|
112
112
|
export * from "./terminal-frame";
|
|
113
|
+
export * from "./device-frame";
|
|
113
114
|
export * from "./inline-edit";
|
|
114
115
|
export * from "./split-button";
|
|
115
116
|
export * from "./ribbon";
|
|
116
117
|
export * from "./toolbar";
|
|
118
|
+
export * from "./attachment-card";
|
|
117
119
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/components/ui/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/components/ui/index.ts"],"names":[],"mappings":"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"}
|