@goldlabelapps/theme 3.2.8 → 3.6.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.
Files changed (90) hide show
  1. package/README.md +2 -2
  2. package/dist/components/RenderMarkdown.js +7 -2
  3. package/dist/components/download/DownloadBanner.js +1 -8
  4. package/dist/components/footer/Footer.js +6 -3
  5. package/dist/components/footer/FooterWrapper.d.ts +7 -0
  6. package/dist/components/footer/FooterWrapper.js +15 -0
  7. package/dist/components/footer/NXContactColumn.d.ts +13 -0
  8. package/dist/components/footer/NXContactColumn.js +32 -0
  9. package/dist/components/footer/NXLiveApps.d.ts +22 -0
  10. package/dist/components/footer/NXLiveApps.js +87 -0
  11. package/dist/components/footer/NXSocialColumn.d.ts +14 -0
  12. package/dist/components/footer/NXSocialColumn.js +17 -0
  13. package/dist/components/footer/NXTagsColumn.d.ts +14 -0
  14. package/dist/components/footer/NXTagsColumn.js +31 -0
  15. package/dist/components/footer/footerHelpers.d.ts +4 -0
  16. package/dist/components/footer/footerHelpers.js +57 -0
  17. package/dist/components/footer/index.d.ts +7 -0
  18. package/dist/components/footer/index.js +7 -0
  19. package/dist/components/hero/HeroSection.js +1 -1
  20. package/dist/components/hero/VideoModal.js +1 -1
  21. package/dist/components/index.d.ts +11 -3
  22. package/dist/components/index.js +11 -3
  23. package/dist/components/layouts/GuideBreadcrumbs.d.ts +14 -0
  24. package/dist/components/layouts/GuideBreadcrumbs.js +15 -0
  25. package/dist/components/{guide → layouts}/MarkdownContent.js +1 -1
  26. package/dist/components/layouts/Standard.d.ts +10 -0
  27. package/dist/components/layouts/Standard.js +7 -0
  28. package/dist/components/navigation/DropdownMenu.js +1 -1
  29. package/dist/components/navigation/Header.js +3 -6
  30. package/dist/components/navigation/LayoutActions.d.ts +7 -0
  31. package/dist/components/navigation/LayoutActions.js +12 -0
  32. package/dist/components/navigation/LogoContextMenu.js +1 -1
  33. package/dist/components/navigation/MarkdownMenu.d.ts +9 -0
  34. package/dist/components/navigation/MarkdownMenu.js +12 -0
  35. package/dist/components/navigation/MobileMenu.js +1 -1
  36. package/dist/components/navigation/Waiting.d.ts +10 -0
  37. package/dist/components/navigation/Waiting.js +45 -0
  38. package/dist/components/search/HeroSearchBar.d.ts +16 -0
  39. package/dist/components/search/HeroSearchBar.js +38 -0
  40. package/dist/components/search/SearchDialog.d.ts +11 -0
  41. package/dist/components/search/SearchDialog.js +69 -0
  42. package/dist/components/search/SearchIconButton.d.ts +10 -0
  43. package/dist/components/search/SearchIconButton.js +10 -0
  44. package/dist/components/search/SearchResultsList.d.ts +13 -0
  45. package/dist/components/search/SearchResultsList.js +18 -0
  46. package/dist/components/search/index.d.ts +5 -0
  47. package/dist/components/search/index.js +5 -0
  48. package/dist/components/search/useSearch.d.ts +54 -0
  49. package/dist/components/search/useSearch.js +106 -0
  50. package/dist/components/shortcodes/PageLinkShortcode.d.ts +15 -0
  51. package/dist/components/shortcodes/PageLinkShortcode.js +51 -0
  52. package/dist/components/showcase/BlogSection.js +2 -2
  53. package/dist/components/showcase/FeatureExplorer.js +2 -2
  54. package/dist/components/showcase/FeaturedCard.d.ts +13 -0
  55. package/dist/components/showcase/FeaturedCard.js +6 -0
  56. package/dist/components/showcase/SolutionsSection.js +2 -2
  57. package/dist/components/showcase/StatementSection.js +1 -1
  58. package/dist/components/showcase/VideoSection.js +2 -2
  59. package/dist/components/ui/Bash.d.ts +16 -0
  60. package/dist/components/ui/Bash.js +30 -0
  61. package/dist/components/ui/Button.js +1 -1
  62. package/dist/components/ui/ThemeToggle.d.ts +5 -1
  63. package/dist/components/ui/ThemeToggle.js +32 -2
  64. package/dist/components/video/VideoLayout.js +2 -2
  65. package/dist/context/ThemeContext.d.ts +4 -0
  66. package/dist/context/ThemeContext.js +22 -17
  67. package/dist/data/og-images.json +205 -151
  68. package/dist/design-system/components/DesignSystemProvider/DesignSystemProvider.js +3 -8
  69. package/dist/design-system/components/buttons/Button/Button.js +6 -3
  70. package/dist/design-system/components/buttons/IconButton/IconButton.js +6 -3
  71. package/dist/design-system/components/feedback/Alert/Alert.js +3 -2
  72. package/dist/design-system/components/feedback/Card/Card.js +5 -3
  73. package/dist/design-system/components/headings/Heading/Heading.js +2 -1
  74. package/dist/design-system/components/images/FeaturedImage/FeaturedImage.js +6 -6
  75. package/dist/design-system/components/layout/index.d.ts +1 -0
  76. package/dist/design-system/components/layout/index.js +1 -0
  77. package/dist/design-system/components/navigation/SiteNav/SiteNav.js +1 -1
  78. package/dist/design-system/components/nxStyle.d.ts +0 -21
  79. package/dist/design-system/components/nxStyle.js +0 -14
  80. package/dist/design-system/types.d.ts +1 -0
  81. package/dist/design-system/types.js +1 -0
  82. package/dist/index.d.ts +4 -3
  83. package/dist/index.js +1 -0
  84. package/dist/styles/globals.css +10 -12
  85. package/dist/styles/theme.js +30 -3
  86. package/dist/types/index.d.ts +220 -0
  87. package/package.json +3 -2
  88. package/dist/components/guide/GuideLayout.d.ts +0 -8
  89. package/dist/components/guide/GuideLayout.js +0 -12
  90. /package/dist/components/{guide → layouts}/MarkdownContent.d.ts +0 -0
@@ -0,0 +1,51 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { AppRouterLink as NextLink } from '@goldlabelapps/uberedux';
4
+ import { Button as MuiButton, Box, Typography } from '@mui/material';
5
+ import { useTheme } from '@mui/material/styles';
6
+ import Icon from '../../design-system/components/icons/Icon/Icon';
7
+ export function PageLink({ url, href, icon, iconAlign, title, description, variant = 'outlined', color = 'primary', }) {
8
+ const theme = useTheme();
9
+ const targetUrl = url || href || '#';
10
+ const isExternal = /^https?:\/\//.test(targetUrl);
11
+ const isRightAlign = iconAlign === 'right' || (icon === 'right' && !iconAlign);
12
+ const iconName = icon === 'right' ? 'right' : icon;
13
+ const iconElement = iconName ? _jsx(Icon, { icon: iconName, color: color === 'inherit' ? 'inherit' : color }) : null;
14
+ const isContained = variant === 'contained';
15
+ return (_jsx(MuiButton, { component: NextLink, href: targetUrl, target: isExternal ? '_blank' : undefined, rel: isExternal ? 'noopener noreferrer' : undefined, variant: variant, color: color, startIcon: !isRightAlign ? iconElement : undefined, endIcon: isRightAlign ? iconElement : undefined, sx: {
16
+ my: 1.5,
17
+ py: 1.25,
18
+ px: 2,
19
+ borderRadius: theme.shape?.borderRadius ? `${Number(theme.shape.borderRadius) * 2}px` : '6px',
20
+ textTransform: 'none',
21
+ justifyContent: 'flex-start',
22
+ textAlign: 'left',
23
+ width: '100%',
24
+ maxWidth: '600px',
25
+ display: 'inline-flex',
26
+ alignItems: 'center',
27
+ lineHeight: 1.4,
28
+ textDecoration: 'none',
29
+ backgroundColor: isContained ? undefined : theme.palette.background.paper,
30
+ borderColor: variant === 'outlined' ? theme.palette.divider || theme.palette.primary.main : undefined,
31
+ color: isContained ? 'primary.contrastText' : 'text.primary',
32
+ '&:hover': {
33
+ textDecoration: 'none',
34
+ backgroundColor: isContained ? undefined : theme.palette.action.hover,
35
+ borderColor: variant === 'outlined' ? theme.palette.primary.main : undefined,
36
+ },
37
+ }, children: _jsxs(Box, { sx: { display: 'flex', flexDirection: 'column', textAlign: 'left', minWidth: 0, flex: 1 }, children: [title && (_jsx(Typography, { component: "span", variant: "subtitle1", sx: {
38
+ fontWeight: 600,
39
+ lineHeight: 1.3,
40
+ color: isContained ? 'inherit' : 'text.primary',
41
+ }, children: title })), description && (_jsx(Typography, { component: "span", variant: "body2", sx: {
42
+ lineHeight: 1.3,
43
+ mt: title ? 0.25 : 0,
44
+ color: isContained ? 'inherit' : 'text.secondary',
45
+ opacity: isContained ? 0.85 : 1,
46
+ }, children: description })), !title && !description && (_jsx(Typography, { component: "span", variant: "button", sx: {
47
+ color: isContained ? 'inherit' : 'text.primary',
48
+ }, children: targetUrl }))] }) }));
49
+ }
50
+ export const PageLinkShortcode = PageLink;
51
+ export default PageLink;
@@ -1,6 +1,6 @@
1
1
  "use client";
2
2
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
- import Link from "next/link";
3
+ import { AppRouterLink as Link } from "@goldlabelapps/uberedux";
4
4
  import { useSiteConfig } from "../../context/ConfigContext";
5
5
  import { ChevronLeft, ChevronRight, BookOpen } from "lucide-react";
6
6
  export function BlogSection({ posts: propPosts, title: propTitle, subtitle: propSubtitle, }) {
@@ -8,5 +8,5 @@ export function BlogSection({ posts: propPosts, title: propTitle, subtitle: prop
8
8
  const posts = propPosts || siteConfig.blogs.posts || [];
9
9
  const title = propTitle || siteConfig.blogs.title || "Guides & Articles";
10
10
  const subtitle = propSubtitle || siteConfig.blogs.subtitle;
11
- return (_jsx("section", { id: "articles", className: "py-24 sm:py-32 relative bg-white overflow-hidden transition-colors duration-200", children: _jsxs("div", { className: "max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 relative z-10", children: [_jsxs("div", { className: "flex flex-col md:flex-row md:items-end justify-between gap-6 mb-12", children: [_jsxs("div", { children: [_jsxs("div", { className: "inline-flex items-center gap-1.5 px-3.5 py-1 rounded-full bg-[#012867]/[0.06] border border-[#012867]/15 text-xs font-bold text-[#012867] mb-4 backdrop-blur-md", children: [_jsx(BookOpen, { className: "h-3.5 w-3.5" }), _jsx("span", { children: "Articles & Guides" })] }), _jsx("h2", { className: "text-3xl sm:text-5xl font-extrabold text-slate-900 tracking-tight", children: title }), subtitle && (_jsx("p", { className: "mt-4 text-base text-slate-600 max-w-2xl", children: subtitle }))] }), _jsxs("div", { className: "flex items-center gap-2", children: [_jsx("button", { "aria-label": "Previous blog posts", className: "p-2 rounded-full bg-slate-100 hover:bg-slate-200 text-slate-700 transition-colors cursor-pointer", children: _jsx(ChevronLeft, { className: "h-4 w-4" }) }), _jsx("button", { "aria-label": "Next blog posts", className: "p-2 rounded-full bg-slate-100 hover:bg-slate-200 text-slate-700 transition-colors cursor-pointer", children: _jsx(ChevronRight, { className: "h-4 w-4" }) })] })] }), _jsx("div", { className: "grid grid-cols-1 md:grid-cols-3 gap-8", children: posts.map((post) => (_jsxs(Link, { href: post.href, className: "group rounded-3xl p-6 sm:p-8 bg-slate-50 border border-slate-200 hover:border-[#012867]/40 shadow-sm hover:shadow-xl transition-all duration-300 flex flex-col justify-between", children: [_jsxs("div", { children: [_jsxs("div", { className: "flex items-center justify-between gap-2 mb-4", children: [_jsx("span", { className: "text-[11px] font-bold px-2.5 py-0.5 rounded-full bg-[#012867]/[0.08] text-[#012867]", children: post.category }), _jsx("span", { className: "text-xs text-slate-400 font-medium", children: post.date })] }), _jsx("h3", { className: "text-lg sm:text-xl font-bold text-slate-900 group-hover:text-[#012867] transition-colors leading-snug mb-3", children: post.title }), post.summary && (_jsx("p", { className: "text-xs sm:text-sm text-slate-600 line-clamp-3 leading-relaxed", children: post.summary }))] }), _jsx("div", { className: "pt-6 mt-6 border-t border-slate-200/60 flex items-center text-xs font-bold text-[#012867] group-hover:underline", children: _jsx("span", { children: "Read guide \u2192" }) })] }, post.id))) })] }) }));
11
+ return (_jsx("section", { id: "articles", className: "py-24 sm:py-32 relative bg-white overflow-hidden transition-colors duration-200", children: _jsxs("div", { className: "max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 relative z-10", children: [_jsxs("div", { className: "flex flex-col md:flex-row md:items-end justify-between gap-6 mb-12", children: [_jsxs("div", { children: [_jsxs("div", { className: "inline-flex items-center gap-1.5 px-3.5 py-1 rounded-full bg-[#012867]/[0.06] border border-[#012867]/15 text-xs font-bold text-[#012867] mb-4 backdrop-blur-md", children: [_jsx(BookOpen, { className: "h-3.5 w-3.5" }), _jsx("span", { children: "Articles & Guides" })] }), _jsx("h2", { className: "text-3xl sm:text-5xl font-normal text-slate-900 tracking-tight", children: title }), subtitle && (_jsx("p", { className: "mt-4 text-base text-slate-600 max-w-2xl", children: subtitle }))] }), _jsxs("div", { className: "flex items-center gap-2", children: [_jsx("button", { "aria-label": "Previous blog posts", className: "p-2 rounded-full bg-slate-100 hover:bg-slate-200 text-slate-700 transition-colors cursor-pointer", children: _jsx(ChevronLeft, { className: "h-4 w-4" }) }), _jsx("button", { "aria-label": "Next blog posts", className: "p-2 rounded-full bg-slate-100 hover:bg-slate-200 text-slate-700 transition-colors cursor-pointer", children: _jsx(ChevronRight, { className: "h-4 w-4" }) })] })] }), _jsx("div", { className: "grid grid-cols-1 md:grid-cols-3 gap-8", children: posts.map((post) => (_jsxs(Link, { href: post.href, className: "group rounded-3xl p-6 sm:p-8 bg-slate-50 border border-slate-200 hover:border-[#012867]/40 shadow-sm hover:shadow-xl transition-all duration-300 flex flex-col justify-between", children: [_jsxs("div", { children: [_jsxs("div", { className: "flex items-center justify-between gap-2 mb-4", children: [_jsx("span", { className: "text-[11px] font-bold px-2.5 py-0.5 rounded-full bg-[#012867]/[0.08] text-[#012867]", children: post.category }), _jsx("span", { className: "text-xs text-slate-400 font-medium", children: post.date })] }), _jsx("h3", { className: "text-lg sm:text-xl font-normal text-slate-900 group-hover:text-[#012867] transition-colors leading-snug mb-3", children: post.title }), post.summary && (_jsx("p", { className: "text-xs sm:text-sm text-slate-600 line-clamp-3 leading-relaxed", children: post.summary }))] }), _jsx("div", { className: "pt-6 mt-6 border-t border-slate-200/60 flex items-center text-xs font-bold text-[#012867] group-hover:underline", children: _jsx("span", { children: "Read guide \u2192" }) })] }, post.id))) })] }) }));
12
12
  }
@@ -25,12 +25,12 @@ export function FeatureExplorer({ items: propItems, sectionTitle: propTitle, sub
25
25
  };
26
26
  if (!items.length)
27
27
  return null;
28
- return (_jsxs("section", { id: "features", className: "py-24 sm:py-32 relative bg-white overflow-hidden transition-colors duration-200", children: [_jsx("div", { className: "pointer-events-none absolute top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2 w-[800px] h-[500px] bg-[#012867]/10 rounded-full blur-3xl opacity-60" }), _jsxs("div", { className: "max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 relative z-10", children: [_jsxs("div", { className: "text-center max-w-3xl mx-auto mb-12 sm:mb-16", children: [_jsxs("div", { className: "inline-flex items-center gap-1.5 px-3.5 py-1 rounded-full bg-[#012867]/[0.06] border border-[#012867]/15 text-xs font-bold text-[#012867] mb-4 backdrop-blur-md", children: [_jsx(Zap, { className: "h-3.5 w-3.5" }), _jsx("span", { children: badge })] }), _jsx("h2", { className: "text-3xl sm:text-5xl font-extrabold text-slate-900 tracking-tight", children: sectionTitle }), subtitle && (_jsx("p", { className: "mt-4 text-base sm:text-lg text-slate-600", children: subtitle }))] }), _jsx("div", { className: "flex justify-center mb-10 overflow-x-auto pb-2 scrollbar-none", children: _jsx("div", { className: "inline-flex p-1.5 rounded-2xl bg-slate-100 border border-slate-200 shadow-sm max-w-full", children: items.map((tab) => {
28
+ return (_jsxs("section", { id: "features", className: "py-24 sm:py-32 relative bg-white overflow-hidden transition-colors duration-200", children: [_jsx("div", { className: "pointer-events-none absolute top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2 w-[800px] h-[500px] bg-[#012867]/10 rounded-full blur-3xl opacity-60" }), _jsxs("div", { className: "max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 relative z-10", children: [_jsxs("div", { className: "text-center max-w-3xl mx-auto mb-12 sm:mb-16", children: [_jsxs("div", { className: "inline-flex items-center gap-1.5 px-3.5 py-1 rounded-full bg-[#012867]/[0.06] border border-[#012867]/15 text-xs font-bold text-[#012867] mb-4 backdrop-blur-md", children: [_jsx(Zap, { className: "h-3.5 w-3.5" }), _jsx("span", { children: badge })] }), _jsx("h2", { className: "text-3xl sm:text-5xl font-normal text-slate-900 tracking-tight", children: sectionTitle }), subtitle && (_jsx("p", { className: "mt-4 text-base sm:text-lg text-slate-600", children: subtitle }))] }), _jsx("div", { className: "flex justify-center mb-10 overflow-x-auto pb-2 scrollbar-none", children: _jsx("div", { className: "inline-flex p-1.5 rounded-2xl bg-slate-100 border border-slate-200 shadow-sm max-w-full", children: items.map((tab) => {
29
29
  const isActive = tab.id === activeItem?.id;
30
30
  return (_jsxs("button", { onClick: () => setActiveItemId(tab.id), className: cn("px-4 sm:px-6 py-2.5 rounded-xl text-xs sm:text-sm font-semibold transition-all duration-200 cursor-pointer whitespace-nowrap flex items-center gap-2", isActive
31
31
  ? "bg-white text-[#012867] shadow-sm font-bold border border-slate-200/80"
32
32
  : "text-slate-600 hover:text-slate-900 hover:bg-slate-200/60"), children: [_jsx("span", { children: tab.tabLabel || tab.title }), tab.badge && (_jsx("span", { className: cn("text-[10px] font-extrabold px-2 py-0.5 rounded-full uppercase tracking-wider", isActive
33
33
  ? "bg-[#012867]/[0.08] text-[#012867]"
34
34
  : "bg-slate-200 text-slate-600"), children: tab.badge }))] }, tab.id));
35
- }) }) }), activeItem && (_jsxs("div", { className: "grid grid-cols-1 lg:grid-cols-12 gap-8 items-center rounded-3xl bg-slate-50 border border-slate-200 p-6 sm:p-10 shadow-xl transition-all duration-300", children: [_jsxs("div", { className: "lg:col-span-5 space-y-6", children: [_jsx("div", { className: "inline-flex items-center gap-2 px-3 py-1 rounded-lg bg-[#012867]/[0.06] text-[#012867] font-semibold text-xs border border-[#012867]/15", children: _jsx("span", { children: activeItem.tag }) }), _jsx("h3", { className: "text-2xl sm:text-3xl font-extrabold text-slate-900 leading-tight", children: activeItem.title }), _jsx("p", { className: "text-sm sm:text-base text-slate-600 leading-relaxed", children: activeItem.description }), activeItem.cta && (_jsx("div", { className: "pt-2", children: _jsxs("a", { href: activeItem.cta.href, className: "inline-flex items-center gap-2 text-sm font-bold text-[#012867] hover:underline", children: [_jsx("span", { children: activeItem.cta.label }), _jsx("span", { children: "\u2192" })] }) }))] }), _jsxs("div", { className: "lg:col-span-7", children: [activeItem.previewType === "terminal" && activeItem.terminalSnippet && (_jsxs("div", { className: "rounded-2xl bg-slate-900 border border-slate-800 shadow-2xl overflow-hidden font-mono text-xs sm:text-sm text-slate-200", children: [_jsxs("div", { className: "flex items-center justify-between px-4 py-3 bg-slate-950 border-b border-slate-800", children: [_jsxs("div", { className: "flex items-center gap-2", children: [_jsx("span", { className: "w-3 h-3 rounded-full bg-rose-500/80" }), _jsx("span", { className: "w-3 h-3 rounded-full bg-amber-500/80" }), _jsx("span", { className: "w-3 h-3 rounded-full bg-emerald-500/80" })] }), _jsx("span", { className: "text-[11px] font-bold text-slate-400", children: activeItem.terminalSnippet.prompt || "terminal" }), _jsx(Terminal, { className: "h-4 w-4 text-slate-500" })] }), _jsx("div", { className: "p-4 sm:p-6 space-y-4", children: activeItem.terminalSnippet.commands.map((cmd, cIdx) => (_jsxs("div", { className: "space-y-1.5", children: [cmd.cmd && (_jsxs("div", { className: "flex items-center justify-between group", children: [_jsxs("div", { className: "flex items-center gap-2 text-emerald-400", children: [_jsx("span", { children: "$" }), _jsx("span", { className: "text-slate-100", children: cmd.cmd })] }), _jsx("button", { onClick: () => handleCopyCode(cmd.cmd), title: "Copy command", className: "opacity-0 group-hover:opacity-100 transition-opacity p-1 text-slate-400 hover:text-white", children: copiedCode ? (_jsx(Check, { className: "h-3.5 w-3.5 text-emerald-400" })) : (_jsx(Copy, { className: "h-3.5 w-3.5" })) })] })), cmd.output && (_jsx("p", { className: "text-slate-400 text-xs sm:text-xs leading-relaxed whitespace-pre-wrap pl-4 border-l border-slate-700", children: cmd.output }))] }, cIdx))) })] })), activeItem.previewType === "code" && activeItem.codeSnippet && (_jsxs("div", { className: "rounded-2xl bg-white dark:bg-slate-900 border border-slate-200 dark:border-slate-800 shadow-xl overflow-hidden font-mono text-xs sm:text-sm text-slate-800 dark:text-slate-200", children: [_jsxs("div", { className: "flex items-center justify-between px-4 py-3 bg-slate-50 dark:bg-slate-950 border-b border-slate-200 dark:border-slate-800", children: [_jsxs("div", { className: "flex items-center gap-2", children: [_jsx(Code2, { className: "h-4 w-4 text-[#012867] dark:text-[#38BDF8]" }), _jsx("span", { className: "text-xs font-semibold text-slate-700 dark:text-slate-300", children: activeItem.codeSnippet.filename || "snippet" })] }), _jsx("button", { onClick: () => handleCopyCode(activeItem.codeSnippet.code), className: "flex items-center gap-1.5 px-2.5 py-1 rounded-lg bg-slate-200/80 hover:bg-slate-200 text-slate-700 dark:bg-slate-800 dark:hover:bg-slate-700 dark:text-slate-300 text-xs transition-colors cursor-pointer", children: copiedCode ? (_jsxs(_Fragment, { children: [_jsx(Check, { className: "h-3.5 w-3.5 text-emerald-600 dark:text-emerald-400" }), _jsx("span", { children: "Copied" })] })) : (_jsxs(_Fragment, { children: [_jsx(Copy, { className: "h-3.5 w-3.5" }), _jsx("span", { children: "Copy Code" })] })) })] }), _jsx("pre", { className: "p-4 sm:p-6 overflow-x-auto text-xs sm:text-sm text-slate-900 dark:text-slate-100 bg-transparent border-0", children: _jsx("code", { children: activeItem.codeSnippet.code }) })] })), activeItem.previewType === "interactive-ui" && (_jsxs("div", { className: "rounded-2xl bg-white border border-slate-200 p-8 shadow-inner flex flex-col items-center justify-center min-h-[260px] text-center space-y-4", children: [_jsx("div", { className: "h-12 w-12 rounded-2xl bg-[#012867]/[0.08] text-[#012867] flex items-center justify-center", children: _jsx(Zap, { className: "h-6 w-6" }) }), _jsxs("div", { children: [_jsx("h4", { className: "font-bold text-slate-900 text-base", children: activeItem.title }), _jsx("p", { className: "text-xs text-slate-500 mt-1 max-w-sm", children: activeItem.description })] }), activeItem.cta && (_jsx("a", { href: activeItem.cta.href, className: "px-4 py-2 rounded-full bg-[#012867] text-white text-xs font-bold shadow hover:bg-[#011f52] transition-colors", children: activeItem.cta.label }))] }))] })] }))] })] }));
35
+ }) }) }), activeItem && (_jsxs("div", { className: "grid grid-cols-1 lg:grid-cols-12 gap-8 items-center rounded-3xl bg-slate-50 border border-slate-200 p-6 sm:p-10 shadow-xl transition-all duration-300", children: [_jsxs("div", { className: "lg:col-span-5 space-y-6", children: [_jsx("div", { className: "inline-flex items-center gap-2 px-3 py-1 rounded-lg bg-[#012867]/[0.06] text-[#012867] font-semibold text-xs border border-[#012867]/15", children: _jsx("span", { children: activeItem.tag }) }), _jsx("h3", { className: "text-2xl sm:text-3xl font-normal text-slate-900 leading-tight", children: activeItem.title }), _jsx("p", { className: "text-sm sm:text-base text-slate-600 leading-relaxed", children: activeItem.description }), activeItem.cta && (_jsx("div", { className: "pt-2", children: _jsxs("a", { href: activeItem.cta.href, className: "inline-flex items-center gap-2 text-sm font-bold text-[#012867] hover:underline", children: [_jsx("span", { children: activeItem.cta.label }), _jsx("span", { children: "\u2192" })] }) }))] }), _jsxs("div", { className: "lg:col-span-7", children: [activeItem.previewType === "terminal" && activeItem.terminalSnippet && (_jsxs("div", { className: "rounded-2xl bg-slate-900 border border-slate-800 shadow-2xl overflow-hidden font-mono text-xs sm:text-sm text-slate-200", children: [_jsxs("div", { className: "flex items-center justify-between px-4 py-3 bg-slate-950 border-b border-slate-800", children: [_jsxs("div", { className: "flex items-center gap-2", children: [_jsx("span", { className: "w-3 h-3 rounded-full bg-rose-500/80" }), _jsx("span", { className: "w-3 h-3 rounded-full bg-amber-500/80" }), _jsx("span", { className: "w-3 h-3 rounded-full bg-emerald-500/80" })] }), _jsx("span", { className: "text-[11px] font-bold text-slate-400", children: activeItem.terminalSnippet.prompt || "terminal" }), _jsx(Terminal, { className: "h-4 w-4 text-slate-500" })] }), _jsx("div", { className: "p-4 sm:p-6 space-y-4", children: activeItem.terminalSnippet.commands.map((cmd, cIdx) => (_jsxs("div", { className: "space-y-1.5", children: [cmd.cmd && (_jsxs("div", { className: "flex items-center justify-between group", children: [_jsxs("div", { className: "flex items-center gap-2 text-emerald-400", children: [_jsx("span", { children: "$" }), _jsx("span", { className: "text-slate-100", children: cmd.cmd })] }), _jsx("button", { onClick: () => handleCopyCode(cmd.cmd), title: "Copy command", className: "opacity-0 group-hover:opacity-100 transition-opacity p-1 text-slate-400 hover:text-white", children: copiedCode ? (_jsx(Check, { className: "h-3.5 w-3.5 text-emerald-400" })) : (_jsx(Copy, { className: "h-3.5 w-3.5" })) })] })), cmd.output && (_jsx("p", { className: "text-slate-400 text-xs sm:text-xs leading-relaxed whitespace-pre-wrap pl-4 border-l border-slate-700", children: cmd.output }))] }, cIdx))) })] })), activeItem.previewType === "code" && activeItem.codeSnippet && (_jsxs("div", { className: "rounded-2xl bg-white dark:bg-slate-900 border border-slate-200 dark:border-slate-800 shadow-xl overflow-hidden font-mono text-xs sm:text-sm text-slate-800 dark:text-slate-200", children: [_jsxs("div", { className: "flex items-center justify-between px-4 py-3 bg-slate-50 dark:bg-slate-950 border-b border-slate-200 dark:border-slate-800", children: [_jsxs("div", { className: "flex items-center gap-2", children: [_jsx(Code2, { className: "h-4 w-4 text-[#012867] dark:text-[#38BDF8]" }), _jsx("span", { className: "text-xs font-semibold text-slate-700 dark:text-slate-300", children: activeItem.codeSnippet.filename || "snippet" })] }), _jsx("button", { onClick: () => handleCopyCode(activeItem.codeSnippet.code), className: "flex items-center gap-1.5 px-2.5 py-1 rounded-lg bg-slate-200/80 hover:bg-slate-200 text-slate-700 dark:bg-slate-800 dark:hover:bg-slate-700 dark:text-slate-300 text-xs transition-colors cursor-pointer", children: copiedCode ? (_jsxs(_Fragment, { children: [_jsx(Check, { className: "h-3.5 w-3.5 text-emerald-600 dark:text-emerald-400" }), _jsx("span", { children: "Copied" })] })) : (_jsxs(_Fragment, { children: [_jsx(Copy, { className: "h-3.5 w-3.5" }), _jsx("span", { children: "Copy Code" })] })) })] }), _jsx("pre", { className: "p-4 sm:p-6 overflow-x-auto text-xs sm:text-sm text-slate-900 dark:text-slate-100 bg-transparent border-0", children: _jsx("code", { children: activeItem.codeSnippet.code }) })] })), activeItem.previewType === "interactive-ui" && (_jsxs("div", { className: "rounded-2xl bg-white border border-slate-200 p-8 shadow-inner flex flex-col items-center justify-center min-h-[260px] text-center space-y-4", children: [_jsx("div", { className: "h-12 w-12 rounded-2xl bg-[#012867]/[0.08] text-[#012867] flex items-center justify-center", children: _jsx(Zap, { className: "h-6 w-6" }) }), _jsxs("div", { children: [_jsx("h4", { className: "font-normal text-slate-900 text-base", children: activeItem.title }), _jsx("p", { className: "text-xs text-slate-500 mt-1 max-w-sm", children: activeItem.description })] }), activeItem.cta && (_jsx("a", { href: activeItem.cta.href, className: "px-4 py-2 rounded-full bg-[#012867] text-white text-xs font-bold shadow hover:bg-[#011f52] transition-colors", children: activeItem.cta.label }))] }))] })] }))] })] }));
36
36
  }
@@ -0,0 +1,13 @@
1
+ import React from "react";
2
+ export interface FeaturedCardProps {
3
+ categoryTag?: string;
4
+ badge?: string;
5
+ title: string;
6
+ description: string;
7
+ imageUrl?: string;
8
+ imageAlt?: string;
9
+ href: string;
10
+ readMoreLabel?: string;
11
+ className?: string;
12
+ }
13
+ export declare function FeaturedCard({ categoryTag, badge, title, description, imageUrl: _imageUrl, imageAlt: _imageAlt, href, readMoreLabel, className, }: FeaturedCardProps): React.JSX.Element;
@@ -0,0 +1,6 @@
1
+ "use client";
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { AppRouterLink as Link } from "@goldlabelapps/uberedux";
4
+ export function FeaturedCard({ categoryTag = "Career / AI / Antigravity Overview", badge = "Featured", title, description, imageUrl: _imageUrl, imageAlt: _imageAlt, href, readMoreLabel = "Read more", className = "", }) {
5
+ return (_jsx(Link, { href: href, className: `block mt-6 mb-4 max-w-2xl w-full text-left bg-white/90 dark:bg-slate-900/90 backdrop-blur-md p-4 sm:p-5 rounded-2xl sm:rounded-3xl border-2 border-pink-500 dark:border-pink-500 shadow-xl shadow-pink-500/10 relative z-20 transition-all hover:border-pink-600 dark:hover:border-pink-400 cursor-pointer group ${className}`, children: _jsx("div", { className: "flex flex-col sm:flex-row items-stretch gap-4 sm:gap-5", children: _jsxs("div", { className: "flex-1 min-w-0 flex flex-col justify-between", children: [_jsxs("div", { children: [_jsxs("div", { className: "flex items-center justify-between gap-2 mb-1.5", children: [categoryTag && (_jsx("span", { className: "px-2.5 py-0.5 rounded-full text-[11px] font-semibold tracking-wide bg-[#85580C]/10 text-[#85580C] dark:bg-[#F1D57A]/10 dark:text-[#F1D57A]", children: categoryTag })), badge && (_jsx("span", { className: "text-[11px] text-pink-600 dark:text-pink-400 font-semibold uppercase tracking-wider", children: badge }))] }), _jsx("h2", { className: "text-base sm:text-lg font-bold text-slate-900 dark:text-white mb-1.5 leading-snug group-hover:text-amber-600 dark:group-hover:text-[#F1D57A] transition-colors", children: title }), _jsx("p", { className: "text-xs sm:text-sm text-slate-600 dark:text-slate-300 leading-relaxed line-clamp-3", children: description })] }), _jsx("div", { className: "flex items-center justify-end pt-3 mt-3 border-t border-slate-100 dark:border-slate-800/80", children: _jsxs("span", { className: "inline-flex items-center gap-1.5 text-xs font-bold text-[#85580C] dark:text-[#F1D57A] group-hover:underline bg-[#85580C]/10 dark:bg-[#F1D57A]/10 px-3 py-1.5 rounded-lg transition-all group-hover:bg-[#85580C]/20 dark:group-hover:bg-[#F1D57A]/20", children: [_jsx("span", { children: readMoreLabel }), _jsx("span", { className: "group-hover:translate-x-0.5 transition-transform", children: "\u2192" })] }) })] }) }) }));
6
+ }
@@ -6,9 +6,9 @@ import { Check, Sparkles } from "lucide-react";
6
6
  export function SolutionsSection({ config }) {
7
7
  const siteConfig = useSiteConfig();
8
8
  const solutions = config ? { ...siteConfig.solutions, ...config } : siteConfig.solutions;
9
- return (_jsx("section", { id: "solutions", className: "py-24 sm:py-32 relative bg-slate-50 overflow-hidden transition-colors duration-200", children: _jsxs("div", { className: "max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 relative z-10", children: [_jsxs("div", { className: "text-center max-w-3xl mx-auto mb-16 sm:mb-20", children: [_jsxs("div", { className: "inline-flex items-center gap-1.5 px-3.5 py-1 rounded-full bg-[#012867]/[0.06] border border-[#012867]/15 text-xs font-bold text-[#012867] mb-4 backdrop-blur-md", children: [_jsx(Sparkles, { className: "h-3.5 w-3.5" }), _jsx("span", { children: "Pricing & Plans" })] }), _jsx("h2", { className: "text-3xl sm:text-5xl font-extrabold text-slate-900 tracking-tight", children: solutions.title }), _jsx("p", { className: "mt-4 text-base sm:text-lg text-slate-600", children: solutions.subtitle })] }), _jsx("div", { className: "grid grid-cols-1 md:grid-cols-2 gap-8 max-w-5xl mx-auto items-stretch", children: solutions.cards.map((card) => (_jsxs("div", { className: `rounded-3xl p-8 sm:p-10 flex flex-col justify-between transition-all duration-300 ${card.highlighted
9
+ return (_jsx("section", { id: "solutions", className: "py-24 sm:py-32 relative bg-slate-50 overflow-hidden transition-colors duration-200", children: _jsxs("div", { className: "max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 relative z-10", children: [_jsxs("div", { className: "text-center max-w-3xl mx-auto mb-16 sm:mb-20", children: [_jsxs("div", { className: "inline-flex items-center gap-1.5 px-3.5 py-1 rounded-full bg-[#012867]/[0.06] border border-[#012867]/15 text-xs font-bold text-[#012867] mb-4 backdrop-blur-md", children: [_jsx(Sparkles, { className: "h-3.5 w-3.5" }), _jsx("span", { children: "Pricing & Plans" })] }), _jsx("h2", { className: "text-3xl sm:text-5xl font-normal text-slate-900 tracking-tight", children: solutions.title }), _jsx("p", { className: "mt-4 text-base sm:text-lg text-slate-600", children: solutions.subtitle })] }), _jsx("div", { className: "grid grid-cols-1 md:grid-cols-2 gap-8 max-w-5xl mx-auto items-stretch", children: solutions.cards.map((card) => (_jsxs("div", { className: `rounded-3xl p-8 sm:p-10 flex flex-col justify-between transition-all duration-300 ${card.highlighted
10
10
  ? "bg-white border-2 border-[#012867] shadow-2xl relative"
11
- : "bg-white border border-slate-200 shadow-md"}`, children: [_jsxs("div", { children: [_jsxs("div", { className: "flex items-center justify-between gap-4 mb-4", children: [_jsx("span", { className: "text-xs font-bold uppercase tracking-wider text-slate-500", children: card.tier }), card.badge && (_jsx("span", { className: "px-3 py-1 rounded-full text-xs font-bold bg-[#012867]/[0.08] text-[#012867] border border-[#012867]/20", children: card.badge }))] }), _jsx("h3", { className: "text-3xl font-extrabold text-slate-900 mb-2", children: card.heading }), _jsx("p", { className: "text-sm text-slate-600 mb-8 leading-relaxed", children: card.description }), _jsx("div", { className: "space-y-3 pt-4 border-t border-slate-100 mb-8", children: card.features.map((feature, fIdx) => (_jsxs("div", { className: "flex items-start gap-3 text-sm text-slate-700", children: [_jsx("div", { className: "rounded-full p-1 bg-emerald-100 text-emerald-700 shrink-0 mt-0.5", children: _jsx(Check, { className: "h-3.5 w-3.5" }) }), _jsx("span", { children: feature })] }, fIdx))) })] }), _jsx(Button, { href: card.cta.href, variant: card.cta.variant === "primary" ? "primary" : "secondary", className: `w-full justify-center ${card.cta.variant === "primary"
11
+ : "bg-white border border-slate-200 shadow-md"}`, children: [_jsxs("div", { children: [_jsxs("div", { className: "flex items-center justify-between gap-4 mb-4", children: [_jsx("span", { className: "text-xs font-bold uppercase tracking-wider text-slate-500", children: card.tier }), card.badge && (_jsx("span", { className: "px-3 py-1 rounded-full text-xs font-bold bg-[#012867]/[0.08] text-[#012867] border border-[#012867]/20", children: card.badge }))] }), _jsx("h3", { className: "text-3xl font-normal text-slate-900 mb-2", children: card.heading }), _jsx("p", { className: "text-sm text-slate-600 mb-8 leading-relaxed", children: card.description }), _jsx("div", { className: "space-y-3 pt-4 border-t border-slate-100 mb-8", children: card.features.map((feature, fIdx) => (_jsxs("div", { className: "flex items-start gap-3 text-sm text-slate-700", children: [_jsx("div", { className: "rounded-full p-1 bg-emerald-100 text-emerald-700 shrink-0 mt-0.5", children: _jsx(Check, { className: "h-3.5 w-3.5" }) }), _jsx("span", { children: feature })] }, fIdx))) })] }), _jsx(Button, { href: card.cta.href, variant: card.cta.variant === "primary" ? "primary" : "secondary", className: `w-full justify-center ${card.cta.variant === "primary"
12
12
  ? "bg-[#012867] hover:bg-[#011f52] text-white shadow-md"
13
13
  : "border-slate-300 text-slate-800 hover:bg-slate-100"}`, children: card.cta.label })] }, card.id))) })] }) }));
14
14
  }
@@ -5,5 +5,5 @@ import { Sparkles } from "lucide-react";
5
5
  export function StatementSection({ config }) {
6
6
  const siteConfig = useSiteConfig();
7
7
  const statement = config ? { ...siteConfig.statement, ...config } : siteConfig.statement;
8
- return (_jsxs("section", { className: "py-24 sm:py-32 relative bg-slate-900 text-white overflow-hidden", children: [_jsx("div", { className: "pointer-events-none absolute inset-0 bg-[radial-gradient(#38bdf81a_1px,transparent_1px)] [background-size:24px_24px] opacity-25" }), _jsxs("div", { className: "max-w-5xl mx-auto px-4 sm:px-6 lg:px-8 text-center relative z-10", children: [statement.badge && (_jsxs("div", { className: "inline-flex items-center gap-1.5 px-3.5 py-1 rounded-full bg-white/10 border border-white/15 text-xs font-bold text-sky-400 mb-6 backdrop-blur-md", children: [_jsx(Sparkles, { className: "h-3.5 w-3.5" }), _jsx("span", { children: statement.badge })] })), _jsx("h2", { className: "text-3xl sm:text-5xl font-extrabold tracking-tight leading-tight text-slate-100 max-w-4xl mx-auto", children: statement.headline }), statement.subtext && (_jsx("p", { className: "mt-6 text-base sm:text-lg text-slate-400 max-w-3xl mx-auto leading-relaxed", children: statement.subtext })), statement.floatingIcons && statement.floatingIcons.length > 0 && (_jsx("div", { className: "mt-12 flex flex-wrap items-center justify-center gap-4", children: statement.floatingIcons.map((icon, idx) => (_jsxs("div", { className: "flex items-center gap-2 px-4 py-2 rounded-2xl bg-white/5 border border-white/10 backdrop-blur-md shadow-sm", children: [_jsx("span", { className: "text-lg", children: icon.symbol }), icon.label && _jsx("span", { className: "text-xs font-semibold text-slate-300", children: icon.label })] }, idx))) }))] })] }));
8
+ return (_jsxs("section", { className: "py-24 sm:py-32 relative bg-slate-900 text-white overflow-hidden", children: [_jsx("div", { className: "pointer-events-none absolute inset-0 bg-[radial-gradient(#38bdf81a_1px,transparent_1px)] [background-size:24px_24px] opacity-25" }), _jsxs("div", { className: "max-w-5xl mx-auto px-4 sm:px-6 lg:px-8 text-center relative z-10", children: [statement.badge && (_jsxs("div", { className: "inline-flex items-center gap-1.5 px-3.5 py-1 rounded-full bg-white/10 border border-white/15 text-xs font-bold text-sky-400 mb-6 backdrop-blur-md", children: [_jsx(Sparkles, { className: "h-3.5 w-3.5" }), _jsx("span", { children: statement.badge })] })), _jsx("h2", { className: "text-3xl sm:text-5xl font-normal tracking-tight leading-tight text-slate-100 max-w-4xl mx-auto", children: statement.headline }), statement.subtext && (_jsx("p", { className: "mt-6 text-base sm:text-lg text-slate-400 max-w-3xl mx-auto leading-relaxed", children: statement.subtext })), statement.floatingIcons && statement.floatingIcons.length > 0 && (_jsx("div", { className: "mt-12 flex flex-wrap items-center justify-center gap-4", children: statement.floatingIcons.map((icon, idx) => (_jsxs("div", { className: "flex items-center gap-2 px-4 py-2 rounded-2xl bg-white/5 border border-white/10 backdrop-blur-md shadow-sm", children: [_jsx("span", { className: "text-lg", children: icon.symbol }), icon.label && _jsx("span", { className: "text-xs font-semibold text-slate-300", children: icon.label })] }, idx))) }))] })] }));
9
9
  }
@@ -20,9 +20,9 @@ export function VideoSection({ items: propItems, title: propTitle, subtitle: pro
20
20
  };
21
21
  if (!items.length)
22
22
  return null;
23
- return (_jsxs("section", { id: "videos", className: "py-24 sm:py-32 relative bg-slate-50 overflow-hidden transition-colors duration-200", children: [_jsxs("div", { className: "max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 relative z-10", children: [_jsxs("div", { className: "text-center max-w-3xl mx-auto mb-16", children: [_jsxs("div", { className: "inline-flex items-center gap-1.5 px-3.5 py-1 rounded-full bg-[#012867]/[0.06] border border-[#012867]/15 text-xs font-bold text-[#012867] mb-4 backdrop-blur-md", children: [_jsx(Video, { className: "h-3.5 w-3.5" }), _jsx("span", { children: "Walkthroughs & Demos" })] }), _jsx("h2", { className: "text-3xl sm:text-5xl font-extrabold text-slate-900 tracking-tight", children: title }), subtitle && (_jsx("p", { className: "mt-4 text-base sm:text-lg text-slate-600", children: subtitle }))] }), _jsxs("div", { className: "flex items-center justify-between mb-8", children: [_jsx("div", { className: "flex items-center gap-2 overflow-x-auto pb-2 scrollbar-none", children: items.map((v, idx) => (_jsx("button", { onClick: () => setActiveIdx(idx), className: `px-4 py-2 rounded-xl text-xs sm:text-sm font-semibold transition-all cursor-pointer whitespace-nowrap ${idx === activeIdx
23
+ return (_jsxs("section", { id: "videos", className: "py-24 sm:py-32 relative bg-slate-50 overflow-hidden transition-colors duration-200", children: [_jsxs("div", { className: "max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 relative z-10", children: [_jsxs("div", { className: "text-center max-w-3xl mx-auto mb-16", children: [_jsxs("div", { className: "inline-flex items-center gap-1.5 px-3.5 py-1 rounded-full bg-[#012867]/[0.06] border border-[#012867]/15 text-xs font-bold text-[#012867] mb-4 backdrop-blur-md", children: [_jsx(Video, { className: "h-3.5 w-3.5" }), _jsx("span", { children: "Walkthroughs & Demos" })] }), _jsx("h2", { className: "text-3xl sm:text-5xl font-normal text-slate-900 tracking-tight", children: title }), subtitle && (_jsx("p", { className: "mt-4 text-base sm:text-lg text-slate-600", children: subtitle }))] }), _jsxs("div", { className: "flex items-center justify-between mb-8", children: [_jsx("div", { className: "flex items-center gap-2 overflow-x-auto pb-2 scrollbar-none", children: items.map((v, idx) => (_jsx("button", { onClick: () => setActiveIdx(idx), className: `px-4 py-2 rounded-xl text-xs sm:text-sm font-semibold transition-all cursor-pointer whitespace-nowrap ${idx === activeIdx
24
24
  ? "bg-[#012867] text-white shadow-md"
25
- : "bg-white text-slate-700 hover:bg-slate-200/70 border border-slate-200"}`, children: v.title }, v.id))) }), _jsxs("div", { className: "flex items-center gap-2 shrink-0", children: [_jsx("button", { onClick: handlePrev, "aria-label": "Previous video", className: "p-2 rounded-full bg-white border border-slate-200 text-slate-700 hover:bg-slate-100 transition-colors cursor-pointer", children: _jsx(ChevronLeft, { className: "h-4 w-4" }) }), _jsx("button", { onClick: handleNext, "aria-label": "Next video", className: "p-2 rounded-full bg-white border border-slate-200 text-slate-700 hover:bg-slate-100 transition-colors cursor-pointer", children: _jsx(ChevronRight, { className: "h-4 w-4" }) })] })] }), activeVideo && (_jsxs("div", { className: "grid grid-cols-1 lg:grid-cols-12 gap-8 items-center rounded-3xl bg-white border border-slate-200 p-6 sm:p-10 shadow-xl", children: [_jsxs("div", { className: "lg:col-span-6 space-y-6", children: [_jsxs("div", { className: "inline-flex items-center gap-2 px-3 py-1 rounded-lg bg-[#012867]/[0.06] text-[#012867] font-semibold text-xs border border-[#012867]/15", children: [_jsx("span", { children: activeVideo.badge || activeVideo.title }), _jsx("span", { children: "\u2022" }), _jsx("span", { children: activeVideo.duration })] }), _jsx("h3", { className: "text-2xl sm:text-3xl font-extrabold text-slate-900 leading-tight", children: activeVideo.tagline || activeVideo.title }), _jsx("p", { className: "text-sm sm:text-base text-slate-600 leading-relaxed", children: activeVideo.description }), activeVideo.keyFeatures && activeVideo.keyFeatures.length > 0 && (_jsx("ul", { className: "space-y-2 pt-2", children: activeVideo.keyFeatures.map((kf, kIdx) => (_jsxs("li", { className: "flex items-start gap-2 text-xs sm:text-sm text-slate-700", children: [_jsx("span", { className: "text-[#012867] font-bold", children: "\u2713" }), _jsx("span", { children: kf })] }, kIdx))) })), _jsxs("div", { className: "pt-4 flex flex-wrap gap-4", children: [_jsxs("button", { onClick: () => setModalOpen(true), className: "inline-flex items-center gap-2 px-6 py-3 rounded-full bg-[#012867] hover:bg-[#011f52] text-white font-bold text-sm shadow-md transition-all cursor-pointer", children: [_jsx(Play, { className: "h-4 w-4 fill-white" }), _jsx("span", { children: "Watch Video Demo" })] }), activeVideo.cta && (_jsx("a", { href: activeVideo.cta.href, className: "inline-flex items-center gap-2 px-6 py-3 rounded-full bg-slate-100 hover:bg-slate-200 text-slate-800 font-semibold text-sm transition-all", children: _jsx("span", { children: activeVideo.cta.label }) }))] })] }), _jsx("div", { className: "lg:col-span-6 flex items-center justify-center", children: _jsxs("div", { onClick: () => setModalOpen(true), className: `relative w-full rounded-2xl bg-slate-900 overflow-hidden shadow-2xl group cursor-pointer border border-slate-800 ${activeVideo.orientation === "portrait"
25
+ : "bg-white text-slate-700 hover:bg-slate-200/70 border border-slate-200"}`, children: v.title }, v.id))) }), _jsxs("div", { className: "flex items-center gap-2 shrink-0", children: [_jsx("button", { onClick: handlePrev, "aria-label": "Previous video", className: "p-2 rounded-full bg-white border border-slate-200 text-slate-700 hover:bg-slate-100 transition-colors cursor-pointer", children: _jsx(ChevronLeft, { className: "h-4 w-4" }) }), _jsx("button", { onClick: handleNext, "aria-label": "Next video", className: "p-2 rounded-full bg-white border border-slate-200 text-slate-700 hover:bg-slate-100 transition-colors cursor-pointer", children: _jsx(ChevronRight, { className: "h-4 w-4" }) })] })] }), activeVideo && (_jsxs("div", { className: "grid grid-cols-1 lg:grid-cols-12 gap-8 items-center rounded-3xl bg-white border border-slate-200 p-6 sm:p-10 shadow-xl", children: [_jsxs("div", { className: "lg:col-span-6 space-y-6", children: [_jsxs("div", { className: "inline-flex items-center gap-2 px-3 py-1 rounded-lg bg-[#012867]/[0.06] text-[#012867] font-semibold text-xs border border-[#012867]/15", children: [_jsx("span", { children: activeVideo.badge || activeVideo.title }), _jsx("span", { children: "\u2022" }), _jsx("span", { children: activeVideo.duration })] }), _jsx("h3", { className: "text-2xl sm:text-3xl font-normal text-slate-900 leading-tight", children: activeVideo.tagline || activeVideo.title }), _jsx("p", { className: "text-sm sm:text-base text-slate-600 leading-relaxed", children: activeVideo.description }), activeVideo.keyFeatures && activeVideo.keyFeatures.length > 0 && (_jsx("ul", { className: "space-y-2 pt-2", children: activeVideo.keyFeatures.map((kf, kIdx) => (_jsxs("li", { className: "flex items-start gap-2 text-xs sm:text-sm text-slate-700", children: [_jsx("span", { className: "text-[#012867] font-bold", children: "\u2713" }), _jsx("span", { children: kf })] }, kIdx))) })), _jsxs("div", { className: "pt-4 flex flex-wrap gap-4", children: [_jsxs("button", { onClick: () => setModalOpen(true), className: "inline-flex items-center gap-2 px-6 py-3 rounded-full bg-[#012867] hover:bg-[#011f52] text-white font-bold text-sm shadow-md transition-all cursor-pointer", children: [_jsx(Play, { className: "h-4 w-4 fill-white" }), _jsx("span", { children: "Watch Video Demo" })] }), activeVideo.cta && (_jsx("a", { href: activeVideo.cta.href, className: "inline-flex items-center gap-2 px-6 py-3 rounded-full bg-slate-100 hover:bg-slate-200 text-slate-800 font-semibold text-sm transition-all", children: _jsx("span", { children: activeVideo.cta.label }) }))] })] }), _jsx("div", { className: "lg:col-span-6 flex items-center justify-center", children: _jsxs("div", { onClick: () => setModalOpen(true), className: `relative w-full rounded-2xl bg-slate-900 overflow-hidden shadow-2xl group cursor-pointer border border-slate-800 ${activeVideo.orientation === "portrait"
26
26
  ? "max-w-[280px] aspect-[9/16]"
27
27
  : "aspect-video"}`, children: [_jsx("div", { className: "absolute inset-0 flex items-center justify-center z-20", children: _jsx("div", { className: "h-16 w-16 rounded-full bg-[#012867] text-white flex items-center justify-center shadow-2xl group-hover:scale-110 transition-transform", children: _jsx(Play, { className: "h-7 w-7 fill-white ml-1" }) }) }), _jsx("div", { className: "absolute inset-0 bg-slate-950/40 group-hover:bg-slate-950/20 transition-colors z-10" }), _jsx("div", { className: "absolute bottom-4 left-4 right-4 z-20", children: _jsx("span", { className: "text-xs font-bold text-white bg-black/60 px-2.5 py-1 rounded-md backdrop-blur-sm", children: activeVideo.duration }) })] }) })] }))] }), activeVideo && (_jsx(VideoModal, { isOpen: modalOpen, onClose: () => setModalOpen(false), videoUrl: activeVideo.videoUrl, title: activeVideo.title, badge: activeVideo.badge, orientation: activeVideo.orientation }))] }));
28
28
  }
@@ -0,0 +1,16 @@
1
+ import React from "react";
2
+ export interface BashCommand {
3
+ cmd: string;
4
+ arg?: string;
5
+ comment?: string;
6
+ output?: string;
7
+ }
8
+ export interface BashProps {
9
+ className?: string;
10
+ title?: string;
11
+ subtitle?: string;
12
+ commands?: BashCommand[];
13
+ children?: React.ReactNode;
14
+ }
15
+ export declare function Bash({ className, title, subtitle, commands, children, }: BashProps): React.JSX.Element;
16
+ export default Bash;
@@ -0,0 +1,30 @@
1
+ "use client";
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { Terminal } from "lucide-react";
4
+ import { cn } from "../../lib/utils";
5
+ const defaultCommands = [
6
+ {
7
+ cmd: "git clone",
8
+ arg: "https://github.com/goldlabelapps/nx.git",
9
+ },
10
+ {
11
+ cmd: "cd",
12
+ arg: "nx-private/apps/nx",
13
+ },
14
+ {
15
+ cmd: "pnpm install",
16
+ comment: "# Install dependencies across all packages",
17
+ },
18
+ {
19
+ cmd: "pnpm dev",
20
+ output: "➜ Ready on http://localhost:4525",
21
+ },
22
+ ];
23
+ export function Bash({ className, title = "Quick Start — bash", subtitle = "Fullstack Monorepo", commands, children, }) {
24
+ const items = commands || defaultCommands;
25
+ return (_jsxs("div", { className: cn("max-w-3xl mx-auto text-left rounded-2xl bg-slate-900/90 border border-slate-800 shadow-2xl overflow-hidden backdrop-blur-md", className), children: [_jsxs("div", { className: "flex items-center justify-between px-4 py-3 bg-slate-950 border-b border-slate-800", children: [_jsxs("div", { className: "flex items-center gap-2", children: [_jsx("span", { className: "w-3 h-3 rounded-full bg-rose-500/80 inline-block" }), _jsx("span", { className: "w-3 h-3 rounded-full bg-amber-500/80 inline-block" }), _jsx("span", { className: "w-3 h-3 rounded-full bg-emerald-500/80 inline-block" }), _jsxs("span", { className: "ml-2 text-xs font-mono text-slate-400 flex items-center gap-1.5", children: [_jsx(Terminal, { className: "h-3.5 w-3.5 text-cyan-400" }), title] })] }), subtitle && (_jsx("span", { className: "text-[11px] font-mono text-slate-500 uppercase tracking-wider", children: subtitle }))] }), _jsx("div", { className: "p-5 font-mono text-xs sm:text-sm text-slate-300 space-y-3 bg-slate-950/70", children: children ? (children) : (items.map((item, index) => {
26
+ const isLast = index === items.length - 1 && item.output;
27
+ return (_jsxs("div", { className: cn("flex items-center gap-2", isLast && "pt-1 border-t border-slate-800/80"), children: [_jsx("span", { className: "text-cyan-400 select-none", children: "$" }), _jsx("span", { className: "text-emerald-400 font-semibold", children: item.cmd }), item.arg && _jsx("span", { className: "text-slate-200", children: item.arg }), item.comment && _jsx("span", { className: "text-slate-400", children: item.comment }), item.output && _jsx("span", { className: "text-cyan-300", children: item.output })] }, index));
28
+ })) })] }));
29
+ }
30
+ export default Bash;
@@ -1,6 +1,6 @@
1
1
  "use client";
2
2
  import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
3
- import Link from "next/link";
3
+ import { AppRouterLink as Link } from "@goldlabelapps/uberedux";
4
4
  import { cn } from "../../lib/utils";
5
5
  import { Download, ArrowRight, ChevronDown, Play, ExternalLink, Sparkles, Terminal, Code2, Check, } from "lucide-react";
6
6
  const iconMap = {
@@ -1,5 +1,9 @@
1
+ import React from "react";
2
+ import { ThemeMode } from "../../context/ThemeContext";
1
3
  export interface ThemeToggleProps {
2
4
  className?: string;
5
+ variant?: "segmented" | "button";
3
6
  showLabel?: boolean;
7
+ onChange?: (mode: ThemeMode) => void;
4
8
  }
5
- export declare function ThemeToggle(_props: ThemeToggleProps): null;
9
+ export declare function ThemeToggle({ className, variant, showLabel, onChange, }: ThemeToggleProps): React.JSX.Element;
@@ -1,4 +1,34 @@
1
1
  "use client";
2
- export function ThemeToggle(_props) {
3
- return null;
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { Sun, Moon, Monitor } from "lucide-react";
4
+ import { useTheme } from "../../context/ThemeContext";
5
+ import { cn } from "../../lib/utils";
6
+ export function ThemeToggle({ className, variant = "segmented", showLabel = true, onChange, }) {
7
+ const { mode = "system", setMode, theme, toggleTheme, setTheme } = useTheme();
8
+ if (variant === "button") {
9
+ const isDark = theme === "dark";
10
+ return (_jsx("button", { type: "button", onClick: () => {
11
+ toggleTheme();
12
+ onChange?.(isDark ? "light" : "dark");
13
+ }, "aria-label": isDark ? "Switch to light mode" : "Switch to dark mode", title: isDark ? "Switch to light mode" : "Switch to dark mode", className: cn("inline-flex items-center justify-center h-8 w-8 rounded-full text-[#0f172a] bg-white hover:bg-slate-50 border border-[#0f172a]/15 dark:text-[#f8fafc] dark:bg-[#f8fafc]/10 dark:hover:bg-[#f8fafc]/15 dark:border-[#f8fafc]/30 transition-all duration-200 cursor-pointer", className), children: isDark ? _jsx(Sun, { className: "h-3.5 w-3.5" }) : _jsx(Moon, { className: "h-3.5 w-3.5" }) }));
14
+ }
15
+ const options = [
16
+ { value: "light", label: "Light", icon: _jsx(Sun, { className: "h-4 w-4" }) },
17
+ { value: "dark", label: "Dark", icon: _jsx(Moon, { className: "h-4 w-4" }) },
18
+ { value: "system", label: "System", icon: _jsx(Monitor, { className: "h-4 w-4" }) },
19
+ ];
20
+ return (_jsx("div", { role: "radiogroup", "aria-label": "Theme mode", className: cn("grid grid-cols-3 gap-1 p-1 bg-slate-100/90 dark:bg-slate-800/80 rounded-xl border border-slate-200/80 dark:border-slate-700/80", className), children: options.map((option) => {
21
+ const isActive = mode === option.value;
22
+ return (_jsxs("button", { type: "button", role: "radio", "aria-checked": isActive, onClick: () => {
23
+ if (setMode) {
24
+ setMode(option.value);
25
+ }
26
+ else if (option.value !== "system") {
27
+ setTheme(option.value);
28
+ }
29
+ onChange?.(option.value);
30
+ }, className: cn("flex items-center justify-center gap-1.5 py-2 px-2.5 rounded-lg text-xs font-bold transition-all duration-200 cursor-pointer select-none", isActive
31
+ ? "bg-white dark:bg-slate-700 text-[#0f172a] dark:text-white shadow-sm border border-slate-200/60 dark:border-slate-600/60"
32
+ : "text-slate-600 dark:text-slate-400 hover:text-slate-900 dark:hover:text-slate-200 hover:bg-slate-200/50 dark:hover:bg-slate-700/50"), children: [option.icon, showLabel && _jsx("span", { children: option.label })] }, option.value));
33
+ }) }));
4
34
  }
@@ -1,6 +1,6 @@
1
1
  "use client";
2
2
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
- import Link from "next/link";
3
+ import { AppRouterLink as Link } from "@goldlabelapps/uberedux";
4
4
  import { Video } from "lucide-react";
5
5
  import { Button } from "../ui/Button";
6
6
  export function VideoLayout({ videos, currentVideo }) {
@@ -10,5 +10,5 @@ export function VideoLayout({ videos, currentVideo }) {
10
10
  return (_jsx("li", { children: _jsxs(Link, { href: `/videos/${v.id}`, className: `block p-3 rounded-2xl transition-all ${isActive
11
11
  ? "bg-[#012867] text-white shadow-md"
12
12
  : "hover:bg-slate-100 text-slate-800"}`, children: [_jsx("div", { className: "font-bold text-xs", children: v.title }), _jsx("div", { className: "text-[11px] opacity-80 line-clamp-1", children: v.tagline })] }) }, v.id));
13
- }) })] }) }), _jsx("main", { className: "lg:col-span-8 space-y-6", children: _jsxs("div", { className: "rounded-3xl bg-white border border-slate-200 p-6 sm:p-10 shadow-xl space-y-6", children: [_jsxs("div", { className: "flex items-center justify-between gap-4", children: [_jsx("h1", { className: "text-2xl sm:text-3xl font-extrabold text-slate-900", children: currentVideo.title }), _jsxs("span", { className: "text-xs font-bold px-3 py-1 rounded-full bg-slate-100 text-slate-700", children: ["Duration: ", currentVideo.duration] })] }), _jsx("div", { className: `w-full bg-black rounded-2xl overflow-hidden flex items-center justify-center ${isPortrait ? "aspect-[9/16] max-w-[320px] mx-auto" : "aspect-video"}`, children: _jsx("video", { src: currentVideo.videoUrl, controls: true, className: "w-full h-full object-contain" }) }), _jsx("p", { className: "text-slate-600 text-sm leading-relaxed", children: currentVideo.description }), currentVideo.keyFeatures && (_jsxs("div", { className: "pt-4 border-t border-slate-100", children: [_jsx("h4", { className: "text-xs font-bold uppercase tracking-wider text-slate-900 mb-3", children: "Key Walkthrough Highlights" }), _jsx("ul", { className: "space-y-2", children: currentVideo.keyFeatures.map((kf, idx) => (_jsxs("li", { className: "flex items-start gap-2 text-xs sm:text-sm text-slate-700", children: [_jsx("span", { className: "text-[#012867] font-bold", children: "\u2713" }), _jsx("span", { children: kf })] }, idx))) })] })), currentVideo.cta && (_jsx("div", { className: "pt-4", children: _jsx(Button, { href: currentVideo.cta.href, variant: "primary", children: currentVideo.cta.label }) }))] }) })] }) }) }));
13
+ }) })] }) }), _jsx("main", { className: "lg:col-span-8 space-y-6", children: _jsxs("div", { className: "rounded-3xl bg-white border border-slate-200 p-6 sm:p-10 shadow-xl space-y-6", children: [_jsxs("div", { className: "flex items-center justify-between gap-4", children: [_jsx("h1", { className: "text-2xl sm:text-3xl font-normal text-slate-900", children: currentVideo.title }), _jsxs("span", { className: "text-xs font-bold px-3 py-1 rounded-full bg-slate-100 text-slate-700", children: ["Duration: ", currentVideo.duration] })] }), _jsx("div", { className: `w-full bg-black rounded-2xl overflow-hidden flex items-center justify-center ${isPortrait ? "aspect-[9/16] max-w-[320px] mx-auto" : "aspect-video"}`, children: _jsx("video", { src: currentVideo.videoUrl, controls: true, className: "w-full h-full object-contain" }) }), _jsx("p", { className: "text-slate-600 text-sm leading-relaxed", children: currentVideo.description }), currentVideo.keyFeatures && (_jsxs("div", { className: "pt-4 border-t border-slate-100", children: [_jsx("h4", { className: "text-xs font-normal uppercase tracking-wider text-slate-900 mb-3", children: "Key Walkthrough Highlights" }), _jsx("ul", { className: "space-y-2", children: currentVideo.keyFeatures.map((kf, idx) => (_jsxs("li", { className: "flex items-start gap-2 text-xs sm:text-sm text-slate-700", children: [_jsx("span", { className: "text-[#012867] font-bold", children: "\u2713" }), _jsx("span", { children: kf })] }, idx))) })] })), currentVideo.cta && (_jsx("div", { className: "pt-4", children: _jsx(Button, { href: currentVideo.cta.href, variant: "primary", children: currentVideo.cta.label }) }))] }) })] }) }) }));
14
14
  }
@@ -1,10 +1,14 @@
1
1
  import React from "react";
2
2
  export type Theme = "light" | "dark";
3
+ export type ThemeMode = "light" | "dark" | "system";
3
4
  export interface ThemeContextType {
4
5
  theme: Theme;
6
+ mode: ThemeMode;
5
7
  setTheme: (theme: Theme) => void;
8
+ setMode: (mode: ThemeMode) => void;
6
9
  toggleTheme: () => void;
7
10
  }
11
+ export declare const ThemeContext: React.Context<ThemeContextType | undefined>;
8
12
  export declare function ThemeProvider({ children }: {
9
13
  children: React.ReactNode;
10
14
  }): React.JSX.Element;
@@ -1,16 +1,17 @@
1
1
  "use client";
2
2
  import { jsx as _jsx } from "react/jsx-runtime";
3
3
  import { createContext, useContext, useEffect, useState } from "react";
4
- const ThemeContext = createContext(undefined);
4
+ export const ThemeContext = createContext(undefined);
5
5
  export function ThemeProvider({ children }) {
6
- const [theme, setThemeState] = useState("light");
6
+ const [mode, setModeState] = useState("dark");
7
+ const [theme, setThemeState] = useState("dark");
7
8
  const [_mounted, setMounted] = useState(false);
8
9
  useEffect(() => {
9
10
  setMounted(true);
10
11
  const root = document.documentElement;
11
- root.classList.remove("dark");
12
- root.classList.add("light");
13
- root.style.colorScheme = "light";
12
+ root.classList.remove("light");
13
+ root.classList.add("dark");
14
+ root.style.colorScheme = "dark";
14
15
  try {
15
16
  localStorage.removeItem("theme");
16
17
  }
@@ -18,28 +19,32 @@ export function ThemeProvider({ children }) {
18
19
  // Ignore storage restrictions
19
20
  }
20
21
  }, []);
21
- const setTheme = (_newTheme) => {
22
- setThemeState("light");
22
+ const setMode = (newMode) => {
23
+ setModeState(newMode);
24
+ const resolvedTheme = newMode === "system" ? "dark" : newMode;
25
+ setThemeState(resolvedTheme);
23
26
  const root = document.documentElement;
24
- root.classList.remove("dark");
25
- root.classList.add("light");
26
- root.style.colorScheme = "light";
27
+ root.classList.remove(resolvedTheme === "dark" ? "light" : "dark");
28
+ root.classList.add(resolvedTheme);
29
+ root.style.colorScheme = resolvedTheme;
30
+ };
31
+ const setTheme = (newTheme) => {
32
+ setMode(newTheme);
27
33
  };
28
34
  const toggleTheme = () => {
29
- setThemeState("light");
30
- const root = document.documentElement;
31
- root.classList.remove("dark");
32
- root.classList.add("light");
33
- root.style.colorScheme = "light";
35
+ const next = mode === "light" ? "dark" : mode === "dark" ? "system" : "light";
36
+ setMode(next);
34
37
  };
35
- return (_jsx(ThemeContext.Provider, { value: { theme, setTheme, toggleTheme }, children: children }));
38
+ return (_jsx(ThemeContext.Provider, { value: { theme, mode, setTheme, setMode, toggleTheme }, children: children }));
36
39
  }
37
40
  export function useTheme() {
38
41
  const context = useContext(ThemeContext);
39
42
  if (!context) {
40
43
  return {
41
- theme: "light",
44
+ theme: "dark",
45
+ mode: "dark",
42
46
  setTheme: () => { },
47
+ setMode: () => { },
43
48
  toggleTheme: () => { },
44
49
  };
45
50
  }