@linktr.ee/linkapp 0.0.41 → 0.0.43
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/dev-server/featured/main.tsx +24 -13
- package/dev-server/featured-carousel.html +110 -0
- package/dev-server/featured.html +54 -0
- package/dev-server/preview/Preview.tsx +244 -206
- package/dev-server/shared/theme-presets.ts +34 -1
- package/dev-server/sheet/main.tsx +22 -1
- package/dev-server/sheet.html +54 -0
- package/dist/commands/dev.d.ts.map +1 -1
- package/dist/commands/dev.js +120 -9
- package/dist/commands/dev.js.map +1 -1
- package/package.json +1 -1
- package/runtime/index.html +3 -3
|
@@ -13,10 +13,15 @@ try {
|
|
|
13
13
|
// featured-carousel.tsx doesn't exist, that's ok
|
|
14
14
|
}
|
|
15
15
|
|
|
16
|
-
// Declare global window
|
|
16
|
+
// Declare global window properties for theme and font application
|
|
17
17
|
declare global {
|
|
18
18
|
interface Window {
|
|
19
|
-
__linkapp_applyTheme?: (variables: Record<string, string>) => void
|
|
19
|
+
__linkapp_applyTheme?: (variables: Record<string, string>) => void;
|
|
20
|
+
__linkapp_applyFont?: (fontData: {
|
|
21
|
+
fontFamily: string;
|
|
22
|
+
fontStyle?: string;
|
|
23
|
+
cssUrl?: string;
|
|
24
|
+
}) => void;
|
|
20
25
|
}
|
|
21
26
|
}
|
|
22
27
|
|
|
@@ -25,14 +30,20 @@ declare const __PREVIEW_PROPS__: Record<string, unknown>;
|
|
|
25
30
|
|
|
26
31
|
// Extract just the variables from THEME_PRESETS for theme lookups
|
|
27
32
|
const THEME_VARS = Object.fromEntries(
|
|
28
|
-
Object.entries(THEME_PRESETS).map(([key, { variables }]) => [key, variables])
|
|
33
|
+
Object.entries(THEME_PRESETS).map(([key, { variables }]) => [key, variables]),
|
|
29
34
|
);
|
|
30
35
|
|
|
31
36
|
// Get theme variables and groupLayoutOption from URL
|
|
32
37
|
const params = new URLSearchParams(window.location.search);
|
|
33
|
-
const groupLayoutOptionParam = params.get(
|
|
38
|
+
const groupLayoutOptionParam = params.get("groupLayoutOption");
|
|
34
39
|
const themeVariables = getThemeFromUrl(THEME_VARS);
|
|
35
40
|
|
|
41
|
+
// Get the selected theme for font application
|
|
42
|
+
const themeKey = params.get("theme") || "default";
|
|
43
|
+
const selectedTheme =
|
|
44
|
+
THEME_PRESETS[themeKey as keyof typeof THEME_PRESETS] ||
|
|
45
|
+
THEME_PRESETS.default;
|
|
46
|
+
|
|
36
47
|
// Merge with preview props and add groupLayoutOption
|
|
37
48
|
const previewProps = __PREVIEW_PROPS__ || {};
|
|
38
49
|
const mergedProps = mergeThemeProps(themeVariables, previewProps, {
|
|
@@ -44,21 +55,21 @@ if (themeVariables && window.__linkapp_applyTheme) {
|
|
|
44
55
|
window.__linkapp_applyTheme(themeVariables);
|
|
45
56
|
}
|
|
46
57
|
|
|
58
|
+
// Apply font on mount
|
|
59
|
+
if (selectedTheme.font && window.__linkapp_applyFont) {
|
|
60
|
+
window.__linkapp_applyFont(selectedTheme.font);
|
|
61
|
+
}
|
|
62
|
+
|
|
47
63
|
const rootElement = document.getElementById("root");
|
|
48
64
|
if (!rootElement) {
|
|
49
65
|
throw new Error("Root element not found");
|
|
50
66
|
}
|
|
51
67
|
|
|
52
68
|
// Select the appropriate component based on groupLayoutOption parameter
|
|
53
|
-
const LayoutComponent =
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
console.log('[Featured Dev Server] Rendering:', {
|
|
58
|
-
groupLayoutOption: groupLayoutOptionParam,
|
|
59
|
-
component: groupLayoutOptionParam === 'carousel' && FeaturedCarousel ? 'FeaturedCarousel' : 'Featured',
|
|
60
|
-
hasFeaturedCarousel: !!FeaturedCarousel,
|
|
61
|
-
});
|
|
69
|
+
const LayoutComponent =
|
|
70
|
+
groupLayoutOptionParam === "carousel" && FeaturedCarousel
|
|
71
|
+
? FeaturedCarousel
|
|
72
|
+
: Featured;
|
|
62
73
|
|
|
63
74
|
createRoot(rootElement).render(
|
|
64
75
|
<StrictMode>
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
<!doctype html>
|
|
2
|
+
<html lang="en">
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="UTF-8" />
|
|
5
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
6
|
+
<title>Featured Carousel - LinkApp</title>
|
|
7
|
+
|
|
8
|
+
<!-- iframe-resizer: Required for iframe height auto-adjustment -->
|
|
9
|
+
<script crossorigin src="https://unpkg.com/iframe-resizer@4.3.2/js/iframeResizer.contentWindow.js"></script>
|
|
10
|
+
|
|
11
|
+
<!-- Linktree theme variables will be injected here -->
|
|
12
|
+
<style id="linktree-theme"></style>
|
|
13
|
+
|
|
14
|
+
<script>
|
|
15
|
+
/**
|
|
16
|
+
* Helper function to convert CSS variables object to CSS string
|
|
17
|
+
* @param {Record<string, string>} vars - Object with CSS variable names as keys
|
|
18
|
+
* @returns {string} CSS string like "--var1: value1; --var2: value2;"
|
|
19
|
+
*/
|
|
20
|
+
function renderCssVariables(vars) {
|
|
21
|
+
return Object.entries(vars)
|
|
22
|
+
.map((entry) => entry.join(': '))
|
|
23
|
+
.join('; ') + ';'
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* Apply theme CSS variables to :root
|
|
28
|
+
* Called once on mount from main.tsx
|
|
29
|
+
* @param {Record<string, string>} variables - CSS variables to apply
|
|
30
|
+
*/
|
|
31
|
+
function applyTheme(variables) {
|
|
32
|
+
if (!variables || typeof variables !== 'object') {
|
|
33
|
+
return
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
// Get the style element where theme variables are injected
|
|
37
|
+
const themeStyle = document.getElementById('linktree-theme')
|
|
38
|
+
|
|
39
|
+
if (!themeStyle) {
|
|
40
|
+
console.warn('linktree-theme style element not found')
|
|
41
|
+
return
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
// Inject CSS variables into :root
|
|
45
|
+
themeStyle.textContent = ':root { ' + renderCssVariables(variables) + ' }'
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
// Export applyTheme to be used by main.tsx
|
|
49
|
+
window.__linkapp_applyTheme = applyTheme
|
|
50
|
+
|
|
51
|
+
/**
|
|
52
|
+
* Apply font to iframe by injecting font CSS or external stylesheet
|
|
53
|
+
* Called once on mount from main.tsx
|
|
54
|
+
* @param {Object} fontData - Font configuration from parent
|
|
55
|
+
* @param {string} fontData.fontFamily - Font family name (e.g., "Inter", "Karla")
|
|
56
|
+
* @param {string} [fontData.cssUrl] - External CSS URL to load (e.g., Google Fonts, TypeKit)
|
|
57
|
+
* @param {string} [fontData.fontStyle] - Inline @font-face CSS definitions
|
|
58
|
+
*/
|
|
59
|
+
function applyFont(fontData) {
|
|
60
|
+
console.log('[applyFont] Called with:', fontData)
|
|
61
|
+
|
|
62
|
+
if (!fontData || typeof fontData !== 'object') {
|
|
63
|
+
console.warn('[applyFont] Invalid fontData')
|
|
64
|
+
return
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
// Remove existing font style/link if present to avoid duplicates
|
|
68
|
+
const existingFontElement = document.getElementById('linktree-font')
|
|
69
|
+
if (existingFontElement) {
|
|
70
|
+
console.log('[applyFont] Removing existing font element')
|
|
71
|
+
existingFontElement.remove()
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
// Option 1: External CSS URL (e.g., Google Fonts, TypeKit, custom CDN)
|
|
75
|
+
if (fontData.cssUrl) {
|
|
76
|
+
console.log('[applyFont] Loading external CSS:', fontData.cssUrl)
|
|
77
|
+
const link = document.createElement('link')
|
|
78
|
+
link.id = 'linktree-font'
|
|
79
|
+
link.rel = 'stylesheet'
|
|
80
|
+
link.href = fontData.cssUrl
|
|
81
|
+
link.crossOrigin = 'anonymous'
|
|
82
|
+
link.onload = () => console.log('[applyFont] CSS loaded successfully')
|
|
83
|
+
link.onerror = () => console.error('[applyFont] CSS failed to load')
|
|
84
|
+
document.head.appendChild(link)
|
|
85
|
+
}
|
|
86
|
+
// Option 2: Inline @font-face definitions
|
|
87
|
+
else if (fontData.fontStyle) {
|
|
88
|
+
console.log('[applyFont] Using inline @font-face')
|
|
89
|
+
const style = document.createElement('style')
|
|
90
|
+
style.id = 'linktree-font'
|
|
91
|
+
style.textContent = fontData.fontStyle
|
|
92
|
+
document.head.appendChild(style)
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
// Apply font-family to body element so all content inherits it
|
|
96
|
+
if (fontData.fontFamily) {
|
|
97
|
+
console.log('[applyFont] Setting body font-family to:', fontData.fontFamily)
|
|
98
|
+
document.body.style.fontFamily = fontData.fontFamily
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
// Export applyFont to be used by main.tsx
|
|
103
|
+
window.__linkapp_applyFont = applyFont
|
|
104
|
+
</script>
|
|
105
|
+
</head>
|
|
106
|
+
<body>
|
|
107
|
+
<div id="root"></div>
|
|
108
|
+
<script type="module" src="/featured-carousel/main.tsx"></script>
|
|
109
|
+
</body>
|
|
110
|
+
</html>
|
package/dev-server/featured.html
CHANGED
|
@@ -47,6 +47,60 @@
|
|
|
47
47
|
|
|
48
48
|
// Export applyTheme to be used by main.tsx
|
|
49
49
|
window.__linkapp_applyTheme = applyTheme
|
|
50
|
+
|
|
51
|
+
/**
|
|
52
|
+
* Apply font to iframe by injecting font CSS or external stylesheet
|
|
53
|
+
* Called once on mount from main.tsx
|
|
54
|
+
* @param {Object} fontData - Font configuration from parent
|
|
55
|
+
* @param {string} fontData.fontFamily - Font family name (e.g., "Inter", "Karla")
|
|
56
|
+
* @param {string} [fontData.cssUrl] - External CSS URL to load (e.g., Google Fonts, TypeKit)
|
|
57
|
+
* @param {string} [fontData.fontStyle] - Inline @font-face CSS definitions
|
|
58
|
+
*/
|
|
59
|
+
function applyFont(fontData) {
|
|
60
|
+
console.log('[applyFont] Called with:', fontData)
|
|
61
|
+
|
|
62
|
+
if (!fontData || typeof fontData !== 'object') {
|
|
63
|
+
console.warn('[applyFont] Invalid fontData')
|
|
64
|
+
return
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
// Remove existing font style/link if present to avoid duplicates
|
|
68
|
+
const existingFontElement = document.getElementById('linktree-font')
|
|
69
|
+
if (existingFontElement) {
|
|
70
|
+
console.log('[applyFont] Removing existing font element')
|
|
71
|
+
existingFontElement.remove()
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
// Option 1: External CSS URL (e.g., Google Fonts, TypeKit, custom CDN)
|
|
75
|
+
if (fontData.cssUrl) {
|
|
76
|
+
console.log('[applyFont] Loading external CSS:', fontData.cssUrl)
|
|
77
|
+
const link = document.createElement('link')
|
|
78
|
+
link.id = 'linktree-font'
|
|
79
|
+
link.rel = 'stylesheet'
|
|
80
|
+
link.href = fontData.cssUrl
|
|
81
|
+
link.crossOrigin = 'anonymous'
|
|
82
|
+
link.onload = () => console.log('[applyFont] CSS loaded successfully')
|
|
83
|
+
link.onerror = () => console.error('[applyFont] CSS failed to load')
|
|
84
|
+
document.head.appendChild(link)
|
|
85
|
+
}
|
|
86
|
+
// Option 2: Inline @font-face definitions
|
|
87
|
+
else if (fontData.fontStyle) {
|
|
88
|
+
console.log('[applyFont] Using inline @font-face')
|
|
89
|
+
const style = document.createElement('style')
|
|
90
|
+
style.id = 'linktree-font'
|
|
91
|
+
style.textContent = fontData.fontStyle
|
|
92
|
+
document.head.appendChild(style)
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
// Apply font-family to body element so all content inherits it
|
|
96
|
+
if (fontData.fontFamily) {
|
|
97
|
+
console.log('[applyFont] Setting body font-family to:', fontData.fontFamily)
|
|
98
|
+
document.body.style.fontFamily = fontData.fontFamily
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
// Export applyFont to be used by main.tsx
|
|
103
|
+
window.__linkapp_applyFont = applyFont
|
|
50
104
|
</script>
|
|
51
105
|
</head>
|
|
52
106
|
<body>
|
|
@@ -35,25 +35,32 @@ function Chin({ title }: { title?: string }) {
|
|
|
35
35
|
}
|
|
36
36
|
|
|
37
37
|
export default function Preview() {
|
|
38
|
-
//
|
|
38
|
+
// These are injected by the dev server
|
|
39
|
+
// @ts-expect-error - injected by dev server
|
|
40
|
+
const hasFeatured = typeof __HAS_FEATURED__ !== "undefined" && __HAS_FEATURED__;
|
|
41
|
+
// @ts-expect-error - injected by dev server
|
|
42
|
+
const hasCarousel =
|
|
43
|
+
typeof __HAS_CAROUSEL__ !== "undefined" && __HAS_CAROUSEL__;
|
|
44
|
+
|
|
45
|
+
// Initialize state from localStorage
|
|
39
46
|
const [selectedTab, setSelectedTab] = useState<
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
47
|
+
"sheet" | "featured" | "carousel" | "settings"
|
|
48
|
+
>(() => {
|
|
49
|
+
const saved = localStorage.getItem("linkapp-preview-tab");
|
|
50
|
+
if (saved === "featured" && !hasFeatured) {
|
|
51
|
+
return "sheet";
|
|
52
|
+
}
|
|
53
|
+
if (saved === "carousel" && !hasCarousel) {
|
|
54
|
+
return "sheet";
|
|
55
|
+
}
|
|
56
|
+
return (saved as "sheet" | "featured" | "carousel" | "settings") || "sheet";
|
|
57
|
+
});
|
|
45
58
|
const [selectedTheme, setSelectedTheme] = useState<
|
|
46
59
|
keyof typeof THEME_PRESETS
|
|
47
60
|
>(() => {
|
|
48
61
|
const saved = localStorage.getItem("linkapp-preview-theme");
|
|
49
62
|
return (saved as keyof typeof THEME_PRESETS) || "default";
|
|
50
63
|
});
|
|
51
|
-
const [selectedGroupLayoutOption, setSelectedGroupLayoutOption] = useState<
|
|
52
|
-
string | undefined
|
|
53
|
-
>(() => {
|
|
54
|
-
const saved = localStorage.getItem("linkapp-preview-groupLayoutOption");
|
|
55
|
-
return saved || undefined;
|
|
56
|
-
});
|
|
57
64
|
|
|
58
65
|
// Chin configuration from build-time constants
|
|
59
66
|
const chinPosition = __SETTINGS_CONFIG__?.featured_chin_position;
|
|
@@ -70,6 +77,10 @@ export default function Preview() {
|
|
|
70
77
|
() => `preview-iframe-featured-${Date.now()}`,
|
|
71
78
|
[],
|
|
72
79
|
);
|
|
80
|
+
const carouselIframeId = useMemo(
|
|
81
|
+
() => `preview-iframe-carousel-${Date.now()}`,
|
|
82
|
+
[],
|
|
83
|
+
);
|
|
73
84
|
const popupIframeId = useMemo(() => `preview-iframe-popup-${Date.now()}`, []);
|
|
74
85
|
|
|
75
86
|
// Save selected tab to localStorage
|
|
@@ -82,18 +93,6 @@ export default function Preview() {
|
|
|
82
93
|
localStorage.setItem("linkapp-preview-theme", selectedTheme);
|
|
83
94
|
}, [selectedTheme]);
|
|
84
95
|
|
|
85
|
-
// Save selected groupLayoutOption to localStorage
|
|
86
|
-
useEffect(() => {
|
|
87
|
-
if (selectedGroupLayoutOption) {
|
|
88
|
-
localStorage.setItem(
|
|
89
|
-
"linkapp-preview-groupLayoutOption",
|
|
90
|
-
selectedGroupLayoutOption,
|
|
91
|
-
);
|
|
92
|
-
} else {
|
|
93
|
-
localStorage.removeItem("linkapp-preview-groupLayoutOption");
|
|
94
|
-
}
|
|
95
|
-
}, [selectedGroupLayoutOption]);
|
|
96
|
-
|
|
97
96
|
// Handle iframe resize events
|
|
98
97
|
const handleResized = useCallback(
|
|
99
98
|
(ev: {
|
|
@@ -141,14 +140,14 @@ export default function Preview() {
|
|
|
141
140
|
<div
|
|
142
141
|
className={cn("min-h-screen", {
|
|
143
142
|
"bg-black/50": selectedTab === "sheet",
|
|
144
|
-
"bg-linktree-frame": selectedTab === "featured",
|
|
143
|
+
"bg-linktree-frame": selectedTab === "featured" || selectedTab === "carousel",
|
|
145
144
|
})}
|
|
146
145
|
id="preview"
|
|
147
146
|
>
|
|
148
147
|
<Tabs
|
|
149
148
|
value={selectedTab}
|
|
150
149
|
onValueChange={(value) =>
|
|
151
|
-
setSelectedTab(value as "sheet" | "featured" | "settings")
|
|
150
|
+
setSelectedTab(value as "sheet" | "featured" | "carousel" | "settings")
|
|
152
151
|
}
|
|
153
152
|
>
|
|
154
153
|
<Portal>
|
|
@@ -157,10 +156,13 @@ export default function Preview() {
|
|
|
157
156
|
style={{ zIndex: 1000000 }}
|
|
158
157
|
>
|
|
159
158
|
<TabsList>
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
159
|
+
<TabsTrigger value="sheet">Sheet</TabsTrigger>
|
|
160
|
+
{hasFeatured && <TabsTrigger value="featured">Featured</TabsTrigger>}
|
|
161
|
+
{hasCarousel && (
|
|
162
|
+
<TabsTrigger value="carousel">Carousel</TabsTrigger>
|
|
163
|
+
)}
|
|
164
|
+
<TabsTrigger value="settings">Settings</TabsTrigger>
|
|
165
|
+
</TabsList>
|
|
164
166
|
|
|
165
167
|
{/* Theme Switcher */}
|
|
166
168
|
<div className="flex items-center gap-2">
|
|
@@ -184,26 +186,6 @@ export default function Preview() {
|
|
|
184
186
|
))}
|
|
185
187
|
</select>
|
|
186
188
|
</div>
|
|
187
|
-
|
|
188
|
-
{/* Group Layout Option Switcher - Only show for Featured tab */}
|
|
189
|
-
{/*{selectedTab === "featured" && (
|
|
190
|
-
<div className="flex items-center gap-2">
|
|
191
|
-
<label htmlFor="groupLayoutOption-select" className="text-sm font-medium">
|
|
192
|
-
Layout:
|
|
193
|
-
</label>
|
|
194
|
-
<select
|
|
195
|
-
id="groupLayoutOption-select"
|
|
196
|
-
value={selectedGroupLayoutOption || "default"}
|
|
197
|
-
onChange={(e) =>
|
|
198
|
-
setSelectedGroupLayoutOption(e.target.value === "default" ? undefined : e.target.value)
|
|
199
|
-
}
|
|
200
|
-
className="h-9 px-3 py-1 text-sm border border-input bg-background rounded-md focus:outline-none focus:ring-2 focus:ring-ring"
|
|
201
|
-
>
|
|
202
|
-
<option value="default">Default</option>
|
|
203
|
-
<option value="carousel">Carousel</option>
|
|
204
|
-
</select>
|
|
205
|
-
</div>
|
|
206
|
-
)}*/}
|
|
207
189
|
</div>
|
|
208
190
|
</Portal>
|
|
209
191
|
|
|
@@ -258,160 +240,216 @@ export default function Preview() {
|
|
|
258
240
|
></path>
|
|
259
241
|
</svg>
|
|
260
242
|
</button>
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
243
|
+
</div>
|
|
244
|
+
</DialogHeader>
|
|
245
|
+
|
|
246
|
+
<div className="flex h-[calc(100%-64px)] flex-1 flex-col justify-between overflow-hidden">
|
|
247
|
+
<div className="h-full overflow-y-auto overflow-x-hidden">
|
|
248
|
+
<IframeResizer
|
|
249
|
+
key={`sheet-${selectedTheme}`}
|
|
250
|
+
id={sheetIframeId}
|
|
251
|
+
src={`/sheet?theme=${selectedTheme}`}
|
|
252
|
+
style={{
|
|
253
|
+
height: "0px",
|
|
254
|
+
width: "1px",
|
|
255
|
+
minWidth: "100%",
|
|
256
|
+
border: 0,
|
|
257
|
+
}}
|
|
258
|
+
checkOrigin={false}
|
|
259
|
+
onResized={handleResized}
|
|
260
|
+
heightCalculationMethod="max"
|
|
261
|
+
/>
|
|
262
|
+
</div>
|
|
263
|
+
</div>
|
|
264
|
+
</DialogContent>
|
|
265
|
+
</Dialog>
|
|
266
|
+
</TabsContent>
|
|
267
|
+
|
|
268
|
+
{hasFeatured && (
|
|
269
|
+
<TabsContent
|
|
270
|
+
value="featured"
|
|
271
|
+
className="m-0 flex justify-center p-8"
|
|
272
|
+
>
|
|
273
|
+
<div className="w-full max-w-[580px] flex flex-col px-[28px] py-7 items-center bg-gray-100">
|
|
274
|
+
<div className="w-full max-w-[524px]">
|
|
275
|
+
{chinPosition === "above" && <Chin title={chinTitle} />}
|
|
276
|
+
|
|
277
|
+
<div
|
|
278
|
+
className={cn(
|
|
279
|
+
"bg-linktree-button-bg hover:bg-linktree-button-bg-hover border-linktree-button-border text-linktree-button-text rounded-linktree-button shadow-linktree-button overflow-hidden",
|
|
280
|
+
isOverlay && "relative",
|
|
281
|
+
)}
|
|
282
|
+
style={
|
|
283
|
+
!__SETTINGS_CONFIG__?.featured_head_allow_unlocked_aspect_ratio
|
|
284
|
+
? { aspectRatio: "16 / 9" }
|
|
285
|
+
: undefined
|
|
286
|
+
}
|
|
287
|
+
>
|
|
288
|
+
{chinPosition === "overlay_above" && (
|
|
289
|
+
<div className="absolute top-0 left-0 right-0 z-10">
|
|
290
|
+
<Chin title={chinTitle} />
|
|
291
|
+
</div>
|
|
292
|
+
)}
|
|
293
|
+
|
|
294
|
+
<IframeResizer
|
|
295
|
+
key={`featured-${selectedTheme}`}
|
|
296
|
+
id={featuredIframeId}
|
|
297
|
+
src={`/featured?theme=${selectedTheme}`}
|
|
298
|
+
style={{
|
|
299
|
+
height: "0px",
|
|
300
|
+
width: "1px",
|
|
301
|
+
minWidth: "100%",
|
|
302
|
+
border: 0,
|
|
303
|
+
}}
|
|
304
|
+
checkOrigin={false}
|
|
305
|
+
onResized={handleResized}
|
|
306
|
+
heightCalculationMethod="max"
|
|
307
|
+
/>
|
|
308
|
+
|
|
309
|
+
{chinPosition === "overlayBelow" && (
|
|
310
|
+
<div className="absolute bottom-0 left-0 right-0 z-10">
|
|
311
|
+
<Chin title={chinTitle} />
|
|
312
|
+
</div>
|
|
313
|
+
)}
|
|
314
|
+
</div>
|
|
315
|
+
|
|
316
|
+
{chinPosition === "below" && <Chin title={chinTitle} />}
|
|
317
|
+
</div>
|
|
318
|
+
</div>
|
|
319
|
+
</TabsContent>
|
|
320
|
+
)}
|
|
321
|
+
|
|
322
|
+
{hasCarousel && (
|
|
323
|
+
<TabsContent
|
|
324
|
+
value="carousel"
|
|
325
|
+
className="m-0 flex justify-center p-8"
|
|
326
|
+
>
|
|
327
|
+
<div className="w-full max-w-[580px] flex flex-col px-[28px] py-7 items-center bg-gray-100">
|
|
328
|
+
<div className="w-full max-w-[524px]">
|
|
329
|
+
{chinPosition === "above" && <Chin title={chinTitle} />}
|
|
330
|
+
|
|
331
|
+
<div
|
|
332
|
+
className={cn(
|
|
333
|
+
"bg-linktree-button-bg hover:bg-linktree-button-bg-hover border-linktree-button-border text-linktree-button-text rounded-linktree-button shadow-linktree-button overflow-hidden",
|
|
334
|
+
isOverlay && "relative",
|
|
335
|
+
)}
|
|
336
|
+
style={
|
|
337
|
+
!__SETTINGS_CONFIG__?.featured_head_allow_unlocked_aspect_ratio
|
|
338
|
+
? { aspectRatio: "11 / 8" }
|
|
339
|
+
: undefined
|
|
340
|
+
}
|
|
341
|
+
>
|
|
342
|
+
{chinPosition === "overlay_above" && (
|
|
343
|
+
<div className="absolute top-0 left-0 right-0 z-10">
|
|
344
|
+
<Chin title={chinTitle} />
|
|
345
|
+
</div>
|
|
346
|
+
)}
|
|
347
|
+
|
|
348
|
+
<IframeResizer
|
|
349
|
+
key={`carousel-${selectedTheme}`}
|
|
350
|
+
id={carouselIframeId}
|
|
351
|
+
src={`/featured-carousel?theme=${selectedTheme}`}
|
|
352
|
+
style={{
|
|
353
|
+
height: "0px",
|
|
354
|
+
width: "1px",
|
|
355
|
+
minWidth: "100%",
|
|
356
|
+
border: 0,
|
|
357
|
+
}}
|
|
358
|
+
checkOrigin={false}
|
|
359
|
+
onResized={handleResized}
|
|
360
|
+
heightCalculationMethod="max"
|
|
361
|
+
/>
|
|
362
|
+
|
|
363
|
+
{chinPosition === "overlayBelow" && (
|
|
364
|
+
<div className="absolute bottom-0 left-0 right-0 z-10">
|
|
365
|
+
<Chin title={chinTitle} />
|
|
366
|
+
</div>
|
|
367
|
+
)}
|
|
368
|
+
</div>
|
|
369
|
+
|
|
370
|
+
{chinPosition === "below" && <Chin title={chinTitle} />}
|
|
371
|
+
</div>
|
|
372
|
+
</div>
|
|
373
|
+
</TabsContent>
|
|
374
|
+
)}
|
|
375
|
+
|
|
376
|
+
<TabsContent value="settings" className="m-0">
|
|
377
|
+
<SettingsPreview settings={__SETTINGS_CONFIG__} />
|
|
378
|
+
</TabsContent>
|
|
379
|
+
</div>
|
|
380
|
+
</Tabs>
|
|
381
|
+
|
|
382
|
+
{/* Popup Dialog for EXPAND_LINK_APP message */}
|
|
383
|
+
<Dialog open={isPopupOpen} onOpenChange={setIsPopupOpen} modal={false}>
|
|
384
|
+
<DialogContent
|
|
385
|
+
className="h-[calc(100dvh-2rem)] max-w-[608px] md:min-h-[25vh] md:h-[80%] md:max-h-[900px] overflow-auto"
|
|
386
|
+
showCloseButton={false}
|
|
387
|
+
>
|
|
388
|
+
<DialogHeader className="sticky top-0 bg-white px-4">
|
|
389
|
+
<div className="grid h-16 grid-cols-[32px_auto_32px] items-center gap-4">
|
|
390
|
+
<button className="flex size-8 items-center justify-center rounded-sm focus-visible:outline-none">
|
|
391
|
+
<svg
|
|
392
|
+
width="16"
|
|
393
|
+
height="16"
|
|
394
|
+
viewBox="0 0 16 16"
|
|
395
|
+
fill="none"
|
|
396
|
+
xmlns="http://www.w3.org/2000/svg"
|
|
397
|
+
className=" "
|
|
398
|
+
role="img"
|
|
399
|
+
aria-hidden="true"
|
|
400
|
+
>
|
|
401
|
+
<path
|
|
402
|
+
fill="currentColor"
|
|
403
|
+
d="m10.65 3.85.35.36.7-.71-.35-.35-3-3h-.7l-3 3-.36.35.71.7.35-.35L7.5 1.71V10h1V1.7l2.15 2.15ZM1 5.5l.5-.5H4v1H2v9h12V6h-2V5h2.5l.5.5v10l-.5.5h-13l-.5-.5v-10Z"
|
|
404
|
+
></path>
|
|
405
|
+
</svg>
|
|
406
|
+
</button>
|
|
407
|
+
|
|
408
|
+
<DialogTitle className="self-center truncate py-3 text-center">
|
|
409
|
+
Sheet
|
|
410
|
+
</DialogTitle>
|
|
411
|
+
|
|
412
|
+
<button className="flex size-8 items-center justify-center rounded-sm focus-visible:outline-none">
|
|
413
|
+
<svg
|
|
414
|
+
width="16"
|
|
415
|
+
height="16"
|
|
416
|
+
viewBox="0 0 16 16"
|
|
417
|
+
fill="none"
|
|
418
|
+
xmlns="http://www.w3.org/2000/svg"
|
|
419
|
+
className=" "
|
|
420
|
+
role="img"
|
|
421
|
+
aria-hidden="true"
|
|
422
|
+
>
|
|
423
|
+
<path
|
|
424
|
+
fill="currentColor"
|
|
425
|
+
d="m13.63 3.12.37-.38-.74-.74-.38.37.75.75ZM2.37 12.89l-.37.37.74.74.38-.37-.75-.75Zm.75-10.52L2.74 2 2 2.74l.37.38.75-.75Zm9.76 11.26.38.37.74-.74-.37-.38-.75.75Zm0-11.26L2.38 12.9l.74.74 10.5-10.51-.74-.75Zm-10.5.75 10.5 10.5.75-.73L3.12 2.37l-.75.75Z"
|
|
426
|
+
></path>
|
|
427
|
+
</svg>
|
|
428
|
+
</button>
|
|
429
|
+
</div>
|
|
430
|
+
</DialogHeader>
|
|
431
|
+
|
|
432
|
+
<div className="flex h-[calc(100%-64px)] flex-1 flex-col justify-between overflow-hidden">
|
|
433
|
+
<div className="h-full overflow-y-auto overflow-x-hidden">
|
|
434
|
+
<IframeResizer
|
|
435
|
+
key={`popup-${selectedTheme}`}
|
|
436
|
+
id={popupIframeId}
|
|
437
|
+
src={`/sheet?theme=${selectedTheme}`}
|
|
438
|
+
style={{
|
|
439
|
+
height: "0px",
|
|
440
|
+
width: "1px",
|
|
441
|
+
minWidth: "100%",
|
|
442
|
+
border: 0,
|
|
443
|
+
}}
|
|
444
|
+
checkOrigin={false}
|
|
445
|
+
onResized={handleResized}
|
|
446
|
+
heightCalculationMethod="max"
|
|
447
|
+
/>
|
|
448
|
+
</div>
|
|
449
|
+
</div>
|
|
450
|
+
</DialogContent>
|
|
451
|
+
</Dialog>
|
|
452
|
+
</div>
|
|
453
|
+
</>
|
|
454
|
+
);
|
|
303
455
|
}
|
|
304
|
-
>
|
|
305
|
-
{chinPosition === "overlay_above" && (
|
|
306
|
-
<div className="absolute top-0 left-0 right-0 z-10">
|
|
307
|
-
<Chin title={chinTitle} />
|
|
308
|
-
</div>
|
|
309
|
-
)}
|
|
310
|
-
|
|
311
|
-
<IframeResizer
|
|
312
|
-
key={`featured-${selectedTheme}-${selectedGroupLayoutOption || "default"}`}
|
|
313
|
-
id={featuredIframeId}
|
|
314
|
-
src={`/featured?theme=${selectedTheme}${selectedGroupLayoutOption ? `&groupLayoutOption=${selectedGroupLayoutOption}` : ""}`}
|
|
315
|
-
style={{
|
|
316
|
-
height: "0px",
|
|
317
|
-
width: "1px",
|
|
318
|
-
minWidth: "100%",
|
|
319
|
-
border: 0,
|
|
320
|
-
}}
|
|
321
|
-
checkOrigin={false}
|
|
322
|
-
onResized={handleResized}
|
|
323
|
-
heightCalculationMethod="max"
|
|
324
|
-
/>
|
|
325
|
-
|
|
326
|
-
{chinPosition === "overlayBelow" && (
|
|
327
|
-
<div className="absolute bottom-0 left-0 right-0 z-10">
|
|
328
|
-
<Chin title={chinTitle} />
|
|
329
|
-
</div>
|
|
330
|
-
)}
|
|
331
|
-
</div>
|
|
332
|
-
|
|
333
|
-
{chinPosition === "below" && <Chin title={chinTitle} />}
|
|
334
|
-
</div>
|
|
335
|
-
</div>
|
|
336
|
-
</TabsContent>
|
|
337
|
-
|
|
338
|
-
<TabsContent value="settings" className="m-0">
|
|
339
|
-
<SettingsPreview settings={__SETTINGS_CONFIG__} />
|
|
340
|
-
</TabsContent>
|
|
341
|
-
</div>
|
|
342
|
-
</Tabs>
|
|
343
|
-
|
|
344
|
-
{/* Popup Dialog for EXPAND_LINK_APP message */}
|
|
345
|
-
<Dialog open={isPopupOpen} onOpenChange={setIsPopupOpen} modal={false}>
|
|
346
|
-
<DialogContent
|
|
347
|
-
className="h-[calc(100dvh-2rem)] max-w-[608px] md:min-h-[25vh] md:h-[80%] md:max-h-[900px] overflow-auto"
|
|
348
|
-
showCloseButton={false}
|
|
349
|
-
>
|
|
350
|
-
<DialogHeader className="sticky top-0 bg-white px-4">
|
|
351
|
-
<div className="grid h-16 grid-cols-[32px_auto_32px] items-center gap-4">
|
|
352
|
-
<button className="flex size-8 items-center justify-center rounded-sm focus-visible:outline-none">
|
|
353
|
-
<svg
|
|
354
|
-
width="16"
|
|
355
|
-
height="16"
|
|
356
|
-
viewBox="0 0 16 16"
|
|
357
|
-
fill="none"
|
|
358
|
-
xmlns="http://www.w3.org/2000/svg"
|
|
359
|
-
className=" "
|
|
360
|
-
role="img"
|
|
361
|
-
aria-hidden="true"
|
|
362
|
-
>
|
|
363
|
-
<path
|
|
364
|
-
fill="currentColor"
|
|
365
|
-
d="m10.65 3.85.35.36.7-.71-.35-.35-3-3h-.7l-3 3-.36.35.71.7.35-.35L7.5 1.71V10h1V1.7l2.15 2.15ZM1 5.5l.5-.5H4v1H2v9h12V6h-2V5h2.5l.5.5v10l-.5.5h-13l-.5-.5v-10Z"
|
|
366
|
-
></path>
|
|
367
|
-
</svg>
|
|
368
|
-
</button>
|
|
369
|
-
|
|
370
|
-
<DialogTitle className="self-center truncate py-3 text-center">
|
|
371
|
-
Sheet
|
|
372
|
-
</DialogTitle>
|
|
373
|
-
|
|
374
|
-
<button className="flex size-8 items-center justify-center rounded-sm focus-visible:outline-none">
|
|
375
|
-
<svg
|
|
376
|
-
width="16"
|
|
377
|
-
height="16"
|
|
378
|
-
viewBox="0 0 16 16"
|
|
379
|
-
fill="none"
|
|
380
|
-
xmlns="http://www.w3.org/2000/svg"
|
|
381
|
-
className=" "
|
|
382
|
-
role="img"
|
|
383
|
-
aria-hidden="true"
|
|
384
|
-
>
|
|
385
|
-
<path
|
|
386
|
-
fill="currentColor"
|
|
387
|
-
d="m13.63 3.12.37-.38-.74-.74-.38.37.75.75ZM2.37 12.89l-.37.37.74.74.38-.37-.75-.75Zm.75-10.52L2.74 2 2 2.74l.37.38.75-.75Zm9.76 11.26.38.37.74-.74-.37-.38-.75.75Zm0-11.26L2.38 12.9l.74.74 10.5-10.51-.74-.75Zm-10.5.75 10.5 10.5.75-.73L3.12 2.37l-.75.75Z"
|
|
388
|
-
></path>
|
|
389
|
-
</svg>
|
|
390
|
-
</button>
|
|
391
|
-
</div>
|
|
392
|
-
</DialogHeader>
|
|
393
|
-
|
|
394
|
-
<div className="flex h-[calc(100%-64px)] flex-1 flex-col justify-between overflow-hidden">
|
|
395
|
-
<div className="h-full overflow-y-auto overflow-x-hidden">
|
|
396
|
-
<IframeResizer
|
|
397
|
-
key={`popup-${selectedTheme}`}
|
|
398
|
-
id={popupIframeId}
|
|
399
|
-
src={`/sheet?theme=${selectedTheme}`}
|
|
400
|
-
style={{
|
|
401
|
-
height: "0px",
|
|
402
|
-
width: "1px",
|
|
403
|
-
minWidth: "100%",
|
|
404
|
-
border: 0,
|
|
405
|
-
}}
|
|
406
|
-
checkOrigin={false}
|
|
407
|
-
onResized={handleResized}
|
|
408
|
-
heightCalculationMethod="max"
|
|
409
|
-
/>
|
|
410
|
-
</div>
|
|
411
|
-
</div>
|
|
412
|
-
</DialogContent>
|
|
413
|
-
</Dialog>
|
|
414
|
-
</div>
|
|
415
|
-
</>
|
|
416
|
-
);
|
|
417
|
-
}
|
|
@@ -2,7 +2,20 @@
|
|
|
2
2
|
* Theme presets for testing LinkApps in dev mode
|
|
3
3
|
* Based on actual CSS variables from live Linktree profiles
|
|
4
4
|
*/
|
|
5
|
-
|
|
5
|
+
|
|
6
|
+
export type FontData = {
|
|
7
|
+
fontFamily: string
|
|
8
|
+
cssUrl?: string
|
|
9
|
+
fontStyle?: string
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
export type ThemePreset = {
|
|
13
|
+
name: string
|
|
14
|
+
variables: Record<string, string>
|
|
15
|
+
font?: FontData
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
export const THEME_PRESETS: Record<string, ThemePreset> = {
|
|
6
19
|
default: {
|
|
7
20
|
name: "Default (Light)",
|
|
8
21
|
variables: {
|
|
@@ -19,6 +32,10 @@ export const THEME_PRESETS = {
|
|
|
19
32
|
"--button-style-inner-radius": "min(8px, max(4px, calc(8px - 8px)))",
|
|
20
33
|
"--button-style-skeleton-color": "rgba(0, 0, 0, 0.05)",
|
|
21
34
|
},
|
|
35
|
+
font: {
|
|
36
|
+
fontFamily: "Inter, sans-serif",
|
|
37
|
+
cssUrl: "https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&display=swap",
|
|
38
|
+
},
|
|
22
39
|
},
|
|
23
40
|
dark: {
|
|
24
41
|
name: "Dark",
|
|
@@ -36,6 +53,10 @@ export const THEME_PRESETS = {
|
|
|
36
53
|
"--button-style-inner-radius": "min(8px, max(4px, calc(8px - 8px)))",
|
|
37
54
|
"--button-style-skeleton-color": "rgba(255, 255, 255, 0.1)",
|
|
38
55
|
},
|
|
56
|
+
font: {
|
|
57
|
+
fontFamily: "Roboto, sans-serif",
|
|
58
|
+
cssUrl: "https://fonts.googleapis.com/css2?family=Roboto:wght@400;500;700&display=swap",
|
|
59
|
+
},
|
|
39
60
|
},
|
|
40
61
|
purple: {
|
|
41
62
|
name: "Purple",
|
|
@@ -53,6 +74,10 @@ export const THEME_PRESETS = {
|
|
|
53
74
|
"--button-style-inner-radius": "min(16px, max(4px, calc(16px - 8px)))",
|
|
54
75
|
"--button-style-skeleton-color": "rgba(124, 58, 237, 0.1)",
|
|
55
76
|
},
|
|
77
|
+
font: {
|
|
78
|
+
fontFamily: "Poppins, sans-serif",
|
|
79
|
+
cssUrl: "https://fonts.googleapis.com/css2?family=Poppins:wght@400;500;600;700&display=swap",
|
|
80
|
+
},
|
|
56
81
|
},
|
|
57
82
|
outline: {
|
|
58
83
|
name: "Outline Style",
|
|
@@ -69,6 +94,10 @@ export const THEME_PRESETS = {
|
|
|
69
94
|
"--button-style-inner-radius": "min(24px, max(4px, calc(24px - 8px)))",
|
|
70
95
|
"--button-style-skeleton-color": "rgba(0, 0, 0, 0.05)",
|
|
71
96
|
},
|
|
97
|
+
font: {
|
|
98
|
+
fontFamily: "Montserrat, sans-serif",
|
|
99
|
+
cssUrl: "https://fonts.googleapis.com/css2?family=Montserrat:wght@400;500;600;700&display=swap",
|
|
100
|
+
},
|
|
72
101
|
},
|
|
73
102
|
rounded: {
|
|
74
103
|
name: "Fully Rounded",
|
|
@@ -86,5 +115,9 @@ export const THEME_PRESETS = {
|
|
|
86
115
|
"--button-style-inner-radius": "28px",
|
|
87
116
|
"--button-style-skeleton-color": "rgba(5, 150, 105, 0.1)",
|
|
88
117
|
},
|
|
118
|
+
font: {
|
|
119
|
+
fontFamily: "Nunito, sans-serif",
|
|
120
|
+
cssUrl: "https://fonts.googleapis.com/css2?family=Nunito:wght@400;500;600;700&display=swap",
|
|
121
|
+
},
|
|
89
122
|
},
|
|
90
123
|
};
|
|
@@ -5,10 +5,15 @@ import "@/app/globals.css";
|
|
|
5
5
|
import { THEME_PRESETS } from "../shared/theme-presets";
|
|
6
6
|
import { getThemeFromUrl, mergeThemeProps } from "../shared/theme-utils";
|
|
7
7
|
|
|
8
|
-
// Declare global window
|
|
8
|
+
// Declare global window properties for theme and font application
|
|
9
9
|
declare global {
|
|
10
10
|
interface Window {
|
|
11
11
|
__linkapp_applyTheme?: (variables: Record<string, string>) => void
|
|
12
|
+
__linkapp_applyFont?: (fontData: {
|
|
13
|
+
fontFamily: string
|
|
14
|
+
fontStyle?: string
|
|
15
|
+
cssUrl?: string
|
|
16
|
+
}) => void
|
|
12
17
|
}
|
|
13
18
|
}
|
|
14
19
|
|
|
@@ -23,6 +28,14 @@ const THEME_VARS = Object.fromEntries(
|
|
|
23
28
|
// Get theme variables from URL
|
|
24
29
|
const themeVariables = getThemeFromUrl(THEME_VARS);
|
|
25
30
|
|
|
31
|
+
// Get the selected theme key from URL or default to "default"
|
|
32
|
+
const urlParams = new URLSearchParams(window.location.search);
|
|
33
|
+
const themeKey = urlParams.get("theme") || "default";
|
|
34
|
+
const selectedTheme = THEME_PRESETS[themeKey as keyof typeof THEME_PRESETS] || THEME_PRESETS.default;
|
|
35
|
+
|
|
36
|
+
console.log('[Sheet Dev] Theme:', themeKey, 'Font data:', selectedTheme.font);
|
|
37
|
+
console.log('[Sheet Dev] applyFont function exists?', typeof window.__linkapp_applyFont);
|
|
38
|
+
|
|
26
39
|
// Merge with preview props
|
|
27
40
|
const previewProps = __PREVIEW_PROPS__ || {};
|
|
28
41
|
const mergedProps = mergeThemeProps(themeVariables, previewProps);
|
|
@@ -32,6 +45,14 @@ if (themeVariables && window.__linkapp_applyTheme) {
|
|
|
32
45
|
window.__linkapp_applyTheme(themeVariables);
|
|
33
46
|
}
|
|
34
47
|
|
|
48
|
+
// Apply font on mount
|
|
49
|
+
if (selectedTheme.font && window.__linkapp_applyFont) {
|
|
50
|
+
console.log('[Sheet Dev] Applying font:', selectedTheme.font);
|
|
51
|
+
window.__linkapp_applyFont(selectedTheme.font);
|
|
52
|
+
} else {
|
|
53
|
+
console.warn('[Sheet Dev] Font not applied - font data:', selectedTheme.font, 'function:', window.__linkapp_applyFont);
|
|
54
|
+
}
|
|
55
|
+
|
|
35
56
|
const rootElement = document.getElementById("root");
|
|
36
57
|
if (!rootElement) {
|
|
37
58
|
throw new Error("Root element not found");
|
package/dev-server/sheet.html
CHANGED
|
@@ -47,6 +47,60 @@
|
|
|
47
47
|
|
|
48
48
|
// Export applyTheme to be used by main.tsx
|
|
49
49
|
window.__linkapp_applyTheme = applyTheme
|
|
50
|
+
|
|
51
|
+
/**
|
|
52
|
+
* Apply font to iframe by injecting font CSS or external stylesheet
|
|
53
|
+
* Called once on mount from main.tsx
|
|
54
|
+
* @param {Object} fontData - Font configuration from parent
|
|
55
|
+
* @param {string} fontData.fontFamily - Font family name (e.g., "Inter", "Karla")
|
|
56
|
+
* @param {string} [fontData.cssUrl] - External CSS URL to load (e.g., Google Fonts, TypeKit)
|
|
57
|
+
* @param {string} [fontData.fontStyle] - Inline @font-face CSS definitions
|
|
58
|
+
*/
|
|
59
|
+
function applyFont(fontData) {
|
|
60
|
+
console.log('[applyFont] Called with:', fontData)
|
|
61
|
+
|
|
62
|
+
if (!fontData || typeof fontData !== 'object') {
|
|
63
|
+
console.warn('[applyFont] Invalid fontData')
|
|
64
|
+
return
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
// Remove existing font style/link if present to avoid duplicates
|
|
68
|
+
const existingFontElement = document.getElementById('linktree-font')
|
|
69
|
+
if (existingFontElement) {
|
|
70
|
+
console.log('[applyFont] Removing existing font element')
|
|
71
|
+
existingFontElement.remove()
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
// Option 1: External CSS URL (e.g., Google Fonts, TypeKit, custom CDN)
|
|
75
|
+
if (fontData.cssUrl) {
|
|
76
|
+
console.log('[applyFont] Loading external CSS:', fontData.cssUrl)
|
|
77
|
+
const link = document.createElement('link')
|
|
78
|
+
link.id = 'linktree-font'
|
|
79
|
+
link.rel = 'stylesheet'
|
|
80
|
+
link.href = fontData.cssUrl
|
|
81
|
+
link.crossOrigin = 'anonymous'
|
|
82
|
+
link.onload = () => console.log('[applyFont] CSS loaded successfully')
|
|
83
|
+
link.onerror = () => console.error('[applyFont] CSS failed to load')
|
|
84
|
+
document.head.appendChild(link)
|
|
85
|
+
}
|
|
86
|
+
// Option 2: Inline @font-face definitions
|
|
87
|
+
else if (fontData.fontStyle) {
|
|
88
|
+
console.log('[applyFont] Using inline @font-face')
|
|
89
|
+
const style = document.createElement('style')
|
|
90
|
+
style.id = 'linktree-font'
|
|
91
|
+
style.textContent = fontData.fontStyle
|
|
92
|
+
document.head.appendChild(style)
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
// Apply font-family to body element so all content inherits it
|
|
96
|
+
if (fontData.fontFamily) {
|
|
97
|
+
console.log('[applyFont] Setting body font-family to:', fontData.fontFamily)
|
|
98
|
+
document.body.style.fontFamily = fontData.fontFamily
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
// Export applyFont to be used by main.tsx
|
|
103
|
+
window.__linkapp_applyFont = applyFont
|
|
50
104
|
</script>
|
|
51
105
|
</head>
|
|
52
106
|
<body>
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dev.d.ts","sourceRoot":"","sources":["../../src/commands/dev.ts"],"names":[],"mappings":"AAmBA,UAAU,UAAU;IAClB,IAAI,CAAC,EAAE,MAAM,CAAA;CACd;
|
|
1
|
+
{"version":3,"file":"dev.d.ts","sourceRoot":"","sources":["../../src/commands/dev.ts"],"names":[],"mappings":"AAmBA,UAAU,UAAU;IAClB,IAAI,CAAC,EAAE,MAAM,CAAA;CACd;AAqYD,wBAAsB,UAAU,CAAC,OAAO,EAAE,UAAU,iBAkWnD"}
|
package/dist/commands/dev.js
CHANGED
|
@@ -152,10 +152,15 @@ import "@/app/globals.css";
|
|
|
152
152
|
import { THEME_PRESETS } from "${themePresetsPath}";
|
|
153
153
|
import { getThemeFromUrl, mergeThemeProps } from "${themeUtilsPath}";
|
|
154
154
|
|
|
155
|
-
// Declare global window
|
|
155
|
+
// Declare global window properties for theme and font application
|
|
156
156
|
declare global {
|
|
157
157
|
interface Window {
|
|
158
158
|
__linkapp_applyTheme?: (variables: Record<string, string>) => void
|
|
159
|
+
__linkapp_applyFont?: (fontData: {
|
|
160
|
+
fontFamily: string
|
|
161
|
+
fontStyle?: string
|
|
162
|
+
cssUrl?: string
|
|
163
|
+
}) => void
|
|
159
164
|
}
|
|
160
165
|
}
|
|
161
166
|
|
|
@@ -170,6 +175,14 @@ const THEME_VARS = Object.fromEntries(
|
|
|
170
175
|
// Get theme variables from URL (defaults to 'default' theme)
|
|
171
176
|
const themeVariables = getThemeFromUrl(THEME_VARS) || THEME_PRESETS.default.variables;
|
|
172
177
|
|
|
178
|
+
// Get the selected theme key from URL or default to "default"
|
|
179
|
+
const urlParams = new URLSearchParams(window.location.search);
|
|
180
|
+
const themeKey = urlParams.get("theme") || "default";
|
|
181
|
+
const selectedTheme = THEME_PRESETS[themeKey as keyof typeof THEME_PRESETS] || THEME_PRESETS.default;
|
|
182
|
+
|
|
183
|
+
console.log('[Sheet Dev] Theme:', themeKey, 'Font data:', selectedTheme.font);
|
|
184
|
+
console.log('[Sheet Dev] applyFont function exists?', typeof window.__linkapp_applyFont);
|
|
185
|
+
|
|
173
186
|
// Merge with preview props
|
|
174
187
|
const previewProps = __PREVIEW_PROPS__ || {};
|
|
175
188
|
const mergedProps = mergeThemeProps(themeVariables, previewProps);
|
|
@@ -179,6 +192,14 @@ if (window.__linkapp_applyTheme) {
|
|
|
179
192
|
window.__linkapp_applyTheme(themeVariables);
|
|
180
193
|
}
|
|
181
194
|
|
|
195
|
+
// Apply font on mount
|
|
196
|
+
if (selectedTheme.font && window.__linkapp_applyFont) {
|
|
197
|
+
console.log('[Sheet Dev] Applying font:', selectedTheme.font);
|
|
198
|
+
window.__linkapp_applyFont(selectedTheme.font);
|
|
199
|
+
} else {
|
|
200
|
+
console.warn('[Sheet Dev] Font not applied - font data:', selectedTheme.font, 'function:', window.__linkapp_applyFont);
|
|
201
|
+
}
|
|
202
|
+
|
|
182
203
|
const rootElement = document.getElementById("root");
|
|
183
204
|
if (!rootElement) {
|
|
184
205
|
throw new Error("Root element not found");
|
|
@@ -191,6 +212,61 @@ createRoot(rootElement).render(
|
|
|
191
212
|
);
|
|
192
213
|
`;
|
|
193
214
|
}
|
|
215
|
+
/**
|
|
216
|
+
* Generates the featured-carousel entry point (always uses FeaturedCarousel component)
|
|
217
|
+
*/
|
|
218
|
+
function generateFeaturedCarouselEntryPoint(devServerPath) {
|
|
219
|
+
// Use absolute paths to shared theme files in the dev-server directory
|
|
220
|
+
const themePresetsPath = resolve(devServerPath, 'shared/theme-presets');
|
|
221
|
+
const themeUtilsPath = resolve(devServerPath, 'shared/theme-utils');
|
|
222
|
+
return `import FeaturedCarousel from "@/app/featured-carousel";
|
|
223
|
+
import { StrictMode } from "react";
|
|
224
|
+
import { createRoot } from "react-dom/client";
|
|
225
|
+
import "@/app/globals.css";
|
|
226
|
+
import { THEME_PRESETS } from "${themePresetsPath}";
|
|
227
|
+
import { getThemeFromUrl, mergeThemeProps } from "${themeUtilsPath}";
|
|
228
|
+
|
|
229
|
+
// Declare global window property for theme application
|
|
230
|
+
declare global {
|
|
231
|
+
interface Window {
|
|
232
|
+
__linkapp_applyTheme?: (variables: Record<string, string>) => void
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
// Preview props injected by dev server via Rsbuild define
|
|
237
|
+
declare const __PREVIEW_PROPS__: Record<string, unknown>;
|
|
238
|
+
|
|
239
|
+
// Extract just the variables from THEME_PRESETS for theme lookups
|
|
240
|
+
const THEME_VARS = Object.fromEntries(
|
|
241
|
+
Object.entries(THEME_PRESETS).map(([key, { variables }]) => [key, variables])
|
|
242
|
+
);
|
|
243
|
+
|
|
244
|
+
// Get theme variables from URL
|
|
245
|
+
const themeVariables = getThemeFromUrl(THEME_VARS) || THEME_PRESETS.default.variables;
|
|
246
|
+
|
|
247
|
+
// Merge with preview props
|
|
248
|
+
const previewProps = __PREVIEW_PROPS__ || {};
|
|
249
|
+
const mergedProps = mergeThemeProps(themeVariables, previewProps);
|
|
250
|
+
|
|
251
|
+
// Apply theme CSS variables on mount (always apply, even if default)
|
|
252
|
+
if (window.__linkapp_applyTheme) {
|
|
253
|
+
window.__linkapp_applyTheme(themeVariables);
|
|
254
|
+
}
|
|
255
|
+
|
|
256
|
+
const rootElement = document.getElementById("root");
|
|
257
|
+
if (!rootElement) {
|
|
258
|
+
throw new Error("Root element not found");
|
|
259
|
+
}
|
|
260
|
+
|
|
261
|
+
console.log('[Featured Carousel Dev Server] Rendering FeaturedCarousel component');
|
|
262
|
+
|
|
263
|
+
createRoot(rootElement).render(
|
|
264
|
+
<StrictMode>
|
|
265
|
+
<FeaturedCarousel {...mergedProps} />
|
|
266
|
+
</StrictMode>,
|
|
267
|
+
);
|
|
268
|
+
`;
|
|
269
|
+
}
|
|
194
270
|
/**
|
|
195
271
|
* Generates the featured entry point dynamically based on available layouts
|
|
196
272
|
*/
|
|
@@ -228,10 +304,15 @@ import "@/app/globals.css";
|
|
|
228
304
|
import { THEME_PRESETS } from "${themePresetsPath}";
|
|
229
305
|
import { getThemeFromUrl, mergeThemeProps } from "${themeUtilsPath}";
|
|
230
306
|
|
|
231
|
-
// Declare global window
|
|
307
|
+
// Declare global window properties for theme and font application
|
|
232
308
|
declare global {
|
|
233
309
|
interface Window {
|
|
234
310
|
__linkapp_applyTheme?: (variables: Record<string, string>) => void
|
|
311
|
+
__linkapp_applyFont?: (fontData: {
|
|
312
|
+
fontFamily: string
|
|
313
|
+
fontStyle?: string
|
|
314
|
+
cssUrl?: string
|
|
315
|
+
}) => void
|
|
235
316
|
}
|
|
236
317
|
}
|
|
237
318
|
|
|
@@ -248,6 +329,13 @@ const params = new URLSearchParams(window.location.search);
|
|
|
248
329
|
const groupLayoutOptionParam = params.get('groupLayoutOption');
|
|
249
330
|
const themeVariables = getThemeFromUrl(THEME_VARS) || THEME_PRESETS.default.variables;
|
|
250
331
|
|
|
332
|
+
// Get the selected theme for font application
|
|
333
|
+
const themeKey = params.get("theme") || "default";
|
|
334
|
+
const selectedTheme = THEME_PRESETS[themeKey as keyof typeof THEME_PRESETS] || THEME_PRESETS.default;
|
|
335
|
+
|
|
336
|
+
console.log('[Featured Dev] Theme:', themeKey, 'Font data:', selectedTheme.font);
|
|
337
|
+
console.log('[Featured Dev] applyFont function exists?', typeof window.__linkapp_applyFont);
|
|
338
|
+
|
|
251
339
|
// Merge with preview props and add groupLayoutOption
|
|
252
340
|
const previewProps = __PREVIEW_PROPS__ || {};
|
|
253
341
|
const mergedProps = mergeThemeProps(themeVariables, previewProps, {
|
|
@@ -259,6 +347,14 @@ if (window.__linkapp_applyTheme) {
|
|
|
259
347
|
window.__linkapp_applyTheme(themeVariables);
|
|
260
348
|
}
|
|
261
349
|
|
|
350
|
+
// Apply font on mount
|
|
351
|
+
if (selectedTheme.font && window.__linkapp_applyFont) {
|
|
352
|
+
console.log('[Featured Dev] Applying font:', selectedTheme.font);
|
|
353
|
+
window.__linkapp_applyFont(selectedTheme.font);
|
|
354
|
+
} else {
|
|
355
|
+
console.warn('[Featured Dev] Font not applied - font data:', selectedTheme.font, 'function:', window.__linkapp_applyFont);
|
|
356
|
+
}
|
|
357
|
+
|
|
262
358
|
const rootElement = document.getElementById("root");
|
|
263
359
|
if (!rootElement) {
|
|
264
360
|
throw new Error("Root element not found");
|
|
@@ -296,16 +392,25 @@ export async function devCommand(options) {
|
|
|
296
392
|
const devServerPath = resolve(__dirname, '../../dev-server');
|
|
297
393
|
// Detect available layouts for dynamic entry generation
|
|
298
394
|
const layoutDetection = detectLayouts(userProjectPath);
|
|
395
|
+
const hasFeatured = layoutDetection.layouts.some(l => l.name === 'featured');
|
|
299
396
|
const hasFeaturedCarousel = layoutDetection.layouts.some(l => l.name === 'featured-carousel');
|
|
300
397
|
// Generate dynamic entry points in .linkapp directory
|
|
301
|
-
const linkappDir = join(userProjectPath,
|
|
398
|
+
const linkappDir = join(userProjectPath, ".linkapp");
|
|
302
399
|
if (!existsSync(linkappDir)) {
|
|
303
400
|
mkdirSync(linkappDir, { recursive: true });
|
|
304
401
|
}
|
|
305
|
-
const sheetEntryPath = join(linkappDir,
|
|
306
|
-
const featuredEntryPath = join(linkappDir,
|
|
307
|
-
|
|
308
|
-
writeFileSync(
|
|
402
|
+
const sheetEntryPath = join(linkappDir, "dev-sheet-main.tsx");
|
|
403
|
+
const featuredEntryPath = join(linkappDir, "dev-featured-main.tsx");
|
|
404
|
+
const featuredCarouselEntryPath = join(linkappDir, "dev-featured-carousel-main.tsx");
|
|
405
|
+
writeFileSync(sheetEntryPath, generateSheetEntryPoint(devServerPath), "utf-8");
|
|
406
|
+
// Only generate featured entry if the layout exists
|
|
407
|
+
if (hasFeatured) {
|
|
408
|
+
writeFileSync(featuredEntryPath, generateFeaturedEntryPoint(devServerPath, hasFeaturedCarousel), "utf-8");
|
|
409
|
+
}
|
|
410
|
+
// Only generate featured-carousel entry if the layout exists
|
|
411
|
+
if (hasFeaturedCarousel) {
|
|
412
|
+
writeFileSync(featuredCarouselEntryPath, generateFeaturedCarouselEntryPoint(devServerPath), "utf-8");
|
|
413
|
+
}
|
|
309
414
|
// Helper to load config (called on initial start and on config changes)
|
|
310
415
|
const loadProjectConfig = () => {
|
|
311
416
|
try {
|
|
@@ -405,13 +510,18 @@ export async function devCommand(options) {
|
|
|
405
510
|
],
|
|
406
511
|
source: {
|
|
407
512
|
entry: {
|
|
408
|
-
index: resolve(devServerPath,
|
|
513
|
+
index: resolve(devServerPath, "preview/main.tsx"),
|
|
409
514
|
sheet: sheetEntryPath,
|
|
410
|
-
featured: featuredEntryPath,
|
|
515
|
+
...(hasFeatured ? { featured: featuredEntryPath } : {}),
|
|
516
|
+
...(hasFeaturedCarousel
|
|
517
|
+
? { "featured-carousel": featuredCarouselEntryPath }
|
|
518
|
+
: {}),
|
|
411
519
|
},
|
|
412
520
|
define: {
|
|
413
521
|
__PREVIEW_PROPS__: JSON.stringify(previewProps),
|
|
414
522
|
__SETTINGS_CONFIG__: JSON.stringify(settingsConfig),
|
|
523
|
+
__HAS_FEATURED__: JSON.stringify(hasFeatured),
|
|
524
|
+
__HAS_CAROUSEL__: JSON.stringify(hasFeaturedCarousel),
|
|
415
525
|
},
|
|
416
526
|
},
|
|
417
527
|
resolve: {
|
|
@@ -426,6 +536,7 @@ export async function devCommand(options) {
|
|
|
426
536
|
index: resolve(devServerPath, 'index.html'),
|
|
427
537
|
sheet: resolve(devServerPath, 'sheet.html'),
|
|
428
538
|
featured: resolve(devServerPath, 'featured.html'),
|
|
539
|
+
'featured-carousel': resolve(devServerPath, 'featured-carousel.html'),
|
|
429
540
|
};
|
|
430
541
|
return templates[entryName] || resolve(devServerPath, 'index.html');
|
|
431
542
|
},
|
package/dist/commands/dev.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dev.js","sourceRoot":"","sources":["../../src/commands/dev.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"dev.js","sourceRoot":"","sources":["../../src/commands/dev.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
package/runtime/index.html
CHANGED
|
@@ -69,7 +69,7 @@
|
|
|
69
69
|
* @param {Object} fontData - Font configuration from parent
|
|
70
70
|
* @param {string} fontData.fontFamily - Font family name (e.g., "Inter", "Karla")
|
|
71
71
|
* @param {string} [fontData.cssUrl] - External CSS URL to load (e.g., Google Fonts, TypeKit)
|
|
72
|
-
* @param {string} [fontData.
|
|
72
|
+
* @param {string} [fontData.fontStyle] - Inline @font-face CSS definitions
|
|
73
73
|
*/
|
|
74
74
|
function applyFont(fontData) {
|
|
75
75
|
if (!fontData || typeof fontData !== 'object') {
|
|
@@ -92,10 +92,10 @@
|
|
|
92
92
|
document.head.appendChild(link)
|
|
93
93
|
}
|
|
94
94
|
// Option 2: Inline @font-face definitions
|
|
95
|
-
else if (fontData.
|
|
95
|
+
else if (fontData.fontStyle) {
|
|
96
96
|
const style = document.createElement('style')
|
|
97
97
|
style.id = 'linktree-font'
|
|
98
|
-
style.textContent = fontData.
|
|
98
|
+
style.textContent = fontData.fontStyle
|
|
99
99
|
document.head.appendChild(style)
|
|
100
100
|
}
|
|
101
101
|
|