@luxonis/component-lib 1.0.11 → 1.1.0
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.css +1 -1
- package/dist/index.d.mts +73 -1
- package/dist/index.d.ts +73 -1
- package/dist/index.js +807 -8
- package/dist/index.mjs +752 -7
- package/package.json +2 -2
package/dist/index.js
CHANGED
|
@@ -45,9 +45,12 @@ __export(index_exports, {
|
|
|
45
45
|
ChatButton: () => ChatButton,
|
|
46
46
|
Checkbox: () => Checkbox,
|
|
47
47
|
CodeBlock: () => CodeBlock,
|
|
48
|
+
ContactUsForm: () => ContactUsForm,
|
|
49
|
+
ContactUsSection: () => ContactUsSection,
|
|
48
50
|
Copyright: () => Copyright,
|
|
49
51
|
Description: () => Description,
|
|
50
52
|
DualRangeSlider: () => DualRangeSlider,
|
|
53
|
+
EdgeSlideshow: () => EdgeSlideshow,
|
|
51
54
|
FrostedCard: () => FrostedCard,
|
|
52
55
|
Hero: () => Hero,
|
|
53
56
|
HoverCard: () => HoverCard,
|
|
@@ -55,6 +58,7 @@ __export(index_exports, {
|
|
|
55
58
|
HoverCardTrigger: () => HoverCardTrigger,
|
|
56
59
|
Input: () => Input,
|
|
57
60
|
Label: () => Label,
|
|
61
|
+
Progress: () => Progress,
|
|
58
62
|
SearchBar: () => SearchBar,
|
|
59
63
|
Select: () => Select,
|
|
60
64
|
SelectContent: () => SelectContent,
|
|
@@ -66,6 +70,8 @@ __export(index_exports, {
|
|
|
66
70
|
SelectSeparator: () => SelectSeparator,
|
|
67
71
|
SelectTrigger: () => SelectTrigger,
|
|
68
72
|
SelectValue: () => SelectValue,
|
|
73
|
+
StereoDepthCalibration: () => StereoDepthCalibration,
|
|
74
|
+
Support: () => Support,
|
|
69
75
|
Switch: () => Switch,
|
|
70
76
|
Table: () => Table,
|
|
71
77
|
TableBody: () => TableBody,
|
|
@@ -79,6 +85,7 @@ __export(index_exports, {
|
|
|
79
85
|
TabsContent: () => TabsContent,
|
|
80
86
|
TabsList: () => TabsList,
|
|
81
87
|
TabsTrigger: () => TabsTrigger,
|
|
88
|
+
TalkToSalesButton: () => TalkToSalesButton,
|
|
82
89
|
Text: () => Text,
|
|
83
90
|
Textarea: () => Textarea,
|
|
84
91
|
Tooltip: () => Tooltip,
|
|
@@ -86,9 +93,56 @@ __export(index_exports, {
|
|
|
86
93
|
TooltipProvider: () => TooltipProvider,
|
|
87
94
|
TooltipTrigger: () => TooltipTrigger,
|
|
88
95
|
Video: () => Video,
|
|
96
|
+
aboutUs: () => aboutUs,
|
|
97
|
+
accessoriesProducts: () => accessoriesProducts,
|
|
98
|
+
applyMail: () => applyMail,
|
|
99
|
+
applyMailClean: () => applyMailClean,
|
|
89
100
|
badgeVariants: () => badgeVariants,
|
|
101
|
+
blog: () => blog,
|
|
102
|
+
bloomberg: () => bloomberg,
|
|
90
103
|
buttonVariants: () => buttonVariants,
|
|
91
|
-
|
|
104
|
+
camerasProducts: () => camerasProducts,
|
|
105
|
+
careers: () => careers,
|
|
106
|
+
certificates: () => certificates,
|
|
107
|
+
contactLink: () => contactLink,
|
|
108
|
+
depthaiHardwareProject: () => depthaiHardwareProject,
|
|
109
|
+
discord: () => discord,
|
|
110
|
+
distributorForm: () => distributorForm,
|
|
111
|
+
distributors: () => distributors,
|
|
112
|
+
docs: () => docs,
|
|
113
|
+
earlyAccessProducts: () => earlyAccessProducts,
|
|
114
|
+
forbes: () => forbes,
|
|
115
|
+
forum: () => forum,
|
|
116
|
+
getStoreSearchLink: () => getStoreSearchLink,
|
|
117
|
+
github: () => github,
|
|
118
|
+
kickstarter: () => kickstarter,
|
|
119
|
+
linkedin: () => linkedin,
|
|
120
|
+
marketing: () => marketing,
|
|
121
|
+
modulesProducts: () => modulesProducts,
|
|
122
|
+
oakRealsenseDocs: () => oakRealsenseDocs,
|
|
123
|
+
parseNewLines: () => parseNewLines,
|
|
124
|
+
privacy: () => privacy,
|
|
125
|
+
raeStorepage: () => raeStorepage,
|
|
126
|
+
replayInstructions: () => replayInstructions,
|
|
127
|
+
robothub: () => robothub,
|
|
128
|
+
robothubInternal: () => robothubInternal,
|
|
129
|
+
salesMail: () => salesMail,
|
|
130
|
+
salesMailClean: () => salesMailClean,
|
|
131
|
+
services: () => services,
|
|
132
|
+
servicesMeetLink: () => servicesMeetLink,
|
|
133
|
+
showcase: () => showcase,
|
|
134
|
+
showcaseMail: () => showcaseMail,
|
|
135
|
+
showcaseMailClean: () => showcaseMailClean,
|
|
136
|
+
status: () => status,
|
|
137
|
+
store: () => store,
|
|
138
|
+
supportForm: () => supportForm,
|
|
139
|
+
supportMail: () => supportMail,
|
|
140
|
+
supportMailClean: () => supportMailClean,
|
|
141
|
+
techcrunch: () => techcrunch,
|
|
142
|
+
termsOfService: () => termsOfService,
|
|
143
|
+
twitter: () => twitter,
|
|
144
|
+
useRudderStackAnalytics: () => useRudderStackAnalytics,
|
|
145
|
+
youtube: () => youtube
|
|
92
146
|
});
|
|
93
147
|
module.exports = __toCommonJS(index_exports);
|
|
94
148
|
|
|
@@ -1465,11 +1519,12 @@ function ChatButton(props) {
|
|
|
1465
1519
|
] }),
|
|
1466
1520
|
/* @__PURE__ */ (0, import_jsx_runtime24.jsxs)("div", { className: "flex flex-row items-center justify-end ", children: [
|
|
1467
1521
|
/* @__PURE__ */ (0, import_jsx_runtime24.jsxs)(Tooltip, { children: [
|
|
1468
|
-
/* @__PURE__ */ (0, import_jsx_runtime24.jsx)(TooltipContent, { children: /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("div", { className: "size-full bg-white", children: "New
|
|
1522
|
+
!loading && /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(TooltipContent, { children: /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("div", { className: "size-full bg-white", children: /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("span", { children: "New Chat" }) }) }),
|
|
1469
1523
|
/* @__PURE__ */ (0, import_jsx_runtime24.jsx)(TooltipTrigger, { children: /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(
|
|
1470
1524
|
"button",
|
|
1471
1525
|
{
|
|
1472
1526
|
className: "flex !size-12 !p-2",
|
|
1527
|
+
disabled: loading,
|
|
1473
1528
|
onClick: () => {
|
|
1474
1529
|
setMessages([
|
|
1475
1530
|
{
|
|
@@ -1481,7 +1536,15 @@ function ChatButton(props) {
|
|
|
1481
1536
|
]);
|
|
1482
1537
|
setSlackThreadTs(null);
|
|
1483
1538
|
},
|
|
1484
|
-
children: /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(
|
|
1539
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(
|
|
1540
|
+
import_react13.Icon,
|
|
1541
|
+
{
|
|
1542
|
+
icon: "fluent:chat-add-16-regular",
|
|
1543
|
+
className: loading ? "text-black/40" : "text-primary",
|
|
1544
|
+
width: 32,
|
|
1545
|
+
height: 32
|
|
1546
|
+
}
|
|
1547
|
+
)
|
|
1485
1548
|
}
|
|
1486
1549
|
) })
|
|
1487
1550
|
] }),
|
|
@@ -1533,6 +1596,7 @@ function ChatButton(props) {
|
|
|
1533
1596
|
onChange: (e) => setUserInput(e.target.value),
|
|
1534
1597
|
disabled: loading,
|
|
1535
1598
|
ref: inputRef,
|
|
1599
|
+
defaultValue: "",
|
|
1536
1600
|
autoFocus: true,
|
|
1537
1601
|
rows: 1,
|
|
1538
1602
|
maxLength: 512,
|
|
@@ -1543,12 +1607,12 @@ function ChatButton(props) {
|
|
|
1543
1607
|
/* @__PURE__ */ (0, import_jsx_runtime24.jsx)("div", { className: "absolute right-2 flex items-center", children: /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(
|
|
1544
1608
|
Button,
|
|
1545
1609
|
{
|
|
1546
|
-
disabled: loading,
|
|
1610
|
+
disabled: loading || userInput.length === 0,
|
|
1547
1611
|
type: "submit",
|
|
1548
1612
|
name: "sendButton",
|
|
1549
1613
|
variant: "primary",
|
|
1550
|
-
className: "!size-10 bg-primary
|
|
1551
|
-
children: /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(import_react13.Icon, { icon: "mdi:send", className: "text-white" })
|
|
1614
|
+
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" })
|
|
1552
1616
|
}
|
|
1553
1617
|
) })
|
|
1554
1618
|
]
|
|
@@ -1575,7 +1639,7 @@ var ChatMessage = (props) => {
|
|
|
1575
1639
|
children: /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(
|
|
1576
1640
|
"div",
|
|
1577
1641
|
{
|
|
1578
|
-
className: `chat-rich-text w-[
|
|
1642
|
+
className: `chat-rich-text w-[345px] max-w-[75vw] ${props.user === "bot" ? "bg-gray-100" : "bg-white"} break-words pb-1.5 pt-2`,
|
|
1579
1643
|
dangerouslySetInnerHTML: { __html: props.message }
|
|
1580
1644
|
}
|
|
1581
1645
|
)
|
|
@@ -1628,6 +1692,687 @@ var TabsContent = React15.forwardRef(({ className, ...props }, ref) => /* @__PUR
|
|
|
1628
1692
|
}
|
|
1629
1693
|
));
|
|
1630
1694
|
TabsContent.displayName = TabsPrimitive.Content.displayName;
|
|
1695
|
+
|
|
1696
|
+
// src/ProgressBar.tsx
|
|
1697
|
+
var React16 = __toESM(require("react"));
|
|
1698
|
+
var ProgressPrimitive = __toESM(require("@radix-ui/react-progress"));
|
|
1699
|
+
var import_class_variance_authority22 = require("class-variance-authority");
|
|
1700
|
+
var import_jsx_runtime26 = require("react/jsx-runtime");
|
|
1701
|
+
var Progress = React16.forwardRef(({ className, value, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(
|
|
1702
|
+
ProgressPrimitive.Root,
|
|
1703
|
+
{
|
|
1704
|
+
ref,
|
|
1705
|
+
className: (0, import_class_variance_authority22.cx)("relative h-2 w-full overflow-hidden rounded-full bg-primary/20", className),
|
|
1706
|
+
...props,
|
|
1707
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(
|
|
1708
|
+
ProgressPrimitive.Indicator,
|
|
1709
|
+
{
|
|
1710
|
+
className: "size-full flex-1 bg-primary transition-all",
|
|
1711
|
+
style: { transform: `translateX(-${100 - (value || 0)}%)` }
|
|
1712
|
+
}
|
|
1713
|
+
)
|
|
1714
|
+
}
|
|
1715
|
+
));
|
|
1716
|
+
Progress.displayName = ProgressPrimitive.Root.displayName;
|
|
1717
|
+
|
|
1718
|
+
// src/EdgeSlideshow.tsx
|
|
1719
|
+
var import_react14 = require("react");
|
|
1720
|
+
var import_react_intersection_observer = require("react-intersection-observer");
|
|
1721
|
+
var import_jsx_runtime27 = require("react/jsx-runtime");
|
|
1722
|
+
var slides = [
|
|
1723
|
+
"ai-performance",
|
|
1724
|
+
//'stereo-depth',
|
|
1725
|
+
//'video-streaming',
|
|
1726
|
+
"processing-efficiency",
|
|
1727
|
+
"custom-vision"
|
|
1728
|
+
];
|
|
1729
|
+
function getNextSlide(currentSlide) {
|
|
1730
|
+
const currentIndex = slides.indexOf(currentSlide);
|
|
1731
|
+
const nextIndex = (currentIndex + 1) % slides.length;
|
|
1732
|
+
return slides[nextIndex];
|
|
1733
|
+
}
|
|
1734
|
+
function getSlideInfo(slide) {
|
|
1735
|
+
switch (slide) {
|
|
1736
|
+
case "ai-performance":
|
|
1737
|
+
return {
|
|
1738
|
+
title: "AI Performance",
|
|
1739
|
+
imageUrl: "ai-performance.webp",
|
|
1740
|
+
imageAlt: "AI Performance",
|
|
1741
|
+
content: /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)(import_jsx_runtime27.Fragment, { children: [
|
|
1742
|
+
/* @__PURE__ */ (0, import_jsx_runtime27.jsx)(
|
|
1743
|
+
EdgeSlideshowTextPoint,
|
|
1744
|
+
{
|
|
1745
|
+
title: "48 TOPS INT8 / 12 TOPS FP16:",
|
|
1746
|
+
description: "Handle complex neural models effortlessly, from object detection to segmentation."
|
|
1747
|
+
}
|
|
1748
|
+
),
|
|
1749
|
+
/* @__PURE__ */ (0, import_jsx_runtime27.jsx)(
|
|
1750
|
+
EdgeSlideshowTextPoint,
|
|
1751
|
+
{
|
|
1752
|
+
title: "Run YOLO, ResNet, MobileNet (90+Models):",
|
|
1753
|
+
description: "Optimized for high throughput and low latency."
|
|
1754
|
+
}
|
|
1755
|
+
),
|
|
1756
|
+
/* @__PURE__ */ (0, import_jsx_runtime27.jsx)(
|
|
1757
|
+
EdgeSlideshowTextPoint,
|
|
1758
|
+
{
|
|
1759
|
+
title: "Inference Speed:",
|
|
1760
|
+
description: /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)("article", { className: "flex flex-row flex-wrap items-start gap-2 lg:items-center", children: [
|
|
1761
|
+
/* @__PURE__ */ (0, import_jsx_runtime27.jsx)(EdgeSlideshowTextPointButton, { text: "YOLOv5m: 280 FPS" }),
|
|
1762
|
+
/* @__PURE__ */ (0, import_jsx_runtime27.jsx)(EdgeSlideshowTextPointButton, { text: "ResNet-50: 934 FPS" }),
|
|
1763
|
+
/* @__PURE__ */ (0, import_jsx_runtime27.jsx)(EdgeSlideshowTextPointButton, { text: "BiseNetv1-MBNV2: 647 FPS" })
|
|
1764
|
+
] })
|
|
1765
|
+
}
|
|
1766
|
+
)
|
|
1767
|
+
] })
|
|
1768
|
+
};
|
|
1769
|
+
//case 'stereo-depth':
|
|
1770
|
+
// return {
|
|
1771
|
+
// title: 'Stereo Depth Precision',
|
|
1772
|
+
// imageUrl: 'stereo-depth.webp',
|
|
1773
|
+
// imageAlt: 'Stereo Depth',
|
|
1774
|
+
// content: (
|
|
1775
|
+
// <>
|
|
1776
|
+
// <EdgeSlideshowTextPoint
|
|
1777
|
+
// title="Subpixel Accuracy:"
|
|
1778
|
+
// description="Up to 1/32 subpixel, enabling precise depth maps for real-world applications."
|
|
1779
|
+
// />
|
|
1780
|
+
// <EdgeSlideshowTextPoint
|
|
1781
|
+
// title="High Resolution:"
|
|
1782
|
+
// description="Stereo depth at 720p @ 60 FPS with configurable disparity ranges."
|
|
1783
|
+
// />
|
|
1784
|
+
// <EdgeSlideshowTextPoint
|
|
1785
|
+
// title="Advanced Features:"
|
|
1786
|
+
// description="Confidence mapping, neural network based depth matching, and fine-tuning parameters tailored to any environment."
|
|
1787
|
+
// />
|
|
1788
|
+
// </>
|
|
1789
|
+
// ),
|
|
1790
|
+
// };
|
|
1791
|
+
//case 'video-streaming':
|
|
1792
|
+
// return {
|
|
1793
|
+
// title: 'Video Streaming',
|
|
1794
|
+
// imageUrl: 'video-streaming.webp',
|
|
1795
|
+
// imageAlt: 'Video Streaming',
|
|
1796
|
+
// content: (
|
|
1797
|
+
// <>
|
|
1798
|
+
// <EdgeSlideshowTextPoint
|
|
1799
|
+
// title="Encoding:"
|
|
1800
|
+
// description={<EdgeSlideshowTextPointButton text={'4K @ 120 FPS (H.264/H.265)'} />}
|
|
1801
|
+
// />
|
|
1802
|
+
// <EdgeSlideshowTextPoint
|
|
1803
|
+
// title="Decoding:"
|
|
1804
|
+
// description={<EdgeSlideshowTextPointButton text={'4K @ 240 FPS, with VP9 and AV1 support'} />}
|
|
1805
|
+
// />
|
|
1806
|
+
// <EdgeSlideshowTextPoint
|
|
1807
|
+
// title="ISP:"
|
|
1808
|
+
// description={
|
|
1809
|
+
// <article className="flex flex-row flex-wrap gap-2 items-start lg:items-center">
|
|
1810
|
+
// <EdgeSlideshowTextPointButton text={'5 camera streams'} />
|
|
1811
|
+
// <EdgeSlideshowTextPointButton text={'HDR'} />
|
|
1812
|
+
// <EdgeSlideshowTextPointButton text={'EIS'} />
|
|
1813
|
+
// <EdgeSlideshowTextPointButton text={'3A'} />
|
|
1814
|
+
// <EdgeSlideshowTextPointButton text={'up to 3x 8K @ 30FPS'} />
|
|
1815
|
+
// </article>
|
|
1816
|
+
// }
|
|
1817
|
+
// />
|
|
1818
|
+
// </>
|
|
1819
|
+
// ),
|
|
1820
|
+
// };
|
|
1821
|
+
case "processing-efficiency":
|
|
1822
|
+
return {
|
|
1823
|
+
title: "Processing Efficiency",
|
|
1824
|
+
imageUrl: "processing-efficiency.webp",
|
|
1825
|
+
imageAlt: "Processing Efficiency",
|
|
1826
|
+
content: /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)(import_jsx_runtime27.Fragment, { children: [
|
|
1827
|
+
/* @__PURE__ */ (0, import_jsx_runtime27.jsx)(
|
|
1828
|
+
EdgeSlideshowTextPoint,
|
|
1829
|
+
{
|
|
1830
|
+
title: "Power Consumption:",
|
|
1831
|
+
description: "Average 10\u201315W, balancing performance and energy efficiency for edge deployments."
|
|
1832
|
+
}
|
|
1833
|
+
),
|
|
1834
|
+
/* @__PURE__ */ (0, import_jsx_runtime27.jsx)(
|
|
1835
|
+
EdgeSlideshowTextPoint,
|
|
1836
|
+
{
|
|
1837
|
+
title: "Compact Design:",
|
|
1838
|
+
description: "Fully integrated processing in a device that fits in your hand."
|
|
1839
|
+
}
|
|
1840
|
+
)
|
|
1841
|
+
] })
|
|
1842
|
+
};
|
|
1843
|
+
case "custom-vision":
|
|
1844
|
+
return {
|
|
1845
|
+
title: "Custom Vision Engines",
|
|
1846
|
+
imageUrl: "custom-vision.webp",
|
|
1847
|
+
imageAlt: "Custom Vision",
|
|
1848
|
+
content: /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)(import_jsx_runtime27.Fragment, { children: [
|
|
1849
|
+
/* @__PURE__ */ (0, import_jsx_runtime27.jsx)(
|
|
1850
|
+
EdgeSlideshowTextPoint,
|
|
1851
|
+
{
|
|
1852
|
+
title: "Processing:",
|
|
1853
|
+
description: "Stereo depth, optical flow, and feature detection are processed in parallel on dedicated hardware blocks."
|
|
1854
|
+
}
|
|
1855
|
+
),
|
|
1856
|
+
/* @__PURE__ */ (0, import_jsx_runtime27.jsx)(
|
|
1857
|
+
EdgeSlideshowTextPoint,
|
|
1858
|
+
{
|
|
1859
|
+
title: "Throughput:",
|
|
1860
|
+
description: /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)("article", { className: "flex flex-col items-start gap-2", children: [
|
|
1861
|
+
/* @__PURE__ */ (0, import_jsx_runtime27.jsx)(EdgeSlideshowTextPointButton, { text: "Optical Flow:\nFull-dense at VGA @ 60 FPS" }),
|
|
1862
|
+
/* @__PURE__ */ (0, import_jsx_runtime27.jsx)(EdgeSlideshowTextPointButton, { text: "Template Matching:\n 1080p with 1.2 ms for 500 templates" })
|
|
1863
|
+
] })
|
|
1864
|
+
}
|
|
1865
|
+
)
|
|
1866
|
+
] })
|
|
1867
|
+
};
|
|
1868
|
+
}
|
|
1869
|
+
}
|
|
1870
|
+
function EdgeSlideshowTextPointButton(props) {
|
|
1871
|
+
return /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(
|
|
1872
|
+
Button,
|
|
1873
|
+
{
|
|
1874
|
+
variant: "primaryAlt",
|
|
1875
|
+
className: "min-h-fit cursor-default whitespace-pre-line rounded-md !p-4 text-start",
|
|
1876
|
+
animate: false,
|
|
1877
|
+
children: props.text
|
|
1878
|
+
}
|
|
1879
|
+
);
|
|
1880
|
+
}
|
|
1881
|
+
function EdgeSlideshowImage(props) {
|
|
1882
|
+
const { imageAlt, imageUrl } = getSlideInfo(props.activeSlide);
|
|
1883
|
+
return /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(
|
|
1884
|
+
"img",
|
|
1885
|
+
{
|
|
1886
|
+
src: `/assets/edge-interference/slideshow/${imageUrl}`,
|
|
1887
|
+
alt: imageAlt,
|
|
1888
|
+
className: "size-full max-w-[1/2] rounded-lg object-cover"
|
|
1889
|
+
}
|
|
1890
|
+
);
|
|
1891
|
+
}
|
|
1892
|
+
function EdgeSlideshowHeader() {
|
|
1893
|
+
return /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)("header", { className: "flex flex-col gap-4", children: [
|
|
1894
|
+
/* @__PURE__ */ (0, import_jsx_runtime27.jsx)(Text, { text: "The Benchmark for Edge AI", size: "h2", color: "default" }),
|
|
1895
|
+
/* @__PURE__ */ (0, import_jsx_runtime27.jsx)(
|
|
1896
|
+
Text,
|
|
1897
|
+
{
|
|
1898
|
+
text: "Luxonis devices deliver unparalleled AI performance at the edge, combining neural inference, stereo depth, and real-time vision in one compact package.",
|
|
1899
|
+
size: "lg",
|
|
1900
|
+
color: "default"
|
|
1901
|
+
}
|
|
1902
|
+
)
|
|
1903
|
+
] });
|
|
1904
|
+
}
|
|
1905
|
+
function EdgeSlideshowNav(props) {
|
|
1906
|
+
const { activeSlide, setActiveSlide, autoscrolling, inView } = props;
|
|
1907
|
+
const [progress, setProgress] = (0, import_react14.useState)(0);
|
|
1908
|
+
(0, import_react14.useEffect)(() => {
|
|
1909
|
+
let intervalId;
|
|
1910
|
+
const startTime = Date.now();
|
|
1911
|
+
if (autoscrolling && inView) {
|
|
1912
|
+
intervalId = window.setInterval(() => {
|
|
1913
|
+
const elapsed = Date.now() - startTime;
|
|
1914
|
+
const newProgress = Math.min(elapsed / 1e4 * 100, 100);
|
|
1915
|
+
setProgress(newProgress);
|
|
1916
|
+
if (newProgress >= 100) {
|
|
1917
|
+
clearInterval(intervalId);
|
|
1918
|
+
setProgress(0);
|
|
1919
|
+
}
|
|
1920
|
+
}, 100);
|
|
1921
|
+
}
|
|
1922
|
+
return () => {
|
|
1923
|
+
if (intervalId !== void 0) {
|
|
1924
|
+
clearInterval(intervalId);
|
|
1925
|
+
}
|
|
1926
|
+
};
|
|
1927
|
+
}, [autoscrolling, activeSlide, inView]);
|
|
1928
|
+
return /* @__PURE__ */ (0, import_jsx_runtime27.jsx)("nav", { className: "flex flex-row items-center gap-3", children: slides.map(
|
|
1929
|
+
(slide, index) => autoscrolling && slides.indexOf(slide) === slides.indexOf(activeSlide) ? /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(
|
|
1930
|
+
Progress,
|
|
1931
|
+
{
|
|
1932
|
+
onClick: () => setActiveSlide(slide),
|
|
1933
|
+
value: progress,
|
|
1934
|
+
max: 100,
|
|
1935
|
+
className: "!h-3 w-16 cursor-pointer select-none"
|
|
1936
|
+
},
|
|
1937
|
+
index
|
|
1938
|
+
) : /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(
|
|
1939
|
+
Badge,
|
|
1940
|
+
{
|
|
1941
|
+
onClick: () => setActiveSlide(slide),
|
|
1942
|
+
variant: activeSlide === slide ? "default" : "secondary",
|
|
1943
|
+
className: "h-3 w-16 cursor-pointer select-none"
|
|
1944
|
+
},
|
|
1945
|
+
slide
|
|
1946
|
+
)
|
|
1947
|
+
) });
|
|
1948
|
+
}
|
|
1949
|
+
function EdgeSlideshowTextPoint(props) {
|
|
1950
|
+
return /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)("article", { className: `flex flex-col items-start gap-2`, children: [
|
|
1951
|
+
/* @__PURE__ */ (0, import_jsx_runtime27.jsx)(Text, { text: props.title, size: "md", color: "default", weight: "bold" }),
|
|
1952
|
+
typeof props.description === "string" ? /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(Text, { text: props.description, size: "md", color: "default" }) : props.description
|
|
1953
|
+
] });
|
|
1954
|
+
}
|
|
1955
|
+
function EdgeSlideshowText(props) {
|
|
1956
|
+
const { activeSlide, setActiveSlide, autoscrolling, inView } = props;
|
|
1957
|
+
const slideInfo = getSlideInfo(activeSlide);
|
|
1958
|
+
return /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)("section", { className: "flex size-full flex-col justify-between gap-4", children: [
|
|
1959
|
+
/* @__PURE__ */ (0, import_jsx_runtime27.jsx)("section", { className: "hidden xl:flex", children: /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(EdgeSlideshowHeader, {}) }),
|
|
1960
|
+
/* @__PURE__ */ (0, import_jsx_runtime27.jsxs)("article", { className: "flex flex-col items-start gap-8", children: [
|
|
1961
|
+
/* @__PURE__ */ (0, import_jsx_runtime27.jsx)(Text, { text: slideInfo.title, size: "h4", color: "primary" }),
|
|
1962
|
+
slideInfo.content,
|
|
1963
|
+
/* @__PURE__ */ (0, import_jsx_runtime27.jsx)(
|
|
1964
|
+
EdgeSlideshowNav,
|
|
1965
|
+
{
|
|
1966
|
+
activeSlide,
|
|
1967
|
+
autoscrolling,
|
|
1968
|
+
inView,
|
|
1969
|
+
setActiveSlide
|
|
1970
|
+
}
|
|
1971
|
+
)
|
|
1972
|
+
] })
|
|
1973
|
+
] });
|
|
1974
|
+
}
|
|
1975
|
+
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)(() => {
|
|
1980
|
+
let intervalId;
|
|
1981
|
+
if (inView) {
|
|
1982
|
+
intervalId = window.setInterval(() => {
|
|
1983
|
+
setActiveSlide(getNextSlide(activeSlide));
|
|
1984
|
+
setAutoscrolling(true);
|
|
1985
|
+
}, 1e4);
|
|
1986
|
+
}
|
|
1987
|
+
return () => {
|
|
1988
|
+
if (intervalId !== void 0) {
|
|
1989
|
+
clearInterval(intervalId);
|
|
1990
|
+
}
|
|
1991
|
+
};
|
|
1992
|
+
}, [inView, activeSlide, setActiveSlide]);
|
|
1993
|
+
return /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)("section", { className: "page-card page-padding bg-white", children: [
|
|
1994
|
+
/* @__PURE__ */ (0, import_jsx_runtime27.jsx)("section", { className: "flex pb-8 xl:hidden", children: /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(EdgeSlideshowHeader, {}) }),
|
|
1995
|
+
/* @__PURE__ */ (0, import_jsx_runtime27.jsxs)(
|
|
1996
|
+
"div",
|
|
1997
|
+
{
|
|
1998
|
+
ref,
|
|
1999
|
+
className: "page-card-content grid grid-cols-1 items-center justify-center gap-8 lg:justify-around lg:gap-24 xl:grid-cols-2 ",
|
|
2000
|
+
children: [
|
|
2001
|
+
/* @__PURE__ */ (0, import_jsx_runtime27.jsx)(EdgeSlideshowImage, { activeSlide }),
|
|
2002
|
+
/* @__PURE__ */ (0, import_jsx_runtime27.jsx)(
|
|
2003
|
+
EdgeSlideshowText,
|
|
2004
|
+
{
|
|
2005
|
+
inView,
|
|
2006
|
+
activeSlide,
|
|
2007
|
+
setActiveSlide,
|
|
2008
|
+
autoscrolling
|
|
2009
|
+
}
|
|
2010
|
+
)
|
|
2011
|
+
]
|
|
2012
|
+
}
|
|
2013
|
+
)
|
|
2014
|
+
] });
|
|
2015
|
+
}
|
|
2016
|
+
|
|
2017
|
+
// src/StereoDepthCalibration.tsx
|
|
2018
|
+
var import_react15 = require("@iconify/react");
|
|
2019
|
+
var import_jsx_runtime28 = require("react/jsx-runtime");
|
|
2020
|
+
var cards = [
|
|
2021
|
+
{
|
|
2022
|
+
title: "Extreme Precision",
|
|
2023
|
+
text: "Alignment on 42 key metrics ensures unparalleled accuracy across stereo pairs.",
|
|
2024
|
+
icon: "uil:crosshair"
|
|
2025
|
+
},
|
|
2026
|
+
{
|
|
2027
|
+
title: "Wide Lens Compatibility",
|
|
2028
|
+
text: "Accommodates a variety of lenses, including super wide-angle optics.",
|
|
2029
|
+
icon: "mage:lens-fill"
|
|
2030
|
+
},
|
|
2031
|
+
{
|
|
2032
|
+
title: "Temperature Compensation",
|
|
2033
|
+
text: "Calibrated for stability across temperature fluctuations.",
|
|
2034
|
+
icon: "fluent:temperature-16-regular"
|
|
2035
|
+
},
|
|
2036
|
+
{
|
|
2037
|
+
title: "Housing Calibration",
|
|
2038
|
+
text: "Fine-tuned for alignment between the camera and its physical enclosure.",
|
|
2039
|
+
icon: "f7:gear-alt-fill"
|
|
2040
|
+
}
|
|
2041
|
+
];
|
|
2042
|
+
function StereoDepthCalibrationWrapper() {
|
|
2043
|
+
return /* @__PURE__ */ (0, import_jsx_runtime28.jsxs)("section", { className: "page-card-content relative flex size-full flex-col items-center justify-center gap-8 overflow-hidden rounded-lg bg-black", children: [
|
|
2044
|
+
/* @__PURE__ */ (0, import_jsx_runtime28.jsx)(
|
|
2045
|
+
"img",
|
|
2046
|
+
{
|
|
2047
|
+
alt: "Stereo Depth Calibration Background Overlay",
|
|
2048
|
+
src: "/assets/stereo-depth/stereo-depth-calibration-bg.webp",
|
|
2049
|
+
className: "absolute size-full bg-cover bg-center bg-no-repeat object-cover md:h-5/6"
|
|
2050
|
+
}
|
|
2051
|
+
),
|
|
2052
|
+
/* @__PURE__ */ (0, import_jsx_runtime28.jsx)(StereoDepthCalibrationBody, {})
|
|
2053
|
+
] });
|
|
2054
|
+
}
|
|
2055
|
+
function StereoDepthCalibrationHeader() {
|
|
2056
|
+
return /* @__PURE__ */ (0, import_jsx_runtime28.jsxs)("header", { className: "flex flex-col items-center justify-center gap-4 pt-6 text-center lg:w-1/2", children: [
|
|
2057
|
+
/* @__PURE__ */ (0, import_jsx_runtime28.jsx)(Text, { text: "Rail Calibration", size: "md", color: "muted", className: "uppercase" }),
|
|
2058
|
+
/* @__PURE__ */ (0, import_jsx_runtime28.jsx)(Text, { text: "Starting on the Right Track", size: "h2", color: "white" }),
|
|
2059
|
+
/* @__PURE__ */ (0, import_jsx_runtime28.jsx)(
|
|
2060
|
+
Text,
|
|
2061
|
+
{
|
|
2062
|
+
text: "Our patent pending rail calibration process guarantees unmatched consistency.",
|
|
2063
|
+
size: "lg",
|
|
2064
|
+
color: "white"
|
|
2065
|
+
}
|
|
2066
|
+
)
|
|
2067
|
+
] });
|
|
2068
|
+
}
|
|
2069
|
+
function StereoDepthCalibrationFooter() {
|
|
2070
|
+
return /* @__PURE__ */ (0, import_jsx_runtime28.jsxs)("footer", { className: "mt-10 flex flex-col items-start gap-8", children: [
|
|
2071
|
+
/* @__PURE__ */ (0, import_jsx_runtime28.jsx)(
|
|
2072
|
+
Text,
|
|
2073
|
+
{
|
|
2074
|
+
text: "From lenses to housing, every component is precisely aligned for dependable performance.",
|
|
2075
|
+
size: "h4",
|
|
2076
|
+
color: "white",
|
|
2077
|
+
className: "w-full lg:w-2/5"
|
|
2078
|
+
}
|
|
2079
|
+
),
|
|
2080
|
+
/* @__PURE__ */ (0, import_jsx_runtime28.jsx)(StereoDepthCalibrationFooterCards, {})
|
|
2081
|
+
] });
|
|
2082
|
+
}
|
|
2083
|
+
function StereoDepthCalibrationFooterCard(props) {
|
|
2084
|
+
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" }),
|
|
2086
|
+
/* @__PURE__ */ (0, import_jsx_runtime28.jsx)(Text, { text: props.title, size: "lg", color: "white", weight: "semibold" }),
|
|
2087
|
+
/* @__PURE__ */ (0, import_jsx_runtime28.jsx)(Text, { text: props.text, size: "sm", color: "white" })
|
|
2088
|
+
] });
|
|
2089
|
+
}
|
|
2090
|
+
function StereoDepthCalibrationFooterCards() {
|
|
2091
|
+
return /* @__PURE__ */ (0, import_jsx_runtime28.jsx)("section", { className: "grid size-full grid-cols-1 items-center justify-center gap-8 md:grid-cols-2 xl:grid-cols-4", children: cards.map((card) => /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(StereoDepthCalibrationFooterCard, { ...card }, card.title)) });
|
|
2092
|
+
}
|
|
2093
|
+
function StereoDepthCalibrationBody() {
|
|
2094
|
+
return /* @__PURE__ */ (0, import_jsx_runtime28.jsxs)("section", { className: " z-[1] flex size-full flex-col items-center justify-start overflow-hidden rounded-lg p-4 lg:p-12", children: [
|
|
2095
|
+
/* @__PURE__ */ (0, import_jsx_runtime28.jsx)(StereoDepthCalibrationHeader, {}),
|
|
2096
|
+
/* @__PURE__ */ (0, import_jsx_runtime28.jsx)(StereoDepthCalibrationFooter, {})
|
|
2097
|
+
] });
|
|
2098
|
+
}
|
|
2099
|
+
function StereoDepthCalibration() {
|
|
2100
|
+
return /* @__PURE__ */ (0, import_jsx_runtime28.jsx)("section", { className: "page-card page-padding bg-white", children: /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(StereoDepthCalibrationWrapper, {}) });
|
|
2101
|
+
}
|
|
2102
|
+
|
|
2103
|
+
// src/Support.tsx
|
|
2104
|
+
var import_class_variance_authority23 = require("class-variance-authority");
|
|
2105
|
+
|
|
2106
|
+
// src/links.ts
|
|
2107
|
+
var github = "https://github.com/luxonis/";
|
|
2108
|
+
var twitter = "https://twitter.com/luxonis";
|
|
2109
|
+
var linkedin = "https://www.linkedin.com/company/luxonis/";
|
|
2110
|
+
var youtube = "https://www.youtube.com/c/Luxonis";
|
|
2111
|
+
var discord = "https://www.luxonis.com/discord";
|
|
2112
|
+
var docs = "https://docs.luxonis.com/en/latest/";
|
|
2113
|
+
var forum = "https://discuss.luxonis.com/";
|
|
2114
|
+
var status = "https://status.luxonis.com/";
|
|
2115
|
+
var store = "https://shop.luxonis.com/";
|
|
2116
|
+
var oakRealsenseDocs = "https://docs.luxonis.com/projects/hardware/en/latest/pages/guides/realsense_comparison.html";
|
|
2117
|
+
var distributorForm = "https://docs.google.com/forms/d/e/1FAIpQLSeVo9QREQxPsIxiHCAfyEgnI2kK88W4r6dUkCTbYfH_R5emAQ/viewform?vc=0&c=0&w=1&flr=0";
|
|
2118
|
+
var kickstarter = "https://www.kickstarter.com/projects/opencv/rae-0";
|
|
2119
|
+
var raeStorepage = "https://shop.luxonis.com/collections/early-access/products/rae";
|
|
2120
|
+
var robothub = "https://hub.luxonis.com/join";
|
|
2121
|
+
var depthaiHardwareProject = "https://github.com/luxonis/depthai-hardware/tree/master/DM1095_OAK-D-LITE-DEV_DepthAI_USB3C";
|
|
2122
|
+
var getStoreSearchLink = (search) => {
|
|
2123
|
+
return `https://shop.luxonis.com/search?q=${search}`;
|
|
2124
|
+
};
|
|
2125
|
+
var supportMail = "mailto:support@luxonis.com";
|
|
2126
|
+
var supportMailClean = "support@luxonis.com";
|
|
2127
|
+
var salesMail = "mailto:orders@luxonis.com";
|
|
2128
|
+
var salesMailClean = "orders@luxonis.com";
|
|
2129
|
+
var applyMail = "mailto:careers@luxonis.com";
|
|
2130
|
+
var applyMailClean = "careers@luxonis.com";
|
|
2131
|
+
var showcaseMail = "mailto:support@luxonis.com";
|
|
2132
|
+
var showcaseMailClean = "support@luxonis.com";
|
|
2133
|
+
var blog = "https://discuss.luxonis.com/blog";
|
|
2134
|
+
var privacy = "/privacy";
|
|
2135
|
+
var termsOfService = "/terms-of-service";
|
|
2136
|
+
var aboutUs = "/about-us";
|
|
2137
|
+
var showcase = "/solutions";
|
|
2138
|
+
var careers = "/careers";
|
|
2139
|
+
var distributors = "/distributors";
|
|
2140
|
+
var marketing = "/marketing";
|
|
2141
|
+
var robothubInternal = "/hub";
|
|
2142
|
+
var certificates = "/certificates";
|
|
2143
|
+
var services = "/services";
|
|
2144
|
+
var bloomberg = "https://www.bloomberg.com/news/articles/2021-03-11/oak-d-device-paves-the-way-for-future-spatial-ai";
|
|
2145
|
+
var forbes = "https://www.forbes.com/sites/gusalexiou/2021/03/24/cutting-edge-intel-ai-powered-backpack-could-replace-a-guide-dog-for-blind-people/?sh=70bb63d01b36";
|
|
2146
|
+
var techcrunch = "https://techcrunch.com/2020/07/14/opencv-ai-kit-aims-to-do-for-computer-vision-what-raspberry-pi-did-for-hobbyist-hardware/";
|
|
2147
|
+
var camerasProducts = "https://shop.luxonis.com/collections/oak-cameras-1";
|
|
2148
|
+
var modulesProducts = "https://shop.luxonis.com/collections/oak-modules";
|
|
2149
|
+
var accessoriesProducts = "https://shop.luxonis.com/collections/accessories";
|
|
2150
|
+
var earlyAccessProducts = "https://shop.luxonis.com/collections/early-access";
|
|
2151
|
+
var supportForm = "https://share-eu1.hsforms.com/1qY1TD1LgRU27qYXxzRyHNgf2chh";
|
|
2152
|
+
var servicesMeetLink = "https://meetings-eu1.hubspot.com/bradley1/luxonis-services-";
|
|
2153
|
+
var replayInstructions = "https://docs-beta.luxonis.com/cloud/perception-apps/robothub-library/replay/";
|
|
2154
|
+
var contactLink = "https://meetings-eu1.hubspot.com/cj-mann/cj-demo";
|
|
2155
|
+
|
|
2156
|
+
// src/TalkToSalesButton.tsx
|
|
2157
|
+
var import_jsx_runtime29 = require("react/jsx-runtime");
|
|
2158
|
+
function TalkToSalesButton() {
|
|
2159
|
+
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
|
+
}
|
|
2161
|
+
|
|
2162
|
+
// src/ContactUsForm.tsx
|
|
2163
|
+
var import_zod = require("zod");
|
|
2164
|
+
var import_react17 = __toESM(require("react"));
|
|
2165
|
+
|
|
2166
|
+
// src/useRudderAnalytics.ts
|
|
2167
|
+
var import_react16 = require("react");
|
|
2168
|
+
var useRudderStackAnalytics = () => {
|
|
2169
|
+
const [analytics, setAnalytics] = (0, import_react16.useState)();
|
|
2170
|
+
(0, import_react16.useEffect)(() => {
|
|
2171
|
+
if (!analytics) {
|
|
2172
|
+
const initialize = async () => {
|
|
2173
|
+
const { RudderAnalytics } = await import("@rudderstack/analytics-js");
|
|
2174
|
+
const analyticsInstance = new RudderAnalytics();
|
|
2175
|
+
if (!process.env.NEXT_PUBLIC_RUDDERSTACK_WRITE_KEY || !process.env.NEXT_PUBLIC_RUDDERSTACK_DATAPLANE) {
|
|
2176
|
+
console.warn("RudderStack not configured");
|
|
2177
|
+
return;
|
|
2178
|
+
}
|
|
2179
|
+
analyticsInstance.load(
|
|
2180
|
+
process.env.NEXT_PUBLIC_RUDDERSTACK_WRITE_KEY,
|
|
2181
|
+
process.env.NEXT_PUBLIC_RUDDERSTACK_DATAPLANE,
|
|
2182
|
+
{
|
|
2183
|
+
storage: { type: "memoryStorage" }
|
|
2184
|
+
}
|
|
2185
|
+
// Disables storage of events in local storage or cookies
|
|
2186
|
+
);
|
|
2187
|
+
window.rudderanalytics = analyticsInstance;
|
|
2188
|
+
setAnalytics(analyticsInstance);
|
|
2189
|
+
};
|
|
2190
|
+
initialize().catch((e) => console.log(e));
|
|
2191
|
+
}
|
|
2192
|
+
}, [analytics]);
|
|
2193
|
+
return analytics;
|
|
2194
|
+
};
|
|
2195
|
+
|
|
2196
|
+
// src/ContactUsForm.tsx
|
|
2197
|
+
var import_jsx_runtime30 = require("react/jsx-runtime");
|
|
2198
|
+
var formSchema = import_zod.z.object({
|
|
2199
|
+
name: import_zod.z.string().min(1),
|
|
2200
|
+
company: import_zod.z.string().min(1),
|
|
2201
|
+
email: import_zod.z.string().email(),
|
|
2202
|
+
message: import_zod.z.string().min(1),
|
|
2203
|
+
inquiry: import_zod.z.string().min(1)
|
|
2204
|
+
});
|
|
2205
|
+
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);
|
|
2209
|
+
const analytics = useRudderStackAnalytics();
|
|
2210
|
+
const handleSubmit = (event) => {
|
|
2211
|
+
event.preventDefault();
|
|
2212
|
+
setFormIsLoading(true);
|
|
2213
|
+
const [nameInput, companyInput, emailInput, inquiryInput, messageInput] = [
|
|
2214
|
+
document.getElementById("name"),
|
|
2215
|
+
document.getElementById("company"),
|
|
2216
|
+
document.getElementById("email"),
|
|
2217
|
+
document.getElementById("inquiry"),
|
|
2218
|
+
document.getElementById("message")
|
|
2219
|
+
];
|
|
2220
|
+
const formData = {
|
|
2221
|
+
name: nameInput.value,
|
|
2222
|
+
company: companyInput.value,
|
|
2223
|
+
email: emailInput.value,
|
|
2224
|
+
inquiry: inquiryInput.textContent,
|
|
2225
|
+
message: messageInput.value
|
|
2226
|
+
};
|
|
2227
|
+
setFormHasError(false);
|
|
2228
|
+
const parsedData = formSchema.safeParse(formData);
|
|
2229
|
+
if (parsedData.error || !parsedData.data) {
|
|
2230
|
+
console.warn("Form contains errors!", parsedData.error);
|
|
2231
|
+
setFormHasError(true);
|
|
2232
|
+
setFormIsLoading(false);
|
|
2233
|
+
return;
|
|
2234
|
+
}
|
|
2235
|
+
if (!analytics) {
|
|
2236
|
+
console.warn("Rudder Stack not running");
|
|
2237
|
+
setFormIsLoading(false);
|
|
2238
|
+
return;
|
|
2239
|
+
}
|
|
2240
|
+
analytics.identify(
|
|
2241
|
+
parsedData.data.email,
|
|
2242
|
+
{
|
|
2243
|
+
...parsedData
|
|
2244
|
+
},
|
|
2245
|
+
() => {
|
|
2246
|
+
console.debug("User identified.");
|
|
2247
|
+
}
|
|
2248
|
+
);
|
|
2249
|
+
analytics.track(
|
|
2250
|
+
"Contact Form Submitted",
|
|
2251
|
+
{
|
|
2252
|
+
message: "Message from contact form",
|
|
2253
|
+
reasonForContact: parsedData.data,
|
|
2254
|
+
privacyPolicyAccepted: true,
|
|
2255
|
+
formData
|
|
2256
|
+
},
|
|
2257
|
+
() => {
|
|
2258
|
+
setFormIsLoading(false);
|
|
2259
|
+
console.debug("Form submission event tracked.");
|
|
2260
|
+
}
|
|
2261
|
+
);
|
|
2262
|
+
setFormSubmitted(true);
|
|
2263
|
+
};
|
|
2264
|
+
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)(
|
|
2266
|
+
Text,
|
|
2267
|
+
{
|
|
2268
|
+
size: "h4",
|
|
2269
|
+
text: "Thank you for your message. We will get back to you soon.",
|
|
2270
|
+
color: "white",
|
|
2271
|
+
className: "my-auto text-center"
|
|
2272
|
+
}
|
|
2273
|
+
) });
|
|
2274
|
+
}
|
|
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" })
|
|
2280
|
+
] }),
|
|
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" })
|
|
2284
|
+
] })
|
|
2285
|
+
] }),
|
|
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" })
|
|
2289
|
+
] }),
|
|
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" })
|
|
2300
|
+
] })
|
|
2301
|
+
] })
|
|
2302
|
+
] }),
|
|
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..." })
|
|
2306
|
+
] }),
|
|
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" })
|
|
2310
|
+
] })
|
|
2311
|
+
] });
|
|
2312
|
+
}
|
|
2313
|
+
|
|
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
|
+
// src/ContactUs.tsx
|
|
2351
|
+
var import_jsx_runtime32 = require("react/jsx-runtime");
|
|
2352
|
+
var ContactUsSection = (props) => {
|
|
2353
|
+
const {
|
|
2354
|
+
title = "Let\u2019s Build \n the Future of \n Vision Together",
|
|
2355
|
+
description = "Our dedicated team is available for technical support, business solutions, and more. Let us provide the help you need."
|
|
2356
|
+
} = 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
|
+
] }) });
|
|
2375
|
+
};
|
|
1631
2376
|
// Annotate the CommonJS export names for ESM import in node:
|
|
1632
2377
|
0 && (module.exports = {
|
|
1633
2378
|
Accordion,
|
|
@@ -1645,9 +2390,12 @@ TabsContent.displayName = TabsPrimitive.Content.displayName;
|
|
|
1645
2390
|
ChatButton,
|
|
1646
2391
|
Checkbox,
|
|
1647
2392
|
CodeBlock,
|
|
2393
|
+
ContactUsForm,
|
|
2394
|
+
ContactUsSection,
|
|
1648
2395
|
Copyright,
|
|
1649
2396
|
Description,
|
|
1650
2397
|
DualRangeSlider,
|
|
2398
|
+
EdgeSlideshow,
|
|
1651
2399
|
FrostedCard,
|
|
1652
2400
|
Hero,
|
|
1653
2401
|
HoverCard,
|
|
@@ -1655,6 +2403,7 @@ TabsContent.displayName = TabsPrimitive.Content.displayName;
|
|
|
1655
2403
|
HoverCardTrigger,
|
|
1656
2404
|
Input,
|
|
1657
2405
|
Label,
|
|
2406
|
+
Progress,
|
|
1658
2407
|
SearchBar,
|
|
1659
2408
|
Select,
|
|
1660
2409
|
SelectContent,
|
|
@@ -1666,6 +2415,8 @@ TabsContent.displayName = TabsPrimitive.Content.displayName;
|
|
|
1666
2415
|
SelectSeparator,
|
|
1667
2416
|
SelectTrigger,
|
|
1668
2417
|
SelectValue,
|
|
2418
|
+
StereoDepthCalibration,
|
|
2419
|
+
Support,
|
|
1669
2420
|
Switch,
|
|
1670
2421
|
Table,
|
|
1671
2422
|
TableBody,
|
|
@@ -1679,6 +2430,7 @@ TabsContent.displayName = TabsPrimitive.Content.displayName;
|
|
|
1679
2430
|
TabsContent,
|
|
1680
2431
|
TabsList,
|
|
1681
2432
|
TabsTrigger,
|
|
2433
|
+
TalkToSalesButton,
|
|
1682
2434
|
Text,
|
|
1683
2435
|
Textarea,
|
|
1684
2436
|
Tooltip,
|
|
@@ -1686,7 +2438,54 @@ TabsContent.displayName = TabsPrimitive.Content.displayName;
|
|
|
1686
2438
|
TooltipProvider,
|
|
1687
2439
|
TooltipTrigger,
|
|
1688
2440
|
Video,
|
|
2441
|
+
aboutUs,
|
|
2442
|
+
accessoriesProducts,
|
|
2443
|
+
applyMail,
|
|
2444
|
+
applyMailClean,
|
|
1689
2445
|
badgeVariants,
|
|
2446
|
+
blog,
|
|
2447
|
+
bloomberg,
|
|
1690
2448
|
buttonVariants,
|
|
1691
|
-
|
|
2449
|
+
camerasProducts,
|
|
2450
|
+
careers,
|
|
2451
|
+
certificates,
|
|
2452
|
+
contactLink,
|
|
2453
|
+
depthaiHardwareProject,
|
|
2454
|
+
discord,
|
|
2455
|
+
distributorForm,
|
|
2456
|
+
distributors,
|
|
2457
|
+
docs,
|
|
2458
|
+
earlyAccessProducts,
|
|
2459
|
+
forbes,
|
|
2460
|
+
forum,
|
|
2461
|
+
getStoreSearchLink,
|
|
2462
|
+
github,
|
|
2463
|
+
kickstarter,
|
|
2464
|
+
linkedin,
|
|
2465
|
+
marketing,
|
|
2466
|
+
modulesProducts,
|
|
2467
|
+
oakRealsenseDocs,
|
|
2468
|
+
parseNewLines,
|
|
2469
|
+
privacy,
|
|
2470
|
+
raeStorepage,
|
|
2471
|
+
replayInstructions,
|
|
2472
|
+
robothub,
|
|
2473
|
+
robothubInternal,
|
|
2474
|
+
salesMail,
|
|
2475
|
+
salesMailClean,
|
|
2476
|
+
services,
|
|
2477
|
+
servicesMeetLink,
|
|
2478
|
+
showcase,
|
|
2479
|
+
showcaseMail,
|
|
2480
|
+
showcaseMailClean,
|
|
2481
|
+
status,
|
|
2482
|
+
store,
|
|
2483
|
+
supportForm,
|
|
2484
|
+
supportMail,
|
|
2485
|
+
supportMailClean,
|
|
2486
|
+
techcrunch,
|
|
2487
|
+
termsOfService,
|
|
2488
|
+
twitter,
|
|
2489
|
+
useRudderStackAnalytics,
|
|
2490
|
+
youtube
|
|
1692
2491
|
});
|