@goldlabelapps/theme 3.0.8 → 3.2.8

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 (75) hide show
  1. package/README.md +1 -1
  2. package/dist/components/RenderMarkdown.d.ts +7 -0
  3. package/dist/components/RenderMarkdown.js +118 -0
  4. package/dist/components/download/DownloadBanner.js +1 -1
  5. package/dist/components/footer/Footer.js +1 -1
  6. package/dist/components/guide/MarkdownContent.js +1 -1
  7. package/dist/components/hero/VideoModal.js +0 -1
  8. package/dist/components/navigation/LogoContextMenu.d.ts +0 -1
  9. package/dist/components/navigation/LogoContextMenu.js +0 -1
  10. package/dist/components/navigation/MobileMenu.js +15 -6
  11. package/dist/components/navigation/ShareMenu.d.ts +1 -1
  12. package/dist/components/navigation/ShareMenu.js +1 -2
  13. package/dist/components/showcase/FeatureExplorer.js +1 -1
  14. package/dist/components/ui/Card.d.ts +2 -1
  15. package/dist/components/ui/Card.js +29 -7
  16. package/dist/context/ConfigContext.js +1 -1
  17. package/dist/context/ThemeContext.js +2 -2
  18. package/dist/data/og-images.json +476 -0
  19. package/dist/design-system/components/DesignSystemProvider/DesignSystemProvider.js +1 -1
  20. package/dist/design-system/components/feedback/Alert/Alert.js +42 -5
  21. package/dist/design-system/components/feedback/Card/Card.d.ts +1 -1
  22. package/dist/design-system/components/feedback/Card/Card.js +10 -6
  23. package/dist/design-system/components/feedback/Field/Field.d.ts +1 -1
  24. package/dist/design-system/components/feedback/Field/Field.js +2 -2
  25. package/dist/design-system/components/icons/SVGIcons/BlokeyIcon.d.ts +2 -1
  26. package/dist/design-system/components/icons/SVGIcons/BlokeyIcon.js +1 -1
  27. package/dist/design-system/components/icons/SVGIcons/ChromeIcon.d.ts +2 -1
  28. package/dist/design-system/components/icons/SVGIcons/ChromeIcon.js +1 -1
  29. package/dist/design-system/components/icons/SVGIcons/DesktopIcon.d.ts +2 -1
  30. package/dist/design-system/components/icons/SVGIcons/DesktopIcon.js +1 -1
  31. package/dist/design-system/components/icons/SVGIcons/EdgeIcon.d.ts +2 -1
  32. package/dist/design-system/components/icons/SVGIcons/EdgeIcon.js +1 -1
  33. package/dist/design-system/components/icons/SVGIcons/FallmanagerIcon.d.ts +2 -1
  34. package/dist/design-system/components/icons/SVGIcons/FirefoxIcon.d.ts +2 -1
  35. package/dist/design-system/components/icons/SVGIcons/FirefoxIcon.js +1 -1
  36. package/dist/design-system/components/icons/SVGIcons/FlickrIcon.d.ts +2 -1
  37. package/dist/design-system/components/icons/SVGIcons/FlickrIcon.js +1 -1
  38. package/dist/design-system/components/icons/SVGIcons/GatsbyIcon.d.ts +2 -1
  39. package/dist/design-system/components/icons/SVGIcons/GoldenticketIcon.d.ts +2 -1
  40. package/dist/design-system/components/icons/SVGIcons/GoldenticketIcon.js +1 -1
  41. package/dist/design-system/components/icons/SVGIcons/GoldlabelOutlined.d.ts +2 -1
  42. package/dist/design-system/components/icons/SVGIcons/GraphqlIcon.d.ts +2 -1
  43. package/dist/design-system/components/icons/SVGIcons/GraphqlIcon.js +1 -1
  44. package/dist/design-system/components/icons/SVGIcons/IphoneIcon.d.ts +2 -1
  45. package/dist/design-system/components/icons/SVGIcons/IphoneIcon.js +1 -1
  46. package/dist/design-system/components/icons/SVGIcons/LinuxIcon.d.ts +2 -1
  47. package/dist/design-system/components/icons/SVGIcons/LinuxIcon.js +1 -1
  48. package/dist/design-system/components/icons/SVGIcons/MacIcon.d.ts +2 -1
  49. package/dist/design-system/components/icons/SVGIcons/MacIcon.js +1 -1
  50. package/dist/design-system/components/icons/SVGIcons/MacromediaIcon.d.ts +2 -1
  51. package/dist/design-system/components/icons/SVGIcons/MacromediaIcon.js +1 -1
  52. package/dist/design-system/components/icons/SVGIcons/OliverIcon.d.ts +2 -1
  53. package/dist/design-system/components/icons/SVGIcons/OpenAIIcon.d.ts +2 -1
  54. package/dist/design-system/components/icons/SVGIcons/PingpongballIcon.d.ts +2 -1
  55. package/dist/design-system/components/icons/SVGIcons/SafariIcon.d.ts +2 -1
  56. package/dist/design-system/components/icons/SVGIcons/SafariIcon.js +1 -1
  57. package/dist/design-system/components/icons/SVGIcons/WindowsIcon.d.ts +2 -1
  58. package/dist/design-system/components/icons/SVGIcons/WindowsIcon.js +1 -1
  59. package/dist/design-system/components/icons/SVGIcons/WordpressIcon.d.ts +2 -1
  60. package/dist/design-system/components/icons/SVGIcons/WordpressIcon.js +1 -1
  61. package/dist/design-system/components/icons/SVGIcons/XboxIcon.d.ts +2 -1
  62. package/dist/design-system/components/icons/SVGIcons/XboxIcon.js +1 -1
  63. package/dist/design-system/components/images/FeaturedImage/FeaturedImage.d.ts +1 -1
  64. package/dist/design-system/components/images/FeaturedImage/FeaturedImage.js +71 -23
  65. package/dist/design-system/components/images/FeaturedImage/types.d.ts +1 -1
  66. package/dist/design-system/components/layout/Footer/Footer.js +1 -1
  67. package/dist/design-system/components/nxStyle.d.ts +60 -0
  68. package/dist/design-system/components/nxStyle.js +54 -14
  69. package/dist/index.d.ts +1 -0
  70. package/dist/index.js +1 -0
  71. package/dist/styles/globals.css +150 -1
  72. package/dist/styles/site-layout.css +1 -1
  73. package/dist/styles/theme.js +76 -4
  74. package/dist/styles/tokens.css +65 -0
  75. package/package.json +5 -3
package/README.md CHANGED
@@ -49,7 +49,7 @@ export default function RootLayout({ children }: { children: React.ReactNode })
49
49
 
50
50
  ## Reference Implementation
51
51
 
52
- The [`apps/template`](../../apps/template) application serves as the complete reference implementation demonstrating how to build a fully config-driven Next.js app using `@goldlabelapps/theme`.
52
+ The [`apps/nx`](../../apps/nx) application serves as the complete reference implementation demonstrating how to build a fully config-driven Next.js app using `@goldlabelapps/theme`.
53
53
 
54
54
  ## License
55
55
 
@@ -0,0 +1,7 @@
1
+ import * as React from 'react';
2
+ export type I_RenderMarkdown = {
3
+ children: React.ReactNode;
4
+ config?: Record<string, unknown>;
5
+ slug?: string;
6
+ };
7
+ export default function RenderMarkdown({ children, config, }: I_RenderMarkdown): React.JSX.Element;
@@ -0,0 +1,118 @@
1
+ 'use client';
2
+ import { jsx as _jsx } from "react/jsx-runtime";
3
+ import * as React from 'react';
4
+ import ReactMarkdown from 'react-markdown';
5
+ import { CleverTextShortcode, FlashMovieShortcode } from '@goldlabelapps/flash';
6
+ export default function RenderMarkdown({ children = '', config, }) {
7
+ // --- Normalize children to array to prevent map errors ---
8
+ const normalizeChildren = (children) => Array.isArray(children) ? children : [children];
9
+ const isBlockLikeNode = (node) => {
10
+ if (!React.isValidElement(node))
11
+ return false;
12
+ if (node.type === React.Fragment)
13
+ return false;
14
+ if (typeof node.type !== 'string')
15
+ return true;
16
+ const inlineTags = new Set([
17
+ 'a',
18
+ 'abbr',
19
+ 'b',
20
+ 'bdi',
21
+ 'bdo',
22
+ 'br',
23
+ 'cite',
24
+ 'code',
25
+ 'data',
26
+ 'dfn',
27
+ 'em',
28
+ 'i',
29
+ 'img',
30
+ 'kbd',
31
+ 'label',
32
+ 'mark',
33
+ 'q',
34
+ 'ruby',
35
+ 's',
36
+ 'samp',
37
+ 'small',
38
+ 'span',
39
+ 'strong',
40
+ 'sub',
41
+ 'sup',
42
+ 'time',
43
+ 'u',
44
+ 'var',
45
+ 'wbr',
46
+ ]);
47
+ return !inlineTags.has(node.type);
48
+ };
49
+ const renderChildrenWithShortcodes = (children) => normalizeChildren(children).map((child, index) => {
50
+ const renderedChild = typeof child === 'string' ? renderShortcode(child) : child;
51
+ if (React.isValidElement(renderedChild)) {
52
+ return React.cloneElement(renderedChild, {
53
+ key: renderedChild.key ?? `md-${index}`,
54
+ });
55
+ }
56
+ return renderedChild;
57
+ });
58
+ // --- Shortcode parser ---
59
+ const renderShortcode = (text) => {
60
+ const parseShortcode = (regex, Component, extraProps = {}) => {
61
+ const match = text.match(regex);
62
+ if (!match)
63
+ return null;
64
+ const attrs = match[1];
65
+ const props = {};
66
+ const attrRegex = /(\w+)="(.*?)"/g;
67
+ let attrMatch;
68
+ while ((attrMatch = attrRegex.exec(attrs)) !== null) {
69
+ let val = attrMatch[2];
70
+ if (!isNaN(Number(val))) {
71
+ val = Number(val);
72
+ }
73
+ else if (val === 'true' || val === 'false') {
74
+ val = val === 'true';
75
+ }
76
+ props[attrMatch[1]] = val;
77
+ }
78
+ return _jsx(Component, { ...props, ...extraProps, config: config });
79
+ };
80
+ // CleverText
81
+ const cleverText = parseShortcode(/\[CleverText\s+(.*?)\]/, CleverTextShortcode);
82
+ if (cleverText)
83
+ return cleverText;
84
+ // FlashMovie
85
+ const flashMovie = parseShortcode(/\[FlashMovie\s+(.*?)\]/, FlashMovieShortcode);
86
+ if (flashMovie)
87
+ return flashMovie;
88
+ // fallback: simply return text
89
+ return text;
90
+ };
91
+ return (_jsx("div", { children: _jsx(ReactMarkdown, { components: {
92
+ h1: ({ children }) => _jsx("h1", { children: children }),
93
+ h2: ({ children }) => _jsx("h2", { children: children }),
94
+ h3: ({ children }) => _jsx("h3", { children: children }),
95
+ p: ({ children }) => {
96
+ const renderedChildren = renderChildrenWithShortcodes(children);
97
+ const hasBlockChild = renderedChildren.some(isBlockLikeNode);
98
+ if (hasBlockChild) {
99
+ return _jsx("div", { children: renderedChildren });
100
+ }
101
+ return _jsx("p", { children: renderedChildren });
102
+ },
103
+ li: ({ children }) => {
104
+ const renderedChildren = renderChildrenWithShortcodes(children);
105
+ const hasBlockChild = renderedChildren.some(isBlockLikeNode);
106
+ if (hasBlockChild) {
107
+ return _jsx("li", { children: renderedChildren });
108
+ }
109
+ return _jsx("li", { children: _jsx("span", { children: renderedChildren }) });
110
+ },
111
+ strong: ({ children }) => _jsx("span", { children: children }),
112
+ em: ({ children }) => _jsx("em", { children: children }),
113
+ a: ({ href = '', children }) => {
114
+ const isExternal = /^https?:\/\//.test(href);
115
+ return (_jsx("a", { href: href, target: isExternal ? '_blank' : '_self', rel: isExternal ? 'noopener noreferrer' : undefined, children: children }));
116
+ },
117
+ }, children: children }) }));
118
+ }
@@ -33,5 +33,5 @@ export function DownloadBanner({ config }) {
33
33
  // ignore
34
34
  }
35
35
  };
36
- return (_jsxs("section", { id: "download", className: "py-24 sm:py-36 relative bg-white overflow-hidden transition-colors duration-200", children: [_jsx("a", { id: "signup", "aria-hidden": "true", className: "sr-only", children: "Sign up" }), _jsx("div", { className: "pointer-events-none absolute top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2 w-[700px] sm:w-[1000px] h-[500px] bg-gradient-to-tr from-[#012867]/15 via-slate-500/10 to-slate-400/10 rounded-full blur-3xl opacity-75" }), _jsx("div", { className: "max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 relative z-10", children: _jsxs("div", { className: "rounded-3xl sm:rounded-[40px] bg-gradient-to-b from-slate-50 via-white to-slate-50 border border-slate-200 p-8 sm:p-14 lg:p-20 shadow-2xl relative overflow-hidden text-center", children: [_jsx("div", { className: "inline-flex items-center gap-2 px-3.5 py-1 rounded-full bg-[#012867]/[0.06] border border-[#012867]/15 text-xs font-bold text-[#012867] mb-6 backdrop-blur-md", children: _jsx("span", { children: authCta.badge }) }), _jsx("h2", { className: "text-3xl sm:text-5xl lg:text-6xl font-extrabold text-slate-900 tracking-tight max-w-3xl mx-auto leading-tight mb-4", children: authCta.title }), _jsx("p", { className: "text-base sm:text-lg text-slate-600 max-w-2xl mx-auto leading-relaxed mb-10", children: authCta.subtitle }), !submitted ? (_jsxs("form", { onSubmit: handleEmailSubmit, className: "max-w-md mx-auto mb-8 flex flex-col sm:flex-row gap-3", children: [_jsxs("div", { className: "relative flex-1", children: [_jsx(Mail, { className: "absolute left-4 top-1/2 -translate-y-1/2 h-4 w-4 text-slate-400" }), _jsx("input", { type: "email", required: true, value: email, onChange: (e) => setEmail(e.target.value), placeholder: "Enter your business email", className: "w-full pl-11 pr-4 py-3 rounded-full bg-white border border-slate-300 text-slate-900 text-sm focus:outline-none focus:ring-2 focus:ring-[#012867] shadow-inner" })] }), _jsx(Button, { type: "submit", variant: "primary", size: "md", children: "Get Started" })] })) : (_jsxs("div", { className: "max-w-md mx-auto mb-8 p-4 rounded-2xl bg-emerald-50 border border-emerald-200 text-emerald-800 text-sm font-semibold flex items-center justify-center gap-2", children: [_jsx(CheckCircle2, { className: "h-5 w-5 text-emerald-600" }), _jsxs("span", { children: ["Setup guide & download dispatched to ", email] })] })), _jsxs("div", { className: "flex flex-wrap items-center justify-center gap-4 mb-8", children: [_jsx(Button, { href: authCta.primaryCta.href, variant: "primary", size: "lg", children: authCta.primaryCta.label }), _jsx(Button, { href: authCta.secondaryCta.href, variant: "secondary", size: "lg", children: authCta.secondaryCta.label })] }), authCta.cliQuickInstall && (_jsxs("div", { className: "inline-flex items-center gap-3 px-4 py-2 rounded-2xl bg-slate-900 text-slate-200 text-xs font-mono border border-slate-800 shadow-md", children: [_jsx(Terminal, { className: "h-4 w-4 text-emerald-400" }), _jsx("span", { children: authCta.cliQuickInstall.command }), _jsx("button", { type: "button", onClick: handleCopyCommand, className: "p-1 text-slate-400 hover:text-white transition-colors cursor-pointer", children: copied ? _jsx(Check, { className: "h-3.5 w-3.5 text-emerald-400" }) : _jsx(Copy, { className: "h-3.5 w-3.5" }) })] }))] }) })] }));
36
+ return (_jsxs("section", { id: "download", className: "py-24 sm:py-36 relative bg-white overflow-hidden transition-colors duration-200", children: [_jsx("a", { id: "signup", "aria-hidden": "true", className: "sr-only", children: "Sign up" }), _jsx("div", { className: "pointer-events-none absolute top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2 w-[700px] sm:w-[1000px] h-[500px] bg-gradient-to-tr from-[#012867]/15 via-slate-500/10 to-slate-400/10 rounded-full blur-3xl opacity-75" }), _jsx("div", { className: "max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 relative z-10", children: _jsxs("div", { className: "rounded-3xl sm:rounded-[40px] bg-gradient-to-b from-slate-50 via-white to-slate-50 border border-slate-200 p-8 sm:p-14 lg:p-20 shadow-2xl relative overflow-hidden text-center", children: [_jsx("div", { className: "inline-flex items-center gap-2 px-3.5 py-1 rounded-full bg-[#012867]/[0.06] border border-[#012867]/15 text-xs font-bold text-[#012867] mb-6 backdrop-blur-md", children: _jsx("span", { children: authCta.badge }) }), _jsx("h2", { className: "text-3xl sm:text-5xl lg:text-6xl font-extrabold text-slate-900 tracking-tight max-w-3xl mx-auto leading-tight mb-4", children: authCta.title }), _jsx("p", { className: "text-base sm:text-lg text-slate-600 max-w-2xl mx-auto leading-relaxed mb-10", children: authCta.subtitle }), !submitted ? (_jsxs("form", { onSubmit: handleEmailSubmit, className: "max-w-md mx-auto mb-8 flex flex-col sm:flex-row gap-3", children: [_jsxs("div", { className: "relative flex-1", children: [_jsx(Mail, { className: "absolute left-4 top-1/2 -translate-y-1/2 h-4 w-4 text-slate-400" }), _jsx("input", { type: "email", required: true, value: email, onChange: (e) => setEmail(e.target.value), placeholder: "Enter your business email", className: "w-full pl-11 pr-4 py-3 rounded-full bg-white dark:bg-slate-800 border border-slate-300 dark:border-slate-700 text-slate-900 dark:text-slate-100 text-sm focus:outline-none focus:ring-2 focus:ring-[#012867] dark:focus:ring-blue-400 shadow-inner" })] }), _jsx(Button, { type: "submit", variant: "primary", size: "md", children: "Get Started" })] })) : (_jsxs("div", { className: "max-w-md mx-auto mb-8 p-4 rounded-2xl bg-emerald-50 border border-emerald-200 text-emerald-800 text-sm font-semibold flex items-center justify-center gap-2", children: [_jsx(CheckCircle2, { className: "h-5 w-5 text-emerald-600" }), _jsxs("span", { children: ["Setup guide & download dispatched to ", email] })] })), _jsxs("div", { className: "flex flex-wrap items-center justify-center gap-4 mb-8", children: [_jsx(Button, { href: authCta.primaryCta.href, variant: "primary", size: "lg", children: authCta.primaryCta.label }), _jsx(Button, { href: authCta.secondaryCta.href, variant: "secondary", size: "lg", children: authCta.secondaryCta.label })] }), authCta.cliQuickInstall && (_jsxs("div", { className: "inline-flex items-center gap-3 px-4 py-2 rounded-2xl bg-slate-900 text-slate-200 text-xs font-mono border border-slate-800 shadow-md", children: [_jsx(Terminal, { className: "h-4 w-4 text-emerald-400" }), _jsx("span", { children: authCta.cliQuickInstall.command }), _jsx("button", { type: "button", onClick: handleCopyCommand, className: "p-1 text-slate-400 hover:text-white transition-colors cursor-pointer", children: copied ? _jsx(Check, { className: "h-3.5 w-3.5 text-emerald-400" }) : _jsx(Copy, { className: "h-3.5 w-3.5" }) })] }))] }) })] }));
37
37
  }
@@ -6,5 +6,5 @@ import { BrandLogo } from "../navigation/LogoContextMenu";
6
6
  import { ExternalLink } from "lucide-react";
7
7
  export function Footer() {
8
8
  const siteConfig = useSiteConfig();
9
- return (_jsx("footer", { className: "bg-slate-50 border-t border-slate-200 text-slate-500 text-xs sm:text-sm transition-colors duration-200", children: _jsxs("div", { className: "max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 py-16 sm:py-20", children: [_jsxs("div", { className: "flex flex-col md:flex-row items-start md:items-center justify-between gap-6 pb-12 border-b border-slate-200", children: [_jsxs("div", { className: "flex items-center gap-3", children: [_jsx(BrandLogo, {}), _jsx("span", { className: "text-slate-300 font-mono text-xs", children: "\u2022" }), _jsx("span", { className: "text-slate-700 font-medium", children: siteConfig.footer.tagline })] }), _jsx("div", { className: "text-xs text-slate-500", children: siteConfig.footer.address || "Goldlabel Apps" })] }), _jsx("div", { className: "grid grid-cols-2 md:grid-cols-4 gap-8 py-12", children: siteConfig.footer.columns.map((col, idx) => (_jsxs("div", { className: "space-y-4", children: [_jsx("h4", { className: "text-xs font-bold text-slate-900 uppercase tracking-wider", children: col.title }), _jsx("ul", { className: "space-y-2.5", children: col.links.map((link, lIdx) => (_jsx("li", { children: link.external ? (_jsxs("a", { href: link.href, target: "_blank", rel: "noopener noreferrer", className: "inline-flex items-center gap-1 text-slate-600 hover:text-[#012867] transition-colors", children: [_jsx("span", { children: link.label }), _jsx(ExternalLink, { className: "h-3 w-3 text-slate-400" })] })) : (_jsx(Link, { href: link.href, className: "text-slate-600 hover:text-[#012867] transition-colors", children: link.label })) }, lIdx))) })] }, idx))) }), _jsxs("div", { className: "pt-8 border-t border-slate-200 flex flex-col md:flex-row items-center justify-between gap-4 text-xs text-slate-500", children: [_jsx("div", { className: "flex flex-wrap items-center gap-x-6 gap-y-2", children: siteConfig.footer.bottomLinks.map((item, idx) => (_jsx("a", { href: item.href, className: "hover:text-[#012867] transition-colors", children: item.label }, idx))) }), _jsx("div", { children: siteConfig.footer.copyright })] })] }) }));
9
+ return (_jsx("footer", { className: "bg-slate-50 dark:bg-slate-900 border-t border-slate-200 dark:border-slate-800 text-slate-500 dark:text-slate-400 text-xs sm:text-sm transition-colors duration-200", children: _jsxs("div", { className: "max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 py-16 sm:py-20", children: [_jsxs("div", { className: "flex flex-col md:flex-row items-start md:items-center justify-between gap-6 pb-12 border-b border-slate-200 dark:border-slate-800", children: [_jsxs("div", { className: "flex items-center gap-3", children: [_jsx(BrandLogo, {}), _jsx("span", { className: "text-slate-300 dark:text-slate-600 font-mono text-xs", children: "\u2022" }), _jsx("span", { className: "text-slate-700 dark:text-slate-200 font-medium", children: siteConfig.footer.tagline })] }), _jsx("div", { className: "text-xs text-slate-500 dark:text-slate-400", children: siteConfig.footer.address || "Goldlabel Apps" })] }), _jsx("div", { className: "grid grid-cols-2 md:grid-cols-4 gap-8 py-12", children: siteConfig.footer.columns.map((col, idx) => (_jsxs("div", { className: "space-y-4", children: [_jsx("h4", { className: "text-xs font-bold text-slate-900 dark:text-slate-100 uppercase tracking-wider", children: col.title }), _jsx("ul", { className: "space-y-2.5", children: col.links.map((link, lIdx) => (_jsx("li", { children: !link.href || link.href === "#" ? (_jsx("span", { className: "text-slate-600 dark:text-slate-300", children: link.label })) : link.external ? (_jsxs("a", { href: link.href, target: "_blank", rel: "noopener noreferrer", className: "inline-flex items-center gap-1 text-slate-600 dark:text-slate-300 hover:text-[#012867] dark:hover:text-white transition-colors", children: [_jsx("span", { children: link.label }), _jsx(ExternalLink, { className: "h-3 w-3 text-slate-400 dark:text-slate-500" })] })) : (_jsx(Link, { href: link.href, className: "text-slate-600 dark:text-slate-300 hover:text-[#012867] dark:hover:text-white transition-colors", children: link.label })) }, lIdx))) })] }, idx))) }), _jsxs("div", { className: "pt-8 border-t border-slate-200 dark:border-slate-800 flex flex-col md:flex-row items-center justify-between gap-4 text-xs text-slate-500 dark:text-slate-400", children: [_jsx("div", { className: "flex flex-wrap items-center gap-x-6 gap-y-2", children: siteConfig.footer.bottomLinks.map((item, idx) => (_jsx(Link, { href: item.href, className: "hover:text-[#012867] dark:hover:text-white transition-colors", children: item.label }, idx))) }), _jsx("div", { children: siteConfig.footer.copyright })] })] }) }));
10
10
  }
@@ -2,5 +2,5 @@
2
2
  import { jsx as _jsx } from "react/jsx-runtime";
3
3
  export function MarkdownContent({ content }) {
4
4
  // Simple markdown renderer for headers, tables, code blocks, and lists
5
- return (_jsx("div", { className: "prose prose-slate max-w-none text-slate-800 leading-relaxed font-sans", children: _jsx("div", { dangerouslySetInnerHTML: { __html: content } }) }));
5
+ return (_jsx("div", { className: "prose prose-slate dark:prose-invert max-w-none text-slate-800 dark:text-slate-100 dark:prose-a:text-sky-400 dark:prose-a:hover:text-sky-300 leading-relaxed font-sans", children: _jsx("div", { dangerouslySetInnerHTML: { __html: content } }) }));
6
6
  }
@@ -27,7 +27,6 @@ export function VideoModal({ isOpen, onClose, videoUrl, title = "Video Preview",
27
27
  aspectRatio === "9/16" ||
28
28
  aspectRatio === "portrait" ||
29
29
  videoUrl.toLowerCase().includes("portrait") ||
30
- videoUrl.toLowerCase().includes("echopay.mp4") ||
31
30
  videoUrl.toLowerCase().includes("two.mp4") ||
32
31
  videoUrl.toLowerCase().includes("builders-merchant");
33
32
  const isLocalMp4 = videoUrl.endsWith(".mp4") ||
@@ -2,6 +2,5 @@ import React from "react";
2
2
  export declare function BrandLogo({ className }: {
3
3
  className?: string;
4
4
  }): React.JSX.Element;
5
- export declare const EchoPayLogo: typeof BrandLogo;
6
5
  export declare const NxLogo: typeof BrandLogo;
7
6
  export declare function LogoContextMenu(): React.JSX.Element;
@@ -9,7 +9,6 @@ export function BrandLogo({ className = "h-8 w-auto" }) {
9
9
  const siteConfig = useSiteConfig();
10
10
  return (_jsxs("div", { className: `inline-flex items-center gap-2.5 font-bold tracking-tight select-none ${className}`, children: [_jsx(Image, { src: siteConfig.brand.logoSrc || "/svg/favicon_light.svg", alt: siteConfig.brand.name, width: 34, height: 34, className: "h-8 w-8 shrink-0 object-contain", priority: true }), _jsx("span", { className: "font-extrabold text-lg sm:text-xl tracking-tight text-[#012867] inline-flex items-center", children: _jsx("span", { children: siteConfig.brand.name }) })] }));
11
11
  }
12
- export const EchoPayLogo = BrandLogo;
13
12
  export const NxLogo = BrandLogo;
14
13
  export function LogoContextMenu() {
15
14
  const siteConfig = useSiteConfig();
@@ -31,13 +31,22 @@ export function MobileMenu({ isOpen: controlledIsOpen, onToggle, onClose, } = {}
31
31
  }
32
32
  };
33
33
  useEffect(() => {
34
- if (isOpen) {
35
- const originalOverflow = document.body.style.overflow;
36
- document.body.style.overflow = "hidden";
37
- return () => {
38
- document.body.style.overflow = originalOverflow;
39
- };
34
+ if (!isOpen) {
35
+ setExpandedSections({});
36
+ return;
40
37
  }
38
+ const originalOverflow = document.body.style.overflow;
39
+ document.body.style.overflow = "hidden";
40
+ const handleKeyDown = (e) => {
41
+ if (e.key === "Escape") {
42
+ handleClose();
43
+ }
44
+ };
45
+ window.addEventListener("keydown", handleKeyDown);
46
+ return () => {
47
+ document.body.style.overflow = originalOverflow;
48
+ window.removeEventListener("keydown", handleKeyDown);
49
+ };
41
50
  }, [isOpen]);
42
51
  const toggleSection = (label) => {
43
52
  setExpandedSections((prev) => ({
@@ -4,4 +4,4 @@ export interface ShareMenuProps {
4
4
  title?: string;
5
5
  description?: string;
6
6
  }
7
- export declare function ShareMenu({ url, title, description }: ShareMenuProps): React.JSX.Element;
7
+ export declare function ShareMenu({ url, title, description: _description }: ShareMenuProps): React.JSX.Element;
@@ -11,7 +11,7 @@ const emptySubscribe = (callback) => {
11
11
  window.addEventListener("popstate", callback);
12
12
  return () => window.removeEventListener("popstate", callback);
13
13
  };
14
- export function ShareMenu({ url, title, description }) {
14
+ export function ShareMenu({ url, title, description: _description }) {
15
15
  const siteConfig = useSiteConfig();
16
16
  const [isOpen, setIsOpen] = useState(false);
17
17
  const [copied, setCopied] = useState(false);
@@ -68,7 +68,6 @@ export function ShareMenu({ url, title, description }) {
68
68
  }
69
69
  };
70
70
  const shareTitle = title || siteConfig.metadata.title;
71
- const shareDescription = description || siteConfig.metadata.description;
72
71
  return (_jsxs("div", { className: "relative inline-flex items-center", ref: menuRef, children: [_jsxs("button", { type: "button", onClick: () => setIsOpen((prev) => !prev), "aria-expanded": isOpen, "aria-haspopup": "dialog", "aria-label": `Share ${siteConfig.brand.name}`, className: cn("inline-flex items-center gap-1.5 px-3 py-1 rounded-full text-xs font-semibold transition-all duration-200 cursor-pointer border", isOpen
73
72
  ? "bg-[#012867] text-white border-[#012867] shadow-sm"
74
73
  : "text-slate-700 bg-slate-100/80 hover:bg-[#012867]/[0.08] hover:text-[#012867] border-slate-200/80"), children: [_jsx(Share2, { className: "h-3.5 w-3.5" }), _jsx("span", { children: "Share" })] }), isOpen && (_jsxs("div", { role: "dialog", "aria-label": "Share options", className: "absolute right-0 top-full mt-2 z-50 w-64 rounded-2xl bg-white border border-slate-200 p-2 shadow-2xl backdrop-blur-2xl animate-in fade-in zoom-in-95 duration-150", children: [_jsx("div", { className: "px-2.5 py-1.5 border-b border-slate-100 mb-1", children: _jsx("p", { className: "text-[11px] font-bold text-slate-500 uppercase tracking-wider", children: "Share this page" }) }), _jsxs("div", { className: "space-y-1", children: [_jsx(FacebookShareButton, { url: currentUrl, title: shareTitle, className: "w-full text-left !flex", onClick: () => setIsOpen(false), children: _jsx("div", { className: "flex items-center gap-3 p-2 rounded-xl hover:bg-slate-100/80 transition-colors w-full cursor-pointer group", children: _jsx("span", { className: "text-xs font-medium text-slate-700 group-hover:text-slate-900", children: "Facebook" }) }) }), _jsx(TwitterShareButton, { url: currentUrl, title: shareTitle, className: "w-full text-left !flex", onClick: () => setIsOpen(false), children: _jsx("div", { className: "flex items-center gap-3 p-2 rounded-xl hover:bg-slate-100/80 transition-colors w-full cursor-pointer group", children: _jsx("span", { className: "text-xs font-medium text-slate-700 group-hover:text-slate-900", children: "Twitter / X" }) }) }), _jsx(WhatsappShareButton, { url: currentUrl, title: shareTitle, className: "w-full text-left !flex", onClick: () => setIsOpen(false), children: _jsx("div", { className: "flex items-center gap-3 p-2 rounded-xl hover:bg-slate-100/80 transition-colors w-full cursor-pointer group", children: _jsx("span", { className: "text-xs font-medium text-slate-700 group-hover:text-slate-900", children: "WhatsApp" }) }) }), _jsx("div", { className: "pt-1 border-t border-slate-100", children: _jsxs("button", { type: "button", onClick: handleCopy, className: "flex items-center justify-between w-full p-2 rounded-xl hover:bg-[#012867]/[0.06] hover:text-[#012867] transition-colors cursor-pointer text-left group", children: [_jsx("div", { className: "flex items-center gap-3", children: _jsx("span", { className: "text-xs font-medium text-slate-700 group-hover:text-[#012867]", children: copied ? "Link Copied!" : "Copy Link" }) }), copied ? (_jsx(Check, { className: "h-4 w-4 text-emerald-600" })) : (_jsx(Copy, { className: "h-4 w-4 text-slate-400 group-hover:text-[#012867]" }))] }) })] })] }))] }));
@@ -32,5 +32,5 @@ export function FeatureExplorer({ items: propItems, sectionTitle: propTitle, sub
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-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(Code2, { className: "h-4 w-4 text-[#38BDF8]" }), _jsx("span", { className: "text-xs font-semibold 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-800 hover:bg-slate-700 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-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-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-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 }))] }))] })] }))] })] }));
36
36
  }
@@ -2,5 +2,6 @@ import React from "react";
2
2
  export interface CardProps extends React.HTMLAttributes<HTMLDivElement> {
3
3
  variant?: "default" | "glass" | "bordered" | "glow";
4
4
  hoverEffect?: boolean;
5
+ theme?: "light" | "dark";
5
6
  }
6
- export declare function Card({ className, variant, hoverEffect, children, ...props }: CardProps): React.JSX.Element;
7
+ export declare function Card({ className, variant, hoverEffect, theme, children, ...props }: CardProps): React.JSX.Element;
@@ -1,15 +1,37 @@
1
1
  import { jsx as _jsx } from "react/jsx-runtime";
2
2
  import { cn } from "../../lib/utils";
3
- export function Card({ className, variant = "default", hoverEffect = true, children, ...props }) {
3
+ export function Card({ className, variant = "default", hoverEffect = true, theme, children, ...props }) {
4
4
  const baseStyles = "rounded-2xl transition-all duration-300 relative overflow-hidden";
5
+ const isLight = theme === "light";
6
+ const isDark = theme === "dark";
5
7
  const variantStyles = {
6
- default: "bg-white border border-black/[0.08] text-[#2c2c2a] shadow-sm dark:bg-[#2d3943] dark:border-white/[0.1] dark:text-white",
7
- glass: "bg-white/85 backdrop-blur-xl border border-black/[0.08] text-[#2c2c2a] shadow-xl dark:bg-[#2d3943]/90 dark:border-white/[0.12] dark:text-white",
8
- bordered: "bg-neutral-50 border border-neutral-200 text-[#2c2c2a] dark:bg-[#2c3741] dark:border-neutral-700 dark:text-white",
9
- glow: "bg-white border border-[#FFD849]/30 shadow-xl shadow-[#FFD849]/5 text-[#2c2c2a] dark:bg-[#2d3943] dark:border-[#FFD849]/30 dark:shadow-[#FFD849]/5 dark:text-white",
8
+ default: isLight
9
+ ? "bg-white border border-black/[0.08] text-[#2c2c2a] shadow-sm"
10
+ : isDark
11
+ ? "bg-[#2d3943] border border-white/[0.1] text-white shadow-sm"
12
+ : "bg-white border border-black/[0.08] text-[#2c2c2a] shadow-sm dark:bg-[#2d3943] dark:border-white/[0.1] dark:text-white",
13
+ glass: isLight
14
+ ? "bg-white/85 backdrop-blur-xl border border-black/[0.08] text-[#2c2c2a] shadow-xl"
15
+ : isDark
16
+ ? "bg-[#2d3943]/90 backdrop-blur-xl border border-white/[0.12] text-white shadow-xl"
17
+ : "bg-white/85 backdrop-blur-xl border border-black/[0.08] text-[#2c2c2a] shadow-xl dark:bg-[#2d3943]/90 dark:border-white/[0.12] dark:text-white",
18
+ bordered: isLight
19
+ ? "bg-neutral-50 border border-neutral-200 text-[#2c2c2a]"
20
+ : isDark
21
+ ? "bg-[#2c3741] border border-neutral-700 text-white"
22
+ : "bg-neutral-50 border border-neutral-200 text-[#2c2c2a] dark:bg-[#2c3741] dark:border-neutral-700 dark:text-white",
23
+ glow: isLight
24
+ ? "bg-white border border-[#FFD849]/30 shadow-xl shadow-[#FFD849]/5 text-[#2c2c2a]"
25
+ : isDark
26
+ ? "bg-[#2d3943] border border-[#FFD849]/30 shadow-xl shadow-[#FFD849]/5 text-white"
27
+ : "bg-white border border-[#FFD849]/30 shadow-xl shadow-[#FFD849]/5 text-[#2c2c2a] dark:bg-[#2d3943] dark:border-[#FFD849]/30 dark:shadow-[#FFD849]/5 dark:text-white",
10
28
  };
11
29
  const hoverStyles = hoverEffect
12
- ? "hover:border-[#FFD849]/50 hover:translate-y-[-2px] hover:shadow-lg dark:hover:border-[#FFD849]/60 dark:hover:shadow-black/40"
30
+ ? isLight
31
+ ? "hover:border-[#FFD849]/50 hover:translate-y-[-2px] hover:shadow-lg"
32
+ : isDark
33
+ ? "hover:border-[#FFD849]/60 hover:translate-y-[-2px] hover:shadow-lg hover:shadow-black/40"
34
+ : "hover:border-[#FFD849]/50 hover:translate-y-[-2px] hover:shadow-lg dark:hover:border-[#FFD849]/60 dark:hover:shadow-black/40"
13
35
  : "";
14
- return (_jsx("div", { className: cn(baseStyles, variantStyles[variant], hoverStyles, className), ...props, children: children }));
36
+ return (_jsx("div", { className: cn(baseStyles, variantStyles[variant], hoverStyles, isLight && "light [color-scheme:light]", isDark && "dark [color-scheme:dark]", className), ...props, children: children }));
15
37
  }
@@ -33,7 +33,7 @@ export const defaultConfig = {
33
33
  display: "standalone",
34
34
  orientation: "portrait",
35
35
  themeColor: "#012867",
36
- backgroundColor: "#FFFFFF",
36
+ backgroundColor: "#0F172A",
37
37
  appleTouchIcon: "/png/favicon_light.png",
38
38
  favicon: "/svg/favicon.svg",
39
39
  icons: [],
@@ -4,7 +4,7 @@ import { createContext, useContext, useEffect, useState } from "react";
4
4
  const ThemeContext = createContext(undefined);
5
5
  export function ThemeProvider({ children }) {
6
6
  const [theme, setThemeState] = useState("light");
7
- const [mounted, setMounted] = useState(false);
7
+ const [_mounted, setMounted] = useState(false);
8
8
  useEffect(() => {
9
9
  setMounted(true);
10
10
  const root = document.documentElement;
@@ -18,7 +18,7 @@ export function ThemeProvider({ children }) {
18
18
  // Ignore storage restrictions
19
19
  }
20
20
  }, []);
21
- const setTheme = (newTheme) => {
21
+ const setTheme = (_newTheme) => {
22
22
  setThemeState("light");
23
23
  const root = document.documentElement;
24
24
  root.classList.remove("dark");