@luxonis/component-lib 1.1.0 → 1.1.2

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
  });
@@ -726,8 +729,9 @@ var DescriptionRecepie = (0, import_class_variance_authority7.cva)("flex flex-co
726
729
  center: "items-start sm:items-center",
727
730
  allwayscenter: "items-center",
728
731
  left: "items-start",
732
+ right: "items-end",
729
733
  leftCenterMobile: "items-start sm:items-center",
730
- 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",
731
735
  desktopLeftMobileCenter: "w-full items-center !text-center lg:items-start lg:!text-left"
732
736
  },
733
737
  gap: {
@@ -767,7 +771,7 @@ var Description = (props) => {
767
771
  descriptionStyle,
768
772
  wrapperClassName
769
773
  } = props;
770
- const alingText = align === "left" || align === "desktopLeftMobileCenter" ? "left" : "center";
774
+ const alingText = align === "left" || align === "desktopLeftMobileCenter" ? "left" : align === "right" ? "right" : "center";
771
775
  return /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)("div", { className: (0, import_class_variance_authority7.cx)(DescriptionRecepie({ align, gap }), className), children: [
772
776
  /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)("div", { className: (0, import_class_variance_authority7.cx)(`flex flex-col gap-4 sm:gap-6 w-full`, wrapperClassName ?? "", InnerGap({ innerGap })), children: [
773
777
  subTitle && /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
@@ -818,6 +822,9 @@ var import_jsx_runtime11 = require("react/jsx-runtime");
818
822
  var Hero = (props) => {
819
823
  const { title, description, button, bgImageLink, desctipionSize = "default" } = props;
820
824
  const descriptionSize = () => {
825
+ if (!description) {
826
+ return "";
827
+ }
821
828
  if (desctipionSize === "lg") {
822
829
  return (0, import_class_variance_authority9.cx)("lg:max-w-[525px] max-w-96");
823
830
  }
@@ -836,7 +843,7 @@ var Hero = (props) => {
836
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: [
837
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" }) }),
838
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: [
839
- /* @__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" }),
840
847
  button
841
848
  ] })
842
849
  ] }) }),
@@ -1195,62 +1202,101 @@ var Textarea = React12.forwardRef(
1195
1202
  Textarea.displayName = "Textarea";
1196
1203
 
1197
1204
  // src/Video.tsx
1205
+ var import_react_full_screen = require("react-full-screen");
1198
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");
1199
1210
  var import_jsx_runtime20 = require("react/jsx-runtime");
1200
- 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;
1201
1222
  const videoRef = (0, import_react10.useRef)(null);
1202
- const [isPlaying, setIsPlaying] = (0, import_react10.useState)(false);
1203
- (0, import_react10.useImperativeHandle)(ref, () => ({
1204
- togglePlay: () => {
1205
- if (videoRef.current) {
1206
- if (videoRef.current.paused) {
1207
- videoRef.current.play();
1208
- setIsPlaying(true);
1209
- } else {
1210
- videoRef.current.pause();
1211
- setIsPlaying(false);
1212
- }
1213
- }
1214
- }
1215
- }));
1223
+ const { ref, inView } = (0, import_react_intersection_observer.useInView)({});
1224
+ const [isPlaying, setIsPlaying] = (0, import_react10.useState)(true);
1216
1225
  const setPlaying = () => {
1217
- if (videoRef.current) {
1218
- if (videoRef.current.paused) {
1219
- videoRef.current.play();
1220
- setIsPlaying(true);
1221
- } else {
1222
- videoRef.current.pause();
1223
- setIsPlaying(false);
1224
- }
1226
+ if (isPlaying) {
1227
+ videoRef.current?.pause();
1228
+ setIsPlaying(false);
1229
+ return;
1225
1230
  }
1231
+ setIsPlaying(true);
1232
+ videoRef.current?.play();
1226
1233
  };
1227
- return /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)("div", { className: `relative ${className}`, children: [
1228
- /* @__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." }),
1229
- !isPlaying && /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(
1230
- 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",
1231
1250
  {
1232
- variant: "icon",
1233
- icon: "mdi:play",
1234
- role: "icon",
1251
+ ...rest,
1235
1252
  onClick: () => setPlaying(),
1236
- 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."
1237
1257
  }
1238
- )
1239
- ] });
1240
- });
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
+ }
1241
1287
  Video.displayName = "Video";
1242
1288
 
1243
1289
  // src/Checkbox.tsx
1244
1290
  var CheckboxPrimitive = __toESM(require("@radix-ui/react-checkbox"));
1245
- var import_class_variance_authority18 = require("class-variance-authority");
1246
- var import_react11 = require("@iconify/react");
1291
+ var import_class_variance_authority19 = require("class-variance-authority");
1292
+ var import_react12 = require("@iconify/react");
1247
1293
  var import_jsx_runtime21 = require("react/jsx-runtime");
1248
1294
  function Checkbox({ className, ...props }) {
1249
1295
  return /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
1250
1296
  CheckboxPrimitive.Root,
1251
1297
  {
1252
1298
  "data-slot": "checkbox",
1253
- className: (0, import_class_variance_authority18.cx)(
1299
+ className: (0, import_class_variance_authority19.cx)(
1254
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",
1255
1301
  className
1256
1302
  ),
@@ -1260,7 +1306,7 @@ function Checkbox({ className, ...props }) {
1260
1306
  {
1261
1307
  "data-slot": "checkbox-indicator",
1262
1308
  className: "flex items-center justify-center text-current transition-none",
1263
- 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" })
1264
1310
  }
1265
1311
  )
1266
1312
  }
@@ -1268,25 +1314,25 @@ function Checkbox({ className, ...props }) {
1268
1314
  }
1269
1315
 
1270
1316
  // src/DualRangeSlider.tsx
1271
- var React14 = __toESM(require("react"));
1317
+ var React13 = __toESM(require("react"));
1272
1318
  var SliderPrimitive = __toESM(require("@radix-ui/react-slider"));
1273
- var import_class_variance_authority19 = require("class-variance-authority");
1319
+ var import_class_variance_authority20 = require("class-variance-authority");
1274
1320
  var import_jsx_runtime22 = require("react/jsx-runtime");
1275
- var DualRangeSlider = React14.forwardRef(
1321
+ var DualRangeSlider = React13.forwardRef(
1276
1322
  ({ className, label, labelPosition = "top", ...props }, ref) => {
1277
1323
  const initialValue = Array.isArray(props.value) ? props.value : [props.min, props.max];
1278
1324
  return /* @__PURE__ */ (0, import_jsx_runtime22.jsxs)(
1279
1325
  SliderPrimitive.Root,
1280
1326
  {
1281
1327
  ref,
1282
- 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),
1283
1329
  ...props,
1284
1330
  children: [
1285
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" }) }),
1286
- 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)(
1287
1333
  "span",
1288
1334
  {
1289
- className: (0, import_class_variance_authority19.cx)(
1335
+ className: (0, import_class_variance_authority20.cx)(
1290
1336
  "absolute flex w-full justify-center",
1291
1337
  labelPosition === "top" && "-top-7",
1292
1338
  labelPosition === "bottom" && "top-4"
@@ -1302,13 +1348,13 @@ var DualRangeSlider = React14.forwardRef(
1302
1348
  DualRangeSlider.displayName = "DualRangeSlider";
1303
1349
 
1304
1350
  // src/LuxonisChat.tsx
1305
- var import_react12 = require("react");
1351
+ var import_react13 = require("react");
1306
1352
  var import_markdown_it = __toESM(require("markdown-it"));
1307
- var import_react13 = require("@iconify/react");
1353
+ var import_react14 = require("@iconify/react");
1308
1354
 
1309
1355
  // src/Tooltip.tsx
1310
1356
  var TooltipPrimitive = __toESM(require("@radix-ui/react-tooltip"));
1311
- var import_class_variance_authority20 = require("class-variance-authority");
1357
+ var import_class_variance_authority21 = require("class-variance-authority");
1312
1358
  var import_jsx_runtime23 = require("react/jsx-runtime");
1313
1359
  function TooltipProvider({ delayDuration = 0, ...props }) {
1314
1360
  return /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(TooltipPrimitive.Provider, { "data-slot": "tooltip-provider", delayDuration, ...props });
@@ -1330,7 +1376,7 @@ function TooltipContent({
1330
1376
  {
1331
1377
  "data-slot": "tooltip-content",
1332
1378
  sideOffset,
1333
- className: (0, import_class_variance_authority20.cx)(
1379
+ className: (0, import_class_variance_authority21.cx)(
1334
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",
1335
1381
  className
1336
1382
  ),
@@ -1347,11 +1393,11 @@ function TooltipContent({
1347
1393
  var import_jsx_runtime24 = require("react/jsx-runtime");
1348
1394
  function ChatButton(props) {
1349
1395
  const { chatOpened, setChatOpened, messageFromSearch, setMessageFromSearch } = props;
1350
- const [hold, setHold] = (0, import_react12.useState)(false);
1351
- const [iconKey, setIconKey] = (0, import_react12.useState)(0);
1352
- const [loading, setLoading] = (0, import_react12.useState)(false);
1353
- const [userInput, setUserInput] = (0, import_react12.useState)("");
1354
- 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)([
1355
1401
  {
1356
1402
  id: -1,
1357
1403
  user: "bot",
@@ -1359,10 +1405,10 @@ function ChatButton(props) {
1359
1405
  loading: false
1360
1406
  }
1361
1407
  ]);
1362
- const [slackThreadTs, setSlackThreadTs] = (0, import_react12.useState)(null);
1363
- const inputRef = (0, import_react12.useRef)(null);
1364
- const messageListRef = (0, import_react12.useRef)(null);
1365
- 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);
1366
1412
  const loadingMessages = [
1367
1413
  "Please wait...",
1368
1414
  "Hold on...",
@@ -1375,7 +1421,7 @@ function ChatButton(props) {
1375
1421
  "Almost there...",
1376
1422
  "Please hold on..."
1377
1423
  ];
1378
- const fetchData = (0, import_react12.useCallback)(
1424
+ const fetchData = (0, import_react13.useCallback)(
1379
1425
  async (message) => {
1380
1426
  try {
1381
1427
  const response = await fetch("https://chat.luxonis.com/api/chat", {
@@ -1410,7 +1456,7 @@ function ChatButton(props) {
1410
1456
  },
1411
1457
  [messages, slackThreadTs]
1412
1458
  );
1413
- const onSubmit = (0, import_react12.useCallback)(
1459
+ const onSubmit = (0, import_react13.useCallback)(
1414
1460
  async (e) => {
1415
1461
  e?.preventDefault();
1416
1462
  if (userInput.trim() !== "") {
@@ -1445,7 +1491,7 @@ function ChatButton(props) {
1445
1491
  },
1446
1492
  [userInput, messages, fetchData, setMessageFromSearch, setLoading]
1447
1493
  );
1448
- const handleEnter = (0, import_react12.useCallback)(
1494
+ const handleEnter = (0, import_react13.useCallback)(
1449
1495
  (e) => {
1450
1496
  if (e.key === "Enter" && userInput.trim() !== "") {
1451
1497
  if (!e.shiftKey && userInput.trim() !== "") {
@@ -1458,13 +1504,13 @@ function ChatButton(props) {
1458
1504
  },
1459
1505
  [userInput, onSubmit]
1460
1506
  );
1461
- (0, import_react12.useEffect)(() => {
1507
+ (0, import_react13.useEffect)(() => {
1462
1508
  if (messageListRef.current) {
1463
1509
  const messageList = messageListRef.current;
1464
1510
  messageList.scrollTop = messageList.scrollHeight;
1465
1511
  }
1466
1512
  }, [messages]);
1467
- (0, import_react12.useEffect)(() => {
1513
+ (0, import_react13.useEffect)(() => {
1468
1514
  async function fetchSearchQuery() {
1469
1515
  setUserInput(`Can you tell me about ${messageFromSearch}`);
1470
1516
  await onSubmit(void 0);
@@ -1505,7 +1551,7 @@ function ChatButton(props) {
1505
1551
  animationTimingFunction: "ease-in"
1506
1552
  },
1507
1553
  className: "flex size-full items-center justify-center",
1508
- 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" })
1509
1555
  },
1510
1556
  iconKey
1511
1557
  )
@@ -1515,7 +1561,7 @@ function ChatButton(props) {
1515
1561
  /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)("div", { className: "flex h-8 flex-row justify-between gap-2", children: [
1516
1562
  /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)("h2", { className: "relative text-2xl", children: [
1517
1563
  /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("a", { target: "_blank", rel: "noopener noreferrer", href: "https://chat.luxonis.com", children: "Chat with Luxonis AI" }),
1518
- /* @__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" })
1519
1565
  ] }),
1520
1566
  /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)("div", { className: "flex flex-row items-center justify-end ", children: [
1521
1567
  /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)(Tooltip, { children: [
@@ -1537,7 +1583,7 @@ function ChatButton(props) {
1537
1583
  setSlackThreadTs(null);
1538
1584
  },
1539
1585
  children: /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(
1540
- import_react13.Icon,
1586
+ import_react14.Icon,
1541
1587
  {
1542
1588
  icon: "fluent:chat-add-16-regular",
1543
1589
  className: loading ? "text-black/40" : "text-primary",
@@ -1556,7 +1602,7 @@ function ChatButton(props) {
1556
1602
  setChatOpened(false);
1557
1603
  setMessageFromSearch("");
1558
1604
  },
1559
- 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 })
1560
1606
  }
1561
1607
  )
1562
1608
  ] })
@@ -1612,7 +1658,7 @@ function ChatButton(props) {
1612
1658
  name: "sendButton",
1613
1659
  variant: "primary",
1614
1660
  className: "!size-10 !p-2 " + (loading || inputRef.current?.value.length === 0 ? "bg-gray-100 transition-colors cursor-not-allowed" : "bg-primary cursor-pointer"),
1615
- 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" })
1616
1662
  }
1617
1663
  ) })
1618
1664
  ]
@@ -1631,7 +1677,7 @@ var ChatMessage = (props) => {
1631
1677
  {
1632
1678
  className: `flex h-fit w-full gap-2 ${props.user === "bot" ? props.loading ? "bg-gray-100 transition-colors" : "bg-gray-100" : "bg-white"}`,
1633
1679
  children: [
1634
- /* @__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" }) }) }),
1635
1681
  /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(
1636
1682
  "div",
1637
1683
  {
@@ -1653,14 +1699,14 @@ var ChatMessage = (props) => {
1653
1699
  // src/Tabs.tsx
1654
1700
  var React15 = __toESM(require("react"));
1655
1701
  var TabsPrimitive = __toESM(require("@radix-ui/react-tabs"));
1656
- var import_class_variance_authority21 = require("class-variance-authority");
1702
+ var import_class_variance_authority22 = require("class-variance-authority");
1657
1703
  var import_jsx_runtime25 = require("react/jsx-runtime");
1658
1704
  var Tabs = TabsPrimitive.Root;
1659
1705
  var TabsList = React15.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(
1660
1706
  TabsPrimitive.List,
1661
1707
  {
1662
1708
  ref,
1663
- className: (0, import_class_variance_authority21.cx)(
1709
+ className: (0, import_class_variance_authority22.cx)(
1664
1710
  "inline-flex h-10 items-center justify-center rounded-md bg-muted p-1 text-muted-foreground",
1665
1711
  className
1666
1712
  ),
@@ -1672,7 +1718,7 @@ var TabsTrigger = React15.forwardRef(({ className, ...props }, ref) => /* @__PUR
1672
1718
  TabsPrimitive.Trigger,
1673
1719
  {
1674
1720
  ref,
1675
- className: (0, import_class_variance_authority21.cx)(
1721
+ className: (0, import_class_variance_authority22.cx)(
1676
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",
1677
1723
  className
1678
1724
  ),
@@ -1684,7 +1730,7 @@ var TabsContent = React15.forwardRef(({ className, ...props }, ref) => /* @__PUR
1684
1730
  TabsPrimitive.Content,
1685
1731
  {
1686
1732
  ref,
1687
- className: (0, import_class_variance_authority21.cx)(
1733
+ className: (0, import_class_variance_authority22.cx)(
1688
1734
  "mt-2 ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2",
1689
1735
  className
1690
1736
  ),
@@ -1696,13 +1742,13 @@ TabsContent.displayName = TabsPrimitive.Content.displayName;
1696
1742
  // src/ProgressBar.tsx
1697
1743
  var React16 = __toESM(require("react"));
1698
1744
  var ProgressPrimitive = __toESM(require("@radix-ui/react-progress"));
1699
- var import_class_variance_authority22 = require("class-variance-authority");
1745
+ var import_class_variance_authority23 = require("class-variance-authority");
1700
1746
  var import_jsx_runtime26 = require("react/jsx-runtime");
1701
1747
  var Progress = React16.forwardRef(({ className, value, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(
1702
1748
  ProgressPrimitive.Root,
1703
1749
  {
1704
1750
  ref,
1705
- 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),
1706
1752
  ...props,
1707
1753
  children: /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(
1708
1754
  ProgressPrimitive.Indicator,
@@ -1716,8 +1762,8 @@ var Progress = React16.forwardRef(({ className, value, ...props }, ref) => /* @_
1716
1762
  Progress.displayName = ProgressPrimitive.Root.displayName;
1717
1763
 
1718
1764
  // src/EdgeSlideshow.tsx
1719
- var import_react14 = require("react");
1720
- 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");
1721
1767
  var import_jsx_runtime27 = require("react/jsx-runtime");
1722
1768
  var slides = [
1723
1769
  "ai-performance",
@@ -1904,8 +1950,8 @@ function EdgeSlideshowHeader() {
1904
1950
  }
1905
1951
  function EdgeSlideshowNav(props) {
1906
1952
  const { activeSlide, setActiveSlide, autoscrolling, inView } = props;
1907
- const [progress, setProgress] = (0, import_react14.useState)(0);
1908
- (0, import_react14.useEffect)(() => {
1953
+ const [progress, setProgress] = (0, import_react15.useState)(0);
1954
+ (0, import_react15.useEffect)(() => {
1909
1955
  let intervalId;
1910
1956
  const startTime = Date.now();
1911
1957
  if (autoscrolling && inView) {
@@ -1973,10 +2019,10 @@ function EdgeSlideshowText(props) {
1973
2019
  ] });
1974
2020
  }
1975
2021
  function EdgeSlideshow() {
1976
- const [activeSlide, setActiveSlide] = (0, import_react14.useState)("ai-performance");
1977
- const [autoscrolling, setAutoscrolling] = (0, import_react14.useState)(true);
1978
- const { ref, inView } = (0, import_react_intersection_observer.useInView)({});
1979
- (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)(() => {
1980
2026
  let intervalId;
1981
2027
  if (inView) {
1982
2028
  intervalId = window.setInterval(() => {
@@ -2015,7 +2061,7 @@ function EdgeSlideshow() {
2015
2061
  }
2016
2062
 
2017
2063
  // src/StereoDepthCalibration.tsx
2018
- var import_react15 = require("@iconify/react");
2064
+ var import_react16 = require("@iconify/react");
2019
2065
  var import_jsx_runtime28 = require("react/jsx-runtime");
2020
2066
  var cards = [
2021
2067
  {
@@ -2045,7 +2091,7 @@ function StereoDepthCalibrationWrapper() {
2045
2091
  "img",
2046
2092
  {
2047
2093
  alt: "Stereo Depth Calibration Background Overlay",
2048
- src: "/assets/stereo-depth/stereo-depth-calibration-bg.webp",
2094
+ src: "https://www.luxonis.com/assets/stereo-depth/stereo-depth-calibration-bg.webp",
2049
2095
  className: "absolute size-full bg-cover bg-center bg-no-repeat object-cover md:h-5/6"
2050
2096
  }
2051
2097
  ),
@@ -2082,7 +2128,7 @@ function StereoDepthCalibrationFooter() {
2082
2128
  }
2083
2129
  function StereoDepthCalibrationFooterCard(props) {
2084
2130
  return /* @__PURE__ */ (0, import_jsx_runtime28.jsxs)(FrostedCard, { className: "flex h-full flex-col items-start justify-start gap-2", children: [
2085
- /* @__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" }),
2086
2132
  /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(Text, { text: props.title, size: "lg", color: "white", weight: "semibold" }),
2087
2133
  /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(Text, { text: props.text, size: "sm", color: "white" })
2088
2134
  ] });
@@ -2101,7 +2147,7 @@ function StereoDepthCalibration() {
2101
2147
  }
2102
2148
 
2103
2149
  // src/Support.tsx
2104
- var import_class_variance_authority23 = require("class-variance-authority");
2150
+ var import_class_variance_authority24 = require("class-variance-authority");
2105
2151
 
2106
2152
  // src/links.ts
2107
2153
  var github = "https://github.com/luxonis/";
@@ -2131,6 +2177,7 @@ var applyMailClean = "careers@luxonis.com";
2131
2177
  var showcaseMail = "mailto:support@luxonis.com";
2132
2178
  var showcaseMailClean = "support@luxonis.com";
2133
2179
  var blog = "https://discuss.luxonis.com/blog";
2180
+ var stereoTuningAssistance = "/stereo-tuning-assistance";
2134
2181
  var privacy = "/privacy";
2135
2182
  var termsOfService = "/terms-of-service";
2136
2183
  var aboutUs = "/about-us";
@@ -2159,15 +2206,45 @@ function TalkToSalesButton() {
2159
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" }) });
2160
2207
  }
2161
2208
 
2162
- // src/ContactUsForm.tsx
2163
- var import_zod = require("zod");
2164
- 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
+ };
2165
2242
 
2166
2243
  // src/useRudderAnalytics.ts
2167
- var import_react16 = require("react");
2244
+ var import_react17 = require("react");
2168
2245
  var useRudderStackAnalytics = () => {
2169
- const [analytics, setAnalytics] = (0, import_react16.useState)();
2170
- (0, import_react16.useEffect)(() => {
2246
+ const [analytics, setAnalytics] = (0, import_react17.useState)();
2247
+ (0, import_react17.useEffect)(() => {
2171
2248
  if (!analytics) {
2172
2249
  const initialize = async () => {
2173
2250
  const { RudderAnalytics } = await import("@rudderstack/analytics-js");
@@ -2194,7 +2271,9 @@ var useRudderStackAnalytics = () => {
2194
2271
  };
2195
2272
 
2196
2273
  // src/ContactUsForm.tsx
2197
- 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");
2198
2277
  var formSchema = import_zod.z.object({
2199
2278
  name: import_zod.z.string().min(1),
2200
2279
  company: import_zod.z.string().min(1),
@@ -2203,9 +2282,9 @@ var formSchema = import_zod.z.object({
2203
2282
  inquiry: import_zod.z.string().min(1)
2204
2283
  });
2205
2284
  function ContactUsForm() {
2206
- const [formSubmitted, setFormSubmitted] = import_react17.default.useState(false);
2207
- const [formHasError, setFormHasError] = import_react17.default.useState(false);
2208
- 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);
2209
2288
  const analytics = useRudderStackAnalytics();
2210
2289
  const handleSubmit = (event) => {
2211
2290
  event.preventDefault();
@@ -2262,7 +2341,7 @@ function ContactUsForm() {
2262
2341
  setFormSubmitted(true);
2263
2342
  };
2264
2343
  if (formSubmitted) {
2265
- 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)(
2266
2345
  Text,
2267
2346
  {
2268
2347
  size: "h4",
@@ -2272,107 +2351,80 @@ function ContactUsForm() {
2272
2351
  }
2273
2352
  ) });
2274
2353
  }
2275
- 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: [
2276
- /* @__PURE__ */ (0, import_jsx_runtime30.jsxs)("div", { className: "flex w-full flex-col gap-6 lg:flex-row", children: [
2277
- /* @__PURE__ */ (0, import_jsx_runtime30.jsxs)("div", { className: "flex w-full flex-col gap-2", children: [
2278
- /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(Label, { className: "font-normal", htmlFor: "name", children: "Name *" }),
2279
- /* @__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" })
2280
2359
  ] }),
2281
- /* @__PURE__ */ (0, import_jsx_runtime30.jsxs)("div", { className: "flex w-full flex-col gap-2", children: [
2282
- /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(Label, { className: "font-normal", htmlFor: "Company", children: "Company *" }),
2283
- /* @__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" })
2284
2363
  ] })
2285
2364
  ] }),
2286
- /* @__PURE__ */ (0, import_jsx_runtime30.jsxs)("div", { className: "flex flex-col gap-2", children: [
2287
- /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(Label, { className: "font-normal", htmlFor: "email", children: "E-mail *" }),
2288
- /* @__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" })
2289
2368
  ] }),
2290
- /* @__PURE__ */ (0, import_jsx_runtime30.jsxs)("div", { className: "flex flex-col gap-2", children: [
2291
- /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(Label, { className: "font-normal", htmlFor: "inquiry", children: "Type of Inquiry *" }),
2292
- /* @__PURE__ */ (0, import_jsx_runtime30.jsxs)(Select, { children: [
2293
- /* @__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..." }) }),
2294
- /* @__PURE__ */ (0, import_jsx_runtime30.jsxs)(SelectContent, { className: "bg-white", children: [
2295
- /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(SelectItem, { value: "Hub assistance", children: "Hub assistance" }),
2296
- /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(SelectItem, { value: "hardware-issue", children: "Hardware issue" }),
2297
- /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(SelectItem, { value: "support", children: "Support" }),
2298
- /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(SelectItem, { value: "training", children: "Training" }),
2299
- /* @__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" })
2300
2379
  ] })
2301
2380
  ] })
2302
2381
  ] }),
2303
- /* @__PURE__ */ (0, import_jsx_runtime30.jsxs)("div", { className: "flex flex-col gap-2", children: [
2304
- /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(Label, { className: "font-normal", htmlFor: "message", children: "Message *" }),
2305
- /* @__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..." })
2306
2385
  ] }),
2307
- /* @__PURE__ */ (0, import_jsx_runtime30.jsxs)("div", { className: "flex flex-row items-center justify-start gap-8", children: [
2308
- /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(Button, { type: "submit", variant: "secondary", size: "lg", role: "continue", className: "w-fit", children: formIsLoading ? "Submitting..." : "Submit" }),
2309
- 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" })
2310
2389
  ] })
2311
2390
  ] });
2312
2391
  }
2313
2392
 
2314
- // src/Support.tsx
2315
- var import_jsx_runtime31 = require("react/jsx-runtime");
2316
- var Support = (props) => {
2317
- const { variant = "fullpage" } = props;
2318
- return /* @__PURE__ */ (0, import_jsx_runtime31.jsx)("div", { className: "page-card page-padding", children: /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)(
2319
- Card,
2320
- {
2321
- variant,
2322
- outerStyles: "h-full",
2323
- className: (0, import_class_variance_authority23.cx)(
2324
- "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"
2325
- ),
2326
- children: [
2327
- /* @__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: [
2328
- /* @__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: [
2329
- /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(Text, { size: "h2", text: "Need More Help?", className: "max-w-[650px] text-center xl:text-left" }),
2330
- /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(
2331
- Text,
2332
- {
2333
- size: "lg",
2334
- text: "Our dedicated team is available for technical support, business solutions, and more. Let us provide the help you need.",
2335
- className: "w-full max-w-105 text-center xl:text-left"
2336
- }
2337
- )
2338
- ] }),
2339
- /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)("div", { className: "flex w-fit flex-col gap-4 md:flex-row", children: [
2340
- /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(TalkToSalesButton, {}),
2341
- /* @__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" }) })
2342
- ] })
2343
- ] }),
2344
- /* @__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, {}) }) })
2345
- ]
2346
- }
2347
- ) });
2348
- };
2349
-
2350
2393
  // src/ContactUs.tsx
2351
2394
  var import_jsx_runtime32 = require("react/jsx-runtime");
2352
2395
  var ContactUsSection = (props) => {
2353
2396
  const {
2354
- title = "Let\u2019s Build \n the Future of \n Vision Together",
2397
+ title = "Let\u2019s Build the Future of Vision Together",
2355
2398
  description = "Our dedicated team is available for technical support, business solutions, and more. Let us provide the help you need."
2356
2399
  } = props;
2357
- 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: [
2358
- /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(
2359
- Description,
2360
- {
2361
- title,
2362
- align: "left",
2363
- textStyle: "max-w-none w-fit lg:max-w-auto lg:justify-start justify-center lg:text-left text-center",
2364
- wrapperClassName: "lg:items-start items-center lg:text-left text-center flex",
2365
- description,
2366
- className: "text-white ",
2367
- 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: [
2368
- /* @__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" }) }),
2369
- /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(TalkToSalesButton, {})
2370
- ] })
2371
- }
2372
- ),
2373
- /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(FrostedCard, { className: "!p-6", children: /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(ContactUsForm, {}) })
2374
- ] }) });
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
+ ) }) });
2375
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
+ }
2376
2428
  // Annotate the CommonJS export names for ESM import in node:
2377
2429
  0 && (module.exports = {
2378
2430
  Accordion,
@@ -2479,6 +2531,7 @@ var ContactUsSection = (props) => {
2479
2531
  showcaseMail,
2480
2532
  showcaseMailClean,
2481
2533
  status,
2534
+ stereoTuningAssistance,
2482
2535
  store,
2483
2536
  supportForm,
2484
2537
  supportMail,
@@ -2486,6 +2539,8 @@ var ContactUsSection = (props) => {
2486
2539
  techcrunch,
2487
2540
  termsOfService,
2488
2541
  twitter,
2542
+ useChat,
2543
+ useChatContext,
2489
2544
  useRudderStackAnalytics,
2490
2545
  youtube
2491
2546
  });