返回 presentation-ai
template-previews.tsx
根目录 / src / components / notebook / presentation / utils / template-previews.tsx
1 "use client";
2
3 import { ImageIcon } from "lucide-react";
4
5 export function TextAndHeadingPreview() {
6 return (
7 <div className="grid h-full w-full place-items-center space-y-1 p-3">
8 <div className="w-full space-y-1 rounded p-2">
9 <div className="mb-2 h-5 w-3/4 rounded bg-muted-foreground/20" />
10 <div className="h-3 w-full rounded bg-muted" />
11 <div className="h-3 w-full rounded bg-muted" />
12 </div>
13 </div>
14 );
15 }
16
17 export function TextAndImagePreview() {
18 return (
19 <div className="flex h-full w-full items-center justify-center gap-2 p-3">
20 <div className="flex-1 space-y-1">
21 <div className="h-3 w-3/4 rounded bg-muted-foreground/20" />
22 <div className="h-1.5 w-full rounded bg-muted" />
23 <div className="h-1.5 w-5/6 rounded bg-muted" />
24 </div>
25 <div className="flex h-10 w-10 items-center justify-center rounded bg-muted">
26 <ImageIcon className="h-5 w-5 text-muted-foreground" />
27 </div>
28 </div>
29 );
30 }
31
32 export function ImageAndTextPreview() {
33 return (
34 <div className="flex h-full w-full flex-row-reverse items-center justify-center gap-2 p-3">
35 <div className="flex-1 space-y-1">
36 <div className="h-3 w-3/4 rounded bg-muted-foreground/20" />
37 <div className="h-1.5 w-full rounded bg-muted" />
38 <div className="h-1.5 w-5/6 rounded bg-muted" />
39 </div>
40 <div className="flex h-10 w-10 items-center justify-center rounded bg-muted">
41 <ImageIcon className="h-5 w-5 text-muted-foreground" />
42 </div>
43 </div>
44 );
45 }
46
47 export function TwoColumnsPreview() {
48 return (
49 <div className="grid h-full w-full place-items-center p-3">
50 <div className="grid w-full grid-cols-2 gap-2">
51 <div className="space-y-1">
52 <div className="h-2 w-full rounded bg-muted-foreground/20" />
53 <div className="h-1 w-full rounded bg-muted" />
54 <div className="h-1 w-5/6 rounded bg-muted" />
55 </div>
56 <div className="space-y-1">
57 <div className="h-2 w-full rounded bg-muted-foreground/20" />
58 <div className="h-1 w-full rounded bg-muted" />
59 <div className="h-1 w-5/6 rounded bg-muted" />
60 </div>
61 </div>
62 </div>
63 );
64 }
65 export function TwoColumnsWithHeadingPreview() {
66 return (
67 <div className="flex h-full w-full flex-col items-center justify-center gap-2 p-3">
68 <div className="h-5 w-full rounded bg-muted-foreground/20"></div>
69 <div className="grid w-full grid-cols-2 gap-2">
70 <div className="space-y-1">
71 <div className="h-2 w-full rounded bg-muted-foreground/20" />
72 <div className="h-1 w-full rounded bg-muted" />
73 <div className="h-1 w-5/6 rounded bg-muted" />
74 </div>
75 <div className="space-y-1">
76 <div className="h-2 w-full rounded bg-muted-foreground/20" />
77 <div className="h-1 w-full rounded bg-muted" />
78 <div className="h-1 w-5/6 rounded bg-muted" />
79 </div>
80 </div>
81 </div>
82 );
83 }
84
85 export function SolidBoxesPreview() {
86 return (
87 <div className="flex h-full w-full items-center justify-center p-4">
88 <div className="grid w-full grid-cols-2 gap-2 p-3">
89 <div className="aspect-square rounded bg-muted-foreground/20" />
90 <div className="aspect-square rounded bg-muted-foreground/20" />
91 <div className="aspect-square rounded bg-muted-foreground/20" />
92 <div className="aspect-square rounded bg-muted-foreground/20" />
93 </div>
94 </div>
95 );
96 }
97
98 export function OutlineBoxesPreview() {
99 return (
100 <div className="flex h-full w-full items-center justify-center p-4">
101 <div className="grid w-full grid-cols-2 gap-2 p-3">
102 <div className="aspect-square rounded border-2 border-muted-foreground/40" />
103 <div className="aspect-square rounded border-2 border-muted-foreground/40" />
104 <div className="aspect-square rounded border-2 border-muted-foreground/40" />
105 <div className="aspect-square rounded border-2 border-muted-foreground/40" />
106 </div>
107 </div>
108 );
109 }
110
111 export function SideLineBoxesPreview() {
112 return (
113 <div className="grid h-full w-full place-items-center p-3">
114 <div className="flex w-full">
115 <div className="h-6 flex-1 rounded border border-l-4 border-muted-foreground/20" />
116 </div>
117 <div className="flex w-full">
118 <div className="h-6 flex-1 rounded border border-l-4 border-muted-foreground/20" />
119 </div>
120 <div className="flex w-full">
121 <div className="h-6 flex-1 rounded border border-l-4 border-muted-foreground/20" />
122 </div>
123 </div>
124 );
125 }
126
127 export function JoinedBoxesPreview() {
128 return (
129 <div className="flex h-full w-full items-center justify-center p-4">
130 <div className="w-full overflow-hidden rounded-lg border-2 border-muted-foreground/20">
131 <div className="h-8 border-b border-muted-foreground/20" />
132 <div className="h-8 border-b border-muted-foreground/20" />
133 <div className="h-8" />
134 </div>
135 </div>
136 );
137 }
138
139 export function BoxesWithIconsPreview() {
140 return (
141 <div className="flex h-full w-full items-center justify-center p-4">
142 <div className="grid w-full gap-2 overflow-hidden">
143 <div className="flex h-6 items-center gap-2 border border-border px-2">
144 <div className="h-3 w-3 rounded-sm bg-muted-foreground/40" />
145 <div className="h-1.5 flex-1 rounded bg-muted" />
146 </div>
147 <div className="flex h-6 items-center gap-2 border border-border px-2">
148 <div className="h-3 w-3 rounded-sm bg-muted-foreground/40" />
149 <div className="h-1.5 flex-1 rounded bg-muted" />
150 </div>
151 <div className="flex h-6 items-center gap-2 border border-border px-2">
152 <div className="h-3 w-3 rounded-sm bg-muted-foreground/40" />
153 <div className="h-1.5 flex-1 rounded bg-muted" />
154 </div>
155 </div>
156 </div>
157 );
158 }
159
160 export function LeafBoxesPreview() {
161 return (
162 <div className="flex h-full w-full items-center justify-center p-4">
163 <div className="grid w-full grid-cols-2 gap-2 p-3">
164 <div className="aspect-square rounded-tl-xl rounded-br-xl bg-muted-foreground/20" />
165 <div className="aspect-square rounded-tl-xl rounded-br-xl bg-muted-foreground/20" />
166 <div className="aspect-square rounded-tl-xl rounded-br-xl bg-muted-foreground/20" />
167 <div className="aspect-square rounded-tl-xl rounded-br-xl bg-muted-foreground/20" />
168 </div>
169 </div>
170 );
171 }
172
173 export function LargeBulletsPreview() {
174 return (
175 <div className="flex h-full w-full flex-col items-center justify-center gap-1 p-3">
176 <div className="flex w-full items-center gap-2">
177 <div className="mt-0.5 size-3.5 shrink-0 rounded bg-muted-foreground/40" />
178 <div className="w-full space-y-0.5">
179 <div className="h-1.5 rounded bg-muted-foreground/20" />
180 <div className="h-1 w-5/6 rounded bg-muted-foreground/20" />
181 </div>
182 </div>
183 <div className="flex w-full items-center gap-2">
184 <div className="mt-0.5 size-3.5 shrink-0 rounded bg-muted-foreground/40" />
185 <div className="w-full space-y-0.5">
186 <div className="h-1.5 rounded bg-muted-foreground/20" />
187 <div className="h-1 w-5/6 rounded bg-muted-foreground/20" />
188 </div>
189 </div>
190 <div className="flex w-full items-center gap-2">
191 <div className="mt-0.5 size-3.5 shrink-0 rounded bg-muted-foreground/40" />
192 <div className="w-full space-y-0.5">
193 <div className="h-1.5 rounded bg-muted-foreground/20" />
194 <div className="h-1 w-5/6 rounded bg-muted-foreground/20" />
195 </div>
196 </div>
197 <div className="flex w-full items-center gap-2">
198 <div className="mt-0.5 size-3.5 shrink-0 rounded bg-muted-foreground/40" />
199 <div className="w-full space-y-0.5">
200 <div className="h-1.5 rounded bg-muted-foreground/20" />
201 <div className="h-1 w-5/6 rounded bg-muted-foreground/20" />
202 </div>
203 </div>
204 </div>
205 );
206 }
207
208 export function SmallBulletsPreview() {
209 return (
210 <div className="flex h-full w-full flex-col items-center justify-center space-y-1 p-3">
211 {[1, 2, 3, 4].map((i) => (
212 <div key={i} className="flex w-full items-center gap-1.5">
213 <div className="mt-0.5 size-1.5 shrink-0 rounded-full bg-muted-foreground/40" />
214 <div className="w-full space-y-0.5">
215 <div className="h-1 flex-1 rounded bg-muted-foreground/20" />
216 <div className="h-0.5 w-5/6 flex-1 rounded bg-muted-foreground/20" />
217 </div>
218 </div>
219 ))}
220 </div>
221 );
222 }
223
224 export function AccentLeftPreview() {
225 return (
226 <div className="flex h-full w-full gap-2">
227 <div className="flex h-full w-1/2 items-center justify-center rounded bg-muted">
228 <ImageIcon className="h-4 w-4 text-muted-foreground" />
229 </div>
230 <div className="flex flex-1 flex-col justify-center space-y-1">
231 <div className="h-2.5 w-3/4 rounded bg-muted-foreground/20" />
232 <div className="h-1.5 w-5/6 rounded bg-muted" />
233 <div className="h-1.5 w-5/6 rounded bg-muted" />
234 </div>
235 </div>
236 );
237 }
238
239 export function AccentRightPreview() {
240 return (
241 <div className="flex h-full w-full gap-2">
242 <div className="flex flex-1 flex-col justify-center space-y-1 pl-2">
243 <div className="h-2.5 w-3/4 rounded bg-muted-foreground/20" />
244 <div className="h-1.5 w-5/6 rounded bg-muted" />
245 <div className="h-1.5 w-5/6 rounded bg-muted" />
246 </div>
247 <div className="flex h-full w-1/2 items-center justify-center rounded bg-muted">
248 <ImageIcon className="h-4 w-4 text-muted-foreground" />
249 </div>
250 </div>
251 );
252 }
253
254 export function AccentTopPreview() {
255 return (
256 <div className="flex h-full w-full flex-col">
257 <div className="flex h-1/2 w-full items-center justify-center rounded bg-muted">
258 <ImageIcon className="h-4 w-4 text-muted-foreground" />
259 </div>
260 <div className="flex flex-1 flex-col justify-center space-y-1 pl-2">
261 <div className="h-2.5 w-3/4 rounded bg-muted-foreground/20" />
262 <div className="h-1.5 w-5/6 rounded bg-muted" />
263 <div className="h-1.5 w-5/6 rounded bg-muted" />
264 </div>
265 </div>
266 );
267 }
268
269 export function AccentRightFitPreview() {
270 return (
271 <div className="flex h-full w-full gap-2">
272 <div className="flex flex-1 flex-col justify-center space-y-1 pl-2">
273 <div className="h-2.5 w-3/4 rounded bg-muted-foreground/20" />
274 <div className="h-1.5 w-5/6 rounded bg-muted" />
275 <div className="h-1.5 w-5/6 rounded bg-muted" />
276 </div>
277 <div className="flex h-full w-1/2 items-center justify-center rounded bg-muted">
278 <div className="grid aspect-square w-1/2 place-items-center rounded border border-primary/50">
279 <ImageIcon className="h-4 w-4" />
280 </div>
281 </div>
282 </div>
283 );
284 }
285
286 export function AccentLeftFitPreview() {
287 return (
288 <div className="flex h-full w-full gap-2">
289 <div className="flex h-full w-1/2 items-center justify-center rounded bg-muted">
290 <div className="grid aspect-square w-1/2 place-items-center rounded border border-primary/50">
291 <ImageIcon className="h-4 w-4" />
292 </div>
293 </div>
294 <div className="flex flex-1 flex-col justify-center space-y-1">
295 <div className="h-2.5 w-3/4 rounded bg-muted-foreground/20" />
296 <div className="h-1.5 w-5/6 rounded bg-muted" />
297 <div className="h-1.5 w-5/6 rounded bg-muted" />
298 </div>
299 </div>
300 );
301 }
302
303 export function AccentBackgroundPreview() {
304 return (
305 <div className="relative flex h-full w-full gap-2">
306 <div className="absolute inset-0 flex items-center justify-center rounded bg-muted">
307 <ImageIcon className="h-4 w-4" />
308 </div>
309 <div className="z-10 flex flex-1 flex-col justify-center space-y-1 pl-2">
310 <div className="h-2.5 w-3/4 rounded bg-primary/60" />
311 <div className="h-1.5 w-5/6 rounded bg-primary/60" />
312 <div className="h-1.5 w-5/6 rounded bg-primary/60" />
313 </div>
314 </div>
315 );
316 }
317
318 export function BarChartPreview() {
319 return (
320 <div className="grid h-full w-full place-items-center space-y-2 p-3">
321 <div className="flex h-full w-full items-end justify-center gap-1">
322 <div className="h-3/4 w-4 rounded bg-accent" />
323 <div className="h-full w-4 rounded bg-accent" />
324 <div className="h-full w-4 rounded bg-accent" />
325 <div className="h-5/6 w-4 rounded bg-accent" />
326 <div className="h-full w-4 rounded bg-accent" />
327 <div className="h-3/4 w-4 rounded bg-accent" />
328 <div className="h-5/6 w-4 rounded bg-accent" />
329 </div>
330 </div>
331 );
332 }
333
334 export function LineChartPreview() {
335 return (
336 <div className="grid h-full w-full place-items-center space-y-2 p-3">
337 <div className="h-2 w-3/4 rounded bg-muted-foreground/20" />
338 <div className="relative flex h-12 items-center justify-center">
339 <svg viewBox="0 0 60 30" className="h-full w-full">
340 <polyline
341 points="5,25 20,15 35,20 50,8"
342 fill="none"
343 stroke="currentColor"
344 className="text-muted-foreground/40"
345 strokeWidth="2"
346 />
347 </svg>
348 </div>
349 </div>
350 );
351 }
352
353 function _OriginalCircleStatsPreview() {
354 return (
355 <div className="flex h-full w-full flex-col items-center justify-center space-y-2 p-3">
356 <div className="flex justify-center gap-2">
357 <div className="h-8 w-8 rounded-full border-2 border-muted-foreground/20" />
358 <div className="h-8 w-8 rounded-full border-2 border-muted-foreground/20" />
359 <div className="h-8 w-8 rounded-full border-2 border-muted-foreground/20" />
360 </div>
361 <div className="grid w-full grid-cols-3 gap-1">
362 <div className="space-y-1">
363 <div className="h-1 rounded bg-muted" />
364 <div className="h-1 rounded bg-muted" />
365 </div>
366 <div className="space-y-1">
367 <div className="h-1 rounded bg-muted" />
368 <div className="h-1 rounded bg-muted" />
369 </div>
370 <div className="space-y-1">
371 <div className="h-1 rounded bg-muted" />
372 <div className="h-1 rounded bg-muted" />
373 </div>
374 </div>
375 </div>
376 );
377 }
378
379 function _TimelinePreview() {
380 return (
381 <div className="h-full w-full space-y-1 p-3">
382 <div className="h-2 w-full rounded bg-muted-foreground/20" />
383 <div className="h-2 w-full rounded bg-muted" />
384 <div className="h-2 w-full rounded bg-muted" />
385 <div className="h-2 w-full rounded bg-muted" />
386 <div className="h-2 w-full rounded bg-muted" />
387 <div className="h-2 w-full rounded bg-muted" />
388 <div className="h-2 w-full rounded bg-muted" />
389 </div>
390 );
391 }
392
393 function _FourColumnsPreview() {
394 return (
395 <div className="h-full w-full space-y-2 p-3">
396 <div className="h-2 w-full rounded bg-muted-foreground/20" />
397 <div className="grid grid-cols-4 gap-1">
398 <div className="h-1 rounded bg-muted" />
399 <div className="h-1 rounded bg-muted" />
400 <div className="h-1 rounded bg-muted" />
401 <div className="h-1 rounded bg-muted" />
402 </div>
403 <div className="grid grid-cols-4 gap-1">
404 <div className="h-1 rounded bg-muted" />
405 <div className="h-1 rounded bg-muted" />
406 <div className="h-1 rounded bg-muted" />
407 <div className="h-1 rounded bg-muted" />
408 </div>
409 </div>
410 );
411 }
412
413 function _ThreeImageColumnsPreview() {
414 return (
415 <div className="h-full w-full space-y-2 p-3">
416 <div className="grid grid-cols-3 gap-1">
417 <div className="flex aspect-square items-center justify-center rounded bg-muted">
418 <ImageIcon className="h-4 w-4 text-muted-foreground" />
419 </div>
420 <div className="flex aspect-square items-center justify-center rounded bg-muted">
421 <ImageIcon className="h-4 w-4 text-muted-foreground" />
422 </div>
423 <div className="flex aspect-square items-center justify-center rounded bg-muted">
424 <ImageIcon className="h-4 w-4 text-muted-foreground" />
425 </div>
426 </div>
427 <div className="grid grid-cols-3 gap-1">
428 <div className="space-y-0.5">
429 <div className="h-1 rounded bg-muted" />
430 <div className="h-1 rounded bg-muted" />
431 </div>
432 <div className="space-y-0.5">
433 <div className="h-1 rounded bg-muted" />
434 <div className="h-1 rounded bg-muted" />
435 </div>
436 <div className="space-y-0.5">
437 <div className="h-1 rounded bg-muted" />
438 <div className="h-1 rounded bg-muted" />
439 </div>
440 </div>
441 </div>
442 );
443 }
444
445 function _BlankCardPreview() {
446 return <div className="h-full w-full" />;
447 }
448
449 function _TwoColumnWithHeaderPreview() {
450 return (
451 <div className="h-full w-full space-y-1 p-3">
452 <div className="h-2 w-full rounded bg-muted-foreground/20" />
453 <div className="grid grid-cols-2 gap-2">
454 <div className="space-y-1">
455 <div className="h-1 w-full rounded bg-muted" />
456 <div className="h-1 w-5/6 rounded bg-muted" />
457 </div>
458 <div className="space-y-1">
459 <div className="h-1 w-full rounded bg-muted" />
460 <div className="h-1 w-5/6 rounded bg-muted" />
461 </div>
462 </div>
463 </div>
464 );
465 }
466
467 function _ThreeColumnsPreview() {
468 return (
469 <div className="h-full w-full p-3">
470 <div className="grid grid-cols-3 gap-1">
471 <div className="space-y-1">
472 <div className="h-2 rounded bg-muted-foreground/20" />
473 <div className="h-1 rounded bg-muted" />
474 <div className="h-1 rounded bg-muted" />
475 </div>
476 <div className="space-y-1">
477 <div className="h-2 rounded bg-muted-foreground/20" />
478 <div className="h-1 rounded bg-muted" />
479 <div className="h-1 rounded bg-muted" />
480 </div>
481 <div className="space-y-1">
482 <div className="h-2 rounded bg-muted-foreground/20" />
483 <div className="h-1 rounded bg-muted" />
484 <div className="h-1 rounded bg-muted" />
485 </div>
486 </div>
487 </div>
488 );
489 }
490
491 function _ThreeColumnWithHeaderPreview() {
492 return (
493 <div className="h-full w-full space-y-1 p-3">
494 <div className="h-2 w-full rounded bg-muted-foreground/20" />
495 <div className="grid grid-cols-3 gap-1">
496 <div className="space-y-0.5">
497 <div className="h-1 rounded bg-muted" />
498 <div className="h-1 rounded bg-muted" />
499 </div>
500 <div className="space-y-0.5">
501 <div className="h-1 rounded bg-muted" />
502 <div className="h-1 rounded bg-muted" />
503 </div>
504 <div className="space-y-0.5">
505 <div className="h-1 rounded bg-muted" />
506 <div className="h-1 rounded bg-muted" />
507 </div>
508 </div>
509 </div>
510 );
511 }
512
513 function _TitleWithBulletsPreview() {
514 return (
515 <div className="h-full w-full space-y-1 p-3">
516 <div className="h-2 w-3/4 rounded bg-muted-foreground/20" />
517 <div className="mt-2 space-y-0.5">
518 <div className="flex items-center gap-1">
519 <div className="h-1 w-1 rounded-full bg-muted-foreground/40" />
520 <div className="h-1 flex-1 rounded bg-muted" />
521 </div>
522 <div className="flex items-center gap-1">
523 <div className="h-1 w-1 rounded-full bg-muted-foreground/40" />
524 <div className="h-1 flex-1 rounded bg-muted" />
525 </div>
526 <div className="flex items-center gap-1">
527 <div className="h-1 w-1 rounded-full bg-muted-foreground/40" />
528 <div className="h-1 flex-1 rounded bg-muted" />
529 </div>
530 </div>
531 </div>
532 );
533 }
534
535 function _TitleWithBulletsAndImagePreview() {
536 return (
537 <div className="h-full w-full space-y-1 p-3">
538 <div className="h-2 w-3/4 rounded bg-muted-foreground/20" />
539 <div className="mt-2 flex gap-2">
540 <div className="flex-1 space-y-0.5">
541 <div className="flex items-center gap-1">
542 <div className="h-1 w-1 rounded-full bg-muted-foreground/40" />
543 <div className="h-1 flex-1 rounded bg-muted" />
544 </div>
545 <div className="flex items-center gap-1">
546 <div className="h-1 w-1 rounded-full bg-muted-foreground/40" />
547 <div className="h-1 flex-1 rounded bg-muted" />
548 </div>
549 </div>
550 <div className="flex h-10 w-10 items-center justify-center rounded bg-muted">
551 <ImageIcon className="h-4 w-4 text-muted-foreground" />
552 </div>
553 </div>
554 </div>
555 );
556 }
557
558 export function ArrowBulletsPreview() {
559 return (
560 <div className="flex h-full w-full flex-col items-center justify-center gap-1 p-3">
561 <div className="flex w-full items-center gap-2">
562 <svg
563 className="size-3.5 shrink-0"
564 viewBox="0 0 155.139 155.139"
565 xmlns="http://www.w3.org/2000/svg"
566 >
567 <polygon
568 className="fill-muted-foreground/40"
569 points="155.139,77.566 79.18,1.596 79.18,45.978 0,45.978 0,109.155 79.18,109.155 79.18,153.542"
570 />
571 </svg>
572 <div className="w-full space-y-0.5">
573 <div className="h-1.5 rounded bg-muted-foreground/20" />
574 <div className="h-1 w-5/6 rounded bg-muted-foreground/20" />
575 </div>
576 </div>
577 <div className="flex w-full items-center gap-2">
578 <svg
579 className="size-3.5 shrink-0"
580 viewBox="0 0 155.139 155.139"
581 xmlns="http://www.w3.org/2000/svg"
582 >
583 <polygon
584 className="fill-muted-foreground/40"
585 points="155.139,77.566 79.18,1.596 79.18,45.978 0,45.978 0,109.155 79.18,109.155 79.18,153.542"
586 />
587 </svg>
588 <div className="w-full space-y-0.5">
589 <div className="h-1.5 rounded bg-muted-foreground/20" />
590 <div className="h-1 w-5/6 rounded bg-muted-foreground/20" />
591 </div>
592 </div>
593 <div className="flex w-full items-center gap-2">
594 <svg
595 className="size-3.5 shrink-0"
596 viewBox="0 0 155.139 155.139"
597 xmlns="http://www.w3.org/2000/svg"
598 >
599 <polygon
600 className="fill-muted-foreground/40"
601 points="155.139,77.566 79.18,1.596 79.18,45.978 0,45.978 0,109.155 79.18,109.155 79.18,153.542"
602 />
603 </svg>
604 <div className="w-full space-y-0.5">
605 <div className="h-1.5 rounded bg-muted-foreground/20" />
606 <div className="h-1 w-5/6 rounded bg-muted-foreground/20" />
607 </div>
608 </div>
609 <div className="flex w-full items-center gap-2">
610 <svg
611 className="size-3.5 shrink-0"
612 viewBox="0 0 155.139 155.139"
613 xmlns="http://www.w3.org/2000/svg"
614 >
615 <polygon
616 className="fill-muted-foreground/40"
617 points="155.139,77.566 79.18,1.596 79.18,45.978 0,45.978 0,109.155 79.18,109.155 79.18,153.542"
618 />
619 </svg>
620 <div className="w-full space-y-0.5">
621 <div className="h-1.5 rounded bg-muted-foreground/20" />
622 <div className="h-1 w-5/6 rounded bg-muted-foreground/20" />
623 </div>
624 </div>
625 </div>
626 );
627 }
628
629 function _ProcessStepsPreview() {
630 return (
631 <div className="grid h-full w-full place-items-center space-y-1.5 p-3">
632 <div className="w-full space-y-1.5">
633 {[1, 2, 3].map((i) => (
634 <div key={i} className="flex items-start gap-1.5">
635 <div className="flex h-3 w-3 shrink-0 items-center justify-center rounded-full bg-muted-foreground/20">
636 <div className="h-1 w-1 rounded-full bg-muted-foreground" />
637 </div>
638 <div className="mt-1 h-1 flex-1 rounded bg-muted-foreground/20" />
639 </div>
640 ))}
641 </div>
642 </div>
643 );
644 }
645
646 function _SolidBoxSmallBulletsPreview() {
647 return (
648 <div className="grid h-full w-full place-items-center space-y-1 p-3">
649 <div className="w-full space-y-1">
650 {[1, 2, 3, 4].map((i) => (
651 <div key={i} className="flex items-start gap-1.5">
652 <div className="mt-0.5 h-1.5 w-1.5 shrink-0 bg-muted-foreground/40" />
653 <div className="h-1 flex-1 rounded bg-muted-foreground/20" />
654 </div>
655 ))}
656 </div>
657 </div>
658 );
659 }
660
661 export function TwoImageColumnsPreview() {
662 return (
663 <div className="grid h-full w-full place-items-center space-y-1 p-3">
664 <div className="w-full space-y-1">
665 <div className="grid grid-cols-2 gap-2">
666 <div className="flex aspect-square items-center justify-center rounded bg-muted">
667 <ImageIcon className="h-5 w-5 text-muted-foreground" />
668 </div>
669 <div className="flex aspect-square items-center justify-center rounded bg-muted">
670 <ImageIcon className="h-5 w-5 text-muted-foreground" />
671 </div>
672 </div>
673 <div className="grid grid-cols-2 gap-2">
674 <div className="h-1 rounded bg-muted" />
675 <div className="h-1 rounded bg-muted" />
676 </div>
677 </div>
678 </div>
679 );
680 }
681
682 export function ThreeImageColumnsCardPreview() {
683 return (
684 <div className="grid h-full w-full place-items-center space-y-1 p-3">
685 <div className="w-full space-y-1">
686 <div className="grid grid-cols-3 gap-1">
687 {[1, 2, 3].map((i) => (
688 <div
689 key={i}
690 className="flex aspect-square items-center justify-center rounded bg-muted"
691 >
692 <ImageIcon className="h-4 w-4 text-muted-foreground" />
693 </div>
694 ))}
695 </div>
696 <div className="grid grid-cols-3 gap-1">
697 {[1, 2, 3].map((i) => (
698 <div key={i} className="h-1 rounded bg-muted" />
699 ))}
700 </div>
701 </div>
702 </div>
703 );
704 }
705
706 export function FourImageColumnsPreview() {
707 return (
708 <div className="grid h-full w-full place-items-center space-y-1 p-3">
709 <div className="w-full space-y-1">
710 <div className="grid grid-cols-4 gap-0.5">
711 {[1, 2, 3, 4].map((i) => (
712 <div
713 key={i}
714 className="flex aspect-square items-center justify-center rounded-sm bg-muted"
715 >
716 <ImageIcon className="h-3 w-3 text-muted-foreground" />
717 </div>
718 ))}
719 </div>
720 <div className="grid grid-cols-4 gap-0.5">
721 {[1, 2, 3, 4].map((i) => (
722 <div key={i} className="h-0.5 rounded bg-muted" />
723 ))}
724 </div>
725 </div>
726 </div>
727 );
728 }
729
730 export function ImagesWithTextPreview() {
731 return (
732 <div className="grid h-full w-full place-items-center p-3">
733 <div className="grid w-full grid-cols-3 gap-1">
734 {[1, 2, 3].map((i) => (
735 <div key={i} className="space-y-1">
736 <div className="flex aspect-square items-center justify-center rounded bg-muted">
737 <ImageIcon className="h-4 w-4 text-muted-foreground" />
738 </div>
739 <div className="h-1 rounded bg-muted" />
740 <div className="h-1 w-3/4 rounded bg-muted" />
741 </div>
742 ))}
743 </div>
744 </div>
745 );
746 }
747
748 export function ImageGalleryPreview() {
749 return (
750 <div className="grid h-full w-full place-items-center space-y-1 p-3">
751 <div className="w-full space-y-1">
752 <div className="space-y-1">
753 <div className="h-2 w-full rounded bg-muted-foreground/20" />
754 <div className="h-1 w-full rounded bg-muted" />
755 </div>
756 <div className="mt-2 grid grid-cols-3 gap-1">
757 {[1, 2, 3].map((i) => (
758 <div
759 key={i}
760 className="flex aspect-square items-center justify-center rounded bg-muted"
761 >
762 <ImageIcon className="h-4 w-4 text-muted-foreground" />
763 </div>
764 ))}
765 </div>
766 </div>
767 </div>
768 );
769 }
770
771 export function TeamPhotosPreview() {
772 return (
773 <div className="grid h-full w-full place-items-center space-y-2 p-3">
774 <div className="w-full space-y-2">
775 <div className="grid grid-cols-3 gap-1">
776 {[1, 2, 3].map((i) => (
777 <div
778 key={i}
779 className="flex aspect-square items-center justify-center rounded bg-muted"
780 >
781 <ImageIcon className="h-4 w-4 text-muted-foreground" />
782 </div>
783 ))}
784 </div>
785 <div className="grid grid-cols-3 gap-1">
786 {[1, 2, 3].map((i) => (
787 <div key={i} className="space-y-0.5">
788 <div className="h-1 rounded bg-muted" />
789 <div className="h-0.5 rounded bg-muted" />
790 </div>
791 ))}
792 </div>
793 </div>
794 </div>
795 );
796 }
797
798 function _TimelineCollectionPreview() {
799 return (
800 <div className="grid h-full w-full place-items-center space-y-2 p-3">
801 <div className="w-full space-y-2">
802 <div className="flex gap-1">
803 <div className="w-px bg-muted-foreground/20" />
804 <div className="flex-1 space-y-1">
805 <div className="h-2 w-3/4 rounded bg-muted-foreground/20" />
806 <div className="h-1 w-full rounded bg-muted" />
807 <div className="h-1 w-5/6 rounded bg-muted" />
808 </div>
809 </div>
810 <div className="flex gap-1">
811 <div className="w-px bg-muted-foreground/20" />
812 <div className="flex-1 space-y-1">
813 <div className="h-2 w-3/4 rounded bg-muted-foreground/20" />
814 <div className="h-1 w-full rounded bg-muted" />
815 </div>
816 </div>
817 </div>
818 </div>
819 );
820 }
821
822 function _LargeBulletListPreview() {
823 return (
824 <div className="grid h-full w-full place-items-center space-y-1 p-3">
825 <div className="w-full space-y-1">
826 <div className="h-2 w-full rounded bg-muted-foreground/20" />
827 <div className="mt-2 space-y-1">
828 {[1, 2, 3, 4, 5].map((i) => (
829 <div key={i} className="flex items-center gap-1">
830 <div className="h-1 w-1 rounded-full bg-muted-foreground/40" />
831 <div className="h-1 flex-1 rounded bg-muted" />
832 </div>
833 ))}
834 </div>
835 </div>
836 </div>
837 );
838 }
839
840 function _IconsWithTextPreview() {
841 return (
842 <div className="grid h-full w-full place-items-center p-3">
843 <div className="grid w-full grid-cols-4 gap-2">
844 {[1, 2, 3, 4].map((i) => (
845 <div key={i} className="space-y-1">
846 <div className="mx-auto h-4 w-4 rounded-full bg-muted-foreground/40" />
847 <div className="h-1 rounded bg-muted" />
848 <div className="h-1 rounded bg-muted" />
849 </div>
850 ))}
851 </div>
852 </div>
853 );
854 }
855
856 function _SmallIconsWithTextPreview() {
857 return (
858 <div className="grid h-full w-full place-items-center p-3">
859 <div className="grid w-full grid-cols-4 gap-2">
860 {[1, 2, 3, 4].map((i) => (
861 <div key={i} className="space-y-1">
862 <div className="mx-auto h-3 w-3 rounded-full bg-muted-foreground/40" />
863 <div className="h-0.5 rounded bg-muted" />
864 <div className="h-0.5 rounded bg-muted" />
865 </div>
866 ))}
867 </div>
868 </div>
869 );
870 }
871
872 export function TimelineSequencePreview() {
873 return (
874 <div className="flex h-full w-full items-center justify-center p-4">
875 <div className="relative flex h-full w-full items-center">
876 <div className="absolute top-1/2 left-4 flex -translate-y-1/2 flex-col gap-3">
877 {[1, 2, 3].map((i) => (
878 <div
879 key={i}
880 className="h-3 w-3 rounded-full border-2 border-background bg-muted-foreground shadow"
881 />
882 ))}
883 </div>
884 <div className="ml-8 flex-1 space-y-2">
885 <div className="h-3 w-3/4 rounded bg-muted" />
886 <div className="h-3 w-2/3 rounded bg-muted" />
887 <div className="h-3 w-3/4 rounded bg-muted" />
888 </div>
889 </div>
890 </div>
891 );
892 }
893
894 export function MinimalTimelinePreview() {
895 return (
896 <div className="grid h-full w-full place-items-center space-y-2 p-4">
897 <div className="w-full space-y-2">
898 {[1, 2, 3, 4].map((i) => (
899 <div key={i} className="flex items-center gap-2">
900 <div className="h-2 w-2 rounded-full bg-muted-foreground/40" />
901 <div className="h-2 flex-1 rounded bg-muted" />
902 </div>
903 ))}
904 </div>
905 </div>
906 );
907 }
908
909 export function MinimalTimelineWithBoxesPreview() {
910 return (
911 <div className="grid h-full w-full place-items-center space-y-2 p-4">
912 <div className="w-full space-y-2">
913 {[1, 2, 3].map((i) => (
914 <div key={i} className="flex items-center gap-2">
915 <div className="h-2 w-2 rounded-full bg-muted-foreground/40" />
916 <div className="h-6 flex-1 rounded border-2 border-muted-foreground/20" />
917 </div>
918 ))}
919 </div>
920 </div>
921 );
922 }
923
924 function _ArrowsSequencePreview() {
925 return (
926 <div className="flex h-full w-full items-center justify-center p-4">
927 <div className="flex w-full items-center justify-center gap-1">
928 <div className="relative flex h-8 flex-1 items-center justify-end bg-muted-foreground/20 pr-2">
929 <div className="absolute -right-2 h-0 w-0 border-t-16 border-b-16 border-l-8 border-t-transparent border-b-transparent border-l-muted-foreground/20" />
930 </div>
931 <div className="relative flex h-8 flex-1 items-center justify-end bg-muted-foreground/20 pr-2">
932 <div className="absolute -right-2 h-0 w-0 border-t-16 border-b-16 border-l-8 border-t-transparent border-b-transparent border-l-muted-foreground/20" />
933 </div>
934 <div className="h-8 flex-1 bg-muted-foreground/20" />
935 </div>
936 </div>
937 );
938 }
939
940 export function PillsSequencePreview() {
941 return (
942 <div className="flex h-full w-full items-center justify-center p-4">
943 <div className="flex w-full items-center justify-center gap-2">
944 <div className="h-7 flex-1 rounded-full bg-muted-foreground/20" />
945 <div className="h-7 flex-1 rounded-full bg-muted-foreground/20" />
946 <div className="h-7 flex-1 rounded-full bg-muted-foreground/20" />
947 </div>
948 </div>
949 );
950 }
951
952 export function SlantedLabelsPreview() {
953 return (
954 <div className="flex h-full w-full items-center justify-center p-4">
955 <div className="flex w-full items-center justify-center gap-2">
956 <div className="h-8 flex-1 -skew-x-12 transform bg-muted-foreground/20" />
957 <div className="h-8 flex-1 -skew-x-12 transform bg-muted-foreground/20" />
958 <div className="h-8 flex-1 -skew-x-12 transform bg-muted-foreground/20" />
959 </div>
960 </div>
961 );
962 }
963
964 function _ArrowsPreview() {
965 return (
966 <div className="grid h-full w-full place-items-center space-y-2 p-3">
967 <div className="w-full space-y-2">
968 <div className="h-2 w-full rounded bg-muted-foreground/20" />
969 <div className="flex items-center gap-1">
970 <div className="h-1 flex-1 rounded bg-muted" />
971 <div
972 className="h-2 w-2 bg-muted-foreground/40"
973 style={{ clipPath: "polygon(0 50%, 100% 0, 100% 100%)" }}
974 />
975 <div className="h-1 flex-1 rounded bg-muted" />
976 <div
977 className="h-2 w-2 bg-muted-foreground/40"
978 style={{ clipPath: "polygon(0 50%, 100% 0, 100% 100%)" }}
979 />
980 <div className="h-1 flex-1 rounded bg-muted" />
981 </div>
982 </div>
983 </div>
984 );
985 }
986
987 function _FunnelWithTextPreview() {
988 return (
989 <div className="grid h-full w-full place-items-center p-3">
990 <div className="flex w-full gap-2">
991 <div className="flex flex-1 flex-col justify-center gap-0.5">
992 <div className="h-2 w-full rounded bg-muted-foreground/20" />
993 <div className="h-2 w-4/5 rounded bg-muted-foreground/20" />
994 <div className="h-2 w-3/5 rounded bg-muted-foreground/20" />
995 </div>
996 <div className="flex-1 space-y-1">
997 <div className="h-1 w-full rounded bg-muted" />
998 <div className="h-1 w-5/6 rounded bg-muted" />
999 <div className="h-1 w-full rounded bg-muted" />
1000 </div>
1001 </div>
1002 </div>
1003 );
1004 }
1005
1006 function _SteppedPyramidPreview() {
1007 return (
1008 <div className="grid h-full w-full place-items-center p-3">
1009 <div className="flex w-full gap-2">
1010 <div className="flex flex-1 flex-col items-center justify-center gap-0.5">
1011 <div className="h-2 w-1/3 rounded bg-muted-foreground/20" />
1012 <div className="h-2 w-2/3 rounded bg-muted-foreground/20" />
1013 <div className="h-2 w-full rounded bg-muted-foreground/20" />
1014 </div>
1015 <div className="flex-1 space-y-1">
1016 <div className="h-1 w-full rounded bg-muted" />
1017 <div className="h-1 w-5/6 rounded bg-muted" />
1018 <div className="h-1 w-full rounded bg-muted" />
1019 </div>
1020 </div>
1021 </div>
1022 );
1023 }
1024
1025 export function PyramidOutsideTextPreview() {
1026 return (
1027 <div className="grid h-full w-full place-items-center space-y-1 p-3">
1028 <div className="flex w-full flex-col items-center gap-0.5">
1029 <div className="h-2 w-1/4 rounded bg-muted-foreground/20" />
1030 <div className="h-2 w-2/4 rounded bg-muted-foreground/20" />
1031 <div className="h-2 w-3/4 rounded bg-muted-foreground/20" />
1032 <div className="h-2 w-full rounded bg-muted-foreground/20" />
1033 </div>
1034 </div>
1035 );
1036 }
1037
1038 function _LeftSteppedPyramidPreview() {
1039 return (
1040 <div className="grid h-full w-full place-items-center p-3">
1041 <div className="flex w-full gap-2">
1042 <div className="flex flex-1 flex-col justify-center gap-0.5">
1043 <div className="h-2 w-1/3 rounded bg-muted-foreground/20" />
1044 <div className="h-2 w-2/3 rounded bg-muted-foreground/20" />
1045 <div className="h-2 w-full rounded bg-muted-foreground/20" />
1046 </div>
1047 <div className="flex-1 space-y-1">
1048 <div className="h-1 w-full rounded bg-muted" />
1049 <div className="h-1 w-5/6 rounded bg-muted" />
1050 </div>
1051 </div>
1052 </div>
1053 );
1054 }
1055
1056 function _ColumnChartPreview() {
1057 return (
1058 <div className="grid h-full w-full place-items-center space-y-2 p-3">
1059 <div className="w-full space-y-2">
1060 <div className="h-2 w-3/4 rounded bg-muted-foreground/20" />
1061 <div className="flex h-12 items-end justify-center gap-1">
1062 <div className="h-8 w-3 rounded-t bg-muted-foreground/20" />
1063 <div className="h-10 w-3 rounded-t bg-muted-foreground/20" />
1064 <div className="h-6 w-3 rounded-t bg-muted-foreground/20" />
1065 </div>
1066 </div>
1067 </div>
1068 );
1069 }
1070
1071 export function PieChartPreview() {
1072 return (
1073 <div className="grid h-full w-full place-items-center space-y-2 p-3">
1074 <div className="h-2 w-3/4 rounded bg-muted-foreground/20" />
1075 <div className="flex items-center justify-center">
1076 <svg viewBox="0 0 32 32" className="h-12 w-12">
1077 <circle
1078 cx="16"
1079 cy="16"
1080 r="12"
1081 fill="currentColor"
1082 className="text-muted"
1083 />
1084 <circle
1085 cx="16"
1086 cy="16"
1087 r="10"
1088 fill="none"
1089 stroke="currentColor"
1090 className="text-muted-foreground/40"
1091 strokeWidth="12"
1092 strokeDasharray="25 75"
1093 transform="rotate(-90 16 16)"
1094 />
1095 </svg>
1096 </div>
1097 </div>
1098 );
1099 }
1100
1101 export function DonutChartPreview() {
1102 return (
1103 <div className="grid h-full w-full place-items-center space-y-2 p-3">
1104 <div className="h-2 w-3/4 rounded bg-muted-foreground/20" />
1105 <div className="flex items-center justify-center">
1106 <svg viewBox="0 0 32 32" className="h-12 w-12">
1107 <circle
1108 cx="16"
1109 cy="16"
1110 r="12"
1111 fill="none"
1112 stroke="currentColor"
1113 className="text-muted"
1114 strokeWidth="6"
1115 />
1116 <circle
1117 cx="16"
1118 cy="16"
1119 r="12"
1120 fill="none"
1121 stroke="currentColor"
1122 className="text-muted-foreground/40"
1123 strokeWidth="6"
1124 strokeDasharray="25 75"
1125 transform="rotate(-90 16 16)"
1126 />
1127 </svg>
1128 </div>
1129 </div>
1130 );
1131 }
1132
1133 function _BigNumbersPreview() {
1134 return (
1135 <div className="flex h-full w-full flex-col items-center justify-center space-y-2 p-3">
1136 <div className="h-2 w-full rounded bg-muted-foreground/20" />
1137 <div className="grid grid-cols-3 gap-2">
1138 <div className="space-y-1">
1139 <div className="text-xs font-bold text-muted-foreground">25%</div>
1140 <div className="h-0.5 rounded bg-muted" />
1141 </div>
1142 <div className="space-y-1">
1143 <div className="text-xs font-bold text-muted-foreground">3/4</div>
1144 <div className="h-0.5 rounded bg-muted" />
1145 </div>
1146 <div className="space-y-1">
1147 <div className="text-xs font-bold text-muted-foreground">50</div>
1148 <div className="h-0.5 rounded bg-muted" />
1149 </div>
1150 </div>
1151 </div>
1152 );
1153 }
1154
1155 export function BarStatsPreview() {
1156 return (
1157 <div className="grid h-full w-full place-items-center space-y-2 p-3">
1158 <div className="w-full space-y-2">
1159 <div className="h-2 w-full rounded bg-muted-foreground/20" />
1160 <div className="grid grid-cols-2 gap-2">
1161 <div className="space-y-1">
1162 <div className="h-1 w-full rounded bg-muted" />
1163 <div className="h-1 w-3/4 rounded bg-muted" />
1164 </div>
1165 <div className="space-y-1">
1166 <div className="h-1 w-full rounded bg-muted" />
1167 <div className="h-1 w-2/3 rounded bg-muted" />
1168 </div>
1169 </div>
1170 </div>
1171 </div>
1172 );
1173 }
1174
1175 export function ThreeRowTablePreview() {
1176 return (
1177 <div className="grid h-full w-full place-items-center space-y-1 p-3">
1178 <div className="w-full space-y-1">
1179 <div className="h-2 w-full rounded bg-muted-foreground/20" />
1180 <div className="space-y-0.5">
1181 <div className="h-1 w-full rounded bg-muted" />
1182 <div className="h-1 w-full rounded bg-muted" />
1183 <div className="h-1 w-full rounded bg-muted" />
1184 </div>
1185 </div>
1186 </div>
1187 );
1188 }
1189
1190 function _YouTubeVideoPreview() {
1191 return (
1192 <div className="grid h-full w-full place-items-center space-y-2 p-3">
1193 <div className="w-full space-y-2">
1194 <div className="h-2 w-3/4 rounded bg-muted-foreground/20" />
1195 <div className="flex h-16 items-center justify-center rounded bg-muted">
1196 <svg
1197 className="h-8 w-8 text-muted-foreground"
1198 fill="currentColor"
1199 viewBox="0 0 24 24"
1200 >
1201 <path d="M23.498 6.186a3.016 3.016 0 0 0-2.122-2.136C19.505 3.545 12 3.545 12 3.545s-7.505 0-9.377.505A3.017 3.017 0 0 0 .502 6.186C0 8.07 0 12 0 12s0 3.93.502 5.814a3.016 3.016 0 0 0 2.122 2.136c1.871.505 9.376.505 9.376.505s7.505 0 9.377-.505a3.015 3.015 0 0 0 2.122-2.136C24 15.93 24 12 24 12s0-3.93-.502-5.814zM9.545 15.568V8.432L15.818 12l-6.273 3.568z" />
1202 </svg>
1203 </div>
1204 </div>
1205 </div>
1206 );
1207 }
1208
1209 function _WebpageEmbedPreview() {
1210 return (
1211 <div className="grid h-full w-full place-items-center space-y-2 p-3">
1212 <div className="w-full space-y-2">
1213 <div className="h-2 w-3/4 rounded bg-muted-foreground/20" />
1214 <div className="flex h-16 items-center justify-center rounded bg-muted">
1215 <svg
1216 className="h-8 w-8 text-muted-foreground"
1217 fill="none"
1218 stroke="currentColor"
1219 viewBox="0 0 24 24"
1220 >
1221 <rect x="3" y="3" width="18" height="18" rx="2" strokeWidth="2" />
1222 <line x1="3" y1="9" x2="21" y2="9" strokeWidth="2" />
1223 </svg>
1224 </div>
1225 </div>
1226 </div>
1227 );
1228 }
1229
1230 function _AccordionPreview() {
1231 return (
1232 <div className="grid h-full w-full place-items-center space-y-1 p-3">
1233 <div className="w-full space-y-1">
1234 <div className="space-y-1 rounded border border-muted-foreground/20 p-1.5">
1235 <div className="h-1.5 w-3/4 rounded bg-muted-foreground/20" />
1236 </div>
1237 <div className="space-y-1 rounded border border-muted-foreground/20 p-1.5">
1238 <div className="h-1.5 w-3/4 rounded bg-muted-foreground/20" />
1239 </div>
1240 <div className="space-y-1 rounded border border-muted-foreground/20 p-1.5">
1241 <div className="h-1.5 w-3/4 rounded bg-muted-foreground/20" />
1242 </div>
1243 </div>
1244 </div>
1245 );
1246 }
1247
1248 function _TabsPreview() {
1249 return (
1250 <div className="grid h-full w-full place-items-center space-y-1 p-3">
1251 <div className="w-full space-y-1">
1252 <div className="flex gap-1 border-b border-muted-foreground/20 pb-1">
1253 <div className="h-1.5 w-12 rounded border-b-2 border-muted-foreground/40 bg-muted-foreground/20" />
1254 <div className="h-1.5 w-12 rounded bg-muted" />
1255 <div className="h-1.5 w-12 rounded bg-muted" />
1256 </div>
1257 <div className="space-y-1 pt-1">
1258 <div className="h-1 w-full rounded bg-muted" />
1259 <div className="h-1 w-5/6 rounded bg-muted" />
1260 <div className="h-1 w-full rounded bg-muted" />
1261 </div>
1262 </div>
1263 </div>
1264 );
1265 }
1266
1267 function _QuoteCardPreview() {
1268 return (
1269 <div className="flex h-full w-full flex-col items-center justify-center gap-3 p-4">
1270 <div className="text-2xl text-muted-foreground/20">"</div>
1271 <div className="h-1 w-16 rounded bg-muted" />
1272 <div className="w-full space-y-1">
1273 <div className="mx-auto h-1.5 w-4/5 rounded bg-muted" />
1274 <div className="mx-auto h-1.5 w-3/4 rounded bg-muted" />
1275 </div>
1276 <div className="mt-2 flex items-center gap-2">
1277 <div className="h-6 w-6 rounded-full bg-muted" />
1278 <div className="h-1.5 w-12 rounded bg-muted" />
1279 </div>
1280 </div>
1281 );
1282 }
1283
1284 function _ProfileCardPreview() {
1285 return (
1286 <div className="flex h-full w-full flex-col items-center gap-2 p-4">
1287 <div className="h-12 w-12 rounded-full bg-muted" />
1288 <div className="h-2 w-16 rounded bg-muted-foreground/20" />
1289 <div className="h-1.5 w-20 rounded bg-muted" />
1290 <div className="mt-1 w-full space-y-1">
1291 <div className="h-1.5 w-full rounded bg-muted" />
1292 <div className="h-1.5 w-5/6 rounded bg-muted" />
1293 </div>
1294 <div className="mt-2 flex gap-1">
1295 <div className="h-5 w-5 rounded border-2 border-muted" />
1296 <div className="h-5 w-5 rounded border-2 border-muted" />
1297 <div className="h-5 w-5 rounded border-2 border-muted" />
1298 </div>
1299 </div>
1300 );
1301 }
1302
1303 function _PricingCardPreview() {
1304 return (
1305 <div className="flex h-full w-full flex-col gap-2 p-4">
1306 <div className="h-2 w-16 rounded bg-muted" />
1307 <div className="flex items-baseline gap-1">
1308 <div className="h-4 w-8 rounded bg-muted-foreground/20" />
1309 <div className="h-2 w-8 rounded bg-muted" />
1310 </div>
1311 <div className="mt-2 space-y-1.5">
1312 <div className="flex items-center gap-1.5">
1313 <div className="h-1.5 w-1.5 rounded-full bg-muted-foreground/20" />
1314 <div className="h-1.5 flex-1 rounded bg-muted" />
1315 </div>
1316 <div className="flex items-center gap-1.5">
1317 <div className="h-1.5 w-1.5 rounded-full bg-muted-foreground/20" />
1318 <div className="h-1.5 flex-1 rounded bg-muted" />
1319 </div>
1320 <div className="flex items-center gap-1.5">
1321 <div className="h-1.5 w-1.5 rounded-full bg-muted-foreground/20" />
1322 <div className="h-1.5 flex-1 rounded bg-muted" />
1323 </div>
1324 </div>
1325 <div className="mt-auto h-7 rounded bg-muted-foreground/20" />
1326 </div>
1327 );
1328 }
1329
1330 function _FeatureHighlightPreview() {
1331 return (
1332 <div className="flex h-full w-full flex-col gap-2 p-4">
1333 <div className="flex h-10 w-10 items-center justify-center rounded-lg bg-muted-foreground/20">
1334 <div className="h-5 w-5 rounded bg-muted-foreground/40" />
1335 </div>
1336 <div className="h-2 w-20 rounded bg-muted-foreground/20" />
1337 <div className="mt-1 space-y-1.5">
1338 <div className="h-1.5 w-full rounded bg-muted" />
1339 <div className="h-1.5 w-5/6 rounded bg-muted" />
1340 <div className="h-1.5 w-4/5 rounded bg-muted" />
1341 </div>
1342 <div className="mt-2 h-1.5 w-16 rounded bg-muted-foreground/20" />
1343 </div>
1344 );
1345 }
1346
1347 function _CountdownPreview() {
1348 return (
1349 <div className="flex h-full w-full flex-col items-center justify-center gap-3 p-4">
1350 <div className="h-2 w-20 rounded bg-muted" />
1351 <div className="mt-1 flex gap-2">
1352 <div className="flex flex-col items-center gap-1">
1353 <div className="h-6 w-6 rounded bg-muted-foreground/20" />
1354 <div className="h-1 w-4 rounded bg-muted" />
1355 </div>
1356 <div className="flex flex-col items-center gap-1">
1357 <div className="h-6 w-6 rounded bg-muted-foreground/20" />
1358 <div className="h-1 w-4 rounded bg-muted" />
1359 </div>
1360 <div className="flex flex-col items-center gap-1">
1361 <div className="h-6 w-6 rounded bg-muted-foreground/20" />
1362 <div className="h-1 w-4 rounded bg-muted" />
1363 </div>
1364 </div>
1365 <div className="mt-1 h-1.5 w-3/4 rounded bg-muted" />
1366 </div>
1367 );
1368 }
1369
1370 function _SocialProofPreview() {
1371 return (
1372 <div className="flex h-full w-full flex-col items-center justify-center gap-2 p-4">
1373 <div className="flex -space-x-2">
1374 <div className="h-7 w-7 rounded-full border-2 border-background bg-muted-foreground/20" />
1375 <div className="h-7 w-7 rounded-full border-2 border-background bg-muted-foreground/20" />
1376 <div className="h-7 w-7 rounded-full border-2 border-background bg-muted-foreground/20" />
1377 </div>
1378 <div className="mt-1 flex gap-0.5">
1379 <div className="h-3 w-3 rounded bg-muted-foreground/20" />
1380 <div className="h-3 w-3 rounded bg-muted-foreground/20" />
1381 <div className="h-3 w-3 rounded bg-muted-foreground/20" />
1382 <div className="h-3 w-3 rounded bg-muted-foreground/20" />
1383 <div className="h-3 w-3 rounded bg-muted-foreground/20" />
1384 </div>
1385 <div className="mt-2 w-full space-y-1">
1386 <div className="h-1.5 w-full rounded bg-muted" />
1387 <div className="mx-auto h-1.5 w-4/5 rounded bg-muted" />
1388 </div>
1389 </div>
1390 );
1391 }
1392
1393 function _CTACardPreview() {
1394 return (
1395 <div className="flex h-full w-full flex-col items-center justify-center gap-2 p-4">
1396 <div className="h-10 w-10 rounded-full bg-muted-foreground/20" />
1397 <div className="mt-1 h-2 w-20 rounded bg-muted-foreground/20" />
1398 <div className="w-full space-y-1">
1399 <div className="h-1.5 w-full rounded bg-muted" />
1400 <div className="mx-auto h-1.5 w-5/6 rounded bg-muted" />
1401 </div>
1402 <div className="mt-2 h-7 w-full rounded bg-primary" />
1403 </div>
1404 );
1405 }
1406
1407 function _ComparisonPreview() {
1408 return (
1409 <div className="flex h-full w-full gap-2 p-4">
1410 <div className="flex flex-1 flex-col gap-2">
1411 <div className="h-2 w-12 rounded bg-muted" />
1412 <div className="h-16 w-full rounded bg-muted/40" />
1413 <div className="space-y-1">
1414 <div className="h-1.5 w-full rounded bg-muted" />
1415 <div className="h-1.5 w-4/5 rounded bg-muted" />
1416 </div>
1417 </div>
1418 <div className="flex items-center">
1419 <div className="text-sm text-muted-foreground/40">→</div>
1420 </div>
1421 <div className="flex flex-1 flex-col gap-2">
1422 <div className="h-2 w-12 rounded bg-muted" />
1423 <div className="h-16 w-full rounded bg-muted/40" />
1424 <div className="space-y-1">
1425 <div className="h-1.5 w-full rounded bg-muted" />
1426 <div className="h-1.5 w-4/5 rounded bg-muted" />
1427 </div>
1428 </div>
1429 </div>
1430 );
1431 }
1432
1433 function _KPICardPreview() {
1434 return (
1435 <div className="flex h-full w-full flex-col gap-2 p-4">
1436 <div className="flex items-center justify-between">
1437 <div className="h-1.5 w-16 rounded bg-muted" />
1438 <div className="h-5 w-5 rounded bg-muted" />
1439 </div>
1440 <div className="mt-1 flex items-baseline gap-2">
1441 <div className="h-5 w-12 rounded bg-muted-foreground/20" />
1442 <div className="flex items-center gap-1">
1443 <div className="text-xs text-muted-foreground/40">↑</div>
1444 <div className="h-1.5 w-8 rounded bg-muted" />
1445 </div>
1446 </div>
1447 <div className="mt-auto">
1448 <svg viewBox="0 0 80 20" className="h-5 w-full">
1449 <polyline
1450 points="0,15 20,10 40,12 60,5 80,8"
1451 fill="none"
1452 stroke="currentColor"
1453 strokeWidth="2"
1454 className="text-muted-foreground/40"
1455 />
1456 </svg>
1457 </div>
1458 </div>
1459 );
1460 }
1461
1462 function _BadgeCardPreview() {
1463 return (
1464 <div className="flex h-full w-full flex-col gap-2 p-4">
1465 <div className="h-4 w-12 rounded-full bg-muted-foreground/20" />
1466 <div className="h-2 w-24 rounded bg-muted-foreground/20" />
1467 <div className="mt-1 space-y-1.5">
1468 <div className="h-1.5 w-full rounded bg-muted" />
1469 <div className="h-1.5 w-5/6 rounded bg-muted" />
1470 <div className="h-1.5 w-4/5 rounded bg-muted" />
1471 </div>
1472 </div>
1473 );
1474 }
1475
1476 function _StackedBoxesPreview() {
1477 return (
1478 <div className="h-full w-full p-3">
1479 <div className="space-y-1">
1480 <div className="h-2 w-full rounded bg-muted-foreground/20" />
1481 <div className="h-1.5 w-full rounded bg-muted" />
1482 <div className="h-1 w-4/5 rounded bg-muted" />
1483 </div>
1484 </div>
1485 );
1486 }
1487
1488 function _ThreeTimelinesPreview() {
1489 return (
1490 <div className="grid h-full w-full place-items-center space-y-1 p-3">
1491 <div className="flex gap-1">
1492 <div className="w-px bg-muted-foreground/20" />
1493 <div className="flex-1 space-y-1">
1494 <div className="h-2 w-3/4 rounded bg-muted-foreground/20" />
1495 <div className="h-1 w-full rounded bg-muted" />
1496 </div>
1497 </div>
1498 <div className="flex gap-1">
1499 <div className="w-px bg-muted-foreground/20" />
1500 <div className="flex-1 space-y-1">
1501 <div className="h-2 w-3/4 rounded bg-muted-foreground/20" />
1502 <div className="h-1 w-full rounded bg-muted" />
1503 </div>
1504 </div>
1505 <div className="flex gap-1">
1506 <div className="w-px bg-muted-foreground/20" />
1507 <div className="flex-1 space-y-1">
1508 <div className="h-2 w-3/4 rounded bg-muted-foreground/20" />
1509 <div className="h-1 w-full rounded bg-muted" />
1510 </div>
1511 </div>
1512 </div>
1513 );
1514 }
1515
1516 export function CyclePreview() {
1517 const cardWidths = ["w-11/12", "w-full", "w-full", "w-11/12"];
1518
1519 return (
1520 <div className="grid h-full w-full grid-cols-[minmax(0,1fr)_4rem_minmax(0,1fr)] items-center gap-1.5 p-2">
1521 <div className="flex flex-col gap-2">
1522 {cardWidths.slice(0, 2).map((widthClass, index) => (
1523 <div
1524 key={`left-${index}`}
1525 className="flex h-8 flex-col items-end justify-center gap-1 rounded bg-background px-1.5 shadow-sm ring-1 ring-border"
1526 >
1527 <div
1528 className={`${widthClass} h-1.5 rounded bg-muted-foreground/35`}
1529 />
1530 <div className="h-1 w-9/12 rounded bg-muted-foreground/20" />
1531 </div>
1532 ))}
1533 </div>
1534
1535 <div className="relative grid aspect-square w-full place-items-center">
1536 <svg
1537 viewBox="0 0 100 100"
1538 className="h-full w-full text-muted-foreground/55"
1539 aria-hidden="true"
1540 >
1541 <circle cx="50" cy="50" r="36" className="fill-current" />
1542 <circle cx="50" cy="50" r="17" className="fill-background" />
1543 </svg>
1544 </div>
1545
1546 <div className="flex flex-col gap-2">
1547 {cardWidths.slice(2).map((widthClass, index) => (
1548 <div
1549 key={`right-${index}`}
1550 className="flex h-8 flex-col justify-center gap-1 rounded bg-background px-1.5 shadow-sm ring-1 ring-border"
1551 >
1552 <div
1553 className={`${widthClass} h-1.5 rounded bg-muted-foreground/35`}
1554 />
1555 <div className="h-1 w-9/12 rounded bg-muted-foreground/20" />
1556 </div>
1557 ))}
1558 </div>
1559 </div>
1560 );
1561 }
1562
1563 export function LabeledBoxesPreview() {
1564 return (
1565 <div className="grid h-full w-full grid-cols-3 gap-2 p-4">
1566 {[0, 1, 2].map((item) => (
1567 <div
1568 key={item}
1569 className="h-14 overflow-hidden rounded border border-primary/60"
1570 >
1571 <div className="h-4 bg-primary/60" />
1572 <div className="space-y-1 p-2">
1573 <div className="h-1.5 rounded bg-muted-foreground/30" />
1574 <div className="h-1 rounded bg-muted" />
1575 </div>
1576 </div>
1577 ))}
1578 </div>
1579 );
1580 }
1581
1582 export function AlternatingBoxesPreview() {
1583 return (
1584 <div className="grid h-full w-full grid-cols-2 gap-x-2 gap-y-1 p-4">
1585 <div className="h-8 rounded bg-primary/60" />
1586 <div />
1587 <div />
1588 <div className="h-8 rounded bg-primary/60" />
1589 <div className="h-8 rounded bg-primary/60" />
1590 </div>
1591 );
1592 }
1593
1594 export function SideLineTextPreview() {
1595 return (
1596 <div className="grid h-full w-full place-items-center gap-1 p-3">
1597 {[0, 1, 2].map((item) => (
1598 <div
1599 key={item}
1600 className="h-6 w-full rounded border border-l-[1rem] border-primary/60"
1601 />
1602 ))}
1603 </div>
1604 );
1605 }
1606
1607 export function TopLineTextPreview() {
1608 return (
1609 <div className="grid h-full w-full grid-cols-2 gap-2 p-4">
1610 {[0, 1, 2, 3].map((item) => (
1611 <div
1612 key={item}
1613 className="aspect-square rounded border border-t-[0.8rem] border-primary/60"
1614 />
1615 ))}
1616 </div>
1617 );
1618 }
1619
1620 export function TopCircleBoxesPreview() {
1621 return (
1622 <div className="grid h-full w-full grid-cols-3 gap-2 p-4">
1623 {[0, 1, 2].map((item) => (
1624 <div
1625 key={item}
1626 className="relative h-12 rounded border border-primary/60"
1627 >
1628 <div className="absolute top-2 left-0 h-px w-full bg-primary/60" />
1629 <div className="absolute top-0 left-1/2 size-4 -translate-x-1/2 rounded-full border border-primary/60 bg-background" />
1630 </div>
1631 ))}
1632 </div>
1633 );
1634 }
1635
1636 function _FlowerPreview() {
1637 return (
1638 <div className="flex h-full w-full items-center justify-center p-4">
1639 <svg width="60" height="60" viewBox="0 0 60 60" fill="none">
1640 <circle
1641 cx="30"
1642 cy="30"
1643 r="6"
1644 fill="currentColor"
1645 className="text-muted-foreground/40"
1646 />
1647 <circle
1648 cx="30"
1649 cy="15"
1650 r="8"
1651 stroke="currentColor"
1652 strokeWidth="2"
1653 className="text-muted-foreground/20"
1654 />
1655 <circle
1656 cx="45"
1657 cy="30"
1658 r="8"
1659 stroke="currentColor"
1660 strokeWidth="2"
1661 className="text-muted-foreground/20"
1662 />
1663 <circle
1664 cx="30"
1665 cy="45"
1666 r="8"
1667 stroke="currentColor"
1668 strokeWidth="2"
1669 className="text-muted-foreground/20"
1670 />
1671 <circle
1672 cx="15"
1673 cy="30"
1674 r="8"
1675 stroke="currentColor"
1676 strokeWidth="2"
1677 className="text-muted-foreground/20"
1678 />
1679 <circle
1680 cx="40"
1681 cy="20"
1682 r="8"
1683 stroke="currentColor"
1684 strokeWidth="2"
1685 className="text-muted-foreground/20"
1686 />
1687 <circle
1688 cx="40"
1689 cy="40"
1690 r="8"
1691 stroke="currentColor"
1692 strokeWidth="2"
1693 className="text-muted-foreground/20"
1694 />
1695 <circle
1696 cx="20"
1697 cy="40"
1698 r="8"
1699 stroke="currentColor"
1700 strokeWidth="2"
1701 className="text-muted-foreground/20"
1702 />
1703 <circle
1704 cx="20"
1705 cy="20"
1706 r="8"
1707 stroke="currentColor"
1708 strokeWidth="2"
1709 className="text-muted-foreground/20"
1710 />
1711 </svg>
1712 </div>
1713 );
1714 }
1715
1716 function _CirclePreview() {
1717 return (
1718 <div className="flex h-full w-full items-center justify-center p-4">
1719 <svg width="60" height="60" viewBox="0 0 60 60" fill="none">
1720 <circle
1721 cx="30"
1722 cy="30"
1723 r="6"
1724 fill="currentColor"
1725 className="text-muted-foreground/40"
1726 />
1727 <circle
1728 cx="30"
1729 cy="30"
1730 r="14"
1731 stroke="currentColor"
1732 strokeWidth="2"
1733 className="text-muted-foreground/20"
1734 />
1735 <circle
1736 cx="30"
1737 cy="30"
1738 r="22"
1739 stroke="currentColor"
1740 strokeWidth="2"
1741 className="text-muted-foreground/20"
1742 />
1743 </svg>
1744 </div>
1745 );
1746 }
1747
1748 function _RingPreview() {
1749 return (
1750 <div className="flex h-full w-full items-center justify-center p-4">
1751 <svg width="60" height="60" viewBox="0 0 60 60" fill="none">
1752 <circle
1753 cx="30"
1754 cy="30"
1755 r="20"
1756 stroke="currentColor"
1757 strokeWidth="8"
1758 className="text-muted-foreground/20"
1759 />
1760 <circle
1761 cx="30"
1762 cy="10"
1763 r="3"
1764 fill="currentColor"
1765 className="text-muted-foreground/40"
1766 />
1767 <circle
1768 cx="48"
1769 cy="18"
1770 r="3"
1771 fill="currentColor"
1772 className="text-muted-foreground/40"
1773 />
1774 <circle
1775 cx="48"
1776 cy="42"
1777 r="3"
1778 fill="currentColor"
1779 className="text-muted-foreground/40"
1780 />
1781 <circle
1782 cx="30"
1783 cy="50"
1784 r="3"
1785 fill="currentColor"
1786 className="text-muted-foreground/40"
1787 />
1788 <circle
1789 cx="12"
1790 cy="42"
1791 r="3"
1792 fill="currentColor"
1793 className="text-muted-foreground/40"
1794 />
1795 <circle
1796 cx="12"
1797 cy="18"
1798 r="3"
1799 fill="currentColor"
1800 className="text-muted-foreground/40"
1801 />
1802 </svg>
1803 </div>
1804 );
1805 }
1806
1807 function _SemiCirclePreview() {
1808 return (
1809 <div className="flex h-full w-full items-center justify-center p-4">
1810 <svg width="60" height="60" viewBox="0 0 60 60" fill="none">
1811 <path
1812 d="M 10 40 Q 30 10, 50 40"
1813 stroke="currentColor"
1814 strokeWidth="2"
1815 className="text-muted-foreground/20"
1816 fill="none"
1817 />
1818 <circle
1819 cx="10"
1820 cy="40"
1821 r="3"
1822 fill="currentColor"
1823 className="text-muted-foreground/40"
1824 />
1825 <circle
1826 cx="23"
1827 cy="25"
1828 r="3"
1829 fill="currentColor"
1830 className="text-muted-foreground/40"
1831 />
1832 <circle
1833 cx="30"
1834 cy="20"
1835 r="3"
1836 fill="currentColor"
1837 className="text-muted-foreground/40"
1838 />
1839 <circle
1840 cx="37"
1841 cy="25"
1842 r="3"
1843 fill="currentColor"
1844 className="text-muted-foreground/40"
1845 />
1846 <circle
1847 cx="50"
1848 cy="40"
1849 r="3"
1850 fill="currentColor"
1851 className="text-muted-foreground/40"
1852 />
1853 </svg>
1854 </div>
1855 );
1856 }
1857
1858 export function StaircasePreview() {
1859 return (
1860 <div className="flex h-full w-full items-end justify-center gap-0.5 p-3">
1861 <div className="h-6 w-3 bg-muted-foreground/20" />
1862 <div className="h-10 w-3 bg-muted-foreground/20" />
1863 <div className="h-14 w-3 bg-muted-foreground/20" />
1864 <div className="h-18 w-3 bg-muted-foreground/20" />
1865 </div>
1866 );
1867 }
1868
1869 export function SequenceArrowPreview() {
1870 return (
1871 <div className="flex h-full w-full flex-col items-center justify-center gap-0.5 p-3">
1872 {/* First box */}
1873 <div className="h-5 w-16 rounded bg-muted-foreground/20" />
1874 {/* Arrow pointing down */}
1875 <div
1876 className="h-0 w-0"
1877 style={{
1878 borderLeft: "6px solid transparent",
1879 borderRight: "6px solid transparent",
1880 borderTop: "8px solid hsl(var(--muted-foreground) / 0.2)",
1881 }}
1882 />
1883 {/* Second box */}
1884 <div className="h-5 w-16 rounded bg-muted-foreground/20" />
1885 {/* Arrow pointing down */}
1886 <div
1887 className="h-0 w-0"
1888 style={{
1889 borderLeft: "6px solid transparent",
1890 borderRight: "6px solid transparent",
1891 borderTop: "8px solid hsl(var(--muted-foreground) / 0.2)",
1892 }}
1893 />
1894 {/* Third box */}
1895 <div className="h-5 w-16 rounded bg-muted-foreground/20" />
1896 </div>
1897 );
1898 }
1899
1900 export function ArrowListPreview() {
1901 return (
1902 <div className="flex h-full w-full items-center justify-center p-4">
1903 <div className="flex w-full items-center justify-center gap-2">
1904 {/* Arrow shape 1 */}
1905 <svg viewBox="0 0 50 24" className="h-8 max-w-12.5 flex-1">
1906 <path
1907 d="M0,0 L38,0 L50,12 L38,24 L0,24 Z"
1908 className="fill-muted-foreground/20"
1909 />
1910 </svg>
1911 {/* Arrow shape 2 */}
1912 <svg viewBox="0 0 50 24" className="h-8 max-w-12.5 flex-1">
1913 <path
1914 d="M0,0 L38,0 L50,12 L38,24 L0,24 Z"
1915 className="fill-muted-foreground/20"
1916 />
1917 </svg>
1918 {/* Arrow shape 3 */}
1919 <svg viewBox="0 0 50 24" className="h-8 max-w-12.5 flex-1">
1920 <path
1921 d="M0,0 L38,0 L50,12 L38,24 L0,24 Z"
1922 className="fill-muted-foreground/20"
1923 />
1924 </svg>
1925 </div>
1926 </div>
1927 );
1928 }
1929
1930 function _StepsPreview() {
1931 return (
1932 <div className="flex h-full w-full items-center justify-center gap-2 p-3">
1933 <div className="flex flex-col items-center gap-1">
1934 <div className="flex h-6 w-6 items-center justify-center rounded-full bg-muted-foreground/20">
1935 <div className="text-[8px] font-semibold text-muted-foreground">
1936 1
1937 </div>
1938 </div>
1939 <div className="h-1 w-8 rounded bg-muted" />
1940 </div>
1941 <div className="flex flex-col items-center gap-1">
1942 <div className="flex h-6 w-6 items-center justify-center rounded-full bg-muted-foreground/20">
1943 <div className="text-[8px] font-semibold text-muted-foreground">
1944 2
1945 </div>
1946 </div>
1947 <div className="h-1 w-8 rounded bg-muted" />
1948 </div>
1949 <div className="flex flex-col items-center gap-1">
1950 <div className="flex h-6 w-6 items-center justify-center rounded-full bg-muted-foreground/20">
1951 <div className="text-[8px] font-semibold text-muted-foreground">
1952 3
1953 </div>
1954 </div>
1955 <div className="h-1 w-8 rounded bg-muted" />
1956 </div>
1957 </div>
1958 );
1959 }
1960
1961 function _BoxStepsPreview() {
1962 return (
1963 <div className="flex h-full w-full items-center justify-center gap-1.5 p-3">
1964 <div className="flex h-10 flex-1 items-center justify-center rounded border-2 border-muted-foreground/20">
1965 <div className="text-[8px] font-semibold text-muted-foreground">1</div>
1966 </div>
1967 <div className="flex h-10 flex-1 items-center justify-center rounded border-2 border-muted-foreground/20">
1968 <div className="text-[8px] font-semibold text-muted-foreground">2</div>
1969 </div>
1970 <div className="flex h-10 flex-1 items-center justify-center rounded border-2 border-muted-foreground/20">
1971 <div className="text-[8px] font-semibold text-muted-foreground">3</div>
1972 </div>
1973 </div>
1974 );
1975 }
1976
1977 function _ArrowStepsPreview() {
1978 return (
1979 <div className="flex h-full w-full items-center justify-center gap-0.5 p-3">
1980 <div className="relative flex h-8 w-8 items-center justify-center bg-muted-foreground/20">
1981 <div className="text-[8px] font-semibold text-muted-foreground">1</div>
1982 <div className="absolute top-1/2 -right-1 h-0 w-0 -translate-y-1/2 border-t-4 border-b-4 border-l-4 border-t-transparent border-b-transparent border-l-muted-foreground/20" />
1983 </div>
1984 <div className="relative flex h-8 w-8 items-center justify-center bg-muted-foreground/20">
1985 <div className="text-[8px] font-semibold text-muted-foreground">2</div>
1986 <div className="absolute top-1/2 -right-1 h-0 w-0 -translate-y-1/2 border-t-4 border-b-4 border-l-4 border-t-transparent border-b-transparent border-l-muted-foreground/20" />
1987 </div>
1988 <div className="flex h-8 w-8 items-center justify-center bg-muted-foreground/20">
1989 <div className="text-[8px] font-semibold text-muted-foreground">3</div>
1990 </div>
1991 </div>
1992 );
1993 }
1994
1995 function _StepsWithIconsPreview() {
1996 return (
1997 <div className="h-full w-full space-y-1.5 p-3">
1998 <div className="flex items-center gap-2">
1999 <div className="flex h-4 w-4 shrink-0 items-center justify-center rounded-full bg-muted-foreground/20">
2000 <div className="h-1.5 w-1.5 rounded-sm bg-muted-foreground" />
2001 </div>
2002 <div className="h-1 flex-1 rounded bg-muted" />
2003 </div>
2004 <div className="flex items-center gap-2">
2005 <div className="flex h-4 w-4 shrink-0 items-center justify-center rounded-full bg-muted-foreground/20">
2006 <div className="h-1.5 w-1.5 rounded-sm bg-muted-foreground" />
2007 </div>
2008 <div className="h-1 flex-1 rounded bg-muted" />
2009 </div>
2010 <div className="flex items-center gap-2">
2011 <div className="flex h-4 w-4 shrink-0 items-center justify-center rounded-full bg-muted-foreground/20">
2012 <div className="h-1.5 w-1.5 rounded-sm bg-muted-foreground" />
2013 </div>
2014 <div className="h-1 flex-1 rounded bg-muted" />
2015 </div>
2016 </div>
2017 );
2018 }
2019
2020 export function StatsPreview() {
2021 return (
2022 <div className="flex h-full w-full items-center justify-center gap-2 p-3">
2023 <div className="space-y-1 text-center">
2024 <div className="text-lg font-bold text-muted-foreground">42</div>
2025 <div className="h-0.5 w-6 rounded bg-muted" />
2026 </div>
2027 <div className="space-y-1 text-center">
2028 <div className="text-lg font-bold text-muted-foreground">85%</div>
2029 <div className="h-0.5 w-6 rounded bg-muted" />
2030 </div>
2031 <div className="space-y-1 text-center">
2032 <div className="text-lg font-bold text-muted-foreground">12K</div>
2033 <div className="h-0.5 w-6 rounded bg-muted" />
2034 </div>
2035 </div>
2036 );
2037 }
2038
2039 export function CircleStatsPreview() {
2040 return (
2041 <div className="grid h-full w-full place-items-center space-y-2 p-3">
2042 <div className="flex justify-center gap-2">
2043 <div className="h-8 w-8 rounded-full border-2 border-muted-foreground/20" />
2044 <div className="h-8 w-8 rounded-full border-2 border-muted-foreground/20" />
2045 <div className="h-8 w-8 rounded-full border-2 border-muted-foreground/20" />
2046 </div>
2047 <div className="grid grid-cols-3 gap-1">
2048 <div className="space-y-1">
2049 <div className="h-1 rounded bg-muted" />
2050 <div className="h-1 rounded bg-muted" />
2051 </div>
2052 <div className="space-y-1">
2053 <div className="h-1 rounded bg-muted" />
2054 <div className="h-1 rounded bg-muted" />
2055 </div>
2056 <div className="space-y-1">
2057 <div className="h-1 rounded bg-muted" />
2058 <div className="h-1 rounded bg-muted" />
2059 </div>
2060 </div>
2061 </div>
2062 );
2063 }
2064
2065 function _BarStatsFullPreview() {
2066 return (
2067 <div className="flex h-full w-full flex-col justify-center gap-2 p-3">
2068 <div className="space-y-1">
2069 <div className="h-1.5 w-full rounded bg-muted-foreground/20" />
2070 <div className="h-1.5 w-3/4 rounded bg-muted" />
2071 </div>
2072 <div className="space-y-1">
2073 <div className="h-1.5 w-full rounded bg-muted-foreground/20" />
2074 <div className="h-1.5 w-5/6 rounded bg-muted" />
2075 </div>
2076 <div className="space-y-1">
2077 <div className="h-1.5 w-full rounded bg-muted-foreground/20" />
2078 <div className="h-1.5 w-2/3 rounded bg-muted" />
2079 </div>
2080 </div>
2081 );
2082 }
2083
2084 export function StarRatingPreview() {
2085 return (
2086 <div className="flex h-full w-full items-center justify-center gap-1 p-3">
2087 {[1, 2, 3].map((i) => (
2088 <svg
2089 key={i}
2090 viewBox="0 0 24 24"
2091 className="h-6 w-6 fill-muted-foreground/20"
2092 >
2093 <path d="M12 2l3.09 6.26L22 9.27l-5 4.87 1.18 6.88L12 17.77l-6.18 3.25L7 14.14 2 9.27l6.91-1.01L12 2z" />
2094 </svg>
2095 ))}
2096 {[4, 5].map((i) => (
2097 <svg key={i} viewBox="0 0 24 24" className="h-6 w-6 fill-muted">
2098 <path d="M12 2l3.09 6.26L22 9.27l-5 4.87 1.18 6.88L12 17.77l-6.18 3.25L7 14.14 2 9.27l6.91-1.01L12 2z" />
2099 </svg>
2100 ))}
2101 </div>
2102 );
2103 }
2104
2105 export function DotGridStatsPreview() {
2106 return (
2107 <div className="flex h-full w-full items-center justify-center p-3">
2108 <div className="grid grid-cols-5 gap-1">
2109 {Array.from({ length: 25 }).map((_, i) => (
2110 <div
2111 key={i}
2112 className={`h-1.5 w-1.5 rounded-full ${i < 15 ? "bg-muted-foreground/20" : "bg-muted"}`}
2113 />
2114 ))}
2115 </div>
2116 </div>
2117 );
2118 }
2119
2120 export function DotLineStatsPreview() {
2121 return (
2122 <div className="flex h-full w-full items-center justify-center gap-1 p-3">
2123 <div className="h-2 w-2 rounded-full bg-muted-foreground/20" />
2124 <div className="h-2 w-2 rounded-full bg-muted-foreground/20" />
2125 <div className="h-2 w-2 rounded-full bg-muted-foreground/20" />
2126 <div className="h-2 w-2 rounded-full bg-muted-foreground/20" />
2127 <div className="h-2 w-2 rounded-full bg-muted" />
2128 <div className="h-2 w-2 rounded-full bg-muted" />
2129 </div>
2130 );
2131 }
2132
2133 export function CircleStatsMiddleBoldPreview() {
2134 return (
2135 <div className="flex h-full w-full items-center justify-center gap-3 p-3">
2136 {/* First circle */}
2137 <div className="relative">
2138 <svg viewBox="0 0 40 40" className="h-10 w-10">
2139 {/* Outer thin ring */}
2140 <circle
2141 cx="20"
2142 cy="20"
2143 r="18"
2144 fill="none"
2145 stroke="currentColor"
2146 className="text-muted-foreground/30"
2147 strokeWidth="1"
2148 />
2149 {/* Main progress track */}
2150 <circle
2151 cx="20"
2152 cy="20"
2153 r="14"
2154 fill="none"
2155 stroke="currentColor"
2156 className="text-muted"
2157 strokeWidth="4"
2158 />
2159 {/* Progress fill */}
2160 <circle
2161 cx="20"
2162 cy="20"
2163 r="14"
2164 fill="none"
2165 stroke="currentColor"
2166 className="text-muted-foreground/60"
2167 strokeWidth="4"
2168 strokeDasharray="55 88"
2169 transform="rotate(-90 20 20)"
2170 />
2171 {/* Inner circle */}
2172 <circle
2173 cx="20"
2174 cy="20"
2175 r="9"
2176 fill="none"
2177 stroke="currentColor"
2178 className="text-muted-foreground/40"
2179 strokeWidth="1"
2180 />
2181 </svg>
2182 <span className="absolute inset-0 flex items-center justify-center text-[9px] font-bold text-muted-foreground">
2183 0
2184 </span>
2185 </div>
2186 {/* Second circle */}
2187 <div className="relative">
2188 <svg viewBox="0 0 40 40" className="h-10 w-10">
2189 {/* Outer thin ring */}
2190 <circle
2191 cx="20"
2192 cy="20"
2193 r="18"
2194 fill="none"
2195 stroke="currentColor"
2196 className="text-muted-foreground/30"
2197 strokeWidth="1"
2198 />
2199 {/* Main progress track */}
2200 <circle
2201 cx="20"
2202 cy="20"
2203 r="14"
2204 fill="none"
2205 stroke="currentColor"
2206 className="text-muted"
2207 strokeWidth="4"
2208 />
2209 {/* Progress fill */}
2210 <circle
2211 cx="20"
2212 cy="20"
2213 r="14"
2214 fill="none"
2215 stroke="currentColor"
2216 className="text-muted-foreground/60"
2217 strokeWidth="4"
2218 strokeDasharray="35 88"
2219 transform="rotate(-90 20 20)"
2220 />
2221 {/* Inner circle */}
2222 <circle
2223 cx="20"
2224 cy="20"
2225 r="9"
2226 fill="none"
2227 stroke="currentColor"
2228 className="text-muted-foreground/40"
2229 strokeWidth="1"
2230 />
2231 </svg>
2232 <span className="absolute inset-0 flex items-center justify-center text-[9px] font-bold text-muted-foreground">
2233 0
2234 </span>
2235 </div>
2236 </div>
2237 );
2238 }
2239
2240 function _CircleStatsExternalBoldPreview() {
2241 return (
2242 <div className="flex h-full w-full items-center justify-center p-3">
2243 <svg viewBox="0 0 32 32" className="h-14 w-14">
2244 <circle
2245 cx="16"
2246 cy="16"
2247 r="12"
2248 fill="none"
2249 stroke="currentColor"
2250 className="text-muted"
2251 strokeWidth="3"
2252 />
2253 <circle
2254 cx="16"
2255 cy="16"
2256 r="12"
2257 fill="none"
2258 stroke="currentColor"
2259 className="text-muted-foreground/20"
2260 strokeWidth="3"
2261 strokeDasharray="47 75"
2262 transform="rotate(-90 16 16)"
2263 />
2264 <circle
2265 cx="16"
2266 cy="16"
2267 r="15"
2268 fill="none"
2269 stroke="currentColor"
2270 className="text-muted-foreground/40"
2271 strokeWidth="2"
2272 />
2273 </svg>
2274 </div>
2275 );
2276 }
2277
2278 function _QuoteWithMarksPreview() {
2279 return (
2280 <div className="flex h-full w-full items-center justify-center p-4">
2281 <div className="flex flex-col items-center gap-2">
2282 <div className="font-serif text-3xl text-muted-foreground/20">
2283 &ldquo;
2284 </div>
2285 <div className="space-y-1">
2286 <div className="h-1.5 w-24 rounded bg-muted-foreground/20" />
2287 <div className="h-1.5 w-20 rounded bg-muted-foreground/20" />
2288 </div>
2289 <div className="rotate-180 font-serif text-3xl text-muted-foreground/20">
2290 &ldquo;
2291 </div>
2292 <div className="mt-1 h-1 w-16 rounded bg-muted-foreground/40" />
2293 </div>
2294 </div>
2295 );
2296 }
2297
2298 function _TestimonialCardPreview() {
2299 return (
2300 <div className="flex h-full w-full flex-col gap-2 p-4">
2301 <div className="flex items-center gap-2">
2302 <div className="h-8 w-8 rounded-full bg-muted-foreground/20" />
2303 <div className="flex-1 space-y-1">
2304 <div className="h-1.5 w-16 rounded bg-muted-foreground/40" />
2305 <div className="h-1 w-12 rounded bg-muted-foreground/20" />
2306 </div>
2307 </div>
2308 <div className="flex-1 space-y-1.5">
2309 <div className="h-1.5 w-full rounded bg-muted" />
2310 <div className="h-1.5 w-5/6 rounded bg-muted" />
2311 <div className="h-1.5 w-4/5 rounded bg-muted" />
2312 </div>
2313 </div>
2314 );
2315 }
2316
2317 function _SideBorderedQuotePreview() {
2318 return (
2319 <div className="flex h-full w-full items-center p-4">
2320 <div className="flex w-full items-start gap-2">
2321 <div className="h-16 w-1 rounded bg-muted-foreground/40" />
2322 <div className="flex-1 space-y-2">
2323 <div className="space-y-1.5">
2324 <div className="h-1.5 w-full rounded bg-muted-foreground/20" />
2325 <div className="h-1.5 w-5/6 rounded bg-muted-foreground/20" />
2326 <div className="h-1.5 w-4/5 rounded bg-muted-foreground/20" />
2327 </div>
2328 <div className="h-1 w-16 rounded bg-muted-foreground/40" />
2329 </div>
2330 </div>
2331 </div>
2332 );
2333 }
2334
2335 function _CenteredQuotePreview() {
2336 return (
2337 <div className="flex h-full w-full flex-col items-center justify-center gap-2 p-4">
2338 <div className="h-0.5 w-8 rounded bg-muted-foreground/20" />
2339 <div className="font-serif text-2xl text-muted-foreground/20">
2340 &ldquo;
2341 </div>
2342 <div className="w-full space-y-1">
2343 <div className="mx-auto h-1.5 w-3/4 rounded bg-muted-foreground/20" />
2344 <div className="mx-auto h-1.5 w-2/3 rounded bg-muted-foreground/20" />
2345 </div>
2346 <div className="rotate-180 font-serif text-2xl text-muted-foreground/20">
2347 &ldquo;
2348 </div>
2349 <div className="h-0.5 w-8 rounded bg-muted-foreground/20" />
2350 <div className="mt-1 h-1 w-16 rounded bg-muted-foreground/40" />
2351 </div>
2352 );
2353 }
2354
2355 function _BulletsCollectionPreview() {
2356 return (
2357 <div className="grid h-full w-full place-items-center space-y-1 p-3">
2358 {[1, 2, 3].map((i) => (
2359 <div key={i} className="flex items-start gap-1.5">
2360 <div className="mt-0.5 h-1 w-1 shrink-0 rounded-full bg-muted-foreground/40" />
2361 <div className="h-1 flex-1 rounded bg-muted-foreground/20" />
2362 </div>
2363 ))}
2364 </div>
2365 );
2366 }
2367
2368 function _IconsCollectionPreview() {
2369 return (
2370 <div className="flex h-full w-full items-center justify-center p-3">
2371 <div className="grid grid-cols-3 gap-1.5">
2372 {[1, 2, 3].map((i) => (
2373 <div
2374 key={i}
2375 className="mx-auto flex h-4 w-4 items-center justify-center rounded-full bg-muted-foreground/40"
2376 >
2377 <div className="h-1.5 w-1.5 rounded-sm bg-primary-foreground" />
2378 </div>
2379 ))}
2380 </div>
2381 </div>
2382 );
2383 }
2384
2385 // =====================================================
2386 // CHART PREVIEW COMPONENTS
2387 // =====================================================
2388
2389 export function AreaChartPreview() {
2390 return (
2391 <div className="grid h-full w-full place-items-center p-3">
2392 <svg viewBox="0 0 120 80" className="h-full w-full">
2393 <defs>
2394 <linearGradient id="areaGradient" x1="0%" y1="0%" x2="0%" y2="100%">
2395 <stop
2396 offset="0%"
2397 className="text-muted-foreground/50"
2398 style={{ stopColor: "currentColor" }}
2399 />
2400 <stop
2401 offset="100%"
2402 className="text-muted-foreground/10"
2403 style={{ stopColor: "currentColor" }}
2404 />
2405 </linearGradient>
2406 </defs>
2407 <path
2408 d="M10,60 Q30,40 50,50 T90,30 L90,70 L10,70 Z"
2409 fill="url(#areaGradient)"
2410 className="stroke-muted-foreground"
2411 strokeWidth="1.5"
2412 />
2413 </svg>
2414 </div>
2415 );
2416 }
2417
2418 export function ScatterChartPreview() {
2419 return (
2420 <div className="grid h-full w-full place-items-center p-3">
2421 <svg viewBox="0 0 120 80" className="h-full w-full">
2422 <circle cx="20" cy="50" r="4" className="fill-muted-foreground" />
2423 <circle cx="35" cy="35" r="4" className="fill-muted-foreground" />
2424 <circle cx="50" cy="55" r="4" className="fill-muted-foreground" />
2425 <circle cx="65" cy="25" r="4" className="fill-muted-foreground" />
2426 <circle cx="80" cy="40" r="4" className="fill-muted-foreground" />
2427 <circle cx="95" cy="30" r="4" className="fill-muted-foreground" />
2428 <circle cx="45" cy="45" r="4" className="fill-muted-foreground/60" />
2429 <circle cx="70" cy="50" r="4" className="fill-muted-foreground/60" />
2430 </svg>
2431 </div>
2432 );
2433 }
2434
2435 export function BubbleChartPreview() {
2436 return (
2437 <div className="grid h-full w-full place-items-center p-3">
2438 <svg viewBox="0 0 120 80" className="h-full w-full">
2439 <circle cx="30" cy="45" r="12" className="fill-muted-foreground/60" />
2440 <circle cx="60" cy="35" r="18" className="fill-muted-foreground/60" />
2441 <circle cx="90" cy="50" r="10" className="fill-muted-foreground/60" />
2442 <circle cx="45" cy="55" r="8" className="fill-muted-foreground/40" />
2443 <circle cx="75" cy="55" r="6" className="fill-muted-foreground/40" />
2444 </svg>
2445 </div>
2446 );
2447 }
2448
2449 export function HistogramChartPreview() {
2450 return (
2451 <div className="grid h-full w-full place-items-center p-3">
2452 <svg viewBox="0 0 120 80" className="h-full w-full">
2453 <rect
2454 x="10"
2455 y="50"
2456 width="12"
2457 height="20"
2458 className="fill-muted-foreground"
2459 />
2460 <rect
2461 x="24"
2462 y="35"
2463 width="12"
2464 height="35"
2465 className="fill-muted-foreground"
2466 />
2467 <rect
2468 x="38"
2469 y="20"
2470 width="12"
2471 height="50"
2472 className="fill-muted-foreground"
2473 />
2474 <rect
2475 x="52"
2476 y="25"
2477 width="12"
2478 height="45"
2479 className="fill-muted-foreground"
2480 />
2481 <rect
2482 x="66"
2483 y="40"
2484 width="12"
2485 height="30"
2486 className="fill-muted-foreground"
2487 />
2488 <rect
2489 x="80"
2490 y="55"
2491 width="12"
2492 height="15"
2493 className="fill-muted-foreground"
2494 />
2495 <rect
2496 x="94"
2497 y="60"
2498 width="12"
2499 height="10"
2500 className="fill-muted-foreground"
2501 />
2502 </svg>
2503 </div>
2504 );
2505 }
2506
2507 export function RangeBarChartPreview() {
2508 return (
2509 <div className="grid h-full w-full place-items-center p-3">
2510 <svg viewBox="0 0 120 80" className="h-full w-full">
2511 <rect
2512 x="25"
2513 y="12"
2514 width="50"
2515 height="10"
2516 rx="2"
2517 className="fill-muted-foreground"
2518 />
2519 <rect
2520 x="20"
2521 y="28"
2522 width="60"
2523 height="10"
2524 rx="2"
2525 className="fill-muted-foreground"
2526 />
2527 <rect
2528 x="35"
2529 y="44"
2530 width="40"
2531 height="10"
2532 rx="2"
2533 className="fill-muted-foreground"
2534 />
2535 <rect
2536 x="30"
2537 y="60"
2538 width="55"
2539 height="10"
2540 rx="2"
2541 className="fill-muted-foreground"
2542 />
2543 </svg>
2544 </div>
2545 );
2546 }
2547
2548 export function RangeAreaChartPreview() {
2549 return (
2550 <div className="grid h-full w-full place-items-center p-3">
2551 <svg viewBox="0 0 120 80" className="h-full w-full">
2552 <path
2553 d="M10,45 Q30,30 50,35 T90,25 L90,55 Q70,50 50,55 T10,60 Z"
2554 className="fill-muted-foreground/40 stroke-muted-foreground"
2555 strokeWidth="1"
2556 />
2557 </svg>
2558 </div>
2559 );
2560 }
2561
2562 export function WaterfallChartPreview() {
2563 return (
2564 <div className="grid h-full w-full place-items-center p-3">
2565 <svg viewBox="0 0 120 80" className="h-full w-full">
2566 <rect
2567 x="10"
2568 y="20"
2569 width="14"
2570 height="35"
2571 className="fill-muted-foreground"
2572 />
2573 <rect
2574 x="28"
2575 y="30"
2576 width="14"
2577 height="15"
2578 className="fill-muted-foreground/60"
2579 />
2580 <rect
2581 x="46"
2582 y="25"
2583 width="14"
2584 height="20"
2585 className="fill-muted-foreground/60"
2586 />
2587 <rect x="64" y="35" width="14" height="25" className="fill-muted/80" />
2588 <rect
2589 x="82"
2590 y="20"
2591 width="14"
2592 height="40"
2593 className="fill-muted-foreground"
2594 />
2595 <line
2596 x1="24"
2597 y1="55"
2598 x2="28"
2599 y2="55"
2600 className="stroke-muted-foreground"
2601 strokeWidth="1"
2602 strokeDasharray="2"
2603 />
2604 <line
2605 x1="42"
2606 y1="45"
2607 x2="46"
2608 y2="45"
2609 className="stroke-muted-foreground"
2610 strokeWidth="1"
2611 strokeDasharray="2"
2612 />
2613 <line
2614 x1="60"
2615 y1="45"
2616 x2="64"
2617 y2="45"
2618 className="stroke-muted-foreground"
2619 strokeWidth="1"
2620 strokeDasharray="2"
2621 />
2622 <line
2623 x1="78"
2624 y1="60"
2625 x2="82"
2626 y2="60"
2627 className="stroke-muted-foreground"
2628 strokeWidth="1"
2629 strokeDasharray="2"
2630 />
2631 </svg>
2632 </div>
2633 );
2634 }
2635
2636 export function BoxPlotChartPreview() {
2637 return (
2638 <div className="grid h-full w-full place-items-center p-3">
2639 <svg viewBox="0 0 120 80" className="h-full w-full">
2640 <line
2641 x1="25"
2642 y1="15"
2643 x2="25"
2644 y2="65"
2645 className="stroke-muted-foreground"
2646 strokeWidth="1"
2647 />
2648 <rect
2649 x="15"
2650 y="25"
2651 width="20"
2652 height="25"
2653 fill="none"
2654 className="stroke-muted-foreground"
2655 strokeWidth="1.5"
2656 />
2657 <line
2658 x1="15"
2659 y1="40"
2660 x2="35"
2661 y2="40"
2662 className="stroke-muted-foreground"
2663 strokeWidth="2"
2664 />
2665 <line
2666 x1="25"
2667 y1="15"
2668 x2="25"
2669 y2="25"
2670 className="stroke-muted-foreground"
2671 strokeWidth="1"
2672 />
2673 <line
2674 x1="25"
2675 y1="50"
2676 x2="25"
2677 y2="65"
2678 className="stroke-muted-foreground"
2679 strokeWidth="1"
2680 />
2681
2682 <line
2683 x1="65"
2684 y1="20"
2685 x2="65"
2686 y2="60"
2687 className="stroke-muted-foreground"
2688 strokeWidth="1"
2689 />
2690 <rect
2691 x="55"
2692 y="30"
2693 width="20"
2694 height="20"
2695 fill="none"
2696 className="stroke-muted-foreground"
2697 strokeWidth="1.5"
2698 />
2699 <line
2700 x1="55"
2701 y1="38"
2702 x2="75"
2703 y2="38"
2704 className="stroke-muted-foreground"
2705 strokeWidth="2"
2706 />
2707
2708 <line
2709 x1="100"
2710 y1="10"
2711 x2="100"
2712 y2="70"
2713 className="stroke-muted-foreground"
2714 strokeWidth="1"
2715 />
2716 <rect
2717 x="90"
2718 y="22"
2719 width="20"
2720 height="30"
2721 fill="none"
2722 className="stroke-muted-foreground"
2723 strokeWidth="1.5"
2724 />
2725 <line
2726 x1="90"
2727 y1="35"
2728 x2="110"
2729 y2="35"
2730 className="stroke-muted-foreground"
2731 strokeWidth="2"
2732 />
2733 </svg>
2734 </div>
2735 );
2736 }
2737
2738 export function CandlestickChartPreview() {
2739 return (
2740 <div className="grid h-full w-full place-items-center p-3">
2741 <svg viewBox="0 0 120 80" className="h-full w-full">
2742 <line
2743 x1="20"
2744 y1="15"
2745 x2="20"
2746 y2="60"
2747 className="stroke-muted-foreground"
2748 strokeWidth="1"
2749 />
2750 <rect
2751 x="15"
2752 y="25"
2753 width="10"
2754 height="20"
2755 className="fill-muted-foreground"
2756 />
2757
2758 <line
2759 x1="40"
2760 y1="20"
2761 x2="40"
2762 y2="55"
2763 className="stroke-muted-foreground"
2764 strokeWidth="1"
2765 />
2766 <rect
2767 x="35"
2768 y="30"
2769 width="10"
2770 height="15"
2771 fill="none"
2772 className="stroke-muted-foreground"
2773 strokeWidth="1.5"
2774 />
2775
2776 <line
2777 x1="60"
2778 y1="10"
2779 x2="60"
2780 y2="50"
2781 className="stroke-muted-foreground"
2782 strokeWidth="1"
2783 />
2784 <rect
2785 x="55"
2786 y="18"
2787 width="10"
2788 height="22"
2789 className="fill-muted-foreground"
2790 />
2791
2792 <line
2793 x1="80"
2794 y1="25"
2795 x2="80"
2796 y2="65"
2797 className="stroke-muted-foreground"
2798 strokeWidth="1"
2799 />
2800 <rect
2801 x="75"
2802 y="35"
2803 width="10"
2804 height="18"
2805 fill="none"
2806 className="stroke-muted-foreground"
2807 strokeWidth="1.5"
2808 />
2809
2810 <line
2811 x1="100"
2812 y1="20"
2813 x2="100"
2814 y2="58"
2815 className="stroke-muted-foreground"
2816 strokeWidth="1"
2817 />
2818 <rect
2819 x="95"
2820 y="28"
2821 width="10"
2822 height="20"
2823 className="fill-muted-foreground"
2824 />
2825 </svg>
2826 </div>
2827 );
2828 }
2829
2830 export function OHLCChartPreview() {
2831 return (
2832 <div className="grid h-full w-full place-items-center p-3">
2833 <svg viewBox="0 0 120 80" className="h-full w-full">
2834 <g className="stroke-muted-foreground" strokeWidth="1.5">
2835 <line x1="20" y1="15" x2="20" y2="60" />
2836 <line x1="15" y1="25" x2="20" y2="25" />
2837 <line x1="20" y1="50" x2="25" y2="50" />
2838 </g>
2839 <g className="stroke-muted-foreground" strokeWidth="1.5">
2840 <line x1="45" y1="20" x2="45" y2="55" />
2841 <line x1="40" y1="30" x2="45" y2="30" />
2842 <line x1="45" y1="45" x2="50" y2="45" />
2843 </g>
2844 <g className="stroke-muted-foreground" strokeWidth="1.5">
2845 <line x1="70" y1="10" x2="70" y2="50" />
2846 <line x1="65" y1="18" x2="70" y2="18" />
2847 <line x1="70" y1="40" x2="75" y2="40" />
2848 </g>
2849 <g className="stroke-muted-foreground" strokeWidth="1.5">
2850 <line x1="95" y1="25" x2="95" y2="65" />
2851 <line x1="90" y1="35" x2="95" y2="35" />
2852 <line x1="95" y1="55" x2="100" y2="55" />
2853 </g>
2854 </svg>
2855 </div>
2856 );
2857 }
2858
2859 export function RadarLineChartPreview() {
2860 return (
2861 <div className="grid h-full w-full place-items-center p-3">
2862 <svg viewBox="0 0 120 80" className="h-full w-full">
2863 <polygon
2864 points="60,10 95,30 85,65 35,65 25,30"
2865 fill="none"
2866 className="stroke-muted"
2867 strokeWidth="1"
2868 />
2869 <polygon
2870 points="60,25 80,35 75,55 45,55 40,35"
2871 fill="none"
2872 className="stroke-muted"
2873 strokeWidth="1"
2874 />
2875 <polygon
2876 points="60,20 85,32 78,58 42,58 35,32"
2877 fill="none"
2878 className="stroke-muted-foreground"
2879 strokeWidth="1.5"
2880 />
2881 <circle cx="60" cy="20" r="2" className="fill-muted-foreground" />
2882 <circle cx="85" cy="32" r="2" className="fill-muted-foreground" />
2883 <circle cx="78" cy="58" r="2" className="fill-muted-foreground" />
2884 <circle cx="42" cy="58" r="2" className="fill-muted-foreground" />
2885 <circle cx="35" cy="32" r="2" className="fill-muted-foreground" />
2886 </svg>
2887 </div>
2888 );
2889 }
2890
2891 export function RadarAreaChartPreview() {
2892 return (
2893 <div className="grid h-full w-full place-items-center p-3">
2894 <svg viewBox="0 0 120 80" className="h-full w-full">
2895 <polygon
2896 points="60,10 95,30 85,65 35,65 25,30"
2897 fill="none"
2898 className="stroke-muted"
2899 strokeWidth="1"
2900 />
2901 <polygon
2902 points="60,20 85,32 78,58 42,58 35,32"
2903 className="fill-muted-foreground/30 stroke-muted-foreground"
2904 strokeWidth="1.5"
2905 />
2906 </svg>
2907 </div>
2908 );
2909 }
2910
2911 export function NightingaleChartPreview() {
2912 return (
2913 <div className="grid h-full w-full place-items-center p-3">
2914 <svg viewBox="0 0 120 80" className="h-full w-full">
2915 <path
2916 d="M60,40 L60,10 A30,30 0 0,1 85,25 Z"
2917 className="fill-muted-foreground"
2918 />
2919 <path
2920 d="M60,40 L85,25 A30,30 0 0,1 90,55 Z"
2921 className="fill-muted-foreground/60"
2922 />
2923 <path d="M60,40 L90,55 A30,30 0 0,1 60,70 Z" className="fill-muted" />
2924 <path
2925 d="M60,40 L60,70 A30,30 0 0,1 30,55 Z"
2926 className="fill-muted-foreground/70"
2927 />
2928 <path
2929 d="M60,40 L30,55 A30,30 0 0,1 35,25 Z"
2930 className="fill-muted-foreground/50"
2931 />
2932 <path
2933 d="M60,40 L35,25 A30,30 0 0,1 60,10 Z"
2934 className="fill-muted/70"
2935 />
2936 </svg>
2937 </div>
2938 );
2939 }
2940
2941 export function RadialColumnChartPreview() {
2942 return (
2943 <div className="grid h-full w-full place-items-center p-3">
2944 <svg viewBox="0 0 120 80" className="h-full w-full">
2945 <circle
2946 cx="60"
2947 cy="40"
2948 r="28"
2949 fill="none"
2950 className="stroke-muted"
2951 strokeWidth="8"
2952 />
2953 <path
2954 d="M60,12 A28,28 0 0,1 88,40"
2955 fill="none"
2956 className="stroke-muted-foreground"
2957 strokeWidth="8"
2958 />
2959 <path
2960 d="M88,40 A28,28 0 0,1 60,68"
2961 fill="none"
2962 className="stroke-muted-foreground/60"
2963 strokeWidth="8"
2964 />
2965 </svg>
2966 </div>
2967 );
2968 }
2969
2970 export function RadialBarChartPreview() {
2971 return (
2972 <div className="grid h-full w-full place-items-center p-3">
2973 <svg viewBox="0 0 60 60" className="h-full w-full max-w-12.5">
2974 {/* Background tracks */}
2975 <circle
2976 cx="30"
2977 cy="30"
2978 r="26"
2979 fill="none"
2980 className="stroke-muted"
2981 strokeWidth="5"
2982 />
2983 <circle
2984 cx="30"
2985 cy="30"
2986 r="18"
2987 fill="none"
2988 className="stroke-muted"
2989 strokeWidth="5"
2990 />
2991 <circle
2992 cx="30"
2993 cy="30"
2994 r="10"
2995 fill="none"
2996 className="stroke-muted"
2997 strokeWidth="5"
2998 />
2999 {/* Data arcs - starting from top (270deg = -90deg) going clockwise */}
3000 {/* Outer ring - 75% */}
3001 <circle
3002 cx="30"
3003 cy="30"
3004 r="26"
3005 fill="none"
3006 className="stroke-muted-foreground"
3007 strokeWidth="5"
3008 strokeLinecap="round"
3009 strokeDasharray="122.5 163.4"
3010 strokeDashoffset="40.8"
3011 transform="rotate(-90 30 30)"
3012 />
3013 {/* Middle ring - 60% */}
3014 <circle
3015 cx="30"
3016 cy="30"
3017 r="18"
3018 fill="none"
3019 className="stroke-muted-foreground/70"
3020 strokeWidth="5"
3021 strokeLinecap="round"
3022 strokeDasharray="67.9 113.1"
3023 strokeDashoffset="28.3"
3024 transform="rotate(-90 30 30)"
3025 />
3026 {/* Inner ring - 85% */}
3027 <circle
3028 cx="30"
3029 cy="30"
3030 r="10"
3031 fill="none"
3032 className="stroke-muted-foreground/50"
3033 strokeWidth="5"
3034 strokeLinecap="round"
3035 strokeDasharray="53.4 62.8"
3036 strokeDashoffset="15.7"
3037 transform="rotate(-90 30 30)"
3038 />
3039 </svg>
3040 </div>
3041 );
3042 }
3043
3044 export function SunburstChartPreview() {
3045 return (
3046 <div className="grid h-full w-full place-items-center p-3">
3047 <svg viewBox="0 0 120 80" className="h-full w-full">
3048 <circle cx="60" cy="40" r="10" className="fill-muted-foreground" />
3049 <path
3050 d="M60,28 A12,12 0 0,1 72,40 L82,40 A22,22 0 0,0 60,18 Z"
3051 className="fill-muted-foreground/60"
3052 />
3053 <path
3054 d="M72,40 A12,12 0 0,1 60,52 L60,62 A22,22 0 0,0 82,40 Z"
3055 className="fill-muted"
3056 />
3057 <path
3058 d="M60,52 A12,12 0 0,1 48,40 L38,40 A22,22 0 0,0 60,62 Z"
3059 className="fill-muted-foreground/60"
3060 />
3061 <path
3062 d="M48,40 A12,12 0 0,1 60,28 L60,18 A22,22 0 0,0 38,40 Z"
3063 className="fill-muted-foreground/40"
3064 />
3065 </svg>
3066 </div>
3067 );
3068 }
3069
3070 export function TreemapChartPreview() {
3071 return (
3072 <div className="grid h-full w-full place-items-center p-3">
3073 <svg viewBox="0 0 120 80" className="h-full w-full">
3074 <rect
3075 x="10"
3076 y="10"
3077 width="50"
3078 height="35"
3079 rx="2"
3080 className="fill-muted-foreground"
3081 />
3082 <rect
3083 x="65"
3084 y="10"
3085 width="45"
3086 height="20"
3087 rx="2"
3088 className="fill-muted-foreground/60"
3089 />
3090 <rect
3091 x="65"
3092 y="35"
3093 width="20"
3094 height="35"
3095 rx="2"
3096 className="fill-muted"
3097 />
3098 <rect
3099 x="90"
3100 y="35"
3101 width="20"
3102 height="35"
3103 rx="2"
3104 className="fill-muted-foreground/50"
3105 />
3106 <rect
3107 x="10"
3108 y="50"
3109 width="25"
3110 height="20"
3111 rx="2"
3112 className="fill-muted-foreground/70"
3113 />
3114 <rect
3115 x="40"
3116 y="50"
3117 width="20"
3118 height="20"
3119 rx="2"
3120 className="fill-muted/70"
3121 />
3122 </svg>
3123 </div>
3124 );
3125 }
3126
3127 export function HeatmapChartPreview() {
3128 return (
3129 <div className="grid h-full w-full place-items-center p-3">
3130 <svg viewBox="0 0 120 80" className="h-full w-full">
3131 <rect
3132 x="10"
3133 y="10"
3134 width="18"
3135 height="18"
3136 className="fill-muted-foreground/90"
3137 />
3138 <rect
3139 x="32"
3140 y="10"
3141 width="18"
3142 height="18"
3143 className="fill-muted-foreground/50"
3144 />
3145 <rect
3146 x="54"
3147 y="10"
3148 width="18"
3149 height="18"
3150 className="fill-muted-foreground/30"
3151 />
3152 <rect
3153 x="76"
3154 y="10"
3155 width="18"
3156 height="18"
3157 className="fill-muted-foreground/70"
3158 />
3159 <rect
3160 x="98"
3161 y="10"
3162 width="18"
3163 height="18"
3164 className="fill-muted-foreground/40"
3165 />
3166 <rect
3167 x="10"
3168 y="32"
3169 width="18"
3170 height="18"
3171 className="fill-muted-foreground/40"
3172 />
3173 <rect
3174 x="32"
3175 y="32"
3176 width="18"
3177 height="18"
3178 className="fill-muted-foreground/80"
3179 />
3180 <rect
3181 x="54"
3182 y="32"
3183 width="18"
3184 height="18"
3185 className="fill-muted-foreground/60"
3186 />
3187 <rect
3188 x="76"
3189 y="32"
3190 width="18"
3191 height="18"
3192 className="fill-muted-foreground/20"
3193 />
3194 <rect
3195 x="98"
3196 y="32"
3197 width="18"
3198 height="18"
3199 className="fill-muted-foreground/90"
3200 />
3201 <rect
3202 x="10"
3203 y="54"
3204 width="18"
3205 height="18"
3206 className="fill-muted-foreground/60"
3207 />
3208 <rect
3209 x="32"
3210 y="54"
3211 width="18"
3212 height="18"
3213 className="fill-muted-foreground/30"
3214 />
3215 <rect
3216 x="54"
3217 y="54"
3218 width="18"
3219 height="18"
3220 className="fill-muted-foreground/90"
3221 />
3222 <rect
3223 x="76"
3224 y="54"
3225 width="18"
3226 height="18"
3227 className="fill-muted-foreground/50"
3228 />
3229 <rect
3230 x="98"
3231 y="54"
3232 width="18"
3233 height="18"
3234 className="fill-muted-foreground/70"
3235 />
3236 </svg>
3237 </div>
3238 );
3239 }
3240
3241 export function SankeyChartPreview() {
3242 return (
3243 <div className="grid h-full w-full place-items-center p-3">
3244 <svg viewBox="0 0 120 80" className="h-full w-full">
3245 <path
3246 d="M10,15 C40,15 40,20 70,20 L70,35 C40,35 40,30 10,30 Z"
3247 className="fill-muted-foreground/60"
3248 />
3249 <path
3250 d="M10,35 C40,35 40,45 70,45 L70,55 C40,55 40,45 10,45 Z"
3251 className="fill-muted-foreground/40"
3252 />
3253 <path
3254 d="M10,50 C40,50 40,60 70,60 L70,70 C40,70 40,60 10,60 Z"
3255 className="fill-muted/60"
3256 />
3257 <path
3258 d="M75,20 C95,20 95,15 110,15 L110,25 C95,25 95,30 75,30 Z"
3259 className="fill-muted-foreground/60"
3260 />
3261 <path
3262 d="M75,45 C95,45 95,35 110,35 L110,55 C95,55 95,55 75,55 Z"
3263 className="fill-muted-foreground/40"
3264 />
3265 <path
3266 d="M75,60 C95,60 95,60 110,60 L110,70 C95,70 95,70 75,70 Z"
3267 className="fill-muted/60"
3268 />
3269 </svg>
3270 </div>
3271 );
3272 }
3273
3274 export function ChordChartPreview() {
3275 return (
3276 <div className="grid h-full w-full place-items-center p-3">
3277 <svg viewBox="0 0 120 80" className="h-full w-full">
3278 <circle
3279 cx="60"
3280 cy="40"
3281 r="30"
3282 fill="none"
3283 className="stroke-muted"
3284 strokeWidth="6"
3285 />
3286 <path
3287 d="M35,20 Q60,50 85,20"
3288 fill="none"
3289 className="stroke-muted-foreground/60"
3290 strokeWidth="2"
3291 />
3292 <path
3293 d="M30,50 Q55,30 90,50"
3294 fill="none"
3295 className="stroke-muted-foreground/40"
3296 strokeWidth="2"
3297 />
3298 <path
3299 d="M45,65 Q60,35 75,65"
3300 fill="none"
3301 className="stroke-muted/60"
3302 strokeWidth="2"
3303 />
3304 <circle cx="35" cy="20" r="4" className="fill-muted-foreground" />
3305 <circle cx="85" cy="20" r="4" className="fill-muted-foreground" />
3306 <circle cx="30" cy="50" r="4" className="fill-muted-foreground/60" />
3307 <circle cx="90" cy="50" r="4" className="fill-muted-foreground/60" />
3308 <circle cx="45" cy="65" r="4" className="fill-muted" />
3309 <circle cx="75" cy="65" r="4" className="fill-muted" />
3310 </svg>
3311 </div>
3312 );
3313 }
3314
3315 export function FunnelChartPreview() {
3316 return (
3317 <div className="grid h-full w-full place-items-center p-3">
3318 <svg viewBox="0 0 120 80" className="h-full w-full">
3319 <path
3320 d="M15,10 L105,10 L90,25 L30,25 Z"
3321 className="fill-muted-foreground"
3322 />
3323 <path
3324 d="M30,28 L90,28 L80,43 L40,43 Z"
3325 className="fill-muted-foreground/60"
3326 />
3327 <path d="M40,46 L80,46 L70,61 L50,61 Z" className="fill-muted" />
3328 <path
3329 d="M50,64 L70,64 L65,75 L55,75 Z"
3330 className="fill-muted-foreground/50"
3331 />
3332 </svg>
3333 </div>
3334 );
3335 }
3336
3337 export function ConeFunnelChartPreview() {
3338 return (
3339 <div className="grid h-full w-full place-items-center p-3">
3340 <svg viewBox="0 0 120 80" className="h-full w-full">
3341 <ellipse
3342 cx="60"
3343 cy="12"
3344 rx="45"
3345 ry="6"
3346 className="fill-muted-foreground"
3347 />
3348 <path
3349 d="M15,12 Q20,40 60,75 Q100,40 105,12"
3350 className="fill-muted-foreground/30"
3351 />
3352 <ellipse
3353 cx="60"
3354 cy="30"
3355 rx="35"
3356 ry="5"
3357 className="fill-muted-foreground/50"
3358 />
3359 <ellipse cx="60" cy="50" rx="22" ry="4" className="fill-muted/50" />
3360 </svg>
3361 </div>
3362 );
3363 }
3364
3365 export function PyramidChartPreview2() {
3366 return (
3367 <div className="grid h-full w-full place-items-center p-3">
3368 <svg viewBox="0 0 120 80" className="h-full w-full">
3369 <path
3370 d="M60,5 L100,70 L20,70 Z"
3371 fill="none"
3372 className="stroke-muted"
3373 strokeWidth="1"
3374 />
3375 <path d="M60,5 L70,25 L50,25 Z" className="fill-muted-foreground" />
3376 <path
3377 d="M50,25 L70,25 L80,45 L40,45 Z"
3378 className="fill-muted-foreground/60"
3379 />
3380 <path d="M40,45 L80,45 L100,70 L20,70 Z" className="fill-muted" />
3381 </svg>
3382 </div>
3383 );
3384 }
3385
3386 export function RadialGaugeChartPreview() {
3387 return (
3388 <div className="grid h-full w-full place-items-center p-3">
3389 <svg viewBox="0 0 120 80" className="h-full w-full">
3390 <path
3391 d="M20,60 A40,40 0 0,1 100,60"
3392 fill="none"
3393 className="stroke-muted"
3394 strokeWidth="8"
3395 strokeLinecap="round"
3396 />
3397 <path
3398 d="M20,60 A40,40 0 0,1 75,22"
3399 fill="none"
3400 className="stroke-muted-foreground"
3401 strokeWidth="8"
3402 strokeLinecap="round"
3403 />
3404 <circle cx="60" cy="60" r="4" className="fill-muted-foreground" />
3405 <line
3406 x1="60"
3407 y1="60"
3408 x2="70"
3409 y2="30"
3410 className="stroke-muted-foreground"
3411 strokeWidth="2"
3412 />
3413 </svg>
3414 </div>
3415 );
3416 }
3417
3418 export function LinearGaugeChartPreview() {
3419 return (
3420 <div className="grid h-full w-full place-items-center p-3">
3421 <svg viewBox="0 0 120 80" className="h-full w-full">
3422 <rect
3423 x="10"
3424 y="35"
3425 width="100"
3426 height="10"
3427 rx="5"
3428 className="fill-muted"
3429 />
3430 <rect
3431 x="10"
3432 y="35"
3433 width="65"
3434 height="10"
3435 rx="5"
3436 className="fill-muted-foreground"
3437 />
3438 <text x="10" y="60" fontSize="8" className="fill-muted-foreground">
3439 0
3440 </text>
3441 <text x="55" y="60" fontSize="8" className="fill-muted-foreground">
3442 50
3443 </text>
3444 <text x="100" y="60" fontSize="8" className="fill-muted-foreground">
3445 100
3446 </text>
3447 </svg>
3448 </div>
3449 );
3450 }
3451
3452 export function CombinationChartPreview() {
3453 return (
3454 <div className="grid h-full w-full place-items-center p-3">
3455 <svg viewBox="0 0 120 80" className="h-full w-full">
3456 <rect
3457 x="15"
3458 y="40"
3459 width="12"
3460 height="25"
3461 className="fill-muted-foreground"
3462 />
3463 <rect
3464 x="35"
3465 y="30"
3466 width="12"
3467 height="35"
3468 className="fill-muted-foreground"
3469 />
3470 <rect
3471 x="55"
3472 y="45"
3473 width="12"
3474 height="20"
3475 className="fill-muted-foreground"
3476 />
3477 <rect
3478 x="75"
3479 y="35"
3480 width="12"
3481 height="30"
3482 className="fill-muted-foreground"
3483 />
3484 <rect
3485 x="95"
3486 y="50"
3487 width="12"
3488 height="15"
3489 className="fill-muted-foreground"
3490 />
3491 <polyline
3492 points="21,35 41,25 61,40 81,30 101,45"
3493 fill="none"
3494 className="stroke-muted-foreground/60"
3495 strokeWidth="2"
3496 />
3497 <circle cx="21" cy="35" r="3" className="fill-muted-foreground/60" />
3498 <circle cx="41" cy="25" r="3" className="fill-muted-foreground/60" />
3499 <circle cx="61" cy="40" r="3" className="fill-muted-foreground/60" />
3500 <circle cx="81" cy="30" r="3" className="fill-muted-foreground/60" />
3501 <circle cx="101" cy="45" r="3" className="fill-muted-foreground/60" />
3502 </svg>
3503 </div>
3504 );
3505 }
3506
3507 export function PyramidPreview() {
3508 return (
3509 <div className="grid h-full w-full place-items-center p-3">
3510 <svg viewBox="0 0 100 80" className="h-full w-full">
3511 {/* Pyramid shape with 4 layers */}
3512 {/* Top triangle */}
3513 <polygon
3514 points="50,5 42,22 58,22"
3515 className="fill-muted-foreground/80"
3516 />
3517 {/* Second layer trapezoid */}
3518 <polygon
3519 points="42,24 58,24 66,41 34,41"
3520 className="fill-muted-foreground/60"
3521 />
3522 {/* Third layer trapezoid */}
3523 <polygon
3524 points="34,43 66,43 74,60 26,60"
3525 className="fill-muted-foreground/40"
3526 />
3527 {/* Bottom layer trapezoid */}
3528 <polygon
3529 points="26,62 74,62 82,79 18,79"
3530 className="fill-muted-foreground/30"
3531 />
3532 {/* Layer text placeholders */}
3533 <rect
3534 x="62"
3535 y="10"
3536 width="25"
3537 height="3"
3538 rx="1"
3539 className="fill-muted"
3540 />
3541 <rect
3542 x="70"
3543 y="30"
3544 width="20"
3545 height="3"
3546 rx="1"
3547 className="fill-muted"
3548 />
3549 <rect
3550 x="78"
3551 y="49"
3552 width="15"
3553 height="3"
3554 rx="1"
3555 className="fill-muted"
3556 />
3557 <rect
3558 x="86"
3559 y="68"
3560 width="10"
3561 height="3"
3562 rx="1"
3563 className="fill-muted"
3564 />
3565 </svg>
3566 </div>
3567 );
3568 }
3569
3570 export function VerticalFunnelPreview() {
3571 return (
3572 <div className="grid h-full w-full place-items-center p-3">
3573 <svg viewBox="0 0 100 80" className="h-full w-full">
3574 {/* Funnel shape (inverted pyramid) with 4 layers */}
3575 {/* Top layer (widest) */}
3576 <polygon
3577 points="18,5 82,5 74,22 26,22"
3578 className="fill-muted-foreground/80"
3579 />
3580 {/* Second layer */}
3581 <polygon
3582 points="26,24 74,24 66,41 34,41"
3583 className="fill-muted-foreground/60"
3584 />
3585 {/* Third layer */}
3586 <polygon
3587 points="34,43 66,43 58,60 42,60"
3588 className="fill-muted-foreground/40"
3589 />
3590 {/* Bottom triangle (narrowest) */}
3591 <polygon
3592 points="42,62 58,62 50,79"
3593 className="fill-muted-foreground/30"
3594 />
3595 {/* Layer text placeholders */}
3596 <rect
3597 x="86"
3598 y="10"
3599 width="10"
3600 height="3"
3601 rx="1"
3602 className="fill-muted"
3603 />
3604 <rect
3605 x="78"
3606 y="30"
3607 width="15"
3608 height="3"
3609 rx="1"
3610 className="fill-muted"
3611 />
3612 <rect
3613 x="70"
3614 y="49"
3615 width="20"
3616 height="3"
3617 rx="1"
3618 className="fill-muted"
3619 />
3620 <rect
3621 x="62"
3622 y="68"
3623 width="25"
3624 height="3"
3625 rx="1"
3626 className="fill-muted"
3627 />
3628 </svg>
3629 </div>
3630 );
3631 }
3632
3633 // Quote Previews
3634 export function LargeQuotePreview() {
3635 return (
3636 <div className="flex h-full w-full items-center justify-center p-3">
3637 <div className="flex h-10 max-w-full items-center gap-2">
3638 {/* Opening quote mark */}
3639 <div className="font-serif text-2xl leading-none text-muted-foreground/30">
3640 "
3641 </div>
3642 <div className="flex h-5 w-20 flex-1 flex-col items-center space-y-1">
3643 <div className="h-1 w-full rounded bg-muted-foreground/20" />
3644 <div className="h-1 w-5/6 rounded bg-muted-foreground/20" />
3645 </div>
3646 {/* Closing quote mark */}
3647 <div className="font-serif text-2xl leading-none text-muted-foreground/30">
3648 "
3649 </div>
3650 </div>
3651 </div>
3652 );
3653 }
3654
3655 export function SideQuoteWithIconPreview() {
3656 return (
3657 <div className="flex h-full w-full items-center justify-center p-3">
3658 <div className="w-full rounded-r border-l-4 border-muted-foreground/40 bg-muted/30 py-2 pl-3">
3659 {/* Quote icon */}
3660 <div className="mb-1 font-serif text-xs text-muted-foreground/50">
3661 "
3662 </div>
3663 <div className="space-y-1">
3664 <div className="h-1 w-full rounded bg-muted-foreground/20 italic" />
3665 <div className="h-1 w-5/6 rounded bg-muted-foreground/20" />
3666 <div className="h-1 w-4/5 rounded bg-muted-foreground/20" />
3667 </div>
3668 <div className="mt-2 h-0.5 w-1/4 rounded bg-muted" />
3669 </div>
3670 </div>
3671 );
3672 }
3673
3674 export function SimpleSideQuotePreview() {
3675 return (
3676 <div className="flex h-full w-full items-center justify-center p-3">
3677 <div className="w-full border-l-4 border-muted-foreground/40 py-1 pl-3">
3678 <div className="space-y-1">
3679 <div className="h-1 w-full rounded bg-muted-foreground/20" />
3680 <div className="h-1 w-5/6 rounded bg-muted-foreground/20" />
3681 </div>
3682 <div className="mt-2 h-0.5 w-1/4 rounded bg-muted" />
3683 </div>
3684 </div>
3685 );
3686 }
3687
3688 export function SlopeDiagramPreview() {
3689 return (
3690 <div className="grid h-full w-full grid-cols-4 items-end gap-[3%] overflow-hidden px-[8%] pt-[5%] pb-[8%]">
3691 {[0, 1, 2, 3].map((item) => (
3692 <div
3693 key={item}
3694 className="flex w-full flex-col items-center rounded-t-full bg-primary/70 px-[12%] pt-[14%]"
3695 style={{ height: `${62 + item * 10}%` }}
3696 >
3697 <div className="mb-[18%] aspect-square w-[58%] rounded-full bg-background" />
3698 <div className="h-[4%] w-[70%] rounded bg-background/60" />
3699 </div>
3700 ))}
3701 </div>
3702 );
3703 }
3704
3705 export function ConnectedCirclesDiagramPreview() {
3706 return (
3707 <div className="grid h-full w-full grid-cols-2 place-items-center gap-0.5 overflow-hidden">
3708 {[0, 1, 2, 3].map((item) => (
3709 <div
3710 key={item}
3711 className={`grid size-12 place-items-center rounded-full bg-primary/70 ${
3712 item === 0
3713 ? "self-end justify-self-end"
3714 : item === 1
3715 ? "self-end justify-self-start"
3716 : item === 2
3717 ? "self-start justify-self-end"
3718 : "self-start justify-self-start"
3719 }`}
3720 >
3721 <div className="h-1 w-7 rounded bg-background/70" />
3722 </div>
3723 ))}
3724 </div>
3725 );
3726 }
3727
3728 export function CircularGridDiagramPreview() {
3729 return (
3730 <div className="relative h-full w-full p-4">
3731 <div className="absolute top-1/2 left-1/2 grid size-12 -translate-x-1/2 -translate-y-1/2 place-items-center rounded-full bg-primary/60">
3732 <div className="h-1 w-7 rounded bg-background/70" />
3733 </div>
3734 {[0, 1, 2, 3, 4, 5].map((item) => {
3735 const angle = (item / 6) * Math.PI * 2 - Math.PI / 2;
3736 return (
3737 <div
3738 key={item}
3739 className="absolute h-4 w-12 rounded bg-muted"
3740 style={{
3741 left: `calc(50% + ${Math.cos(angle) * 58}px)`,
3742 top: `calc(50% + ${Math.sin(angle) * 42}px)`,
3743 transform: "translate(-50%, -50%)",
3744 }}
3745 />
3746 );
3747 })}
3748 </div>
3749 );
3750 }
3751
3752 export function SnakeDiagramPreview() {
3753 return (
3754 <div className="relative h-full w-full p-4">
3755 <svg className="h-full w-full" viewBox="0 0 160 80" aria-hidden="true">
3756 <path
3757 d="M 10 40 Q 30 8 50 40 Q 70 72 90 40 Q 110 8 130 40 L 150 40"
3758 fill="none"
3759 stroke="currentColor"
3760 strokeLinecap="round"
3761 strokeWidth="3"
3762 className="text-primary"
3763 />
3764 <path
3765 d="M 143 33 L 152 40 L 143 47"
3766 fill="none"
3767 stroke="currentColor"
3768 strokeLinecap="round"
3769 strokeLinejoin="round"
3770 strokeWidth="3"
3771 className="text-primary"
3772 />
3773 </svg>
3774 <div className="absolute top-6 left-8 h-1 w-9 rounded bg-muted-foreground/30" />
3775 <div className="absolute bottom-7 left-17 h-1 w-9 rounded bg-muted-foreground/30" />
3776 <div className="absolute top-6 right-10 h-1 w-9 rounded bg-muted-foreground/30" />
3777 </div>
3778 );
3779 }
3780
3780 lines Plain Text