@linktr.ee/linkapp 0.0.35 → 0.0.37

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.
Files changed (34) hide show
  1. package/README.md +420 -0
  2. package/dev-server/preview/main.tsx +8 -8
  3. package/dev-server/preview/preview.tsx +417 -0
  4. package/dist/cli.js +1 -0
  5. package/dist/cli.js.map +1 -1
  6. package/dist/commands/build.d.ts +1 -0
  7. package/dist/commands/build.d.ts.map +1 -1
  8. package/dist/commands/build.js +43 -2
  9. package/dist/commands/build.js.map +1 -1
  10. package/dist/lib/deploy/generate-manifest-files.d.ts.map +1 -1
  11. package/dist/lib/deploy/generate-manifest-files.js +9 -0
  12. package/dist/lib/deploy/generate-manifest-files.js.map +1 -1
  13. package/dist/lib/rsbuild/config-factory.d.ts +1 -0
  14. package/dist/lib/rsbuild/config-factory.d.ts.map +1 -1
  15. package/dist/lib/rsbuild/config-factory.js +28 -1
  16. package/dist/lib/rsbuild/config-factory.js.map +1 -1
  17. package/dist/lib/rsbuild/plugins/brotli-compression.d.ts +21 -0
  18. package/dist/lib/rsbuild/plugins/brotli-compression.d.ts.map +1 -0
  19. package/dist/lib/rsbuild/plugins/brotli-compression.js +68 -0
  20. package/dist/lib/rsbuild/plugins/brotli-compression.js.map +1 -0
  21. package/dist/lib/utils/setup-runtime.d.ts.map +1 -1
  22. package/dist/lib/utils/setup-runtime.js +16 -1
  23. package/dist/lib/utils/setup-runtime.js.map +1 -1
  24. package/dist/schema/config.schema.d.ts +33 -2
  25. package/dist/schema/config.schema.d.ts.map +1 -1
  26. package/dist/schema/config.schema.js +18 -1
  27. package/dist/schema/config.schema.js.map +1 -1
  28. package/dist/types.d.ts +7 -3
  29. package/dist/types.d.ts.map +1 -1
  30. package/dist/types.js.map +1 -1
  31. package/package.json +1 -1
  32. package/runtime/index.html +45 -0
  33. package/dev-server/preview/Preview.tsx +0 -276
  34. /package/dev-server/components/{SettingsPreview.tsx → settings-preview.tsx} +0 -0
@@ -0,0 +1,417 @@
1
+ import { Portal } from "@radix-ui/react-portal";
2
+ import IframeResizer, { type IFrameComponent } from "iframe-resizer-react";
3
+ import { useCallback, useEffect, useMemo, useRef, useState } from "react";
4
+ import { SettingsPreview } from "../components/settings-preview";
5
+ import {
6
+ Dialog,
7
+ DialogContent,
8
+ DialogHeader,
9
+ DialogOverlay,
10
+ DialogTitle,
11
+ } from "../components/ui/dialog";
12
+ import {
13
+ Tabs,
14
+ TabsContent,
15
+ TabsList,
16
+ TabsTrigger,
17
+ } from "../components/ui/tabs";
18
+ import { cn, renderCssVariables } from "../lib/utils";
19
+ import { THEME_PRESETS } from "../shared/theme-presets";
20
+
21
+ function Chin({ title }: { title?: string }) {
22
+ if (!title) return null;
23
+
24
+ return (
25
+ <div
26
+ data-testid="NewLinkChin"
27
+ data-animation-target="link-chin"
28
+ className="relative flex min-h-16 flex-col justify-center gap-[1px] py-2 tracking-[-0.2px] items-center px-8"
29
+ >
30
+ <div className="w-full overflow-hidden overflow-ellipsis text-balance text-[14px] font-medium leading-[1.2] text-[var(--button-style-text)] sm:text-[16px] line-clamp-2 text-center">
31
+ {title}
32
+ </div>
33
+ </div>
34
+ );
35
+ }
36
+
37
+ export default function Preview() {
38
+ // Initialize state from localStorage
39
+ 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
+ });
45
+ const [selectedTheme, setSelectedTheme] = useState<
46
+ keyof typeof THEME_PRESETS
47
+ >(() => {
48
+ const saved = localStorage.getItem("linkapp-preview-theme");
49
+ return (saved as keyof typeof THEME_PRESETS) || "default";
50
+ });
51
+ const [selectedGroupLayoutOption, setSelectedGroupLayoutOption] = useState<
52
+ string | undefined
53
+ >(() => {
54
+ const saved = localStorage.getItem("linkapp-preview-groupLayoutOption");
55
+ return saved || undefined;
56
+ });
57
+
58
+ // Chin configuration
59
+ const chinPosition = __SETTINGS_CONFIG__?.featured_chin_position;
60
+ const chinTitle = __PREVIEW_PROPS__?.linkTitle as string | undefined;
61
+ const isOverlay =
62
+ chinPosition === "overlayAbove" || chinPosition === "overlayBelow";
63
+
64
+ // Popup dialog state
65
+ const [isPopupOpen, setIsPopupOpen] = useState(false);
66
+
67
+ // Generate unique IDs for iframes using timestamp
68
+ const sheetIframeId = useMemo(() => `preview-iframe-sheet-${Date.now()}`, []);
69
+ const featuredIframeId = useMemo(
70
+ () => `preview-iframe-featured-${Date.now()}`,
71
+ [],
72
+ );
73
+ const popupIframeId = useMemo(() => `preview-iframe-popup-${Date.now()}`, []);
74
+
75
+ // Save selected tab to localStorage
76
+ useEffect(() => {
77
+ localStorage.setItem("linkapp-preview-tab", selectedTab);
78
+ }, [selectedTab]);
79
+
80
+ // Save selected theme to localStorage
81
+ useEffect(() => {
82
+ localStorage.setItem("linkapp-preview-theme", selectedTheme);
83
+ }, [selectedTheme]);
84
+
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
+ // Handle iframe resize events
98
+ const handleResized = useCallback(
99
+ (ev: {
100
+ iframe: IFrameComponent;
101
+ height: number;
102
+ width: number;
103
+ type: string;
104
+ }): void => {
105
+ // IframeResizer automatically handles height adjustments
106
+ // This callback is available for debugging if needed
107
+ },
108
+ [],
109
+ );
110
+
111
+ // Handle postMessage from featured iframe for EXPAND_LINK_APP
112
+ const handleMessage = useCallback((event: MessageEvent) => {
113
+ if (
114
+ event.data &&
115
+ typeof event.data === "object" &&
116
+ event.data.source === "linkapp" &&
117
+ event.data.type === "EXPAND_LINK_APP"
118
+ ) {
119
+ setIsPopupOpen(true);
120
+ }
121
+ }, []);
122
+
123
+ // Add message listener
124
+ useEffect(() => {
125
+ window.addEventListener("message", handleMessage);
126
+ return () => window.removeEventListener("message", handleMessage);
127
+ }, [handleMessage]);
128
+
129
+ const renderedCssVariables = useMemo(() => {
130
+ const themeVariables =
131
+ THEME_PRESETS[selectedTheme] || THEME_PRESETS.default;
132
+ return renderCssVariables(themeVariables.variables);
133
+ }, [selectedTheme]);
134
+
135
+ return (
136
+ <>
137
+ <style>{`:root {
138
+ ${renderedCssVariables}
139
+ }`}</style>
140
+
141
+ <div
142
+ className={cn("min-h-screen", {
143
+ "bg-black/50": selectedTab === "sheet",
144
+ "bg-linktree-frame": selectedTab === "featured",
145
+ })}
146
+ id="preview"
147
+ >
148
+ <Tabs
149
+ value={selectedTab}
150
+ onValueChange={(value) =>
151
+ setSelectedTab(value as "sheet" | "featured" | "settings")
152
+ }
153
+ >
154
+ <Portal>
155
+ <div
156
+ className="fixed top-0 left-0 right-0 p-4 flex justify-center gap-4 bg-background border-b"
157
+ style={{ zIndex: 1000000 }}
158
+ >
159
+ <TabsList>
160
+ <TabsTrigger value="sheet">Sheet</TabsTrigger>
161
+ <TabsTrigger value="featured">Featured</TabsTrigger>
162
+ <TabsTrigger value="settings">Settings</TabsTrigger>
163
+ </TabsList>
164
+
165
+ {/* Theme Switcher */}
166
+ <div className="flex items-center gap-2">
167
+ <label htmlFor="theme-select" className="text-sm font-medium">
168
+ Theme:
169
+ </label>
170
+ <select
171
+ id="theme-select"
172
+ value={selectedTheme}
173
+ onChange={(e) =>
174
+ setSelectedTheme(
175
+ e.target.value as keyof typeof THEME_PRESETS,
176
+ )
177
+ }
178
+ 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"
179
+ >
180
+ {Object.entries(THEME_PRESETS).map(([key, theme]) => (
181
+ <option key={key} value={key}>
182
+ {theme.name}
183
+ </option>
184
+ ))}
185
+ </select>
186
+ </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
+ </div>
208
+ </Portal>
209
+
210
+ {/* Main Content with Padding for Fixed Tabs */}
211
+ <div className="pt-20">
212
+ <TabsContent value="sheet" className="m-0">
213
+ {/* Sheet Modal - Always Open */}
214
+ <Dialog open={true} modal={false}>
215
+ <DialogOverlay />
216
+ <DialogContent
217
+ className="h-[calc(100dvh-2rem)] max-w-[608px] md:min-h-[25vh] md:h-[80%] md:max-h-[900px] overflow-auto"
218
+ showCloseButton={false}
219
+ >
220
+ <DialogHeader className="sticky top-0 bg-white px-4">
221
+ <div className="grid h-16 grid-cols-[32px_auto_32px] items-center gap-4">
222
+ <button className="flex size-8 items-center justify-center rounded-sm focus-visible:outline-none">
223
+ <svg
224
+ width="16"
225
+ height="16"
226
+ viewBox="0 0 16 16"
227
+ fill="none"
228
+ xmlns="http://www.w3.org/2000/svg"
229
+ className=" "
230
+ role="img"
231
+ aria-hidden="true"
232
+ >
233
+ <path
234
+ fill="currentColor"
235
+ 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"
236
+ ></path>
237
+ </svg>
238
+ </button>
239
+
240
+ <DialogTitle className="self-center truncate py-3 text-center">
241
+ Sheet
242
+ </DialogTitle>
243
+
244
+ <button className="flex size-8 items-center justify-center rounded-sm focus-visible:outline-none">
245
+ <svg
246
+ width="16"
247
+ height="16"
248
+ viewBox="0 0 16 16"
249
+ fill="none"
250
+ xmlns="http://www.w3.org/2000/svg"
251
+ className=" "
252
+ role="img"
253
+ aria-hidden="true"
254
+ >
255
+ <path
256
+ fill="currentColor"
257
+ 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"
258
+ ></path>
259
+ </svg>
260
+ </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
303
+ }
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
+ }
package/dist/cli.js CHANGED
@@ -22,6 +22,7 @@ cli
22
22
  .option('--analyze', 'Generate bundle analysis report (deprecated, use --profile)')
23
23
  .option('--profile', 'Enable build profiling and bundle analysis')
24
24
  .option('--sourcemap', 'Generate sourcemaps for production build')
25
+ .option('--compress', 'Generate Brotli-compressed (.br) files for optimal CDN delivery')
25
26
  .action(buildCommand);
26
27
  // Deploy command
27
28
  cli
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,GAAG,EAAE,MAAM,KAAK,CAAA;AACzB,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAA;AAClD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAA;AACpD,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAA;AAClD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAA;AACpD,OAAO,EAAE,wBAAwB,EAAE,MAAM,oCAAoC,CAAA;AAE7E,MAAM,GAAG,GAAG,GAAG,CAAC,SAAS,CAAC,CAAA;AAE1B,eAAe;AACf,MAAM,OAAO,GAAG,OAAO,CAAA;AAEvB,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,CAAA;AAE3B,cAAc;AACd,GAAG;KACA,OAAO,CAAC,KAAK,EAAE,uCAAuC,CAAC;KACvD,MAAM,CAAC,eAAe,EAAE,qCAAqC,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;KACjF,MAAM,CAAC,UAAU,CAAC,CAAA;AAErB,gBAAgB;AAChB,GAAG;KACA,OAAO,CAAC,OAAO,EAAE,8BAA8B,CAAC;KAChD,MAAM,CAAC,WAAW,EAAE,6DAA6D,CAAC;KAClF,MAAM,CAAC,WAAW,EAAE,4CAA4C,CAAC;KACjE,MAAM,CAAC,aAAa,EAAE,0CAA0C,CAAC;KACjE,MAAM,CAAC,YAAY,CAAC,CAAA;AAEvB,iBAAiB;AACjB,GAAG;KACA,OAAO,CAAC,QAAQ,EAAE,4BAA4B,CAAC;KAC/C,MAAM,CAAC,MAAM,EAAE,gDAAgD,CAAC;KAChE,MAAM,CAAC,gBAAgB,EAAE,qCAAqC,CAAC;KAC/D,MAAM,CAAC,aAAa,CAAC,CAAA;AAExB,cAAc;AACd,GAAG;KACA,OAAO,CAAC,iBAAiB,EAAE,mCAAmC,CAAC;KAC/D,MAAM,CAAC,OAAO,EAAE,2BAA2B,CAAC;KAC5C,MAAM,CAAC,aAAa,EAAE,0BAA0B,CAAC;KACjD,MAAM,CAAC,kBAAkB,EAAE,qBAAqB,CAAC;KACjD,MAAM,CAAC,UAAU,CAAC,CAAA;AAErB,gBAAgB;AAChB,GAAG;KACA,OAAO,CAAC,OAAO,EAAE,4BAA4B,CAAC;KAC9C,MAAM,CAAC,MAAM,EAAE,+CAA+C,CAAC;KAC/D,MAAM,CAAC,YAAY,CAAC,CAAA;AAEvB,iBAAiB;AACjB,GAAG;KACA,OAAO,CAAC,QAAQ,EAAE,sBAAsB,CAAC;KACzC,MAAM,CAAC,MAAM,EAAE,kDAAkD,CAAC;KAClE,MAAM,CAAC,aAAa,CAAC,CAAA;AAExB,uBAAuB;AACvB,GAAG,CAAC,OAAO,CAAC,4BAA4B,EAAE,oCAAoC,CAAC,CAAC,MAAM,CAAC,wBAAwB,CAAC,CAAA;AAEhH,gBAAgB;AAChB,GAAG,CAAC,KAAK,EAAE,CAAA"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,GAAG,EAAE,MAAM,KAAK,CAAA;AACzB,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAA;AAClD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAA;AACpD,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAA;AAClD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAA;AACpD,OAAO,EAAE,wBAAwB,EAAE,MAAM,oCAAoC,CAAA;AAE7E,MAAM,GAAG,GAAG,GAAG,CAAC,SAAS,CAAC,CAAA;AAE1B,eAAe;AACf,MAAM,OAAO,GAAG,OAAO,CAAA;AAEvB,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,CAAA;AAE3B,cAAc;AACd,GAAG;KACA,OAAO,CAAC,KAAK,EAAE,uCAAuC,CAAC;KACvD,MAAM,CAAC,eAAe,EAAE,qCAAqC,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;KACjF,MAAM,CAAC,UAAU,CAAC,CAAA;AAErB,gBAAgB;AAChB,GAAG;KACA,OAAO,CAAC,OAAO,EAAE,8BAA8B,CAAC;KAChD,MAAM,CAAC,WAAW,EAAE,6DAA6D,CAAC;KAClF,MAAM,CAAC,WAAW,EAAE,4CAA4C,CAAC;KACjE,MAAM,CAAC,aAAa,EAAE,0CAA0C,CAAC;KACjE,MAAM,CAAC,YAAY,EAAE,iEAAiE,CAAC;KACvF,MAAM,CAAC,YAAY,CAAC,CAAA;AAEvB,iBAAiB;AACjB,GAAG;KACA,OAAO,CAAC,QAAQ,EAAE,4BAA4B,CAAC;KAC/C,MAAM,CAAC,MAAM,EAAE,gDAAgD,CAAC;KAChE,MAAM,CAAC,gBAAgB,EAAE,qCAAqC,CAAC;KAC/D,MAAM,CAAC,aAAa,CAAC,CAAA;AAExB,cAAc;AACd,GAAG;KACA,OAAO,CAAC,iBAAiB,EAAE,mCAAmC,CAAC;KAC/D,MAAM,CAAC,OAAO,EAAE,2BAA2B,CAAC;KAC5C,MAAM,CAAC,aAAa,EAAE,0BAA0B,CAAC;KACjD,MAAM,CAAC,kBAAkB,EAAE,qBAAqB,CAAC;KACjD,MAAM,CAAC,UAAU,CAAC,CAAA;AAErB,gBAAgB;AAChB,GAAG;KACA,OAAO,CAAC,OAAO,EAAE,4BAA4B,CAAC;KAC9C,MAAM,CAAC,MAAM,EAAE,+CAA+C,CAAC;KAC/D,MAAM,CAAC,YAAY,CAAC,CAAA;AAEvB,iBAAiB;AACjB,GAAG;KACA,OAAO,CAAC,QAAQ,EAAE,sBAAsB,CAAC;KACzC,MAAM,CAAC,MAAM,EAAE,kDAAkD,CAAC;KAClE,MAAM,CAAC,aAAa,CAAC,CAAA;AAExB,uBAAuB;AACvB,GAAG,CAAC,OAAO,CAAC,4BAA4B,EAAE,oCAAoC,CAAC,CAAC,MAAM,CAAC,wBAAwB,CAAC,CAAA;AAEhH,gBAAgB;AAChB,GAAG,CAAC,KAAK,EAAE,CAAA"}
@@ -2,6 +2,7 @@ interface BuildOptions {
2
2
  analyze?: boolean;
3
3
  profile?: boolean;
4
4
  sourcemap?: boolean;
5
+ compress?: boolean;
5
6
  }
6
7
  export declare function buildCommand(options: BuildOptions): Promise<void>;
7
8
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"build.d.ts","sourceRoot":"","sources":["../../src/commands/build.ts"],"names":[],"mappings":"AAUA,UAAU,YAAY;IACpB,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,SAAS,CAAC,EAAE,OAAO,CAAA;CACpB;AAED,wBAAsB,YAAY,CAAC,OAAO,EAAE,YAAY,iBAyDvD"}
1
+ {"version":3,"file":"build.d.ts","sourceRoot":"","sources":["../../src/commands/build.ts"],"names":[],"mappings":"AAWA,UAAU,YAAY;IACpB,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAA;CACnB;AAED,wBAAsB,YAAY,CAAC,OAAO,EAAE,YAAY,iBAqGvD"}
@@ -1,8 +1,9 @@
1
1
  import pc from 'picocolors';
2
2
  import { createRsbuild } from '@rsbuild/core';
3
3
  import { createRsbuildConfig } from '../lib/rsbuild/config-factory.js';
4
- import { existsSync, statSync, readdirSync } from 'node:fs';
4
+ import { existsSync, statSync, readdirSync, readFileSync } from 'node:fs';
5
5
  import { join } from 'node:path';
6
+ import { gzipSync, brotliCompressSync, constants } from 'node:zlib';
6
7
  const writeLine = (message = '') => {
7
8
  process.stdout.write(`${message}\n`);
8
9
  };
@@ -17,6 +18,7 @@ export async function buildCommand(options) {
17
18
  mode: 'production',
18
19
  sourcemap: options.sourcemap || false,
19
20
  profile: enableProfiling,
21
+ compress: options.compress || false,
20
22
  });
21
23
  // Run Rsbuild build
22
24
  const rsbuild = await createRsbuild({ rsbuildConfig: config });
@@ -29,11 +31,50 @@ export async function buildCommand(options) {
29
31
  const assetDetails = collectAssetDetails(buildResult?.stats);
30
32
  if (assetDetails.length > 0) {
31
33
  writeLine(pc.bold('Build output:'));
34
+ // Calculate compression estimates for main assets
35
+ const distPath = join(process.cwd(), 'dist');
36
+ const jsAssets = assetDetails.filter(a => a.name.endsWith('.js'));
37
+ const cssAssets = assetDetails.filter(a => a.name.endsWith('.css'));
32
38
  for (const asset of assetDetails) {
33
39
  const sizeKB = (asset.size / 1024).toFixed(1);
34
- writeLine(pc.dim(` ${asset.name} ${sizeKB} KB`));
40
+ const assetPath = join(distPath, asset.name);
41
+ // Show compression estimates for JS and CSS files
42
+ if ((asset.name.endsWith('.js') || asset.name.endsWith('.css')) && existsSync(assetPath)) {
43
+ try {
44
+ const content = readFileSync(assetPath);
45
+ const gzipped = gzipSync(content);
46
+ const brotli = brotliCompressSync(content, {
47
+ params: {
48
+ [constants.BROTLI_PARAM_QUALITY]: 11,
49
+ },
50
+ });
51
+ const gzipKB = (gzipped.length / 1024).toFixed(1);
52
+ const brotliKB = (brotli.length / 1024).toFixed(1);
53
+ writeLine(pc.dim(` ${asset.name}`));
54
+ writeLine(pc.dim(` ${sizeKB} KB (raw) → ${gzipKB} KB (gzip) → ${brotliKB} KB (brotli)`));
55
+ }
56
+ catch {
57
+ writeLine(pc.dim(` ${asset.name} ${sizeKB} KB`));
58
+ }
59
+ }
60
+ else {
61
+ writeLine(pc.dim(` ${asset.name} ${sizeKB} KB`));
62
+ }
35
63
  }
36
64
  writeLine();
65
+ // Show totals
66
+ const totalJS = jsAssets.reduce((sum, a) => sum + a.size, 0);
67
+ const totalCSS = cssAssets.reduce((sum, a) => sum + a.size, 0);
68
+ if (totalJS > 0 || totalCSS > 0) {
69
+ writeLine(pc.bold('Bundle size summary:'));
70
+ if (totalJS > 0) {
71
+ writeLine(pc.dim(` JavaScript: ${(totalJS / 1024).toFixed(1)} KB`));
72
+ }
73
+ if (totalCSS > 0) {
74
+ writeLine(pc.dim(` CSS: ${(totalCSS / 1024).toFixed(1)} KB`));
75
+ }
76
+ writeLine();
77
+ }
37
78
  }
38
79
  // Show dist directory size
39
80
  const distPath = join(process.cwd(), 'dist');
@@ -1 +1 @@
1
- {"version":3,"file":"build.js","sourceRoot":"","sources":["../../src/commands/build.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"build.js","sourceRoot":"","sources":["../../src/commands/build.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"generate-manifest-files.d.ts","sourceRoot":"","sources":["../../../src/lib/deploy/generate-manifest-files.ts"],"names":[],"mappings":"AAMA,wBAAsB,qBAAqB,CACzC,WAAW,GAAE,MAAsB,GAClC,OAAO,CAAC,IAAI,CAAC,CAoGf"}
1
+ {"version":3,"file":"generate-manifest-files.d.ts","sourceRoot":"","sources":["../../../src/lib/deploy/generate-manifest-files.ts"],"names":[],"mappings":"AAMA,wBAAsB,qBAAqB,CACzC,WAAW,GAAE,MAAsB,GAClC,OAAO,CAAC,IAAI,CAAC,CA6Gf"}
@@ -68,6 +68,15 @@ export async function generateManifestFiles(projectPath = process.cwd()) {
68
68
  ...(config.settings.featured_chin_position !== undefined && {
69
69
  featured_chin_position: config.settings.featured_chin_position,
70
70
  }),
71
+ ...(config.settings.featured_head_allow_unlocked_aspect_ratio !== undefined && {
72
+ featured_head_allow_unlocked_aspect_ratio: config.settings.featured_head_allow_unlocked_aspect_ratio,
73
+ }),
74
+ ...(config.settings.sheet_behavior !== undefined && {
75
+ sheet_behavior: config.settings.sheet_behavior,
76
+ }),
77
+ ...(config.settings.featured_head_click_behavior !== undefined && {
78
+ featured_head_click_behavior: config.settings.featured_head_click_behavior,
79
+ }),
71
80
  };
72
81
  writeFileSync(join(linkappDir, "settings.json"), JSON.stringify(settings, null, 2), "utf-8");
73
82
  // Generate url_match_rules.json if present
@@ -1 +1 @@
1
- {"version":3,"file":"generate-manifest-files.js","sourceRoot":"","sources":["../../../src/lib/deploy/generate-manifest-files.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC/D,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,UAAU,EAAE,MAAM,MAAM,CAAC;AAElC,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAE3D,MAAM,CAAC,KAAK,UAAU,qBAAqB,CACzC,cAAsB,OAAO,CAAC,GAAG,EAAE;IAEnC,yDAAyD;IACzD,MAAM,cAAc,GAAG,IAAI,CAAC,WAAW,EAAE,mBAAmB,CAAC,CAAC;IAC9D,MAAM,gBAAgB,GAAG,IAAI,CAAC,WAAW,EAAE,SAAS,EAAE,mBAAmB,CAAC,CAAC;IAC3E,MAAM,UAAU,GAAG,UAAU,CAAC,cAAc,CAAC;QAC3C,CAAC,CAAC,cAAc;QAChB,CAAC,CAAC,gBAAgB,CAAC;IAErB,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC5B,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAC;IAC9D,CAAC;IAED,IAAI,CAAC;QACH,gDAAgD;QAChD,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC;QACjD,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;YAC5B,SAAS,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC7C,CAAC;QAED,wCAAwC;QACxC,MAAM,IAAI,GAAG,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE;YACvC,cAAc,EAAE,IAAI;YACpB,WAAW,EAAE,KAAK;SACnB,CAAC,CAAC;QACH,MAAM,MAAM,GAAkB,IAAI,CAAC,UAAU,CAAC,CAAC;QAE/C,yBAAyB;QACzB,uEAAuE;QACvE,MAAM,QAAQ,GAAG;YACf,IAAI,EAAE,MAAM,CAAC,QAAQ,CAAC,IAAI;YAC1B,OAAO,EAAE,MAAM,CAAC,QAAQ,CAAC,OAAO;YAChC,WAAW,EAAE,MAAM,CAAC,QAAQ,CAAC,WAAW;YACxC,gBAAgB,EAAE,MAAM,CAAC,QAAQ,CAAC,gBAAgB;YAClD,OAAO,EAAE,MAAM,CAAC,QAAQ,CAAC,OAAO;YAChC,gBAAgB,EAAE,MAAM,CAAC,QAAQ,CAAC,gBAAgB;YAClD,QAAQ,EAAE,MAAM,CAAC,QAAQ,CAAC,QAAQ;YAClC,YAAY,EAAE,MAAM,CAAC,QAAQ,CAAC,YAAY;YAC1C,MAAM,EAAE,MAAM,CAAC,QAAQ,CAAC,MAAM;SAC/B,CAAC;QAEF,aAAa,CACX,IAAI,CAAC,UAAU,EAAE,eAAe,CAAC,EACjC,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,EACjC,OAAO,CACR,CAAC;QAEF,yEAAyE;QACzE,MAAM,eAAe,GAAG,aAAa,CAAC,WAAW,CAAC,CAAC;QACnD,MAAM,iBAAiB,GAAG,eAAe,CAAC,OAAO,CAAC,IAAI,CACpD,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,UAAU,CACvC,CAAC;QAEF,yBAAyB;QACzB,MAAM,QAAQ,GAAG;YACf,KAAK,EAAE,MAAM,CAAC,QAAQ,CAAC,KAAK;YAC5B,QAAQ,EAAE,MAAM,CAAC,QAAQ,CAAC,QAAQ;YAClC,QAAQ,EAAE,MAAM,CAAC,QAAQ,CAAC,QAAQ;YAClC,kEAAkE;YAClE,wBAAwB,EAAE,iBAAiB;YAC3C,qCAAqC;YACrC,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,KAAK,SAAS,IAAI;gBAC5C,QAAQ,EAAE,MAAM,CAAC,QAAQ,CAAC,QAAQ;aACnC,CAAC;YACF,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,KAAK,SAAS,IAAI;gBAC3C,OAAO,EAAE,MAAM,CAAC,QAAQ,CAAC,OAAO;aACjC,CAAC;YACF,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;YAC3D,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,kBAAkB,IAAI;gBACxC,kBAAkB,EAAE,MAAM,CAAC,QAAQ,CAAC,kBAAkB;aACvD,CAAC;YACF,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,kBAAkB,IAAI;gBACxC,kBAAkB,EAAE,MAAM,CAAC,QAAQ,CAAC,kBAAkB;aACvD,CAAC;YACF,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,YAAY,KAAK,SAAS,IAAI;gBAChD,YAAY,EAAE,MAAM,CAAC,QAAQ,CAAC,YAAY;aAC3C,CAAC;YACF,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,sBAAsB,KAAK,SAAS,IAAI;gBAC1D,sBAAsB,EAAE,MAAM,CAAC,QAAQ,CAAC,sBAAsB;aAC/D,CAAC;SACH,CAAC;QAEF,aAAa,CACX,IAAI,CAAC,UAAU,EAAE,eAAe,CAAC,EACjC,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,EACjC,OAAO,CACR,CAAC;QAEF,2CAA2C;QAC3C,IAAI,MAAM,CAAC,eAAe,EAAE,CAAC;YAC3B,aAAa,CACX,IAAI,CAAC,UAAU,EAAE,sBAAsB,CAAC,EACxC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,eAAe,EAAE,IAAI,EAAE,CAAC,CAAC,EAC/C,OAAO,CACR,CAAC;QACJ,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,IAAI,KAAK,CACb,sCAAsC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,EAAE,CACvF,CAAC;IACJ,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"generate-manifest-files.js","sourceRoot":"","sources":["../../../src/lib/deploy/generate-manifest-files.ts"],"names":[],"mappings":"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"}
@@ -18,6 +18,7 @@ interface RsbuildConfigOptions {
18
18
  open?: boolean;
19
19
  sourcemap?: boolean;
20
20
  profile?: boolean;
21
+ compress?: boolean;
21
22
  }
22
23
  export declare function createRsbuildConfig(options: RsbuildConfigOptions): RsbuildConfig;
23
24
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"config-factory.d.ts","sourceRoot":"","sources":["../../../src/lib/rsbuild/config-factory.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,eAAe,CAAA;AAOlD;;;;;;;;;;;GAWG;AAEH,UAAU,oBAAoB;IAC5B,IAAI,EAAE,aAAa,GAAG,YAAY,CAAA;IAClC,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,IAAI,CAAC,EAAE,OAAO,CAAA;IACd,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,OAAO,CAAC,EAAE,OAAO,CAAA;CAClB;AAED,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,oBAAoB,GAAG,aAAa,CA2IhF"}
1
+ {"version":3,"file":"config-factory.d.ts","sourceRoot":"","sources":["../../../src/lib/rsbuild/config-factory.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,eAAe,CAAA;AAQlD;;;;;;;;;;;GAWG;AAEH,UAAU,oBAAoB;IAC5B,IAAI,EAAE,aAAa,GAAG,YAAY,CAAA;IAClC,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,IAAI,CAAC,EAAE,OAAO,CAAA;IACd,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,QAAQ,CAAC,EAAE,OAAO,CAAA;CACnB;AAED,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,oBAAoB,GAAG,aAAa,CAwKhF"}
@@ -3,8 +3,9 @@ import { resolve, join } from 'node:path';
3
3
  import { assetVersioning } from './plugins/asset-versioning.js';
4
4
  import { setupRuntime } from '../utils/setup-runtime.js';
5
5
  import { copyPublicDirectory } from './plugins/copy-public.js';
6
+ import { brotliCompression } from './plugins/brotli-compression.js';
6
7
  export function createRsbuildConfig(options) {
7
- const { mode, port = 3000, host = 'localhost', open = false, sourcemap = false, profile = false } = options;
8
+ const { mode, port = 3000, host = 'localhost', open = false, sourcemap = false, profile = false, compress = false } = options;
8
9
  const isDev = mode === 'development';
9
10
  const projectRoot = process.cwd();
10
11
  const runtimeRoot = join(projectRoot, '.linkapp');
@@ -113,6 +114,25 @@ export function createRsbuildConfig(options) {
113
114
  printFileSize: !isDev,
114
115
  chunkSplit: {
115
116
  strategy: 'split-by-experience',
117
+ override: {
118
+ cacheGroups: {
119
+ // Separate React vendor bundle for better caching
120
+ react: {
121
+ test: /[\\/]node_modules[\\/](react|react-dom|scheduler)[\\/]/,
122
+ name: 'react-vendor',
123
+ priority: 20,
124
+ chunks: 'all',
125
+ },
126
+ // Group other node_modules into vendor bundle
127
+ vendor: {
128
+ test: /[\\/]node_modules[\\/]/,
129
+ name: 'vendor',
130
+ priority: 10,
131
+ chunks: 'all',
132
+ minSize: 10000, // Only create vendor chunk if > 10KB
133
+ },
134
+ },
135
+ },
116
136
  },
117
137
  },
118
138
  };
@@ -125,6 +145,13 @@ export function createRsbuildConfig(options) {
125
145
  }), assetVersioning({
126
146
  manifestPath: 'build-manifest.json',
127
147
  }));
148
+ // Add Brotli compression if requested
149
+ if (compress) {
150
+ config.plugins.push(brotliCompression({
151
+ quality: 11,
152
+ threshold: 1024,
153
+ }));
154
+ }
128
155
  // Add bundle analyzer if requested
129
156
  if (profile) {
130
157
  console.warn('⚠️ Bundle profiling is not available yet in Rsbuild config. Use --sourcemap flag and analyze with external tools.');