nvis-fe-cms-libs 2.0.6 → 2.0.8

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.
@@ -3394,18 +3394,52 @@ var __async = (__this, __arguments, generator) => {
3394
3394
  ] })
3395
3395
  ] });
3396
3396
  };
3397
- const MindMapNode = ({ id, icon: Icon2, text, color, position, delay = 0, onDragStart, isDragging, onClick, description }) => {
3397
+ const MindMapNode = ({ id, icon: Icon2, text, color, position, delay = 0, onDragStart, isDragging, onClick, description, isDarkMode }) => {
3398
3398
  const [isHovered, setIsHovered] = require$$0.useState(false);
3399
3399
  const [dragStartPos, setDragStartPos] = require$$0.useState(null);
3400
3400
  const [hasMoved, setHasMoved] = require$$0.useState(false);
3401
- const colorClasses = {
3402
- blue: "bg-gradient-to-br from-blue-600 to-blue-700 hover:from-blue-500 hover:to-blue-600 border-blue-400/50 shadow-blue-500/30",
3403
- teal: "bg-gradient-to-br from-teal-600 to-teal-700 hover:from-teal-500 hover:to-teal-600 border-teal-400/50 shadow-teal-500/30",
3404
- purple: "bg-gradient-to-br from-purple-600 to-purple-700 hover:from-purple-500 hover:to-purple-600 border-purple-400/50 shadow-purple-500/30",
3405
- orange: "bg-gradient-to-br from-orange-500 to-orange-600 hover:from-orange-400 hover:to-orange-500 border-orange-300/50 shadow-orange-500/30",
3406
- cyan: "bg-gradient-to-br from-cyan-600 to-cyan-700 hover:from-cyan-500 hover:to-cyan-600 border-cyan-400/50 shadow-cyan-500/30",
3407
- indigo: "bg-gradient-to-br from-indigo-600 to-indigo-700 hover:from-indigo-500 hover:to-indigo-600 border-indigo-400/50 shadow-indigo-500/30"
3401
+ const getColorStyles = (colorName) => {
3402
+ const styles = {
3403
+ blue: {
3404
+ gradient: "linear-gradient(to bottom right, var(--brand-primary), var(--brand-primary))",
3405
+ gradientHover: "linear-gradient(to bottom right, var(--gradient-brand-soft-start), var(--gradient-brand-soft-end))",
3406
+ border: "var(--brand-primary)",
3407
+ shadowColor: "var(--brand-primary)"
3408
+ },
3409
+ teal: {
3410
+ gradient: "linear-gradient(to bottom right, var(--gradient-brand-soft-start), var(--gradient-brand-soft-end))",
3411
+ gradientHover: "linear-gradient(to bottom right, var(--gradient-brand-strong-start), var(--gradient-brand-strong-end))",
3412
+ border: "var(--gradient-brand-soft-start)",
3413
+ shadowColor: "var(--gradient-brand-soft-start)"
3414
+ },
3415
+ purple: {
3416
+ gradient: "linear-gradient(to bottom right, var(--brand-secondary), var(--gradient-accent-soft-start))",
3417
+ gradientHover: "linear-gradient(to bottom right, var(--gradient-accent-soft-start), var(--gradient-accent-soft-end))",
3418
+ border: "var(--brand-secondary)",
3419
+ shadowColor: "var(--brand-secondary)"
3420
+ },
3421
+ orange: {
3422
+ gradient: "linear-gradient(to bottom right, var(--gradient-accent-strong-start), var(--gradient-accent-strong-end))",
3423
+ gradientHover: "linear-gradient(to bottom right, var(--gradient-accent-soft-start), var(--gradient-accent-soft-end))",
3424
+ border: "var(--gradient-accent-strong-start)",
3425
+ shadowColor: "var(--gradient-accent-strong-start)"
3426
+ },
3427
+ cyan: {
3428
+ gradient: "linear-gradient(to bottom right, var(--gradient-brand-strong-start), var(--gradient-brand-strong-end))",
3429
+ gradientHover: "linear-gradient(to bottom right, var(--gradient-brand-soft-start), var(--gradient-brand-soft-end))",
3430
+ border: "var(--gradient-brand-strong-start)",
3431
+ shadowColor: "var(--gradient-brand-strong-start)"
3432
+ },
3433
+ indigo: {
3434
+ gradient: "linear-gradient(to bottom right, var(--gradient-accent-soft-start), var(--gradient-accent-soft-end))",
3435
+ gradientHover: "linear-gradient(to bottom right, var(--gradient-accent-strong-start), var(--gradient-accent-strong-end))",
3436
+ border: "var(--gradient-accent-soft-start)",
3437
+ shadowColor: "var(--gradient-accent-soft-start)"
3438
+ }
3439
+ };
3440
+ return styles[colorName] || styles.blue;
3408
3441
  };
3442
+ const colorStyle = getColorStyles(color);
3409
3443
  const handleMouseDown = (e) => {
3410
3444
  setDragStartPos({ x: e.clientX, y: e.clientY });
3411
3445
  setHasMoved(false);
@@ -3488,12 +3522,45 @@ var __async = (__this, __arguments, generator) => {
3488
3522
  onTouchMove: handleTouchMove,
3489
3523
  onTouchEnd: handleTouchEnd,
3490
3524
  children: [
3491
- /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: `${colorClasses[color]} backdrop-blur-md px-4 py-2.5 rounded-2xl shadow-2xl border-2 flex items-center gap-2.5 cursor-pointer transform transition-all duration-300 ${isHovered || isDragging ? "scale-110 shadow-2xl brightness-110" : ""} ${isDragging ? "rotate-2" : ""}`, children: [
3492
- /* @__PURE__ */ jsxRuntimeExports.jsx(Icon2, { className: "w-4 h-4 text-white flex-shrink-0" }),
3493
- /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "text-white font-medium whitespace-nowrap text-xs sm:text-sm", children: text })
3494
- ] }),
3495
- isDragging && /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "absolute inset-0 bg-white/10 rounded-2xl blur-xl animate-pulse", style: { transform: "scale(1.5)" } }),
3496
- (isHovered || isDragging) && description && /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "absolute top-full left-1/2 -translate-x-1/2 mt-2 px-3 py-2 bg-slate-900/95 text-white text-xs rounded-lg shadow-xl border border-slate-700 whitespace-nowrap z-50 max-w-xs", children: description })
3525
+ /* @__PURE__ */ jsxRuntimeExports.jsxs(
3526
+ "div",
3527
+ {
3528
+ className: "backdrop-blur-md px-4 py-2.5 rounded-2xl shadow-2xl border-2 flex items-center gap-2.5 cursor-pointer transform transition-all duration-300",
3529
+ style: {
3530
+ background: isHovered || isDragging ? colorStyle.gradientHover : colorStyle.gradient,
3531
+ borderColor: colorStyle.border,
3532
+ boxShadow: `0 10px 40px ${colorStyle.shadowColor}`,
3533
+ transform: isHovered || isDragging ? "scale(1.1)" : "scale(1)",
3534
+ filter: isHovered || isDragging ? "brightness(1.1)" : "brightness(1)",
3535
+ rotate: isDragging ? "2deg" : "0deg"
3536
+ },
3537
+ children: [
3538
+ /* @__PURE__ */ jsxRuntimeExports.jsx(Icon2, { className: "w-4 h-4 flex-shrink-0 text-inverse" }),
3539
+ /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "text-inverse text-small whitespace-nowrap", children: text })
3540
+ ]
3541
+ }
3542
+ ),
3543
+ isDragging && /* @__PURE__ */ jsxRuntimeExports.jsx(
3544
+ "div",
3545
+ {
3546
+ className: "absolute inset-0 rounded-2xl blur-xl animate-pulse",
3547
+ style: {
3548
+ background: "rgba(255, 255, 255, 0.1)",
3549
+ transform: "scale(1.5)"
3550
+ }
3551
+ }
3552
+ ),
3553
+ (isHovered || isDragging) && description && /* @__PURE__ */ jsxRuntimeExports.jsx(
3554
+ "div",
3555
+ {
3556
+ className: `absolute top-full left-1/2 -translate-x-1/2 mt-2 px-3 py-2 text-caption rounded-lg shadow-xl border whitespace-nowrap z-50 max-w-xs ${isDarkMode ? "bg-surface text-inverse" : "bg-body text-main"}`,
3557
+ style: {
3558
+ borderColor: "var(--border-color)",
3559
+ opacity: 0.95
3560
+ },
3561
+ children: description
3562
+ }
3563
+ )
3497
3564
  ]
3498
3565
  }
3499
3566
  );
@@ -3714,49 +3781,108 @@ var __async = (__this, __arguments, generator) => {
3714
3781
  "div",
3715
3782
  {
3716
3783
  ref: containerRef,
3717
- className: `mind-map-container relative w-full h-screen ${isDarkMode ? "bg-gradient-to-br from-slate-950 via-indigo-950 to-purple-950" : "bg-gradient-to-br from-blue-50 via-indigo-50 to-purple-50"} overflow-hidden transition-colors duration-300`,
3718
- style: { touchAction: "none" },
3784
+ className: "mind-map-container relative w-full h-screen overflow-hidden bg-section-soft",
3785
+ style: {
3786
+ touchAction: "none"
3787
+ },
3719
3788
  children: [
3720
- /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: `absolute inset-0 ${isDarkMode ? "opacity-30" : "opacity-20"}`, children: [
3721
- /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: `absolute inset-0 ${isDarkMode ? "bg-gradient-to-tr from-blue-600/20 via-purple-600/20 to-pink-600/20" : "bg-gradient-to-tr from-blue-400/20 via-purple-400/20 to-pink-400/20"}` }),
3722
- /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "absolute inset-0 bg-[radial-gradient(ellipse_at_top_right,_var(--tw-gradient-stops))] from-cyan-500/10 via-transparent to-transparent" }),
3723
- /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "absolute inset-0 bg-[radial-gradient(ellipse_at_bottom_left,_var(--tw-gradient-stops))] from-purple-500/10 via-transparent to-transparent" })
3724
- ] }),
3725
- /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: `absolute inset-0 pointer-events-none ${isDarkMode ? "opacity-60" : "opacity-40"}`, children: [...Array(150)].map((_, i) => /* @__PURE__ */ jsxRuntimeExports.jsx(
3789
+ /* @__PURE__ */ jsxRuntimeExports.jsxs(
3726
3790
  "div",
3727
3791
  {
3728
- className: "absolute rounded-full animate-twinkle",
3729
- style: {
3730
- left: `${Math.random() * 100}%`,
3731
- top: `${Math.random() * 100}%`,
3732
- width: `${Math.random() * 3 + 1}px`,
3733
- height: `${Math.random() * 3 + 1}px`,
3734
- background: isDarkMode ? ["#60a5fa", "#818cf8", "#a78bfa", "#c084fc", "#e879f9"][Math.floor(Math.random() * 5)] : ["#3b82f6", "#6366f1", "#8b5cf6", "#a855f7", "#d946ef"][Math.floor(Math.random() * 5)],
3735
- animationDelay: `${Math.random() * 5}s`,
3736
- animationDuration: `${4 + Math.random() * 6}s`
3737
- }
3738
- },
3739
- i
3740
- )) }),
3741
- /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: `absolute inset-0 ${isDarkMode ? "opacity-10" : "opacity-5"} pointer-events-none`, children: /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "absolute inset-0", style: {
3742
- backgroundImage: `radial-gradient(circle at 1px 1px, ${isDarkMode ? "rgba(255,255,255,0.15)" : "rgba(0,0,0,0.1)"} 1px, transparent 0)`,
3743
- backgroundSize: "40px 40px"
3744
- } }) }),
3792
+ className: "absolute inset-0",
3793
+ style: { opacity: isDarkMode ? 0.3 : 0.2 },
3794
+ children: [
3795
+ /* @__PURE__ */ jsxRuntimeExports.jsx(
3796
+ "div",
3797
+ {
3798
+ className: "absolute inset-0 bg-gradient-brand",
3799
+ style: {
3800
+ opacity: 0.2
3801
+ }
3802
+ }
3803
+ ),
3804
+ /* @__PURE__ */ jsxRuntimeExports.jsx(
3805
+ "div",
3806
+ {
3807
+ className: "absolute inset-0 bg-gradient-accent",
3808
+ style: {
3809
+ opacity: 0.1
3810
+ }
3811
+ }
3812
+ )
3813
+ ]
3814
+ }
3815
+ ),
3816
+ /* @__PURE__ */ jsxRuntimeExports.jsx(
3817
+ "div",
3818
+ {
3819
+ className: "absolute inset-0 pointer-events-none",
3820
+ style: { opacity: isDarkMode ? 0.6 : 0.4 },
3821
+ children: [...Array(150)].map((_, i) => {
3822
+ const colors = ["bg-brand-primary", "bg-brand-secondary"];
3823
+ const randomColor = colors[Math.floor(Math.random() * colors.length)];
3824
+ return /* @__PURE__ */ jsxRuntimeExports.jsx(
3825
+ "div",
3826
+ {
3827
+ className: `absolute rounded-full ${randomColor}`,
3828
+ style: {
3829
+ left: `${Math.random() * 100}%`,
3830
+ top: `${Math.random() * 100}%`,
3831
+ width: `${Math.random() * 3 + 1}px`,
3832
+ height: `${Math.random() * 3 + 1}px`,
3833
+ animationName: "twinkle",
3834
+ animationDelay: `${Math.random() * 5}s`,
3835
+ animationDuration: `${4 + Math.random() * 6}s`,
3836
+ animationIterationCount: "infinite",
3837
+ animationTimingFunction: "ease-in-out"
3838
+ }
3839
+ },
3840
+ i
3841
+ );
3842
+ })
3843
+ }
3844
+ ),
3845
+ /* @__PURE__ */ jsxRuntimeExports.jsx(
3846
+ "div",
3847
+ {
3848
+ className: "absolute inset-0 pointer-events-none",
3849
+ style: { opacity: isDarkMode ? 0.1 : 0.05 },
3850
+ children: /* @__PURE__ */ jsxRuntimeExports.jsx(
3851
+ "div",
3852
+ {
3853
+ className: "absolute inset-0",
3854
+ style: {
3855
+ backgroundImage: isDarkMode ? "radial-gradient(circle at 1px 1px, var(--text-inverse) 1px, transparent 0)" : "radial-gradient(circle at 1px 1px, var(--text-main) 1px, transparent 0)",
3856
+ backgroundSize: "40px 40px",
3857
+ opacity: 0.15
3858
+ }
3859
+ }
3860
+ )
3861
+ }
3862
+ ),
3745
3863
  /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "absolute right-4 sm:right-16 bottom-4 sm:bottom-16 z-0 pointer-events-none", children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "relative", children: [
3746
- /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "absolute inset-0 bg-gradient-to-r from-blue-500/20 to-purple-500/20 blur-3xl w-20 h-20 sm:w-32 sm:h-32" }),
3864
+ /* @__PURE__ */ jsxRuntimeExports.jsx(
3865
+ "div",
3866
+ {
3867
+ className: "absolute inset-0 blur-3xl w-20 h-20 sm:w-32 sm:h-32 bg-gradient-brand",
3868
+ style: {
3869
+ opacity: 0.2
3870
+ }
3871
+ }
3872
+ ),
3747
3873
  /* @__PURE__ */ jsxRuntimeExports.jsx("svg", { width: "60", height: "60", viewBox: "0 0 80 80", className: "relative sm:w-24 sm:h-24", children: /* @__PURE__ */ jsxRuntimeExports.jsx("path", { d: "M40 0 L45 35 L80 40 L45 45 L40 80 L35 45 L0 40 L35 35 Z", fill: "url(#sparkle-gradient)", opacity: "0.4" }) })
3748
3874
  ] }) }),
3749
3875
  /* @__PURE__ */ jsxRuntimeExports.jsxs("svg", { className: "absolute inset-0 w-full h-full pointer-events-none", style: { zIndex: 1 }, children: [
3750
3876
  /* @__PURE__ */ jsxRuntimeExports.jsxs("defs", { children: [
3751
3877
  /* @__PURE__ */ jsxRuntimeExports.jsxs("linearGradient", { id: "circuit-gradient", x1: "0%", y1: "0%", x2: "100%", y2: "0%", children: [
3752
- /* @__PURE__ */ jsxRuntimeExports.jsx("stop", { offset: "0%", stopColor: "#60a5fa", stopOpacity: "0.6" }),
3753
- /* @__PURE__ */ jsxRuntimeExports.jsx("stop", { offset: "50%", stopColor: "#a78bfa", stopOpacity: "0.9" }),
3754
- /* @__PURE__ */ jsxRuntimeExports.jsx("stop", { offset: "100%", stopColor: "#c084fc", stopOpacity: "0.6" })
3878
+ /* @__PURE__ */ jsxRuntimeExports.jsx("stop", { offset: "0%", style: { stopColor: "var(--brand-primary)", stopOpacity: 0.6 } }),
3879
+ /* @__PURE__ */ jsxRuntimeExports.jsx("stop", { offset: "50%", style: { stopColor: "var(--gradient-brand-soft-start)", stopOpacity: 0.9 } }),
3880
+ /* @__PURE__ */ jsxRuntimeExports.jsx("stop", { offset: "100%", style: { stopColor: "var(--gradient-brand-soft-end)", stopOpacity: 0.6 } })
3755
3881
  ] }),
3756
3882
  /* @__PURE__ */ jsxRuntimeExports.jsxs("linearGradient", { id: "sparkle-gradient", x1: "0%", y1: "0%", x2: "100%", y2: "100%", children: [
3757
- /* @__PURE__ */ jsxRuntimeExports.jsx("stop", { offset: "0%", stopColor: "#60a5fa" }),
3758
- /* @__PURE__ */ jsxRuntimeExports.jsx("stop", { offset: "50%", stopColor: "#a78bfa" }),
3759
- /* @__PURE__ */ jsxRuntimeExports.jsx("stop", { offset: "100%", stopColor: "#c084fc" })
3883
+ /* @__PURE__ */ jsxRuntimeExports.jsx("stop", { offset: "0%", style: { stopColor: "var(--brand-primary)" } }),
3884
+ /* @__PURE__ */ jsxRuntimeExports.jsx("stop", { offset: "50%", style: { stopColor: "var(--gradient-brand-soft-start)" } }),
3885
+ /* @__PURE__ */ jsxRuntimeExports.jsx("stop", { offset: "100%", style: { stopColor: "var(--gradient-brand-soft-end)" } })
3760
3886
  ] }),
3761
3887
  /* @__PURE__ */ jsxRuntimeExports.jsxs("filter", { id: "glow", children: [
3762
3888
  /* @__PURE__ */ jsxRuntimeExports.jsx("feGaussianBlur", { stdDeviation: "4", result: "coloredBlur" }),
@@ -3771,11 +3897,11 @@ var __async = (__this, __arguments, generator) => {
3771
3897
  "path",
3772
3898
  {
3773
3899
  d: line.path,
3774
- stroke: "rgba(167, 139, 250, 0.2)",
3900
+ stroke: "var(--gradient-brand-soft-start)",
3775
3901
  strokeWidth: "6",
3776
3902
  fill: "none",
3777
3903
  className: "transition-all duration-200",
3778
- style: { filter: "blur(8px)" }
3904
+ style: { filter: "blur(8px)", opacity: 0.2 }
3779
3905
  }
3780
3906
  ),
3781
3907
  /* @__PURE__ */ jsxRuntimeExports.jsx(
@@ -3807,7 +3933,8 @@ var __async = (__this, __arguments, generator) => {
3807
3933
  delay: node.delay,
3808
3934
  onDragStart: handleNodeDragStart,
3809
3935
  isDragging: draggingNodeId === node.id,
3810
- onClick: handleNodeClick
3936
+ onClick: handleNodeClick,
3937
+ isDarkMode
3811
3938
  },
3812
3939
  node.id
3813
3940
  )) }),
@@ -3841,15 +3968,52 @@ var __async = (__this, __arguments, generator) => {
3841
3968
  },
3842
3969
  onTouchEnd: () => setIsDragging(false),
3843
3970
  children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "relative", children: [
3844
- /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "absolute inset-0 bg-indigo-400/30 rounded-full blur-2xl", style: { transform: "scale(1.5)" } }),
3845
- /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: `relative bg-gradient-to-br from-indigo-500 via-blue-500 to-cyan-500 px-6 sm:px-10 py-3 sm:py-5 rounded-3xl shadow-2xl border-4 border-indigo-300/50 flex items-center gap-3 sm:gap-4 transition-transform backdrop-blur-md ${isDragging ? "scale-110" : ""}`, children: [
3846
- /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "bg-white/25 p-2 sm:p-3 rounded-xl backdrop-blur-sm", children: /* @__PURE__ */ jsxRuntimeExports.jsx(Briefcase, { className: "w-5 h-5 sm:w-7 sm:h-7 text-white" }) }),
3847
- /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "text-center", children: [
3848
- /* @__PURE__ */ jsxRuntimeExports.jsx("h1", { className: "text-white font-bold text-sm sm:text-xl leading-tight tracking-wide", children: diagramName }),
3849
- diagramDescription && /* @__PURE__ */ jsxRuntimeExports.jsx("h2", { className: "text-white/90 font-medium text-xs sm:text-base leading-tight", children: diagramDescription })
3850
- ] })
3851
- ] }),
3852
- !isDragging && /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: `absolute -bottom-8 left-1/2 transform -translate-x-1/2 ${isDarkMode ? "text-indigo-300/60" : "text-indigo-600/60"} text-xs whitespace-nowrap`, children: safeT("diagram.dragToMove") })
3971
+ /* @__PURE__ */ jsxRuntimeExports.jsx(
3972
+ "div",
3973
+ {
3974
+ className: "absolute inset-0 rounded-full blur-2xl bg-brand-primary",
3975
+ style: {
3976
+ opacity: 0.3,
3977
+ transform: "scale(1.5)"
3978
+ }
3979
+ }
3980
+ ),
3981
+ /* @__PURE__ */ jsxRuntimeExports.jsxs(
3982
+ "div",
3983
+ {
3984
+ className: "relative px-6 sm:px-10 py-3 sm:py-5 rounded-3xl shadow-2xl border-4 flex items-center gap-3 sm:gap-4 backdrop-blur-md bg-gradient-brand",
3985
+ style: {
3986
+ borderColor: "var(--brand-primary)",
3987
+ borderOpacity: 0.5,
3988
+ transform: isDragging ? "scale(1.1)" : "scale(1)",
3989
+ transition: "transform 0.3s ease"
3990
+ },
3991
+ children: [
3992
+ /* @__PURE__ */ jsxRuntimeExports.jsx(
3993
+ "div",
3994
+ {
3995
+ className: "p-2 sm:p-3 rounded-xl backdrop-blur-sm",
3996
+ style: { backgroundColor: "rgba(255, 255, 255, 0.25)" },
3997
+ children: /* @__PURE__ */ jsxRuntimeExports.jsx(Briefcase, { className: "w-5 h-5 sm:w-7 sm:h-7 text-inverse" })
3998
+ }
3999
+ ),
4000
+ /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "text-center", children: [
4001
+ /* @__PURE__ */ jsxRuntimeExports.jsx("h1", { className: "text-inverse text-body sm:text-subtitle", children: diagramName }),
4002
+ diagramDescription && /* @__PURE__ */ jsxRuntimeExports.jsx("h2", { className: "text-inverse text-caption sm:text-small opacity-90", children: diagramDescription })
4003
+ ] })
4004
+ ]
4005
+ }
4006
+ ),
4007
+ !isDragging && /* @__PURE__ */ jsxRuntimeExports.jsx(
4008
+ "div",
4009
+ {
4010
+ className: `absolute -bottom-8 left-1/2 transform -translate-x-1/2 text-caption whitespace-nowrap ${isDarkMode ? "text-brand-primary" : "text-brand-secondary"}`,
4011
+ style: {
4012
+ opacity: 0.6
4013
+ },
4014
+ children: safeT("diagram.dragToMove")
4015
+ }
4016
+ )
3853
4017
  ] })
3854
4018
  }
3855
4019
  ),
@@ -3869,7 +4033,6 @@ var __async = (__this, __arguments, generator) => {
3869
4033
  animation: fadeIn 0.8s cubic-bezier(0.4, 0, 0.2, 1) forwards;
3870
4034
  opacity: 0;
3871
4035
  }
3872
- .animate-twinkle { animation: twinkle 5s ease-in-out infinite; }
3873
4036
  ` })
3874
4037
  ]
3875
4038
  }
@@ -4128,14 +4291,14 @@ var __async = (__this, __arguments, generator) => {
4128
4291
  "div",
4129
4292
  {
4130
4293
  className: `transition-opacity duration-700 ${activeTab === index2 ? "opacity-100" : "opacity-0 absolute inset-0 pointer-events-none"}`,
4131
- children: /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: `${isDarkMode ? "bg-gradient-to-br from-slate-900/30 to-slate-950/30 border-slate-700/20" : "bg-white/40 border-white/30"} backdrop-blur-md rounded-3xl shadow-lg overflow-hidden border transition-colors duration-500`, children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "grid grid-cols-1 lg:grid-cols-2 gap-0 min-h-[420px] lg:h-auto", children: [
4132
- /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "relative h-[280px] lg:h-full overflow-hidden group", children: [
4294
+ children: /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: `${isDarkMode ? "bg-gradient-to-br from-slate-900/30 to-slate-950/30 border-slate-700/20" : "bg-white/40 border-white/30"} backdrop-blur-md rounded-3xl shadow-lg overflow-hidden border transition-colors duration-500`, children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "grid grid-cols-1 lg:grid-cols-2 gap-0", children: [
4295
+ /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "relative h-[280px] lg:h-[500px] overflow-hidden group", children: [
4133
4296
  /* @__PURE__ */ jsxRuntimeExports.jsx(
4134
4297
  "img",
4135
4298
  {
4136
4299
  src: item.image || defaultImage,
4137
4300
  alt: item.title,
4138
- className: "w-full h-full object-cover transition-transform duration-700 group-hover:scale-110",
4301
+ className: "absolute inset-0 w-full h-full object-cover transition-transform duration-700 group-hover:scale-110",
4139
4302
  onError: (e) => {
4140
4303
  e.target.src = defaultImage;
4141
4304
  }
@@ -4144,10 +4307,10 @@ var __async = (__this, __arguments, generator) => {
4144
4307
  /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: `absolute inset-0 bg-gradient-to-br ${color} opacity-20` }),
4145
4308
  /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "absolute inset-0 bg-gradient-to-t from-black/60 via-transparent to-transparent" })
4146
4309
  ] }),
4147
- /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "p-5 lg:p-8 flex flex-col justify-center", children: [
4310
+ /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "p-5 lg:p-8 flex flex-col justify-center h-[280px] lg:h-[500px]", children: [
4148
4311
  /* @__PURE__ */ jsxRuntimeExports.jsx("h1", { className: "text-3xl lg:text-4xl font-black mb-3 text-gradient-brand", children: item.title }),
4149
- /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "mb-6 text-muted", children: item.description }),
4150
- item.features && item.features.length > 0 && /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "grid grid-cols-1 sm:grid-cols-2 gap-2 mb-6", children: item.features.map((feature, idx) => /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-start gap-2 group", children: [
4312
+ /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "mb-6 text-muted line-clamp-3 lg:line-clamp-4", children: item.description }),
4313
+ item.features && item.features.length > 0 && /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "grid grid-cols-1 sm:grid-cols-2 gap-2 mb-6 overflow-y-auto max-h-32 lg:max-h-48", children: item.features.map((feature, idx) => /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-start gap-2 group", children: [
4151
4314
  /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "mt-0.5 w-4 h-4 rounded-full bg-gradient-accent flex items-center justify-center flex-shrink-0", children: /* @__PURE__ */ jsxRuntimeExports.jsx("svg", { className: "w-2.5 h-2.5 text-inverse", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", children: /* @__PURE__ */ jsxRuntimeExports.jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 3, d: "M5 13l4 4L19 7" }) }) }),
4152
4315
  /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "text-muted group-hover:text-main font-medium text-xs transition-colors", children: feature })
4153
4316
  ] }, idx)) }),
@@ -4156,7 +4319,7 @@ var __async = (__this, __arguments, generator) => {
4156
4319
  {
4157
4320
  href: item.slug,
4158
4321
  rel: "noopener noreferrer",
4159
- className: `group relative px-6 py-3 rounded-xl font-bold text-sm transition-all duration-300 transform hover:scale-105 hover:shadow-2xl overflow-hidden bg-gradient-to-r ${color} text-white shadow-xl w-full text-center`,
4322
+ className: `group relative px-6 py-3 rounded-xl font-bold text-sm transition-all duration-300 transform hover:scale-105 hover:shadow-2xl overflow-hidden bg-gradient-to-r ${color} text-white shadow-xl w-full text-center mt-auto`,
4160
4323
  onClick: (e) => {
4161
4324
  if (!e.ctrlKey && !e.metaKey && e.button !== 1) {
4162
4325
  e.preventDefault();
@@ -4249,6 +4412,20 @@ var __async = (__this, __arguments, generator) => {
4249
4412
  linear-gradient(90deg, rgba(0, 0, 0, 0.03) 1px, transparent 1px);
4250
4413
  background-size: 50px 50px;
4251
4414
  }
4415
+
4416
+ .line-clamp-3 {
4417
+ display: -webkit-box;
4418
+ -webkit-line-clamp: 3;
4419
+ -webkit-box-orient: vertical;
4420
+ overflow: hidden;
4421
+ }
4422
+
4423
+ .line-clamp-4 {
4424
+ display: -webkit-box;
4425
+ -webkit-line-clamp: 4;
4426
+ -webkit-box-orient: vertical;
4427
+ overflow: hidden;
4428
+ }
4252
4429
  ` })
4253
4430
  ]
4254
4431
  }