nexoreui 0.1.6 → 1.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.mts +142 -16
- package/dist/index.d.ts +142 -16
- package/dist/index.js +879 -221
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +1562 -904
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -57,6 +57,7 @@ __export(index_exports, {
|
|
|
57
57
|
AudioWaveform: () => AudioWaveform,
|
|
58
58
|
AuroraBorderCard: () => AuroraBorderCard,
|
|
59
59
|
AuroraBorderFX: () => AuroraBorderFX,
|
|
60
|
+
AuroraSearchPill: () => AuroraSearchPill,
|
|
60
61
|
AuthenticationLayout: () => AuthenticationLayout,
|
|
61
62
|
Avatar: () => Avatar,
|
|
62
63
|
AvatarFallback: () => AvatarFallback,
|
|
@@ -319,6 +320,7 @@ __export(index_exports, {
|
|
|
319
320
|
RangeSliderInput: () => RangeSliderInput,
|
|
320
321
|
RateLimitAlert: () => RateLimitAlert,
|
|
321
322
|
Rating: () => Rating,
|
|
323
|
+
RatingBreakdown: () => RatingBreakdown,
|
|
322
324
|
RatingStars: () => RatingStars,
|
|
323
325
|
ReactionAdd: () => ReactionAdd,
|
|
324
326
|
ReactionBar: () => ReactionBar,
|
|
@@ -330,6 +332,7 @@ __export(index_exports, {
|
|
|
330
332
|
RetroGrid: () => RetroGrid,
|
|
331
333
|
RevealClip: () => RevealClip,
|
|
332
334
|
RevenueChartWidget: () => RevenueChartWidget,
|
|
335
|
+
ReviewCard: () => ReviewCard,
|
|
333
336
|
ReviewStars: () => ReviewStars,
|
|
334
337
|
RichTooltip: () => RichTooltip,
|
|
335
338
|
RingLoader: () => RingLoader,
|
|
@@ -1955,7 +1958,7 @@ var Switch = React10.forwardRef(({ className, variant = "default", ...props }, r
|
|
|
1955
1958
|
SwitchPrimitive.Root,
|
|
1956
1959
|
{
|
|
1957
1960
|
className: cn(
|
|
1958
|
-
"peer inline-flex h-6 w-11 shrink-0 cursor-pointer items-center rounded-full border
|
|
1961
|
+
"peer inline-flex h-6 w-11 shrink-0 cursor-pointer items-center rounded-full border transition-all focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background disabled:cursor-not-allowed disabled:opacity-50 data-[state=checked]:bg-primary data-[state=checked]:border-primary data-[state=unchecked]:bg-zinc-200 dark:data-[state=unchecked]:bg-zinc-800 data-[state=unchecked]:border-zinc-300 dark:data-[state=unchecked]:border-zinc-700 shadow-sm",
|
|
1959
1962
|
variant === "neon" && "data-[state=checked]:shadow-[0_0_var(--glow-radius)_rgba(var(--glow-color),var(--glow-strength))] data-[state=checked]:border-primary/50",
|
|
1960
1963
|
className
|
|
1961
1964
|
),
|
|
@@ -1965,7 +1968,7 @@ var Switch = React10.forwardRef(({ className, variant = "default", ...props }, r
|
|
|
1965
1968
|
SwitchPrimitive.Thumb,
|
|
1966
1969
|
{
|
|
1967
1970
|
className: cn(
|
|
1968
|
-
"pointer-events-none block h-5 w-5 rounded-full bg-
|
|
1971
|
+
"pointer-events-none block h-5 w-5 rounded-full bg-white shadow-md ring-0 transition-all duration-300 ease-in-out data-[state=checked]:translate-x-5 data-[state=unchecked]:translate-x-0 data-[state=checked]:scale-95 border border-black/5 dark:border-white/10"
|
|
1969
1972
|
)
|
|
1970
1973
|
}
|
|
1971
1974
|
)
|
|
@@ -2366,7 +2369,7 @@ var Progress = React13.forwardRef(
|
|
|
2366
2369
|
warning: "bg-gradient-to-r from-amber-500 to-orange-500",
|
|
2367
2370
|
error: "bg-gradient-to-r from-red-500 to-rose-500"
|
|
2368
2371
|
};
|
|
2369
|
-
const
|
|
2372
|
+
const sizeClasses2 = {
|
|
2370
2373
|
default: "h-3.5",
|
|
2371
2374
|
sm: "h-2",
|
|
2372
2375
|
lg: "h-5"
|
|
@@ -2387,7 +2390,7 @@ var Progress = React13.forwardRef(
|
|
|
2387
2390
|
max,
|
|
2388
2391
|
className: cn(
|
|
2389
2392
|
"relative w-full overflow-hidden rounded-full bg-muted border border-border/40 shadow-inner",
|
|
2390
|
-
|
|
2393
|
+
sizeClasses2[size],
|
|
2391
2394
|
className
|
|
2392
2395
|
),
|
|
2393
2396
|
...props,
|
|
@@ -2462,8 +2465,19 @@ var CircularProgressCard = ({
|
|
|
2462
2465
|
var React14 = __toESM(require("react"));
|
|
2463
2466
|
var SliderPrimitive = __toESM(require("@radix-ui/react-slider"));
|
|
2464
2467
|
var import_jsx_runtime17 = require("react/jsx-runtime");
|
|
2465
|
-
var Slider = React14.forwardRef(({ min = 0, max = 100, step = 1, value = 0, onChange, showValue = false, variant = "default", className, ...props }, ref) => {
|
|
2468
|
+
var Slider = React14.forwardRef(({ min = 0, max = 100, step = 1, value, defaultValue = 0, onChange, showValue = false, variant = "default", className, ...props }, ref) => {
|
|
2469
|
+
const isControlled = value !== void 0;
|
|
2470
|
+
const [internalValue, setInternalValue] = React14.useState(defaultValue);
|
|
2471
|
+
const currentValue = isControlled ? value : internalValue;
|
|
2472
|
+
React14.useEffect(() => {
|
|
2473
|
+
if (!isControlled && defaultValue !== void 0) {
|
|
2474
|
+
setInternalValue(defaultValue);
|
|
2475
|
+
}
|
|
2476
|
+
}, [defaultValue, isControlled]);
|
|
2466
2477
|
const handleValueChange = (val) => {
|
|
2478
|
+
if (!isControlled) {
|
|
2479
|
+
setInternalValue(val[0]);
|
|
2480
|
+
}
|
|
2467
2481
|
onChange?.(val[0]);
|
|
2468
2482
|
};
|
|
2469
2483
|
const variantClasses = {
|
|
@@ -2482,7 +2496,7 @@ var Slider = React14.forwardRef(({ min = 0, max = 100, step = 1, value = 0, onCh
|
|
|
2482
2496
|
return /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)("div", { className: "w-full space-y-2", children: [
|
|
2483
2497
|
showValue && /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)("div", { className: "flex justify-between text-sm font-medium", children: [
|
|
2484
2498
|
/* @__PURE__ */ (0, import_jsx_runtime17.jsx)("span", { children: "Value" }),
|
|
2485
|
-
/* @__PURE__ */ (0, import_jsx_runtime17.jsx)("span", { children:
|
|
2499
|
+
/* @__PURE__ */ (0, import_jsx_runtime17.jsx)("span", { children: currentValue })
|
|
2486
2500
|
] }),
|
|
2487
2501
|
/* @__PURE__ */ (0, import_jsx_runtime17.jsxs)(
|
|
2488
2502
|
SliderPrimitive.Root,
|
|
@@ -2491,7 +2505,7 @@ var Slider = React14.forwardRef(({ min = 0, max = 100, step = 1, value = 0, onCh
|
|
|
2491
2505
|
min,
|
|
2492
2506
|
max,
|
|
2493
2507
|
step,
|
|
2494
|
-
value: [
|
|
2508
|
+
value: [currentValue],
|
|
2495
2509
|
onValueChange: handleValueChange,
|
|
2496
2510
|
className: cn(
|
|
2497
2511
|
"relative flex w-full touch-none select-none items-center",
|
|
@@ -3460,102 +3474,310 @@ var React20 = __toESM(require("react"));
|
|
|
3460
3474
|
var import_framer_motion14 = require("framer-motion");
|
|
3461
3475
|
var import_lucide_react9 = require("lucide-react");
|
|
3462
3476
|
var import_jsx_runtime25 = require("react/jsx-runtime");
|
|
3477
|
+
var sizeClasses = {
|
|
3478
|
+
xs: "h-3.5 w-3.5",
|
|
3479
|
+
sm: "h-4 w-4",
|
|
3480
|
+
md: "h-6 w-6",
|
|
3481
|
+
lg: "h-8 w-8",
|
|
3482
|
+
xl: "h-10 w-10"
|
|
3483
|
+
};
|
|
3484
|
+
var variantStyles = {
|
|
3485
|
+
amber: {
|
|
3486
|
+
active: "fill-amber-400 text-amber-400",
|
|
3487
|
+
glow: "drop-shadow-[0_0_8px_rgba(251,191,36,0.35)]"
|
|
3488
|
+
},
|
|
3489
|
+
primary: {
|
|
3490
|
+
active: "fill-primary text-primary",
|
|
3491
|
+
glow: "drop-shadow-[0_0_8px_rgba(var(--primary-rgb),0.35)]"
|
|
3492
|
+
},
|
|
3493
|
+
emerald: {
|
|
3494
|
+
active: "fill-emerald-400 text-emerald-400",
|
|
3495
|
+
glow: "drop-shadow-[0_0_8px_rgba(52,211,153,0.35)]"
|
|
3496
|
+
},
|
|
3497
|
+
rose: {
|
|
3498
|
+
active: "fill-rose-500 text-rose-500",
|
|
3499
|
+
glow: "drop-shadow-[0_0_8px_rgba(244,63,94,0.35)]"
|
|
3500
|
+
},
|
|
3501
|
+
cyan: {
|
|
3502
|
+
active: "fill-cyan-400 text-cyan-400",
|
|
3503
|
+
glow: "drop-shadow-[0_0_8px_rgba(34,211,238,0.35)]"
|
|
3504
|
+
}
|
|
3505
|
+
};
|
|
3506
|
+
var getIconComponent = (icon) => {
|
|
3507
|
+
switch (icon) {
|
|
3508
|
+
case "heart":
|
|
3509
|
+
return import_lucide_react9.Heart;
|
|
3510
|
+
case "thumb":
|
|
3511
|
+
return import_lucide_react9.ThumbsUp;
|
|
3512
|
+
case "flame":
|
|
3513
|
+
return import_lucide_react9.Flame;
|
|
3514
|
+
case "trophy":
|
|
3515
|
+
return import_lucide_react9.Trophy;
|
|
3516
|
+
case "smile":
|
|
3517
|
+
return import_lucide_react9.Smile;
|
|
3518
|
+
case "star":
|
|
3519
|
+
default:
|
|
3520
|
+
return import_lucide_react9.Star;
|
|
3521
|
+
}
|
|
3522
|
+
};
|
|
3463
3523
|
var Rating = React20.forwardRef(
|
|
3464
3524
|
({
|
|
3465
3525
|
value,
|
|
3526
|
+
defaultValue = 0,
|
|
3466
3527
|
max = 5,
|
|
3467
3528
|
onChange,
|
|
3468
3529
|
readonly = false,
|
|
3469
3530
|
size = "md",
|
|
3470
3531
|
icon = "star",
|
|
3532
|
+
variant = "amber",
|
|
3533
|
+
allowHalf = false,
|
|
3534
|
+
showScore = false,
|
|
3535
|
+
tooltips,
|
|
3471
3536
|
className,
|
|
3472
3537
|
...props
|
|
3473
3538
|
}, ref) => {
|
|
3539
|
+
const isControlled = value !== void 0;
|
|
3540
|
+
const [internalValue, setInternalValue] = React20.useState(defaultValue);
|
|
3474
3541
|
const [hoverValue, setHoverValue] = React20.useState(null);
|
|
3475
|
-
const
|
|
3476
|
-
const
|
|
3477
|
-
|
|
3478
|
-
|
|
3479
|
-
|
|
3542
|
+
const currentValue = isControlled ? value : internalValue;
|
|
3543
|
+
const activeValue = hoverValue !== null ? hoverValue : currentValue;
|
|
3544
|
+
React20.useEffect(() => {
|
|
3545
|
+
if (!isControlled && defaultValue !== void 0) {
|
|
3546
|
+
setInternalValue(defaultValue);
|
|
3547
|
+
}
|
|
3548
|
+
}, [defaultValue, isControlled]);
|
|
3549
|
+
const handleSelect = (val) => {
|
|
3550
|
+
if (readonly) return;
|
|
3551
|
+
if (!isControlled) {
|
|
3552
|
+
setInternalValue(val);
|
|
3553
|
+
}
|
|
3554
|
+
onChange?.(val);
|
|
3480
3555
|
};
|
|
3481
|
-
const
|
|
3482
|
-
|
|
3483
|
-
|
|
3484
|
-
|
|
3485
|
-
|
|
3486
|
-
return import_lucide_react9.ThumbsUp;
|
|
3487
|
-
case "star":
|
|
3488
|
-
default:
|
|
3489
|
-
return import_lucide_react9.Star;
|
|
3556
|
+
const handleMouseMove = (e, index) => {
|
|
3557
|
+
if (readonly) return;
|
|
3558
|
+
if (!allowHalf) {
|
|
3559
|
+
setHoverValue(index + 1);
|
|
3560
|
+
return;
|
|
3490
3561
|
}
|
|
3562
|
+
const rect = e.currentTarget.getBoundingClientRect();
|
|
3563
|
+
const isLeftHalf = e.clientX - rect.left < rect.width / 2;
|
|
3564
|
+
const computed = isLeftHalf ? index + 0.5 : index + 1;
|
|
3565
|
+
setHoverValue(computed);
|
|
3491
3566
|
};
|
|
3492
|
-
const
|
|
3493
|
-
|
|
3494
|
-
|
|
3567
|
+
const handleKeyDown = (e) => {
|
|
3568
|
+
if (readonly) return;
|
|
3569
|
+
const step = allowHalf ? 0.5 : 1;
|
|
3495
3570
|
if (e.key === "ArrowRight" || e.key === "ArrowUp") {
|
|
3496
3571
|
e.preventDefault();
|
|
3497
|
-
|
|
3572
|
+
handleSelect(Math.min(max, currentValue + step));
|
|
3498
3573
|
} else if (e.key === "ArrowLeft" || e.key === "ArrowDown") {
|
|
3499
3574
|
e.preventDefault();
|
|
3500
|
-
|
|
3501
|
-
} else if (e.key === "Enter" || e.key === " ") {
|
|
3502
|
-
e.preventDefault();
|
|
3503
|
-
onChange(idx);
|
|
3575
|
+
handleSelect(Math.max(allowHalf ? 0.5 : 1, currentValue - step));
|
|
3504
3576
|
}
|
|
3505
3577
|
};
|
|
3506
|
-
|
|
3578
|
+
const RatingIcon = getIconComponent(icon);
|
|
3579
|
+
const styling = variantStyles[variant] || variantStyles.amber;
|
|
3580
|
+
const currentTooltip = tooltips && activeValue > 0 ? tooltips[Math.min(tooltips.length - 1, Math.ceil(activeValue) - 1)] : null;
|
|
3581
|
+
return /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)(
|
|
3507
3582
|
"div",
|
|
3508
3583
|
{
|
|
3509
3584
|
ref,
|
|
3510
3585
|
role: "slider",
|
|
3511
|
-
"aria-valuenow":
|
|
3512
|
-
"aria-valuemin": 1,
|
|
3586
|
+
"aria-valuenow": currentValue,
|
|
3587
|
+
"aria-valuemin": allowHalf ? 0.5 : 1,
|
|
3513
3588
|
"aria-valuemax": max,
|
|
3589
|
+
tabIndex: readonly ? -1 : 0,
|
|
3590
|
+
onKeyDown: handleKeyDown,
|
|
3514
3591
|
className: cn(
|
|
3515
|
-
"flex items-center gap-
|
|
3592
|
+
"inline-flex items-center gap-2 select-none outline-none",
|
|
3516
3593
|
readonly ? "cursor-default" : "cursor-pointer",
|
|
3517
3594
|
className
|
|
3518
3595
|
),
|
|
3519
3596
|
...props,
|
|
3520
|
-
children:
|
|
3521
|
-
|
|
3522
|
-
|
|
3523
|
-
|
|
3524
|
-
|
|
3525
|
-
|
|
3526
|
-
|
|
3527
|
-
|
|
3528
|
-
|
|
3529
|
-
|
|
3530
|
-
|
|
3531
|
-
|
|
3532
|
-
|
|
3533
|
-
|
|
3534
|
-
|
|
3535
|
-
|
|
3536
|
-
|
|
3537
|
-
|
|
3538
|
-
|
|
3539
|
-
|
|
3540
|
-
|
|
3541
|
-
|
|
3542
|
-
|
|
3543
|
-
|
|
3544
|
-
|
|
3545
|
-
|
|
3546
|
-
|
|
3597
|
+
children: [
|
|
3598
|
+
/* @__PURE__ */ (0, import_jsx_runtime25.jsx)("div", { className: "flex items-center gap-1.5", onMouseLeave: () => !readonly && setHoverValue(null), children: Array.from({ length: max }).map((_, i) => {
|
|
3599
|
+
const indexValue = i + 1;
|
|
3600
|
+
const isFull = indexValue <= activeValue;
|
|
3601
|
+
const isHalf = allowHalf && activeValue === i + 0.5;
|
|
3602
|
+
return /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)(
|
|
3603
|
+
import_framer_motion14.motion.button,
|
|
3604
|
+
{
|
|
3605
|
+
type: "button",
|
|
3606
|
+
tabIndex: -1,
|
|
3607
|
+
disabled: readonly,
|
|
3608
|
+
onClick: (e) => {
|
|
3609
|
+
if (allowHalf) {
|
|
3610
|
+
const rect = e.currentTarget.getBoundingClientRect();
|
|
3611
|
+
const isLeftHalf = e.clientX - rect.left < rect.width / 2;
|
|
3612
|
+
handleSelect(isLeftHalf ? i + 0.5 : indexValue);
|
|
3613
|
+
} else {
|
|
3614
|
+
handleSelect(indexValue);
|
|
3615
|
+
}
|
|
3616
|
+
},
|
|
3617
|
+
onMouseMove: (e) => handleMouseMove(e, i),
|
|
3618
|
+
className: cn(
|
|
3619
|
+
"relative p-0.5 outline-none rounded-md transition-transform focus-visible:ring-2 focus-visible:ring-primary/40",
|
|
3620
|
+
readonly ? "pointer-events-none" : "cursor-pointer"
|
|
3621
|
+
),
|
|
3622
|
+
whileHover: readonly ? {} : { scale: 1.15 },
|
|
3623
|
+
whileTap: readonly ? {} : { scale: 0.9 },
|
|
3624
|
+
transition: { type: "spring", stiffness: 400, damping: 15 },
|
|
3625
|
+
title: tooltips ? tooltips[i] : `${indexValue} / ${max}`,
|
|
3626
|
+
children: [
|
|
3627
|
+
/* @__PURE__ */ (0, import_jsx_runtime25.jsx)(
|
|
3628
|
+
RatingIcon,
|
|
3629
|
+
{
|
|
3630
|
+
className: cn(
|
|
3631
|
+
sizeClasses[size],
|
|
3632
|
+
"transition-all duration-200 stroke-[1.8] text-muted-foreground/30"
|
|
3633
|
+
)
|
|
3634
|
+
}
|
|
3635
|
+
),
|
|
3636
|
+
(isFull || isHalf) && /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(
|
|
3637
|
+
"div",
|
|
3638
|
+
{
|
|
3639
|
+
className: "absolute inset-0 p-0.5 overflow-hidden transition-all duration-150",
|
|
3640
|
+
style: { width: isHalf ? "50%" : "100%" },
|
|
3641
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(
|
|
3642
|
+
RatingIcon,
|
|
3643
|
+
{
|
|
3644
|
+
className: cn(
|
|
3645
|
+
sizeClasses[size],
|
|
3646
|
+
"transition-all duration-200 stroke-[1.8]",
|
|
3647
|
+
styling.active,
|
|
3648
|
+
styling.glow
|
|
3649
|
+
)
|
|
3650
|
+
}
|
|
3651
|
+
)
|
|
3652
|
+
}
|
|
3547
3653
|
)
|
|
3548
|
-
|
|
3549
|
-
|
|
3550
|
-
|
|
3551
|
-
|
|
3552
|
-
)
|
|
3553
|
-
|
|
3654
|
+
]
|
|
3655
|
+
},
|
|
3656
|
+
i
|
|
3657
|
+
);
|
|
3658
|
+
}) }),
|
|
3659
|
+
(showScore || currentTooltip) && /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)("div", { className: "flex items-center gap-2 text-xs font-semibold", children: [
|
|
3660
|
+
showScore && /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)("span", { className: "font-mono text-foreground px-1.5 py-0.5 rounded-md bg-muted/60 border border-border/50", children: [
|
|
3661
|
+
currentValue.toFixed(allowHalf ? 1 : 0),
|
|
3662
|
+
" / ",
|
|
3663
|
+
max
|
|
3664
|
+
] }),
|
|
3665
|
+
currentTooltip && /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(import_framer_motion14.AnimatePresence, { mode: "wait", children: /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(
|
|
3666
|
+
import_framer_motion14.motion.span,
|
|
3667
|
+
{
|
|
3668
|
+
initial: { opacity: 0, x: -4 },
|
|
3669
|
+
animate: { opacity: 1, x: 0 },
|
|
3670
|
+
exit: { opacity: 0, x: 4 },
|
|
3671
|
+
className: "text-muted-foreground font-medium",
|
|
3672
|
+
children: currentTooltip
|
|
3673
|
+
},
|
|
3674
|
+
currentTooltip
|
|
3675
|
+
) })
|
|
3676
|
+
] })
|
|
3677
|
+
]
|
|
3554
3678
|
}
|
|
3555
3679
|
);
|
|
3556
3680
|
}
|
|
3557
3681
|
);
|
|
3558
3682
|
Rating.displayName = "Rating";
|
|
3683
|
+
function RatingBreakdown({
|
|
3684
|
+
rating,
|
|
3685
|
+
totalReviews,
|
|
3686
|
+
distribution = { 5: 68, 4: 20, 3: 7, 2: 3, 1: 2 },
|
|
3687
|
+
className,
|
|
3688
|
+
...props
|
|
3689
|
+
}) {
|
|
3690
|
+
return /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)(
|
|
3691
|
+
"div",
|
|
3692
|
+
{
|
|
3693
|
+
className: cn(
|
|
3694
|
+
"rounded-2xl border border-border/70 bg-card p-5 max-w-sm w-full space-y-4 shadow-lg backdrop-blur-md",
|
|
3695
|
+
className
|
|
3696
|
+
),
|
|
3697
|
+
...props,
|
|
3698
|
+
children: [
|
|
3699
|
+
/* @__PURE__ */ (0, import_jsx_runtime25.jsxs)("div", { className: "flex items-center justify-between pb-3 border-b border-border/50", children: [
|
|
3700
|
+
/* @__PURE__ */ (0, import_jsx_runtime25.jsxs)("div", { children: [
|
|
3701
|
+
/* @__PURE__ */ (0, import_jsx_runtime25.jsxs)("div", { className: "flex items-baseline gap-2", children: [
|
|
3702
|
+
/* @__PURE__ */ (0, import_jsx_runtime25.jsx)("span", { className: "text-3xl font-black text-foreground", children: rating.toFixed(1) }),
|
|
3703
|
+
/* @__PURE__ */ (0, import_jsx_runtime25.jsx)("span", { className: "text-xs text-muted-foreground", children: "out of 5" })
|
|
3704
|
+
] }),
|
|
3705
|
+
/* @__PURE__ */ (0, import_jsx_runtime25.jsx)(Rating, { value: rating, readonly: true, size: "sm", variant: "amber", allowHalf: true, className: "mt-1" })
|
|
3706
|
+
] }),
|
|
3707
|
+
/* @__PURE__ */ (0, import_jsx_runtime25.jsxs)("div", { className: "text-right", children: [
|
|
3708
|
+
/* @__PURE__ */ (0, import_jsx_runtime25.jsx)("span", { className: "text-xs font-bold text-foreground block", children: totalReviews.toLocaleString() }),
|
|
3709
|
+
/* @__PURE__ */ (0, import_jsx_runtime25.jsx)("span", { className: "text-[10px] text-muted-foreground uppercase tracking-wider", children: "verified ratings" })
|
|
3710
|
+
] })
|
|
3711
|
+
] }),
|
|
3712
|
+
/* @__PURE__ */ (0, import_jsx_runtime25.jsx)("div", { className: "space-y-2", children: [5, 4, 3, 2, 1].map((stars) => {
|
|
3713
|
+
const pct = distribution[stars] || 0;
|
|
3714
|
+
return /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)("div", { className: "flex items-center gap-2.5 text-xs", children: [
|
|
3715
|
+
/* @__PURE__ */ (0, import_jsx_runtime25.jsxs)("div", { className: "w-6 flex items-center gap-0.5 font-mono font-medium text-foreground/80 shrink-0", children: [
|
|
3716
|
+
/* @__PURE__ */ (0, import_jsx_runtime25.jsx)("span", { children: stars }),
|
|
3717
|
+
/* @__PURE__ */ (0, import_jsx_runtime25.jsx)(import_lucide_react9.Star, { className: "w-2.5 h-2.5 fill-amber-400 text-amber-400" })
|
|
3718
|
+
] }),
|
|
3719
|
+
/* @__PURE__ */ (0, import_jsx_runtime25.jsx)("div", { className: "flex-1 h-2 rounded-full bg-muted/60 overflow-hidden relative", children: /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(
|
|
3720
|
+
import_framer_motion14.motion.div,
|
|
3721
|
+
{
|
|
3722
|
+
initial: { width: 0 },
|
|
3723
|
+
animate: { width: `${pct}%` },
|
|
3724
|
+
transition: { duration: 0.8, delay: (5 - stars) * 0.08 },
|
|
3725
|
+
className: "h-full rounded-full bg-amber-400"
|
|
3726
|
+
}
|
|
3727
|
+
) }),
|
|
3728
|
+
/* @__PURE__ */ (0, import_jsx_runtime25.jsxs)("span", { className: "w-8 text-right font-mono text-[11px] text-muted-foreground", children: [
|
|
3729
|
+
pct,
|
|
3730
|
+
"%"
|
|
3731
|
+
] })
|
|
3732
|
+
] }, stars);
|
|
3733
|
+
}) })
|
|
3734
|
+
]
|
|
3735
|
+
}
|
|
3736
|
+
);
|
|
3737
|
+
}
|
|
3738
|
+
function ReviewCard({
|
|
3739
|
+
author,
|
|
3740
|
+
avatarUrl,
|
|
3741
|
+
rating,
|
|
3742
|
+
date,
|
|
3743
|
+
title,
|
|
3744
|
+
content,
|
|
3745
|
+
verified = true,
|
|
3746
|
+
className,
|
|
3747
|
+
...props
|
|
3748
|
+
}) {
|
|
3749
|
+
const initials = author.split(" ").map((n) => n[0]).join("").slice(0, 2).toUpperCase();
|
|
3750
|
+
return /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)(
|
|
3751
|
+
"div",
|
|
3752
|
+
{
|
|
3753
|
+
className: cn(
|
|
3754
|
+
"rounded-2xl border border-border/70 bg-card/60 p-5 w-full max-w-md space-y-3 backdrop-blur-md shadow-md hover:border-primary/40 transition-colors",
|
|
3755
|
+
className
|
|
3756
|
+
),
|
|
3757
|
+
...props,
|
|
3758
|
+
children: [
|
|
3759
|
+
/* @__PURE__ */ (0, import_jsx_runtime25.jsxs)("div", { className: "flex items-center justify-between", children: [
|
|
3760
|
+
/* @__PURE__ */ (0, import_jsx_runtime25.jsxs)("div", { className: "flex items-center gap-3", children: [
|
|
3761
|
+
avatarUrl ? /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("img", { src: avatarUrl, alt: author, className: "w-9 h-9 rounded-full object-cover border border-border" }) : /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("div", { className: "w-9 h-9 rounded-full bg-primary/10 border border-primary/20 text-primary font-bold text-xs flex items-center justify-center", children: initials }),
|
|
3762
|
+
/* @__PURE__ */ (0, import_jsx_runtime25.jsxs)("div", { children: [
|
|
3763
|
+
/* @__PURE__ */ (0, import_jsx_runtime25.jsxs)("div", { className: "flex items-center gap-1.5", children: [
|
|
3764
|
+
/* @__PURE__ */ (0, import_jsx_runtime25.jsx)("span", { className: "text-sm font-semibold text-foreground", children: author }),
|
|
3765
|
+
verified && /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)("span", { className: "inline-flex items-center gap-0.5 text-[10px] text-emerald-400 font-medium bg-emerald-500/10 px-1.5 py-0.5 rounded-full border border-emerald-500/20", children: [
|
|
3766
|
+
/* @__PURE__ */ (0, import_jsx_runtime25.jsx)(import_lucide_react9.CheckCircle2, { className: "w-3 h-3" }),
|
|
3767
|
+
"Verified"
|
|
3768
|
+
] })
|
|
3769
|
+
] }),
|
|
3770
|
+
/* @__PURE__ */ (0, import_jsx_runtime25.jsx)("span", { className: "text-[11px] text-muted-foreground", children: date })
|
|
3771
|
+
] })
|
|
3772
|
+
] }),
|
|
3773
|
+
/* @__PURE__ */ (0, import_jsx_runtime25.jsx)(Rating, { value: rating, readonly: true, size: "sm", variant: "amber", allowHalf: true })
|
|
3774
|
+
] }),
|
|
3775
|
+
title && /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("h4", { className: "font-semibold text-sm text-foreground", children: title }),
|
|
3776
|
+
/* @__PURE__ */ (0, import_jsx_runtime25.jsx)("p", { className: "text-xs text-muted-foreground leading-relaxed", children: content })
|
|
3777
|
+
]
|
|
3778
|
+
}
|
|
3779
|
+
);
|
|
3780
|
+
}
|
|
3559
3781
|
|
|
3560
3782
|
// src/components/file-upload.tsx
|
|
3561
3783
|
var React21 = __toESM(require("react"));
|
|
@@ -3661,11 +3883,25 @@ var FileUpload = React21.forwardRef(
|
|
|
3661
3883
|
className: "hidden"
|
|
3662
3884
|
}
|
|
3663
3885
|
),
|
|
3664
|
-
variant === "button" ? /* @__PURE__ */ (0, import_jsx_runtime26.jsxs)(
|
|
3665
|
-
/* @__PURE__ */ (0, import_jsx_runtime26.
|
|
3666
|
-
|
|
3667
|
-
"
|
|
3668
|
-
|
|
3886
|
+
variant === "button" ? /* @__PURE__ */ (0, import_jsx_runtime26.jsxs)("div", { className: "flex flex-col sm:flex-row items-center justify-between gap-3 p-4 rounded-2xl border border-border/80 bg-card/60 backdrop-blur-md w-full", children: [
|
|
3887
|
+
/* @__PURE__ */ (0, import_jsx_runtime26.jsxs)("div", { className: "flex items-center gap-3", children: [
|
|
3888
|
+
/* @__PURE__ */ (0, import_jsx_runtime26.jsx)("div", { className: "w-10 h-10 rounded-xl bg-primary/10 border border-primary/20 flex items-center justify-center text-primary shrink-0", children: /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(import_lucide_react10.UploadCloud, { className: "h-5 w-5" }) }),
|
|
3889
|
+
/* @__PURE__ */ (0, import_jsx_runtime26.jsxs)("div", { className: "text-left", children: [
|
|
3890
|
+
/* @__PURE__ */ (0, import_jsx_runtime26.jsxs)("p", { className: "text-sm font-semibold text-foreground", children: [
|
|
3891
|
+
"Select File",
|
|
3892
|
+
multiple ? "s" : ""
|
|
3893
|
+
] }),
|
|
3894
|
+
/* @__PURE__ */ (0, import_jsx_runtime26.jsxs)("p", { className: "text-xs text-muted-foreground", children: [
|
|
3895
|
+
accept ? `Supports: ${accept}` : "Any file",
|
|
3896
|
+
" (Max: ",
|
|
3897
|
+
(maxSize / (1024 * 1024)).toFixed(0),
|
|
3898
|
+
"MB)"
|
|
3899
|
+
] })
|
|
3900
|
+
] })
|
|
3901
|
+
] }),
|
|
3902
|
+
/* @__PURE__ */ (0, import_jsx_runtime26.jsxs)(Button, { variant: "default", onClick: triggerFileInput, className: "flex items-center gap-2 shrink-0", children: [
|
|
3903
|
+
/* @__PURE__ */ (0, import_jsx_runtime26.jsx)(import_lucide_react10.UploadCloud, { className: "h-4 w-4" }),
|
|
3904
|
+
/* @__PURE__ */ (0, import_jsx_runtime26.jsx)("span", { children: "Browse Files" })
|
|
3669
3905
|
] })
|
|
3670
3906
|
] }) : /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(
|
|
3671
3907
|
import_framer_motion15.motion.div,
|
|
@@ -3975,7 +4211,7 @@ var CustomizableTable = ({
|
|
|
3975
4211
|
return /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)(Table, { ...props, children: [
|
|
3976
4212
|
caption && /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(TableCaption, { children: caption }),
|
|
3977
4213
|
/* @__PURE__ */ (0, import_jsx_runtime27.jsx)(TableHeader, { children: /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(TableRow, { children: headers.map((header, i) => /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(TableHead, { children: header }, i)) }) }),
|
|
3978
|
-
/* @__PURE__ */ (0, import_jsx_runtime27.jsx)(TableBody, { children: rows.map((row, rowIndex) => /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(TableRow, { index: rowIndex, children:
|
|
4214
|
+
/* @__PURE__ */ (0, import_jsx_runtime27.jsx)(TableBody, { children: rows.map((row, rowIndex) => /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(TableRow, { index: rowIndex, children: headers.map((_, colIndex) => /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(TableCell, { children: row[colIndex] !== void 0 && row[colIndex] !== null && row[colIndex] !== "" ? row[colIndex] : /* @__PURE__ */ (0, import_jsx_runtime27.jsx)("span", { className: "text-muted-foreground/40 font-mono text-xs", children: "\u2014" }) }, colIndex)) }, rowIndex)) })
|
|
3979
4215
|
] });
|
|
3980
4216
|
};
|
|
3981
4217
|
function DataTable({
|
|
@@ -4091,25 +4327,114 @@ var React23 = __toESM(require("react"));
|
|
|
4091
4327
|
var import_framer_motion17 = require("framer-motion");
|
|
4092
4328
|
var import_lucide_react11 = require("lucide-react");
|
|
4093
4329
|
var import_jsx_runtime28 = require("react/jsx-runtime");
|
|
4330
|
+
var circleSizes = {
|
|
4331
|
+
sm: "h-7 w-7 text-[11px]",
|
|
4332
|
+
md: "h-9 w-9 text-[13px]",
|
|
4333
|
+
lg: "h-11 w-11 text-[15px]"
|
|
4334
|
+
};
|
|
4335
|
+
var checkSizes = {
|
|
4336
|
+
sm: "h-3.5 w-3.5 stroke-[3]",
|
|
4337
|
+
md: "h-4 w-4 stroke-[3]",
|
|
4338
|
+
lg: "h-5 w-5 stroke-[3]"
|
|
4339
|
+
};
|
|
4094
4340
|
var Stepper = React23.forwardRef(
|
|
4095
4341
|
({
|
|
4096
4342
|
steps,
|
|
4097
4343
|
currentStep,
|
|
4098
4344
|
orientation = "horizontal",
|
|
4099
4345
|
variant = "default",
|
|
4346
|
+
size = "md",
|
|
4347
|
+
onStepClick,
|
|
4100
4348
|
className,
|
|
4101
4349
|
...props
|
|
4102
4350
|
}, ref) => {
|
|
4103
4351
|
const isVertical = orientation === "vertical";
|
|
4352
|
+
const isInteractive = Boolean(onStepClick);
|
|
4353
|
+
if (isVertical) {
|
|
4354
|
+
return /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(
|
|
4355
|
+
"div",
|
|
4356
|
+
{
|
|
4357
|
+
ref,
|
|
4358
|
+
className: cn("flex flex-col w-full select-none", className),
|
|
4359
|
+
...props,
|
|
4360
|
+
children: steps.map((step, idx) => {
|
|
4361
|
+
const isCompleted = idx < currentStep;
|
|
4362
|
+
const isActive = idx === currentStep;
|
|
4363
|
+
const isLast = idx === steps.length - 1;
|
|
4364
|
+
return /* @__PURE__ */ (0, import_jsx_runtime28.jsxs)("div", { className: "flex items-start gap-4 group", children: [
|
|
4365
|
+
/* @__PURE__ */ (0, import_jsx_runtime28.jsxs)("div", { className: "flex flex-col items-center shrink-0", children: [
|
|
4366
|
+
/* @__PURE__ */ (0, import_jsx_runtime28.jsxs)(
|
|
4367
|
+
import_framer_motion17.motion.button,
|
|
4368
|
+
{
|
|
4369
|
+
type: "button",
|
|
4370
|
+
disabled: !isInteractive,
|
|
4371
|
+
onClick: () => onStepClick?.(idx),
|
|
4372
|
+
whileHover: isInteractive ? { scale: 1.08 } : {},
|
|
4373
|
+
whileTap: isInteractive ? { scale: 0.95 } : {},
|
|
4374
|
+
className: cn(
|
|
4375
|
+
"relative flex items-center justify-center rounded-full border-2 font-semibold transition-all duration-300 z-10",
|
|
4376
|
+
variant === "arrows" ? "rounded-xl" : "rounded-full",
|
|
4377
|
+
circleSizes[size],
|
|
4378
|
+
isCompleted ? "bg-primary border-primary text-primary-foreground shadow-md shadow-primary/25" : isActive ? "border-primary text-primary bg-primary/10 shadow-lg shadow-primary/15 ring-4 ring-primary/20" : "border-border text-muted-foreground bg-muted/30",
|
|
4379
|
+
isInteractive ? "cursor-pointer" : "cursor-default"
|
|
4380
|
+
),
|
|
4381
|
+
children: [
|
|
4382
|
+
isCompleted ? /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(
|
|
4383
|
+
import_framer_motion17.motion.div,
|
|
4384
|
+
{
|
|
4385
|
+
initial: { scale: 0 },
|
|
4386
|
+
animate: { scale: 1 },
|
|
4387
|
+
transition: { type: "spring", stiffness: 350, damping: 20 },
|
|
4388
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(import_lucide_react11.Check, { className: checkSizes[size] })
|
|
4389
|
+
}
|
|
4390
|
+
) : step.icon ? step.icon : /* @__PURE__ */ (0, import_jsx_runtime28.jsx)("span", { children: idx + 1 }),
|
|
4391
|
+
isActive && /* @__PURE__ */ (0, import_jsx_runtime28.jsx)("span", { className: "absolute inset-0 rounded-full animate-ping bg-primary/25 -z-10" })
|
|
4392
|
+
]
|
|
4393
|
+
}
|
|
4394
|
+
),
|
|
4395
|
+
!isLast && /* @__PURE__ */ (0, import_jsx_runtime28.jsx)("div", { className: "w-[2px] min-h-[36px] bg-muted/40 my-1 rounded-full relative overflow-hidden flex-1", children: /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(
|
|
4396
|
+
import_framer_motion17.motion.div,
|
|
4397
|
+
{
|
|
4398
|
+
className: "absolute top-0 left-0 right-0 bg-primary",
|
|
4399
|
+
initial: { height: "0%" },
|
|
4400
|
+
animate: { height: isCompleted ? "100%" : "0%" },
|
|
4401
|
+
transition: { duration: 0.3 }
|
|
4402
|
+
}
|
|
4403
|
+
) })
|
|
4404
|
+
] }),
|
|
4405
|
+
/* @__PURE__ */ (0, import_jsx_runtime28.jsxs)(
|
|
4406
|
+
"div",
|
|
4407
|
+
{
|
|
4408
|
+
onClick: () => isInteractive && onStepClick?.(idx),
|
|
4409
|
+
className: cn(
|
|
4410
|
+
"flex flex-col text-left pt-1 pb-6 transition-colors",
|
|
4411
|
+
isInteractive ? "cursor-pointer" : ""
|
|
4412
|
+
),
|
|
4413
|
+
children: [
|
|
4414
|
+
/* @__PURE__ */ (0, import_jsx_runtime28.jsx)(
|
|
4415
|
+
"span",
|
|
4416
|
+
{
|
|
4417
|
+
className: cn(
|
|
4418
|
+
"text-sm font-semibold transition-colors",
|
|
4419
|
+
isActive ? "text-foreground" : isCompleted ? "text-primary font-medium" : "text-muted-foreground"
|
|
4420
|
+
),
|
|
4421
|
+
children: step.title
|
|
4422
|
+
}
|
|
4423
|
+
),
|
|
4424
|
+
step.description && /* @__PURE__ */ (0, import_jsx_runtime28.jsx)("span", { className: "text-xs text-muted-foreground/70 mt-0.5 max-w-xs leading-relaxed", children: step.description })
|
|
4425
|
+
]
|
|
4426
|
+
}
|
|
4427
|
+
)
|
|
4428
|
+
] }, idx);
|
|
4429
|
+
})
|
|
4430
|
+
}
|
|
4431
|
+
);
|
|
4432
|
+
}
|
|
4104
4433
|
return /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(
|
|
4105
4434
|
"div",
|
|
4106
4435
|
{
|
|
4107
4436
|
ref,
|
|
4108
|
-
className: cn(
|
|
4109
|
-
"flex w-full select-none",
|
|
4110
|
-
isVertical ? "flex-col space-y-4" : "flex-row items-center justify-between gap-4",
|
|
4111
|
-
className
|
|
4112
|
-
),
|
|
4437
|
+
className: cn("flex items-center w-full select-none justify-between", className),
|
|
4113
4438
|
...props,
|
|
4114
4439
|
children: steps.map((step, idx) => {
|
|
4115
4440
|
const isCompleted = idx < currentStep;
|
|
@@ -4119,19 +4444,26 @@ var Stepper = React23.forwardRef(
|
|
|
4119
4444
|
/* @__PURE__ */ (0, import_jsx_runtime28.jsxs)(
|
|
4120
4445
|
"div",
|
|
4121
4446
|
{
|
|
4447
|
+
onClick: () => isInteractive && onStepClick?.(idx),
|
|
4122
4448
|
className: cn(
|
|
4123
|
-
"flex items-center gap-3
|
|
4124
|
-
|
|
4449
|
+
"flex items-center gap-2 sm:gap-3 min-w-0 transition-all",
|
|
4450
|
+
isInteractive ? "cursor-pointer group" : "cursor-default"
|
|
4125
4451
|
),
|
|
4126
4452
|
children: [
|
|
4127
4453
|
/* @__PURE__ */ (0, import_jsx_runtime28.jsxs)(
|
|
4128
|
-
|
|
4454
|
+
import_framer_motion17.motion.button,
|
|
4129
4455
|
{
|
|
4456
|
+
type: "button",
|
|
4457
|
+
disabled: !isInteractive,
|
|
4458
|
+
onClick: () => onStepClick?.(idx),
|
|
4459
|
+
whileHover: isInteractive ? { scale: 1.1 } : {},
|
|
4460
|
+
whileTap: isInteractive ? { scale: 0.95 } : {},
|
|
4130
4461
|
className: cn(
|
|
4131
|
-
"relative flex items-center justify-center rounded-full
|
|
4132
|
-
variant === "arrows" ? "rounded-
|
|
4133
|
-
|
|
4134
|
-
|
|
4462
|
+
"relative shrink-0 flex items-center justify-center rounded-full border-2 font-semibold transition-all duration-300",
|
|
4463
|
+
variant === "arrows" ? "rounded-xl" : "rounded-full",
|
|
4464
|
+
circleSizes[size],
|
|
4465
|
+
isCompleted ? "bg-primary border-primary text-primary-foreground shadow-md shadow-primary/25" : isActive ? "border-primary text-primary bg-primary/10 shadow-lg shadow-primary/15 ring-4 ring-primary/20" : "border-border text-muted-foreground bg-muted/30",
|
|
4466
|
+
isInteractive ? "cursor-pointer" : "cursor-default"
|
|
4135
4467
|
),
|
|
4136
4468
|
children: [
|
|
4137
4469
|
isCompleted ? /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(
|
|
@@ -4139,67 +4471,39 @@ var Stepper = React23.forwardRef(
|
|
|
4139
4471
|
{
|
|
4140
4472
|
initial: { scale: 0 },
|
|
4141
4473
|
animate: { scale: 1 },
|
|
4142
|
-
transition: { type: "spring", stiffness:
|
|
4143
|
-
children: /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(import_lucide_react11.Check, { className:
|
|
4474
|
+
transition: { type: "spring", stiffness: 350, damping: 20 },
|
|
4475
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(import_lucide_react11.Check, { className: checkSizes[size] })
|
|
4144
4476
|
}
|
|
4145
4477
|
) : step.icon ? step.icon : /* @__PURE__ */ (0, import_jsx_runtime28.jsx)("span", { children: idx + 1 }),
|
|
4146
|
-
isActive && /* @__PURE__ */ (0, import_jsx_runtime28.jsx)("span", { className: "absolute inset-0 rounded-full animate-ping bg-primary/
|
|
4478
|
+
isActive && /* @__PURE__ */ (0, import_jsx_runtime28.jsx)("span", { className: "absolute inset-0 rounded-full animate-ping bg-primary/25 -z-10" })
|
|
4147
4479
|
]
|
|
4148
4480
|
}
|
|
4149
4481
|
),
|
|
4150
|
-
/* @__PURE__ */ (0, import_jsx_runtime28.jsxs)("div", { className: "flex flex-col text-left", children: [
|
|
4482
|
+
/* @__PURE__ */ (0, import_jsx_runtime28.jsxs)("div", { className: "flex flex-col text-left min-w-0", children: [
|
|
4151
4483
|
/* @__PURE__ */ (0, import_jsx_runtime28.jsx)(
|
|
4152
4484
|
"span",
|
|
4153
4485
|
{
|
|
4154
4486
|
className: cn(
|
|
4155
|
-
"text-sm font-semibold transition-colors
|
|
4156
|
-
isActive ? "text-foreground" : isCompleted ? "text-primary" : "text-muted-foreground"
|
|
4487
|
+
"text-xs sm:text-sm font-semibold transition-colors truncate max-w-[90px] sm:max-w-[120px]",
|
|
4488
|
+
isActive ? "text-foreground" : isCompleted ? "text-primary" : "text-muted-foreground group-hover:text-foreground/80"
|
|
4157
4489
|
),
|
|
4158
4490
|
children: step.title
|
|
4159
4491
|
}
|
|
4160
4492
|
),
|
|
4161
|
-
step.description && /* @__PURE__ */ (0, import_jsx_runtime28.jsx)("span", { className: "text-
|
|
4162
|
-
] })
|
|
4163
|
-
!isLast && !isVertical && variant !== "arrows" && /* @__PURE__ */ (0, import_jsx_runtime28.jsx)("div", { className: "flex-1 h-[2px] bg-muted/40 ml-2 rounded-full overflow-hidden relative min-w-[30px]", children: /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(
|
|
4164
|
-
import_framer_motion17.motion.div,
|
|
4165
|
-
{
|
|
4166
|
-
className: "absolute left-0 top-0 bottom-0 bg-primary",
|
|
4167
|
-
initial: { width: "0%" },
|
|
4168
|
-
animate: { width: isCompleted ? "100%" : "0%" },
|
|
4169
|
-
transition: { type: "spring", stiffness: 100, damping: 15 }
|
|
4170
|
-
}
|
|
4171
|
-
) }),
|
|
4172
|
-
!isLast && !isVertical && variant === "arrows" && /* @__PURE__ */ (0, import_jsx_runtime28.jsxs)(
|
|
4173
|
-
"svg",
|
|
4174
|
-
{
|
|
4175
|
-
xmlns: "http://www.w3.org/2000/svg",
|
|
4176
|
-
width: "16",
|
|
4177
|
-
height: "16",
|
|
4178
|
-
viewBox: "0 0 24 24",
|
|
4179
|
-
fill: "none",
|
|
4180
|
-
stroke: "currentColor",
|
|
4181
|
-
strokeWidth: "2",
|
|
4182
|
-
strokeLinecap: "round",
|
|
4183
|
-
strokeLinejoin: "round",
|
|
4184
|
-
className: "text-muted-foreground/30 mx-2 shrink-0",
|
|
4185
|
-
children: [
|
|
4186
|
-
/* @__PURE__ */ (0, import_jsx_runtime28.jsx)("path", { d: "M5 12h14" }),
|
|
4187
|
-
/* @__PURE__ */ (0, import_jsx_runtime28.jsx)("path", { d: "m12 5 7 7-7 7" })
|
|
4188
|
-
]
|
|
4189
|
-
}
|
|
4190
|
-
)
|
|
4493
|
+
step.description && /* @__PURE__ */ (0, import_jsx_runtime28.jsx)("span", { className: "hidden xl:inline text-[11px] text-muted-foreground/70 max-w-[80px] sm:max-w-[110px] truncate", children: step.description })
|
|
4494
|
+
] })
|
|
4191
4495
|
]
|
|
4192
4496
|
}
|
|
4193
4497
|
),
|
|
4194
|
-
!isLast &&
|
|
4498
|
+
!isLast && /* @__PURE__ */ (0, import_jsx_runtime28.jsx)("div", { className: "flex-1 mx-2 sm:mx-3 flex items-center min-w-[14px]", children: variant === "arrows" ? /* @__PURE__ */ (0, import_jsx_runtime28.jsx)("div", { className: "flex items-center justify-center w-full text-muted-foreground/40", children: /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(import_lucide_react11.ChevronRight, { className: cn("h-4 w-4 shrink-0 transition-colors", isCompleted && "text-primary") }) }) : /* @__PURE__ */ (0, import_jsx_runtime28.jsx)("div", { className: "h-[2px] w-full bg-muted/50 rounded-full overflow-hidden relative", children: /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(
|
|
4195
4499
|
import_framer_motion17.motion.div,
|
|
4196
4500
|
{
|
|
4197
|
-
className: "absolute
|
|
4198
|
-
initial: {
|
|
4199
|
-
animate: {
|
|
4200
|
-
transition: {
|
|
4501
|
+
className: "absolute inset-y-0 left-0 bg-primary",
|
|
4502
|
+
initial: { width: "0%" },
|
|
4503
|
+
animate: { width: isCompleted ? "100%" : "0%" },
|
|
4504
|
+
transition: { duration: 0.35, ease: "easeInOut" }
|
|
4201
4505
|
}
|
|
4202
|
-
) })
|
|
4506
|
+
) }) })
|
|
4203
4507
|
] }, idx);
|
|
4204
4508
|
})
|
|
4205
4509
|
}
|
|
@@ -5388,12 +5692,36 @@ var FileUploadForm = () => {
|
|
|
5388
5692
|
] })
|
|
5389
5693
|
] });
|
|
5390
5694
|
};
|
|
5391
|
-
var FeedbackForm = () =>
|
|
5392
|
-
|
|
5393
|
-
|
|
5394
|
-
|
|
5395
|
-
|
|
5396
|
-
|
|
5695
|
+
var FeedbackForm = () => {
|
|
5696
|
+
const [selected, setSelected] = React28.useState(null);
|
|
5697
|
+
const sentiments = [
|
|
5698
|
+
{ icon: import_lucide_react16.Frown, label: "Poor", color: "hover:text-red-500 hover:bg-red-500/10", active: "text-red-500 bg-red-500/10 border-red-500/30" },
|
|
5699
|
+
{ icon: import_lucide_react16.Meh, label: "Fair", color: "hover:text-amber-500 hover:bg-amber-500/10", active: "text-amber-500 bg-amber-500/10 border-amber-500/30" },
|
|
5700
|
+
{ icon: import_lucide_react16.Smile, label: "Good", color: "hover:text-sky-500 hover:bg-sky-500/10", active: "text-sky-500 bg-sky-500/10 border-sky-500/30" },
|
|
5701
|
+
{ icon: import_lucide_react16.Laugh, label: "Great", color: "hover:text-emerald-500 hover:bg-emerald-500/10", active: "text-emerald-500 bg-emerald-500/10 border-emerald-500/30" },
|
|
5702
|
+
{ icon: import_lucide_react16.Heart, label: "Loved", color: "hover:text-pink-500 hover:bg-pink-500/10", active: "text-pink-500 bg-pink-500/10 border-pink-500/30" }
|
|
5703
|
+
];
|
|
5704
|
+
return /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)("div", { className: "w-full max-w-sm p-6 border rounded-xl bg-card space-y-4 text-center", children: [
|
|
5705
|
+
/* @__PURE__ */ (0, import_jsx_runtime33.jsx)("h3", { className: "font-bold text-lg", children: "How was your experience?" }),
|
|
5706
|
+
/* @__PURE__ */ (0, import_jsx_runtime33.jsx)("div", { className: "flex justify-center gap-2", children: sentiments.map((s, i) => {
|
|
5707
|
+
const Icon2 = s.icon;
|
|
5708
|
+
const isSelected = selected === i;
|
|
5709
|
+
return /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(
|
|
5710
|
+
"button",
|
|
5711
|
+
{
|
|
5712
|
+
type: "button",
|
|
5713
|
+
onClick: () => setSelected(i),
|
|
5714
|
+
title: s.label,
|
|
5715
|
+
className: `p-2.5 rounded-xl border transition-all cursor-pointer ${isSelected ? s.active : "border-border/60 text-muted-foreground " + s.color}`,
|
|
5716
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(Icon2, { className: "w-5 h-5" })
|
|
5717
|
+
},
|
|
5718
|
+
i
|
|
5719
|
+
);
|
|
5720
|
+
}) }),
|
|
5721
|
+
/* @__PURE__ */ (0, import_jsx_runtime33.jsx)("textarea", { className: "w-full p-3 border rounded-md text-sm mt-4 resize-none h-20 bg-background", placeholder: "Tell us more (optional)" }),
|
|
5722
|
+
/* @__PURE__ */ (0, import_jsx_runtime33.jsx)("button", { className: "w-full py-2 bg-primary text-primary-foreground font-medium rounded-md hover:bg-primary/90 transition-colors", children: "Submit Feedback" })
|
|
5723
|
+
] });
|
|
5724
|
+
};
|
|
5397
5725
|
var InviteUsersForm = () => /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)("div", { className: "w-full border rounded-xl bg-card p-4 space-y-4", children: [
|
|
5398
5726
|
/* @__PURE__ */ (0, import_jsx_runtime33.jsxs)("div", { className: "flex gap-2", children: [
|
|
5399
5727
|
/* @__PURE__ */ (0, import_jsx_runtime33.jsx)("input", { className: "flex-1 p-2 border rounded-md text-sm", placeholder: "Email address" }),
|
|
@@ -5831,12 +6159,18 @@ var FileExplorerTable = () => /* @__PURE__ */ (0, import_jsx_runtime36.jsxs)("di
|
|
|
5831
6159
|
] }),
|
|
5832
6160
|
/* @__PURE__ */ (0, import_jsx_runtime36.jsxs)("div", { className: "divide-y", children: [
|
|
5833
6161
|
/* @__PURE__ */ (0, import_jsx_runtime36.jsxs)("div", { className: "grid grid-cols-12 px-4 py-3 items-center hover:bg-muted/30 cursor-pointer", children: [
|
|
5834
|
-
/* @__PURE__ */ (0, import_jsx_runtime36.
|
|
6162
|
+
/* @__PURE__ */ (0, import_jsx_runtime36.jsxs)("div", { className: "col-span-6 flex items-center gap-2.5 font-medium", children: [
|
|
6163
|
+
/* @__PURE__ */ (0, import_jsx_runtime36.jsx)(import_lucide_react19.Folder, { className: "w-4 h-4 text-sky-500 fill-sky-500/20" }),
|
|
6164
|
+
/* @__PURE__ */ (0, import_jsx_runtime36.jsx)("span", { children: "Documents" })
|
|
6165
|
+
] }),
|
|
5835
6166
|
/* @__PURE__ */ (0, import_jsx_runtime36.jsx)("div", { className: "col-span-3 text-muted-foreground", children: "Oct 12" }),
|
|
5836
6167
|
/* @__PURE__ */ (0, import_jsx_runtime36.jsx)("div", { className: "col-span-3 text-muted-foreground", children: "--" })
|
|
5837
6168
|
] }),
|
|
5838
6169
|
/* @__PURE__ */ (0, import_jsx_runtime36.jsxs)("div", { className: "grid grid-cols-12 px-4 py-3 items-center hover:bg-muted/30 cursor-pointer", children: [
|
|
5839
|
-
/* @__PURE__ */ (0, import_jsx_runtime36.
|
|
6170
|
+
/* @__PURE__ */ (0, import_jsx_runtime36.jsxs)("div", { className: "col-span-6 flex items-center gap-2.5 font-medium", children: [
|
|
6171
|
+
/* @__PURE__ */ (0, import_jsx_runtime36.jsx)(import_lucide_react19.FileText, { className: "w-4 h-4 text-muted-foreground" }),
|
|
6172
|
+
/* @__PURE__ */ (0, import_jsx_runtime36.jsx)("span", { children: "report.pdf" })
|
|
6173
|
+
] }),
|
|
5840
6174
|
/* @__PURE__ */ (0, import_jsx_runtime36.jsx)("div", { className: "col-span-3 text-muted-foreground", children: "Oct 10" }),
|
|
5841
6175
|
/* @__PURE__ */ (0, import_jsx_runtime36.jsx)("div", { className: "col-span-3 text-muted-foreground", children: "2.4 MB" })
|
|
5842
6176
|
] })
|
|
@@ -6208,7 +6542,7 @@ var TrustBanner = () => /* @__PURE__ */ (0, import_jsx_runtime40.jsxs)("div", {
|
|
|
6208
6542
|
/* @__PURE__ */ (0, import_jsx_runtime40.jsx)("div", { className: "font-black text-xl", children: "a16z" })
|
|
6209
6543
|
] })
|
|
6210
6544
|
] });
|
|
6211
|
-
var ComparisonTableMock = () => /* @__PURE__ */ (0, import_jsx_runtime40.jsxs)("div", { className: "w-full border rounded-2xl bg-card overflow-hidden", children: [
|
|
6545
|
+
var ComparisonTableMock = () => /* @__PURE__ */ (0, import_jsx_runtime40.jsxs)("div", { className: "w-full border rounded-2xl bg-card overflow-hidden shadow-sm", children: [
|
|
6212
6546
|
/* @__PURE__ */ (0, import_jsx_runtime40.jsxs)("div", { className: "grid grid-cols-3 bg-muted/50 p-4 border-b font-bold text-center", children: [
|
|
6213
6547
|
/* @__PURE__ */ (0, import_jsx_runtime40.jsx)("div", { className: "text-left", children: "Features" }),
|
|
6214
6548
|
/* @__PURE__ */ (0, import_jsx_runtime40.jsx)("div", { className: "text-muted-foreground", children: "Others" }),
|
|
@@ -6216,8 +6550,8 @@ var ComparisonTableMock = () => /* @__PURE__ */ (0, import_jsx_runtime40.jsxs)("
|
|
|
6216
6550
|
] }),
|
|
6217
6551
|
/* @__PURE__ */ (0, import_jsx_runtime40.jsx)("div", { className: "divide-y text-sm", children: ["Real-time sync", "End-to-end encryption", "24/7 Support"].map((f, i) => /* @__PURE__ */ (0, import_jsx_runtime40.jsxs)("div", { className: "grid grid-cols-3 p-4 items-center text-center", children: [
|
|
6218
6552
|
/* @__PURE__ */ (0, import_jsx_runtime40.jsx)("div", { className: "text-left font-medium", children: f }),
|
|
6219
|
-
/* @__PURE__ */ (0, import_jsx_runtime40.jsx)("div", { className: "
|
|
6220
|
-
/* @__PURE__ */ (0, import_jsx_runtime40.jsx)("div", { className: "
|
|
6553
|
+
/* @__PURE__ */ (0, import_jsx_runtime40.jsx)("div", { className: "flex justify-center", children: i === 0 ? /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(import_lucide_react23.Check, { className: "w-4 h-4 text-muted-foreground/60" }) : /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(import_lucide_react23.X, { className: "w-4 h-4 text-muted-foreground/30" }) }),
|
|
6554
|
+
/* @__PURE__ */ (0, import_jsx_runtime40.jsx)("div", { className: "flex justify-center", children: /* @__PURE__ */ (0, import_jsx_runtime40.jsx)("div", { className: "w-6 h-6 rounded-full bg-primary/10 flex items-center justify-center text-primary", children: /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(import_lucide_react23.Check, { className: "w-3.5 h-3.5 stroke-[2.5]" }) }) })
|
|
6221
6555
|
] }, i)) })
|
|
6222
6556
|
] });
|
|
6223
6557
|
var AnimatedHeroText = () => /* @__PURE__ */ (0, import_jsx_runtime40.jsxs)("h1", { className: "text-4xl md:text-6xl font-black text-center leading-tight", children: [
|
|
@@ -7597,6 +7931,7 @@ function ContextMenu({ items, children, className }) {
|
|
|
7597
7931
|
// src/components/premium-media.tsx
|
|
7598
7932
|
var React37 = __toESM(require("react"));
|
|
7599
7933
|
var import_framer_motion30 = require("framer-motion");
|
|
7934
|
+
var import_lucide_react28 = require("lucide-react");
|
|
7600
7935
|
var import_jsx_runtime50 = require("react/jsx-runtime");
|
|
7601
7936
|
function ImageCarousel({ images, autoPlay = true, interval = 4e3, className }) {
|
|
7602
7937
|
const [current, setCurrent] = React37.useState(0);
|
|
@@ -7669,19 +8004,20 @@ function AudioWaveform({ playing = false, bars = 24, className }) {
|
|
|
7669
8004
|
}) });
|
|
7670
8005
|
}
|
|
7671
8006
|
function FilePreviewCard({ name, size, type = "file", className }) {
|
|
7672
|
-
const
|
|
7673
|
-
file:
|
|
7674
|
-
image:
|
|
7675
|
-
video:
|
|
7676
|
-
pdf:
|
|
7677
|
-
code:
|
|
8007
|
+
const iconMap = {
|
|
8008
|
+
file: import_lucide_react28.FileText,
|
|
8009
|
+
image: import_lucide_react28.Image,
|
|
8010
|
+
video: import_lucide_react28.Video,
|
|
8011
|
+
pdf: import_lucide_react28.FileCode2,
|
|
8012
|
+
code: import_lucide_react28.Code2
|
|
7678
8013
|
};
|
|
8014
|
+
const Icon2 = iconMap[type] || import_lucide_react28.FileText;
|
|
7679
8015
|
const colors = {
|
|
7680
|
-
file: "from-blue-500/10 to-blue-500/5",
|
|
7681
|
-
image: "from-pink-500/10 to-pink-500/5",
|
|
7682
|
-
video: "from-violet-500/10 to-violet-500/5",
|
|
7683
|
-
pdf: "from-red-500/10 to-red-500/5",
|
|
7684
|
-
code: "from-emerald-500/10 to-emerald-500/5"
|
|
8016
|
+
file: "from-blue-500/10 to-blue-500/5 text-blue-500",
|
|
8017
|
+
image: "from-pink-500/10 to-pink-500/5 text-pink-500",
|
|
8018
|
+
video: "from-violet-500/10 to-violet-500/5 text-violet-500",
|
|
8019
|
+
pdf: "from-red-500/10 to-red-500/5 text-red-500",
|
|
8020
|
+
code: "from-emerald-500/10 to-emerald-500/5 text-emerald-500"
|
|
7685
8021
|
};
|
|
7686
8022
|
return /* @__PURE__ */ (0, import_jsx_runtime50.jsxs)(
|
|
7687
8023
|
import_framer_motion30.motion.div,
|
|
@@ -7689,7 +8025,7 @@ function FilePreviewCard({ name, size, type = "file", className }) {
|
|
|
7689
8025
|
whileHover: { y: -2 },
|
|
7690
8026
|
className: cn("rounded-xl border border-border bg-card p-4 flex items-center gap-3 cursor-pointer transition-shadow hover:shadow-md", className),
|
|
7691
8027
|
children: [
|
|
7692
|
-
/* @__PURE__ */ (0, import_jsx_runtime50.jsx)("div", { className: cn("w-12 h-12 rounded-lg bg-gradient-to-br flex items-center justify-center
|
|
8028
|
+
/* @__PURE__ */ (0, import_jsx_runtime50.jsx)("div", { className: cn("w-12 h-12 rounded-lg bg-gradient-to-br flex items-center justify-center shrink-0 border border-border/40", colors[type]), children: /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(Icon2, { className: "w-5 h-5" }) }),
|
|
7693
8029
|
/* @__PURE__ */ (0, import_jsx_runtime50.jsxs)("div", { className: "flex-1 min-w-0", children: [
|
|
7694
8030
|
/* @__PURE__ */ (0, import_jsx_runtime50.jsx)("p", { className: "text-sm font-medium truncate", children: name }),
|
|
7695
8031
|
/* @__PURE__ */ (0, import_jsx_runtime50.jsx)("p", { className: "text-xs text-muted-foreground", children: size })
|
|
@@ -8476,7 +8812,7 @@ function ModernDonutChart({
|
|
|
8476
8812
|
// src/components/premium-social.tsx
|
|
8477
8813
|
var React39 = __toESM(require("react"));
|
|
8478
8814
|
var import_framer_motion32 = require("framer-motion");
|
|
8479
|
-
var
|
|
8815
|
+
var import_lucide_react29 = require("lucide-react");
|
|
8480
8816
|
var import_jsx_runtime52 = require("react/jsx-runtime");
|
|
8481
8817
|
var ChatMessageContext = React39.createContext({
|
|
8482
8818
|
variant: "received",
|
|
@@ -8653,9 +8989,9 @@ var ChatMessageStatus = React39.forwardRef(
|
|
|
8653
8989
|
className: cn("inline-flex items-center text-[10px] text-muted-foreground ml-1.5", className),
|
|
8654
8990
|
...props,
|
|
8655
8991
|
children: [
|
|
8656
|
-
status === "sent" && /* @__PURE__ */ (0, import_jsx_runtime52.jsx)(
|
|
8657
|
-
status === "delivered" && /* @__PURE__ */ (0, import_jsx_runtime52.jsx)(
|
|
8658
|
-
status === "read" && /* @__PURE__ */ (0, import_jsx_runtime52.jsx)(
|
|
8992
|
+
status === "sent" && /* @__PURE__ */ (0, import_jsx_runtime52.jsx)(import_lucide_react29.Check, { className: "w-3 h-3 text-muted-foreground" }),
|
|
8993
|
+
status === "delivered" && /* @__PURE__ */ (0, import_jsx_runtime52.jsx)(import_lucide_react29.CheckCheck, { className: "w-3 h-3 text-muted-foreground" }),
|
|
8994
|
+
status === "read" && /* @__PURE__ */ (0, import_jsx_runtime52.jsx)(import_lucide_react29.CheckCheck, { className: "w-3 h-3 text-primary" })
|
|
8659
8995
|
]
|
|
8660
8996
|
}
|
|
8661
8997
|
);
|
|
@@ -8704,7 +9040,7 @@ var ChatInput = React39.forwardRef(
|
|
|
8704
9040
|
),
|
|
8705
9041
|
...props,
|
|
8706
9042
|
children: [
|
|
8707
|
-
/* @__PURE__ */ (0, import_jsx_runtime52.jsx)(ChatInputAction, { icon: /* @__PURE__ */ (0, import_jsx_runtime52.jsx)(
|
|
9043
|
+
/* @__PURE__ */ (0, import_jsx_runtime52.jsx)(ChatInputAction, { icon: /* @__PURE__ */ (0, import_jsx_runtime52.jsx)(import_lucide_react29.Paperclip, { className: "w-4 h-4" }), title: "Attach file" }),
|
|
8708
9044
|
/* @__PURE__ */ (0, import_jsx_runtime52.jsx)(
|
|
8709
9045
|
ChatInputField,
|
|
8710
9046
|
{
|
|
@@ -8719,7 +9055,7 @@ var ChatInput = React39.forwardRef(
|
|
|
8719
9055
|
placeholder
|
|
8720
9056
|
}
|
|
8721
9057
|
),
|
|
8722
|
-
/* @__PURE__ */ (0, import_jsx_runtime52.jsx)(ChatInputAction, { icon: /* @__PURE__ */ (0, import_jsx_runtime52.jsx)(
|
|
9058
|
+
/* @__PURE__ */ (0, import_jsx_runtime52.jsx)(ChatInputAction, { icon: /* @__PURE__ */ (0, import_jsx_runtime52.jsx)(import_lucide_react29.Smile, { className: "w-4 h-4" }), title: "Add emoji" }),
|
|
8723
9059
|
/* @__PURE__ */ (0, import_jsx_runtime52.jsx)(ChatInputSubmit, { onClick: handleSend, disabled: !text.trim() })
|
|
8724
9060
|
]
|
|
8725
9061
|
}
|
|
@@ -8773,7 +9109,7 @@ var ChatInputSubmit = React39.forwardRef(
|
|
|
8773
9109
|
className
|
|
8774
9110
|
),
|
|
8775
9111
|
...props,
|
|
8776
|
-
children: children || /* @__PURE__ */ (0, import_jsx_runtime52.jsx)(
|
|
9112
|
+
children: children || /* @__PURE__ */ (0, import_jsx_runtime52.jsx)(import_lucide_react29.Send, { className: "w-4 h-4" })
|
|
8777
9113
|
}
|
|
8778
9114
|
)
|
|
8779
9115
|
);
|
|
@@ -9059,7 +9395,7 @@ var SocialPost = React39.forwardRef(
|
|
|
9059
9395
|
({
|
|
9060
9396
|
author = "John Smith",
|
|
9061
9397
|
handle = "@johnsmith",
|
|
9062
|
-
content = "Just launched my new project! Check it out
|
|
9398
|
+
content = "Just launched my new project powered by NexoreUI! Check it out.",
|
|
9063
9399
|
time = "2h ago",
|
|
9064
9400
|
avatar,
|
|
9065
9401
|
likes = 42,
|
|
@@ -9112,7 +9448,7 @@ var SocialPost = React39.forwardRef(
|
|
|
9112
9448
|
SocialPostAction,
|
|
9113
9449
|
{
|
|
9114
9450
|
active: liked,
|
|
9115
|
-
icon: /* @__PURE__ */ (0, import_jsx_runtime52.jsx)(
|
|
9451
|
+
icon: /* @__PURE__ */ (0, import_jsx_runtime52.jsx)(import_lucide_react29.Heart, { className: cn("w-4 h-4", liked && "fill-rose-500 text-rose-500") }),
|
|
9116
9452
|
label: likeCount,
|
|
9117
9453
|
onClick: () => {
|
|
9118
9454
|
setLiked(!liked);
|
|
@@ -9120,8 +9456,8 @@ var SocialPost = React39.forwardRef(
|
|
|
9120
9456
|
}
|
|
9121
9457
|
}
|
|
9122
9458
|
),
|
|
9123
|
-
/* @__PURE__ */ (0, import_jsx_runtime52.jsx)(SocialPostAction, { icon: /* @__PURE__ */ (0, import_jsx_runtime52.jsx)(
|
|
9124
|
-
/* @__PURE__ */ (0, import_jsx_runtime52.jsx)(SocialPostAction, { icon: /* @__PURE__ */ (0, import_jsx_runtime52.jsx)(
|
|
9459
|
+
/* @__PURE__ */ (0, import_jsx_runtime52.jsx)(SocialPostAction, { icon: /* @__PURE__ */ (0, import_jsx_runtime52.jsx)(import_lucide_react29.MessageCircle, { className: "w-4 h-4" }), label: comments }),
|
|
9460
|
+
/* @__PURE__ */ (0, import_jsx_runtime52.jsx)(SocialPostAction, { icon: /* @__PURE__ */ (0, import_jsx_runtime52.jsx)(import_lucide_react29.Share2, { className: "w-4 h-4" }), label: shares })
|
|
9125
9461
|
] })
|
|
9126
9462
|
]
|
|
9127
9463
|
}
|
|
@@ -9254,7 +9590,7 @@ var ReactionAdd = React39.forwardRef(
|
|
|
9254
9590
|
className
|
|
9255
9591
|
),
|
|
9256
9592
|
...props,
|
|
9257
|
-
children: /* @__PURE__ */ (0, import_jsx_runtime52.jsx)(
|
|
9593
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime52.jsx)(import_lucide_react29.Plus, { className: "w-3.5 h-3.5" })
|
|
9258
9594
|
}
|
|
9259
9595
|
)
|
|
9260
9596
|
);
|
|
@@ -9354,10 +9690,10 @@ var ShareSheet = React39.forwardRef(
|
|
|
9354
9690
|
);
|
|
9355
9691
|
}
|
|
9356
9692
|
const platforms = [
|
|
9357
|
-
{ name: "Twitter", color: "bg-
|
|
9693
|
+
{ name: "Twitter", color: "bg-zinc-900 dark:bg-zinc-800", icon: "\u{1D54F}" },
|
|
9358
9694
|
{ name: "Facebook", color: "bg-blue-600", icon: "f" },
|
|
9359
9695
|
{ name: "LinkedIn", color: "bg-indigo-600", icon: "in" },
|
|
9360
|
-
{ name: "Telegram", color: "bg-cyan-500", icon: "
|
|
9696
|
+
{ name: "Telegram", color: "bg-cyan-500", icon: /* @__PURE__ */ (0, import_jsx_runtime52.jsx)(import_lucide_react29.Send, { className: "w-3.5 h-3.5 -rotate-45" }) }
|
|
9361
9697
|
];
|
|
9362
9698
|
const handleCopy = () => {
|
|
9363
9699
|
navigator.clipboard.writeText(url);
|
|
@@ -9394,7 +9730,7 @@ var ShareSheet = React39.forwardRef(
|
|
|
9394
9730
|
onClick: handleCopy,
|
|
9395
9731
|
className: "px-3.5 py-2 rounded-xl bg-primary text-primary-foreground text-xs font-medium shrink-0 flex items-center gap-1.5 shadow-sm shadow-primary/20 hover:bg-primary/90 transition-colors cursor-pointer",
|
|
9396
9732
|
children: [
|
|
9397
|
-
copied ? /* @__PURE__ */ (0, import_jsx_runtime52.jsx)(
|
|
9733
|
+
copied ? /* @__PURE__ */ (0, import_jsx_runtime52.jsx)(import_lucide_react29.Check, { className: "w-3.5 h-3.5 text-emerald-400" }) : /* @__PURE__ */ (0, import_jsx_runtime52.jsx)(import_lucide_react29.Copy, { className: "w-3.5 h-3.5" }),
|
|
9398
9734
|
/* @__PURE__ */ (0, import_jsx_runtime52.jsx)("span", { children: copied ? "Copied!" : "Copy" })
|
|
9399
9735
|
]
|
|
9400
9736
|
}
|
|
@@ -9423,9 +9759,9 @@ var NotificationCenter = React39.forwardRef(
|
|
|
9423
9759
|
);
|
|
9424
9760
|
}
|
|
9425
9761
|
const typeIcons = {
|
|
9426
|
-
info: "
|
|
9427
|
-
success: "
|
|
9428
|
-
warning: "
|
|
9762
|
+
info: /* @__PURE__ */ (0, import_jsx_runtime52.jsx)(import_lucide_react29.MessageSquare, { className: "w-4 h-4 text-blue-500" }),
|
|
9763
|
+
success: /* @__PURE__ */ (0, import_jsx_runtime52.jsx)(import_lucide_react29.CheckCircle2, { className: "w-4 h-4 text-emerald-500" }),
|
|
9764
|
+
warning: /* @__PURE__ */ (0, import_jsx_runtime52.jsx)(import_lucide_react29.AlertTriangle, { className: "w-4 h-4 text-amber-500" })
|
|
9429
9765
|
};
|
|
9430
9766
|
return /* @__PURE__ */ (0, import_jsx_runtime52.jsxs)(
|
|
9431
9767
|
"div",
|
|
@@ -9439,7 +9775,7 @@ var NotificationCenter = React39.forwardRef(
|
|
|
9439
9775
|
children: [
|
|
9440
9776
|
/* @__PURE__ */ (0, import_jsx_runtime52.jsxs)("div", { className: "flex items-center justify-between px-4 py-3 border-b border-border/70 bg-muted/30", children: [
|
|
9441
9777
|
/* @__PURE__ */ (0, import_jsx_runtime52.jsxs)("div", { className: "flex items-center gap-2", children: [
|
|
9442
|
-
/* @__PURE__ */ (0, import_jsx_runtime52.jsx)(
|
|
9778
|
+
/* @__PURE__ */ (0, import_jsx_runtime52.jsx)(import_lucide_react29.Bell, { className: "w-4 h-4 text-primary" }),
|
|
9443
9779
|
/* @__PURE__ */ (0, import_jsx_runtime52.jsx)("h4", { className: "font-semibold text-xs text-foreground tracking-tight", children: "Notifications" })
|
|
9444
9780
|
] }),
|
|
9445
9781
|
/* @__PURE__ */ (0, import_jsx_runtime52.jsx)(
|
|
@@ -9460,7 +9796,7 @@ var NotificationCenter = React39.forwardRef(
|
|
|
9460
9796
|
!n.read && "bg-primary/5"
|
|
9461
9797
|
),
|
|
9462
9798
|
children: [
|
|
9463
|
-
/* @__PURE__ */ (0, import_jsx_runtime52.jsx)("span", { className: "
|
|
9799
|
+
/* @__PURE__ */ (0, import_jsx_runtime52.jsx)("span", { className: "shrink-0 mt-0.5", children: typeIcons[n.type || "info"] || /* @__PURE__ */ (0, import_jsx_runtime52.jsx)(import_lucide_react29.Bell, { className: "w-4 h-4 text-muted-foreground" }) }),
|
|
9464
9800
|
/* @__PURE__ */ (0, import_jsx_runtime52.jsxs)("div", { className: "flex-1 min-w-0", children: [
|
|
9465
9801
|
/* @__PURE__ */ (0, import_jsx_runtime52.jsx)("p", { className: cn("text-xs", !n.read ? "font-semibold text-foreground" : "font-medium text-foreground/80"), children: n.title }),
|
|
9466
9802
|
/* @__PURE__ */ (0, import_jsx_runtime52.jsx)("p", { className: "text-[11px] text-muted-foreground line-clamp-1 mt-0.5", children: n.message })
|
|
@@ -9481,7 +9817,7 @@ NotificationCenter.displayName = "NotificationCenter";
|
|
|
9481
9817
|
// src/components/premium-commerce.tsx
|
|
9482
9818
|
var React40 = __toESM(require("react"));
|
|
9483
9819
|
var import_framer_motion33 = require("framer-motion");
|
|
9484
|
-
var
|
|
9820
|
+
var import_lucide_react30 = require("lucide-react");
|
|
9485
9821
|
var import_jsx_runtime53 = require("react/jsx-runtime");
|
|
9486
9822
|
function ProductCardPro({
|
|
9487
9823
|
name,
|
|
@@ -9491,6 +9827,7 @@ function ProductCardPro({
|
|
|
9491
9827
|
rating = 4.9,
|
|
9492
9828
|
reviewCount = 248,
|
|
9493
9829
|
imageSrc,
|
|
9830
|
+
image,
|
|
9494
9831
|
colors = ["#18181b", "#6366f1", "#06b6d4"],
|
|
9495
9832
|
onAddToCart,
|
|
9496
9833
|
className,
|
|
@@ -9499,6 +9836,7 @@ function ProductCardPro({
|
|
|
9499
9836
|
const [isWishlisted, setIsWishlisted] = React40.useState(false);
|
|
9500
9837
|
const [selectedColor, setSelectedColor] = React40.useState(0);
|
|
9501
9838
|
const [isAdded, setIsAdded] = React40.useState(false);
|
|
9839
|
+
const effectiveImage = image || imageSrc;
|
|
9502
9840
|
const handleAdd = () => {
|
|
9503
9841
|
setIsAdded(true);
|
|
9504
9842
|
onAddToCart?.();
|
|
@@ -9524,7 +9862,7 @@ function ProductCardPro({
|
|
|
9524
9862
|
}
|
|
9525
9863
|
),
|
|
9526
9864
|
badge && /* @__PURE__ */ (0, import_jsx_runtime53.jsx)("div", { className: "absolute top-3 left-3 z-10", children: /* @__PURE__ */ (0, import_jsx_runtime53.jsxs)("span", { className: "inline-flex items-center gap-1 px-2.5 py-1 rounded-full bg-primary/90 text-primary-foreground text-[11px] font-bold tracking-wide shadow-md backdrop-blur-md", children: [
|
|
9527
|
-
/* @__PURE__ */ (0, import_jsx_runtime53.jsx)(
|
|
9865
|
+
/* @__PURE__ */ (0, import_jsx_runtime53.jsx)(import_lucide_react30.Sparkles, { className: "w-3 h-3" }),
|
|
9528
9866
|
badge
|
|
9529
9867
|
] }) }),
|
|
9530
9868
|
/* @__PURE__ */ (0, import_jsx_runtime53.jsx)(
|
|
@@ -9535,7 +9873,7 @@ function ProductCardPro({
|
|
|
9535
9873
|
className: "absolute top-3 right-3 z-10 w-8 h-8 rounded-full bg-background/80 hover:bg-background backdrop-blur-md border border-border/80 flex items-center justify-center transition-transform active:scale-90 cursor-pointer shadow-xs",
|
|
9536
9874
|
title: isWishlisted ? "Remove from wishlist" : "Add to wishlist",
|
|
9537
9875
|
children: /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(
|
|
9538
|
-
|
|
9876
|
+
import_lucide_react30.Heart,
|
|
9539
9877
|
{
|
|
9540
9878
|
className: cn(
|
|
9541
9879
|
"w-4 h-4 transition-colors",
|
|
@@ -9545,22 +9883,22 @@ function ProductCardPro({
|
|
|
9545
9883
|
)
|
|
9546
9884
|
}
|
|
9547
9885
|
),
|
|
9548
|
-
|
|
9886
|
+
effectiveImage ? /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(
|
|
9549
9887
|
"img",
|
|
9550
9888
|
{
|
|
9551
|
-
src:
|
|
9889
|
+
src: effectiveImage,
|
|
9552
9890
|
alt: name,
|
|
9553
9891
|
className: "w-full h-full object-cover group-hover:scale-105 transition-transform duration-500"
|
|
9554
9892
|
}
|
|
9555
9893
|
) : /* @__PURE__ */ (0, import_jsx_runtime53.jsxs)("div", { className: "flex flex-col items-center gap-2 select-none group-hover:scale-105 transition-transform duration-300", children: [
|
|
9556
|
-
/* @__PURE__ */ (0, import_jsx_runtime53.jsx)("div", { className: "w-20 h-20 rounded-2xl bg-gradient-to-tr from-primary/20 via-primary/10 to-transparent border border-primary/20 flex items-center justify-center text-primary shadow-lg", children: /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(
|
|
9894
|
+
/* @__PURE__ */ (0, import_jsx_runtime53.jsx)("div", { className: "w-20 h-20 rounded-2xl bg-gradient-to-tr from-primary/20 via-primary/10 to-transparent border border-primary/20 flex items-center justify-center text-primary shadow-lg", children: /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(import_lucide_react30.ShoppingBag, { className: "w-9 h-9" }) }),
|
|
9557
9895
|
/* @__PURE__ */ (0, import_jsx_runtime53.jsx)("span", { className: "text-[10px] font-mono tracking-widest text-muted-foreground uppercase", children: "STUDIO SERIES" })
|
|
9558
9896
|
] })
|
|
9559
9897
|
] }),
|
|
9560
9898
|
/* @__PURE__ */ (0, import_jsx_runtime53.jsxs)("div", { className: "pt-4 space-y-3", children: [
|
|
9561
9899
|
/* @__PURE__ */ (0, import_jsx_runtime53.jsxs)("div", { className: "flex items-center justify-between", children: [
|
|
9562
9900
|
/* @__PURE__ */ (0, import_jsx_runtime53.jsxs)("div", { className: "flex items-center gap-1.5", children: [
|
|
9563
|
-
/* @__PURE__ */ (0, import_jsx_runtime53.jsx)("div", { className: "flex items-center text-amber-400", children: /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(
|
|
9901
|
+
/* @__PURE__ */ (0, import_jsx_runtime53.jsx)("div", { className: "flex items-center text-amber-400", children: /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(import_lucide_react30.Star, { className: "w-3.5 h-3.5 fill-amber-400" }) }),
|
|
9564
9902
|
/* @__PURE__ */ (0, import_jsx_runtime53.jsx)("span", { className: "text-xs font-bold text-foreground", children: rating }),
|
|
9565
9903
|
/* @__PURE__ */ (0, import_jsx_runtime53.jsxs)("span", { className: "text-xs text-muted-foreground", children: [
|
|
9566
9904
|
"(",
|
|
@@ -9608,10 +9946,10 @@ function ProductCardPro({
|
|
|
9608
9946
|
isAdded ? "bg-emerald-600 text-white shadow-emerald-500/25" : "bg-primary text-primary-foreground hover:bg-primary/90 shadow-primary/20"
|
|
9609
9947
|
),
|
|
9610
9948
|
children: isAdded ? /* @__PURE__ */ (0, import_jsx_runtime53.jsxs)(import_jsx_runtime53.Fragment, { children: [
|
|
9611
|
-
/* @__PURE__ */ (0, import_jsx_runtime53.jsx)(
|
|
9949
|
+
/* @__PURE__ */ (0, import_jsx_runtime53.jsx)(import_lucide_react30.Check, { className: "w-4 h-4" }),
|
|
9612
9950
|
/* @__PURE__ */ (0, import_jsx_runtime53.jsx)("span", { children: "Added to Cart!" })
|
|
9613
9951
|
] }) : /* @__PURE__ */ (0, import_jsx_runtime53.jsxs)(import_jsx_runtime53.Fragment, { children: [
|
|
9614
|
-
/* @__PURE__ */ (0, import_jsx_runtime53.jsx)(
|
|
9952
|
+
/* @__PURE__ */ (0, import_jsx_runtime53.jsx)(import_lucide_react30.ShoppingBag, { className: "w-4 h-4" }),
|
|
9615
9953
|
/* @__PURE__ */ (0, import_jsx_runtime53.jsx)("span", { children: "Add to Cart" })
|
|
9616
9954
|
] })
|
|
9617
9955
|
}
|
|
@@ -9653,7 +9991,7 @@ function CheckoutSummary({
|
|
|
9653
9991
|
] }),
|
|
9654
9992
|
/* @__PURE__ */ (0, import_jsx_runtime53.jsxs)("form", { onSubmit: handleApply, className: "flex gap-2", children: [
|
|
9655
9993
|
/* @__PURE__ */ (0, import_jsx_runtime53.jsxs)("div", { className: "relative flex-1", children: [
|
|
9656
|
-
/* @__PURE__ */ (0, import_jsx_runtime53.jsx)(
|
|
9994
|
+
/* @__PURE__ */ (0, import_jsx_runtime53.jsx)(import_lucide_react30.Tag, { className: "w-3.5 h-3.5 absolute left-3 top-1/2 -translate-y-1/2 text-muted-foreground" }),
|
|
9657
9995
|
/* @__PURE__ */ (0, import_jsx_runtime53.jsx)(
|
|
9658
9996
|
"input",
|
|
9659
9997
|
{
|
|
@@ -9719,14 +10057,14 @@ function CheckoutSummary({
|
|
|
9719
10057
|
onClick: onCheckout,
|
|
9720
10058
|
className: "w-full py-3.5 px-4 rounded-xl text-xs font-bold bg-primary text-primary-foreground hover:bg-primary/90 shadow-lg shadow-primary/25 flex items-center justify-center gap-2 cursor-pointer transition-all",
|
|
9721
10059
|
children: [
|
|
9722
|
-
/* @__PURE__ */ (0, import_jsx_runtime53.jsx)(
|
|
10060
|
+
/* @__PURE__ */ (0, import_jsx_runtime53.jsx)(import_lucide_react30.Lock, { className: "w-3.5 h-3.5" }),
|
|
9723
10061
|
/* @__PURE__ */ (0, import_jsx_runtime53.jsx)("span", { children: "Complete Secure Checkout" })
|
|
9724
10062
|
]
|
|
9725
10063
|
}
|
|
9726
10064
|
),
|
|
9727
10065
|
/* @__PURE__ */ (0, import_jsx_runtime53.jsxs)("div", { className: "pt-2 flex items-center justify-center gap-4 text-[11px] text-muted-foreground select-none", children: [
|
|
9728
10066
|
/* @__PURE__ */ (0, import_jsx_runtime53.jsxs)("div", { className: "flex items-center gap-1", children: [
|
|
9729
|
-
/* @__PURE__ */ (0, import_jsx_runtime53.jsx)(
|
|
10067
|
+
/* @__PURE__ */ (0, import_jsx_runtime53.jsx)(import_lucide_react30.ShieldCheck, { className: "w-3.5 h-3.5 text-primary" }),
|
|
9730
10068
|
/* @__PURE__ */ (0, import_jsx_runtime53.jsx)("span", { children: "256-Bit SSL" })
|
|
9731
10069
|
] }),
|
|
9732
10070
|
/* @__PURE__ */ (0, import_jsx_runtime53.jsx)("span", { children: "\u2022" }),
|
|
@@ -9786,7 +10124,7 @@ function SubscriptionCard({
|
|
|
9786
10124
|
/* @__PURE__ */ (0, import_jsx_runtime53.jsxs)("div", { className: "space-y-2.5 pt-2 border-t border-border/60", children: [
|
|
9787
10125
|
/* @__PURE__ */ (0, import_jsx_runtime53.jsx)("p", { className: "text-[11px] font-bold text-muted-foreground uppercase tracking-wider", children: "Included with plan:" }),
|
|
9788
10126
|
/* @__PURE__ */ (0, import_jsx_runtime53.jsx)("ul", { className: "space-y-2 text-xs", children: features.map((f, i) => /* @__PURE__ */ (0, import_jsx_runtime53.jsxs)("li", { className: "flex items-center gap-2.5 text-foreground/90", children: [
|
|
9789
|
-
/* @__PURE__ */ (0, import_jsx_runtime53.jsx)("div", { className: "w-4 h-4 rounded-full bg-emerald-500/10 border border-emerald-500/20 text-emerald-500 flex items-center justify-center shrink-0", children: /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(
|
|
10127
|
+
/* @__PURE__ */ (0, import_jsx_runtime53.jsx)("div", { className: "w-4 h-4 rounded-full bg-emerald-500/10 border border-emerald-500/20 text-emerald-500 flex items-center justify-center shrink-0", children: /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(import_lucide_react30.Check, { className: "w-2.5 h-2.5" }) }),
|
|
9790
10128
|
/* @__PURE__ */ (0, import_jsx_runtime53.jsx)("span", { children: f })
|
|
9791
10129
|
] }, i)) })
|
|
9792
10130
|
] }),
|
|
@@ -9801,7 +10139,7 @@ function SubscriptionCard({
|
|
|
9801
10139
|
"Upgrade to ",
|
|
9802
10140
|
plan
|
|
9803
10141
|
] }),
|
|
9804
|
-
/* @__PURE__ */ (0, import_jsx_runtime53.jsx)(
|
|
10142
|
+
/* @__PURE__ */ (0, import_jsx_runtime53.jsx)(import_lucide_react30.ArrowRight, { className: "w-3.5 h-3.5" })
|
|
9805
10143
|
]
|
|
9806
10144
|
}
|
|
9807
10145
|
)
|
|
@@ -9871,7 +10209,7 @@ function CartItem({
|
|
|
9871
10209
|
),
|
|
9872
10210
|
...props,
|
|
9873
10211
|
children: [
|
|
9874
|
-
/* @__PURE__ */ (0, import_jsx_runtime53.jsx)("div", { className: "w-14 h-14 rounded-xl bg-muted/60 border border-border flex items-center justify-center text-primary shrink-0", children: /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(
|
|
10212
|
+
/* @__PURE__ */ (0, import_jsx_runtime53.jsx)("div", { className: "w-14 h-14 rounded-xl bg-muted/60 border border-border flex items-center justify-center text-primary shrink-0", children: /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(import_lucide_react30.ShoppingBag, { className: "w-6 h-6" }) }),
|
|
9875
10213
|
/* @__PURE__ */ (0, import_jsx_runtime53.jsxs)("div", { className: "flex-1 min-w-0", children: [
|
|
9876
10214
|
/* @__PURE__ */ (0, import_jsx_runtime53.jsx)("h4", { className: "font-semibold text-sm truncate text-foreground", children: name }),
|
|
9877
10215
|
/* @__PURE__ */ (0, import_jsx_runtime53.jsxs)("p", { className: "text-xs font-mono font-bold text-primary mt-0.5", children: [
|
|
@@ -9886,7 +10224,7 @@ function CartItem({
|
|
|
9886
10224
|
type: "button",
|
|
9887
10225
|
onClick: () => onQuantityChange?.(Math.max(1, quantity - 1)),
|
|
9888
10226
|
className: "w-6 h-6 rounded-lg bg-card hover:bg-muted flex items-center justify-center text-xs transition-colors cursor-pointer border border-border/40",
|
|
9889
|
-
children: /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(
|
|
10227
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(import_lucide_react30.Minus, { className: "w-3 h-3" })
|
|
9890
10228
|
}
|
|
9891
10229
|
),
|
|
9892
10230
|
/* @__PURE__ */ (0, import_jsx_runtime53.jsx)("span", { className: "w-6 text-center text-xs font-mono font-bold", children: quantity }),
|
|
@@ -9896,7 +10234,7 @@ function CartItem({
|
|
|
9896
10234
|
type: "button",
|
|
9897
10235
|
onClick: () => onQuantityChange?.(quantity + 1),
|
|
9898
10236
|
className: "w-6 h-6 rounded-lg bg-card hover:bg-muted flex items-center justify-center text-xs transition-colors cursor-pointer border border-border/40",
|
|
9899
|
-
children: /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(
|
|
10237
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(import_lucide_react30.Plus, { className: "w-3 h-3" })
|
|
9900
10238
|
}
|
|
9901
10239
|
)
|
|
9902
10240
|
] }),
|
|
@@ -9907,7 +10245,7 @@ function CartItem({
|
|
|
9907
10245
|
onClick: onRemove,
|
|
9908
10246
|
className: "p-2 rounded-xl text-muted-foreground hover:text-destructive hover:bg-destructive/10 transition-colors shrink-0 cursor-pointer",
|
|
9909
10247
|
title: "Remove item",
|
|
9910
|
-
children: /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(
|
|
10248
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(import_lucide_react30.Trash2, { className: "w-4 h-4" })
|
|
9911
10249
|
}
|
|
9912
10250
|
)
|
|
9913
10251
|
]
|
|
@@ -9974,7 +10312,7 @@ function InvoiceCard({
|
|
|
9974
10312
|
onClick: onDownload || (() => alert("Downloading PDF...")),
|
|
9975
10313
|
className: "w-full py-2 rounded-xl border border-border bg-muted/40 hover:bg-muted text-xs font-semibold text-foreground flex items-center justify-center gap-1.5 transition-colors cursor-pointer",
|
|
9976
10314
|
children: [
|
|
9977
|
-
/* @__PURE__ */ (0, import_jsx_runtime53.jsx)(
|
|
10315
|
+
/* @__PURE__ */ (0, import_jsx_runtime53.jsx)(import_lucide_react30.Download, { className: "w-3.5 h-3.5 text-primary" }),
|
|
9978
10316
|
/* @__PURE__ */ (0, import_jsx_runtime53.jsx)("span", { children: "Download Receipt (PDF)" })
|
|
9979
10317
|
]
|
|
9980
10318
|
}
|
|
@@ -10023,7 +10361,7 @@ function CouponCard({
|
|
|
10023
10361
|
onClick: handleCopy,
|
|
10024
10362
|
className: "px-4 py-2 rounded-xl bg-primary text-primary-foreground text-xs font-semibold hover:bg-primary/90 transition-colors cursor-pointer flex items-center gap-1.5 shrink-0",
|
|
10025
10363
|
children: [
|
|
10026
|
-
copied ? /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(
|
|
10364
|
+
copied ? /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(import_lucide_react30.Check, { className: "w-3.5 h-3.5" }) : /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(import_lucide_react30.Copy, { className: "w-3.5 h-3.5" }),
|
|
10027
10365
|
/* @__PURE__ */ (0, import_jsx_runtime53.jsx)("span", { children: copied ? "Copied!" : "Copy" })
|
|
10028
10366
|
]
|
|
10029
10367
|
}
|
|
@@ -10080,7 +10418,7 @@ function PricingSlider({
|
|
|
10080
10418
|
/* @__PURE__ */ (0, import_jsx_runtime53.jsxs)("div", { className: "space-y-2 pt-2 border-t border-border/60", children: [
|
|
10081
10419
|
/* @__PURE__ */ (0, import_jsx_runtime53.jsx)("p", { className: "text-[11px] font-bold text-muted-foreground uppercase", children: "Key Features:" }),
|
|
10082
10420
|
/* @__PURE__ */ (0, import_jsx_runtime53.jsx)("ul", { className: "space-y-1.5 text-xs", children: current.features.map((f, idx) => /* @__PURE__ */ (0, import_jsx_runtime53.jsxs)("li", { className: "flex items-center gap-2 text-foreground/90", children: [
|
|
10083
|
-
/* @__PURE__ */ (0, import_jsx_runtime53.jsx)(
|
|
10421
|
+
/* @__PURE__ */ (0, import_jsx_runtime53.jsx)(import_lucide_react30.Check, { className: "w-3.5 h-3.5 text-emerald-500 shrink-0" }),
|
|
10084
10422
|
/* @__PURE__ */ (0, import_jsx_runtime53.jsx)("span", { children: f })
|
|
10085
10423
|
] }, idx)) })
|
|
10086
10424
|
] })
|
|
@@ -10090,7 +10428,7 @@ function PricingSlider({
|
|
|
10090
10428
|
}
|
|
10091
10429
|
function ReviewStars({ rating = 4.8, size = 18, reviewCount }) {
|
|
10092
10430
|
return /* @__PURE__ */ (0, import_jsx_runtime53.jsxs)("div", { className: "inline-flex items-center gap-1.5", children: [
|
|
10093
|
-
/* @__PURE__ */ (0, import_jsx_runtime53.jsx)("div", { className: "flex items-center text-amber-400", children: [1, 2, 3, 4, 5].map((s) => /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(
|
|
10431
|
+
/* @__PURE__ */ (0, import_jsx_runtime53.jsx)("div", { className: "flex items-center text-amber-400", children: [1, 2, 3, 4, 5].map((s) => /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(import_lucide_react30.Star, { style: { width: size, height: size }, className: cn(s <= Math.round(rating) ? "fill-amber-400 text-amber-400" : "text-muted/40") }, s)) }),
|
|
10094
10432
|
/* @__PURE__ */ (0, import_jsx_runtime53.jsx)("span", { className: "text-xs font-bold text-foreground", children: rating }),
|
|
10095
10433
|
reviewCount && /* @__PURE__ */ (0, import_jsx_runtime53.jsxs)("span", { className: "text-xs text-muted-foreground", children: [
|
|
10096
10434
|
"(",
|
|
@@ -10106,7 +10444,7 @@ function TrustBadge({
|
|
|
10106
10444
|
className
|
|
10107
10445
|
}) {
|
|
10108
10446
|
return /* @__PURE__ */ (0, import_jsx_runtime53.jsxs)("div", { className: cn("inline-flex items-center gap-3 p-3 rounded-2xl border border-border/80 bg-card/60 backdrop-blur-md shadow-xs", className), children: [
|
|
10109
|
-
/* @__PURE__ */ (0, import_jsx_runtime53.jsx)("div", { className: "w-10 h-10 rounded-xl bg-primary/10 text-primary flex items-center justify-center shrink-0", children: icon || /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(
|
|
10447
|
+
/* @__PURE__ */ (0, import_jsx_runtime53.jsx)("div", { className: "w-10 h-10 rounded-xl bg-primary/10 text-primary flex items-center justify-center shrink-0", children: icon || /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(import_lucide_react30.ShieldCheck, { className: "w-5 h-5" }) }),
|
|
10110
10448
|
/* @__PURE__ */ (0, import_jsx_runtime53.jsxs)("div", { children: [
|
|
10111
10449
|
/* @__PURE__ */ (0, import_jsx_runtime53.jsx)("h5", { className: "text-xs font-bold text-foreground leading-tight", children: title }),
|
|
10112
10450
|
/* @__PURE__ */ (0, import_jsx_runtime53.jsx)("p", { className: "text-[11px] text-muted-foreground", children: subtitle })
|
|
@@ -10329,7 +10667,7 @@ function BentoCard({
|
|
|
10329
10667
|
// src/components/aurora-border-fx.tsx
|
|
10330
10668
|
var React42 = __toESM(require("react"));
|
|
10331
10669
|
var import_framer_motion35 = require("framer-motion");
|
|
10332
|
-
var
|
|
10670
|
+
var import_lucide_react31 = require("lucide-react");
|
|
10333
10671
|
var import_jsx_runtime55 = require("react/jsx-runtime");
|
|
10334
10672
|
var defaultAuroraColors = [
|
|
10335
10673
|
{ name: "Violet", hex: "#8b5cf6" },
|
|
@@ -10364,7 +10702,7 @@ var AuroraBorderFX = React42.forwardRef(
|
|
|
10364
10702
|
glow = "medium",
|
|
10365
10703
|
radius = "lg",
|
|
10366
10704
|
badgeText = "Aurora Border FX",
|
|
10367
|
-
badgeIcon = /* @__PURE__ */ (0, import_jsx_runtime55.jsx)(
|
|
10705
|
+
badgeIcon = /* @__PURE__ */ (0, import_jsx_runtime55.jsx)(import_lucide_react31.Sparkles, { className: "w-3 h-3" }),
|
|
10368
10706
|
title = "Reactive Aurora Borders",
|
|
10369
10707
|
description = "Smooth multi-color conic gradients that dynamically track and react with zero JavaScript canvas lag.",
|
|
10370
10708
|
showColorPicker = true,
|
|
@@ -10527,7 +10865,7 @@ AuroraBorderFX.displayName = "AuroraBorderFX";
|
|
|
10527
10865
|
// src/components/morphing-geometry.tsx
|
|
10528
10866
|
var React43 = __toESM(require("react"));
|
|
10529
10867
|
var import_framer_motion36 = require("framer-motion");
|
|
10530
|
-
var
|
|
10868
|
+
var import_lucide_react32 = require("lucide-react");
|
|
10531
10869
|
var import_jsx_runtime56 = require("react/jsx-runtime");
|
|
10532
10870
|
var sizeMap3 = {
|
|
10533
10871
|
sm: "w-16 h-16 text-xs",
|
|
@@ -10671,7 +11009,7 @@ var MorphingGeometry = React43.forwardRef(
|
|
|
10671
11009
|
...props,
|
|
10672
11010
|
children: [
|
|
10673
11011
|
/* @__PURE__ */ (0, import_jsx_runtime56.jsx)("div", { className: "absolute inset-0 bg-gradient-to-b from-white/25 via-transparent to-black/20 pointer-events-none" }),
|
|
10674
|
-
/* @__PURE__ */ (0, import_jsx_runtime56.jsx)("div", { className: "relative z-10 flex flex-col items-center justify-center p-2 text-center", children: icon || (children ? children : /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(
|
|
11012
|
+
/* @__PURE__ */ (0, import_jsx_runtime56.jsx)("div", { className: "relative z-10 flex flex-col items-center justify-center p-2 text-center", children: icon || (children ? children : /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(import_lucide_react32.Sparkles, { className: "w-6 h-6 drop-shadow-md" })) })
|
|
10675
11013
|
]
|
|
10676
11014
|
}
|
|
10677
11015
|
);
|
|
@@ -10681,7 +11019,7 @@ MorphingGeometry.displayName = "MorphingGeometry";
|
|
|
10681
11019
|
|
|
10682
11020
|
// src/components/interactive-code-block.tsx
|
|
10683
11021
|
var React44 = __toESM(require("react"));
|
|
10684
|
-
var
|
|
11022
|
+
var import_lucide_react33 = require("lucide-react");
|
|
10685
11023
|
var import_jsx_runtime57 = require("react/jsx-runtime");
|
|
10686
11024
|
var themeStyles = {
|
|
10687
11025
|
dark: {
|
|
@@ -10778,10 +11116,10 @@ var InteractiveCodeBlock = React44.forwardRef(
|
|
|
10778
11116
|
"aria-label": "Copy code to clipboard",
|
|
10779
11117
|
className: "inline-flex items-center gap-1.5 px-2.5 py-1 rounded-md bg-white/10 hover:bg-white/15 text-zinc-300 hover:text-white transition-all cursor-pointer active:scale-95",
|
|
10780
11118
|
children: copied ? /* @__PURE__ */ (0, import_jsx_runtime57.jsxs)(import_jsx_runtime57.Fragment, { children: [
|
|
10781
|
-
/* @__PURE__ */ (0, import_jsx_runtime57.jsx)(
|
|
11119
|
+
/* @__PURE__ */ (0, import_jsx_runtime57.jsx)(import_lucide_react33.Check, { className: "h-3 w-3 text-emerald-400" }),
|
|
10782
11120
|
/* @__PURE__ */ (0, import_jsx_runtime57.jsx)("span", { className: "text-emerald-400 text-[11px] font-sans", children: "Copied!" })
|
|
10783
11121
|
] }) : /* @__PURE__ */ (0, import_jsx_runtime57.jsxs)(import_jsx_runtime57.Fragment, { children: [
|
|
10784
|
-
/* @__PURE__ */ (0, import_jsx_runtime57.jsx)(
|
|
11122
|
+
/* @__PURE__ */ (0, import_jsx_runtime57.jsx)(import_lucide_react33.Copy, { className: "h-3 w-3" }),
|
|
10785
11123
|
/* @__PURE__ */ (0, import_jsx_runtime57.jsx)("span", { className: "text-[11px] font-sans", children: "Copy" })
|
|
10786
11124
|
] })
|
|
10787
11125
|
}
|
|
@@ -10815,10 +11153,327 @@ var InteractiveCodeBlock = React44.forwardRef(
|
|
|
10815
11153
|
);
|
|
10816
11154
|
InteractiveCodeBlock.displayName = "InteractiveCodeBlock";
|
|
10817
11155
|
|
|
11156
|
+
// src/components/aurora-search-pill.tsx
|
|
11157
|
+
var React45 = __toESM(require("react"));
|
|
11158
|
+
var import_lucide_react34 = require("lucide-react");
|
|
11159
|
+
var import_jsx_runtime58 = require("react/jsx-runtime");
|
|
11160
|
+
if (typeof window !== "undefined" && typeof window.CSS !== "undefined" && "registerProperty" in window.CSS) {
|
|
11161
|
+
try {
|
|
11162
|
+
window.CSS.registerProperty({
|
|
11163
|
+
name: "--aurora-deg",
|
|
11164
|
+
syntax: "<angle>",
|
|
11165
|
+
inherits: false,
|
|
11166
|
+
initialValue: "0deg"
|
|
11167
|
+
});
|
|
11168
|
+
} catch {
|
|
11169
|
+
}
|
|
11170
|
+
}
|
|
11171
|
+
var DEFAULT_SOURCES = [
|
|
11172
|
+
{ id: "web", type: "globe", label: "Web" },
|
|
11173
|
+
{ id: "gradient", type: "gradient", label: "Neural Index" },
|
|
11174
|
+
{ id: "github", type: "github", label: "GitHub" }
|
|
11175
|
+
];
|
|
11176
|
+
var SPEED_MAP = {
|
|
11177
|
+
slow: "5s",
|
|
11178
|
+
normal: "3.2s",
|
|
11179
|
+
fast: "1.8s"
|
|
11180
|
+
};
|
|
11181
|
+
var GLOW_OPACITY = {
|
|
11182
|
+
none: 0,
|
|
11183
|
+
subtle: 0.45,
|
|
11184
|
+
medium: 0.75,
|
|
11185
|
+
strong: 0.95
|
|
11186
|
+
};
|
|
11187
|
+
var SIZE_CONFIG = {
|
|
11188
|
+
sm: {
|
|
11189
|
+
height: "h-10",
|
|
11190
|
+
paddingDots: "px-4",
|
|
11191
|
+
paddingSearch: "px-4",
|
|
11192
|
+
dotSize: "w-1.5 h-1.5",
|
|
11193
|
+
dotGap: "gap-1.5",
|
|
11194
|
+
fontSize: "text-xs",
|
|
11195
|
+
badgeSize: "w-4 h-4",
|
|
11196
|
+
badgeMargin: "-ml-1",
|
|
11197
|
+
minWidthSearch: "min-w-[160px]"
|
|
11198
|
+
},
|
|
11199
|
+
md: {
|
|
11200
|
+
height: "h-12",
|
|
11201
|
+
paddingDots: "px-5",
|
|
11202
|
+
paddingSearch: "px-5",
|
|
11203
|
+
dotSize: "w-[6.5px] h-[6.5px]",
|
|
11204
|
+
dotGap: "gap-[7px]",
|
|
11205
|
+
fontSize: "text-sm sm:text-base",
|
|
11206
|
+
badgeSize: "w-[22px] h-[22px]",
|
|
11207
|
+
badgeMargin: "-ml-1.5",
|
|
11208
|
+
minWidthSearch: "min-w-[190px]"
|
|
11209
|
+
},
|
|
11210
|
+
lg: {
|
|
11211
|
+
height: "h-14",
|
|
11212
|
+
paddingDots: "px-6",
|
|
11213
|
+
paddingSearch: "px-6",
|
|
11214
|
+
dotSize: "w-2 h-2",
|
|
11215
|
+
dotGap: "gap-2",
|
|
11216
|
+
fontSize: "text-base sm:text-lg",
|
|
11217
|
+
badgeSize: "w-6 h-6",
|
|
11218
|
+
badgeMargin: "-ml-2",
|
|
11219
|
+
minWidthSearch: "min-w-[220px]"
|
|
11220
|
+
}
|
|
11221
|
+
};
|
|
11222
|
+
var AuroraSearchPill = React45.forwardRef(
|
|
11223
|
+
({
|
|
11224
|
+
isSearching: controlledSearching,
|
|
11225
|
+
defaultSearching = false,
|
|
11226
|
+
onToggle,
|
|
11227
|
+
searchLabel = "Search...",
|
|
11228
|
+
sources = DEFAULT_SOURCES,
|
|
11229
|
+
sourceAvatars,
|
|
11230
|
+
theme = "auto",
|
|
11231
|
+
size = "md",
|
|
11232
|
+
glowIntensity = "medium",
|
|
11233
|
+
speed = "normal",
|
|
11234
|
+
spinMode = "always",
|
|
11235
|
+
isSpinning: controlledSpinning,
|
|
11236
|
+
autoCycle = false,
|
|
11237
|
+
cycleInterval = 2400,
|
|
11238
|
+
className,
|
|
11239
|
+
onClick,
|
|
11240
|
+
onMouseEnter,
|
|
11241
|
+
onMouseLeave,
|
|
11242
|
+
...props
|
|
11243
|
+
}, ref) => {
|
|
11244
|
+
const isControlled = controlledSearching !== void 0;
|
|
11245
|
+
const [uncontrolledSearching, setUncontrolledSearching] = React45.useState(defaultSearching);
|
|
11246
|
+
const active = isControlled ? controlledSearching : uncontrolledSearching;
|
|
11247
|
+
const [isHovered, setIsHovered] = React45.useState(false);
|
|
11248
|
+
const instanceId = React45.useId().replace(/:/g, "");
|
|
11249
|
+
const activeSources = React45.useMemo(() => {
|
|
11250
|
+
if (sourceAvatars && sourceAvatars.length > 0) {
|
|
11251
|
+
return sourceAvatars.map((url, i) => ({
|
|
11252
|
+
id: `avatar-${i}`,
|
|
11253
|
+
avatarUrl: url,
|
|
11254
|
+
label: `Source ${i + 1}`,
|
|
11255
|
+
type: "custom"
|
|
11256
|
+
}));
|
|
11257
|
+
}
|
|
11258
|
+
return sources;
|
|
11259
|
+
}, [sourceAvatars, sources]);
|
|
11260
|
+
const shouldSpin = React45.useMemo(() => {
|
|
11261
|
+
if (controlledSpinning !== void 0) return controlledSpinning;
|
|
11262
|
+
if (spinMode === "never") return false;
|
|
11263
|
+
if (spinMode === "searching") return active;
|
|
11264
|
+
if (spinMode === "hover") return isHovered;
|
|
11265
|
+
return true;
|
|
11266
|
+
}, [controlledSpinning, spinMode, isHovered, active]);
|
|
11267
|
+
React45.useEffect(() => {
|
|
11268
|
+
if (!autoCycle) return;
|
|
11269
|
+
const interval = setInterval(() => {
|
|
11270
|
+
if (isControlled) {
|
|
11271
|
+
onToggle?.(!active);
|
|
11272
|
+
} else {
|
|
11273
|
+
setUncontrolledSearching((prev) => {
|
|
11274
|
+
const next = !prev;
|
|
11275
|
+
onToggle?.(next);
|
|
11276
|
+
return next;
|
|
11277
|
+
});
|
|
11278
|
+
}
|
|
11279
|
+
}, cycleInterval);
|
|
11280
|
+
return () => clearInterval(interval);
|
|
11281
|
+
}, [autoCycle, cycleInterval, active, isControlled, onToggle]);
|
|
11282
|
+
const handleToggle = (e) => {
|
|
11283
|
+
onClick?.(e);
|
|
11284
|
+
if (!isControlled) {
|
|
11285
|
+
setUncontrolledSearching(!active);
|
|
11286
|
+
}
|
|
11287
|
+
onToggle?.(!active);
|
|
11288
|
+
};
|
|
11289
|
+
const sizeStyle = SIZE_CONFIG[size] || SIZE_CONFIG.md;
|
|
11290
|
+
const animationDuration = SPEED_MAP[speed] || SPEED_MAP.normal;
|
|
11291
|
+
const glowAlpha = GLOW_OPACITY[glowIntensity] ?? GLOW_OPACITY.medium;
|
|
11292
|
+
const bodyThemeClass = theme === "light" ? "bg-white text-slate-900 border-white/60 shadow-sm" : theme === "dark" ? "bg-[#090d16] text-white border-white/10 shadow-lg shadow-black/40" : "bg-white text-slate-900 dark:bg-[#090d16] dark:text-white border-white/60 dark:border-white/10 shadow-sm dark:shadow-black/40";
|
|
11293
|
+
const dotsColorClass = theme === "light" ? "bg-slate-900" : theme === "dark" ? "bg-white" : "bg-slate-900 dark:bg-white";
|
|
11294
|
+
return /* @__PURE__ */ (0, import_jsx_runtime58.jsxs)(
|
|
11295
|
+
"div",
|
|
11296
|
+
{
|
|
11297
|
+
ref,
|
|
11298
|
+
onClick: handleToggle,
|
|
11299
|
+
onMouseEnter: (e) => {
|
|
11300
|
+
setIsHovered(true);
|
|
11301
|
+
onMouseEnter?.(e);
|
|
11302
|
+
},
|
|
11303
|
+
onMouseLeave: (e) => {
|
|
11304
|
+
setIsHovered(false);
|
|
11305
|
+
onMouseLeave?.(e);
|
|
11306
|
+
},
|
|
11307
|
+
role: "button",
|
|
11308
|
+
tabIndex: 0,
|
|
11309
|
+
"aria-pressed": active,
|
|
11310
|
+
"aria-label": active ? `Searching: ${searchLabel}` : "Activate AI Search",
|
|
11311
|
+
onKeyDown: (e) => {
|
|
11312
|
+
if (e.key === "Enter" || e.key === " ") {
|
|
11313
|
+
e.preventDefault();
|
|
11314
|
+
handleToggle(e);
|
|
11315
|
+
}
|
|
11316
|
+
},
|
|
11317
|
+
className: cn(
|
|
11318
|
+
"relative inline-flex items-center justify-center cursor-pointer select-none isolate outline-none group",
|
|
11319
|
+
"transition-transform duration-200 ease-out active:scale-[0.96] focus-visible:ring-2 focus-visible:ring-primary/50 focus-visible:ring-offset-2",
|
|
11320
|
+
className
|
|
11321
|
+
),
|
|
11322
|
+
...props,
|
|
11323
|
+
children: [
|
|
11324
|
+
/* @__PURE__ */ (0, import_jsx_runtime58.jsx)("style", { dangerouslySetInnerHTML: {
|
|
11325
|
+
__html: `
|
|
11326
|
+
@property --aurora-deg {
|
|
11327
|
+
syntax: '<angle>';
|
|
11328
|
+
initial-value: 0deg;
|
|
11329
|
+
inherits: false;
|
|
11330
|
+
}
|
|
11331
|
+
@keyframes spinAurora {
|
|
11332
|
+
from {
|
|
11333
|
+
--aurora-deg: 0deg;
|
|
11334
|
+
}
|
|
11335
|
+
to {
|
|
11336
|
+
--aurora-deg: 360deg;
|
|
11337
|
+
}
|
|
11338
|
+
}
|
|
11339
|
+
@keyframes dotPulse {
|
|
11340
|
+
0%, 80%, 100% {
|
|
11341
|
+
opacity: 0.35;
|
|
11342
|
+
transform: scale(0.75);
|
|
11343
|
+
}
|
|
11344
|
+
40% {
|
|
11345
|
+
opacity: 1;
|
|
11346
|
+
transform: scale(1.15);
|
|
11347
|
+
}
|
|
11348
|
+
}
|
|
11349
|
+
`
|
|
11350
|
+
} }),
|
|
11351
|
+
glowIntensity !== "none" && /* @__PURE__ */ (0, import_jsx_runtime58.jsx)(
|
|
11352
|
+
"div",
|
|
11353
|
+
{
|
|
11354
|
+
className: "absolute -inset-1.5 rounded-full pointer-events-none blur-md z-0 transition-opacity duration-300",
|
|
11355
|
+
style: {
|
|
11356
|
+
opacity: glowAlpha,
|
|
11357
|
+
background: `conic-gradient(
|
|
11358
|
+
from var(--aurora-deg, 0deg) at 50% 50%,
|
|
11359
|
+
transparent 0deg,
|
|
11360
|
+
rgba(59, 130, 246, 0.75) 60deg,
|
|
11361
|
+
rgba(139, 92, 246, 0.9) 110deg,
|
|
11362
|
+
rgba(236, 72, 153, 0.95) 160deg,
|
|
11363
|
+
rgba(244, 63, 94, 0.8) 200deg,
|
|
11364
|
+
transparent 250deg,
|
|
11365
|
+
transparent 360deg
|
|
11366
|
+
)`,
|
|
11367
|
+
animation: shouldSpin ? `spinAurora ${animationDuration} linear infinite` : void 0
|
|
11368
|
+
}
|
|
11369
|
+
}
|
|
11370
|
+
),
|
|
11371
|
+
/* @__PURE__ */ (0, import_jsx_runtime58.jsx)(
|
|
11372
|
+
"div",
|
|
11373
|
+
{
|
|
11374
|
+
className: "relative z-10 p-[1.5px] rounded-full transition-shadow duration-300 shadow-sm",
|
|
11375
|
+
style: {
|
|
11376
|
+
background: `conic-gradient(
|
|
11377
|
+
from var(--aurora-deg, 0deg) at 50% 50%,
|
|
11378
|
+
rgba(226, 232, 240, 0.8) 0deg,
|
|
11379
|
+
rgba(59, 130, 246, 0.85) 60deg,
|
|
11380
|
+
rgba(139, 92, 246, 1) 110deg,
|
|
11381
|
+
rgba(236, 72, 153, 1) 160deg,
|
|
11382
|
+
rgba(244, 63, 94, 0.85) 200deg,
|
|
11383
|
+
rgba(226, 232, 240, 0.6) 260deg,
|
|
11384
|
+
rgba(226, 232, 240, 0.8) 360deg
|
|
11385
|
+
)`,
|
|
11386
|
+
animation: shouldSpin ? `spinAurora ${animationDuration} linear infinite` : void 0
|
|
11387
|
+
},
|
|
11388
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime58.jsxs)(
|
|
11389
|
+
"div",
|
|
11390
|
+
{
|
|
11391
|
+
className: cn(
|
|
11392
|
+
"relative z-20 rounded-full flex items-center justify-center overflow-hidden border",
|
|
11393
|
+
sizeStyle.height,
|
|
11394
|
+
active ? cn(sizeStyle.paddingSearch, sizeStyle.minWidthSearch) : sizeStyle.paddingDots,
|
|
11395
|
+
bodyThemeClass,
|
|
11396
|
+
"transition-all duration-500 [transition-timing-function:cubic-bezier(0.16,1,0.3,1)]"
|
|
11397
|
+
),
|
|
11398
|
+
children: [
|
|
11399
|
+
/* @__PURE__ */ (0, import_jsx_runtime58.jsx)(
|
|
11400
|
+
"div",
|
|
11401
|
+
{
|
|
11402
|
+
className: cn(
|
|
11403
|
+
"flex items-center",
|
|
11404
|
+
sizeStyle.dotGap,
|
|
11405
|
+
"transition-all duration-400 [transition-timing-function:cubic-bezier(0.16,1,0.3,1)]",
|
|
11406
|
+
active ? "opacity-0 scale-50 -translate-y-2 pointer-events-none absolute" : "opacity-100 scale-100 translate-y-0"
|
|
11407
|
+
),
|
|
11408
|
+
children: [0, 1, 2].map((idx) => /* @__PURE__ */ (0, import_jsx_runtime58.jsx)(
|
|
11409
|
+
"span",
|
|
11410
|
+
{
|
|
11411
|
+
className: cn("rounded-full inline-block", sizeStyle.dotSize, dotsColorClass),
|
|
11412
|
+
style: {
|
|
11413
|
+
animation: `dotPulse 1.4s ease-in-out infinite both`,
|
|
11414
|
+
animationDelay: `${idx === 0 ? -0.32 : idx === 1 ? -0.16 : 0}s`
|
|
11415
|
+
}
|
|
11416
|
+
},
|
|
11417
|
+
idx
|
|
11418
|
+
))
|
|
11419
|
+
}
|
|
11420
|
+
),
|
|
11421
|
+
/* @__PURE__ */ (0, import_jsx_runtime58.jsxs)(
|
|
11422
|
+
"div",
|
|
11423
|
+
{
|
|
11424
|
+
className: cn(
|
|
11425
|
+
"flex items-center gap-2.5 whitespace-nowrap",
|
|
11426
|
+
"transition-all duration-400 [transition-timing-function:cubic-bezier(0.16,1,0.3,1)]",
|
|
11427
|
+
active ? "opacity-100 scale-100 translate-y-0" : "opacity-0 scale-90 translate-y-2 pointer-events-none absolute"
|
|
11428
|
+
),
|
|
11429
|
+
children: [
|
|
11430
|
+
/* @__PURE__ */ (0, import_jsx_runtime58.jsx)("span", { className: cn("font-medium tracking-tight", sizeStyle.fontSize), children: searchLabel }),
|
|
11431
|
+
activeSources && activeSources.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime58.jsx)("div", { className: "inline-flex items-center pl-0.5", children: activeSources.map((src, i) => {
|
|
11432
|
+
const isFirst = i === 0;
|
|
11433
|
+
return /* @__PURE__ */ (0, import_jsx_runtime58.jsx)(
|
|
11434
|
+
"div",
|
|
11435
|
+
{
|
|
11436
|
+
title: src.label || src.id,
|
|
11437
|
+
className: cn(
|
|
11438
|
+
"rounded-full border-[1.5px] border-white dark:border-zinc-900 flex items-center justify-center shrink-0 shadow-xs overflow-hidden",
|
|
11439
|
+
sizeStyle.badgeSize,
|
|
11440
|
+
!isFirst && sizeStyle.badgeMargin
|
|
11441
|
+
),
|
|
11442
|
+
style: {
|
|
11443
|
+
backgroundColor: src.type === "globe" ? "#0b1120" : src.type === "github" ? "#ffffff" : src.type === "claude" ? "#d97757" : src.type === "chatgpt" ? "#10a37f" : src.type === "perplexity" ? "#1fb8cd" : src.type === "custom" && src.bg ? src.bg : void 0,
|
|
11444
|
+
background: src.type === "gradient" ? "linear-gradient(135deg, #06b6d4 45%, #3b82f6 55%)" : void 0
|
|
11445
|
+
},
|
|
11446
|
+
children: src.avatarUrl ? /* @__PURE__ */ (0, import_jsx_runtime58.jsx)(
|
|
11447
|
+
"img",
|
|
11448
|
+
{
|
|
11449
|
+
src: src.avatarUrl,
|
|
11450
|
+
alt: src.label || src.id,
|
|
11451
|
+
className: "w-full h-full object-cover"
|
|
11452
|
+
}
|
|
11453
|
+
) : src.icon ? src.icon : src.type === "globe" ? /* @__PURE__ */ (0, import_jsx_runtime58.jsx)(import_lucide_react34.Globe, { className: "w-3 h-3 text-sky-400 stroke-[2.5]" }) : src.type === "github" ? /* @__PURE__ */ (0, import_jsx_runtime58.jsx)("svg", { className: "w-3.5 h-3.5 fill-[#181717]", viewBox: "0 0 24 24", children: /* @__PURE__ */ (0, import_jsx_runtime58.jsx)("path", { d: "M12 0C5.37 0 0 5.37 0 12c0 5.31 3.435 9.795 8.205 11.385.6.105.825-.255.825-.57 0-.285-.015-1.23-.015-2.235-3.015.555-3.795-.735-4.035-1.41-.135-.345-.72-1.41-1.23-1.695-.42-.225-1.02-.78-.015-.795.945-.015 1.62.87 1.845 1.23 1.08 1.815 2.805 1.305 3.495.99.105-.78.42-1.305.765-1.605-2.67-.3-5.46-1.335-5.46-5.925 0-1.305.465-2.385 1.23-3.225-.12-.3-.54-1.53.12-3.18 0 0 1.005-.315 3.3 1.23.96-.27 1.98-.405 3-.405s2.04.135 3 .405c2.295-1.56 3.3-1.23 3.3-1.23.66 1.65.24 2.88.12 3.18.765.84 1.23 1.905 1.23 3.225 0 4.605-2.805 5.625-5.475 5.925.435.375.81 1.095.81 2.22 0 1.605-.015 2.895-.015 3.3 0 .315.225.69.825.57A12.02 12.02 0 0 0 24 12c0-6.63-5.37-12-12-12z" }) }) : src.type === "claude" ? /* @__PURE__ */ (0, import_jsx_runtime58.jsx)(import_lucide_react34.Sparkles, { className: "w-2.5 h-2.5 text-white" }) : src.type === "chatgpt" ? /* @__PURE__ */ (0, import_jsx_runtime58.jsx)("div", { className: "w-2 h-2 rounded-full bg-white" }) : src.type === "perplexity" ? /* @__PURE__ */ (0, import_jsx_runtime58.jsx)(import_lucide_react34.Sparkles, { className: "w-2.5 h-2.5 text-white" }) : src.initials ? /* @__PURE__ */ (0, import_jsx_runtime58.jsx)("span", { className: "text-[8px] font-bold text-white uppercase", children: src.initials }) : null
|
|
11454
|
+
},
|
|
11455
|
+
src.id || i
|
|
11456
|
+
);
|
|
11457
|
+
}) })
|
|
11458
|
+
]
|
|
11459
|
+
}
|
|
11460
|
+
)
|
|
11461
|
+
]
|
|
11462
|
+
}
|
|
11463
|
+
)
|
|
11464
|
+
}
|
|
11465
|
+
)
|
|
11466
|
+
]
|
|
11467
|
+
}
|
|
11468
|
+
);
|
|
11469
|
+
}
|
|
11470
|
+
);
|
|
11471
|
+
AuroraSearchPill.displayName = "AuroraSearchPill";
|
|
11472
|
+
|
|
10818
11473
|
// src/components/dock.tsx
|
|
10819
11474
|
var import_react = require("react");
|
|
10820
11475
|
var import_framer_motion37 = require("framer-motion");
|
|
10821
|
-
var
|
|
11476
|
+
var import_jsx_runtime59 = require("react/jsx-runtime");
|
|
10822
11477
|
function Dock({
|
|
10823
11478
|
items,
|
|
10824
11479
|
className,
|
|
@@ -10828,7 +11483,7 @@ function Dock({
|
|
|
10828
11483
|
const mouseX = (0, import_framer_motion37.useMotionValue)(Infinity);
|
|
10829
11484
|
const numMagnification = Number(magnification) || 60;
|
|
10830
11485
|
const numDistance = Number(distance) || 140;
|
|
10831
|
-
return /* @__PURE__ */ (0,
|
|
11486
|
+
return /* @__PURE__ */ (0, import_jsx_runtime59.jsx)(
|
|
10832
11487
|
import_framer_motion37.motion.div,
|
|
10833
11488
|
{
|
|
10834
11489
|
onMouseMove: (e) => mouseX.set(e.clientX),
|
|
@@ -10837,7 +11492,7 @@ function Dock({
|
|
|
10837
11492
|
"mx-auto flex h-14 items-end gap-3 rounded-2xl border border-border bg-background/80 px-4 pb-2 backdrop-blur-md",
|
|
10838
11493
|
className
|
|
10839
11494
|
),
|
|
10840
|
-
children: items.map((item, i) => /* @__PURE__ */ (0,
|
|
11495
|
+
children: items.map((item, i) => /* @__PURE__ */ (0, import_jsx_runtime59.jsx)(DockIcon, { mouseX, magnification: numMagnification, distance: numDistance, ...item }, i))
|
|
10841
11496
|
}
|
|
10842
11497
|
);
|
|
10843
11498
|
}
|
|
@@ -10866,7 +11521,7 @@ function DockIcon({
|
|
|
10866
11521
|
stiffness: 150,
|
|
10867
11522
|
damping: 12
|
|
10868
11523
|
});
|
|
10869
|
-
return /* @__PURE__ */ (0,
|
|
11524
|
+
return /* @__PURE__ */ (0, import_jsx_runtime59.jsxs)(
|
|
10870
11525
|
import_framer_motion37.motion.div,
|
|
10871
11526
|
{
|
|
10872
11527
|
ref,
|
|
@@ -10875,8 +11530,8 @@ function DockIcon({
|
|
|
10875
11530
|
onClick,
|
|
10876
11531
|
title: label,
|
|
10877
11532
|
children: [
|
|
10878
|
-
/* @__PURE__ */ (0,
|
|
10879
|
-
/* @__PURE__ */ (0,
|
|
11533
|
+
/* @__PURE__ */ (0, import_jsx_runtime59.jsx)("div", { className: "flex items-center justify-center text-foreground", children: icon }),
|
|
11534
|
+
/* @__PURE__ */ (0, import_jsx_runtime59.jsx)("span", { className: "absolute -top-8 left-1/2 -translate-x-1/2 rounded-md bg-popover px-2 py-1 text-xs text-popover-foreground border border-border opacity-0 group-hover:opacity-100 transition-opacity whitespace-nowrap shadow-lg", children: label })
|
|
10880
11535
|
]
|
|
10881
11536
|
}
|
|
10882
11537
|
);
|
|
@@ -10885,8 +11540,8 @@ function DockIcon({
|
|
|
10885
11540
|
// src/components/dark-mode.tsx
|
|
10886
11541
|
var import_react2 = require("react");
|
|
10887
11542
|
var import_framer_motion38 = require("framer-motion");
|
|
10888
|
-
var
|
|
10889
|
-
var
|
|
11543
|
+
var import_lucide_react35 = require("lucide-react");
|
|
11544
|
+
var import_jsx_runtime60 = require("react/jsx-runtime");
|
|
10890
11545
|
function DarkModeToggle({
|
|
10891
11546
|
theme: controlledTheme,
|
|
10892
11547
|
variant = "pill",
|
|
@@ -10912,7 +11567,7 @@ function DarkModeToggle({
|
|
|
10912
11567
|
};
|
|
10913
11568
|
const isDark = activeTheme === "dark";
|
|
10914
11569
|
if (variant === "icon") {
|
|
10915
|
-
return /* @__PURE__ */ (0,
|
|
11570
|
+
return /* @__PURE__ */ (0, import_jsx_runtime60.jsx)(
|
|
10916
11571
|
"button",
|
|
10917
11572
|
{
|
|
10918
11573
|
type: "button",
|
|
@@ -10924,14 +11579,14 @@ function DarkModeToggle({
|
|
|
10924
11579
|
),
|
|
10925
11580
|
title: `Switch to ${isDark ? "light" : "dark"} theme`,
|
|
10926
11581
|
"aria-label": "Toggle theme",
|
|
10927
|
-
children: /* @__PURE__ */ (0,
|
|
11582
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime60.jsx)(
|
|
10928
11583
|
import_framer_motion38.motion.div,
|
|
10929
11584
|
{
|
|
10930
11585
|
initial: { rotate: -90, scale: 0.8, opacity: 0 },
|
|
10931
11586
|
animate: { rotate: 0, scale: 1, opacity: 1 },
|
|
10932
11587
|
exit: { rotate: 90, scale: 0.8, opacity: 0 },
|
|
10933
11588
|
transition: { duration: 0.2 },
|
|
10934
|
-
children: isDark ? /* @__PURE__ */ (0,
|
|
11589
|
+
children: isDark ? /* @__PURE__ */ (0, import_jsx_runtime60.jsx)(import_lucide_react35.Moon, { className: size === "sm" ? "w-3.5 h-3.5 text-primary" : "w-4.5 h-4.5 text-primary" }) : /* @__PURE__ */ (0, import_jsx_runtime60.jsx)(import_lucide_react35.Sun, { className: size === "sm" ? "w-3.5 h-3.5 text-amber-500" : "w-4.5 h-4.5 text-amber-500" })
|
|
10935
11590
|
},
|
|
10936
11591
|
isDark ? "dark" : "light"
|
|
10937
11592
|
)
|
|
@@ -10939,7 +11594,7 @@ function DarkModeToggle({
|
|
|
10939
11594
|
);
|
|
10940
11595
|
}
|
|
10941
11596
|
if (variant === "segmented") {
|
|
10942
|
-
return /* @__PURE__ */ (0,
|
|
11597
|
+
return /* @__PURE__ */ (0, import_jsx_runtime60.jsx)(
|
|
10943
11598
|
"div",
|
|
10944
11599
|
{
|
|
10945
11600
|
className: cn(
|
|
@@ -10948,7 +11603,7 @@ function DarkModeToggle({
|
|
|
10948
11603
|
),
|
|
10949
11604
|
children: ["light", "dark", "system"].map((t) => {
|
|
10950
11605
|
const isActive = activeTheme === t;
|
|
10951
|
-
return /* @__PURE__ */ (0,
|
|
11606
|
+
return /* @__PURE__ */ (0, import_jsx_runtime60.jsxs)(
|
|
10952
11607
|
"button",
|
|
10953
11608
|
{
|
|
10954
11609
|
type: "button",
|
|
@@ -10958,10 +11613,10 @@ function DarkModeToggle({
|
|
|
10958
11613
|
isActive ? "bg-card text-foreground shadow-xs border border-border/60 font-semibold" : "text-muted-foreground hover:text-foreground"
|
|
10959
11614
|
),
|
|
10960
11615
|
children: [
|
|
10961
|
-
t === "light" && /* @__PURE__ */ (0,
|
|
10962
|
-
t === "dark" && /* @__PURE__ */ (0,
|
|
10963
|
-
t === "system" && /* @__PURE__ */ (0,
|
|
10964
|
-
showLabel && /* @__PURE__ */ (0,
|
|
11616
|
+
t === "light" && /* @__PURE__ */ (0, import_jsx_runtime60.jsx)(import_lucide_react35.Sun, { className: "w-3.5 h-3.5 text-amber-500" }),
|
|
11617
|
+
t === "dark" && /* @__PURE__ */ (0, import_jsx_runtime60.jsx)(import_lucide_react35.Moon, { className: "w-3.5 h-3.5 text-primary" }),
|
|
11618
|
+
t === "system" && /* @__PURE__ */ (0, import_jsx_runtime60.jsx)(import_lucide_react35.Monitor, { className: "w-3.5 h-3.5 text-muted-foreground" }),
|
|
11619
|
+
showLabel && /* @__PURE__ */ (0, import_jsx_runtime60.jsx)("span", { children: t })
|
|
10965
11620
|
]
|
|
10966
11621
|
},
|
|
10967
11622
|
t
|
|
@@ -10971,8 +11626,8 @@ function DarkModeToggle({
|
|
|
10971
11626
|
);
|
|
10972
11627
|
}
|
|
10973
11628
|
const dimensions = size === "sm" ? { track: "w-11 h-6", thumb: "w-4.5 h-4.5", icon: "w-2.5 h-2.5" } : size === "lg" ? { track: "w-16 h-9", thumb: "w-7 h-7", icon: "w-4 h-4" } : { track: "w-14 h-7.5", thumb: "w-5.5 h-5.5", icon: "w-3 h-3" };
|
|
10974
|
-
return /* @__PURE__ */ (0,
|
|
10975
|
-
/* @__PURE__ */ (0,
|
|
11629
|
+
return /* @__PURE__ */ (0, import_jsx_runtime60.jsxs)("div", { className: cn("inline-flex items-center gap-3", className), children: [
|
|
11630
|
+
/* @__PURE__ */ (0, import_jsx_runtime60.jsx)(
|
|
10976
11631
|
"button",
|
|
10977
11632
|
{
|
|
10978
11633
|
type: "button",
|
|
@@ -10984,7 +11639,7 @@ function DarkModeToggle({
|
|
|
10984
11639
|
),
|
|
10985
11640
|
title: `Switch to ${isDark ? "light" : "dark"} mode`,
|
|
10986
11641
|
"aria-label": "Toggle dark mode",
|
|
10987
|
-
children: /* @__PURE__ */ (0,
|
|
11642
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime60.jsx)(
|
|
10988
11643
|
import_framer_motion38.motion.div,
|
|
10989
11644
|
{
|
|
10990
11645
|
animate: {
|
|
@@ -10995,12 +11650,12 @@ function DarkModeToggle({
|
|
|
10995
11650
|
"rounded-full bg-white shadow-md flex items-center justify-center transition-colors",
|
|
10996
11651
|
dimensions.thumb
|
|
10997
11652
|
),
|
|
10998
|
-
children: isDark ? /* @__PURE__ */ (0,
|
|
11653
|
+
children: isDark ? /* @__PURE__ */ (0, import_jsx_runtime60.jsx)(import_lucide_react35.Moon, { className: cn(dimensions.icon, "text-zinc-900") }) : /* @__PURE__ */ (0, import_jsx_runtime60.jsx)(import_lucide_react35.Sun, { className: cn(dimensions.icon, "text-amber-500") })
|
|
10999
11654
|
}
|
|
11000
11655
|
)
|
|
11001
11656
|
}
|
|
11002
11657
|
),
|
|
11003
|
-
showLabel && /* @__PURE__ */ (0,
|
|
11658
|
+
showLabel && /* @__PURE__ */ (0, import_jsx_runtime60.jsxs)("span", { className: "text-xs font-semibold text-foreground/90 capitalize select-none", children: [
|
|
11004
11659
|
activeTheme,
|
|
11005
11660
|
" mode"
|
|
11006
11661
|
] })
|
|
@@ -11035,6 +11690,7 @@ function DarkModeToggle({
|
|
|
11035
11690
|
AudioWaveform,
|
|
11036
11691
|
AuroraBorderCard,
|
|
11037
11692
|
AuroraBorderFX,
|
|
11693
|
+
AuroraSearchPill,
|
|
11038
11694
|
AuthenticationLayout,
|
|
11039
11695
|
Avatar,
|
|
11040
11696
|
AvatarFallback,
|
|
@@ -11297,6 +11953,7 @@ function DarkModeToggle({
|
|
|
11297
11953
|
RangeSliderInput,
|
|
11298
11954
|
RateLimitAlert,
|
|
11299
11955
|
Rating,
|
|
11956
|
+
RatingBreakdown,
|
|
11300
11957
|
RatingStars,
|
|
11301
11958
|
ReactionAdd,
|
|
11302
11959
|
ReactionBar,
|
|
@@ -11308,6 +11965,7 @@ function DarkModeToggle({
|
|
|
11308
11965
|
RetroGrid,
|
|
11309
11966
|
RevealClip,
|
|
11310
11967
|
RevenueChartWidget,
|
|
11968
|
+
ReviewCard,
|
|
11311
11969
|
ReviewStars,
|
|
11312
11970
|
RichTooltip,
|
|
11313
11971
|
RingLoader,
|