@luxonis/component-lib 1.1.1 → 1.1.3

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
@@ -134,6 +134,7 @@ __export(index_exports, {
134
134
  showcaseMail: () => showcaseMail,
135
135
  showcaseMailClean: () => showcaseMailClean,
136
136
  status: () => status,
137
+ stereoTuningAssistance: () => stereoTuningAssistance,
137
138
  store: () => store,
138
139
  supportForm: () => supportForm,
139
140
  supportMail: () => supportMail,
@@ -141,6 +142,8 @@ __export(index_exports, {
141
142
  techcrunch: () => techcrunch,
142
143
  termsOfService: () => termsOfService,
143
144
  twitter: () => twitter,
145
+ useChat: () => useChat,
146
+ useChatContext: () => useChatContext,
144
147
  useRudderStackAnalytics: () => useRudderStackAnalytics,
145
148
  youtube: () => youtube
146
149
  });
@@ -728,7 +731,7 @@ var DescriptionRecepie = (0, import_class_variance_authority7.cva)("flex flex-co
728
731
  left: "items-start",
729
732
  right: "items-end",
730
733
  leftCenterMobile: "items-start sm:items-center",
731
- desktopCenterMobileLeft: "w-full items-start !text-left sm:items-center sm:!text-center",
734
+ desktopCenterMobileLeft: "w-full items-start !text-left sm:!items-center sm:!text-center",
732
735
  desktopLeftMobileCenter: "w-full items-center !text-center lg:items-start lg:!text-left"
733
736
  },
734
737
  gap: {
@@ -819,6 +822,9 @@ var import_jsx_runtime11 = require("react/jsx-runtime");
819
822
  var Hero = (props) => {
820
823
  const { title, description, button, bgImageLink, desctipionSize = "default" } = props;
821
824
  const descriptionSize = () => {
825
+ if (!description) {
826
+ return "";
827
+ }
822
828
  if (desctipionSize === "lg") {
823
829
  return (0, import_class_variance_authority9.cx)("lg:max-w-[525px] max-w-96");
824
830
  }
@@ -837,7 +843,7 @@ var Hero = (props) => {
837
843
  /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("div", { className: "page-card-content relative size-full h-[810px] w-full sm:h-[914px]", children: /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)("div", { className: " absolute inset-x-0 bottom-10 mx-auto flex w-full flex-col items-center justify-between gap-4 md:flex-row md:items-end ", children: [
838
844
  /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("div", { className: "flex w-full flex-row justify-center text-white md:justify-start", children: /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(Text, { text: title, size: "h1", className: "z-[2] w-96 text-h4 sm:text-h4 xl:w-auto xl:text-h1" }) }),
839
845
  /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)("div", { className: (0, import_class_variance_authority9.cx)("flex flex-col gap-8 md:gap-6 z-[2]", descriptionSize()), children: [
840
- /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(Text, { text: description, color: "white", size: "lg" }),
846
+ description && /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(Text, { text: description, color: "white", size: "lg" }),
841
847
  button
842
848
  ] })
843
849
  ] }) }),
@@ -1196,62 +1202,101 @@ var Textarea = React12.forwardRef(
1196
1202
  Textarea.displayName = "Textarea";
1197
1203
 
1198
1204
  // src/Video.tsx
1205
+ var import_react_full_screen = require("react-full-screen");
1199
1206
  var import_react10 = require("react");
1207
+ var import_class_variance_authority18 = require("class-variance-authority");
1208
+ var import_react11 = require("@iconify/react");
1209
+ var import_react_intersection_observer = require("react-intersection-observer");
1200
1210
  var import_jsx_runtime20 = require("react/jsx-runtime");
1201
- var Video = (0, import_react10.forwardRef)(({ src, className }, ref) => {
1211
+ function Video(props) {
1212
+ const {
1213
+ src,
1214
+ buttonPlay,
1215
+ buttonRepeat,
1216
+ className,
1217
+ wrapperClassName,
1218
+ autoPlayInView,
1219
+ buttonFullscreen,
1220
+ ...rest
1221
+ } = props;
1202
1222
  const videoRef = (0, import_react10.useRef)(null);
1203
- const [isPlaying, setIsPlaying] = (0, import_react10.useState)(false);
1204
- (0, import_react10.useImperativeHandle)(ref, () => ({
1205
- togglePlay: () => {
1206
- if (videoRef.current) {
1207
- if (videoRef.current.paused) {
1208
- videoRef.current.play();
1209
- setIsPlaying(true);
1210
- } else {
1211
- videoRef.current.pause();
1212
- setIsPlaying(false);
1213
- }
1214
- }
1215
- }
1216
- }));
1223
+ const { ref, inView } = (0, import_react_intersection_observer.useInView)({});
1224
+ const [isPlaying, setIsPlaying] = (0, import_react10.useState)(true);
1217
1225
  const setPlaying = () => {
1218
- if (videoRef.current) {
1219
- if (videoRef.current.paused) {
1220
- videoRef.current.play();
1221
- setIsPlaying(true);
1222
- } else {
1223
- videoRef.current.pause();
1224
- setIsPlaying(false);
1225
- }
1226
+ if (isPlaying) {
1227
+ videoRef.current?.pause();
1228
+ setIsPlaying(false);
1229
+ return;
1226
1230
  }
1231
+ setIsPlaying(true);
1232
+ videoRef.current?.play();
1227
1233
  };
1228
- return /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)("div", { className: `relative ${className}`, children: [
1229
- /* @__PURE__ */ (0, import_jsx_runtime20.jsx)("video", { onClick: setPlaying, ref: videoRef, className: "size-full object-cover", src, loop: true, children: "Your browser does not support the video tag." }),
1230
- !isPlaying && /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(
1231
- Button,
1234
+ (0, import_react10.useEffect)(() => {
1235
+ if (autoPlayInView && inView) {
1236
+ videoRef.current?.play();
1237
+ }
1238
+ }, [autoPlayInView, inView]);
1239
+ const setStart = () => {
1240
+ const v = videoRef.current;
1241
+ if (!v) return;
1242
+ v.pause();
1243
+ v.currentTime = 0;
1244
+ void v.play();
1245
+ };
1246
+ const handle = (0, import_react_full_screen.useFullScreenHandle)();
1247
+ return /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(import_react_full_screen.FullScreen, { handle, className: `flex items-center justify-center `, children: /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)("div", { className: (0, import_class_variance_authority18.cx)("relative size-full", handle.active ? "!max-h-none" : "", wrapperClassName), ref, children: [
1248
+ /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(
1249
+ "video",
1232
1250
  {
1233
- variant: "icon",
1234
- icon: "mdi:play",
1235
- role: "icon",
1251
+ ...rest,
1236
1252
  onClick: () => setPlaying(),
1237
- className: "absolute left-1/2 top-1/2 z-10 -translate-x-1/2 -translate-y-1/2 rounded-full bg-white p-2 shadow-md"
1253
+ ref: videoRef,
1254
+ className: (0, import_class_variance_authority18.cx)("size-full object-cover", className, handle.active ? "!max-h-none" : ""),
1255
+ src,
1256
+ children: "Your browser does not support the video tag."
1238
1257
  }
1239
- )
1240
- ] });
1241
- });
1258
+ ),
1259
+ /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)("div", { className: "absolute bottom-2 right-2 z-10 flex items-center justify-center gap-2", children: [
1260
+ buttonRepeat && /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(
1261
+ "button",
1262
+ {
1263
+ className: " flex size-10 items-center justify-center rounded-full bg-black/50 text-white",
1264
+ onClick: () => setStart(),
1265
+ children: /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(import_react11.Icon, { icon: "fa:repeat", className: "" })
1266
+ }
1267
+ ),
1268
+ buttonPlay && /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(
1269
+ "button",
1270
+ {
1271
+ className: " flex size-10 items-center justify-center rounded-full bg-black/50 p-1.5 text-white",
1272
+ onClick: () => setPlaying(),
1273
+ children: /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(import_react11.Icon, { icon: isPlaying ? "mdi:pause" : "mdi:play", className: "" })
1274
+ }
1275
+ ),
1276
+ buttonFullscreen && /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(
1277
+ "button",
1278
+ {
1279
+ className: " flex size-10 items-center justify-center rounded-full bg-black/50 p-1.5 text-white",
1280
+ onClick: () => handle.active ? handle.exit() : handle.enter(),
1281
+ children: /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(import_react11.Icon, { icon: handle.active ? "mdi:fullscreen-exit" : "mdi:fullscreen", className: "" })
1282
+ }
1283
+ )
1284
+ ] })
1285
+ ] }) });
1286
+ }
1242
1287
  Video.displayName = "Video";
1243
1288
 
1244
1289
  // src/Checkbox.tsx
1245
1290
  var CheckboxPrimitive = __toESM(require("@radix-ui/react-checkbox"));
1246
- var import_class_variance_authority18 = require("class-variance-authority");
1247
- var import_react11 = require("@iconify/react");
1291
+ var import_class_variance_authority19 = require("class-variance-authority");
1292
+ var import_react12 = require("@iconify/react");
1248
1293
  var import_jsx_runtime21 = require("react/jsx-runtime");
1249
1294
  function Checkbox({ className, ...props }) {
1250
1295
  return /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
1251
1296
  CheckboxPrimitive.Root,
1252
1297
  {
1253
1298
  "data-slot": "checkbox",
1254
- className: (0, import_class_variance_authority18.cx)(
1299
+ className: (0, import_class_variance_authority19.cx)(
1255
1300
  "peer border-input dark:bg-input/30 data-[state=checked]:bg-primary data-[state=checked]:text-primary-foreground dark:data-[state=checked]:bg-primary data-[state=checked]:border-primary focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive size-4 shrink-0 rounded-[4px] border shadow-xs transition-shadow outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50",
1256
1301
  className
1257
1302
  ),
@@ -1261,7 +1306,7 @@ function Checkbox({ className, ...props }) {
1261
1306
  {
1262
1307
  "data-slot": "checkbox-indicator",
1263
1308
  className: "flex items-center justify-center text-current transition-none",
1264
- children: /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(import_react11.Icon, { className: "size-3.5 text-white", icon: "lucide:check" })
1309
+ children: /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(import_react12.Icon, { className: "size-3.5 text-white", icon: "lucide:check" })
1265
1310
  }
1266
1311
  )
1267
1312
  }
@@ -1269,25 +1314,25 @@ function Checkbox({ className, ...props }) {
1269
1314
  }
1270
1315
 
1271
1316
  // src/DualRangeSlider.tsx
1272
- var React14 = __toESM(require("react"));
1317
+ var React13 = __toESM(require("react"));
1273
1318
  var SliderPrimitive = __toESM(require("@radix-ui/react-slider"));
1274
- var import_class_variance_authority19 = require("class-variance-authority");
1319
+ var import_class_variance_authority20 = require("class-variance-authority");
1275
1320
  var import_jsx_runtime22 = require("react/jsx-runtime");
1276
- var DualRangeSlider = React14.forwardRef(
1321
+ var DualRangeSlider = React13.forwardRef(
1277
1322
  ({ className, label, labelPosition = "top", ...props }, ref) => {
1278
1323
  const initialValue = Array.isArray(props.value) ? props.value : [props.min, props.max];
1279
1324
  return /* @__PURE__ */ (0, import_jsx_runtime22.jsxs)(
1280
1325
  SliderPrimitive.Root,
1281
1326
  {
1282
1327
  ref,
1283
- className: (0, import_class_variance_authority19.cx)("relative flex w-full touch-none select-none items-center", className),
1328
+ className: (0, import_class_variance_authority20.cx)("relative flex w-full touch-none select-none items-center", className),
1284
1329
  ...props,
1285
1330
  children: [
1286
1331
  /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(SliderPrimitive.Track, { className: "relative h-2 w-full grow overflow-hidden rounded-full bg-secondary", children: /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(SliderPrimitive.Range, { className: "absolute h-full bg-primary" }) }),
1287
- initialValue.map((value, index) => /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(React14.Fragment, { children: /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(SliderPrimitive.Thumb, { className: "ring-offset-background focus-visible:ring-ring relative block size-4 rounded-full border-2 border-primary bg-primary transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50", children: label && /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(
1332
+ initialValue.map((value, index) => /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(React13.Fragment, { children: /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(SliderPrimitive.Thumb, { className: "ring-offset-background focus-visible:ring-ring relative block size-4 rounded-full border-2 border-primary bg-primary transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50", children: label && /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(
1288
1333
  "span",
1289
1334
  {
1290
- className: (0, import_class_variance_authority19.cx)(
1335
+ className: (0, import_class_variance_authority20.cx)(
1291
1336
  "absolute flex w-full justify-center",
1292
1337
  labelPosition === "top" && "-top-7",
1293
1338
  labelPosition === "bottom" && "top-4"
@@ -1303,13 +1348,13 @@ var DualRangeSlider = React14.forwardRef(
1303
1348
  DualRangeSlider.displayName = "DualRangeSlider";
1304
1349
 
1305
1350
  // src/LuxonisChat.tsx
1306
- var import_react12 = require("react");
1351
+ var import_react13 = require("react");
1307
1352
  var import_markdown_it = __toESM(require("markdown-it"));
1308
- var import_react13 = require("@iconify/react");
1353
+ var import_react14 = require("@iconify/react");
1309
1354
 
1310
1355
  // src/Tooltip.tsx
1311
1356
  var TooltipPrimitive = __toESM(require("@radix-ui/react-tooltip"));
1312
- var import_class_variance_authority20 = require("class-variance-authority");
1357
+ var import_class_variance_authority21 = require("class-variance-authority");
1313
1358
  var import_jsx_runtime23 = require("react/jsx-runtime");
1314
1359
  function TooltipProvider({ delayDuration = 0, ...props }) {
1315
1360
  return /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(TooltipPrimitive.Provider, { "data-slot": "tooltip-provider", delayDuration, ...props });
@@ -1331,7 +1376,7 @@ function TooltipContent({
1331
1376
  {
1332
1377
  "data-slot": "tooltip-content",
1333
1378
  sideOffset,
1334
- className: (0, import_class_variance_authority20.cx)(
1379
+ className: (0, import_class_variance_authority21.cx)(
1335
1380
  "bg-white text-black shadow-md shadow-secondaryBorder animate-in fade-in-0 zoom-in-95 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 w-fit origin-(--radix-tooltip-content-transform-origin) rounded-md px-3 py-1.5 text-xs text-balance",
1336
1381
  className
1337
1382
  ),
@@ -1348,11 +1393,11 @@ function TooltipContent({
1348
1393
  var import_jsx_runtime24 = require("react/jsx-runtime");
1349
1394
  function ChatButton(props) {
1350
1395
  const { chatOpened, setChatOpened, messageFromSearch, setMessageFromSearch } = props;
1351
- const [hold, setHold] = (0, import_react12.useState)(false);
1352
- const [iconKey, setIconKey] = (0, import_react12.useState)(0);
1353
- const [loading, setLoading] = (0, import_react12.useState)(false);
1354
- const [userInput, setUserInput] = (0, import_react12.useState)("");
1355
- const [messages, setMessages] = (0, import_react12.useState)([
1396
+ const [hold, setHold] = (0, import_react13.useState)(false);
1397
+ const [iconKey, setIconKey] = (0, import_react13.useState)(0);
1398
+ const [loading, setLoading] = (0, import_react13.useState)(false);
1399
+ const [userInput, setUserInput] = (0, import_react13.useState)("");
1400
+ const [messages, setMessages] = (0, import_react13.useState)([
1356
1401
  {
1357
1402
  id: -1,
1358
1403
  user: "bot",
@@ -1360,10 +1405,10 @@ function ChatButton(props) {
1360
1405
  loading: false
1361
1406
  }
1362
1407
  ]);
1363
- const [slackThreadTs, setSlackThreadTs] = (0, import_react12.useState)(null);
1364
- const inputRef = (0, import_react12.useRef)(null);
1365
- const messageListRef = (0, import_react12.useRef)(null);
1366
- const formRef = (0, import_react12.useRef)(null);
1408
+ const [slackThreadTs, setSlackThreadTs] = (0, import_react13.useState)(null);
1409
+ const inputRef = (0, import_react13.useRef)(null);
1410
+ const messageListRef = (0, import_react13.useRef)(null);
1411
+ const formRef = (0, import_react13.useRef)(null);
1367
1412
  const loadingMessages = [
1368
1413
  "Please wait...",
1369
1414
  "Hold on...",
@@ -1376,7 +1421,7 @@ function ChatButton(props) {
1376
1421
  "Almost there...",
1377
1422
  "Please hold on..."
1378
1423
  ];
1379
- const fetchData = (0, import_react12.useCallback)(
1424
+ const fetchData = (0, import_react13.useCallback)(
1380
1425
  async (message) => {
1381
1426
  try {
1382
1427
  const response = await fetch("https://chat.luxonis.com/api/chat", {
@@ -1411,7 +1456,7 @@ function ChatButton(props) {
1411
1456
  },
1412
1457
  [messages, slackThreadTs]
1413
1458
  );
1414
- const onSubmit = (0, import_react12.useCallback)(
1459
+ const onSubmit = (0, import_react13.useCallback)(
1415
1460
  async (e) => {
1416
1461
  e?.preventDefault();
1417
1462
  if (userInput.trim() !== "") {
@@ -1446,7 +1491,7 @@ function ChatButton(props) {
1446
1491
  },
1447
1492
  [userInput, messages, fetchData, setMessageFromSearch, setLoading]
1448
1493
  );
1449
- const handleEnter = (0, import_react12.useCallback)(
1494
+ const handleEnter = (0, import_react13.useCallback)(
1450
1495
  (e) => {
1451
1496
  if (e.key === "Enter" && userInput.trim() !== "") {
1452
1497
  if (!e.shiftKey && userInput.trim() !== "") {
@@ -1459,13 +1504,13 @@ function ChatButton(props) {
1459
1504
  },
1460
1505
  [userInput, onSubmit]
1461
1506
  );
1462
- (0, import_react12.useEffect)(() => {
1507
+ (0, import_react13.useEffect)(() => {
1463
1508
  if (messageListRef.current) {
1464
1509
  const messageList = messageListRef.current;
1465
1510
  messageList.scrollTop = messageList.scrollHeight;
1466
1511
  }
1467
1512
  }, [messages]);
1468
- (0, import_react12.useEffect)(() => {
1513
+ (0, import_react13.useEffect)(() => {
1469
1514
  async function fetchSearchQuery() {
1470
1515
  setUserInput(`Can you tell me about ${messageFromSearch}`);
1471
1516
  await onSubmit(void 0);
@@ -1506,7 +1551,7 @@ function ChatButton(props) {
1506
1551
  animationTimingFunction: "ease-in"
1507
1552
  },
1508
1553
  className: "flex size-full items-center justify-center",
1509
- children: chatOpened ? /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(import_react13.Icon, { icon: "mdi:close", className: "size-[32px] text-white" }) : /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("img", { src: "https://docs.luxonis.com/static/images/icons/chat-icon.svg", width: "32", height: "32", alt: "Chat" })
1554
+ children: chatOpened ? /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(import_react14.Icon, { icon: "mdi:close", className: "size-[32px] text-white" }) : /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("img", { src: "https://docs.luxonis.com/static/images/icons/chat-icon.svg", width: "32", height: "32", alt: "Chat" })
1510
1555
  },
1511
1556
  iconKey
1512
1557
  )
@@ -1516,7 +1561,7 @@ function ChatButton(props) {
1516
1561
  /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)("div", { className: "flex h-8 flex-row justify-between gap-2", children: [
1517
1562
  /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)("h2", { className: "relative text-2xl", children: [
1518
1563
  /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("a", { target: "_blank", rel: "noopener noreferrer", href: "https://chat.luxonis.com", children: "Chat with Luxonis AI" }),
1519
- /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(import_react13.Icon, { icon: "mingcute:ai-fill", className: "absolute -right-4 -top-2 size-5 text-primary" })
1564
+ /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(import_react14.Icon, { icon: "mingcute:ai-fill", className: "absolute -right-4 -top-2 size-5 text-primary" })
1520
1565
  ] }),
1521
1566
  /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)("div", { className: "flex flex-row items-center justify-end ", children: [
1522
1567
  /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)(Tooltip, { children: [
@@ -1538,7 +1583,7 @@ function ChatButton(props) {
1538
1583
  setSlackThreadTs(null);
1539
1584
  },
1540
1585
  children: /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(
1541
- import_react13.Icon,
1586
+ import_react14.Icon,
1542
1587
  {
1543
1588
  icon: "fluent:chat-add-16-regular",
1544
1589
  className: loading ? "text-black/40" : "text-primary",
@@ -1557,7 +1602,7 @@ function ChatButton(props) {
1557
1602
  setChatOpened(false);
1558
1603
  setMessageFromSearch("");
1559
1604
  },
1560
- children: /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(import_react13.Icon, { icon: "mdi:close", className: "text-black", width: 32, height: 32 })
1605
+ children: /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(import_react14.Icon, { icon: "mdi:close", className: "text-black", width: 32, height: 32 })
1561
1606
  }
1562
1607
  )
1563
1608
  ] })
@@ -1613,7 +1658,7 @@ function ChatButton(props) {
1613
1658
  name: "sendButton",
1614
1659
  variant: "primary",
1615
1660
  className: "!size-10 !p-2 " + (loading || inputRef.current?.value.length === 0 ? "bg-gray-100 transition-colors cursor-not-allowed" : "bg-primary cursor-pointer"),
1616
- children: /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(import_react13.Icon, { icon: "mdi:send", className: "!text-white" })
1661
+ children: /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(import_react14.Icon, { icon: "mdi:send", className: "!text-white" })
1617
1662
  }
1618
1663
  ) })
1619
1664
  ]
@@ -1632,7 +1677,7 @@ var ChatMessage = (props) => {
1632
1677
  {
1633
1678
  className: `flex h-fit w-full gap-2 ${props.user === "bot" ? props.loading ? "bg-gray-100 transition-colors" : "bg-gray-100" : "bg-white"}`,
1634
1679
  children: [
1635
- /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("div", { className: "flex min-h-10 min-w-10 items-start overflow-x-auto pl-2 pt-1.5 ", children: /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("div", { className: "flex items-center justify-center pb-1.5", children: props.user === "user" ? /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(import_react13.Icon, { icon: "mdi:account", className: "h-[38px] w-[32px]" }) : props.loading ? /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("img", { src: "https://static.luxonis.com/images/chatbot.webp", width: "32", height: "32", alt: "Chatbot Icon" }) : /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("img", { src: "https://static.luxonis.com/images/chatbot.webp", width: "32", height: "32", alt: "Chatbot Icon" }) }) }),
1680
+ /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("div", { className: "flex min-h-10 min-w-10 items-start overflow-x-auto pl-2 pt-1.5 ", children: /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("div", { className: "flex items-center justify-center pb-1.5", children: props.user === "user" ? /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(import_react14.Icon, { icon: "mdi:account", className: "h-[38px] w-[32px]" }) : props.loading ? /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("img", { src: "https://static.luxonis.com/images/chatbot.webp", width: "32", height: "32", alt: "Chatbot Icon" }) : /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("img", { src: "https://static.luxonis.com/images/chatbot.webp", width: "32", height: "32", alt: "Chatbot Icon" }) }) }),
1636
1681
  /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(
1637
1682
  "div",
1638
1683
  {
@@ -1654,14 +1699,14 @@ var ChatMessage = (props) => {
1654
1699
  // src/Tabs.tsx
1655
1700
  var React15 = __toESM(require("react"));
1656
1701
  var TabsPrimitive = __toESM(require("@radix-ui/react-tabs"));
1657
- var import_class_variance_authority21 = require("class-variance-authority");
1702
+ var import_class_variance_authority22 = require("class-variance-authority");
1658
1703
  var import_jsx_runtime25 = require("react/jsx-runtime");
1659
1704
  var Tabs = TabsPrimitive.Root;
1660
1705
  var TabsList = React15.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(
1661
1706
  TabsPrimitive.List,
1662
1707
  {
1663
1708
  ref,
1664
- className: (0, import_class_variance_authority21.cx)(
1709
+ className: (0, import_class_variance_authority22.cx)(
1665
1710
  "inline-flex h-10 items-center justify-center rounded-md bg-muted p-1 text-muted-foreground",
1666
1711
  className
1667
1712
  ),
@@ -1673,7 +1718,7 @@ var TabsTrigger = React15.forwardRef(({ className, ...props }, ref) => /* @__PUR
1673
1718
  TabsPrimitive.Trigger,
1674
1719
  {
1675
1720
  ref,
1676
- className: (0, import_class_variance_authority21.cx)(
1721
+ className: (0, import_class_variance_authority22.cx)(
1677
1722
  "inline-flex items-center justify-center whitespace-nowrap rounded-sm px-3 py-1.5 text-sm font-medium ring-offset-background transition-all focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 data-[state=active]:bg-background data-[state=active]:text-foreground data-[state=active]:shadow-sm",
1678
1723
  className
1679
1724
  ),
@@ -1685,7 +1730,7 @@ var TabsContent = React15.forwardRef(({ className, ...props }, ref) => /* @__PUR
1685
1730
  TabsPrimitive.Content,
1686
1731
  {
1687
1732
  ref,
1688
- className: (0, import_class_variance_authority21.cx)(
1733
+ className: (0, import_class_variance_authority22.cx)(
1689
1734
  "mt-2 ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2",
1690
1735
  className
1691
1736
  ),
@@ -1697,13 +1742,13 @@ TabsContent.displayName = TabsPrimitive.Content.displayName;
1697
1742
  // src/ProgressBar.tsx
1698
1743
  var React16 = __toESM(require("react"));
1699
1744
  var ProgressPrimitive = __toESM(require("@radix-ui/react-progress"));
1700
- var import_class_variance_authority22 = require("class-variance-authority");
1745
+ var import_class_variance_authority23 = require("class-variance-authority");
1701
1746
  var import_jsx_runtime26 = require("react/jsx-runtime");
1702
1747
  var Progress = React16.forwardRef(({ className, value, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(
1703
1748
  ProgressPrimitive.Root,
1704
1749
  {
1705
1750
  ref,
1706
- className: (0, import_class_variance_authority22.cx)("relative h-2 w-full overflow-hidden rounded-full bg-primary/20", className),
1751
+ className: (0, import_class_variance_authority23.cx)("relative h-2 w-full overflow-hidden rounded-full bg-primary/20", className),
1707
1752
  ...props,
1708
1753
  children: /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(
1709
1754
  ProgressPrimitive.Indicator,
@@ -1717,8 +1762,8 @@ var Progress = React16.forwardRef(({ className, value, ...props }, ref) => /* @_
1717
1762
  Progress.displayName = ProgressPrimitive.Root.displayName;
1718
1763
 
1719
1764
  // src/EdgeSlideshow.tsx
1720
- var import_react14 = require("react");
1721
- var import_react_intersection_observer = require("react-intersection-observer");
1765
+ var import_react15 = require("react");
1766
+ var import_react_intersection_observer2 = require("react-intersection-observer");
1722
1767
  var import_jsx_runtime27 = require("react/jsx-runtime");
1723
1768
  var slides = [
1724
1769
  "ai-performance",
@@ -1905,8 +1950,8 @@ function EdgeSlideshowHeader() {
1905
1950
  }
1906
1951
  function EdgeSlideshowNav(props) {
1907
1952
  const { activeSlide, setActiveSlide, autoscrolling, inView } = props;
1908
- const [progress, setProgress] = (0, import_react14.useState)(0);
1909
- (0, import_react14.useEffect)(() => {
1953
+ const [progress, setProgress] = (0, import_react15.useState)(0);
1954
+ (0, import_react15.useEffect)(() => {
1910
1955
  let intervalId;
1911
1956
  const startTime = Date.now();
1912
1957
  if (autoscrolling && inView) {
@@ -1974,10 +2019,10 @@ function EdgeSlideshowText(props) {
1974
2019
  ] });
1975
2020
  }
1976
2021
  function EdgeSlideshow() {
1977
- const [activeSlide, setActiveSlide] = (0, import_react14.useState)("ai-performance");
1978
- const [autoscrolling, setAutoscrolling] = (0, import_react14.useState)(true);
1979
- const { ref, inView } = (0, import_react_intersection_observer.useInView)({});
1980
- (0, import_react14.useEffect)(() => {
2022
+ const [activeSlide, setActiveSlide] = (0, import_react15.useState)("ai-performance");
2023
+ const [autoscrolling, setAutoscrolling] = (0, import_react15.useState)(true);
2024
+ const { ref, inView } = (0, import_react_intersection_observer2.useInView)({});
2025
+ (0, import_react15.useEffect)(() => {
1981
2026
  let intervalId;
1982
2027
  if (inView) {
1983
2028
  intervalId = window.setInterval(() => {
@@ -2016,7 +2061,7 @@ function EdgeSlideshow() {
2016
2061
  }
2017
2062
 
2018
2063
  // src/StereoDepthCalibration.tsx
2019
- var import_react15 = require("@iconify/react");
2064
+ var import_react16 = require("@iconify/react");
2020
2065
  var import_jsx_runtime28 = require("react/jsx-runtime");
2021
2066
  var cards = [
2022
2067
  {
@@ -2083,7 +2128,7 @@ function StereoDepthCalibrationFooter() {
2083
2128
  }
2084
2129
  function StereoDepthCalibrationFooterCard(props) {
2085
2130
  return /* @__PURE__ */ (0, import_jsx_runtime28.jsxs)(FrostedCard, { className: "flex h-full flex-col items-start justify-start gap-2", children: [
2086
- /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(import_react15.Icon, { icon: props.icon, width: 32, height: 32, className: "card-icon" }),
2131
+ /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(import_react16.Icon, { icon: props.icon, width: 32, height: 32, className: "card-icon" }),
2087
2132
  /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(Text, { text: props.title, size: "lg", color: "white", weight: "semibold" }),
2088
2133
  /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(Text, { text: props.text, size: "sm", color: "white" })
2089
2134
  ] });
@@ -2102,7 +2147,7 @@ function StereoDepthCalibration() {
2102
2147
  }
2103
2148
 
2104
2149
  // src/Support.tsx
2105
- var import_class_variance_authority23 = require("class-variance-authority");
2150
+ var import_class_variance_authority24 = require("class-variance-authority");
2106
2151
 
2107
2152
  // src/links.ts
2108
2153
  var github = "https://github.com/luxonis/";
@@ -2132,6 +2177,7 @@ var applyMailClean = "careers@luxonis.com";
2132
2177
  var showcaseMail = "mailto:support@luxonis.com";
2133
2178
  var showcaseMailClean = "support@luxonis.com";
2134
2179
  var blog = "https://discuss.luxonis.com/blog";
2180
+ var stereoTuningAssistance = "/stereo-tuning-assistance";
2135
2181
  var privacy = "/privacy";
2136
2182
  var termsOfService = "/terms-of-service";
2137
2183
  var aboutUs = "/about-us";
@@ -2160,15 +2206,45 @@ function TalkToSalesButton() {
2160
2206
  return /* @__PURE__ */ (0, import_jsx_runtime29.jsx)("a", { href: contactLink, target: "_blank", children: /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(Button, { variant: "secondary", color: "white", role: "continue", children: "Talk to Sales" }) });
2161
2207
  }
2162
2208
 
2163
- // src/ContactUsForm.tsx
2164
- var import_zod = require("zod");
2165
- var import_react17 = __toESM(require("react"));
2209
+ // src/Support.tsx
2210
+ var import_jsx_runtime30 = require("react/jsx-runtime");
2211
+ var Support = (props) => {
2212
+ const { variant = "fullpage", text } = props;
2213
+ return /* @__PURE__ */ (0, import_jsx_runtime30.jsx)("div", { className: "page-card page-padding", children: /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(
2214
+ Card,
2215
+ {
2216
+ variant,
2217
+ outerStyles: "h-full",
2218
+ className: (0, import_class_variance_authority24.cx)(
2219
+ "page-card-content mx-auto flex w-full h-full flex-col gap-x-20 gap-y-4 justify-between overflow-hidden bg-gradient-stereo-depth xl:p-8 xl:flex-row py-8 px-4"
2220
+ ),
2221
+ children: /* @__PURE__ */ (0, import_jsx_runtime30.jsxs)("div", { className: "flex w-full flex-col items-center gap-8 text-white xl:w-fit xl:items-start xl:gap-10 xl:px-0", children: [
2222
+ /* @__PURE__ */ (0, import_jsx_runtime30.jsxs)("div", { className: "flex w-full flex-col items-center gap-4 text-white xl:items-start xl:gap-6", children: [
2223
+ /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(Text, { size: "h2", text: text ?? "Need More Help?", className: "text-center xl:text-left" }),
2224
+ /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(
2225
+ Text,
2226
+ {
2227
+ size: "lg",
2228
+ text: "Our dedicated team is available for technical support, business solutions, and more. Let us provide the help you need.",
2229
+ className: "w-full text-center xl:text-left"
2230
+ }
2231
+ )
2232
+ ] }),
2233
+ /* @__PURE__ */ (0, import_jsx_runtime30.jsxs)("div", { className: "flex w-fit flex-col items-center gap-4 md:flex-row", children: [
2234
+ /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(TalkToSalesButton, {}),
2235
+ /* @__PURE__ */ (0, import_jsx_runtime30.jsx)("a", { href: "https://chat.luxonis.com", target: "_blank", rel: "noreferrer", children: /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(Button, { size: "lg", variant: "secondary", role: "continue", children: "Get Instant Support" }) }),
2236
+ /* @__PURE__ */ (0, import_jsx_runtime30.jsx)("a", { href: supportMail, target: "_blank", rel: "noreferrer", children: /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(Button, { size: "lg", variant: "secondary", role: "continue", children: "Support via Email" }) })
2237
+ ] })
2238
+ ] })
2239
+ }
2240
+ ) });
2241
+ };
2166
2242
 
2167
2243
  // src/useRudderAnalytics.ts
2168
- var import_react16 = require("react");
2244
+ var import_react17 = require("react");
2169
2245
  var useRudderStackAnalytics = () => {
2170
- const [analytics, setAnalytics] = (0, import_react16.useState)();
2171
- (0, import_react16.useEffect)(() => {
2246
+ const [analytics, setAnalytics] = (0, import_react17.useState)();
2247
+ (0, import_react17.useEffect)(() => {
2172
2248
  if (!analytics) {
2173
2249
  const initialize = async () => {
2174
2250
  const { RudderAnalytics } = await import("@rudderstack/analytics-js");
@@ -2195,7 +2271,9 @@ var useRudderStackAnalytics = () => {
2195
2271
  };
2196
2272
 
2197
2273
  // src/ContactUsForm.tsx
2198
- var import_jsx_runtime30 = require("react/jsx-runtime");
2274
+ var import_zod = require("zod");
2275
+ var import_react18 = __toESM(require("react"));
2276
+ var import_jsx_runtime31 = require("react/jsx-runtime");
2199
2277
  var formSchema = import_zod.z.object({
2200
2278
  name: import_zod.z.string().min(1),
2201
2279
  company: import_zod.z.string().min(1),
@@ -2204,9 +2282,9 @@ var formSchema = import_zod.z.object({
2204
2282
  inquiry: import_zod.z.string().min(1)
2205
2283
  });
2206
2284
  function ContactUsForm() {
2207
- const [formSubmitted, setFormSubmitted] = import_react17.default.useState(false);
2208
- const [formHasError, setFormHasError] = import_react17.default.useState(false);
2209
- const [formIsLoading, setFormIsLoading] = import_react17.default.useState(false);
2285
+ const [formSubmitted, setFormSubmitted] = import_react18.default.useState(false);
2286
+ const [formHasError, setFormHasError] = import_react18.default.useState(false);
2287
+ const [formIsLoading, setFormIsLoading] = import_react18.default.useState(false);
2210
2288
  const analytics = useRudderStackAnalytics();
2211
2289
  const handleSubmit = (event) => {
2212
2290
  event.preventDefault();
@@ -2263,7 +2341,7 @@ function ContactUsForm() {
2263
2341
  setFormSubmitted(true);
2264
2342
  };
2265
2343
  if (formSubmitted) {
2266
- return /* @__PURE__ */ (0, import_jsx_runtime30.jsx)("div", { className: "m-auto flex size-full h-[456px] flex-col items-center justify-center px-4", children: /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(
2344
+ return /* @__PURE__ */ (0, import_jsx_runtime31.jsx)("div", { className: "m-auto flex size-full h-[456px] flex-col items-center justify-center px-4", children: /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(
2267
2345
  Text,
2268
2346
  {
2269
2347
  size: "h4",
@@ -2273,107 +2351,80 @@ function ContactUsForm() {
2273
2351
  }
2274
2352
  ) });
2275
2353
  }
2276
- return /* @__PURE__ */ (0, import_jsx_runtime30.jsxs)("form", { id: "contact-form-anchor", className: "flex w-full flex-col gap-6 text-white", onSubmit: handleSubmit, children: [
2277
- /* @__PURE__ */ (0, import_jsx_runtime30.jsxs)("div", { className: "flex w-full flex-col gap-6 lg:flex-row", children: [
2278
- /* @__PURE__ */ (0, import_jsx_runtime30.jsxs)("div", { className: "flex w-full flex-col gap-2", children: [
2279
- /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(Label, { className: "font-normal", htmlFor: "name", children: "Name *" }),
2280
- /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(Input, { type: "text", id: "name", placeholder: "E.g. Hanna Johns" })
2354
+ return /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)("form", { id: "contact-form-anchor", className: "flex w-full flex-col gap-6 text-white", onSubmit: handleSubmit, children: [
2355
+ /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)("div", { className: "flex w-full flex-col gap-6 lg:flex-row", children: [
2356
+ /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)("div", { className: "flex w-full flex-col gap-2", children: [
2357
+ /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(Label, { className: "font-normal", htmlFor: "name", children: "Name *" }),
2358
+ /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(Input, { type: "text", id: "name", placeholder: "E.g. Hanna Johns" })
2281
2359
  ] }),
2282
- /* @__PURE__ */ (0, import_jsx_runtime30.jsxs)("div", { className: "flex w-full flex-col gap-2", children: [
2283
- /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(Label, { className: "font-normal", htmlFor: "Company", children: "Company *" }),
2284
- /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(Input, { type: "text", id: "company", placeholder: "E.g. Hanna" })
2360
+ /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)("div", { className: "flex w-full flex-col gap-2", children: [
2361
+ /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(Label, { className: "font-normal", htmlFor: "Company", children: "Company *" }),
2362
+ /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(Input, { type: "text", id: "company", placeholder: "E.g. Hanna" })
2285
2363
  ] })
2286
2364
  ] }),
2287
- /* @__PURE__ */ (0, import_jsx_runtime30.jsxs)("div", { className: "flex flex-col gap-2", children: [
2288
- /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(Label, { className: "font-normal", htmlFor: "email", children: "E-mail *" }),
2289
- /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(Input, { type: "email", id: "email", placeholder: "E.g. info@email.com" })
2365
+ /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)("div", { className: "flex flex-col gap-2", children: [
2366
+ /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(Label, { className: "font-normal", htmlFor: "email", children: "E-mail *" }),
2367
+ /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(Input, { type: "email", id: "email", placeholder: "E.g. info@email.com" })
2290
2368
  ] }),
2291
- /* @__PURE__ */ (0, import_jsx_runtime30.jsxs)("div", { className: "flex flex-col gap-2", children: [
2292
- /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(Label, { className: "font-normal", htmlFor: "inquiry", children: "Type of Inquiry *" }),
2293
- /* @__PURE__ */ (0, import_jsx_runtime30.jsxs)(Select, { children: [
2294
- /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(SelectTrigger, { className: "h-[48px] bg-white text-black ", children: /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(SelectValue, { id: "inquiry", placeholder: "Select..." }) }),
2295
- /* @__PURE__ */ (0, import_jsx_runtime30.jsxs)(SelectContent, { className: "bg-white", children: [
2296
- /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(SelectItem, { value: "Hub assistance", children: "Hub assistance" }),
2297
- /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(SelectItem, { value: "hardware-issue", children: "Hardware issue" }),
2298
- /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(SelectItem, { value: "support", children: "Support" }),
2299
- /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(SelectItem, { value: "training", children: "Training" }),
2300
- /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(SelectItem, { value: "other", children: "Other" })
2369
+ /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)("div", { className: "flex flex-col gap-2", children: [
2370
+ /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(Label, { className: "font-normal", htmlFor: "inquiry", children: "Type of Inquiry *" }),
2371
+ /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)(Select, { children: [
2372
+ /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(SelectTrigger, { className: "h-[48px] bg-white text-black ", children: /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(SelectValue, { id: "inquiry", placeholder: "Select..." }) }),
2373
+ /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)(SelectContent, { className: "bg-white", children: [
2374
+ /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(SelectItem, { value: "Hub assistance", children: "Hub assistance" }),
2375
+ /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(SelectItem, { value: "hardware-issue", children: "Hardware issue" }),
2376
+ /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(SelectItem, { value: "support", children: "Support" }),
2377
+ /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(SelectItem, { value: "training", children: "Training" }),
2378
+ /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(SelectItem, { value: "other", children: "Other" })
2301
2379
  ] })
2302
2380
  ] })
2303
2381
  ] }),
2304
- /* @__PURE__ */ (0, import_jsx_runtime30.jsxs)("div", { className: "flex flex-col gap-2", children: [
2305
- /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(Label, { className: "font-normal", htmlFor: "message", children: "Message *" }),
2306
- /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(Input, { type: "text", id: "message", placeholder: "Type..." })
2382
+ /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)("div", { className: "flex flex-col gap-2", children: [
2383
+ /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(Label, { className: "font-normal", htmlFor: "message", children: "Message *" }),
2384
+ /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(Input, { type: "text", id: "message", placeholder: "Type..." })
2307
2385
  ] }),
2308
- /* @__PURE__ */ (0, import_jsx_runtime30.jsxs)("div", { className: "flex flex-row items-center justify-start gap-8", children: [
2309
- /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(Button, { type: "submit", variant: "secondary", size: "lg", role: "continue", className: "w-fit", children: formIsLoading ? "Submitting..." : "Submit" }),
2310
- formHasError && /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(Text, { text: "Please fill out all fields", color: "error", size: "xl" })
2386
+ /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)("div", { className: "flex flex-row items-center justify-start gap-8", children: [
2387
+ /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(Button, { type: "submit", variant: "secondary", size: "lg", role: "continue", className: "w-fit", children: formIsLoading ? "Submitting..." : "Submit" }),
2388
+ formHasError && /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(Text, { text: "Please fill out all fields", color: "error", size: "xl" })
2311
2389
  ] })
2312
2390
  ] });
2313
2391
  }
2314
2392
 
2315
- // src/Support.tsx
2316
- var import_jsx_runtime31 = require("react/jsx-runtime");
2317
- var Support = (props) => {
2318
- const { variant = "fullpage", text } = props;
2319
- return /* @__PURE__ */ (0, import_jsx_runtime31.jsx)("div", { className: "page-card page-padding", children: /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)(
2320
- Card,
2321
- {
2322
- variant,
2323
- outerStyles: "h-full",
2324
- className: (0, import_class_variance_authority23.cx)(
2325
- "page-card-content mx-auto flex w-full h-full flex-col gap-x-20 gap-y-4 justify-between overflow-hidden bg-gradient-stereo-depth pt-12 xl:p-8 xl:flex-row"
2326
- ),
2327
- children: [
2328
- /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)("div", { className: "flex w-full flex-col items-center gap-8 px-4 text-white xl:w-fit xl:items-start xl:gap-10 xl:px-0", children: [
2329
- /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)("div", { className: "flex w-full flex-col items-center gap-4 text-white xl:items-start xl:gap-6", children: [
2330
- /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(Text, { size: "h2", text: text ?? "Need More Help?", className: "max-w-[650px] text-center xl:text-left" }),
2331
- /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(
2332
- Text,
2333
- {
2334
- size: "lg",
2335
- text: "Our dedicated team is available for technical support, business solutions, and more. Let us provide the help you need.",
2336
- className: "w-full max-w-105 text-center xl:text-left"
2337
- }
2338
- )
2339
- ] }),
2340
- /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)("div", { className: "flex w-fit flex-col gap-4 md:flex-row", children: [
2341
- /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(TalkToSalesButton, {}),
2342
- /* @__PURE__ */ (0, import_jsx_runtime31.jsx)("a", { href: "https://chat.luxonis.com", target: "_blank", rel: "noreferrer", children: /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(Button, { size: "lg", variant: "secondary", role: "continue", children: "Get Instant Support" }) })
2343
- ] })
2344
- ] }),
2345
- /* @__PURE__ */ (0, import_jsx_runtime31.jsx)("div", { className: "w-full p-4 xl:p-0", children: /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(FrostedCard, { className: "h-full", children: /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(ContactUsForm, {}) }) })
2346
- ]
2347
- }
2348
- ) });
2349
- };
2350
-
2351
2393
  // src/ContactUs.tsx
2352
2394
  var import_jsx_runtime32 = require("react/jsx-runtime");
2353
2395
  var ContactUsSection = (props) => {
2354
2396
  const {
2355
- title = "Let\u2019s Build \n the Future of \n Vision Together",
2397
+ title = "Let\u2019s Build the Future of Vision Together",
2356
2398
  description = "Our dedicated team is available for technical support, business solutions, and more. Let us provide the help you need."
2357
2399
  } = props;
2358
- return /* @__PURE__ */ (0, import_jsx_runtime32.jsx)("section", { id: "contact-us", className: "page-card page-padding", children: /* @__PURE__ */ (0, import_jsx_runtime32.jsxs)("section", { className: "page-card-content flex flex-col gap-8 rounded-lg p-4 pt-12 [background:radial-gradient(416.66%_106.71%_at_76.3%_37.11%,#5724E8_0%,#000_100%),#000] md:p-12 lg:flex-row lg:justify-between", children: [
2359
- /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(
2360
- Description,
2361
- {
2362
- title,
2363
- align: "left",
2364
- textStyle: "max-w-none w-fit lg:max-w-auto lg:justify-start justify-center lg:text-left text-center",
2365
- wrapperClassName: "lg:items-start items-center lg:text-left text-center flex",
2366
- description,
2367
- className: "text-white ",
2368
- children: /* @__PURE__ */ (0, import_jsx_runtime32.jsxs)("div", { className: "flex w-full max-w-[500px] flex-col flex-wrap items-center gap-4 lg:flex-row lg:justify-start", children: [
2369
- /* @__PURE__ */ (0, import_jsx_runtime32.jsx)("a", { href: "https://hub.luxonis.com", target: "_blank", className: "w-fit", children: /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(Button, { variant: "secondary", size: "lg", role: "continue", className: "w-full", children: "Start for Free" }) }),
2370
- /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(TalkToSalesButton, {})
2371
- ] })
2372
- }
2373
- ),
2374
- /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(FrostedCard, { className: "!p-6", children: /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(ContactUsForm, {}) })
2375
- ] }) });
2400
+ return /* @__PURE__ */ (0, import_jsx_runtime32.jsx)("section", { id: "contact-us", className: "page-card page-padding", children: /* @__PURE__ */ (0, import_jsx_runtime32.jsx)("section", { className: "page-card-content flex flex-col gap-8 rounded-lg px-4 py-8 [background:radial-gradient(416.66%_106.71%_at_76.3%_37.11%,#5724E8_0%,#000_100%),#000] md:p-12 lg:flex-row lg:justify-between xl:p-8", children: /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(
2401
+ Description,
2402
+ {
2403
+ title,
2404
+ align: "left",
2405
+ textStyle: "max-w-none w-fit lg:max-w-none lg:justify-start justify-center lg:text-left text-center",
2406
+ wrapperClassName: "lg:items-start items-center lg:text-left text-center flex",
2407
+ description,
2408
+ className: "text-white ",
2409
+ children: /* @__PURE__ */ (0, import_jsx_runtime32.jsxs)("div", { className: "flex w-full flex-col flex-wrap items-center gap-4 lg:flex-row lg:justify-start", children: [
2410
+ /* @__PURE__ */ (0, import_jsx_runtime32.jsx)("a", { href: "https://hub.luxonis.com", target: "_blank", className: "w-fit", children: /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(Button, { variant: "secondary", size: "lg", role: "continue", className: "w-full", children: "Start for Free" }) }),
2411
+ /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(TalkToSalesButton, {}),
2412
+ /* @__PURE__ */ (0, import_jsx_runtime32.jsx)("a", { href: supportMail, target: "_blank", rel: "noreferrer", children: /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(Button, { size: "lg", variant: "secondary", role: "continue", children: "Support via Email" }) })
2413
+ ] })
2414
+ }
2415
+ ) }) });
2376
2416
  };
2417
+
2418
+ // src/useChat.tsx
2419
+ var import_react19 = __toESM(require("react"));
2420
+ var useChatContext = import_react19.default.createContext(null);
2421
+ function useChat() {
2422
+ const context = import_react19.default.useContext(useChatContext);
2423
+ if (!context) {
2424
+ throw new Error("useChat must be used within a <ChatProvider />");
2425
+ }
2426
+ return context;
2427
+ }
2377
2428
  // Annotate the CommonJS export names for ESM import in node:
2378
2429
  0 && (module.exports = {
2379
2430
  Accordion,
@@ -2480,6 +2531,7 @@ var ContactUsSection = (props) => {
2480
2531
  showcaseMail,
2481
2532
  showcaseMailClean,
2482
2533
  status,
2534
+ stereoTuningAssistance,
2483
2535
  store,
2484
2536
  supportForm,
2485
2537
  supportMail,
@@ -2487,6 +2539,8 @@ var ContactUsSection = (props) => {
2487
2539
  techcrunch,
2488
2540
  termsOfService,
2489
2541
  twitter,
2542
+ useChat,
2543
+ useChatContext,
2490
2544
  useRudderStackAnalytics,
2491
2545
  youtube
2492
2546
  });