@goldlabelapps/theme 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +51 -0
- package/dist/components/download/DownloadBanner.d.ts +6 -0
- package/dist/components/download/DownloadBanner.js +37 -0
- package/dist/components/footer/Footer.d.ts +2 -0
- package/dist/components/footer/Footer.js +10 -0
- package/dist/components/guide/GuideLayout.d.ts +8 -0
- package/dist/components/guide/GuideLayout.js +12 -0
- package/dist/components/guide/MarkdownContent.d.ts +4 -0
- package/dist/components/guide/MarkdownContent.js +6 -0
- package/dist/components/hero/HeroSection.d.ts +7 -0
- package/dist/components/hero/HeroSection.js +12 -0
- package/dist/components/hero/ParticleCanvas.d.ts +7 -0
- package/dist/components/hero/ParticleCanvas.js +199 -0
- package/dist/components/hero/VideoModal.d.ts +11 -0
- package/dist/components/hero/VideoModal.js +42 -0
- package/dist/components/index.d.ts +23 -0
- package/dist/components/index.js +23 -0
- package/dist/components/navigation/DropdownMenu.d.ts +6 -0
- package/dist/components/navigation/DropdownMenu.js +67 -0
- package/dist/components/navigation/Header.d.ts +5 -0
- package/dist/components/navigation/Header.js +32 -0
- package/dist/components/navigation/LogoContextMenu.d.ts +7 -0
- package/dist/components/navigation/LogoContextMenu.js +61 -0
- package/dist/components/navigation/MobileMenu.d.ts +7 -0
- package/dist/components/navigation/MobileMenu.js +69 -0
- package/dist/components/navigation/ShareMenu.d.ts +7 -0
- package/dist/components/navigation/ShareMenu.js +75 -0
- package/dist/components/showcase/BlogSection.d.ts +8 -0
- package/dist/components/showcase/BlogSection.js +12 -0
- package/dist/components/showcase/FeatureExplorer.d.ts +9 -0
- package/dist/components/showcase/FeatureExplorer.js +36 -0
- package/dist/components/showcase/SolutionsSection.d.ts +6 -0
- package/dist/components/showcase/SolutionsSection.js +14 -0
- package/dist/components/showcase/StatementSection.d.ts +6 -0
- package/dist/components/showcase/StatementSection.js +9 -0
- package/dist/components/showcase/UseCaseSlider.d.ts +3 -0
- package/dist/components/showcase/UseCaseSlider.js +3 -0
- package/dist/components/showcase/VideoSection.d.ts +8 -0
- package/dist/components/showcase/VideoSection.js +28 -0
- package/dist/components/ui/Button.d.ts +10 -0
- package/dist/components/ui/Button.js +43 -0
- package/dist/components/ui/Card.d.ts +6 -0
- package/dist/components/ui/Card.js +15 -0
- package/dist/components/ui/CustomCursor.d.ts +8 -0
- package/dist/components/ui/CustomCursor.js +22 -0
- package/dist/components/ui/ThemeToggle.d.ts +5 -0
- package/dist/components/ui/ThemeToggle.js +4 -0
- package/dist/components/video/VideoLayout.d.ts +7 -0
- package/dist/components/video/VideoLayout.js +14 -0
- package/dist/context/ConfigContext.d.ts +9 -0
- package/dist/context/ConfigContext.js +114 -0
- package/dist/context/ThemeContext.d.ts +11 -0
- package/dist/context/ThemeContext.js +47 -0
- package/dist/context/index.d.ts +2 -0
- package/dist/context/index.js +2 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.js +4 -0
- package/dist/lib/utils.d.ts +4 -0
- package/dist/lib/utils.js +21 -0
- package/dist/styles/globals.css +91 -0
- package/dist/types/index.d.ts +319 -0
- package/dist/types/index.js +1 -0
- package/package.json +65 -0
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
3
|
+
import { createContext, useContext, useMemo } from "react";
|
|
4
|
+
export const defaultConfig = {
|
|
5
|
+
metadata: {
|
|
6
|
+
title: "Application Template",
|
|
7
|
+
description: "Modular full-stack web application",
|
|
8
|
+
siteUrl: "https://goldlabel.pro",
|
|
9
|
+
twitterHandle: "@goldlabelapps",
|
|
10
|
+
twitterImage: "/png/open-graph.png",
|
|
11
|
+
ogImage: "/png/open-graph.png",
|
|
12
|
+
themeColor: "#012867",
|
|
13
|
+
},
|
|
14
|
+
brand: {
|
|
15
|
+
name: "Application",
|
|
16
|
+
tagline: "Modern full-stack application template",
|
|
17
|
+
logoType: "svg",
|
|
18
|
+
logoSrc: "/svg/nx.svg",
|
|
19
|
+
contextMenu: {
|
|
20
|
+
enabled: true,
|
|
21
|
+
copySvgLabel: "Copy Logo as SVG",
|
|
22
|
+
guidelinesLabel: "Brand Guidelines",
|
|
23
|
+
guidelinesUrl: "/how-to",
|
|
24
|
+
},
|
|
25
|
+
},
|
|
26
|
+
pwa: {
|
|
27
|
+
enabled: true,
|
|
28
|
+
name: "Application Template",
|
|
29
|
+
shortName: "Application",
|
|
30
|
+
description: "Modern full-stack application template",
|
|
31
|
+
startUrl: "/",
|
|
32
|
+
scope: "/",
|
|
33
|
+
display: "standalone",
|
|
34
|
+
orientation: "portrait",
|
|
35
|
+
themeColor: "#012867",
|
|
36
|
+
backgroundColor: "#FFFFFF",
|
|
37
|
+
appleTouchIcon: "/png/favicon_light.png",
|
|
38
|
+
favicon: "/svg/favicon.svg",
|
|
39
|
+
icons: [],
|
|
40
|
+
},
|
|
41
|
+
navigation: {
|
|
42
|
+
links: [],
|
|
43
|
+
primaryCta: { label: "Get Started", href: "#" },
|
|
44
|
+
},
|
|
45
|
+
hero: {
|
|
46
|
+
headline: "Modern Full-Stack Application",
|
|
47
|
+
subheadline: "Built with modular design primitives and strict type safety.",
|
|
48
|
+
primaryCta: { label: "Get Started", href: "#" },
|
|
49
|
+
secondaryCta: { label: "Learn More", href: "#" },
|
|
50
|
+
video: { enabled: false },
|
|
51
|
+
particleField: {
|
|
52
|
+
enabled: true,
|
|
53
|
+
count: 85,
|
|
54
|
+
interactive: true,
|
|
55
|
+
colors: ["#012867", "#01358d", "#F97316", "#64748B", "#38BDF8"],
|
|
56
|
+
},
|
|
57
|
+
},
|
|
58
|
+
statement: {
|
|
59
|
+
badge: "Architecture & Design",
|
|
60
|
+
headline: "Built with modern primitives and typed configurations.",
|
|
61
|
+
floatingIcons: [],
|
|
62
|
+
},
|
|
63
|
+
features: {
|
|
64
|
+
sectionTitle: "Features & Capabilities",
|
|
65
|
+
items: [],
|
|
66
|
+
},
|
|
67
|
+
videos: {
|
|
68
|
+
title: "Showcase Demos",
|
|
69
|
+
subtitle: "Explore interactive walkthroughs and features.",
|
|
70
|
+
items: [],
|
|
71
|
+
},
|
|
72
|
+
useCases: {
|
|
73
|
+
title: "Showcase Demos",
|
|
74
|
+
subtitle: "Explore interactive walkthroughs and features.",
|
|
75
|
+
items: [],
|
|
76
|
+
},
|
|
77
|
+
solutions: {
|
|
78
|
+
title: "Flexible Plans",
|
|
79
|
+
subtitle: "Choose the plan that best fits your workflow.",
|
|
80
|
+
cards: [],
|
|
81
|
+
},
|
|
82
|
+
blogs: {
|
|
83
|
+
title: "Articles & Guides",
|
|
84
|
+
viewAllCta: { label: "View All", href: "/how-to" },
|
|
85
|
+
posts: [],
|
|
86
|
+
},
|
|
87
|
+
authCta: {
|
|
88
|
+
badge: "✦ Ready to Get Started?",
|
|
89
|
+
title: "Launch Your Application Today",
|
|
90
|
+
subtitle: "Built with high performance and seamless developer experience.",
|
|
91
|
+
primaryCta: { label: "Get Started", href: "#" },
|
|
92
|
+
secondaryCta: { label: "Documentation", href: "/how-to" },
|
|
93
|
+
cliQuickInstall: { label: "Run dev server:", command: "pnpm dev" },
|
|
94
|
+
trustBadge: "TypeScript • Next.js • Tailwind CSS • Vitest",
|
|
95
|
+
},
|
|
96
|
+
footer: {
|
|
97
|
+
tagline: "Next-Generation Application",
|
|
98
|
+
brandName: "Goldlabel",
|
|
99
|
+
columns: [],
|
|
100
|
+
bottomLinks: [],
|
|
101
|
+
copyright: "© 2026 Goldlabel Apps. All rights reserved.",
|
|
102
|
+
},
|
|
103
|
+
};
|
|
104
|
+
const ConfigContext = createContext(defaultConfig);
|
|
105
|
+
export function ConfigProvider({ value, children }) {
|
|
106
|
+
const mergedValue = useMemo(() => ({ ...defaultConfig, ...value }), [value]);
|
|
107
|
+
return _jsx(ConfigContext.Provider, { value: mergedValue, children: children });
|
|
108
|
+
}
|
|
109
|
+
export function useSiteConfig(override) {
|
|
110
|
+
const ctx = useContext(ConfigContext);
|
|
111
|
+
if (!override)
|
|
112
|
+
return ctx;
|
|
113
|
+
return { ...ctx, ...override };
|
|
114
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
export type Theme = "light" | "dark";
|
|
3
|
+
export interface ThemeContextType {
|
|
4
|
+
theme: Theme;
|
|
5
|
+
setTheme: (theme: Theme) => void;
|
|
6
|
+
toggleTheme: () => void;
|
|
7
|
+
}
|
|
8
|
+
export declare function ThemeProvider({ children }: {
|
|
9
|
+
children: React.ReactNode;
|
|
10
|
+
}): React.JSX.Element;
|
|
11
|
+
export declare function useTheme(): ThemeContextType;
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
3
|
+
import { createContext, useContext, useEffect, useState } from "react";
|
|
4
|
+
const ThemeContext = createContext(undefined);
|
|
5
|
+
export function ThemeProvider({ children }) {
|
|
6
|
+
const [theme, setThemeState] = useState("light");
|
|
7
|
+
const [mounted, setMounted] = useState(false);
|
|
8
|
+
useEffect(() => {
|
|
9
|
+
setMounted(true);
|
|
10
|
+
const root = document.documentElement;
|
|
11
|
+
root.classList.remove("dark");
|
|
12
|
+
root.classList.add("light");
|
|
13
|
+
root.style.colorScheme = "light";
|
|
14
|
+
try {
|
|
15
|
+
localStorage.removeItem("theme");
|
|
16
|
+
}
|
|
17
|
+
catch {
|
|
18
|
+
// Ignore storage restrictions
|
|
19
|
+
}
|
|
20
|
+
}, []);
|
|
21
|
+
const setTheme = (newTheme) => {
|
|
22
|
+
setThemeState("light");
|
|
23
|
+
const root = document.documentElement;
|
|
24
|
+
root.classList.remove("dark");
|
|
25
|
+
root.classList.add("light");
|
|
26
|
+
root.style.colorScheme = "light";
|
|
27
|
+
};
|
|
28
|
+
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";
|
|
34
|
+
};
|
|
35
|
+
return (_jsx(ThemeContext.Provider, { value: { theme, setTheme, toggleTheme }, children: children }));
|
|
36
|
+
}
|
|
37
|
+
export function useTheme() {
|
|
38
|
+
const context = useContext(ThemeContext);
|
|
39
|
+
if (!context) {
|
|
40
|
+
return {
|
|
41
|
+
theme: "light",
|
|
42
|
+
setTheme: () => { },
|
|
43
|
+
toggleTheme: () => { },
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
return context;
|
|
47
|
+
}
|
package/dist/index.d.ts
ADDED
package/dist/index.js
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { clsx } from "clsx";
|
|
2
|
+
import { twMerge } from "tailwind-merge";
|
|
3
|
+
export function cn(...inputs) {
|
|
4
|
+
return twMerge(clsx(inputs));
|
|
5
|
+
}
|
|
6
|
+
export function detectUserOS() {
|
|
7
|
+
if (typeof window === "undefined" || !navigator)
|
|
8
|
+
return "macos-silicon";
|
|
9
|
+
const userAgent = navigator.userAgent.toLowerCase();
|
|
10
|
+
const platform = navigator.userAgentData?.platform?.toLowerCase() || navigator.platform?.toLowerCase() || "";
|
|
11
|
+
if (platform.includes("mac") || userAgent.includes("macintosh") || userAgent.includes("mac os")) {
|
|
12
|
+
return "macos-silicon";
|
|
13
|
+
}
|
|
14
|
+
if (platform.includes("win") || userAgent.includes("windows")) {
|
|
15
|
+
return "windows";
|
|
16
|
+
}
|
|
17
|
+
if (platform.includes("linux") || userAgent.includes("linux") || userAgent.includes("x11")) {
|
|
18
|
+
return "linux";
|
|
19
|
+
}
|
|
20
|
+
return "macos-silicon";
|
|
21
|
+
}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
@import "tailwindcss";
|
|
2
|
+
|
|
3
|
+
@custom-variant dark (&:where(.dark, .dark *));
|
|
4
|
+
|
|
5
|
+
@layer base {
|
|
6
|
+
:root {
|
|
7
|
+
--background: #ffffff;
|
|
8
|
+
--background-secondary: #f8fafc;
|
|
9
|
+
--paper: #ffffff;
|
|
10
|
+
--primary: #012867;
|
|
11
|
+
--primary-hover: #011f52;
|
|
12
|
+
--secondary: #0F172A;
|
|
13
|
+
--foreground: #0f172a;
|
|
14
|
+
--foreground-muted: #64748b;
|
|
15
|
+
--card-bg: #ffffff;
|
|
16
|
+
--card-border: rgba(1, 40, 103, 0.1);
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
* {
|
|
20
|
+
border-color: rgba(15, 23, 42, 0.12);
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
html {
|
|
24
|
+
scroll-behavior: smooth;
|
|
25
|
+
color-scheme: light;
|
|
26
|
+
background-color: var(--background);
|
|
27
|
+
color: var(--foreground);
|
|
28
|
+
font-family: -apple-system, BlinkMacSystemFont, "Plus Jakarta Sans", "Inter", "Segoe UI", Roboto, sans-serif;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
body {
|
|
32
|
+
background-color: var(--background);
|
|
33
|
+
color: var(--foreground);
|
|
34
|
+
font-feature-settings: "rlig" 1, "calt" 1;
|
|
35
|
+
overflow-x: hidden;
|
|
36
|
+
font-family: -apple-system, BlinkMacSystemFont, "Plus Jakarta Sans", "Inter", "Segoe UI", Roboto, sans-serif;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
code, pre, kbd, samp {
|
|
40
|
+
font-family: "JetBrains Mono", ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
code {
|
|
44
|
+
background-color: #f1f5f9;
|
|
45
|
+
color: #0f172a;
|
|
46
|
+
padding: 0.15em 0.35em;
|
|
47
|
+
border-radius: 0.375rem;
|
|
48
|
+
font-size: 0.875em;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
pre {
|
|
52
|
+
background-color: #f8fafc;
|
|
53
|
+
color: #0f172a;
|
|
54
|
+
border: 1px solid #e2e8f0;
|
|
55
|
+
border-radius: 0.75rem;
|
|
56
|
+
padding: 1rem;
|
|
57
|
+
overflow-x: auto;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
pre code {
|
|
61
|
+
background-color: transparent;
|
|
62
|
+
color: inherit;
|
|
63
|
+
padding: 0;
|
|
64
|
+
border: none;
|
|
65
|
+
font-size: inherit;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
::selection {
|
|
69
|
+
background-color: #012867;
|
|
70
|
+
color: #ffffff;
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
/* Custom Smooth Scrollbar */
|
|
75
|
+
::-webkit-scrollbar {
|
|
76
|
+
width: 8px;
|
|
77
|
+
height: 8px;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
::-webkit-scrollbar-track {
|
|
81
|
+
background: #f1f5f9;
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
::-webkit-scrollbar-thumb {
|
|
85
|
+
background: #cbd5e1;
|
|
86
|
+
border-radius: 4px;
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
::-webkit-scrollbar-thumb:hover {
|
|
90
|
+
background: #94a3b8;
|
|
91
|
+
}
|
|
@@ -0,0 +1,319 @@
|
|
|
1
|
+
export interface SiteMetadata {
|
|
2
|
+
title: string;
|
|
3
|
+
description: string;
|
|
4
|
+
siteUrl: string;
|
|
5
|
+
ogImage?: string;
|
|
6
|
+
twitterImage?: string;
|
|
7
|
+
twitterHandle?: string;
|
|
8
|
+
themeColor?: string;
|
|
9
|
+
}
|
|
10
|
+
export interface BrandConfig {
|
|
11
|
+
name: string;
|
|
12
|
+
tagline?: string;
|
|
13
|
+
logoType: "svg" | "text" | "custom" | "image";
|
|
14
|
+
logoSrc?: string;
|
|
15
|
+
customSvgLogo?: string;
|
|
16
|
+
contextMenu: {
|
|
17
|
+
enabled: boolean;
|
|
18
|
+
copySvgLabel: string;
|
|
19
|
+
guidelinesLabel: string;
|
|
20
|
+
guidelinesUrl: string;
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
export interface DropdownItem {
|
|
24
|
+
title: string;
|
|
25
|
+
description?: string;
|
|
26
|
+
href: string;
|
|
27
|
+
icon?: string;
|
|
28
|
+
badge?: string;
|
|
29
|
+
external?: boolean;
|
|
30
|
+
}
|
|
31
|
+
export interface DropdownGroup {
|
|
32
|
+
heading?: string;
|
|
33
|
+
items: DropdownItem[];
|
|
34
|
+
}
|
|
35
|
+
export interface NavItem {
|
|
36
|
+
label: string;
|
|
37
|
+
href?: string;
|
|
38
|
+
badge?: string;
|
|
39
|
+
external?: boolean;
|
|
40
|
+
dropdown?: DropdownGroup[] | DropdownItem[];
|
|
41
|
+
}
|
|
42
|
+
export interface NavigationConfig {
|
|
43
|
+
remoteControlBadge?: {
|
|
44
|
+
enabled: boolean;
|
|
45
|
+
label: string;
|
|
46
|
+
href: string;
|
|
47
|
+
tooltip?: string;
|
|
48
|
+
};
|
|
49
|
+
links: NavItem[];
|
|
50
|
+
primaryCta: {
|
|
51
|
+
label: string;
|
|
52
|
+
href: string;
|
|
53
|
+
icon?: string;
|
|
54
|
+
};
|
|
55
|
+
secondaryCta?: {
|
|
56
|
+
label: string;
|
|
57
|
+
href: string;
|
|
58
|
+
icon?: string;
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
export interface ParticleConfig {
|
|
62
|
+
enabled: boolean;
|
|
63
|
+
count: number;
|
|
64
|
+
interactive: boolean;
|
|
65
|
+
colors: string[];
|
|
66
|
+
maxSpeed?: number;
|
|
67
|
+
connectionDistance?: number;
|
|
68
|
+
}
|
|
69
|
+
export interface HeroConfig {
|
|
70
|
+
headline: string;
|
|
71
|
+
subheadline?: string;
|
|
72
|
+
gradientWords?: string[];
|
|
73
|
+
primaryCta: {
|
|
74
|
+
label: string;
|
|
75
|
+
href: string;
|
|
76
|
+
icon?: string;
|
|
77
|
+
};
|
|
78
|
+
secondaryCta: {
|
|
79
|
+
label: string;
|
|
80
|
+
href: string;
|
|
81
|
+
icon?: string;
|
|
82
|
+
};
|
|
83
|
+
video: {
|
|
84
|
+
enabled: boolean;
|
|
85
|
+
badge?: string;
|
|
86
|
+
title?: string;
|
|
87
|
+
youtubeEmbedUrl?: string;
|
|
88
|
+
thumbnailImage?: string;
|
|
89
|
+
hoverText?: string;
|
|
90
|
+
};
|
|
91
|
+
particleField: ParticleConfig;
|
|
92
|
+
}
|
|
93
|
+
export interface FloatingIcon {
|
|
94
|
+
name: string;
|
|
95
|
+
symbol: string;
|
|
96
|
+
label?: string;
|
|
97
|
+
color?: string;
|
|
98
|
+
x: number;
|
|
99
|
+
y: number;
|
|
100
|
+
size?: number;
|
|
101
|
+
delay?: number;
|
|
102
|
+
}
|
|
103
|
+
export interface StatementConfig {
|
|
104
|
+
badge?: string;
|
|
105
|
+
headline: string;
|
|
106
|
+
subtext?: string;
|
|
107
|
+
floatingIcons: FloatingIcon[];
|
|
108
|
+
}
|
|
109
|
+
export interface CodeSnippet {
|
|
110
|
+
language: string;
|
|
111
|
+
filename?: string;
|
|
112
|
+
code: string;
|
|
113
|
+
}
|
|
114
|
+
export interface TerminalCommand {
|
|
115
|
+
cmd?: string;
|
|
116
|
+
output?: string;
|
|
117
|
+
isComment?: boolean;
|
|
118
|
+
}
|
|
119
|
+
export interface TerminalSnippet {
|
|
120
|
+
prompt?: string;
|
|
121
|
+
commands: TerminalCommand[];
|
|
122
|
+
}
|
|
123
|
+
export interface FeatureItem {
|
|
124
|
+
id: string;
|
|
125
|
+
tag: string;
|
|
126
|
+
tabLabel?: string;
|
|
127
|
+
title: string;
|
|
128
|
+
description: string;
|
|
129
|
+
badge?: string;
|
|
130
|
+
cta?: {
|
|
131
|
+
label: string;
|
|
132
|
+
href: string;
|
|
133
|
+
};
|
|
134
|
+
previewType: "terminal" | "code" | "interactive-ui" | "graphic";
|
|
135
|
+
codeSnippet?: CodeSnippet;
|
|
136
|
+
terminalSnippet?: TerminalSnippet;
|
|
137
|
+
uiMockup?: {
|
|
138
|
+
type: "agent-manager" | "ide" | "cli" | "sdk" | "monorepo" | "cartridge";
|
|
139
|
+
accentColor?: string;
|
|
140
|
+
};
|
|
141
|
+
}
|
|
142
|
+
export interface FeaturesConfig {
|
|
143
|
+
sectionTitle?: string;
|
|
144
|
+
subtitle?: string;
|
|
145
|
+
items: FeatureItem[];
|
|
146
|
+
}
|
|
147
|
+
export interface VideoItem {
|
|
148
|
+
id: string;
|
|
149
|
+
title: string;
|
|
150
|
+
tagline: string;
|
|
151
|
+
description: string;
|
|
152
|
+
videoUrl: string;
|
|
153
|
+
orientation: "landscape" | "portrait";
|
|
154
|
+
duration: string;
|
|
155
|
+
badge?: string;
|
|
156
|
+
keyFeatures?: string[];
|
|
157
|
+
cta?: {
|
|
158
|
+
label: string;
|
|
159
|
+
href: string;
|
|
160
|
+
};
|
|
161
|
+
}
|
|
162
|
+
export interface VideosConfig {
|
|
163
|
+
title: string;
|
|
164
|
+
subtitle: string;
|
|
165
|
+
items: VideoItem[];
|
|
166
|
+
}
|
|
167
|
+
export interface UseCaseItem {
|
|
168
|
+
id: string;
|
|
169
|
+
role: string;
|
|
170
|
+
tagline: string;
|
|
171
|
+
description: string;
|
|
172
|
+
youtubeEmbedUrl?: string;
|
|
173
|
+
videoUrl?: string;
|
|
174
|
+
orientation?: "landscape" | "portrait";
|
|
175
|
+
duration?: string;
|
|
176
|
+
badge?: string;
|
|
177
|
+
thumbnailGradient?: string;
|
|
178
|
+
cta: {
|
|
179
|
+
label: string;
|
|
180
|
+
href: string;
|
|
181
|
+
};
|
|
182
|
+
keyFeatures?: string[];
|
|
183
|
+
}
|
|
184
|
+
export interface UseCasesConfig {
|
|
185
|
+
title: string;
|
|
186
|
+
subtitle: string;
|
|
187
|
+
items: UseCaseItem[];
|
|
188
|
+
}
|
|
189
|
+
export interface SolutionCard {
|
|
190
|
+
id: string;
|
|
191
|
+
badge: string;
|
|
192
|
+
tier: string;
|
|
193
|
+
heading: string;
|
|
194
|
+
description: string;
|
|
195
|
+
features: string[];
|
|
196
|
+
cta: {
|
|
197
|
+
label: string;
|
|
198
|
+
href: string;
|
|
199
|
+
variant: "primary" | "secondary";
|
|
200
|
+
};
|
|
201
|
+
highlighted?: boolean;
|
|
202
|
+
}
|
|
203
|
+
export interface SolutionsConfig {
|
|
204
|
+
title: string;
|
|
205
|
+
subtitle: string;
|
|
206
|
+
cards: SolutionCard[];
|
|
207
|
+
}
|
|
208
|
+
export interface BlogPost {
|
|
209
|
+
id: string;
|
|
210
|
+
title: string;
|
|
211
|
+
date: string;
|
|
212
|
+
category: "Product" | "Enterprise" | "Model" | "Engineering" | "Announcement" | "Architecture" | "Installation" | "Strategy";
|
|
213
|
+
readTime?: string;
|
|
214
|
+
href: string;
|
|
215
|
+
summary?: string;
|
|
216
|
+
gradient?: string;
|
|
217
|
+
}
|
|
218
|
+
export interface BlogsConfig {
|
|
219
|
+
title: string;
|
|
220
|
+
subtitle?: string;
|
|
221
|
+
viewAllCta: {
|
|
222
|
+
label: string;
|
|
223
|
+
href: string;
|
|
224
|
+
};
|
|
225
|
+
posts: BlogPost[];
|
|
226
|
+
}
|
|
227
|
+
export interface AuthCtaConfig {
|
|
228
|
+
badge: string;
|
|
229
|
+
title: string;
|
|
230
|
+
subtitle: string;
|
|
231
|
+
primaryCta: {
|
|
232
|
+
label: string;
|
|
233
|
+
href: string;
|
|
234
|
+
};
|
|
235
|
+
secondaryCta: {
|
|
236
|
+
label: string;
|
|
237
|
+
href: string;
|
|
238
|
+
};
|
|
239
|
+
cliQuickInstall: {
|
|
240
|
+
label: string;
|
|
241
|
+
command: string;
|
|
242
|
+
};
|
|
243
|
+
trustBadge: string;
|
|
244
|
+
}
|
|
245
|
+
export interface FooterColumn {
|
|
246
|
+
title: string;
|
|
247
|
+
links: Array<{
|
|
248
|
+
label: string;
|
|
249
|
+
href: string;
|
|
250
|
+
external?: boolean;
|
|
251
|
+
badge?: string;
|
|
252
|
+
}>;
|
|
253
|
+
}
|
|
254
|
+
export interface FooterConfig {
|
|
255
|
+
tagline: string;
|
|
256
|
+
brandName: string;
|
|
257
|
+
address?: string;
|
|
258
|
+
companyNumber?: string;
|
|
259
|
+
columns: FooterColumn[];
|
|
260
|
+
bottomLinks: Array<{
|
|
261
|
+
label: string;
|
|
262
|
+
href: string;
|
|
263
|
+
}>;
|
|
264
|
+
socialLinks?: Array<{
|
|
265
|
+
platform: string;
|
|
266
|
+
href: string;
|
|
267
|
+
}>;
|
|
268
|
+
copyright: string;
|
|
269
|
+
}
|
|
270
|
+
export interface PwaIcon {
|
|
271
|
+
src: string;
|
|
272
|
+
sizes: string;
|
|
273
|
+
type: string;
|
|
274
|
+
purpose?: string;
|
|
275
|
+
}
|
|
276
|
+
export interface PwaConfig {
|
|
277
|
+
enabled: boolean;
|
|
278
|
+
name: string;
|
|
279
|
+
shortName: string;
|
|
280
|
+
description: string;
|
|
281
|
+
startUrl: string;
|
|
282
|
+
scope: string;
|
|
283
|
+
display: "standalone" | "fullscreen" | "minimal-ui" | "browser";
|
|
284
|
+
orientation: "any" | "natural" | "landscape" | "portrait";
|
|
285
|
+
themeColor: string;
|
|
286
|
+
backgroundColor: string;
|
|
287
|
+
appleTouchIcon?: string;
|
|
288
|
+
favicon?: string;
|
|
289
|
+
icons: PwaIcon[];
|
|
290
|
+
}
|
|
291
|
+
export interface SiteConfig {
|
|
292
|
+
metadata: SiteMetadata;
|
|
293
|
+
brand: BrandConfig;
|
|
294
|
+
pwa: PwaConfig;
|
|
295
|
+
navigation: NavigationConfig;
|
|
296
|
+
hero: HeroConfig;
|
|
297
|
+
statement: StatementConfig;
|
|
298
|
+
features: FeaturesConfig;
|
|
299
|
+
videos: VideosConfig;
|
|
300
|
+
useCases: UseCasesConfig;
|
|
301
|
+
solutions: SolutionsConfig;
|
|
302
|
+
blogs: BlogsConfig;
|
|
303
|
+
authCta: AuthCtaConfig;
|
|
304
|
+
footer: FooterConfig;
|
|
305
|
+
}
|
|
306
|
+
export interface GuideMeta {
|
|
307
|
+
slug: string;
|
|
308
|
+
cleanSlug: string;
|
|
309
|
+
title: string;
|
|
310
|
+
description: string;
|
|
311
|
+
order: number;
|
|
312
|
+
icon?: string;
|
|
313
|
+
tags?: string[];
|
|
314
|
+
smartImage?: string;
|
|
315
|
+
}
|
|
316
|
+
export interface GuideArticle extends GuideMeta {
|
|
317
|
+
content: string;
|
|
318
|
+
rawMarkdown: string;
|
|
319
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
package/package.json
ADDED
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@goldlabelapps/theme",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "Shared Tailwind CSS v4 & Next.js theme tokens, UI primitives, and layout showcase blocks for NX apps",
|
|
5
|
+
"publishConfig": {
|
|
6
|
+
"access": "public"
|
|
7
|
+
},
|
|
8
|
+
"sideEffects": [
|
|
9
|
+
"**/*.css"
|
|
10
|
+
],
|
|
11
|
+
"main": "dist/index.js",
|
|
12
|
+
"module": "dist/index.js",
|
|
13
|
+
"types": "dist/index.d.ts",
|
|
14
|
+
"exports": {
|
|
15
|
+
".": {
|
|
16
|
+
"types": "./dist/index.d.ts",
|
|
17
|
+
"import": "./dist/index.js",
|
|
18
|
+
"require": "./dist/index.js"
|
|
19
|
+
},
|
|
20
|
+
"./styles.css": {
|
|
21
|
+
"import": "./dist/styles/globals.css",
|
|
22
|
+
"require": "./dist/styles/globals.css",
|
|
23
|
+
"default": "./dist/styles/globals.css"
|
|
24
|
+
},
|
|
25
|
+
"./globals.css": {
|
|
26
|
+
"import": "./dist/styles/globals.css",
|
|
27
|
+
"require": "./dist/styles/globals.css",
|
|
28
|
+
"default": "./dist/styles/globals.css"
|
|
29
|
+
}
|
|
30
|
+
},
|
|
31
|
+
"files": [
|
|
32
|
+
"dist"
|
|
33
|
+
],
|
|
34
|
+
"scripts": {
|
|
35
|
+
"build": "tsc -p tsconfig.build.json && mkdir -p dist/styles && cp src/styles/*.css dist/styles/",
|
|
36
|
+
"type-check": "tsc --noEmit",
|
|
37
|
+
"test": "vitest run",
|
|
38
|
+
"lint": "echo \"No lint configured yet\"",
|
|
39
|
+
"clean": "rm -rf dist"
|
|
40
|
+
},
|
|
41
|
+
"peerDependencies": {
|
|
42
|
+
"next": ">=15.0.0",
|
|
43
|
+
"react": ">=18.0.0",
|
|
44
|
+
"react-dom": ">=18.0.0"
|
|
45
|
+
},
|
|
46
|
+
"dependencies": {
|
|
47
|
+
"canvas-confetti": "^1.9.4",
|
|
48
|
+
"clsx": "^2.1.1",
|
|
49
|
+
"framer-motion": "^13.1.1",
|
|
50
|
+
"lucide-react": "^1.34.0",
|
|
51
|
+
"react-share": "^5.3.0",
|
|
52
|
+
"tailwind-merge": "^3.6.0"
|
|
53
|
+
},
|
|
54
|
+
"devDependencies": {
|
|
55
|
+
"@types/canvas-confetti": "^1.9.0",
|
|
56
|
+
"@types/node": "^20",
|
|
57
|
+
"@types/react": "^19",
|
|
58
|
+
"@types/react-dom": "^19",
|
|
59
|
+
"next": "16.3.2",
|
|
60
|
+
"react": "19.2.8",
|
|
61
|
+
"react-dom": "19.2.8",
|
|
62
|
+
"typescript": "^5",
|
|
63
|
+
"vitest": "^4.1.11"
|
|
64
|
+
}
|
|
65
|
+
}
|