@olwiba/ui 0.1.8 → 0.1.9
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.d.ts +5 -1
- package/dist/index.js +194 -121
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
- package/src/marketing/ComparisonSection.tsx +8 -19
- package/src/marketing/ContactSection.tsx +181 -102
- package/src/marketing/FeatureMarqueeSection.tsx +6 -5
- package/src/marketing/Footer.tsx +18 -0
package/dist/index.d.ts
CHANGED
|
@@ -715,9 +715,13 @@ interface FooterProps {
|
|
|
715
715
|
icon: ReactNode;
|
|
716
716
|
}>;
|
|
717
717
|
legal?: string;
|
|
718
|
+
status?: {
|
|
719
|
+
label: string;
|
|
720
|
+
operational?: boolean;
|
|
721
|
+
};
|
|
718
722
|
renderLink?: AppShellRenderLink;
|
|
719
723
|
}
|
|
720
|
-
declare function Footer({ brand, navLinks, socialLinks, legal, renderLink, }: FooterProps): react_jsx_runtime.JSX.Element;
|
|
724
|
+
declare function Footer({ brand, navLinks, socialLinks, legal, status, renderLink, }: FooterProps): react_jsx_runtime.JSX.Element;
|
|
721
725
|
|
|
722
726
|
interface LogoStripProps {
|
|
723
727
|
logos: Array<{
|
package/dist/index.js
CHANGED
|
@@ -2,10 +2,10 @@ import { cn } from './chunk-AMWLSHD6.js';
|
|
|
2
2
|
export { MdxContent, cn } from './chunk-AMWLSHD6.js';
|
|
3
3
|
import * as React29 from 'react';
|
|
4
4
|
import { useRef, useEffect, useState } from 'react';
|
|
5
|
-
import { Button as Button$1, Card as Card$1, Input as Input$1, Textarea as Textarea$1, Checkbox as Checkbox$1, Switch as Switch$1, useIsMobile, UIVariantProvider, Badge as Badge$1, cn as cn$1, Table, TableHeader, TableRow, TableHead, TableBody, TableCell, Avatar, AvatarImage, AvatarFallback, useUIVariant, Separator, Accordion, AccordionItem, AccordionTrigger, AccordionContent, Label, Sheet, SheetTrigger, SheetContent, CommandDialog, CommandInput, CommandList, CommandEmpty, CommandSeparator, CommandGroup, CommandItem, TooltipProvider, Tooltip, TooltipTrigger, TooltipContent, ContextMenu as ContextMenu$1, ContextMenuTrigger, ContextMenuContent, AlertDialog, AlertDialogContent, AlertDialogHeader, AlertDialogTitle, AlertDialogDescription, AlertDialogFooter, AlertDialogCancel, AlertDialogAction, Spinner, Popover, PopoverTrigger, PopoverContent, SidebarProvider, SidebarInset, CardHeader, CardTitle, CardDescription, CardContent, ContextMenuSeparator, ContextMenuLabel, ContextMenuSub, ContextMenuSubTrigger, ContextMenuSubContent, ContextMenuItem, ContextMenuShortcut, Sidebar, SidebarHeader, SidebarMenu, SidebarMenuItem, SidebarMenuButton, SidebarContent, SidebarGroup, SidebarGroupContent, SidebarFooter, SidebarTrigger, useSidebar, DropdownMenu, DropdownMenuTrigger, DropdownMenuContent, DropdownMenuLabel, DropdownMenuSeparator, DropdownMenuGroup, DropdownMenuItem } from '@olwiba/cn';
|
|
5
|
+
import { Button as Button$1, Card as Card$1, Input as Input$1, Textarea as Textarea$1, Checkbox as Checkbox$1, Switch as Switch$1, useIsMobile, UIVariantProvider, Badge as Badge$1, cn as cn$1, Table, TableHeader, TableRow, TableHead, TableBody, TableCell, Avatar, AvatarImage, AvatarFallback, useUIVariant, Separator, Accordion, AccordionItem, AccordionTrigger, AccordionContent, Label, Sheet, SheetTrigger, SheetContent, StatusIndicator, CommandDialog, CommandInput, CommandList, CommandEmpty, CommandSeparator, CommandGroup, CommandItem, TooltipProvider, Tooltip, TooltipTrigger, TooltipContent, ContextMenu as ContextMenu$1, ContextMenuTrigger, ContextMenuContent, AlertDialog, AlertDialogContent, AlertDialogHeader, AlertDialogTitle, AlertDialogDescription, AlertDialogFooter, AlertDialogCancel, AlertDialogAction, Spinner, Popover, PopoverTrigger, PopoverContent, SidebarProvider, SidebarInset, CardHeader, CardTitle, CardDescription, CardContent, ContextMenuSeparator, ContextMenuLabel, ContextMenuSub, ContextMenuSubTrigger, ContextMenuSubContent, ContextMenuItem, ContextMenuShortcut, Sidebar, SidebarHeader, SidebarMenu, SidebarMenuItem, SidebarMenuButton, SidebarContent, SidebarGroup, SidebarGroupContent, SidebarFooter, SidebarTrigger, useSidebar, DropdownMenu, DropdownMenuTrigger, DropdownMenuContent, DropdownMenuLabel, DropdownMenuSeparator, DropdownMenuGroup, DropdownMenuItem } from '@olwiba/cn';
|
|
6
6
|
export { CardContent, CardDescription, CardFooter, CardHeader, CardTitle } from '@olwiba/cn';
|
|
7
7
|
import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
|
|
8
|
-
import { Compass, ArrowLeft, X, ArrowRight, ChevronLeft, ChevronRight, Sparkles, Rocket, Check, Minus, Quote, Star, Twitter, Github, Linkedin, Mail,
|
|
8
|
+
import { Compass, ArrowLeft, X, ArrowRight, ChevronLeft, ChevronRight, Sparkles, Rocket, Check, Minus, Quote, Star, Twitter, Github, Linkedin, Mail, MessageSquare, ChevronDown, Send, Menu, Search, TrendingUp, TrendingDown, Sun, Moon, Palette, AlertTriangle, Loader2, Layers, LayoutGrid, ShieldCheck, Building2, MoreVerticalIcon, CreditCardIcon, BellIcon, LogOutIcon } from 'lucide-react';
|
|
9
9
|
|
|
10
10
|
var OlwibaUIContext = React29.createContext({
|
|
11
11
|
isMobile: false,
|
|
@@ -1289,8 +1289,7 @@ function FeatureMarqueeSection({
|
|
|
1289
1289
|
/* @__PURE__ */ jsx("div", { className: "space-y-3", children: rows.map((row, i) => {
|
|
1290
1290
|
const direction = row.direction ?? (i % 2 === 0 ? "left" : "right");
|
|
1291
1291
|
const reversed = direction === "right";
|
|
1292
|
-
const
|
|
1293
|
-
const set = Array.from({ length: 4 }, () => source).flat();
|
|
1292
|
+
const set = Array.from({ length: 4 }, () => row.items).flat();
|
|
1294
1293
|
const items = [...set, ...set];
|
|
1295
1294
|
return /* @__PURE__ */ jsx(
|
|
1296
1295
|
"div",
|
|
@@ -1308,7 +1307,7 @@ function FeatureMarqueeSection({
|
|
|
1308
1307
|
pauseOnHover && "group-hover:[animation-play-state:paused]"
|
|
1309
1308
|
),
|
|
1310
1309
|
style: {
|
|
1311
|
-
animation:
|
|
1310
|
+
animation: `${reversed ? "feature-marquee-right" : "feature-marquee-left"} ${duration} linear infinite`
|
|
1312
1311
|
},
|
|
1313
1312
|
children: items.map((item, j) => {
|
|
1314
1313
|
const Icon = item.icon;
|
|
@@ -1336,6 +1335,10 @@ function FeatureMarqueeSection({
|
|
|
1336
1335
|
from { transform: translateX(0); }
|
|
1337
1336
|
to { transform: translateX(-50%); }
|
|
1338
1337
|
}
|
|
1338
|
+
@keyframes feature-marquee-right {
|
|
1339
|
+
from { transform: translateX(-50%); }
|
|
1340
|
+
to { transform: translateX(0); }
|
|
1341
|
+
}
|
|
1339
1342
|
` })
|
|
1340
1343
|
] });
|
|
1341
1344
|
}
|
|
@@ -1996,9 +1999,13 @@ function NewsletterSection({
|
|
|
1996
1999
|
] })
|
|
1997
2000
|
] }) });
|
|
1998
2001
|
}
|
|
1999
|
-
var
|
|
2000
|
-
{
|
|
2001
|
-
{
|
|
2002
|
+
var PHONE_PREFIXES = [
|
|
2003
|
+
{ label: "US +1", value: "+1-US" },
|
|
2004
|
+
{ label: "NZ +64", value: "+64-NZ" },
|
|
2005
|
+
{ label: "AU +61", value: "+61-AU" },
|
|
2006
|
+
{ label: "UK +44", value: "+44-UK" },
|
|
2007
|
+
{ label: "CA +1", value: "+1-CA" },
|
|
2008
|
+
{ label: "EU", value: "+0-EU" }
|
|
2002
2009
|
];
|
|
2003
2010
|
var defaults2 = {
|
|
2004
2011
|
badge: "Contact",
|
|
@@ -2012,7 +2019,7 @@ function ContactSection({
|
|
|
2012
2019
|
badge = defaults2.badge,
|
|
2013
2020
|
title = defaults2.title,
|
|
2014
2021
|
description = defaults2.description,
|
|
2015
|
-
contactInfo
|
|
2022
|
+
contactInfo,
|
|
2016
2023
|
privacyHref,
|
|
2017
2024
|
successTitle = defaults2.successTitle,
|
|
2018
2025
|
successDescription = defaults2.successDescription,
|
|
@@ -2025,104 +2032,178 @@ function ContactSection({
|
|
|
2025
2032
|
await onSubmit?.(e);
|
|
2026
2033
|
setSubmitted(true);
|
|
2027
2034
|
}
|
|
2028
|
-
return /* @__PURE__ */ jsx("section", { className: "overflow-hidden rounded-2xl border bg-card", children: /* @__PURE__ */ jsxs("div", { className: "
|
|
2029
|
-
/* @__PURE__ */ jsxs("div", { className: "
|
|
2030
|
-
/* @__PURE__ */ jsx("div", { className: "
|
|
2031
|
-
/* @__PURE__ */ jsx("
|
|
2032
|
-
/* @__PURE__ */
|
|
2035
|
+
return /* @__PURE__ */ jsx("section", { className: "overflow-hidden rounded-2xl border bg-card", children: /* @__PURE__ */ jsxs("div", { className: "px-6 py-14 sm:px-10 sm:py-20", children: [
|
|
2036
|
+
/* @__PURE__ */ jsxs("div", { className: "mx-auto max-w-2xl text-center", children: [
|
|
2037
|
+
badge && /* @__PURE__ */ jsx("div", { className: "mb-4 flex justify-center", children: /* @__PURE__ */ jsx(Badge$1, { variant: "secondary", children: badge }) }),
|
|
2038
|
+
/* @__PURE__ */ jsx("h2", { className: "text-balance text-4xl font-semibold tracking-tight sm:text-5xl", children: title }),
|
|
2039
|
+
/* @__PURE__ */ jsx("p", { className: "mt-4 text-lg text-muted-foreground", children: description }),
|
|
2040
|
+
contactInfo && contactInfo.length > 0 && /* @__PURE__ */ jsx("div", { className: "mt-8 flex flex-wrap justify-center gap-6", children: contactInfo.map(({ icon: Icon = Mail, label, value }) => /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2 text-sm text-muted-foreground", children: [
|
|
2041
|
+
/* @__PURE__ */ jsx(Icon, { className: "size-4 shrink-0" }),
|
|
2042
|
+
/* @__PURE__ */ jsx("span", { children: value })
|
|
2043
|
+
] }, label)) })
|
|
2044
|
+
] }),
|
|
2045
|
+
submitted ? /* @__PURE__ */ jsxs("div", { className: "mx-auto mt-16 max-w-xl text-center", children: [
|
|
2046
|
+
/* @__PURE__ */ jsx("div", { className: "mx-auto flex h-14 w-14 items-center justify-center rounded-2xl bg-primary/10 text-primary", children: /* @__PURE__ */ jsx(MessageSquare, { className: "size-6" }) }),
|
|
2047
|
+
/* @__PURE__ */ jsx("h3", { className: "mt-5 text-lg font-semibold", children: successTitle }),
|
|
2048
|
+
/* @__PURE__ */ jsx("p", { className: "mt-2 text-sm text-muted-foreground", children: successDescription }),
|
|
2049
|
+
/* @__PURE__ */ jsx(Button$1, { variant: "outline", size: "sm", className: "mt-6", onClick: () => setSubmitted(false), children: sendAnotherLabel })
|
|
2050
|
+
] }) : /* @__PURE__ */ jsxs("form", { onSubmit: handleSubmit, className: "mx-auto mt-16 max-w-xl sm:mt-20", children: [
|
|
2051
|
+
/* @__PURE__ */ jsx(
|
|
2052
|
+
"input",
|
|
2053
|
+
{
|
|
2054
|
+
type: "text",
|
|
2055
|
+
name: "_hp",
|
|
2056
|
+
tabIndex: -1,
|
|
2057
|
+
autoComplete: "off",
|
|
2058
|
+
"aria-hidden": "true",
|
|
2059
|
+
className: "hidden"
|
|
2060
|
+
}
|
|
2061
|
+
),
|
|
2062
|
+
/* @__PURE__ */ jsxs("div", { className: "grid grid-cols-1 gap-x-8 gap-y-6 sm:grid-cols-2", children: [
|
|
2033
2063
|
/* @__PURE__ */ jsxs("div", { children: [
|
|
2034
|
-
/* @__PURE__ */ jsx(
|
|
2035
|
-
|
|
2064
|
+
/* @__PURE__ */ jsx(Label, { htmlFor: "contact-first", className: "block text-sm/6 font-semibold", children: "First name" }),
|
|
2065
|
+
/* @__PURE__ */ jsx("div", { className: "mt-2.5", children: /* @__PURE__ */ jsx(
|
|
2066
|
+
Input$1,
|
|
2036
2067
|
{
|
|
2037
|
-
|
|
2038
|
-
|
|
2039
|
-
|
|
2068
|
+
id: "contact-first",
|
|
2069
|
+
name: "firstName",
|
|
2070
|
+
autoComplete: "given-name",
|
|
2071
|
+
placeholder: "First",
|
|
2072
|
+
required: true
|
|
2040
2073
|
}
|
|
2041
|
-
)
|
|
2042
|
-
/* @__PURE__ */ jsx("h2", { className: "text-3xl font-semibold leading-tight", children: title }),
|
|
2043
|
-
/* @__PURE__ */ jsx("p", { className: "mt-3 text-sm leading-relaxed text-primary-foreground/70", children: description })
|
|
2074
|
+
) })
|
|
2044
2075
|
] }),
|
|
2045
|
-
/* @__PURE__ */
|
|
2046
|
-
|
|
2047
|
-
/* @__PURE__ */ jsx("div", { className: "mt-
|
|
2048
|
-
|
|
2049
|
-
|
|
2050
|
-
|
|
2051
|
-
|
|
2052
|
-
|
|
2053
|
-
|
|
2054
|
-
|
|
2055
|
-
|
|
2056
|
-
|
|
2057
|
-
/* @__PURE__ */ jsx("div", { className: "flex h-14 w-14 items-center justify-center rounded-2xl bg-primary/10 text-primary", children: /* @__PURE__ */ jsx(MessageSquare, { className: "size-6" }) }),
|
|
2058
|
-
/* @__PURE__ */ jsxs("div", { children: [
|
|
2059
|
-
/* @__PURE__ */ jsx("h3", { className: "text-lg font-semibold", children: successTitle }),
|
|
2060
|
-
/* @__PURE__ */ jsx("p", { className: "mt-1.5 text-sm text-muted-foreground", children: successDescription })
|
|
2061
|
-
] }),
|
|
2062
|
-
/* @__PURE__ */ jsx(Button$1, { variant: "outline", size: "sm", onClick: () => setSubmitted(false), children: sendAnotherLabel })
|
|
2063
|
-
] }) : /* @__PURE__ */ jsxs("form", { onSubmit: handleSubmit, className: "space-y-5", children: [
|
|
2064
|
-
/* @__PURE__ */ jsx("input", { type: "text", name: "_hp", tabIndex: -1, autoComplete: "off", "aria-hidden": "true", className: "hidden" }),
|
|
2065
|
-
/* @__PURE__ */ jsxs("div", { className: "grid gap-4 sm:grid-cols-2", children: [
|
|
2066
|
-
/* @__PURE__ */ jsxs("div", { className: "space-y-1.5", children: [
|
|
2067
|
-
/* @__PURE__ */ jsx(Label, { htmlFor: "contact-first", children: "First name" }),
|
|
2068
|
-
/* @__PURE__ */ jsx(Input$1, { id: "contact-first", name: "firstName", placeholder: "Olivia", required: true })
|
|
2076
|
+
/* @__PURE__ */ jsxs("div", { children: [
|
|
2077
|
+
/* @__PURE__ */ jsx(Label, { htmlFor: "contact-last", className: "block text-sm/6 font-semibold", children: "Last name" }),
|
|
2078
|
+
/* @__PURE__ */ jsx("div", { className: "mt-2.5", children: /* @__PURE__ */ jsx(
|
|
2079
|
+
Input$1,
|
|
2080
|
+
{
|
|
2081
|
+
id: "contact-last",
|
|
2082
|
+
name: "lastName",
|
|
2083
|
+
autoComplete: "family-name",
|
|
2084
|
+
placeholder: "Last",
|
|
2085
|
+
required: true
|
|
2086
|
+
}
|
|
2087
|
+
) })
|
|
2069
2088
|
] }),
|
|
2070
|
-
/* @__PURE__ */ jsxs("div", { className: "
|
|
2071
|
-
/* @__PURE__ */
|
|
2072
|
-
/* @__PURE__ */ jsx(Input$1, { id: "contact-last", name: "lastName", placeholder: "Reed", required: true })
|
|
2073
|
-
] })
|
|
2074
|
-
] }),
|
|
2075
|
-
/* @__PURE__ */ jsxs("div", { className: "grid gap-4 sm:grid-cols-2", children: [
|
|
2076
|
-
/* @__PURE__ */ jsxs("div", { className: "space-y-1.5", children: [
|
|
2077
|
-
/* @__PURE__ */ jsxs(Label, { htmlFor: "contact-company", className: "flex gap-1", children: [
|
|
2089
|
+
/* @__PURE__ */ jsxs("div", { className: "sm:col-span-2", children: [
|
|
2090
|
+
/* @__PURE__ */ jsxs(Label, { htmlFor: "contact-company", className: "block text-sm/6 font-semibold", children: [
|
|
2078
2091
|
"Company",
|
|
2079
|
-
|
|
2092
|
+
" ",
|
|
2093
|
+
/* @__PURE__ */ jsx("span", { className: "font-normal text-muted-foreground", children: "(optional)" })
|
|
2080
2094
|
] }),
|
|
2081
|
-
/* @__PURE__ */ jsx(
|
|
2095
|
+
/* @__PURE__ */ jsx("div", { className: "mt-2.5", children: /* @__PURE__ */ jsx(
|
|
2096
|
+
Input$1,
|
|
2097
|
+
{
|
|
2098
|
+
id: "contact-company",
|
|
2099
|
+
name: "company",
|
|
2100
|
+
autoComplete: "organization",
|
|
2101
|
+
placeholder: "Acme Inc."
|
|
2102
|
+
}
|
|
2103
|
+
) })
|
|
2082
2104
|
] }),
|
|
2083
|
-
/* @__PURE__ */ jsxs("div", { className: "
|
|
2084
|
-
/* @__PURE__ */
|
|
2085
|
-
|
|
2086
|
-
|
|
2105
|
+
/* @__PURE__ */ jsxs("div", { className: "sm:col-span-2", children: [
|
|
2106
|
+
/* @__PURE__ */ jsx(Label, { htmlFor: "contact-email", className: "block text-sm/6 font-semibold", children: "Email" }),
|
|
2107
|
+
/* @__PURE__ */ jsx("div", { className: "mt-2.5", children: /* @__PURE__ */ jsx(
|
|
2108
|
+
Input$1,
|
|
2109
|
+
{
|
|
2110
|
+
id: "contact-email",
|
|
2111
|
+
name: "email",
|
|
2112
|
+
type: "email",
|
|
2113
|
+
autoComplete: "email",
|
|
2114
|
+
placeholder: "you@company.com",
|
|
2115
|
+
required: true
|
|
2116
|
+
}
|
|
2117
|
+
) })
|
|
2118
|
+
] }),
|
|
2119
|
+
/* @__PURE__ */ jsxs("div", { className: "sm:col-span-2", children: [
|
|
2120
|
+
/* @__PURE__ */ jsxs(Label, { htmlFor: "contact-phone", className: "block text-sm/6 font-semibold", children: [
|
|
2121
|
+
"Phone number",
|
|
2122
|
+
" ",
|
|
2123
|
+
/* @__PURE__ */ jsx("span", { className: "font-normal text-muted-foreground", children: "(optional)" })
|
|
2087
2124
|
] }),
|
|
2088
|
-
/* @__PURE__ */
|
|
2089
|
-
|
|
2090
|
-
|
|
2091
|
-
|
|
2092
|
-
|
|
2093
|
-
|
|
2094
|
-
|
|
2095
|
-
|
|
2096
|
-
|
|
2097
|
-
|
|
2098
|
-
|
|
2099
|
-
|
|
2100
|
-
|
|
2101
|
-
|
|
2102
|
-
|
|
2103
|
-
|
|
2104
|
-
|
|
2105
|
-
|
|
2106
|
-
|
|
2107
|
-
|
|
2108
|
-
|
|
2109
|
-
|
|
2110
|
-
|
|
2111
|
-
|
|
2112
|
-
|
|
2113
|
-
|
|
2114
|
-
/* @__PURE__ */ jsxs(
|
|
2115
|
-
|
|
2116
|
-
" ",
|
|
2117
|
-
|
|
2118
|
-
|
|
2125
|
+
/* @__PURE__ */ jsxs("div", { className: "mt-2.5 flex overflow-hidden rounded-md border border-input bg-background focus-within:ring-2 focus-within:ring-ring focus-within:ring-offset-2", children: [
|
|
2126
|
+
/* @__PURE__ */ jsxs("div", { className: "relative flex shrink-0 items-center border-r border-input", children: [
|
|
2127
|
+
/* @__PURE__ */ jsx(
|
|
2128
|
+
"select",
|
|
2129
|
+
{
|
|
2130
|
+
name: "countryCode",
|
|
2131
|
+
"aria-label": "Country code",
|
|
2132
|
+
defaultValue: "+1-US",
|
|
2133
|
+
className: "h-full appearance-none bg-transparent py-2 pl-3 pr-7 text-sm text-foreground focus:outline-none",
|
|
2134
|
+
children: PHONE_PREFIXES.map(({ label, value }) => /* @__PURE__ */ jsx("option", { value, children: label }, value))
|
|
2135
|
+
}
|
|
2136
|
+
),
|
|
2137
|
+
/* @__PURE__ */ jsx(ChevronDown, { className: "pointer-events-none absolute right-1.5 size-3.5 shrink-0 text-muted-foreground" })
|
|
2138
|
+
] }),
|
|
2139
|
+
/* @__PURE__ */ jsx(
|
|
2140
|
+
"input",
|
|
2141
|
+
{
|
|
2142
|
+
id: "contact-phone",
|
|
2143
|
+
name: "phone",
|
|
2144
|
+
type: "tel",
|
|
2145
|
+
placeholder: "123-456-7890",
|
|
2146
|
+
className: "min-w-0 grow bg-transparent px-3 py-2 text-sm text-foreground placeholder:text-muted-foreground focus:outline-none"
|
|
2147
|
+
}
|
|
2148
|
+
)
|
|
2149
|
+
] })
|
|
2150
|
+
] }),
|
|
2151
|
+
/* @__PURE__ */ jsxs("div", { className: "sm:col-span-2", children: [
|
|
2152
|
+
/* @__PURE__ */ jsx(Label, { htmlFor: "contact-message", className: "block text-sm/6 font-semibold", children: "Message" }),
|
|
2153
|
+
/* @__PURE__ */ jsx("div", { className: "mt-2.5", children: /* @__PURE__ */ jsx(
|
|
2154
|
+
Textarea$1,
|
|
2155
|
+
{
|
|
2156
|
+
id: "contact-message",
|
|
2157
|
+
name: "message",
|
|
2158
|
+
rows: 4,
|
|
2159
|
+
placeholder: "Tell us what you're working on...",
|
|
2160
|
+
className: "resize-none",
|
|
2161
|
+
required: true
|
|
2162
|
+
}
|
|
2163
|
+
) })
|
|
2164
|
+
] }),
|
|
2165
|
+
privacyHref && /* @__PURE__ */ jsxs("div", { className: "flex gap-x-4 sm:col-span-2", children: [
|
|
2166
|
+
/* @__PURE__ */ jsx("div", { className: "flex h-6 items-center", children: /* @__PURE__ */ jsxs("div", { className: "group relative inline-flex h-5 w-8 shrink-0 cursor-pointer rounded-full border border-input bg-muted p-px transition-colors duration-200 ease-in-out focus-within:ring-2 focus-within:ring-ring focus-within:ring-offset-2 has-[:checked]:border-primary has-[:checked]:bg-primary", children: [
|
|
2167
|
+
/* @__PURE__ */ jsx("span", { className: "size-4 rounded-full bg-background shadow-sm transition-transform duration-200 ease-in-out group-has-[:checked]:translate-x-3" }),
|
|
2168
|
+
/* @__PURE__ */ jsx(
|
|
2169
|
+
"input",
|
|
2170
|
+
{
|
|
2171
|
+
id: "contact-privacy",
|
|
2172
|
+
name: "privacy",
|
|
2173
|
+
type: "checkbox",
|
|
2174
|
+
required: true,
|
|
2175
|
+
"aria-label": "Agree to privacy policy",
|
|
2176
|
+
className: "absolute inset-0 size-full cursor-pointer appearance-none focus:outline-none"
|
|
2177
|
+
}
|
|
2178
|
+
)
|
|
2179
|
+
] }) }),
|
|
2180
|
+
/* @__PURE__ */ jsxs(
|
|
2181
|
+
Label,
|
|
2182
|
+
{
|
|
2183
|
+
htmlFor: "contact-privacy",
|
|
2184
|
+
className: "cursor-pointer text-sm font-normal leading-snug text-muted-foreground",
|
|
2185
|
+
children: [
|
|
2186
|
+
"By selecting this, you agree to our",
|
|
2187
|
+
" ",
|
|
2188
|
+
/* @__PURE__ */ jsx(
|
|
2189
|
+
"a",
|
|
2190
|
+
{
|
|
2191
|
+
href: privacyHref,
|
|
2192
|
+
className: "font-medium text-foreground underline-offset-2 hover:underline",
|
|
2193
|
+
children: "privacy policy"
|
|
2194
|
+
}
|
|
2195
|
+
),
|
|
2196
|
+
"."
|
|
2197
|
+
]
|
|
2198
|
+
}
|
|
2199
|
+
)
|
|
2119
2200
|
] })
|
|
2120
2201
|
] }),
|
|
2121
|
-
/* @__PURE__ */ jsxs(Button$1, { type: "submit", className: "w-full", children: [
|
|
2122
|
-
"
|
|
2202
|
+
/* @__PURE__ */ jsx("div", { className: "mt-10", children: /* @__PURE__ */ jsxs(Button$1, { type: "submit", className: "w-full", children: [
|
|
2203
|
+
"Let's talk",
|
|
2123
2204
|
/* @__PURE__ */ jsx(Send, { className: "ml-2 size-4" })
|
|
2124
|
-
] })
|
|
2125
|
-
] })
|
|
2205
|
+
] }) })
|
|
2206
|
+
] })
|
|
2126
2207
|
] }) });
|
|
2127
2208
|
}
|
|
2128
2209
|
function ComparisonSection({
|
|
@@ -2144,8 +2225,8 @@ function ComparisonSection({
|
|
|
2144
2225
|
"div",
|
|
2145
2226
|
{
|
|
2146
2227
|
className: cn$1(
|
|
2147
|
-
"flex flex-col rounded-2xl border p-6",
|
|
2148
|
-
col.highlighted ? "border-
|
|
2228
|
+
"flex h-full flex-col rounded-2xl border p-6",
|
|
2229
|
+
col.highlighted ? "border-primary bg-primary/10 ring-1 ring-primary/20" : "border-border bg-muted/40"
|
|
2149
2230
|
),
|
|
2150
2231
|
children: [
|
|
2151
2232
|
/* @__PURE__ */ jsxs("div", { className: "mb-6", children: [
|
|
@@ -2154,40 +2235,22 @@ function ComparisonSection({
|
|
|
2154
2235
|
{
|
|
2155
2236
|
className: cn$1(
|
|
2156
2237
|
"text-xs font-semibold uppercase tracking-widest",
|
|
2157
|
-
col.highlighted ? "text-
|
|
2238
|
+
col.highlighted ? "text-primary/80" : "text-muted-foreground"
|
|
2158
2239
|
),
|
|
2159
2240
|
children: col.label
|
|
2160
2241
|
}
|
|
2161
2242
|
),
|
|
2162
|
-
/* @__PURE__ */ jsx(
|
|
2163
|
-
|
|
2164
|
-
{
|
|
2165
|
-
className: cn$1(
|
|
2166
|
-
"mt-2 text-2xl font-bold tracking-tight",
|
|
2167
|
-
col.highlighted ? "text-background" : "text-foreground"
|
|
2168
|
-
),
|
|
2169
|
-
children: col.cost
|
|
2170
|
-
}
|
|
2171
|
-
),
|
|
2172
|
-
col.costDetail && /* @__PURE__ */ jsx(
|
|
2173
|
-
"p",
|
|
2174
|
-
{
|
|
2175
|
-
className: cn$1(
|
|
2176
|
-
"mt-1 text-sm",
|
|
2177
|
-
col.highlighted ? "text-background/60" : "text-muted-foreground"
|
|
2178
|
-
),
|
|
2179
|
-
children: col.costDetail
|
|
2180
|
-
}
|
|
2181
|
-
)
|
|
2243
|
+
/* @__PURE__ */ jsx("p", { className: "mt-2 text-2xl font-bold tracking-tight text-foreground", children: col.cost }),
|
|
2244
|
+
col.costDetail && /* @__PURE__ */ jsx("p", { className: "mt-1 text-sm text-muted-foreground", children: col.costDetail })
|
|
2182
2245
|
] }),
|
|
2183
2246
|
/* @__PURE__ */ jsx("ul", { className: "flex flex-col gap-3", children: col.items.map((item) => /* @__PURE__ */ jsxs("li", { className: "flex items-start gap-2.5", children: [
|
|
2184
|
-
col.highlighted ? /* @__PURE__ */ jsx(
|
|
2247
|
+
col.highlighted ? /* @__PURE__ */ jsx("span", { className: "mt-0.5 shrink-0 text-sm leading-none", children: "\u26A1" }) : /* @__PURE__ */ jsx("span", { className: "mt-0.5 shrink-0 text-sm leading-none", children: "\u274C" }),
|
|
2185
2248
|
/* @__PURE__ */ jsx(
|
|
2186
2249
|
"span",
|
|
2187
2250
|
{
|
|
2188
2251
|
className: cn$1(
|
|
2189
2252
|
"text-sm leading-snug",
|
|
2190
|
-
col.highlighted ? "text-
|
|
2253
|
+
col.highlighted ? "text-foreground" : "text-muted-foreground"
|
|
2191
2254
|
),
|
|
2192
2255
|
children: item
|
|
2193
2256
|
}
|
|
@@ -2330,6 +2393,7 @@ function Footer({
|
|
|
2330
2393
|
navLinks,
|
|
2331
2394
|
socialLinks,
|
|
2332
2395
|
legal,
|
|
2396
|
+
status,
|
|
2333
2397
|
renderLink = defaultRenderLink9
|
|
2334
2398
|
}) {
|
|
2335
2399
|
const brandHref = brand.href ?? "/";
|
|
@@ -2358,7 +2422,16 @@ function Footer({
|
|
|
2358
2422
|
},
|
|
2359
2423
|
label
|
|
2360
2424
|
)) }),
|
|
2361
|
-
/* @__PURE__ */ jsx("p", { className: "mt-10 text-center text-sm/6 text-muted-foreground/70", children: copyrightText })
|
|
2425
|
+
/* @__PURE__ */ jsx("p", { className: "mt-10 text-center text-sm/6 text-muted-foreground/70", children: copyrightText }),
|
|
2426
|
+
status && /* @__PURE__ */ jsx("div", { className: "mt-4 flex justify-center", children: /* @__PURE__ */ jsx("div", { className: "inline-flex items-center rounded-full border bg-muted/40 px-3 py-1 text-xs text-muted-foreground", children: /* @__PURE__ */ jsx(
|
|
2427
|
+
StatusIndicator,
|
|
2428
|
+
{
|
|
2429
|
+
pulse: status.operational !== false,
|
|
2430
|
+
dotClassName: status.operational !== false ? "text-emerald-500" : "text-destructive",
|
|
2431
|
+
size: "sm",
|
|
2432
|
+
children: status.label
|
|
2433
|
+
}
|
|
2434
|
+
) }) })
|
|
2362
2435
|
] }) });
|
|
2363
2436
|
}
|
|
2364
2437
|
var speedDuration2 = {
|