@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 CHANGED
@@ -188,33 +188,15 @@ export default defineConfig({
188
188
  },
189
189
  settings: {
190
190
  title: 'My LinkApp Settings',
191
- uses_url: true,
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
- // Opens modal in parent window
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
- ```typescript
316
- // Parent sends theme updates
317
- window.postMessage({
318
- type: 'THEME_UPDATE',
319
- payload: {
320
- name: 'dark',
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 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>
@@ -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>
@@ -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
- // 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" | "carousel" | "settings"
41
- >(() => {
42
- const saved = localStorage.getItem("linkapp-preview-tab");
43
- return (saved as "sheet" | "featured" | "carousel" | "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
  >(() => {
@@ -143,11 +156,13 @@ export default function Preview() {
143
156
  style={{ zIndex: 1000000 }}
144
157
  >
145
158
  <TabsList>
146
- <TabsTrigger value="sheet">Sheet</TabsTrigger>
147
- <TabsTrigger value="featured">Featured</TabsTrigger>
148
- <TabsTrigger value="carousel">Carousel</TabsTrigger>
149
- <TabsTrigger value="settings">Settings</TabsTrigger>
150
- </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>
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
- </div>
229
- </DialogHeader>
230
-
231
- <div className="flex h-[calc(100%-64px)] flex-1 flex-col justify-between overflow-hidden">
232
- <div className="h-full overflow-y-auto overflow-x-hidden">
233
- <IframeResizer
234
- key={`sheet-${selectedTheme}`}
235
- id={sheetIframeId}
236
- src={`/sheet?theme=${selectedTheme}`}
237
- style={{
238
- height: "0px",
239
- width: "1px",
240
- minWidth: "100%",
241
- border: 0,
242
- }}
243
- checkOrigin={false}
244
- onResized={handleResized}
245
- heightCalculationMethod="max"
246
- />
247
- </div>
248
- </div>
249
- </DialogContent>
250
- </Dialog>
251
- </TabsContent>
252
-
253
- <TabsContent
254
- value="featured"
255
- className="m-0 flex justify-center p-8"
256
- >
257
- <div className="w-full max-w-[580px] flex flex-col px-[28px] py-7 items-center bg-gray-100">
258
- <div className="w-full max-w-[524px]">
259
- {chinPosition === "above" && <Chin title={chinTitle} />}
260
-
261
- <div
262
- className={cn(
263
- "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",
264
- isOverlay && "relative",
265
- )}
266
- style={
267
- !__SETTINGS_CONFIG__?.featured_head_allow_unlocked_aspect_ratio
268
- ? { aspectRatio: "16 / 9" }
269
- : 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
+ );
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
- 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,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");
@@ -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;AA4VD,wBAAsB,UAAU,CAAC,OAAO,EAAE,UAAU,iBA8UnD"}
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"}
@@ -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 Vite dev server behavior.
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 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
 
162
- // Preview props injected by dev server via Vite define
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 property for theme application
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 Vite define
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, '.linkapp');
372
+ const linkappDir = join(userProjectPath, ".linkapp");
357
373
  if (!existsSync(linkappDir)) {
358
374
  mkdirSync(linkappDir, { recursive: true });
359
375
  }
360
- const sheetEntryPath = join(linkappDir, 'dev-sheet-main.tsx');
361
- const featuredEntryPath = join(linkappDir, 'dev-featured-main.tsx');
362
- const featuredCarouselEntryPath = join(linkappDir, 'dev-featured-carousel-main.tsx');
363
- writeFileSync(sheetEntryPath, generateSheetEntryPoint(devServerPath), 'utf-8');
364
- writeFileSync(featuredEntryPath, generateFeaturedEntryPoint(devServerPath, hasFeaturedCarousel), 'utf-8');
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), 'utf-8');
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, 'preview/main.tsx'),
487
+ index: resolve(devServerPath, "preview/main.tsx"),
469
488
  sheet: sheetEntryPath,
470
- featured: featuredEntryPath,
471
- ...(hasFeaturedCarousel ? { 'featured-carousel': featuredCarouselEntryPath } : {}),
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: {
@@ -1 +1 @@
1
- {"version":3,"file":"dev.js","sourceRoot":"","sources":["../../src/commands/dev.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,YAAY,CAAA;AAC3B,OAAO,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,eAAe,CAAA;AAErD,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAA;AACnD,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,WAAW,CAAA;AAC1E,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AACxC,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAA;AAC/E,OAAO,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAA;AACzD,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AACpC,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,QAAQ,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,SAAS,CAAA;AACtF,OAAO,QAAQ,MAAM,UAAU,CAAA;AAE/B,MAAM,SAAS,GAAG,CAAC,OAAO,GAAG,EAAE,EAAQ,EAAE;IACvC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,OAAO,IAAI,CAAC,CAAA;AACtC,CAAC,CAAA;AAED,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;AACjD,MAAM,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC,CAAA;AAMrC;;;GAGG;AACH,SAAS,yBAAyB,CAChC,eAAuB,EACvB,cAAmC;IAEnC,OAAO;QACL,IAAI,EAAE,wBAAwB;QAC9B,KAAK,CAAC,GAAG;YACP,IAAI,OAAsD,CAAA;YAE1D,GAAG,CAAC,sBAAsB,CAAC,KAAK,IAAI,EAAE;gBACpC,MAAM,WAAW,GAAG;oBAClB,OAAO,CAAC,eAAe,EAAE,mBAAmB,CAAC;oBAC7C,OAAO,CAAC,eAAe,EAAE,SAAS,EAAE,mBAAmB,CAAC;iBACzD,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAA;gBAEpC,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC;oBAAE,OAAM;gBAEpC,OAAO,GAAG,QAAQ,CAAC,KAAK,CAAC,WAAW,EAAE;oBACpC,aAAa,EAAE,IAAI;oBACnB,sBAAsB,EAAE,IAAI;iBAC7B,CAAC,CAAA;gBAEF,MAAM,QAAQ,GAAG,KAAK,EAAE,QAAgB,EAAE,EAAE;oBAC1C,SAAS,CAAC,EAAE,CAAC,IAAI,CAAC,SAAS,QAAQ,CAAC,eAAe,EAAE,QAAQ,CAAC,sCAAsC,CAAC,CAAC,CAAA;oBACtG,MAAM,cAAc,EAAE,CAAA;gBACxB,CAAC,CAAA;gBAED,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAA;gBAC9B,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAA;gBAC3B,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAA;YAChC,CAAC,CAAC,CAAA;YAEF,GAAG,CAAC,gBAAgB,CAAC,KAAK,IAAI,EAAE;gBAC9B,MAAM,OAAO,EAAE,KAAK,EAAE,CAAA;YACxB,CAAC,CAAC,CAAA;QACJ,CAAC;KACF,CAAA;AACH,CAAC;AAED;;;GAGG;AACH,SAAS,qBAAqB,CAAC,aAAqB;IAClD,MAAM,YAAY,GAA2B;QAC3C,GAAG,EAAE,UAAU;QACf,GAAG,EAAE,WAAW;QAChB,IAAI,EAAE,WAAW;QACjB,GAAG,EAAE,cAAc;QACnB,IAAI,EAAE,YAAY;QAClB,GAAG,EAAE,YAAY;QACjB,EAAE,EAAE,wBAAwB;QAC5B,IAAI,EAAE,kBAAkB;QACxB,GAAG,EAAE,WAAW;QAChB,GAAG,EAAE,eAAe;QACpB,GAAG,EAAE,YAAY;QACjB,IAAI,EAAE,YAAY;KACnB,CAAA;IAED,OAAO;QACL,IAAI,EAAE,oBAAoB;QAC1B,KAAK,CAAC,GAAG;YACP,GAAG,CAAC,sBAAsB,CAAC,KAAK,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE;gBAC9C,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,EAAE,CAAC;oBAC/B,OAAM;gBACR,CAAC;gBAED,MAAM,aAAa,GAAG,OAAO,CAAC,aAAa,CAAC,CAAA;gBAE5C,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;oBACxC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC;wBACb,IAAI,EAAE,CAAA;wBACN,OAAM;oBACR,CAAC;oBAED,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,IAAI,KAAK,CAAA;oBAClC,IAAI,MAAM,KAAK,KAAK,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;wBAC1C,IAAI,EAAE,CAAA;wBACN,OAAM;oBACR,CAAC;oBAED,MAAM,CAAC,OAAO,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;oBACpC,IAAI,CAAC,OAAO,IAAI,OAAO,KAAK,GAAG,IAAI,OAAO,KAAK,EAAE,EAAE,CAAC;wBAClD,IAAI,EAAE,CAAA;wBACN,OAAM;oBACR,CAAC;oBAED,IAAI,WAAmB,CAAA;oBACvB,IAAI,CAAC;wBACH,WAAW,GAAG,kBAAkB,CAAC,OAAO,CAAC,CAAA;oBAC3C,CAAC;oBAAC,MAAM,CAAC;wBACP,IAAI,EAAE,CAAA;wBACN,OAAM;oBACR,CAAC;oBAED,MAAM,cAAc,GAAG,WAAW,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,WAAW,EAAE,CAAA;oBACpF,MAAM,UAAU,GAAG,OAAO,CAAC,aAAa,EAAE,IAAI,cAAc,EAAE,CAAC,CAAA;oBAC/D,MAAM,YAAY,GAAG,QAAQ,CAAC,aAAa,EAAE,UAAU,CAAC,CAAA;oBAExD,IACE,YAAY,CAAC,UAAU,CAAC,IAAI,CAAC;wBAC7B,YAAY,CAAC,QAAQ,CAAC,KAAK,GAAG,EAAE,CAAC;wBACjC,UAAU,KAAK,aAAa,EAC5B,CAAC;wBACD,IAAI,EAAE,CAAA;wBACN,OAAM;oBACR,CAAC;oBAED,IAAI,KAAK,CAAA;oBACT,IAAI,CAAC;wBACH,KAAK,GAAG,QAAQ,CAAC,UAAU,CAAC,CAAA;oBAC9B,CAAC;oBAAC,MAAM,CAAC;wBACP,IAAI,EAAE,CAAA;wBACN,OAAM;oBACR,CAAC;oBAED,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC;wBACpB,IAAI,EAAE,CAAA;wBACN,OAAM;oBACR,CAAC;oBAED,MAAM,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAA;oBAC5D,MAAM,WAAW,GAAG,CAAC,SAAS,IAAI,YAAY,CAAC,SAAS,CAAC,CAAC,IAAI,0BAA0B,CAAA;oBAExF,GAAG,CAAC,SAAS,CAAC,cAAc,EAAE,WAAW,CAAC,CAAA;oBAC1C,GAAG,CAAC,SAAS,CAAC,eAAe,EAAE,UAAU,CAAC,CAAA;oBAE1C,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;wBACtB,GAAG,CAAC,GAAG,EAAE,CAAA;wBACT,OAAM;oBACR,CAAC;oBAED,IAAI,CAAC;wBACH,MAAM,OAAO,GAAG,YAAY,CAAC,UAAU,CAAC,CAAA;wBACxC,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;oBAClB,CAAC;oBAAC,OAAO,KAAK,EAAE,CAAC;wBACf,IAAI,CAAC,KAAc,CAAC,CAAA;oBACtB,CAAC;gBACH,CAAC,CAAC,CAAA;YACJ,CAAC,CAAC,CAAA;QACJ,CAAC;KACF,CAAA;AACH,CAAC;AAED;;GAEG;AACH,SAAS,uBAAuB,CAAC,aAAqB;IACpD,uEAAuE;IACvE,MAAM,gBAAgB,GAAG,OAAO,CAAC,aAAa,EAAE,sBAAsB,CAAC,CAAA;IACvE,MAAM,cAAc,GAAG,OAAO,CAAC,aAAa,EAAE,oBAAoB,CAAC,CAAA;IAEnE,OAAO;;;;iCAIwB,gBAAgB;oDACG,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAuCjE,CAAC;AACF,CAAC;AAED;;GAEG;AACH,SAAS,kCAAkC,CAAC,aAAqB;IAC/D,uEAAuE;IACvE,MAAM,gBAAgB,GAAG,OAAO,CAAC,aAAa,EAAE,sBAAsB,CAAC,CAAA;IACvE,MAAM,cAAc,GAAG,OAAO,CAAC,aAAa,EAAE,oBAAoB,CAAC,CAAA;IAEnE,OAAO;;;;iCAIwB,gBAAgB;oDACG,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAyCjE,CAAC;AACF,CAAC;AAED;;GAEG;AACH,SAAS,0BAA0B,CAAC,aAAqB,EAAE,mBAA4B;IACrF,uEAAuE;IACvE,MAAM,gBAAgB,GAAG,OAAO,CAAC,aAAa,EAAE,sBAAsB,CAAC,CAAA;IACvE,MAAM,cAAc,GAAG,OAAO,CAAC,aAAa,EAAE,oBAAoB,CAAC,CAAA;IAEnE,MAAM,sBAAsB,GAAG,mBAAmB;QAChD,CAAC,CAAC,yDAAyD;QAC3D,CAAC,CAAC,EAAE,CAAC;IAEP,MAAM,kBAAkB,GAAG,mBAAmB;QAC5C,CAAC,CAAC;;;;;;;;;IASF;QACA,CAAC,CAAC;;;;;;;IAOF,CAAC;IAEH,OAAO;EACP,sBAAsB;;;;iCAIS,gBAAgB;oDACG,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAsChE,kBAAkB;;;;;;;CAOnB,CAAC;AACF,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,OAAmB;IAClD,MAAM,eAAe,GAAG,OAAO,CAAC,GAAG,EAAE,CAAA;IACrC,OAAO,CAAC,GAAG,CAAC,yBAAyB,GAAG,eAAe,CAAA;IAEvD,+CAA+C;IAC/C,MAAM,CAAC,QAAQ,CAAC;QACd,KAAK,EAAE,GAAG,EAAE,GAAE,CAAC,EAAE,6CAA6C;QAC9D,KAAK,EAAE,GAAG,EAAE,GAAE,CAAC,EAAE,wCAAwC;KAC1D,CAAC,CAAA;IAEF,IAAI,CAAC;QACH,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;QAE5B,yBAAyB;QACzB,MAAM,UAAU,GAAG,eAAe,CAAC,eAAe,CAAC,CAAA;QACnD,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;YACtB,SAAS,CAAC,EAAE,CAAC,GAAG,CAAC,6BAA6B,CAAC,CAAC,CAAA;YAChD,KAAK,MAAM,KAAK,IAAI,UAAU,CAAC,MAAM,EAAE,CAAC;gBACtC,SAAS,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,KAAK,EAAE,CAAC,CAAC,CAAA;YACjC,CAAC;YACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QACjB,CAAC;QAED,wFAAwF;QACxF,MAAM,aAAa,GAAG,OAAO,CAAC,SAAS,EAAE,kBAAkB,CAAC,CAAA;QAE5D,wDAAwD;QACxD,MAAM,eAAe,GAAG,aAAa,CAAC,eAAe,CAAC,CAAA;QACtD,MAAM,mBAAmB,GAAG,eAAe,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,mBAAmB,CAAC,CAAA;QAE7F,sDAAsD;QACtD,MAAM,UAAU,GAAG,IAAI,CAAC,eAAe,EAAE,UAAU,CAAC,CAAA;QACpD,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;YAC5B,SAAS,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;QAC5C,CAAC;QAED,MAAM,cAAc,GAAG,IAAI,CAAC,UAAU,EAAE,oBAAoB,CAAC,CAAA;QAC7D,MAAM,iBAAiB,GAAG,IAAI,CAAC,UAAU,EAAE,uBAAuB,CAAC,CAAA;QACnE,MAAM,yBAAyB,GAAG,IAAI,CAAC,UAAU,EAAE,gCAAgC,CAAC,CAAA;QAEpF,aAAa,CAAC,cAAc,EAAE,uBAAuB,CAAC,aAAa,CAAC,EAAE,OAAO,CAAC,CAAA;QAC9E,aAAa,CAAC,iBAAiB,EAAE,0BAA0B,CAAC,aAAa,EAAE,mBAAmB,CAAC,EAAE,OAAO,CAAC,CAAA;QAEzG,6DAA6D;QAC7D,IAAI,mBAAmB,EAAE,CAAC;YACxB,aAAa,CAAC,yBAAyB,EAAE,kCAAkC,CAAC,aAAa,CAAC,EAAE,OAAO,CAAC,CAAA;QACtG,CAAC;QAED,wEAAwE;QACxE,MAAM,iBAAiB,GAAG,GAAG,EAAE;YAC7B,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,UAAU,CAAC,eAAe,CAAC,CAAA;gBAC1C,OAAO;oBACL,YAAY,EAAE,MAAM,CAAC,aAAa,IAAI,EAAE;oBACxC,cAAc,EAAE,MAAM,CAAC,QAAQ,IAAI,EAAE;iBACtC,CAAA;YACH,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,SAAS,CAAC,EAAE,CAAC,MAAM,CAAC,+DAA+D,CAAC,CAAC,CAAA;gBACrF,SAAS,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAA;gBACxE,OAAO;oBACL,YAAY,EAAE,EAAE;oBAChB,cAAc,EAAE,EAAE;iBACnB,CAAA;YACH,CAAC;QACH,CAAC,CAAA;QAED,wBAAwB;QACxB,IAAI,EAAE,YAAY,EAAE,cAAc,EAAE,GAAG,iBAAiB,EAAE,CAAA;QAE1D,MAAM,aAAa,GAAG,OAAO,CAAC,IAAI,IAAI,IAAI,CAAA;QAC1C,MAAM,aAAa,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,CAAA;QAEjD,kDAAkD;QAClD,IAAI,aAAa,KAAK,aAAa,EAAE,CAAC;YACpC,SAAS,CAAC,EAAE,CAAC,MAAM,CAAC,YAAY,aAAa,qBAAqB,aAAa,UAAU,CAAC,CAAC,CAAA;YAC3F,SAAS,EAAE,CAAA;QACb,CAAC;QAED,MAAM,IAAI,GAAG,aAAa,CAAA;QAC1B,MAAM,aAAa,GAAG,IAAI,CAAC,eAAe,EAAE,QAAQ,CAAC,CAAA;QAErD,MAAM,iBAAiB,GAAG,CAAC,SAAiB,EAAE,IAAc,EAAE,EAAE;YAC9D,SAAS,EAAE,CAAA;YACX,SAAS,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAA;YAC3D,SAAS,EAAE,CAAA;YACX,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACpB,SAAS,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAA;YAC7E,CAAC;YACD,SAAS,EAAE,CAAA;YACX,SAAS,CAAC,EAAE,CAAC,KAAK,CAAC,gBAAgB,SAAS,GAAG,CAAC,CAAC,CAAA;QACnD,CAAC,CAAA;QAED,MAAM,sBAAsB,GAAG,CAAC,QAK/B,EAAE,EAAE;YACH,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;gBACzB,OAAO,GAAG,EAAE,GAAE,CAAC,CAAA;YACjB,CAAC;YAED,MAAM,UAAU,GAAG,CAAC,IAAY,EAAE,EAAE;gBAClC,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;oBACtB,KAAK,QAAQ,CAAC,IAAI,EAAE,CAAA;oBACpB,OAAM;gBACR,CAAC;gBAED,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAA;gBACrC,IAAI,GAAG,KAAK,EAAE,EAAE,CAAC;oBACf,OAAM;gBACR,CAAC;gBAED,QAAQ,GAAG,EAAE,CAAC;oBACZ,KAAK,GAAG;wBACN,KAAK,QAAQ,CAAC,OAAO,EAAE,CAAA;wBACvB,MAAK;oBACP,KAAK,GAAG;wBACN,QAAQ,CAAC,QAAQ,EAAE,CAAA;wBACnB,MAAK;oBACP,KAAK,GAAG;wBACN,QAAQ,CAAC,KAAK,EAAE,CAAA;wBAChB,MAAK;oBACP,KAAK,GAAG;wBACN,KAAK,QAAQ,CAAC,IAAI,EAAE,CAAA;wBACpB,MAAK;oBACP;wBACE,MAAK;gBACT,CAAC;YACH,CAAC,CAAA;YAED,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,CAAA;YAC9B,OAAO,CAAC,KAAK,CAAC,MAAM,EAAE,CAAA;YACtB,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,CAAA;YACjC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,UAAU,CAAC,CAAA;YAEpC,OAAO,GAAG,EAAE;gBACV,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,CAAA;gBACrC,IAAI,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;oBACxB,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,CAAA;gBACjC,CAAC;gBACD,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,CAAA;YACvB,CAAC,CAAA;QACH,CAAC,CAAA;QAED,wFAAwF;QACxF,IAAI,eAAkD,CAAA;QAEtD,+DAA+D;QAC/D,MAAM,qBAAqB,GAAG,KAAK,IAAI,EAAE;YACvC,OAAO,MAAM,aAAa,CAAC;gBACzB,aAAa,EAAE;oBACb,GAAG,EAAE;wBACH,WAAW,EAAE,KAAK;qBACnB;oBACD,OAAO,EAAE;wBACP,WAAW,EAAE;wBACb,qBAAqB,CAAC,aAAa,CAAC;wBACpC,yBAAyB,CAAC,eAAe,EAAE,KAAK,IAAI,EAAE;4BACpD,MAAM,eAAe,EAAE,EAAE,CAAA;wBAC3B,CAAC,CAAC;qBACH;oBACD,MAAM,EAAE;wBACN,KAAK,EAAE;4BACL,KAAK,EAAE,OAAO,CAAC,aAAa,EAAE,kBAAkB,CAAC;4BACjD,KAAK,EAAE,cAAc;4BACrB,QAAQ,EAAE,iBAAiB;4BAC3B,GAAG,CAAC,mBAAmB,CAAC,CAAC,CAAC,EAAE,mBAAmB,EAAE,yBAAyB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;yBACnF;wBACD,MAAM,EAAE;4BACN,iBAAiB,EAAE,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC;4BAC/C,mBAAmB,EAAE,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC;yBACpD;qBACF;oBACD,OAAO,EAAE;wBACP,KAAK,EAAE;4BACL,GAAG,EAAE,eAAe;yBACrB;wBACD,MAAM,EAAE,CAAC,OAAO,EAAE,WAAW,CAAC;qBAC/B;oBACD,IAAI,EAAE;wBACJ,QAAQ,CAAC,EAAE,SAAS,EAAE;4BACpB,MAAM,SAAS,GAA2B;gCACxC,KAAK,EAAE,OAAO,CAAC,aAAa,EAAE,YAAY,CAAC;gCAC3C,KAAK,EAAE,OAAO,CAAC,aAAa,EAAE,YAAY,CAAC;gCAC3C,QAAQ,EAAE,OAAO,CAAC,aAAa,EAAE,eAAe,CAAC;gCACjD,mBAAmB,EAAE,OAAO,CAAC,aAAa,EAAE,wBAAwB,CAAC;6BACtE,CAAA;4BACD,OAAO,SAAS,CAAC,SAAS,CAAC,IAAI,OAAO,CAAC,aAAa,EAAE,YAAY,CAAC,CAAA;wBACrE,CAAC;qBACF;oBACD,MAAM,EAAE;wBACN,IAAI;wBACJ,IAAI,EAAE,WAAW;wBACjB,IAAI,EAAE,KAAK;wBACX,UAAU,EAAE,KAAK;wBACjB,SAAS,EAAE,KAAK;wBAChB,SAAS,EAAE;4BACT,IAAI,EAAE,aAAa;4BACnB,KAAK,EAAE,IAAI;yBACZ;qBACF;oBACD,KAAK,EAAE;wBACL,OAAO,EAAE,CAAC,IAAS,EAAE,EAAE;4BACrB,gDAAgD;4BAChD,IAAI,CAAC,cAAc,GAAG;gCACpB,GAAG,IAAI,CAAC,cAAc;gCACtB,MAAM,EAAE,OAAO,CAAC,aAAa,EAAE,oBAAoB,CAAC;6BACrD,CAAA;4BACD,OAAO,IAAI,CAAA;wBACb,CAAC;wBACD,MAAM,EAAE,CAAC,MAAW,EAAE,EAAE;4BACtB,gEAAgE;4BAChE,8EAA8E;4BAC9E,MAAM,CAAC,OAAO,GAAG,MAAM,CAAC,OAAO,IAAI,EAAE,CAAA;4BACrC,MAAM,CAAC,OAAO,CAAC,OAAO,GAAG;gCACvB,OAAO,CAAC,SAAS,EAAE,oBAAoB,CAAC;gCACxC,cAAc;6BACf,CAAA;4BACD,OAAO,MAAM,CAAA;wBACf,CAAC;qBACF;iBACF;aACF,CAAC,CAAA;QACJ,CAAC,CAAA;QAED,kCAAkC;QAClC,IAAI,OAAO,GAAG,MAAM,qBAAqB,EAAE,CAAA;QAE3C,IAAI,aAAkF,CAAA;QACtF,IAAI,gBAA0C,CAAA;QAC9C,IAAI,YAAY,GAAG,KAAK,CAAA;QACxB,IAAI,cAAc,GAAG,KAAK,CAAA;QAC1B,IAAI,WAAW,GAAa,EAAE,CAAA;QAC9B,IAAI,aAAa,GAAG,EAAE,CAAA;QAEtB,MAAM,WAAW,GAAG,KAAK,EAAE,SAAiB,EAAE,EAAE;YAC9C,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,cAAc,EAAE,CAAA;YAC7C,aAAa,GAAG,MAAM,CAAA;YACtB,WAAW,GAAG,MAAM,CAAC,IAAI,CAAA;YACzB,aAAa,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA;YAC5D,iBAAiB,CAAC,aAAa,EAAE,WAAW,CAAC,CAAA;QAC/C,CAAC,CAAA;QAED,MAAM,aAAa,GAAG,KAAK,IAAI,EAAE;YAC/B,IAAI,cAAc,IAAI,YAAY,IAAI,CAAC,aAAa,EAAE,CAAC;gBACrD,OAAM;YACR,CAAC;YAED,YAAY,GAAG,IAAI,CAAA;YACnB,SAAS,CAAC,EAAE,CAAC,IAAI,CAAC,8BAA8B,CAAC,CAAC,CAAA;YAElD,IAAI,CAAC;gBACH,uBAAuB;gBACvB,MAAM,aAAa,CAAC,MAAM,CAAC,KAAK,EAAE,CAAA;gBAElC,2CAA2C;gBAC3C,MAAM,WAAW,GAAG,iBAAiB,EAAE,CAAA;gBACvC,YAAY,GAAG,WAAW,CAAC,YAAY,CAAA;gBACvC,cAAc,GAAG,WAAW,CAAC,cAAc,CAAA;gBAE3C,8CAA8C;gBAC9C,OAAO,GAAG,MAAM,qBAAqB,EAAE,CAAA;gBAEvC,mBAAmB;gBACnB,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;gBAC/B,MAAM,WAAW,CAAC,YAAY,CAAC,CAAA;YACjC,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,aAAa,GAAG,SAAS,CAAA;gBACzB,SAAS,CAAC,EAAE,CAAC,GAAG,CAAC,gCAAgC,CAAC,CAAC,CAAA;gBACnD,SAAS,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAA;YAC1E,CAAC;oBAAS,CAAC;gBACT,YAAY,GAAG,KAAK,CAAA;YACtB,CAAC;QACH,CAAC,CAAA;QAED,MAAM,QAAQ,GAAG,GAAG,EAAE;YACpB,SAAS,EAAE,CAAA;YACX,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC3B,SAAS,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAA;YACpF,CAAC;YACD,SAAS,EAAE,CAAA;QACb,CAAC,CAAA;QAED,MAAM,YAAY,GAAG,GAAG,EAAE;YACxB,OAAO,CAAC,KAAK,EAAE,CAAA;YACf,IAAI,aAAa,EAAE,CAAC;gBAClB,iBAAiB,CAAC,aAAa,EAAE,WAAW,CAAC,CAAA;YAC/C,CAAC;QACH,CAAC,CAAA;QAED,MAAM,QAAQ,GAAG,KAAK,IAAI,EAAE;YAC1B,IAAI,cAAc,EAAE,CAAC;gBACnB,OAAM;YACR,CAAC;YAED,cAAc,GAAG,IAAI,CAAA;YACrB,gBAAgB,EAAE,EAAE,CAAA;YAEpB,IAAI,CAAC;gBACH,IAAI,aAAa,EAAE,CAAC;oBAClB,MAAM,aAAa,CAAC,MAAM,CAAC,KAAK,EAAE,CAAA;gBACpC,CAAC;YACH,CAAC;YAAC,OAAO,UAAU,EAAE,CAAC;gBACpB,SAAS,CAAC,EAAE,CAAC,GAAG,CAAC,kCAAkC,CAAC,CAAC,CAAA;gBACrD,SAAS,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,UAAU,YAAY,KAAK,CAAC,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC,CAAA;YACzF,CAAC;oBAAS,CAAC;gBACT,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;YACjB,CAAC;QACH,CAAC,CAAA;QAED,6CAA6C;QAC7C,eAAe,GAAG,aAAa,CAAA;QAE/B,MAAM,WAAW,CAAC,SAAS,CAAC,CAAA;QAE5B,gBAAgB,GAAG,sBAAsB,CAAC;YACxC,OAAO,EAAE,aAAa;YACtB,QAAQ;YACR,KAAK,EAAE,YAAY;YACnB,IAAI,EAAE,QAAQ;SACf,CAAC,CAAA;QAEF,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE;YACxB,KAAK,QAAQ,EAAE,CAAA;QACjB,CAAC,CAAC,CAAA;QAEF,aAAa;QACb,MAAM,IAAI,OAAO,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAA;IAC7B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,SAAS,CAAC,EAAE,CAAC,GAAG,CAAC,0BAA0B,CAAC,CAAC,CAAA;QAC7C,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,KAAK,CAAC,CAAA;QACxC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACjB,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"dev.js","sourceRoot":"","sources":["../../src/commands/dev.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,YAAY,CAAA;AAC3B,OAAO,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,eAAe,CAAA;AAErD,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAA;AACnD,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,WAAW,CAAA;AAC1E,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AACxC,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAA;AAC/E,OAAO,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAA;AACzD,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AACpC,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,QAAQ,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,SAAS,CAAA;AACtF,OAAO,QAAQ,MAAM,UAAU,CAAA;AAE/B,MAAM,SAAS,GAAG,CAAC,OAAO,GAAG,EAAE,EAAQ,EAAE;IACvC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,OAAO,IAAI,CAAC,CAAA;AACtC,CAAC,CAAA;AAED,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;AACjD,MAAM,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC,CAAA;AAMrC;;;GAGG;AACH,SAAS,yBAAyB,CAChC,eAAuB,EACvB,cAAmC;IAEnC,OAAO;QACL,IAAI,EAAE,wBAAwB;QAC9B,KAAK,CAAC,GAAG;YACP,IAAI,OAAsD,CAAA;YAE1D,GAAG,CAAC,sBAAsB,CAAC,KAAK,IAAI,EAAE;gBACpC,MAAM,WAAW,GAAG;oBAClB,OAAO,CAAC,eAAe,EAAE,mBAAmB,CAAC;oBAC7C,OAAO,CAAC,eAAe,EAAE,SAAS,EAAE,mBAAmB,CAAC;iBACzD,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAA;gBAEpC,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC;oBAAE,OAAM;gBAEpC,OAAO,GAAG,QAAQ,CAAC,KAAK,CAAC,WAAW,EAAE;oBACpC,aAAa,EAAE,IAAI;oBACnB,sBAAsB,EAAE,IAAI;iBAC7B,CAAC,CAAA;gBAEF,MAAM,QAAQ,GAAG,KAAK,EAAE,QAAgB,EAAE,EAAE;oBAC1C,SAAS,CAAC,EAAE,CAAC,IAAI,CAAC,SAAS,QAAQ,CAAC,eAAe,EAAE,QAAQ,CAAC,sCAAsC,CAAC,CAAC,CAAA;oBACtG,MAAM,cAAc,EAAE,CAAA;gBACxB,CAAC,CAAA;gBAED,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAA;gBAC9B,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAA;gBAC3B,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAA;YAChC,CAAC,CAAC,CAAA;YAEF,GAAG,CAAC,gBAAgB,CAAC,KAAK,IAAI,EAAE;gBAC9B,MAAM,OAAO,EAAE,KAAK,EAAE,CAAA;YACxB,CAAC,CAAC,CAAA;QACJ,CAAC;KACF,CAAA;AACH,CAAC;AAED;;;GAGG;AACH,SAAS,qBAAqB,CAAC,aAAqB;IAClD,MAAM,YAAY,GAA2B;QAC3C,GAAG,EAAE,UAAU;QACf,GAAG,EAAE,WAAW;QAChB,IAAI,EAAE,WAAW;QACjB,GAAG,EAAE,cAAc;QACnB,IAAI,EAAE,YAAY;QAClB,GAAG,EAAE,YAAY;QACjB,EAAE,EAAE,wBAAwB;QAC5B,IAAI,EAAE,kBAAkB;QACxB,GAAG,EAAE,WAAW;QAChB,GAAG,EAAE,eAAe;QACpB,GAAG,EAAE,YAAY;QACjB,IAAI,EAAE,YAAY;KACnB,CAAA;IAED,OAAO;QACL,IAAI,EAAE,oBAAoB;QAC1B,KAAK,CAAC,GAAG;YACP,GAAG,CAAC,sBAAsB,CAAC,KAAK,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE;gBAC9C,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,EAAE,CAAC;oBAC/B,OAAM;gBACR,CAAC;gBAED,MAAM,aAAa,GAAG,OAAO,CAAC,aAAa,CAAC,CAAA;gBAE5C,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;oBACxC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC;wBACb,IAAI,EAAE,CAAA;wBACN,OAAM;oBACR,CAAC;oBAED,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,IAAI,KAAK,CAAA;oBAClC,IAAI,MAAM,KAAK,KAAK,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;wBAC1C,IAAI,EAAE,CAAA;wBACN,OAAM;oBACR,CAAC;oBAED,MAAM,CAAC,OAAO,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;oBACpC,IAAI,CAAC,OAAO,IAAI,OAAO,KAAK,GAAG,IAAI,OAAO,KAAK,EAAE,EAAE,CAAC;wBAClD,IAAI,EAAE,CAAA;wBACN,OAAM;oBACR,CAAC;oBAED,IAAI,WAAmB,CAAA;oBACvB,IAAI,CAAC;wBACH,WAAW,GAAG,kBAAkB,CAAC,OAAO,CAAC,CAAA;oBAC3C,CAAC;oBAAC,MAAM,CAAC;wBACP,IAAI,EAAE,CAAA;wBACN,OAAM;oBACR,CAAC;oBAED,MAAM,cAAc,GAAG,WAAW,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,WAAW,EAAE,CAAA;oBACpF,MAAM,UAAU,GAAG,OAAO,CAAC,aAAa,EAAE,IAAI,cAAc,EAAE,CAAC,CAAA;oBAC/D,MAAM,YAAY,GAAG,QAAQ,CAAC,aAAa,EAAE,UAAU,CAAC,CAAA;oBAExD,IACE,YAAY,CAAC,UAAU,CAAC,IAAI,CAAC;wBAC7B,YAAY,CAAC,QAAQ,CAAC,KAAK,GAAG,EAAE,CAAC;wBACjC,UAAU,KAAK,aAAa,EAC5B,CAAC;wBACD,IAAI,EAAE,CAAA;wBACN,OAAM;oBACR,CAAC;oBAED,IAAI,KAAK,CAAA;oBACT,IAAI,CAAC;wBACH,KAAK,GAAG,QAAQ,CAAC,UAAU,CAAC,CAAA;oBAC9B,CAAC;oBAAC,MAAM,CAAC;wBACP,IAAI,EAAE,CAAA;wBACN,OAAM;oBACR,CAAC;oBAED,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC;wBACpB,IAAI,EAAE,CAAA;wBACN,OAAM;oBACR,CAAC;oBAED,MAAM,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAA;oBAC5D,MAAM,WAAW,GAAG,CAAC,SAAS,IAAI,YAAY,CAAC,SAAS,CAAC,CAAC,IAAI,0BAA0B,CAAA;oBAExF,GAAG,CAAC,SAAS,CAAC,cAAc,EAAE,WAAW,CAAC,CAAA;oBAC1C,GAAG,CAAC,SAAS,CAAC,eAAe,EAAE,UAAU,CAAC,CAAA;oBAE1C,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;wBACtB,GAAG,CAAC,GAAG,EAAE,CAAA;wBACT,OAAM;oBACR,CAAC;oBAED,IAAI,CAAC;wBACH,MAAM,OAAO,GAAG,YAAY,CAAC,UAAU,CAAC,CAAA;wBACxC,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;oBAClB,CAAC;oBAAC,OAAO,KAAK,EAAE,CAAC;wBACf,IAAI,CAAC,KAAc,CAAC,CAAA;oBACtB,CAAC;gBACH,CAAC,CAAC,CAAA;YACJ,CAAC,CAAC,CAAA;QACJ,CAAC;KACF,CAAA;AACH,CAAC;AAED;;GAEG;AACH,SAAS,uBAAuB,CAAC,aAAqB;IACpD,uEAAuE;IACvE,MAAM,gBAAgB,GAAG,OAAO,CAAC,aAAa,EAAE,sBAAsB,CAAC,CAAA;IACvE,MAAM,cAAc,GAAG,OAAO,CAAC,aAAa,EAAE,oBAAoB,CAAC,CAAA;IAEnE,OAAO;;;;iCAIwB,gBAAgB;oDACG,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAsDjE,CAAC;AACF,CAAC;AAED;;GAEG;AACH,SAAS,kCAAkC,CAAC,aAAqB;IAC/D,uEAAuE;IACvE,MAAM,gBAAgB,GAAG,OAAO,CAAC,aAAa,EAAE,sBAAsB,CAAC,CAAA;IACvE,MAAM,cAAc,GAAG,OAAO,CAAC,aAAa,EAAE,oBAAoB,CAAC,CAAA;IAEnE,OAAO;;;;iCAIwB,gBAAgB;oDACG,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAuCjE,CAAC;AACF,CAAC;AAED;;GAEG;AACH,SAAS,0BAA0B,CAAC,aAAqB,EAAE,mBAA4B;IACrF,uEAAuE;IACvE,MAAM,gBAAgB,GAAG,OAAO,CAAC,aAAa,EAAE,sBAAsB,CAAC,CAAA;IACvE,MAAM,cAAc,GAAG,OAAO,CAAC,aAAa,EAAE,oBAAoB,CAAC,CAAA;IAEnE,MAAM,sBAAsB,GAAG,mBAAmB;QAChD,CAAC,CAAC,yDAAyD;QAC3D,CAAC,CAAC,EAAE,CAAC;IAEP,MAAM,kBAAkB,GAAG,mBAAmB;QAC5C,CAAC,CAAC;;;cAGQ;QACV,CAAC,CAAC;kCAC4B,CAAC;IAEjC,OAAO;EACP,sBAAsB;;;;iCAIS,gBAAgB;oDACG,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAoDhE,kBAAkB;;;;;;;CAOnB,CAAC;AACF,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,OAAmB;IAClD,MAAM,eAAe,GAAG,OAAO,CAAC,GAAG,CAAC,iBAAiB,IAAI,OAAO,CAAC,GAAG,EAAE,CAAA;IACtE,OAAO,CAAC,GAAG,CAAC,yBAAyB,GAAG,eAAe,CAAA;IAEvD,+CAA+C;IAC/C,MAAM,CAAC,QAAQ,CAAC;QACd,KAAK,EAAE,GAAG,EAAE,GAAE,CAAC,EAAE,6CAA6C;QAC9D,KAAK,EAAE,GAAG,EAAE,GAAE,CAAC,EAAE,wCAAwC;KAC1D,CAAC,CAAA;IAEF,IAAI,CAAC;QACH,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;QAE5B,yBAAyB;QACzB,MAAM,UAAU,GAAG,eAAe,CAAC,eAAe,CAAC,CAAA;QACnD,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;YACtB,SAAS,CAAC,EAAE,CAAC,GAAG,CAAC,6BAA6B,CAAC,CAAC,CAAA;YAChD,KAAK,MAAM,KAAK,IAAI,UAAU,CAAC,MAAM,EAAE,CAAC;gBACtC,SAAS,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,KAAK,EAAE,CAAC,CAAC,CAAA;YACjC,CAAC;YACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QACjB,CAAC;QAED,wFAAwF;QACxF,MAAM,aAAa,GAAG,OAAO,CAAC,SAAS,EAAE,kBAAkB,CAAC,CAAA;QAE5D,wDAAwD;QACxD,MAAM,eAAe,GAAG,aAAa,CAAC,eAAe,CAAC,CAAA;QACtD,MAAM,WAAW,GAAG,eAAe,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,UAAU,CAAC,CAAA;QAC5E,MAAM,mBAAmB,GAAG,eAAe,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,mBAAmB,CAAC,CAAA;QAE3F,sDAAsD;QAC1D,MAAM,UAAU,GAAG,IAAI,CAAC,eAAe,EAAE,UAAU,CAAC,CAAC;QACrD,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;YAC7B,SAAS,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC5C,CAAC;QAED,MAAM,cAAc,GAAG,IAAI,CAAC,UAAU,EAAE,oBAAoB,CAAC,CAAC;QAC9D,MAAM,iBAAiB,GAAG,IAAI,CAAC,UAAU,EAAE,uBAAuB,CAAC,CAAC;QACpE,MAAM,yBAAyB,GAAG,IAAI,CACrC,UAAU,EACV,gCAAgC,CAChC,CAAC;QAEF,aAAa,CAAC,cAAc,EAAE,uBAAuB,CAAC,aAAa,CAAC,EAAE,OAAO,CAAC,CAAC;QAE/E,oDAAoD;QACpD,IAAI,WAAW,EAAE,CAAC;YACjB,aAAa,CACZ,iBAAiB,EACjB,0BAA0B,CAAC,aAAa,EAAE,mBAAmB,CAAC,EAC9D,OAAO,CACP,CAAC;QACH,CAAC;QAED,6DAA6D;QAC7D,IAAI,mBAAmB,EAAE,CAAC;YACzB,aAAa,CACZ,yBAAyB,EACzB,kCAAkC,CAAC,aAAa,CAAC,EACjD,OAAO,CACP,CAAC;QACH,CAAC;QAEC,wEAAwE;QACxE,MAAM,iBAAiB,GAAG,GAAG,EAAE;YAC7B,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,UAAU,CAAC,eAAe,CAAC,CAAA;gBAC1C,OAAO;oBACL,YAAY,EAAE,MAAM,CAAC,aAAa,IAAI,EAAE;oBACxC,cAAc,EAAE,MAAM,CAAC,QAAQ,IAAI,EAAE;iBACtC,CAAA;YACH,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,SAAS,CAAC,EAAE,CAAC,MAAM,CAAC,+DAA+D,CAAC,CAAC,CAAA;gBACrF,SAAS,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAA;gBACxE,OAAO;oBACL,YAAY,EAAE,EAAE;oBAChB,cAAc,EAAE,EAAE;iBACnB,CAAA;YACH,CAAC;QACH,CAAC,CAAA;QAED,wBAAwB;QACxB,IAAI,EAAE,YAAY,EAAE,cAAc,EAAE,GAAG,iBAAiB,EAAE,CAAA;QAE1D,MAAM,aAAa,GAAG,OAAO,CAAC,IAAI,IAAI,IAAI,CAAA;QAC1C,MAAM,aAAa,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,CAAA;QAEjD,kDAAkD;QAClD,IAAI,aAAa,KAAK,aAAa,EAAE,CAAC;YACpC,SAAS,CAAC,EAAE,CAAC,MAAM,CAAC,YAAY,aAAa,qBAAqB,aAAa,UAAU,CAAC,CAAC,CAAA;YAC3F,SAAS,EAAE,CAAA;QACb,CAAC;QAED,MAAM,IAAI,GAAG,aAAa,CAAA;QAC1B,MAAM,aAAa,GAAG,IAAI,CAAC,eAAe,EAAE,QAAQ,CAAC,CAAA;QAErD,MAAM,iBAAiB,GAAG,CAAC,SAAiB,EAAE,IAAc,EAAE,EAAE;YAC9D,SAAS,EAAE,CAAA;YACX,SAAS,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAA;YAC3D,SAAS,EAAE,CAAA;YACX,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACpB,SAAS,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAA;YAC7E,CAAC;YACD,SAAS,EAAE,CAAA;YACX,SAAS,CAAC,EAAE,CAAC,KAAK,CAAC,gBAAgB,SAAS,GAAG,CAAC,CAAC,CAAA;QACnD,CAAC,CAAA;QAED,MAAM,sBAAsB,GAAG,CAAC,QAK/B,EAAE,EAAE;YACH,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;gBACzB,OAAO,GAAG,EAAE,GAAE,CAAC,CAAA;YACjB,CAAC;YAED,MAAM,UAAU,GAAG,CAAC,IAAY,EAAE,EAAE;gBAClC,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;oBACtB,KAAK,QAAQ,CAAC,IAAI,EAAE,CAAA;oBACpB,OAAM;gBACR,CAAC;gBAED,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAA;gBACrC,IAAI,GAAG,KAAK,EAAE,EAAE,CAAC;oBACf,OAAM;gBACR,CAAC;gBAED,QAAQ,GAAG,EAAE,CAAC;oBACZ,KAAK,GAAG;wBACN,KAAK,QAAQ,CAAC,OAAO,EAAE,CAAA;wBACvB,MAAK;oBACP,KAAK,GAAG;wBACN,QAAQ,CAAC,QAAQ,EAAE,CAAA;wBACnB,MAAK;oBACP,KAAK,GAAG;wBACN,QAAQ,CAAC,KAAK,EAAE,CAAA;wBAChB,MAAK;oBACP,KAAK,GAAG;wBACN,KAAK,QAAQ,CAAC,IAAI,EAAE,CAAA;wBACpB,MAAK;oBACP;wBACE,MAAK;gBACT,CAAC;YACH,CAAC,CAAA;YAED,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,CAAA;YAC9B,OAAO,CAAC,KAAK,CAAC,MAAM,EAAE,CAAA;YACtB,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,CAAA;YACjC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,UAAU,CAAC,CAAA;YAEpC,OAAO,GAAG,EAAE;gBACV,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,CAAA;gBACrC,IAAI,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;oBACxB,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,CAAA;gBACjC,CAAC;gBACD,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,CAAA;YACvB,CAAC,CAAA;QACH,CAAC,CAAA;QAED,wFAAwF;QACxF,IAAI,eAAkD,CAAA;QAEtD,+DAA+D;QAC/D,MAAM,qBAAqB,GAAG,KAAK,IAAI,EAAE;YACvC,OAAO,MAAM,aAAa,CAAC;gBACzB,aAAa,EAAE;oBACb,GAAG,EAAE;wBACH,WAAW,EAAE,KAAK;qBACnB;oBACD,OAAO,EAAE;wBACP,WAAW,EAAE;wBACb,qBAAqB,CAAC,aAAa,CAAC;wBACpC,yBAAyB,CAAC,eAAe,EAAE,KAAK,IAAI,EAAE;4BACpD,MAAM,eAAe,EAAE,EAAE,CAAA;wBAC3B,CAAC,CAAC;qBACH;oBACD,MAAM,EAAE;wBACN,KAAK,EAAE;4BACZ,KAAK,EAAE,OAAO,CAAC,aAAa,EAAE,kBAAkB,CAAC;4BACjD,KAAK,EAAE,cAAc;4BACrB,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,iBAAiB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;4BACvD,GAAG,CAAC,mBAAmB;gCACtB,CAAC,CAAC,EAAE,mBAAmB,EAAE,yBAAyB,EAAE;gCACpD,CAAC,CAAC,EAAE,CAAC;yBACN;wBACK,MAAM,EAAE;4BACb,iBAAiB,EAAE,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC;4BAC/C,mBAAmB,EAAE,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC;4BACnD,gBAAgB,EAAE,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC;4BAC7C,gBAAgB,EAAE,IAAI,CAAC,SAAS,CAAC,mBAAmB,CAAC;yBACrD;qBACI;oBACD,OAAO,EAAE;wBACP,KAAK,EAAE;4BACL,GAAG,EAAE,eAAe;yBACrB;wBACD,MAAM,EAAE,CAAC,OAAO,EAAE,WAAW,CAAC;qBAC/B;oBACD,IAAI,EAAE;wBACJ,QAAQ,CAAC,EAAE,SAAS,EAAE;4BACpB,MAAM,SAAS,GAA2B;gCACxC,KAAK,EAAE,OAAO,CAAC,aAAa,EAAE,YAAY,CAAC;gCAC3C,KAAK,EAAE,OAAO,CAAC,aAAa,EAAE,YAAY,CAAC;gCAC3C,QAAQ,EAAE,OAAO,CAAC,aAAa,EAAE,eAAe,CAAC;gCACjD,mBAAmB,EAAE,OAAO,CAAC,aAAa,EAAE,wBAAwB,CAAC;6BACtE,CAAA;4BACD,OAAO,SAAS,CAAC,SAAS,CAAC,IAAI,OAAO,CAAC,aAAa,EAAE,YAAY,CAAC,CAAA;wBACrE,CAAC;qBACF;oBACD,MAAM,EAAE;wBACN,IAAI;wBACJ,IAAI,EAAE,WAAW;wBACjB,IAAI,EAAE,KAAK;wBACX,UAAU,EAAE,KAAK;wBACjB,SAAS,EAAE,KAAK;wBAChB,SAAS,EAAE;4BACT,IAAI,EAAE,aAAa;4BACnB,KAAK,EAAE,IAAI;yBACZ;qBACF;oBACD,KAAK,EAAE;wBACL,OAAO,EAAE,CAAC,IAAS,EAAE,EAAE;4BACrB,gDAAgD;4BAChD,IAAI,CAAC,cAAc,GAAG;gCACpB,GAAG,IAAI,CAAC,cAAc;gCACtB,MAAM,EAAE,OAAO,CAAC,aAAa,EAAE,oBAAoB,CAAC;6BACrD,CAAA;4BACD,OAAO,IAAI,CAAA;wBACb,CAAC;wBACD,MAAM,EAAE,CAAC,MAAW,EAAE,EAAE;4BACtB,gEAAgE;4BAChE,8EAA8E;4BAC9E,MAAM,CAAC,OAAO,GAAG,MAAM,CAAC,OAAO,IAAI,EAAE,CAAA;4BACrC,MAAM,CAAC,OAAO,CAAC,OAAO,GAAG;gCACvB,OAAO,CAAC,SAAS,EAAE,oBAAoB,CAAC;gCACxC,cAAc;6BACf,CAAA;4BACD,OAAO,MAAM,CAAA;wBACf,CAAC;qBACF;iBACF;aACF,CAAC,CAAA;QACJ,CAAC,CAAA;QAED,kCAAkC;QAClC,IAAI,OAAO,GAAG,MAAM,qBAAqB,EAAE,CAAA;QAE3C,IAAI,aAAkF,CAAA;QACtF,IAAI,gBAA0C,CAAA;QAC9C,IAAI,YAAY,GAAG,KAAK,CAAA;QACxB,IAAI,cAAc,GAAG,KAAK,CAAA;QAC1B,IAAI,WAAW,GAAa,EAAE,CAAA;QAC9B,IAAI,aAAa,GAAG,EAAE,CAAA;QAEtB,MAAM,WAAW,GAAG,KAAK,EAAE,SAAiB,EAAE,EAAE;YAC9C,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,cAAc,EAAE,CAAA;YAC7C,aAAa,GAAG,MAAM,CAAA;YACtB,WAAW,GAAG,MAAM,CAAC,IAAI,CAAA;YACzB,aAAa,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA;YAC5D,iBAAiB,CAAC,aAAa,EAAE,WAAW,CAAC,CAAA;QAC/C,CAAC,CAAA;QAED,MAAM,aAAa,GAAG,KAAK,IAAI,EAAE;YAC/B,IAAI,cAAc,IAAI,YAAY,IAAI,CAAC,aAAa,EAAE,CAAC;gBACrD,OAAM;YACR,CAAC;YAED,YAAY,GAAG,IAAI,CAAA;YACnB,SAAS,CAAC,EAAE,CAAC,IAAI,CAAC,8BAA8B,CAAC,CAAC,CAAA;YAElD,IAAI,CAAC;gBACH,uBAAuB;gBACvB,MAAM,aAAa,CAAC,MAAM,CAAC,KAAK,EAAE,CAAA;gBAElC,2CAA2C;gBAC3C,MAAM,WAAW,GAAG,iBAAiB,EAAE,CAAA;gBACvC,YAAY,GAAG,WAAW,CAAC,YAAY,CAAA;gBACvC,cAAc,GAAG,WAAW,CAAC,cAAc,CAAA;gBAE3C,8CAA8C;gBAC9C,OAAO,GAAG,MAAM,qBAAqB,EAAE,CAAA;gBAEvC,mBAAmB;gBACnB,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;gBAC/B,MAAM,WAAW,CAAC,YAAY,CAAC,CAAA;YACjC,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,aAAa,GAAG,SAAS,CAAA;gBACzB,SAAS,CAAC,EAAE,CAAC,GAAG,CAAC,gCAAgC,CAAC,CAAC,CAAA;gBACnD,SAAS,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAA;YAC1E,CAAC;oBAAS,CAAC;gBACT,YAAY,GAAG,KAAK,CAAA;YACtB,CAAC;QACH,CAAC,CAAA;QAED,MAAM,QAAQ,GAAG,GAAG,EAAE;YACpB,SAAS,EAAE,CAAA;YACX,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC3B,SAAS,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAA;YACpF,CAAC;YACD,SAAS,EAAE,CAAA;QACb,CAAC,CAAA;QAED,MAAM,YAAY,GAAG,GAAG,EAAE;YACxB,OAAO,CAAC,KAAK,EAAE,CAAA;YACf,IAAI,aAAa,EAAE,CAAC;gBAClB,iBAAiB,CAAC,aAAa,EAAE,WAAW,CAAC,CAAA;YAC/C,CAAC;QACH,CAAC,CAAA;QAED,MAAM,QAAQ,GAAG,KAAK,IAAI,EAAE;YAC1B,IAAI,cAAc,EAAE,CAAC;gBACnB,OAAM;YACR,CAAC;YAED,cAAc,GAAG,IAAI,CAAA;YACrB,gBAAgB,EAAE,EAAE,CAAA;YAEpB,IAAI,CAAC;gBACH,IAAI,aAAa,EAAE,CAAC;oBAClB,MAAM,aAAa,CAAC,MAAM,CAAC,KAAK,EAAE,CAAA;gBACpC,CAAC;YACH,CAAC;YAAC,OAAO,UAAU,EAAE,CAAC;gBACpB,SAAS,CAAC,EAAE,CAAC,GAAG,CAAC,kCAAkC,CAAC,CAAC,CAAA;gBACrD,SAAS,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,UAAU,YAAY,KAAK,CAAC,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC,CAAA;YACzF,CAAC;oBAAS,CAAC;gBACT,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;YACjB,CAAC;QACH,CAAC,CAAA;QAED,6CAA6C;QAC7C,eAAe,GAAG,aAAa,CAAA;QAE/B,MAAM,WAAW,CAAC,SAAS,CAAC,CAAA;QAE5B,gBAAgB,GAAG,sBAAsB,CAAC;YACxC,OAAO,EAAE,aAAa;YACtB,QAAQ;YACR,KAAK,EAAE,YAAY;YACnB,IAAI,EAAE,QAAQ;SACf,CAAC,CAAA;QAEF,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE;YACxB,KAAK,QAAQ,EAAE,CAAA;QACjB,CAAC,CAAC,CAAA;QAEF,aAAa;QACb,MAAM,IAAI,OAAO,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAA;IAC7B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,SAAS,CAAC,EAAE,CAAC,GAAG,CAAC,0BAA0B,CAAC,CAAC,CAAA;QAC7C,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,KAAK,CAAC,CAAA;QACxC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACjB,CAAC;AACH,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@linktr.ee/linkapp",
3
- "version": "0.0.42",
3
+ "version": "0.0.44",
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