@linktr.ee/linkapp 0.0.42 → 0.0.44
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 +11 -38
- package/dev-server/featured/main.tsx +24 -13
- package/dev-server/featured-carousel.html +47 -0
- package/dev-server/featured.html +47 -0
- package/dev-server/preview/Preview.tsx +238 -219
- package/dev-server/shared/theme-presets.ts +34 -1
- package/dev-server/sheet/main.tsx +16 -1
- package/dev-server/sheet.html +47 -0
- package/dist/commands/dev.d.ts.map +1 -1
- package/dist/commands/dev.js +55 -32
- package/dist/commands/dev.js.map +1 -1
- package/package.json +1 -1
- package/runtime/index.html +3 -3
package/README.md
CHANGED
|
@@ -188,33 +188,15 @@ export default defineConfig({
|
|
|
188
188
|
},
|
|
189
189
|
settings: {
|
|
190
190
|
title: 'My LinkApp Settings',
|
|
191
|
-
|
|
192
|
-
featured_chin_position: 'below',
|
|
193
|
-
featured_head_allow_unlocked_aspect_ratio: true,
|
|
194
|
-
sheet_behavior: 'expandGeneric',
|
|
195
|
-
featured_head_click_behavior: 'expand',
|
|
196
|
-
elements: [
|
|
197
|
-
{
|
|
198
|
-
type: 'text',
|
|
199
|
-
id: 'title',
|
|
200
|
-
label: 'Title',
|
|
201
|
-
defaultValue: 'Hello World'
|
|
202
|
-
}
|
|
203
|
-
]
|
|
204
|
-
},
|
|
205
|
-
url_match_rules: {
|
|
206
|
-
hostnames: ['{*.}?example.com']
|
|
207
|
-
},
|
|
208
|
-
preview_props: {
|
|
209
|
-
settings: {
|
|
210
|
-
title: 'Preview Title'
|
|
211
|
-
}
|
|
191
|
+
elements: []
|
|
212
192
|
}
|
|
213
193
|
})
|
|
214
194
|
```
|
|
215
195
|
|
|
216
196
|
**Important:** The `manifest.name` becomes your LinkApp ID (kebab-cased) and cannot be changed after first deployment.
|
|
217
197
|
|
|
198
|
+
See the [Configuration Reference](https://linktree.mintlify.app/essentials/configuration) for all available options.
|
|
199
|
+
|
|
218
200
|
## Build System
|
|
219
201
|
|
|
220
202
|
Uses Rsbuild (Rspack) for fast, optimized builds:
|
|
@@ -300,27 +282,18 @@ Apply CSS variables for theming:
|
|
|
300
282
|
|
|
301
283
|
LinkApps run in iframes and communicate with the parent window:
|
|
302
284
|
|
|
303
|
-
### From LinkApp to Parent
|
|
304
|
-
|
|
305
285
|
```typescript
|
|
306
286
|
import { useExpandLinkApp } from '@linktr.ee/linkapp/sdk'
|
|
307
287
|
|
|
308
|
-
|
|
309
|
-
const expand = useExpandLinkApp()
|
|
310
|
-
expand({ itemId: '123' })
|
|
311
|
-
```
|
|
312
|
-
|
|
313
|
-
### From Parent to LinkApp
|
|
288
|
+
function MyComponent() {
|
|
289
|
+
const expand = useExpandLinkApp()
|
|
314
290
|
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
variables: { '--theme-primary': '#fff' }
|
|
322
|
-
}
|
|
323
|
-
}, '*')
|
|
291
|
+
return (
|
|
292
|
+
<button onClick={() => expand()}>
|
|
293
|
+
Open in Modal
|
|
294
|
+
</button>
|
|
295
|
+
)
|
|
296
|
+
}
|
|
324
297
|
```
|
|
325
298
|
|
|
326
299
|
## Development
|
|
@@ -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>
|
|
@@ -47,6 +47,53 @@
|
|
|
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
|
+
if (!fontData || typeof fontData !== 'object') {
|
|
61
|
+
console.warn('[applyFont] Invalid fontData')
|
|
62
|
+
return
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
// Remove existing font style/link if present to avoid duplicates
|
|
66
|
+
const existingFontElement = document.getElementById('linktree-font')
|
|
67
|
+
if (existingFontElement) {
|
|
68
|
+
existingFontElement.remove()
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
// Option 1: External CSS URL (e.g., Google Fonts, TypeKit, custom CDN)
|
|
72
|
+
if (fontData.cssUrl) {
|
|
73
|
+
const link = document.createElement('link')
|
|
74
|
+
link.id = 'linktree-font'
|
|
75
|
+
link.rel = 'stylesheet'
|
|
76
|
+
link.href = fontData.cssUrl
|
|
77
|
+
link.crossOrigin = 'anonymous'
|
|
78
|
+
link.onerror = () => console.error('[applyFont] CSS failed to load')
|
|
79
|
+
document.head.appendChild(link)
|
|
80
|
+
}
|
|
81
|
+
// Option 2: Inline @font-face definitions
|
|
82
|
+
else if (fontData.fontStyle) {
|
|
83
|
+
const style = document.createElement('style')
|
|
84
|
+
style.id = 'linktree-font'
|
|
85
|
+
style.textContent = fontData.fontStyle
|
|
86
|
+
document.head.appendChild(style)
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
// Apply font-family to body element so all content inherits it
|
|
90
|
+
if (fontData.fontFamily) {
|
|
91
|
+
document.body.style.fontFamily = fontData.fontFamily
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
// Export applyFont to be used by main.tsx
|
|
96
|
+
window.__linkapp_applyFont = applyFont
|
|
50
97
|
</script>
|
|
51
98
|
</head>
|
|
52
99
|
<body>
|
package/dev-server/featured.html
CHANGED
|
@@ -47,6 +47,53 @@
|
|
|
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
|
+
if (!fontData || typeof fontData !== 'object') {
|
|
61
|
+
console.warn('[applyFont] Invalid fontData')
|
|
62
|
+
return
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
// Remove existing font style/link if present to avoid duplicates
|
|
66
|
+
const existingFontElement = document.getElementById('linktree-font')
|
|
67
|
+
if (existingFontElement) {
|
|
68
|
+
existingFontElement.remove()
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
// Option 1: External CSS URL (e.g., Google Fonts, TypeKit, custom CDN)
|
|
72
|
+
if (fontData.cssUrl) {
|
|
73
|
+
const link = document.createElement('link')
|
|
74
|
+
link.id = 'linktree-font'
|
|
75
|
+
link.rel = 'stylesheet'
|
|
76
|
+
link.href = fontData.cssUrl
|
|
77
|
+
link.crossOrigin = 'anonymous'
|
|
78
|
+
link.onerror = () => console.error('[applyFont] CSS failed to load')
|
|
79
|
+
document.head.appendChild(link)
|
|
80
|
+
}
|
|
81
|
+
// Option 2: Inline @font-face definitions
|
|
82
|
+
else if (fontData.fontStyle) {
|
|
83
|
+
const style = document.createElement('style')
|
|
84
|
+
style.id = 'linktree-font'
|
|
85
|
+
style.textContent = fontData.fontStyle
|
|
86
|
+
document.head.appendChild(style)
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
// Apply font-family to body element so all content inherits it
|
|
90
|
+
if (fontData.fontFamily) {
|
|
91
|
+
document.body.style.fontFamily = fontData.fontFamily
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
// Export applyFont to be used by main.tsx
|
|
96
|
+
window.__linkapp_applyFont = applyFont
|
|
50
97
|
</script>
|
|
51
98
|
</head>
|
|
52
99
|
<body>
|
|
@@ -35,13 +35,26 @@ 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
|
>(() => {
|
|
@@ -143,11 +156,13 @@ export default function Preview() {
|
|
|
143
156
|
style={{ zIndex: 1000000 }}
|
|
144
157
|
>
|
|
145
158
|
<TabsList>
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
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>
|
|
151
166
|
|
|
152
167
|
{/* Theme Switcher */}
|
|
153
168
|
<div className="flex items-center gap-2">
|
|
@@ -225,212 +240,216 @@ export default function Preview() {
|
|
|
225
240
|
></path>
|
|
226
241
|
</svg>
|
|
227
242
|
</button>
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
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
|
+
);
|
|
270
455
|
}
|
|
271
|
-
>
|
|
272
|
-
{chinPosition === "overlay_above" && (
|
|
273
|
-
<div className="absolute top-0 left-0 right-0 z-10">
|
|
274
|
-
<Chin title={chinTitle} />
|
|
275
|
-
</div>
|
|
276
|
-
)}
|
|
277
|
-
|
|
278
|
-
<IframeResizer
|
|
279
|
-
key={`featured-${selectedTheme}`}
|
|
280
|
-
id={featuredIframeId}
|
|
281
|
-
src={`/featured?theme=${selectedTheme}`}
|
|
282
|
-
style={{
|
|
283
|
-
height: "0px",
|
|
284
|
-
width: "1px",
|
|
285
|
-
minWidth: "100%",
|
|
286
|
-
border: 0,
|
|
287
|
-
}}
|
|
288
|
-
checkOrigin={false}
|
|
289
|
-
onResized={handleResized}
|
|
290
|
-
heightCalculationMethod="max"
|
|
291
|
-
/>
|
|
292
|
-
|
|
293
|
-
{chinPosition === "overlayBelow" && (
|
|
294
|
-
<div className="absolute bottom-0 left-0 right-0 z-10">
|
|
295
|
-
<Chin title={chinTitle} />
|
|
296
|
-
</div>
|
|
297
|
-
)}
|
|
298
|
-
</div>
|
|
299
|
-
|
|
300
|
-
{chinPosition === "below" && <Chin title={chinTitle} />}
|
|
301
|
-
</div>
|
|
302
|
-
</div>
|
|
303
|
-
</TabsContent>
|
|
304
|
-
|
|
305
|
-
<TabsContent
|
|
306
|
-
value="carousel"
|
|
307
|
-
className="m-0 flex justify-center p-8"
|
|
308
|
-
>
|
|
309
|
-
<div className="w-full max-w-[580px] flex flex-col px-[28px] py-7 items-center bg-gray-100">
|
|
310
|
-
<div className="w-full max-w-[524px]">
|
|
311
|
-
{chinPosition === "above" && <Chin title={chinTitle} />}
|
|
312
|
-
|
|
313
|
-
<div
|
|
314
|
-
className={cn(
|
|
315
|
-
"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",
|
|
316
|
-
isOverlay && "relative",
|
|
317
|
-
)}
|
|
318
|
-
style={
|
|
319
|
-
!__SETTINGS_CONFIG__?.featured_head_allow_unlocked_aspect_ratio
|
|
320
|
-
? { aspectRatio: "11 / 8" }
|
|
321
|
-
: undefined
|
|
322
|
-
}
|
|
323
|
-
>
|
|
324
|
-
{chinPosition === "overlay_above" && (
|
|
325
|
-
<div className="absolute top-0 left-0 right-0 z-10">
|
|
326
|
-
<Chin title={chinTitle} />
|
|
327
|
-
</div>
|
|
328
|
-
)}
|
|
329
|
-
|
|
330
|
-
<IframeResizer
|
|
331
|
-
key={`carousel-${selectedTheme}`}
|
|
332
|
-
id={carouselIframeId}
|
|
333
|
-
src={`/featured-carousel?theme=${selectedTheme}`}
|
|
334
|
-
style={{
|
|
335
|
-
height: "0px",
|
|
336
|
-
width: "1px",
|
|
337
|
-
minWidth: "100%",
|
|
338
|
-
border: 0,
|
|
339
|
-
}}
|
|
340
|
-
checkOrigin={false}
|
|
341
|
-
onResized={handleResized}
|
|
342
|
-
heightCalculationMethod="max"
|
|
343
|
-
/>
|
|
344
|
-
|
|
345
|
-
{chinPosition === "overlayBelow" && (
|
|
346
|
-
<div className="absolute bottom-0 left-0 right-0 z-10">
|
|
347
|
-
<Chin title={chinTitle} />
|
|
348
|
-
</div>
|
|
349
|
-
)}
|
|
350
|
-
</div>
|
|
351
|
-
|
|
352
|
-
{chinPosition === "below" && <Chin title={chinTitle} />}
|
|
353
|
-
</div>
|
|
354
|
-
</div>
|
|
355
|
-
</TabsContent>
|
|
356
|
-
|
|
357
|
-
<TabsContent value="settings" className="m-0">
|
|
358
|
-
<SettingsPreview settings={__SETTINGS_CONFIG__} />
|
|
359
|
-
</TabsContent>
|
|
360
|
-
</div>
|
|
361
|
-
</Tabs>
|
|
362
|
-
|
|
363
|
-
{/* Popup Dialog for EXPAND_LINK_APP message */}
|
|
364
|
-
<Dialog open={isPopupOpen} onOpenChange={setIsPopupOpen} modal={false}>
|
|
365
|
-
<DialogContent
|
|
366
|
-
className="h-[calc(100dvh-2rem)] max-w-[608px] md:min-h-[25vh] md:h-[80%] md:max-h-[900px] overflow-auto"
|
|
367
|
-
showCloseButton={false}
|
|
368
|
-
>
|
|
369
|
-
<DialogHeader className="sticky top-0 bg-white px-4">
|
|
370
|
-
<div className="grid h-16 grid-cols-[32px_auto_32px] items-center gap-4">
|
|
371
|
-
<button className="flex size-8 items-center justify-center rounded-sm focus-visible:outline-none">
|
|
372
|
-
<svg
|
|
373
|
-
width="16"
|
|
374
|
-
height="16"
|
|
375
|
-
viewBox="0 0 16 16"
|
|
376
|
-
fill="none"
|
|
377
|
-
xmlns="http://www.w3.org/2000/svg"
|
|
378
|
-
className=" "
|
|
379
|
-
role="img"
|
|
380
|
-
aria-hidden="true"
|
|
381
|
-
>
|
|
382
|
-
<path
|
|
383
|
-
fill="currentColor"
|
|
384
|
-
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"
|
|
385
|
-
></path>
|
|
386
|
-
</svg>
|
|
387
|
-
</button>
|
|
388
|
-
|
|
389
|
-
<DialogTitle className="self-center truncate py-3 text-center">
|
|
390
|
-
Sheet
|
|
391
|
-
</DialogTitle>
|
|
392
|
-
|
|
393
|
-
<button className="flex size-8 items-center justify-center rounded-sm focus-visible:outline-none">
|
|
394
|
-
<svg
|
|
395
|
-
width="16"
|
|
396
|
-
height="16"
|
|
397
|
-
viewBox="0 0 16 16"
|
|
398
|
-
fill="none"
|
|
399
|
-
xmlns="http://www.w3.org/2000/svg"
|
|
400
|
-
className=" "
|
|
401
|
-
role="img"
|
|
402
|
-
aria-hidden="true"
|
|
403
|
-
>
|
|
404
|
-
<path
|
|
405
|
-
fill="currentColor"
|
|
406
|
-
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"
|
|
407
|
-
></path>
|
|
408
|
-
</svg>
|
|
409
|
-
</button>
|
|
410
|
-
</div>
|
|
411
|
-
</DialogHeader>
|
|
412
|
-
|
|
413
|
-
<div className="flex h-[calc(100%-64px)] flex-1 flex-col justify-between overflow-hidden">
|
|
414
|
-
<div className="h-full overflow-y-auto overflow-x-hidden">
|
|
415
|
-
<IframeResizer
|
|
416
|
-
key={`popup-${selectedTheme}`}
|
|
417
|
-
id={popupIframeId}
|
|
418
|
-
src={`/sheet?theme=${selectedTheme}`}
|
|
419
|
-
style={{
|
|
420
|
-
height: "0px",
|
|
421
|
-
width: "1px",
|
|
422
|
-
minWidth: "100%",
|
|
423
|
-
border: 0,
|
|
424
|
-
}}
|
|
425
|
-
checkOrigin={false}
|
|
426
|
-
onResized={handleResized}
|
|
427
|
-
heightCalculationMethod="max"
|
|
428
|
-
/>
|
|
429
|
-
</div>
|
|
430
|
-
</div>
|
|
431
|
-
</DialogContent>
|
|
432
|
-
</Dialog>
|
|
433
|
-
</div>
|
|
434
|
-
</>
|
|
435
|
-
);
|
|
436
|
-
}
|
|
@@ -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,11 @@ 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
|
+
|
|
26
36
|
// Merge with preview props
|
|
27
37
|
const previewProps = __PREVIEW_PROPS__ || {};
|
|
28
38
|
const mergedProps = mergeThemeProps(themeVariables, previewProps);
|
|
@@ -32,6 +42,11 @@ if (themeVariables && window.__linkapp_applyTheme) {
|
|
|
32
42
|
window.__linkapp_applyTheme(themeVariables);
|
|
33
43
|
}
|
|
34
44
|
|
|
45
|
+
// Apply font on mount
|
|
46
|
+
if (selectedTheme.font && window.__linkapp_applyFont) {
|
|
47
|
+
window.__linkapp_applyFont(selectedTheme.font);
|
|
48
|
+
}
|
|
49
|
+
|
|
35
50
|
const rootElement = document.getElementById("root");
|
|
36
51
|
if (!rootElement) {
|
|
37
52
|
throw new Error("Root element not found");
|
package/dev-server/sheet.html
CHANGED
|
@@ -47,6 +47,53 @@
|
|
|
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
|
+
if (!fontData || typeof fontData !== 'object') {
|
|
61
|
+
console.warn('[applyFont] Invalid fontData')
|
|
62
|
+
return
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
// Remove existing font style/link if present to avoid duplicates
|
|
66
|
+
const existingFontElement = document.getElementById('linktree-font')
|
|
67
|
+
if (existingFontElement) {
|
|
68
|
+
existingFontElement.remove()
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
// Option 1: External CSS URL (e.g., Google Fonts, TypeKit, custom CDN)
|
|
72
|
+
if (fontData.cssUrl) {
|
|
73
|
+
const link = document.createElement('link')
|
|
74
|
+
link.id = 'linktree-font'
|
|
75
|
+
link.rel = 'stylesheet'
|
|
76
|
+
link.href = fontData.cssUrl
|
|
77
|
+
link.crossOrigin = 'anonymous'
|
|
78
|
+
link.onerror = () => console.error('[applyFont] CSS failed to load')
|
|
79
|
+
document.head.appendChild(link)
|
|
80
|
+
}
|
|
81
|
+
// Option 2: Inline @font-face definitions
|
|
82
|
+
else if (fontData.fontStyle) {
|
|
83
|
+
const style = document.createElement('style')
|
|
84
|
+
style.id = 'linktree-font'
|
|
85
|
+
style.textContent = fontData.fontStyle
|
|
86
|
+
document.head.appendChild(style)
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
// Apply font-family to body element so all content inherits it
|
|
90
|
+
if (fontData.fontFamily) {
|
|
91
|
+
document.body.style.fontFamily = fontData.fontFamily
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
// Export applyFont to be used by main.tsx
|
|
96
|
+
window.__linkapp_applyFont = applyFont
|
|
50
97
|
</script>
|
|
51
98
|
</head>
|
|
52
99
|
<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;AA2WD,wBAAsB,UAAU,CAAC,OAAO,EAAE,UAAU,iBAkWnD"}
|
package/dist/commands/dev.js
CHANGED
|
@@ -49,7 +49,7 @@ function createConfigWatcherPlugin(userProjectPath, onConfigChange) {
|
|
|
49
49
|
}
|
|
50
50
|
/**
|
|
51
51
|
* Creates middleware to serve static assets from the user's public directory
|
|
52
|
-
* while matching the legacy
|
|
52
|
+
* while matching the legacy dev server behavior.
|
|
53
53
|
*/
|
|
54
54
|
function createPublicDirPlugin(userPublicDir) {
|
|
55
55
|
const contentTypes = {
|
|
@@ -152,14 +152,19 @@ 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
|
|
|
162
|
-
// Preview props injected by dev server via
|
|
167
|
+
// Preview props injected by dev server via Rsbuild define
|
|
163
168
|
declare const __PREVIEW_PROPS__: Record<string, unknown>;
|
|
164
169
|
|
|
165
170
|
// Extract just the variables from THEME_PRESETS for theme lookups
|
|
@@ -170,6 +175,11 @@ 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
|
+
|
|
173
183
|
// Merge with preview props
|
|
174
184
|
const previewProps = __PREVIEW_PROPS__ || {};
|
|
175
185
|
const mergedProps = mergeThemeProps(themeVariables, previewProps);
|
|
@@ -179,6 +189,11 @@ if (window.__linkapp_applyTheme) {
|
|
|
179
189
|
window.__linkapp_applyTheme(themeVariables);
|
|
180
190
|
}
|
|
181
191
|
|
|
192
|
+
// Apply font on mount
|
|
193
|
+
if (selectedTheme.font && window.__linkapp_applyFont) {
|
|
194
|
+
window.__linkapp_applyFont(selectedTheme.font);
|
|
195
|
+
}
|
|
196
|
+
|
|
182
197
|
const rootElement = document.getElementById("root");
|
|
183
198
|
if (!rootElement) {
|
|
184
199
|
throw new Error("Root element not found");
|
|
@@ -237,8 +252,6 @@ if (!rootElement) {
|
|
|
237
252
|
throw new Error("Root element not found");
|
|
238
253
|
}
|
|
239
254
|
|
|
240
|
-
console.log('[Featured Carousel Dev Server] Rendering FeaturedCarousel component');
|
|
241
|
-
|
|
242
255
|
createRoot(rootElement).render(
|
|
243
256
|
<StrictMode>
|
|
244
257
|
<FeaturedCarousel {...mergedProps} />
|
|
@@ -260,21 +273,9 @@ function generateFeaturedEntryPoint(devServerPath, hasFeaturedCarousel) {
|
|
|
260
273
|
? `// Select the appropriate component based on groupLayoutOption parameter
|
|
261
274
|
const LayoutComponent = (groupLayoutOptionParam === 'carousel' && FeaturedCarousel)
|
|
262
275
|
? FeaturedCarousel
|
|
263
|
-
: Featured
|
|
264
|
-
|
|
265
|
-
console.log('[Featured Dev Server] Rendering:', {
|
|
266
|
-
groupLayoutOption: groupLayoutOptionParam,
|
|
267
|
-
component: groupLayoutOptionParam === 'carousel' && FeaturedCarousel ? 'FeaturedCarousel' : 'Featured',
|
|
268
|
-
hasFeaturedCarousel: true,
|
|
269
|
-
});`
|
|
276
|
+
: Featured;`
|
|
270
277
|
: `// Only Featured layout is available
|
|
271
|
-
const LayoutComponent = Featured
|
|
272
|
-
|
|
273
|
-
console.log('[Featured Dev Server] Rendering:', {
|
|
274
|
-
groupLayoutOption: groupLayoutOptionParam,
|
|
275
|
-
component: 'Featured',
|
|
276
|
-
hasFeaturedCarousel: false,
|
|
277
|
-
});`;
|
|
278
|
+
const LayoutComponent = Featured;`;
|
|
278
279
|
return `import Featured from "@/app/featured";
|
|
279
280
|
${featuredCarouselImport}
|
|
280
281
|
import { StrictMode } from "react";
|
|
@@ -283,14 +284,19 @@ import "@/app/globals.css";
|
|
|
283
284
|
import { THEME_PRESETS } from "${themePresetsPath}";
|
|
284
285
|
import { getThemeFromUrl, mergeThemeProps } from "${themeUtilsPath}";
|
|
285
286
|
|
|
286
|
-
// Declare global window
|
|
287
|
+
// Declare global window properties for theme and font application
|
|
287
288
|
declare global {
|
|
288
289
|
interface Window {
|
|
289
290
|
__linkapp_applyTheme?: (variables: Record<string, string>) => void
|
|
291
|
+
__linkapp_applyFont?: (fontData: {
|
|
292
|
+
fontFamily: string
|
|
293
|
+
fontStyle?: string
|
|
294
|
+
cssUrl?: string
|
|
295
|
+
}) => void
|
|
290
296
|
}
|
|
291
297
|
}
|
|
292
298
|
|
|
293
|
-
// Preview props injected by dev server via
|
|
299
|
+
// Preview props injected by dev server via Rsbuild define
|
|
294
300
|
declare const __PREVIEW_PROPS__: Record<string, unknown>;
|
|
295
301
|
|
|
296
302
|
// Extract just the variables from THEME_PRESETS for theme lookups
|
|
@@ -303,6 +309,10 @@ const params = new URLSearchParams(window.location.search);
|
|
|
303
309
|
const groupLayoutOptionParam = params.get('groupLayoutOption');
|
|
304
310
|
const themeVariables = getThemeFromUrl(THEME_VARS) || THEME_PRESETS.default.variables;
|
|
305
311
|
|
|
312
|
+
// Get the selected theme for font application
|
|
313
|
+
const themeKey = params.get("theme") || "default";
|
|
314
|
+
const selectedTheme = THEME_PRESETS[themeKey as keyof typeof THEME_PRESETS] || THEME_PRESETS.default;
|
|
315
|
+
|
|
306
316
|
// Merge with preview props and add groupLayoutOption
|
|
307
317
|
const previewProps = __PREVIEW_PROPS__ || {};
|
|
308
318
|
const mergedProps = mergeThemeProps(themeVariables, previewProps, {
|
|
@@ -314,6 +324,11 @@ if (window.__linkapp_applyTheme) {
|
|
|
314
324
|
window.__linkapp_applyTheme(themeVariables);
|
|
315
325
|
}
|
|
316
326
|
|
|
327
|
+
// Apply font on mount
|
|
328
|
+
if (selectedTheme.font && window.__linkapp_applyFont) {
|
|
329
|
+
window.__linkapp_applyFont(selectedTheme.font);
|
|
330
|
+
}
|
|
331
|
+
|
|
317
332
|
const rootElement = document.getElementById("root");
|
|
318
333
|
if (!rootElement) {
|
|
319
334
|
throw new Error("Root element not found");
|
|
@@ -329,7 +344,7 @@ createRoot(rootElement).render(
|
|
|
329
344
|
`;
|
|
330
345
|
}
|
|
331
346
|
export async function devCommand(options) {
|
|
332
|
-
const userProjectPath = process.cwd();
|
|
347
|
+
const userProjectPath = process.env.TURBO_PACKAGE_DIR ?? process.cwd();
|
|
333
348
|
process.env.LINKAPP_USER_PROJECT_PATH = userProjectPath;
|
|
334
349
|
// Suppress Rsbuild's built-in logging messages
|
|
335
350
|
logger.override({
|
|
@@ -351,20 +366,24 @@ export async function devCommand(options) {
|
|
|
351
366
|
const devServerPath = resolve(__dirname, '../../dev-server');
|
|
352
367
|
// Detect available layouts for dynamic entry generation
|
|
353
368
|
const layoutDetection = detectLayouts(userProjectPath);
|
|
369
|
+
const hasFeatured = layoutDetection.layouts.some(l => l.name === 'featured');
|
|
354
370
|
const hasFeaturedCarousel = layoutDetection.layouts.some(l => l.name === 'featured-carousel');
|
|
355
371
|
// Generate dynamic entry points in .linkapp directory
|
|
356
|
-
const linkappDir = join(userProjectPath,
|
|
372
|
+
const linkappDir = join(userProjectPath, ".linkapp");
|
|
357
373
|
if (!existsSync(linkappDir)) {
|
|
358
374
|
mkdirSync(linkappDir, { recursive: true });
|
|
359
375
|
}
|
|
360
|
-
const sheetEntryPath = join(linkappDir,
|
|
361
|
-
const featuredEntryPath = join(linkappDir,
|
|
362
|
-
const featuredCarouselEntryPath = join(linkappDir,
|
|
363
|
-
writeFileSync(sheetEntryPath, generateSheetEntryPoint(devServerPath),
|
|
364
|
-
|
|
376
|
+
const sheetEntryPath = join(linkappDir, "dev-sheet-main.tsx");
|
|
377
|
+
const featuredEntryPath = join(linkappDir, "dev-featured-main.tsx");
|
|
378
|
+
const featuredCarouselEntryPath = join(linkappDir, "dev-featured-carousel-main.tsx");
|
|
379
|
+
writeFileSync(sheetEntryPath, generateSheetEntryPoint(devServerPath), "utf-8");
|
|
380
|
+
// Only generate featured entry if the layout exists
|
|
381
|
+
if (hasFeatured) {
|
|
382
|
+
writeFileSync(featuredEntryPath, generateFeaturedEntryPoint(devServerPath, hasFeaturedCarousel), "utf-8");
|
|
383
|
+
}
|
|
365
384
|
// Only generate featured-carousel entry if the layout exists
|
|
366
385
|
if (hasFeaturedCarousel) {
|
|
367
|
-
writeFileSync(featuredCarouselEntryPath, generateFeaturedCarouselEntryPoint(devServerPath),
|
|
386
|
+
writeFileSync(featuredCarouselEntryPath, generateFeaturedCarouselEntryPoint(devServerPath), "utf-8");
|
|
368
387
|
}
|
|
369
388
|
// Helper to load config (called on initial start and on config changes)
|
|
370
389
|
const loadProjectConfig = () => {
|
|
@@ -465,14 +484,18 @@ export async function devCommand(options) {
|
|
|
465
484
|
],
|
|
466
485
|
source: {
|
|
467
486
|
entry: {
|
|
468
|
-
index: resolve(devServerPath,
|
|
487
|
+
index: resolve(devServerPath, "preview/main.tsx"),
|
|
469
488
|
sheet: sheetEntryPath,
|
|
470
|
-
featured: featuredEntryPath,
|
|
471
|
-
...(hasFeaturedCarousel
|
|
489
|
+
...(hasFeatured ? { featured: featuredEntryPath } : {}),
|
|
490
|
+
...(hasFeaturedCarousel
|
|
491
|
+
? { "featured-carousel": featuredCarouselEntryPath }
|
|
492
|
+
: {}),
|
|
472
493
|
},
|
|
473
494
|
define: {
|
|
474
495
|
__PREVIEW_PROPS__: JSON.stringify(previewProps),
|
|
475
496
|
__SETTINGS_CONFIG__: JSON.stringify(settingsConfig),
|
|
497
|
+
__HAS_FEATURED__: JSON.stringify(hasFeatured),
|
|
498
|
+
__HAS_CAROUSEL__: JSON.stringify(hasFeaturedCarousel),
|
|
476
499
|
},
|
|
477
500
|
},
|
|
478
501
|
resolve: {
|
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
|
|