virtual-ui-lib 1.0.59 → 1.0.61

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
@@ -35,8 +35,10 @@ __export(index_exports, {
35
35
  CustomInputField: () => CustomInputField,
36
36
  DividerLine: () => DividerLine,
37
37
  FileUpload: () => FileUpload,
38
+ Footer: () => Footer,
38
39
  Loader: () => Loader,
39
40
  LoadingSpinner: () => LoadingSpinner,
41
+ Navbar: () => Navbar,
40
42
  NotificationToast: () => NotificationToast,
41
43
  OtpInput: () => OtpInput,
42
44
  PricingCard: () => PricingCard,
@@ -1115,6 +1117,309 @@ var PricingCard = ({
1115
1117
  ctaText
1116
1118
  ));
1117
1119
  };
1120
+
1121
+ // src/components/Navbar/Navbar.jsx
1122
+ var import_react20 = __toESM(require("react"));
1123
+ var Navbar = ({
1124
+ logo = "VirtualAI",
1125
+ links = ["Home", "Features", "Pricing", "Blog"],
1126
+ ctaText = "Get Started",
1127
+ accent = "#6366f1",
1128
+ bg = "#0f172a",
1129
+ onCtaClick = () => {
1130
+ },
1131
+ onLinkClick = () => {
1132
+ }
1133
+ }) => {
1134
+ const [scrolled, setScrolled] = (0, import_react20.useState)(false);
1135
+ const [menuOpen, setMenuOpen] = (0, import_react20.useState)(false);
1136
+ const [active, setActive] = (0, import_react20.useState)("Home");
1137
+ const [isMobile, setIsMobile] = (0, import_react20.useState)(false);
1138
+ const alpha = (hex, op) => {
1139
+ const r = parseInt(hex.slice(1, 3), 16);
1140
+ const g = parseInt(hex.slice(3, 5), 16);
1141
+ const b = parseInt(hex.slice(5, 7), 16);
1142
+ return `rgba(${r},${g},${b},${op})`;
1143
+ };
1144
+ (0, import_react20.useEffect)(() => {
1145
+ const checkMobile = () => setIsMobile(window.innerWidth < 768);
1146
+ checkMobile();
1147
+ window.addEventListener("resize", checkMobile);
1148
+ return () => window.removeEventListener("resize", checkMobile);
1149
+ }, []);
1150
+ (0, import_react20.useEffect)(() => {
1151
+ const handler = () => setScrolled(window.scrollY > 10);
1152
+ window.addEventListener("scroll", handler);
1153
+ return () => window.removeEventListener("scroll", handler);
1154
+ }, []);
1155
+ (0, import_react20.useEffect)(() => {
1156
+ if (!isMobile) setMenuOpen(false);
1157
+ }, [isMobile]);
1158
+ const handleLink = (link) => {
1159
+ setActive(link);
1160
+ setMenuOpen(false);
1161
+ onLinkClick(link);
1162
+ };
1163
+ return /* @__PURE__ */ import_react20.default.createElement(import_react20.default.Fragment, null, /* @__PURE__ */ import_react20.default.createElement("style", null, `
1164
+ @keyframes nbSlideDown {
1165
+ from { opacity: 0; transform: translateY(-8px); }
1166
+ to { opacity: 1; transform: translateY(0); }
1167
+ }
1168
+ .nb-link:hover { color: rgba(255,255,255,0.9) !important; background: rgba(255,255,255,0.05) !important; }
1169
+ .nb-cta:hover { opacity: 0.85 !important; }
1170
+ .nb-ham:hover { background: rgba(255,255,255,0.1) !important; }
1171
+ .nb-mlink:hover { background: rgba(255,255,255,0.06) !important; }
1172
+ `), /* @__PURE__ */ import_react20.default.createElement("nav", { style: {
1173
+ position: "sticky",
1174
+ top: 0,
1175
+ left: 0,
1176
+ right: 0,
1177
+ zIndex: 1e3,
1178
+ background: scrolled ? alpha(bg, 0.96) : bg,
1179
+ borderBottom: `1px solid ${scrolled ? "rgba(255,255,255,0.09)" : "rgba(255,255,255,0.04)"}`,
1180
+ backdropFilter: scrolled ? "blur(12px)" : "none",
1181
+ WebkitBackdropFilter: scrolled ? "blur(12px)" : "none",
1182
+ transition: "all 0.3s ease",
1183
+ fontFamily: "system-ui, -apple-system, sans-serif",
1184
+ width: "100%",
1185
+ boxSizing: "border-box"
1186
+ } }, /* @__PURE__ */ import_react20.default.createElement("div", { style: {
1187
+ maxWidth: "1200px",
1188
+ margin: "0 auto",
1189
+ padding: "0 20px",
1190
+ height: isMobile ? "56px" : "64px",
1191
+ display: "flex",
1192
+ alignItems: "center",
1193
+ justifyContent: "space-between",
1194
+ gap: "16px",
1195
+ boxSizing: "border-box"
1196
+ } }, /* @__PURE__ */ import_react20.default.createElement("div", { style: { display: "flex", alignItems: "center", gap: "8px", cursor: "pointer", flexShrink: 0 } }, /* @__PURE__ */ import_react20.default.createElement("div", { style: {
1197
+ width: isMobile ? "26px" : "30px",
1198
+ height: isMobile ? "26px" : "30px",
1199
+ borderRadius: "8px",
1200
+ background: `linear-gradient(135deg, ${accent}, ${alpha(accent, 0.6)})`,
1201
+ display: "flex",
1202
+ alignItems: "center",
1203
+ justifyContent: "center",
1204
+ fontSize: isMobile ? "12px" : "14px",
1205
+ fontWeight: "800",
1206
+ color: "#fff",
1207
+ flexShrink: 0
1208
+ } }, logo[0]), /* @__PURE__ */ import_react20.default.createElement("span", { style: {
1209
+ fontSize: isMobile ? "14px" : "16px",
1210
+ fontWeight: "800",
1211
+ color: "#fff",
1212
+ letterSpacing: "-0.3px"
1213
+ } }, logo)), !isMobile && /* @__PURE__ */ import_react20.default.createElement("div", { style: { display: "flex", alignItems: "center", gap: "2px", flex: 1, justifyContent: "center" } }, links.map((link) => /* @__PURE__ */ import_react20.default.createElement(
1214
+ "button",
1215
+ {
1216
+ key: link,
1217
+ className: "nb-link",
1218
+ onClick: () => handleLink(link),
1219
+ style: {
1220
+ background: active === link ? alpha(accent, 0.12) : "transparent",
1221
+ border: "none",
1222
+ padding: "7px 16px",
1223
+ borderRadius: "9px",
1224
+ fontSize: "14px",
1225
+ fontWeight: active === link ? "700" : "500",
1226
+ color: active === link ? accent : "rgba(255,255,255,0.5)",
1227
+ cursor: "pointer",
1228
+ transition: "all 0.2s",
1229
+ fontFamily: "inherit",
1230
+ whiteSpace: "nowrap"
1231
+ }
1232
+ },
1233
+ link
1234
+ ))), /* @__PURE__ */ import_react20.default.createElement("div", { style: { display: "flex", alignItems: "center", gap: "8px", flexShrink: 0 } }, /* @__PURE__ */ import_react20.default.createElement(
1235
+ "button",
1236
+ {
1237
+ className: "nb-cta",
1238
+ onClick: onCtaClick,
1239
+ style: {
1240
+ padding: isMobile ? "7px 14px" : "9px 20px",
1241
+ borderRadius: "10px",
1242
+ border: "none",
1243
+ background: `linear-gradient(135deg, ${accent}, ${alpha(accent, 0.75)})`,
1244
+ color: "#fff",
1245
+ fontSize: isMobile ? "12px" : "13px",
1246
+ fontWeight: "700",
1247
+ cursor: "pointer",
1248
+ fontFamily: "inherit",
1249
+ transition: "opacity 0.2s",
1250
+ whiteSpace: "nowrap"
1251
+ }
1252
+ },
1253
+ ctaText
1254
+ ), isMobile && /* @__PURE__ */ import_react20.default.createElement(
1255
+ "button",
1256
+ {
1257
+ className: "nb-ham",
1258
+ onClick: () => setMenuOpen((o) => !o),
1259
+ style: {
1260
+ background: "rgba(255,255,255,0.06)",
1261
+ border: "1px solid rgba(255,255,255,0.1)",
1262
+ borderRadius: "8px",
1263
+ width: "34px",
1264
+ height: "34px",
1265
+ cursor: "pointer",
1266
+ display: "flex",
1267
+ flexDirection: "column",
1268
+ alignItems: "center",
1269
+ justifyContent: "center",
1270
+ gap: "5px",
1271
+ transition: "background 0.2s",
1272
+ flexShrink: 0,
1273
+ padding: 0
1274
+ }
1275
+ },
1276
+ /* @__PURE__ */ import_react20.default.createElement("div", { style: {
1277
+ width: "16px",
1278
+ height: "1.5px",
1279
+ background: "rgba(255,255,255,0.7)",
1280
+ borderRadius: "2px",
1281
+ transform: menuOpen ? "rotate(45deg) translate(4px, 4px)" : "none",
1282
+ transition: "transform 0.25s"
1283
+ } }),
1284
+ /* @__PURE__ */ import_react20.default.createElement("div", { style: {
1285
+ width: "16px",
1286
+ height: "1.5px",
1287
+ background: "rgba(255,255,255,0.7)",
1288
+ borderRadius: "2px",
1289
+ opacity: menuOpen ? 0 : 1,
1290
+ transition: "opacity 0.2s"
1291
+ } }),
1292
+ /* @__PURE__ */ import_react20.default.createElement("div", { style: {
1293
+ width: "16px",
1294
+ height: "1.5px",
1295
+ background: "rgba(255,255,255,0.7)",
1296
+ borderRadius: "2px",
1297
+ transform: menuOpen ? "rotate(-45deg) translate(4px, -4px)" : "none",
1298
+ transition: "transform 0.25s"
1299
+ } })
1300
+ ))), isMobile && menuOpen && /* @__PURE__ */ import_react20.default.createElement("div", { style: {
1301
+ animation: "nbSlideDown 0.2s ease",
1302
+ borderTop: "1px solid rgba(255,255,255,0.06)",
1303
+ padding: "10px 16px 16px",
1304
+ display: "flex",
1305
+ flexDirection: "column",
1306
+ gap: "3px",
1307
+ background: alpha(bg, 0.98)
1308
+ } }, links.map((link) => /* @__PURE__ */ import_react20.default.createElement(
1309
+ "button",
1310
+ {
1311
+ key: link,
1312
+ className: "nb-mlink",
1313
+ onClick: () => handleLink(link),
1314
+ style: {
1315
+ background: active === link ? alpha(accent, 0.1) : "transparent",
1316
+ border: "none",
1317
+ padding: "11px 14px",
1318
+ borderRadius: "10px",
1319
+ fontSize: "14px",
1320
+ fontWeight: active === link ? "700" : "500",
1321
+ color: active === link ? accent : "rgba(255,255,255,0.55)",
1322
+ cursor: "pointer",
1323
+ textAlign: "left",
1324
+ fontFamily: "inherit",
1325
+ width: "100%",
1326
+ transition: "all 0.15s",
1327
+ display: "flex",
1328
+ alignItems: "center",
1329
+ justifyContent: "space-between"
1330
+ }
1331
+ },
1332
+ link,
1333
+ active === link && /* @__PURE__ */ import_react20.default.createElement(
1334
+ "svg",
1335
+ {
1336
+ width: "14",
1337
+ height: "14",
1338
+ viewBox: "0 0 24 24",
1339
+ fill: "none",
1340
+ stroke: accent,
1341
+ strokeWidth: "2.5",
1342
+ strokeLinecap: "round"
1343
+ },
1344
+ /* @__PURE__ */ import_react20.default.createElement("polyline", { points: "9 18 15 12 9 6" })
1345
+ )
1346
+ )), /* @__PURE__ */ import_react20.default.createElement("div", { style: { height: "1px", background: "rgba(255,255,255,0.07)", margin: "8px 0" } }), /* @__PURE__ */ import_react20.default.createElement(
1347
+ "button",
1348
+ {
1349
+ onClick: () => {
1350
+ setMenuOpen(false);
1351
+ onCtaClick();
1352
+ },
1353
+ style: {
1354
+ background: `linear-gradient(135deg, ${accent}, ${alpha(accent, 0.75)})`,
1355
+ border: "none",
1356
+ padding: "12px",
1357
+ borderRadius: "12px",
1358
+ fontSize: "14px",
1359
+ fontWeight: "700",
1360
+ color: "#fff",
1361
+ cursor: "pointer",
1362
+ fontFamily: "inherit",
1363
+ width: "100%"
1364
+ }
1365
+ },
1366
+ ctaText
1367
+ ))));
1368
+ };
1369
+
1370
+ // src/components/Footer/Footer.jsx
1371
+ var import_react21 = __toESM(require("react"));
1372
+ var Footer = ({
1373
+ logo = "VirtualAI",
1374
+ links = ["Home", "Features", "Pricing", "Blog", "Contact"],
1375
+ copyright = "VirtualAI",
1376
+ accent = "#6366f1",
1377
+ bg = "#0f172a"
1378
+ }) => {
1379
+ return /* @__PURE__ */ import_react21.default.createElement("footer", { style: {
1380
+ background: bg,
1381
+ borderTop: "1px solid rgba(255,255,255,0.06)",
1382
+ fontFamily: "system-ui, sans-serif",
1383
+ width: "100%",
1384
+ boxSizing: "border-box",
1385
+ padding: "28px 24px"
1386
+ } }, /* @__PURE__ */ import_react21.default.createElement("div", { style: {
1387
+ maxWidth: "900px",
1388
+ margin: "0 auto",
1389
+ display: "flex",
1390
+ flexDirection: "column",
1391
+ alignItems: "center",
1392
+ gap: "20px"
1393
+ } }, /* @__PURE__ */ import_react21.default.createElement("div", { style: { display: "flex", alignItems: "center", gap: "8px" } }, /* @__PURE__ */ import_react21.default.createElement("div", { style: {
1394
+ width: "26px",
1395
+ height: "26px",
1396
+ borderRadius: "7px",
1397
+ background: `linear-gradient(135deg, ${accent}, rgba(99,102,241,0.5))`,
1398
+ display: "flex",
1399
+ alignItems: "center",
1400
+ justifyContent: "center",
1401
+ fontSize: "12px",
1402
+ fontWeight: "800",
1403
+ color: "#fff"
1404
+ } }, logo[0]), /* @__PURE__ */ import_react21.default.createElement("span", { style: { fontSize: "15px", fontWeight: "800", color: "#fff" } }, logo)), /* @__PURE__ */ import_react21.default.createElement("div", { style: { display: "flex", flexWrap: "wrap", justifyContent: "center", gap: "4px" } }, links.map((link) => /* @__PURE__ */ import_react21.default.createElement(
1405
+ "a",
1406
+ {
1407
+ key: link,
1408
+ href: "#",
1409
+ style: {
1410
+ fontSize: "13px",
1411
+ color: "rgba(255,255,255,0.4)",
1412
+ textDecoration: "none",
1413
+ padding: "4px 12px",
1414
+ borderRadius: "8px",
1415
+ transition: "color 0.2s"
1416
+ },
1417
+ onMouseEnter: (e) => e.currentTarget.style.color = "rgba(255,255,255,0.85)",
1418
+ onMouseLeave: (e) => e.currentTarget.style.color = "rgba(255,255,255,0.4)"
1419
+ },
1420
+ link
1421
+ ))), /* @__PURE__ */ import_react21.default.createElement("div", { style: { width: "100%", height: "1px", background: "rgba(255,255,255,0.06)" } }), /* @__PURE__ */ import_react21.default.createElement("p", { style: { fontSize: "12px", color: "rgba(255,255,255,0.22)", margin: 0 } }, "\xA9 ", (/* @__PURE__ */ new Date()).getFullYear(), " ", copyright, ". All rights reserved.")));
1422
+ };
1118
1423
  // Annotate the CommonJS export names for ESM import in node:
1119
1424
  0 && (module.exports = {
1120
1425
  Avatar,
@@ -1123,8 +1428,10 @@ var PricingCard = ({
1123
1428
  CustomInputField,
1124
1429
  DividerLine,
1125
1430
  FileUpload,
1431
+ Footer,
1126
1432
  Loader,
1127
1433
  LoadingSpinner,
1434
+ Navbar,
1128
1435
  NotificationToast,
1129
1436
  OtpInput,
1130
1437
  PricingCard,
package/dist/index.mjs CHANGED
@@ -1062,6 +1062,309 @@ var PricingCard = ({
1062
1062
  ctaText
1063
1063
  ));
1064
1064
  };
1065
+
1066
+ // src/components/Navbar/Navbar.jsx
1067
+ import React20, { useState as useState14, useEffect as useEffect6 } from "react";
1068
+ var Navbar = ({
1069
+ logo = "VirtualAI",
1070
+ links = ["Home", "Features", "Pricing", "Blog"],
1071
+ ctaText = "Get Started",
1072
+ accent = "#6366f1",
1073
+ bg = "#0f172a",
1074
+ onCtaClick = () => {
1075
+ },
1076
+ onLinkClick = () => {
1077
+ }
1078
+ }) => {
1079
+ const [scrolled, setScrolled] = useState14(false);
1080
+ const [menuOpen, setMenuOpen] = useState14(false);
1081
+ const [active, setActive] = useState14("Home");
1082
+ const [isMobile, setIsMobile] = useState14(false);
1083
+ const alpha = (hex, op) => {
1084
+ const r = parseInt(hex.slice(1, 3), 16);
1085
+ const g = parseInt(hex.slice(3, 5), 16);
1086
+ const b = parseInt(hex.slice(5, 7), 16);
1087
+ return `rgba(${r},${g},${b},${op})`;
1088
+ };
1089
+ useEffect6(() => {
1090
+ const checkMobile = () => setIsMobile(window.innerWidth < 768);
1091
+ checkMobile();
1092
+ window.addEventListener("resize", checkMobile);
1093
+ return () => window.removeEventListener("resize", checkMobile);
1094
+ }, []);
1095
+ useEffect6(() => {
1096
+ const handler = () => setScrolled(window.scrollY > 10);
1097
+ window.addEventListener("scroll", handler);
1098
+ return () => window.removeEventListener("scroll", handler);
1099
+ }, []);
1100
+ useEffect6(() => {
1101
+ if (!isMobile) setMenuOpen(false);
1102
+ }, [isMobile]);
1103
+ const handleLink = (link) => {
1104
+ setActive(link);
1105
+ setMenuOpen(false);
1106
+ onLinkClick(link);
1107
+ };
1108
+ return /* @__PURE__ */ React20.createElement(React20.Fragment, null, /* @__PURE__ */ React20.createElement("style", null, `
1109
+ @keyframes nbSlideDown {
1110
+ from { opacity: 0; transform: translateY(-8px); }
1111
+ to { opacity: 1; transform: translateY(0); }
1112
+ }
1113
+ .nb-link:hover { color: rgba(255,255,255,0.9) !important; background: rgba(255,255,255,0.05) !important; }
1114
+ .nb-cta:hover { opacity: 0.85 !important; }
1115
+ .nb-ham:hover { background: rgba(255,255,255,0.1) !important; }
1116
+ .nb-mlink:hover { background: rgba(255,255,255,0.06) !important; }
1117
+ `), /* @__PURE__ */ React20.createElement("nav", { style: {
1118
+ position: "sticky",
1119
+ top: 0,
1120
+ left: 0,
1121
+ right: 0,
1122
+ zIndex: 1e3,
1123
+ background: scrolled ? alpha(bg, 0.96) : bg,
1124
+ borderBottom: `1px solid ${scrolled ? "rgba(255,255,255,0.09)" : "rgba(255,255,255,0.04)"}`,
1125
+ backdropFilter: scrolled ? "blur(12px)" : "none",
1126
+ WebkitBackdropFilter: scrolled ? "blur(12px)" : "none",
1127
+ transition: "all 0.3s ease",
1128
+ fontFamily: "system-ui, -apple-system, sans-serif",
1129
+ width: "100%",
1130
+ boxSizing: "border-box"
1131
+ } }, /* @__PURE__ */ React20.createElement("div", { style: {
1132
+ maxWidth: "1200px",
1133
+ margin: "0 auto",
1134
+ padding: "0 20px",
1135
+ height: isMobile ? "56px" : "64px",
1136
+ display: "flex",
1137
+ alignItems: "center",
1138
+ justifyContent: "space-between",
1139
+ gap: "16px",
1140
+ boxSizing: "border-box"
1141
+ } }, /* @__PURE__ */ React20.createElement("div", { style: { display: "flex", alignItems: "center", gap: "8px", cursor: "pointer", flexShrink: 0 } }, /* @__PURE__ */ React20.createElement("div", { style: {
1142
+ width: isMobile ? "26px" : "30px",
1143
+ height: isMobile ? "26px" : "30px",
1144
+ borderRadius: "8px",
1145
+ background: `linear-gradient(135deg, ${accent}, ${alpha(accent, 0.6)})`,
1146
+ display: "flex",
1147
+ alignItems: "center",
1148
+ justifyContent: "center",
1149
+ fontSize: isMobile ? "12px" : "14px",
1150
+ fontWeight: "800",
1151
+ color: "#fff",
1152
+ flexShrink: 0
1153
+ } }, logo[0]), /* @__PURE__ */ React20.createElement("span", { style: {
1154
+ fontSize: isMobile ? "14px" : "16px",
1155
+ fontWeight: "800",
1156
+ color: "#fff",
1157
+ letterSpacing: "-0.3px"
1158
+ } }, logo)), !isMobile && /* @__PURE__ */ React20.createElement("div", { style: { display: "flex", alignItems: "center", gap: "2px", flex: 1, justifyContent: "center" } }, links.map((link) => /* @__PURE__ */ React20.createElement(
1159
+ "button",
1160
+ {
1161
+ key: link,
1162
+ className: "nb-link",
1163
+ onClick: () => handleLink(link),
1164
+ style: {
1165
+ background: active === link ? alpha(accent, 0.12) : "transparent",
1166
+ border: "none",
1167
+ padding: "7px 16px",
1168
+ borderRadius: "9px",
1169
+ fontSize: "14px",
1170
+ fontWeight: active === link ? "700" : "500",
1171
+ color: active === link ? accent : "rgba(255,255,255,0.5)",
1172
+ cursor: "pointer",
1173
+ transition: "all 0.2s",
1174
+ fontFamily: "inherit",
1175
+ whiteSpace: "nowrap"
1176
+ }
1177
+ },
1178
+ link
1179
+ ))), /* @__PURE__ */ React20.createElement("div", { style: { display: "flex", alignItems: "center", gap: "8px", flexShrink: 0 } }, /* @__PURE__ */ React20.createElement(
1180
+ "button",
1181
+ {
1182
+ className: "nb-cta",
1183
+ onClick: onCtaClick,
1184
+ style: {
1185
+ padding: isMobile ? "7px 14px" : "9px 20px",
1186
+ borderRadius: "10px",
1187
+ border: "none",
1188
+ background: `linear-gradient(135deg, ${accent}, ${alpha(accent, 0.75)})`,
1189
+ color: "#fff",
1190
+ fontSize: isMobile ? "12px" : "13px",
1191
+ fontWeight: "700",
1192
+ cursor: "pointer",
1193
+ fontFamily: "inherit",
1194
+ transition: "opacity 0.2s",
1195
+ whiteSpace: "nowrap"
1196
+ }
1197
+ },
1198
+ ctaText
1199
+ ), isMobile && /* @__PURE__ */ React20.createElement(
1200
+ "button",
1201
+ {
1202
+ className: "nb-ham",
1203
+ onClick: () => setMenuOpen((o) => !o),
1204
+ style: {
1205
+ background: "rgba(255,255,255,0.06)",
1206
+ border: "1px solid rgba(255,255,255,0.1)",
1207
+ borderRadius: "8px",
1208
+ width: "34px",
1209
+ height: "34px",
1210
+ cursor: "pointer",
1211
+ display: "flex",
1212
+ flexDirection: "column",
1213
+ alignItems: "center",
1214
+ justifyContent: "center",
1215
+ gap: "5px",
1216
+ transition: "background 0.2s",
1217
+ flexShrink: 0,
1218
+ padding: 0
1219
+ }
1220
+ },
1221
+ /* @__PURE__ */ React20.createElement("div", { style: {
1222
+ width: "16px",
1223
+ height: "1.5px",
1224
+ background: "rgba(255,255,255,0.7)",
1225
+ borderRadius: "2px",
1226
+ transform: menuOpen ? "rotate(45deg) translate(4px, 4px)" : "none",
1227
+ transition: "transform 0.25s"
1228
+ } }),
1229
+ /* @__PURE__ */ React20.createElement("div", { style: {
1230
+ width: "16px",
1231
+ height: "1.5px",
1232
+ background: "rgba(255,255,255,0.7)",
1233
+ borderRadius: "2px",
1234
+ opacity: menuOpen ? 0 : 1,
1235
+ transition: "opacity 0.2s"
1236
+ } }),
1237
+ /* @__PURE__ */ React20.createElement("div", { style: {
1238
+ width: "16px",
1239
+ height: "1.5px",
1240
+ background: "rgba(255,255,255,0.7)",
1241
+ borderRadius: "2px",
1242
+ transform: menuOpen ? "rotate(-45deg) translate(4px, -4px)" : "none",
1243
+ transition: "transform 0.25s"
1244
+ } })
1245
+ ))), isMobile && menuOpen && /* @__PURE__ */ React20.createElement("div", { style: {
1246
+ animation: "nbSlideDown 0.2s ease",
1247
+ borderTop: "1px solid rgba(255,255,255,0.06)",
1248
+ padding: "10px 16px 16px",
1249
+ display: "flex",
1250
+ flexDirection: "column",
1251
+ gap: "3px",
1252
+ background: alpha(bg, 0.98)
1253
+ } }, links.map((link) => /* @__PURE__ */ React20.createElement(
1254
+ "button",
1255
+ {
1256
+ key: link,
1257
+ className: "nb-mlink",
1258
+ onClick: () => handleLink(link),
1259
+ style: {
1260
+ background: active === link ? alpha(accent, 0.1) : "transparent",
1261
+ border: "none",
1262
+ padding: "11px 14px",
1263
+ borderRadius: "10px",
1264
+ fontSize: "14px",
1265
+ fontWeight: active === link ? "700" : "500",
1266
+ color: active === link ? accent : "rgba(255,255,255,0.55)",
1267
+ cursor: "pointer",
1268
+ textAlign: "left",
1269
+ fontFamily: "inherit",
1270
+ width: "100%",
1271
+ transition: "all 0.15s",
1272
+ display: "flex",
1273
+ alignItems: "center",
1274
+ justifyContent: "space-between"
1275
+ }
1276
+ },
1277
+ link,
1278
+ active === link && /* @__PURE__ */ React20.createElement(
1279
+ "svg",
1280
+ {
1281
+ width: "14",
1282
+ height: "14",
1283
+ viewBox: "0 0 24 24",
1284
+ fill: "none",
1285
+ stroke: accent,
1286
+ strokeWidth: "2.5",
1287
+ strokeLinecap: "round"
1288
+ },
1289
+ /* @__PURE__ */ React20.createElement("polyline", { points: "9 18 15 12 9 6" })
1290
+ )
1291
+ )), /* @__PURE__ */ React20.createElement("div", { style: { height: "1px", background: "rgba(255,255,255,0.07)", margin: "8px 0" } }), /* @__PURE__ */ React20.createElement(
1292
+ "button",
1293
+ {
1294
+ onClick: () => {
1295
+ setMenuOpen(false);
1296
+ onCtaClick();
1297
+ },
1298
+ style: {
1299
+ background: `linear-gradient(135deg, ${accent}, ${alpha(accent, 0.75)})`,
1300
+ border: "none",
1301
+ padding: "12px",
1302
+ borderRadius: "12px",
1303
+ fontSize: "14px",
1304
+ fontWeight: "700",
1305
+ color: "#fff",
1306
+ cursor: "pointer",
1307
+ fontFamily: "inherit",
1308
+ width: "100%"
1309
+ }
1310
+ },
1311
+ ctaText
1312
+ ))));
1313
+ };
1314
+
1315
+ // src/components/Footer/Footer.jsx
1316
+ import React21 from "react";
1317
+ var Footer = ({
1318
+ logo = "VirtualAI",
1319
+ links = ["Home", "Features", "Pricing", "Blog", "Contact"],
1320
+ copyright = "VirtualAI",
1321
+ accent = "#6366f1",
1322
+ bg = "#0f172a"
1323
+ }) => {
1324
+ return /* @__PURE__ */ React21.createElement("footer", { style: {
1325
+ background: bg,
1326
+ borderTop: "1px solid rgba(255,255,255,0.06)",
1327
+ fontFamily: "system-ui, sans-serif",
1328
+ width: "100%",
1329
+ boxSizing: "border-box",
1330
+ padding: "28px 24px"
1331
+ } }, /* @__PURE__ */ React21.createElement("div", { style: {
1332
+ maxWidth: "900px",
1333
+ margin: "0 auto",
1334
+ display: "flex",
1335
+ flexDirection: "column",
1336
+ alignItems: "center",
1337
+ gap: "20px"
1338
+ } }, /* @__PURE__ */ React21.createElement("div", { style: { display: "flex", alignItems: "center", gap: "8px" } }, /* @__PURE__ */ React21.createElement("div", { style: {
1339
+ width: "26px",
1340
+ height: "26px",
1341
+ borderRadius: "7px",
1342
+ background: `linear-gradient(135deg, ${accent}, rgba(99,102,241,0.5))`,
1343
+ display: "flex",
1344
+ alignItems: "center",
1345
+ justifyContent: "center",
1346
+ fontSize: "12px",
1347
+ fontWeight: "800",
1348
+ color: "#fff"
1349
+ } }, logo[0]), /* @__PURE__ */ React21.createElement("span", { style: { fontSize: "15px", fontWeight: "800", color: "#fff" } }, logo)), /* @__PURE__ */ React21.createElement("div", { style: { display: "flex", flexWrap: "wrap", justifyContent: "center", gap: "4px" } }, links.map((link) => /* @__PURE__ */ React21.createElement(
1350
+ "a",
1351
+ {
1352
+ key: link,
1353
+ href: "#",
1354
+ style: {
1355
+ fontSize: "13px",
1356
+ color: "rgba(255,255,255,0.4)",
1357
+ textDecoration: "none",
1358
+ padding: "4px 12px",
1359
+ borderRadius: "8px",
1360
+ transition: "color 0.2s"
1361
+ },
1362
+ onMouseEnter: (e) => e.currentTarget.style.color = "rgba(255,255,255,0.85)",
1363
+ onMouseLeave: (e) => e.currentTarget.style.color = "rgba(255,255,255,0.4)"
1364
+ },
1365
+ link
1366
+ ))), /* @__PURE__ */ React21.createElement("div", { style: { width: "100%", height: "1px", background: "rgba(255,255,255,0.06)" } }), /* @__PURE__ */ React21.createElement("p", { style: { fontSize: "12px", color: "rgba(255,255,255,0.22)", margin: 0 } }, "\xA9 ", (/* @__PURE__ */ new Date()).getFullYear(), " ", copyright, ". All rights reserved.")));
1367
+ };
1065
1368
  export {
1066
1369
  Avatar,
1067
1370
  AvatarCard,
@@ -1069,8 +1372,10 @@ export {
1069
1372
  CustomInputField,
1070
1373
  DividerLine,
1071
1374
  FileUpload,
1375
+ Footer,
1072
1376
  Loader,
1073
1377
  LoadingSpinner,
1378
+ Navbar,
1074
1379
  NotificationToast,
1075
1380
  OtpInput,
1076
1381
  PricingCard,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "virtual-ui-lib",
3
- "version": "1.0.59",
3
+ "version": "1.0.61",
4
4
  "description": "Virtual UI React Component Library",
5
5
  "author": "Ankush",
6
6
  "license": "ISC",