virtual-ui-lib 1.0.64 → 1.0.66

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.js CHANGED
@@ -31,6 +31,7 @@ var index_exports = {};
31
31
  __export(index_exports, {
32
32
  Avatar: () => Avatar,
33
33
  AvatarCard: () => AvatarCard,
34
+ BackgoundImageSlider: () => BackgoundImageSlider,
34
35
  Charts: () => Charts,
35
36
  CodeBlock: () => CodeBlock,
36
37
  CustomInputField: () => CustomInputField,
@@ -38,6 +39,7 @@ __export(index_exports, {
38
39
  FileUpload: () => FileUpload,
39
40
  Footer: () => Footer,
40
41
  ImageCard: () => ImageCard,
42
+ ImageSlider: () => ImageSlider,
41
43
  Loader: () => Loader,
42
44
  LoadingSpinner: () => LoadingSpinner,
43
45
  Navbar: () => Navbar,
@@ -2050,10 +2052,488 @@ var ImageCard = ({
2050
2052
  ))
2051
2053
  );
2052
2054
  };
2055
+
2056
+ // src/components/ImageSlider/ImageSlider.jsx
2057
+ var import_react25 = __toESM(require("react"));
2058
+ var ImageSlider = ({
2059
+ images = [
2060
+ {
2061
+ src: "https://images.unsplash.com/photo-1506905925346-21bda4d32df4?w=600&q=80",
2062
+ title: "Hidden Peaks of Himalayas",
2063
+ tag: "Travel"
2064
+ },
2065
+ {
2066
+ src: "https://images.unsplash.com/photo-1477959858617-67f85cf4f1df?w=600&q=80",
2067
+ title: "City Lights at Night",
2068
+ tag: "Urban"
2069
+ },
2070
+ {
2071
+ src: "https://images.unsplash.com/photo-1500534314209-a25ddb2bd429?w=600&q=80",
2072
+ title: "Tropical Beach Paradise",
2073
+ tag: "Nature"
2074
+ },
2075
+ {
2076
+ src: "https://images.unsplash.com/photo-1519681393784-d120267933ba?w=600&q=80",
2077
+ title: "Starry Mountain Night",
2078
+ tag: "Adventure"
2079
+ }
2080
+ ],
2081
+ accent = "#6366f1",
2082
+ bg = "#0f172a",
2083
+ radius = "20px",
2084
+ showDots = true,
2085
+ showCaption = true,
2086
+ autoPlay = false
2087
+ }) => {
2088
+ const [current, setCurrent] = (0, import_react25.useState)(0);
2089
+ const [dir, setDir] = (0, import_react25.useState)(null);
2090
+ const alpha = (hex, op) => {
2091
+ const r = parseInt(hex.slice(1, 3), 16);
2092
+ const g = parseInt(hex.slice(3, 5), 16);
2093
+ const b = parseInt(hex.slice(5, 7), 16);
2094
+ return `rgba(${r},${g},${b},${op})`;
2095
+ };
2096
+ const prev = () => {
2097
+ setDir("left");
2098
+ setCurrent((c) => (c - 1 + images.length) % images.length);
2099
+ };
2100
+ const next = () => {
2101
+ setDir("right");
2102
+ setCurrent((c) => (c + 1) % images.length);
2103
+ };
2104
+ const goTo = (i) => {
2105
+ setDir(i > current ? "right" : "left");
2106
+ setCurrent(i);
2107
+ };
2108
+ const img = images[current];
2109
+ return /* @__PURE__ */ import_react25.default.createElement("div", { style: {
2110
+ background: bg,
2111
+ borderRadius: radius,
2112
+ overflow: "hidden",
2113
+ width: "300px",
2114
+ border: "1px solid rgba(255,255,255,0.07)",
2115
+ fontFamily: "system-ui, sans-serif",
2116
+ boxShadow: "0 10px 40px rgba(0,0,0,0.4)"
2117
+ } }, /* @__PURE__ */ import_react25.default.createElement("div", { style: { position: "relative", width: "100%", height: "200px", overflow: "hidden", background: "#000" } }, /* @__PURE__ */ import_react25.default.createElement(
2118
+ "img",
2119
+ {
2120
+ key: current,
2121
+ src: img.src,
2122
+ alt: img.title,
2123
+ style: {
2124
+ width: "100%",
2125
+ height: "100%",
2126
+ objectFit: "cover",
2127
+ animation: `sliderFade 0.35s ease`
2128
+ }
2129
+ }
2130
+ ), /* @__PURE__ */ import_react25.default.createElement("style", null, `@keyframes sliderFade { from { opacity: 0; transform: scale(1.03); } to { opacity: 1; transform: scale(1); } }`), /* @__PURE__ */ import_react25.default.createElement("div", { style: {
2131
+ position: "absolute",
2132
+ inset: 0,
2133
+ background: "linear-gradient(to top, rgba(0,0,0,0.65) 0%, transparent 55%)"
2134
+ } }), img.tag && /* @__PURE__ */ import_react25.default.createElement("div", { style: {
2135
+ position: "absolute",
2136
+ top: "12px",
2137
+ left: "12px",
2138
+ padding: "4px 10px",
2139
+ borderRadius: "20px",
2140
+ background: alpha(accent, 0.85),
2141
+ fontSize: "10px",
2142
+ fontWeight: "700",
2143
+ color: "#fff",
2144
+ letterSpacing: "0.5px",
2145
+ textTransform: "uppercase"
2146
+ } }, img.tag), /* @__PURE__ */ import_react25.default.createElement("div", { style: {
2147
+ position: "absolute",
2148
+ top: "12px",
2149
+ right: "12px",
2150
+ padding: "4px 10px",
2151
+ borderRadius: "20px",
2152
+ background: "rgba(0,0,0,0.5)",
2153
+ fontSize: "10px",
2154
+ fontWeight: "600",
2155
+ color: "rgba(255,255,255,0.7)"
2156
+ } }, current + 1, " / ", images.length), /* @__PURE__ */ import_react25.default.createElement(
2157
+ "button",
2158
+ {
2159
+ onClick: prev,
2160
+ style: {
2161
+ position: "absolute",
2162
+ left: "10px",
2163
+ top: "50%",
2164
+ transform: "translateY(-50%)",
2165
+ width: "34px",
2166
+ height: "34px",
2167
+ borderRadius: "50%",
2168
+ background: "rgba(0,0,0,0.5)",
2169
+ border: "1px solid rgba(255,255,255,0.15)",
2170
+ color: "#fff",
2171
+ cursor: "pointer",
2172
+ display: "flex",
2173
+ alignItems: "center",
2174
+ justifyContent: "center",
2175
+ transition: "background 0.2s",
2176
+ padding: 0
2177
+ },
2178
+ onMouseEnter: (e) => e.currentTarget.style.background = alpha(accent, 0.8),
2179
+ onMouseLeave: (e) => e.currentTarget.style.background = "rgba(0,0,0,0.5)"
2180
+ },
2181
+ /* @__PURE__ */ import_react25.default.createElement(
2182
+ "svg",
2183
+ {
2184
+ width: "14",
2185
+ height: "14",
2186
+ viewBox: "0 0 24 24",
2187
+ fill: "none",
2188
+ stroke: "currentColor",
2189
+ strokeWidth: "2.5",
2190
+ strokeLinecap: "round"
2191
+ },
2192
+ /* @__PURE__ */ import_react25.default.createElement("polyline", { points: "15 18 9 12 15 6" })
2193
+ )
2194
+ ), /* @__PURE__ */ import_react25.default.createElement(
2195
+ "button",
2196
+ {
2197
+ onClick: next,
2198
+ style: {
2199
+ position: "absolute",
2200
+ right: "10px",
2201
+ top: "50%",
2202
+ transform: "translateY(-50%)",
2203
+ width: "34px",
2204
+ height: "34px",
2205
+ borderRadius: "50%",
2206
+ background: "rgba(0,0,0,0.5)",
2207
+ border: "1px solid rgba(255,255,255,0.15)",
2208
+ color: "#fff",
2209
+ cursor: "pointer",
2210
+ display: "flex",
2211
+ alignItems: "center",
2212
+ justifyContent: "center",
2213
+ transition: "background 0.2s",
2214
+ padding: 0
2215
+ },
2216
+ onMouseEnter: (e) => e.currentTarget.style.background = alpha(accent, 0.8),
2217
+ onMouseLeave: (e) => e.currentTarget.style.background = "rgba(0,0,0,0.5)"
2218
+ },
2219
+ /* @__PURE__ */ import_react25.default.createElement(
2220
+ "svg",
2221
+ {
2222
+ width: "14",
2223
+ height: "14",
2224
+ viewBox: "0 0 24 24",
2225
+ fill: "none",
2226
+ stroke: "currentColor",
2227
+ strokeWidth: "2.5",
2228
+ strokeLinecap: "round"
2229
+ },
2230
+ /* @__PURE__ */ import_react25.default.createElement("polyline", { points: "9 18 15 12 9 6" })
2231
+ )
2232
+ )), showCaption && /* @__PURE__ */ import_react25.default.createElement("div", { style: { padding: "14px 16px 4px" } }, /* @__PURE__ */ import_react25.default.createElement(
2233
+ "p",
2234
+ {
2235
+ style: {
2236
+ fontSize: "14px",
2237
+ fontWeight: "700",
2238
+ color: "#fff",
2239
+ margin: 0,
2240
+ lineHeight: 1.4,
2241
+ animation: "sliderFade 0.3s ease"
2242
+ },
2243
+ key: current + "-title"
2244
+ },
2245
+ img.title
2246
+ )), showDots && /* @__PURE__ */ import_react25.default.createElement("div", { style: {
2247
+ display: "flex",
2248
+ justifyContent: "center",
2249
+ gap: "6px",
2250
+ padding: "12px 16px 16px"
2251
+ } }, images.map((_, i) => /* @__PURE__ */ import_react25.default.createElement(
2252
+ "button",
2253
+ {
2254
+ key: i,
2255
+ onClick: () => goTo(i),
2256
+ style: {
2257
+ width: i === current ? "20px" : "6px",
2258
+ height: "6px",
2259
+ borderRadius: "3px",
2260
+ border: "none",
2261
+ cursor: "pointer",
2262
+ padding: 0,
2263
+ background: i === current ? accent : "rgba(255,255,255,0.2)",
2264
+ transition: "all 0.25s ease"
2265
+ }
2266
+ }
2267
+ ))));
2268
+ };
2269
+
2270
+ // src/components/BackgoundImageSlider/BackgoundImageSlider.jsx
2271
+ var import_react26 = __toESM(require("react"));
2272
+ var BackgoundImageSlider = ({
2273
+ images = [
2274
+ {
2275
+ src: "https://images.unsplash.com/photo-1506905925346-21bda4d32df4?w=1400&q=80",
2276
+ tag: "Travel",
2277
+ title: "Hidden Peaks of the Himalayas",
2278
+ description: "A breathtaking journey through untouched landscapes and ancient monasteries."
2279
+ },
2280
+ {
2281
+ src: "https://images.unsplash.com/photo-1477959858617-67f85cf4f1df?w=1400&q=80",
2282
+ tag: "Urban",
2283
+ title: "City Lights at Night",
2284
+ description: "Explore the vibrant energy of the world's most iconic skylines after dark."
2285
+ },
2286
+ {
2287
+ src: "https://images.unsplash.com/photo-1500534314209-a25ddb2bd429?w=1400&q=80",
2288
+ tag: "Nature",
2289
+ title: "Tropical Beach Paradise",
2290
+ description: "Crystal clear waters and white sand beaches that feel like the edge of the world."
2291
+ },
2292
+ {
2293
+ src: "https://images.unsplash.com/photo-1519681393784-d120267933ba?w=1400&q=80",
2294
+ tag: "Adventure",
2295
+ title: "Starry Mountain Night",
2296
+ description: "Where silence meets the cosmos \u2014 a night sky like you've never seen before."
2297
+ }
2298
+ ],
2299
+ width = "100%",
2300
+ height = "520px",
2301
+ accent = "#6366f1",
2302
+ radius = "0px",
2303
+ showDots = true,
2304
+ autoPlay = false,
2305
+ autoPlayInterval = 4e3
2306
+ }) => {
2307
+ const [current, setCurrent] = (0, import_react26.useState)(0);
2308
+ const [animating, setAnimating] = (0, import_react26.useState)(false);
2309
+ const alpha = (hex, op) => {
2310
+ const r = parseInt(hex.slice(1, 3), 16);
2311
+ const g = parseInt(hex.slice(3, 5), 16);
2312
+ const b = parseInt(hex.slice(5, 7), 16);
2313
+ return `rgba(${r},${g},${b},${op})`;
2314
+ };
2315
+ const go = (0, import_react26.useCallback)((index) => {
2316
+ if (animating) return;
2317
+ setAnimating(true);
2318
+ setCurrent((index + images.length) % images.length);
2319
+ setTimeout(() => setAnimating(false), 400);
2320
+ }, [animating, images.length]);
2321
+ const prev = () => go(current - 1);
2322
+ const next = () => go(current + 1);
2323
+ (0, import_react26.useEffect)(() => {
2324
+ if (!autoPlay) return;
2325
+ const t = setInterval(() => go(current + 1), autoPlayInterval);
2326
+ return () => clearInterval(t);
2327
+ }, [autoPlay, autoPlayInterval, current, go]);
2328
+ const img = images[current];
2329
+ return /* @__PURE__ */ import_react26.default.createElement(import_react26.default.Fragment, null, /* @__PURE__ */ import_react26.default.createElement("style", null, `
2330
+ @keyframes hs-fade { from { opacity: 0; transform: scale(1.04); } to { opacity: 1; transform: scale(1); } }
2331
+ @keyframes hs-up { from { opacity: 0; transform: translateY(18px); } to { opacity: 1; transform: translateY(0); } }
2332
+ .hs-prev:hover, .hs-next:hover { background: rgba(0,0,0,0.65) !important; border-color: rgba(255,255,255,0.35) !important; }
2333
+ `), /* @__PURE__ */ import_react26.default.createElement("div", { style: {
2334
+ position: "relative",
2335
+ width,
2336
+ height,
2337
+ borderRadius: radius,
2338
+ overflow: "hidden",
2339
+ fontFamily: "system-ui, -apple-system, sans-serif",
2340
+ userSelect: "none"
2341
+ } }, /* @__PURE__ */ import_react26.default.createElement(
2342
+ "img",
2343
+ {
2344
+ key: current,
2345
+ src: img.src,
2346
+ alt: img.title,
2347
+ style: {
2348
+ position: "absolute",
2349
+ inset: 0,
2350
+ width: "100%",
2351
+ height: "100%",
2352
+ objectFit: "cover",
2353
+ animation: "hs-fade 0.4s ease"
2354
+ }
2355
+ }
2356
+ ), /* @__PURE__ */ import_react26.default.createElement("div", { style: {
2357
+ position: "absolute",
2358
+ inset: 0,
2359
+ background: "linear-gradient(to top, rgba(0,0,0,0.75) 0%, rgba(0,0,0,0.2) 50%, rgba(0,0,0,0.1) 100%)"
2360
+ } }), img.tag && /* @__PURE__ */ import_react26.default.createElement(
2361
+ "div",
2362
+ {
2363
+ key: current + "-tag",
2364
+ style: {
2365
+ position: "absolute",
2366
+ top: "24px",
2367
+ left: "28px",
2368
+ padding: "5px 14px",
2369
+ borderRadius: "20px",
2370
+ background: alpha(accent, 0.85),
2371
+ fontSize: "11px",
2372
+ fontWeight: "700",
2373
+ color: "#fff",
2374
+ letterSpacing: "0.6px",
2375
+ textTransform: "uppercase",
2376
+ animation: "hs-up 0.4s ease"
2377
+ }
2378
+ },
2379
+ img.tag
2380
+ ), /* @__PURE__ */ import_react26.default.createElement("div", { style: {
2381
+ position: "absolute",
2382
+ top: "24px",
2383
+ right: "28px",
2384
+ padding: "5px 12px",
2385
+ borderRadius: "20px",
2386
+ background: "rgba(0,0,0,0.45)",
2387
+ fontSize: "11px",
2388
+ fontWeight: "600",
2389
+ color: "rgba(255,255,255,0.7)"
2390
+ } }, current + 1, " / ", images.length), /* @__PURE__ */ import_react26.default.createElement(
2391
+ "button",
2392
+ {
2393
+ className: "hs-prev",
2394
+ onClick: prev,
2395
+ style: {
2396
+ position: "absolute",
2397
+ left: "20px",
2398
+ top: "50%",
2399
+ transform: "translateY(-50%)",
2400
+ width: "44px",
2401
+ height: "44px",
2402
+ borderRadius: "50%",
2403
+ background: "rgba(0,0,0,0.4)",
2404
+ border: "1px solid rgba(255,255,255,0.2)",
2405
+ color: "#fff",
2406
+ cursor: "pointer",
2407
+ display: "flex",
2408
+ alignItems: "center",
2409
+ justifyContent: "center",
2410
+ transition: "all 0.2s",
2411
+ padding: 0,
2412
+ zIndex: 10
2413
+ }
2414
+ },
2415
+ /* @__PURE__ */ import_react26.default.createElement(
2416
+ "svg",
2417
+ {
2418
+ width: "18",
2419
+ height: "18",
2420
+ viewBox: "0 0 24 24",
2421
+ fill: "none",
2422
+ stroke: "currentColor",
2423
+ strokeWidth: "2.5",
2424
+ strokeLinecap: "round",
2425
+ strokeLinejoin: "round"
2426
+ },
2427
+ /* @__PURE__ */ import_react26.default.createElement("polyline", { points: "15 18 9 12 15 6" })
2428
+ )
2429
+ ), /* @__PURE__ */ import_react26.default.createElement(
2430
+ "button",
2431
+ {
2432
+ className: "hs-next",
2433
+ onClick: next,
2434
+ style: {
2435
+ position: "absolute",
2436
+ right: "20px",
2437
+ top: "50%",
2438
+ transform: "translateY(-50%)",
2439
+ width: "44px",
2440
+ height: "44px",
2441
+ borderRadius: "50%",
2442
+ background: "rgba(0,0,0,0.4)",
2443
+ border: "1px solid rgba(255,255,255,0.2)",
2444
+ color: "#fff",
2445
+ cursor: "pointer",
2446
+ display: "flex",
2447
+ alignItems: "center",
2448
+ justifyContent: "center",
2449
+ transition: "all 0.2s",
2450
+ padding: 0,
2451
+ zIndex: 10
2452
+ }
2453
+ },
2454
+ /* @__PURE__ */ import_react26.default.createElement(
2455
+ "svg",
2456
+ {
2457
+ width: "18",
2458
+ height: "18",
2459
+ viewBox: "0 0 24 24",
2460
+ fill: "none",
2461
+ stroke: "currentColor",
2462
+ strokeWidth: "2.5",
2463
+ strokeLinecap: "round",
2464
+ strokeLinejoin: "round"
2465
+ },
2466
+ /* @__PURE__ */ import_react26.default.createElement("polyline", { points: "9 18 15 12 9 6" })
2467
+ )
2468
+ ), /* @__PURE__ */ import_react26.default.createElement("div", { style: {
2469
+ position: "absolute",
2470
+ bottom: showDots ? "56px" : "28px",
2471
+ left: "28px",
2472
+ right: "28px",
2473
+ zIndex: 5
2474
+ } }, /* @__PURE__ */ import_react26.default.createElement(
2475
+ "h2",
2476
+ {
2477
+ key: current + "-title",
2478
+ style: {
2479
+ fontSize: "clamp(20px, 4vw, 36px)",
2480
+ fontWeight: "800",
2481
+ color: "#fff",
2482
+ margin: "0 0 8px",
2483
+ lineHeight: 1.25,
2484
+ textShadow: "0 2px 12px rgba(0,0,0,0.4)",
2485
+ animation: "hs-up 0.45s ease",
2486
+ maxWidth: "600px"
2487
+ }
2488
+ },
2489
+ img.title
2490
+ ), /* @__PURE__ */ import_react26.default.createElement(
2491
+ "p",
2492
+ {
2493
+ key: current + "-desc",
2494
+ style: {
2495
+ fontSize: "clamp(13px, 2vw, 15px)",
2496
+ color: "rgba(255,255,255,0.7)",
2497
+ margin: 0,
2498
+ lineHeight: 1.6,
2499
+ textShadow: "0 1px 6px rgba(0,0,0,0.5)",
2500
+ animation: "hs-up 0.5s ease",
2501
+ maxWidth: "500px"
2502
+ }
2503
+ },
2504
+ img.description
2505
+ )), showDots && /* @__PURE__ */ import_react26.default.createElement("div", { style: {
2506
+ position: "absolute",
2507
+ bottom: "20px",
2508
+ left: 0,
2509
+ right: 0,
2510
+ display: "flex",
2511
+ justifyContent: "center",
2512
+ gap: "6px",
2513
+ zIndex: 5
2514
+ } }, images.map((_, i) => /* @__PURE__ */ import_react26.default.createElement(
2515
+ "button",
2516
+ {
2517
+ key: i,
2518
+ onClick: () => go(i),
2519
+ style: {
2520
+ width: i === current ? "24px" : "7px",
2521
+ height: "7px",
2522
+ borderRadius: "4px",
2523
+ border: "none",
2524
+ padding: 0,
2525
+ cursor: "pointer",
2526
+ background: i === current ? accent : "rgba(255,255,255,0.4)",
2527
+ transition: "all 0.3s ease"
2528
+ }
2529
+ }
2530
+ )))));
2531
+ };
2053
2532
  // Annotate the CommonJS export names for ESM import in node:
2054
2533
  0 && (module.exports = {
2055
2534
  Avatar,
2056
2535
  AvatarCard,
2536
+ BackgoundImageSlider,
2057
2537
  Charts,
2058
2538
  CodeBlock,
2059
2539
  CustomInputField,
@@ -2061,6 +2541,7 @@ var ImageCard = ({
2061
2541
  FileUpload,
2062
2542
  Footer,
2063
2543
  ImageCard,
2544
+ ImageSlider,
2064
2545
  Loader,
2065
2546
  LoadingSpinner,
2066
2547
  Navbar,
package/dist/index.mjs CHANGED
@@ -1992,9 +1992,487 @@ var ImageCard = ({
1992
1992
  ))
1993
1993
  );
1994
1994
  };
1995
+
1996
+ // src/components/ImageSlider/ImageSlider.jsx
1997
+ import React25, { useState as useState18 } from "react";
1998
+ var ImageSlider = ({
1999
+ images = [
2000
+ {
2001
+ src: "https://images.unsplash.com/photo-1506905925346-21bda4d32df4?w=600&q=80",
2002
+ title: "Hidden Peaks of Himalayas",
2003
+ tag: "Travel"
2004
+ },
2005
+ {
2006
+ src: "https://images.unsplash.com/photo-1477959858617-67f85cf4f1df?w=600&q=80",
2007
+ title: "City Lights at Night",
2008
+ tag: "Urban"
2009
+ },
2010
+ {
2011
+ src: "https://images.unsplash.com/photo-1500534314209-a25ddb2bd429?w=600&q=80",
2012
+ title: "Tropical Beach Paradise",
2013
+ tag: "Nature"
2014
+ },
2015
+ {
2016
+ src: "https://images.unsplash.com/photo-1519681393784-d120267933ba?w=600&q=80",
2017
+ title: "Starry Mountain Night",
2018
+ tag: "Adventure"
2019
+ }
2020
+ ],
2021
+ accent = "#6366f1",
2022
+ bg = "#0f172a",
2023
+ radius = "20px",
2024
+ showDots = true,
2025
+ showCaption = true,
2026
+ autoPlay = false
2027
+ }) => {
2028
+ const [current, setCurrent] = useState18(0);
2029
+ const [dir, setDir] = useState18(null);
2030
+ const alpha = (hex, op) => {
2031
+ const r = parseInt(hex.slice(1, 3), 16);
2032
+ const g = parseInt(hex.slice(3, 5), 16);
2033
+ const b = parseInt(hex.slice(5, 7), 16);
2034
+ return `rgba(${r},${g},${b},${op})`;
2035
+ };
2036
+ const prev = () => {
2037
+ setDir("left");
2038
+ setCurrent((c) => (c - 1 + images.length) % images.length);
2039
+ };
2040
+ const next = () => {
2041
+ setDir("right");
2042
+ setCurrent((c) => (c + 1) % images.length);
2043
+ };
2044
+ const goTo = (i) => {
2045
+ setDir(i > current ? "right" : "left");
2046
+ setCurrent(i);
2047
+ };
2048
+ const img = images[current];
2049
+ return /* @__PURE__ */ React25.createElement("div", { style: {
2050
+ background: bg,
2051
+ borderRadius: radius,
2052
+ overflow: "hidden",
2053
+ width: "300px",
2054
+ border: "1px solid rgba(255,255,255,0.07)",
2055
+ fontFamily: "system-ui, sans-serif",
2056
+ boxShadow: "0 10px 40px rgba(0,0,0,0.4)"
2057
+ } }, /* @__PURE__ */ React25.createElement("div", { style: { position: "relative", width: "100%", height: "200px", overflow: "hidden", background: "#000" } }, /* @__PURE__ */ React25.createElement(
2058
+ "img",
2059
+ {
2060
+ key: current,
2061
+ src: img.src,
2062
+ alt: img.title,
2063
+ style: {
2064
+ width: "100%",
2065
+ height: "100%",
2066
+ objectFit: "cover",
2067
+ animation: `sliderFade 0.35s ease`
2068
+ }
2069
+ }
2070
+ ), /* @__PURE__ */ React25.createElement("style", null, `@keyframes sliderFade { from { opacity: 0; transform: scale(1.03); } to { opacity: 1; transform: scale(1); } }`), /* @__PURE__ */ React25.createElement("div", { style: {
2071
+ position: "absolute",
2072
+ inset: 0,
2073
+ background: "linear-gradient(to top, rgba(0,0,0,0.65) 0%, transparent 55%)"
2074
+ } }), img.tag && /* @__PURE__ */ React25.createElement("div", { style: {
2075
+ position: "absolute",
2076
+ top: "12px",
2077
+ left: "12px",
2078
+ padding: "4px 10px",
2079
+ borderRadius: "20px",
2080
+ background: alpha(accent, 0.85),
2081
+ fontSize: "10px",
2082
+ fontWeight: "700",
2083
+ color: "#fff",
2084
+ letterSpacing: "0.5px",
2085
+ textTransform: "uppercase"
2086
+ } }, img.tag), /* @__PURE__ */ React25.createElement("div", { style: {
2087
+ position: "absolute",
2088
+ top: "12px",
2089
+ right: "12px",
2090
+ padding: "4px 10px",
2091
+ borderRadius: "20px",
2092
+ background: "rgba(0,0,0,0.5)",
2093
+ fontSize: "10px",
2094
+ fontWeight: "600",
2095
+ color: "rgba(255,255,255,0.7)"
2096
+ } }, current + 1, " / ", images.length), /* @__PURE__ */ React25.createElement(
2097
+ "button",
2098
+ {
2099
+ onClick: prev,
2100
+ style: {
2101
+ position: "absolute",
2102
+ left: "10px",
2103
+ top: "50%",
2104
+ transform: "translateY(-50%)",
2105
+ width: "34px",
2106
+ height: "34px",
2107
+ borderRadius: "50%",
2108
+ background: "rgba(0,0,0,0.5)",
2109
+ border: "1px solid rgba(255,255,255,0.15)",
2110
+ color: "#fff",
2111
+ cursor: "pointer",
2112
+ display: "flex",
2113
+ alignItems: "center",
2114
+ justifyContent: "center",
2115
+ transition: "background 0.2s",
2116
+ padding: 0
2117
+ },
2118
+ onMouseEnter: (e) => e.currentTarget.style.background = alpha(accent, 0.8),
2119
+ onMouseLeave: (e) => e.currentTarget.style.background = "rgba(0,0,0,0.5)"
2120
+ },
2121
+ /* @__PURE__ */ React25.createElement(
2122
+ "svg",
2123
+ {
2124
+ width: "14",
2125
+ height: "14",
2126
+ viewBox: "0 0 24 24",
2127
+ fill: "none",
2128
+ stroke: "currentColor",
2129
+ strokeWidth: "2.5",
2130
+ strokeLinecap: "round"
2131
+ },
2132
+ /* @__PURE__ */ React25.createElement("polyline", { points: "15 18 9 12 15 6" })
2133
+ )
2134
+ ), /* @__PURE__ */ React25.createElement(
2135
+ "button",
2136
+ {
2137
+ onClick: next,
2138
+ style: {
2139
+ position: "absolute",
2140
+ right: "10px",
2141
+ top: "50%",
2142
+ transform: "translateY(-50%)",
2143
+ width: "34px",
2144
+ height: "34px",
2145
+ borderRadius: "50%",
2146
+ background: "rgba(0,0,0,0.5)",
2147
+ border: "1px solid rgba(255,255,255,0.15)",
2148
+ color: "#fff",
2149
+ cursor: "pointer",
2150
+ display: "flex",
2151
+ alignItems: "center",
2152
+ justifyContent: "center",
2153
+ transition: "background 0.2s",
2154
+ padding: 0
2155
+ },
2156
+ onMouseEnter: (e) => e.currentTarget.style.background = alpha(accent, 0.8),
2157
+ onMouseLeave: (e) => e.currentTarget.style.background = "rgba(0,0,0,0.5)"
2158
+ },
2159
+ /* @__PURE__ */ React25.createElement(
2160
+ "svg",
2161
+ {
2162
+ width: "14",
2163
+ height: "14",
2164
+ viewBox: "0 0 24 24",
2165
+ fill: "none",
2166
+ stroke: "currentColor",
2167
+ strokeWidth: "2.5",
2168
+ strokeLinecap: "round"
2169
+ },
2170
+ /* @__PURE__ */ React25.createElement("polyline", { points: "9 18 15 12 9 6" })
2171
+ )
2172
+ )), showCaption && /* @__PURE__ */ React25.createElement("div", { style: { padding: "14px 16px 4px" } }, /* @__PURE__ */ React25.createElement(
2173
+ "p",
2174
+ {
2175
+ style: {
2176
+ fontSize: "14px",
2177
+ fontWeight: "700",
2178
+ color: "#fff",
2179
+ margin: 0,
2180
+ lineHeight: 1.4,
2181
+ animation: "sliderFade 0.3s ease"
2182
+ },
2183
+ key: current + "-title"
2184
+ },
2185
+ img.title
2186
+ )), showDots && /* @__PURE__ */ React25.createElement("div", { style: {
2187
+ display: "flex",
2188
+ justifyContent: "center",
2189
+ gap: "6px",
2190
+ padding: "12px 16px 16px"
2191
+ } }, images.map((_, i) => /* @__PURE__ */ React25.createElement(
2192
+ "button",
2193
+ {
2194
+ key: i,
2195
+ onClick: () => goTo(i),
2196
+ style: {
2197
+ width: i === current ? "20px" : "6px",
2198
+ height: "6px",
2199
+ borderRadius: "3px",
2200
+ border: "none",
2201
+ cursor: "pointer",
2202
+ padding: 0,
2203
+ background: i === current ? accent : "rgba(255,255,255,0.2)",
2204
+ transition: "all 0.25s ease"
2205
+ }
2206
+ }
2207
+ ))));
2208
+ };
2209
+
2210
+ // src/components/BackgoundImageSlider/BackgoundImageSlider.jsx
2211
+ import React26, { useState as useState19, useEffect as useEffect7, useCallback } from "react";
2212
+ var BackgoundImageSlider = ({
2213
+ images = [
2214
+ {
2215
+ src: "https://images.unsplash.com/photo-1506905925346-21bda4d32df4?w=1400&q=80",
2216
+ tag: "Travel",
2217
+ title: "Hidden Peaks of the Himalayas",
2218
+ description: "A breathtaking journey through untouched landscapes and ancient monasteries."
2219
+ },
2220
+ {
2221
+ src: "https://images.unsplash.com/photo-1477959858617-67f85cf4f1df?w=1400&q=80",
2222
+ tag: "Urban",
2223
+ title: "City Lights at Night",
2224
+ description: "Explore the vibrant energy of the world's most iconic skylines after dark."
2225
+ },
2226
+ {
2227
+ src: "https://images.unsplash.com/photo-1500534314209-a25ddb2bd429?w=1400&q=80",
2228
+ tag: "Nature",
2229
+ title: "Tropical Beach Paradise",
2230
+ description: "Crystal clear waters and white sand beaches that feel like the edge of the world."
2231
+ },
2232
+ {
2233
+ src: "https://images.unsplash.com/photo-1519681393784-d120267933ba?w=1400&q=80",
2234
+ tag: "Adventure",
2235
+ title: "Starry Mountain Night",
2236
+ description: "Where silence meets the cosmos \u2014 a night sky like you've never seen before."
2237
+ }
2238
+ ],
2239
+ width = "100%",
2240
+ height = "520px",
2241
+ accent = "#6366f1",
2242
+ radius = "0px",
2243
+ showDots = true,
2244
+ autoPlay = false,
2245
+ autoPlayInterval = 4e3
2246
+ }) => {
2247
+ const [current, setCurrent] = useState19(0);
2248
+ const [animating, setAnimating] = useState19(false);
2249
+ const alpha = (hex, op) => {
2250
+ const r = parseInt(hex.slice(1, 3), 16);
2251
+ const g = parseInt(hex.slice(3, 5), 16);
2252
+ const b = parseInt(hex.slice(5, 7), 16);
2253
+ return `rgba(${r},${g},${b},${op})`;
2254
+ };
2255
+ const go = useCallback((index) => {
2256
+ if (animating) return;
2257
+ setAnimating(true);
2258
+ setCurrent((index + images.length) % images.length);
2259
+ setTimeout(() => setAnimating(false), 400);
2260
+ }, [animating, images.length]);
2261
+ const prev = () => go(current - 1);
2262
+ const next = () => go(current + 1);
2263
+ useEffect7(() => {
2264
+ if (!autoPlay) return;
2265
+ const t = setInterval(() => go(current + 1), autoPlayInterval);
2266
+ return () => clearInterval(t);
2267
+ }, [autoPlay, autoPlayInterval, current, go]);
2268
+ const img = images[current];
2269
+ return /* @__PURE__ */ React26.createElement(React26.Fragment, null, /* @__PURE__ */ React26.createElement("style", null, `
2270
+ @keyframes hs-fade { from { opacity: 0; transform: scale(1.04); } to { opacity: 1; transform: scale(1); } }
2271
+ @keyframes hs-up { from { opacity: 0; transform: translateY(18px); } to { opacity: 1; transform: translateY(0); } }
2272
+ .hs-prev:hover, .hs-next:hover { background: rgba(0,0,0,0.65) !important; border-color: rgba(255,255,255,0.35) !important; }
2273
+ `), /* @__PURE__ */ React26.createElement("div", { style: {
2274
+ position: "relative",
2275
+ width,
2276
+ height,
2277
+ borderRadius: radius,
2278
+ overflow: "hidden",
2279
+ fontFamily: "system-ui, -apple-system, sans-serif",
2280
+ userSelect: "none"
2281
+ } }, /* @__PURE__ */ React26.createElement(
2282
+ "img",
2283
+ {
2284
+ key: current,
2285
+ src: img.src,
2286
+ alt: img.title,
2287
+ style: {
2288
+ position: "absolute",
2289
+ inset: 0,
2290
+ width: "100%",
2291
+ height: "100%",
2292
+ objectFit: "cover",
2293
+ animation: "hs-fade 0.4s ease"
2294
+ }
2295
+ }
2296
+ ), /* @__PURE__ */ React26.createElement("div", { style: {
2297
+ position: "absolute",
2298
+ inset: 0,
2299
+ background: "linear-gradient(to top, rgba(0,0,0,0.75) 0%, rgba(0,0,0,0.2) 50%, rgba(0,0,0,0.1) 100%)"
2300
+ } }), img.tag && /* @__PURE__ */ React26.createElement(
2301
+ "div",
2302
+ {
2303
+ key: current + "-tag",
2304
+ style: {
2305
+ position: "absolute",
2306
+ top: "24px",
2307
+ left: "28px",
2308
+ padding: "5px 14px",
2309
+ borderRadius: "20px",
2310
+ background: alpha(accent, 0.85),
2311
+ fontSize: "11px",
2312
+ fontWeight: "700",
2313
+ color: "#fff",
2314
+ letterSpacing: "0.6px",
2315
+ textTransform: "uppercase",
2316
+ animation: "hs-up 0.4s ease"
2317
+ }
2318
+ },
2319
+ img.tag
2320
+ ), /* @__PURE__ */ React26.createElement("div", { style: {
2321
+ position: "absolute",
2322
+ top: "24px",
2323
+ right: "28px",
2324
+ padding: "5px 12px",
2325
+ borderRadius: "20px",
2326
+ background: "rgba(0,0,0,0.45)",
2327
+ fontSize: "11px",
2328
+ fontWeight: "600",
2329
+ color: "rgba(255,255,255,0.7)"
2330
+ } }, current + 1, " / ", images.length), /* @__PURE__ */ React26.createElement(
2331
+ "button",
2332
+ {
2333
+ className: "hs-prev",
2334
+ onClick: prev,
2335
+ style: {
2336
+ position: "absolute",
2337
+ left: "20px",
2338
+ top: "50%",
2339
+ transform: "translateY(-50%)",
2340
+ width: "44px",
2341
+ height: "44px",
2342
+ borderRadius: "50%",
2343
+ background: "rgba(0,0,0,0.4)",
2344
+ border: "1px solid rgba(255,255,255,0.2)",
2345
+ color: "#fff",
2346
+ cursor: "pointer",
2347
+ display: "flex",
2348
+ alignItems: "center",
2349
+ justifyContent: "center",
2350
+ transition: "all 0.2s",
2351
+ padding: 0,
2352
+ zIndex: 10
2353
+ }
2354
+ },
2355
+ /* @__PURE__ */ React26.createElement(
2356
+ "svg",
2357
+ {
2358
+ width: "18",
2359
+ height: "18",
2360
+ viewBox: "0 0 24 24",
2361
+ fill: "none",
2362
+ stroke: "currentColor",
2363
+ strokeWidth: "2.5",
2364
+ strokeLinecap: "round",
2365
+ strokeLinejoin: "round"
2366
+ },
2367
+ /* @__PURE__ */ React26.createElement("polyline", { points: "15 18 9 12 15 6" })
2368
+ )
2369
+ ), /* @__PURE__ */ React26.createElement(
2370
+ "button",
2371
+ {
2372
+ className: "hs-next",
2373
+ onClick: next,
2374
+ style: {
2375
+ position: "absolute",
2376
+ right: "20px",
2377
+ top: "50%",
2378
+ transform: "translateY(-50%)",
2379
+ width: "44px",
2380
+ height: "44px",
2381
+ borderRadius: "50%",
2382
+ background: "rgba(0,0,0,0.4)",
2383
+ border: "1px solid rgba(255,255,255,0.2)",
2384
+ color: "#fff",
2385
+ cursor: "pointer",
2386
+ display: "flex",
2387
+ alignItems: "center",
2388
+ justifyContent: "center",
2389
+ transition: "all 0.2s",
2390
+ padding: 0,
2391
+ zIndex: 10
2392
+ }
2393
+ },
2394
+ /* @__PURE__ */ React26.createElement(
2395
+ "svg",
2396
+ {
2397
+ width: "18",
2398
+ height: "18",
2399
+ viewBox: "0 0 24 24",
2400
+ fill: "none",
2401
+ stroke: "currentColor",
2402
+ strokeWidth: "2.5",
2403
+ strokeLinecap: "round",
2404
+ strokeLinejoin: "round"
2405
+ },
2406
+ /* @__PURE__ */ React26.createElement("polyline", { points: "9 18 15 12 9 6" })
2407
+ )
2408
+ ), /* @__PURE__ */ React26.createElement("div", { style: {
2409
+ position: "absolute",
2410
+ bottom: showDots ? "56px" : "28px",
2411
+ left: "28px",
2412
+ right: "28px",
2413
+ zIndex: 5
2414
+ } }, /* @__PURE__ */ React26.createElement(
2415
+ "h2",
2416
+ {
2417
+ key: current + "-title",
2418
+ style: {
2419
+ fontSize: "clamp(20px, 4vw, 36px)",
2420
+ fontWeight: "800",
2421
+ color: "#fff",
2422
+ margin: "0 0 8px",
2423
+ lineHeight: 1.25,
2424
+ textShadow: "0 2px 12px rgba(0,0,0,0.4)",
2425
+ animation: "hs-up 0.45s ease",
2426
+ maxWidth: "600px"
2427
+ }
2428
+ },
2429
+ img.title
2430
+ ), /* @__PURE__ */ React26.createElement(
2431
+ "p",
2432
+ {
2433
+ key: current + "-desc",
2434
+ style: {
2435
+ fontSize: "clamp(13px, 2vw, 15px)",
2436
+ color: "rgba(255,255,255,0.7)",
2437
+ margin: 0,
2438
+ lineHeight: 1.6,
2439
+ textShadow: "0 1px 6px rgba(0,0,0,0.5)",
2440
+ animation: "hs-up 0.5s ease",
2441
+ maxWidth: "500px"
2442
+ }
2443
+ },
2444
+ img.description
2445
+ )), showDots && /* @__PURE__ */ React26.createElement("div", { style: {
2446
+ position: "absolute",
2447
+ bottom: "20px",
2448
+ left: 0,
2449
+ right: 0,
2450
+ display: "flex",
2451
+ justifyContent: "center",
2452
+ gap: "6px",
2453
+ zIndex: 5
2454
+ } }, images.map((_, i) => /* @__PURE__ */ React26.createElement(
2455
+ "button",
2456
+ {
2457
+ key: i,
2458
+ onClick: () => go(i),
2459
+ style: {
2460
+ width: i === current ? "24px" : "7px",
2461
+ height: "7px",
2462
+ borderRadius: "4px",
2463
+ border: "none",
2464
+ padding: 0,
2465
+ cursor: "pointer",
2466
+ background: i === current ? accent : "rgba(255,255,255,0.4)",
2467
+ transition: "all 0.3s ease"
2468
+ }
2469
+ }
2470
+ )))));
2471
+ };
1995
2472
  export {
1996
2473
  Avatar,
1997
2474
  AvatarCard,
2475
+ BackgoundImageSlider,
1998
2476
  Charts,
1999
2477
  CodeBlock,
2000
2478
  CustomInputField,
@@ -2002,6 +2480,7 @@ export {
2002
2480
  FileUpload,
2003
2481
  Footer,
2004
2482
  ImageCard,
2483
+ ImageSlider,
2005
2484
  Loader,
2006
2485
  LoadingSpinner,
2007
2486
  Navbar,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "virtual-ui-lib",
3
- "version": "1.0.64",
3
+ "version": "1.0.66",
4
4
  "description": "Virtual UI React Component Library",
5
5
  "author": "Ankush",
6
6
  "license": "ISC",