@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.
@@ -13,10 +13,15 @@ try {
13
13
  // featured-carousel.tsx doesn't exist, that's ok
14
14
  }
15
15
 
16
- // Declare global window property for theme application
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('groupLayoutOption');
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 = (groupLayoutOptionParam === 'carousel' && FeaturedCarousel)
54
- ? FeaturedCarousel
55
- : Featured;
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>
@@ -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
- // Initialize state from localStorage
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
- "sheet" | "featured" | "settings"
41
- >(() => {
42
- const saved = localStorage.getItem("linkapp-preview-tab");
43
- return (saved as "sheet" | "featured" | "settings") || "sheet";
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
- <TabsTrigger value="sheet">Sheet</TabsTrigger>
161
- <TabsTrigger value="featured">Featured</TabsTrigger>
162
- <TabsTrigger value="settings">Settings</TabsTrigger>
163
- </TabsList>
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
- </div>
262
- </DialogHeader>
263
-
264
- <div className="flex h-[calc(100%-64px)] flex-1 flex-col justify-between overflow-hidden">
265
- <div className="h-full overflow-y-auto overflow-x-hidden">
266
- <IframeResizer
267
- key={`sheet-${selectedTheme}`}
268
- id={sheetIframeId}
269
- src={`/sheet?theme=${selectedTheme}`}
270
- style={{
271
- height: "0px",
272
- width: "1px",
273
- minWidth: "100%",
274
- border: 0,
275
- }}
276
- checkOrigin={false}
277
- onResized={handleResized}
278
- heightCalculationMethod="max"
279
- />
280
- </div>
281
- </div>
282
- </DialogContent>
283
- </Dialog>
284
- </TabsContent>
285
-
286
- <TabsContent
287
- value="featured"
288
- className="m-0 flex justify-center p-8"
289
- >
290
- <div className="w-full max-w-[580px] flex flex-col px-[28px] py-7 items-center bg-gray-100">
291
- <div className="w-full max-w-[524px]">
292
- {chinPosition === "above" && <Chin title={chinTitle} />}
293
-
294
- <div
295
- className={cn(
296
- "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",
297
- isOverlay && "relative",
298
- )}
299
- style={
300
- !__SETTINGS_CONFIG__?.featured_head_allow_unlocked_aspect_ratio
301
- ? { aspectRatio: "16 / 9" }
302
- : undefined
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
- export const THEME_PRESETS = {
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 property for theme application
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");
@@ -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;AAmSD,wBAAsB,UAAU,CAAC,OAAO,EAAE,UAAU,iBAsUnD"}
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"}
@@ -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 property for theme application
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 property for theme application
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, '.linkapp');
398
+ const linkappDir = join(userProjectPath, ".linkapp");
302
399
  if (!existsSync(linkappDir)) {
303
400
  mkdirSync(linkappDir, { recursive: true });
304
401
  }
305
- const sheetEntryPath = join(linkappDir, 'dev-sheet-main.tsx');
306
- const featuredEntryPath = join(linkappDir, 'dev-featured-main.tsx');
307
- writeFileSync(sheetEntryPath, generateSheetEntryPoint(devServerPath), 'utf-8');
308
- writeFileSync(featuredEntryPath, generateFeaturedEntryPoint(devServerPath, hasFeaturedCarousel), 'utf-8');
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, 'preview/main.tsx'),
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
  },
@@ -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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@linktr.ee/linkapp",
3
- "version": "0.0.41",
3
+ "version": "0.0.43",
4
4
  "description": "Development, build, and deployment tooling for LinkApps",
5
5
  "type": "module",
6
6
  "bin": {
@@ -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.style] - Inline @font-face CSS definitions
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.style) {
95
+ else if (fontData.fontStyle) {
96
96
  const style = document.createElement('style')
97
97
  style.id = 'linktree-font'
98
- style.textContent = fontData.style
98
+ style.textContent = fontData.fontStyle
99
99
  document.head.appendChild(style)
100
100
  }
101
101