@linktr.ee/linkapp 0.0.10 → 0.0.12

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 (61) hide show
  1. package/dev-server/classic/main.tsx +45 -24
  2. package/dev-server/classic.html +58 -0
  3. package/dev-server/featured/main.tsx +45 -24
  4. package/dev-server/featured.html +58 -0
  5. package/dev-server/preview/Preview.tsx +425 -14
  6. package/dist/cli.js +9 -3
  7. package/dist/cli.js.map +1 -1
  8. package/dist/commands/add.js +3 -3
  9. package/dist/commands/add.js.map +1 -1
  10. package/dist/commands/deploy.d.ts.map +1 -1
  11. package/dist/commands/deploy.js +10 -4
  12. package/dist/commands/deploy.js.map +1 -1
  13. package/dist/components/ThemeStyle.d.ts +30 -0
  14. package/dist/components/ThemeStyle.d.ts.map +1 -0
  15. package/dist/components/ThemeStyle.js +33 -0
  16. package/dist/components/ThemeStyle.js.map +1 -0
  17. package/dist/components/index.d.ts +2 -0
  18. package/dist/components/index.d.ts.map +1 -0
  19. package/dist/components/index.js +2 -0
  20. package/dist/components/index.js.map +1 -0
  21. package/dist/lib/build/detect-layouts.d.ts.map +1 -1
  22. package/dist/lib/build/detect-layouts.js +1 -4
  23. package/dist/lib/build/detect-layouts.js.map +1 -1
  24. package/dist/lib/deploy/generate-manifest-files.d.ts.map +1 -1
  25. package/dist/lib/deploy/generate-manifest-files.js +6 -0
  26. package/dist/lib/deploy/generate-manifest-files.js.map +1 -1
  27. package/dist/lib/deploy/pack-project.d.ts.map +1 -1
  28. package/dist/lib/deploy/pack-project.js +32 -5
  29. package/dist/lib/deploy/pack-project.js.map +1 -1
  30. package/dist/lib/deploy/upload.d.ts +1 -0
  31. package/dist/lib/deploy/upload.d.ts.map +1 -1
  32. package/dist/lib/deploy/upload.js +12 -2
  33. package/dist/lib/deploy/upload.js.map +1 -1
  34. package/dist/lib/deploy/validation.d.ts.map +1 -1
  35. package/dist/lib/deploy/validation.js +4 -61
  36. package/dist/lib/deploy/validation.js.map +1 -1
  37. package/dist/lib/utils/setup-runtime.d.ts.map +1 -1
  38. package/dist/lib/utils/setup-runtime.js +48 -17
  39. package/dist/lib/utils/setup-runtime.js.map +1 -1
  40. package/dist/schema/config.schema.d.ts +50 -114
  41. package/dist/schema/config.schema.d.ts.map +1 -1
  42. package/dist/schema/config.schema.js +94 -18
  43. package/dist/schema/config.schema.js.map +1 -1
  44. package/dist/sdk/index.d.ts +21 -0
  45. package/dist/sdk/index.d.ts.map +1 -0
  46. package/dist/sdk/index.js +21 -0
  47. package/dist/sdk/index.js.map +1 -0
  48. package/dist/sdk/send-message.d.ts +16 -0
  49. package/dist/sdk/send-message.d.ts.map +1 -0
  50. package/dist/sdk/send-message.js +34 -0
  51. package/dist/sdk/send-message.js.map +1 -0
  52. package/dist/sdk/use-open-popup.d.ts +23 -0
  53. package/dist/sdk/use-open-popup.d.ts.map +1 -0
  54. package/dist/sdk/use-open-popup.js +29 -0
  55. package/dist/sdk/use-open-popup.js.map +1 -0
  56. package/dist/types.d.ts +149 -31
  57. package/dist/types.d.ts.map +1 -1
  58. package/dist/types.js +37 -1
  59. package/dist/types.js.map +1 -1
  60. package/package.json +13 -4
  61. package/runtime/index.html +58 -0
package/dist/types.d.ts CHANGED
@@ -2,17 +2,25 @@
2
2
  * Type definitions for LinkApp
3
3
  * Note: Uses snake_case for API-facing types to match API requirements
4
4
  */
5
- export type Environment = 'production' | 'qa';
5
+ export type Environment = "production" | "qa";
6
6
  /**
7
- * Theme configuration from Linktree profile
7
+ * Theme configuration passed to link app iframes via postMessage
8
8
  */
9
- export interface Theme {
9
+ export interface LinkAppTheme {
10
+ cssVariables: Record<string, string>;
11
+ /** @deprecated Use cssVariables['--button-style-text'] instead */
10
12
  textColor: string;
13
+ /** @deprecated Use cssVariables['--button-style-background'] instead */
11
14
  backgroundColor: string;
15
+ /** @deprecated Use cssVariables['--button-style-inner-radius'] instead */
12
16
  borderRadius: string;
17
+ /** @deprecated Use cssVariables['--button-style-border-color'] instead */
13
18
  borderColor: string;
14
- isOutlineStyle: boolean;
19
+ /** @deprecated Use cssVariables['--button-style-background-hover'] instead */
20
+ backgroundHover: string;
21
+ /** @deprecated Use cssVariables['--button-style-contrast-color'] instead */
15
22
  contrastColor: string;
23
+ /** @deprecated Use cssVariables instead */
16
24
  textHoverColor: string;
17
25
  }
18
26
  /**
@@ -33,21 +41,15 @@ export interface Position {
33
41
  * Core Linktree context available to all LinkApps
34
42
  */
35
43
  export interface LinktreeContext {
36
- linkUrl: string;
37
- layout?: 'stack' | 'grid' | 'carousel' | 'featured';
38
- theme: Theme;
39
- locale: string;
40
- currency: string;
41
- username: string;
42
- viewport: Viewport;
43
- position?: Position;
44
+ linkUrl?: string;
45
+ layout?: "stack" | "grid" | "carousel" | "featured";
46
+ theme?: LinkAppTheme;
44
47
  }
45
48
  /**
46
49
  * Props available to layout components
47
50
  * Extend with custom settings from your config
48
51
  */
49
52
  export type AppProps<TSettings = Record<string, unknown>> = LinktreeContext & TSettings;
50
- export type LinktreeTheme = Theme;
51
53
  export interface LinkAppManifest {
52
54
  name: string;
53
55
  tagline: string;
@@ -60,7 +62,7 @@ export interface LinkAppManifest {
60
62
  documentation?: string;
61
63
  website?: string;
62
64
  };
63
- category: 'grow' | 'sell' | 'share' | 'learn';
65
+ category: "grow" | "sell" | "share" | "learn";
64
66
  search_terms: string[];
65
67
  author: {
66
68
  name: string;
@@ -71,33 +73,115 @@ export interface LinkAppManifest {
71
73
  };
72
74
  };
73
75
  }
76
+ export declare enum SettingsIcon {
77
+ file = "file",
78
+ settings = "settings",
79
+ text_and_media = "text_and_media",
80
+ question = "question"
81
+ }
82
+ export declare enum SettingsElementInput {
83
+ button = "button",
84
+ text = "text",
85
+ textarea = "textarea",
86
+ number = "number",
87
+ radio = "radio",
88
+ checkbox = "checkbox",
89
+ select = "select",
90
+ password = "password",
91
+ switch = "switch",
92
+ linkBehavior = "linkBehavior",
93
+ file = "file",
94
+ url = "url",
95
+ integration = "integration",
96
+ embedOption = "embedOption",
97
+ array = "array"
98
+ }
99
+ export declare enum IntegrationCapability {
100
+ MANAGE_EMAIL_SUBSCRIBERS = "MANAGE_EMAIL_SUBSCRIBERS"
101
+ }
102
+ export declare enum InteractionEvent {
103
+ click = "click"
104
+ }
105
+ export declare enum ActionType {
106
+ "update-link" = "update-link"
107
+ }
108
+ export interface SettingsElementAction {
109
+ on: InteractionEvent;
110
+ type: ActionType;
111
+ data: {
112
+ link_type: string;
113
+ };
114
+ }
115
+ export interface SettingsElementValidation {
116
+ required?: boolean;
117
+ pattern?: string;
118
+ minLength?: number;
119
+ maxLength?: number;
120
+ min?: number;
121
+ max?: number;
122
+ maxSize?: number;
123
+ }
124
+ export interface SettingsOverview {
125
+ title?: string;
126
+ description: string;
127
+ }
128
+ export interface SetupInstructions {
129
+ title?: string;
130
+ description: string;
131
+ }
132
+ export interface SettingsElementOption {
133
+ value: string;
134
+ label: string;
135
+ }
136
+ export interface SettingsElementLinkBehaviorLabel {
137
+ linkOffLabel: string;
138
+ embedLabel: string;
139
+ }
140
+ export interface ConditionalDisplay {
141
+ dependsOn: string;
142
+ value: string | boolean;
143
+ operator?: "equals" | "notEquals" | "contains";
144
+ }
145
+ export interface ArrayOptions {
146
+ add_item_button_text?: string;
147
+ add_item_title?: string;
148
+ add_second_item_button_text?: string;
149
+ edit_item_title?: string;
150
+ item_format?: string;
151
+ min?: number;
152
+ max?: number;
153
+ }
74
154
  export interface LinkAppSettings {
75
155
  title: string;
76
- overview: {
77
- title: string;
78
- description: string;
79
- support_link: string;
80
- };
156
+ icon?: SettingsIcon;
157
+ uses_url?: boolean;
158
+ has_url?: boolean;
159
+ settings_tab_title?: string;
160
+ overview?: SettingsOverview;
161
+ setup_instructions?: SetupInstructions;
81
162
  elements: SettingsElement[];
163
+ has_settings?: boolean;
82
164
  supports_featured_layout?: boolean;
83
165
  }
84
166
  export interface SettingsElement {
85
167
  id: string;
86
- inputType: string;
87
- title: string;
168
+ inputType: SettingsElementInput;
169
+ title?: string;
88
170
  description?: string;
89
- defaultValue?: unknown;
171
+ defaultValue?: string | string[] | boolean;
90
172
  label?: string;
91
173
  placeholder?: string;
92
- validation?: Record<string, unknown>;
93
- options?: Array<{
94
- label: string;
95
- value: unknown;
96
- }>;
97
- linkBehaviorLabels?: {
98
- embedLabel: string;
99
- linkOffLabel: string;
100
- };
174
+ validation?: SettingsElementValidation;
175
+ options?: SettingsElementOption[];
176
+ linkBehaviorLabels?: SettingsElementLinkBehaviorLabel;
177
+ accept?: string[];
178
+ multiple?: boolean;
179
+ action?: SettingsElementAction;
180
+ capability?: IntegrationCapability;
181
+ vendor?: string;
182
+ array_options?: ArrayOptions;
183
+ array_elements?: SettingsElement[];
184
+ conditionalDisplay?: ConditionalDisplay;
101
185
  }
102
186
  export interface UrlMatchRules {
103
187
  hostnames: string[];
@@ -151,4 +235,38 @@ export interface ComponentRegistryItem {
151
235
  export interface ComponentRegistry {
152
236
  [key: string]: ComponentRegistryItem;
153
237
  }
238
+ /**
239
+ * PostMessage communication between LinkApp iframe and parent
240
+ */
241
+ /**
242
+ * Message sent to open a popup/modal in the parent window
243
+ * Parent identifies the LinkApp from event.source
244
+ */
245
+ export interface OpenPopupMessage {
246
+ source: "linkapp";
247
+ type: "OPEN_POPUP";
248
+ payload: {
249
+ data?: Record<string, unknown>;
250
+ };
251
+ }
252
+ /**
253
+ * Union of all messages sent FROM LinkApp iframe TO parent window
254
+ * Extensible for future message types (navigation, analytics, etc.)
255
+ */
256
+ export type LinkAppMessage = OpenPopupMessage;
257
+ /**
258
+ * Message sent from parent window TO LinkApp iframe to update theme
259
+ * Uses CSS-native approach inspired by Figma's iframe theming
260
+ */
261
+ export interface ThemeUpdateMessage {
262
+ type: "THEME_UPDATE";
263
+ payload: {
264
+ name: string;
265
+ variables: Record<string, string>;
266
+ };
267
+ }
268
+ /**
269
+ * Union of all messages sent FROM parent window TO LinkApp iframe
270
+ */
271
+ export type ParentToLinkAppMessage = ThemeUpdateMessage;
154
272
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/dist/types.js CHANGED
@@ -2,5 +2,41 @@
2
2
  * Type definitions for LinkApp
3
3
  * Note: Uses snake_case for API-facing types to match API requirements
4
4
  */
5
- export {};
5
+ export var SettingsIcon;
6
+ (function (SettingsIcon) {
7
+ SettingsIcon["file"] = "file";
8
+ SettingsIcon["settings"] = "settings";
9
+ SettingsIcon["text_and_media"] = "text_and_media";
10
+ SettingsIcon["question"] = "question";
11
+ })(SettingsIcon || (SettingsIcon = {}));
12
+ export var SettingsElementInput;
13
+ (function (SettingsElementInput) {
14
+ SettingsElementInput["button"] = "button";
15
+ SettingsElementInput["text"] = "text";
16
+ SettingsElementInput["textarea"] = "textarea";
17
+ SettingsElementInput["number"] = "number";
18
+ SettingsElementInput["radio"] = "radio";
19
+ SettingsElementInput["checkbox"] = "checkbox";
20
+ SettingsElementInput["select"] = "select";
21
+ SettingsElementInput["password"] = "password";
22
+ SettingsElementInput["switch"] = "switch";
23
+ SettingsElementInput["linkBehavior"] = "linkBehavior";
24
+ SettingsElementInput["file"] = "file";
25
+ SettingsElementInput["url"] = "url";
26
+ SettingsElementInput["integration"] = "integration";
27
+ SettingsElementInput["embedOption"] = "embedOption";
28
+ SettingsElementInput["array"] = "array";
29
+ })(SettingsElementInput || (SettingsElementInput = {}));
30
+ export var IntegrationCapability;
31
+ (function (IntegrationCapability) {
32
+ IntegrationCapability["MANAGE_EMAIL_SUBSCRIBERS"] = "MANAGE_EMAIL_SUBSCRIBERS";
33
+ })(IntegrationCapability || (IntegrationCapability = {}));
34
+ export var InteractionEvent;
35
+ (function (InteractionEvent) {
36
+ InteractionEvent["click"] = "click";
37
+ })(InteractionEvent || (InteractionEvent = {}));
38
+ export var ActionType;
39
+ (function (ActionType) {
40
+ ActionType["update-link"] = "update-link";
41
+ })(ActionType || (ActionType = {}));
6
42
  //# sourceMappingURL=types.js.map
package/dist/types.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;GAGG"}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAuFH,MAAM,CAAN,IAAY,YAKX;AALD,WAAY,YAAY;IACtB,6BAAa,CAAA;IACb,qCAAqB,CAAA;IACrB,iDAAiC,CAAA;IACjC,qCAAqB,CAAA;AACvB,CAAC,EALW,YAAY,KAAZ,YAAY,QAKvB;AAED,MAAM,CAAN,IAAY,oBAgBX;AAhBD,WAAY,oBAAoB;IAC9B,yCAAiB,CAAA;IACjB,qCAAa,CAAA;IACb,6CAAqB,CAAA;IACrB,yCAAiB,CAAA;IACjB,uCAAe,CAAA;IACf,6CAAqB,CAAA;IACrB,yCAAiB,CAAA;IACjB,6CAAqB,CAAA;IACrB,yCAAiB,CAAA;IACjB,qDAA6B,CAAA;IAC7B,qCAAa,CAAA;IACb,mCAAW,CAAA;IACX,mDAA2B,CAAA;IAC3B,mDAA2B,CAAA;IAC3B,uCAAe,CAAA;AACjB,CAAC,EAhBW,oBAAoB,KAApB,oBAAoB,QAgB/B;AAED,MAAM,CAAN,IAAY,qBAEX;AAFD,WAAY,qBAAqB;IAC/B,8EAAqD,CAAA;AACvD,CAAC,EAFW,qBAAqB,KAArB,qBAAqB,QAEhC;AAED,MAAM,CAAN,IAAY,gBAEX;AAFD,WAAY,gBAAgB;IAC1B,mCAAe,CAAA;AACjB,CAAC,EAFW,gBAAgB,KAAhB,gBAAgB,QAE3B;AAED,MAAM,CAAN,IAAY,UAEX;AAFD,WAAY,UAAU;IACpB,yCAA6B,CAAA;AAC/B,CAAC,EAFW,UAAU,KAAV,UAAU,QAErB"}
package/package.json CHANGED
@@ -1,11 +1,11 @@
1
1
  {
2
2
  "name": "@linktr.ee/linkapp",
3
- "version": "0.0.10",
3
+ "version": "0.0.12",
4
4
  "description": "Development, build, and deployment tooling for LinkApps",
5
5
  "type": "module",
6
6
  "bin": {
7
- "linkapp": "./bin/cli.js",
8
- "create-linktree-link-run": "./bin/cli.js"
7
+ "linkapp": "bin/cli.js",
8
+ "create-linktree-link-run": "bin/cli.js"
9
9
  },
10
10
  "files": [
11
11
  "dist",
@@ -20,7 +20,16 @@
20
20
  "import": "./dist/cli.js"
21
21
  },
22
22
  "./types": {
23
- "types": "./dist/types.d.ts"
23
+ "types": "./dist/types.d.ts",
24
+ "import": "./dist/types.js"
25
+ },
26
+ "./components": {
27
+ "types": "./dist/components/index.d.ts",
28
+ "import": "./dist/components/index.js"
29
+ },
30
+ "./sdk": {
31
+ "types": "./dist/sdk/index.d.ts",
32
+ "import": "./dist/sdk/index.js"
24
33
  }
25
34
  },
26
35
  "scripts": {
@@ -4,6 +4,64 @@
4
4
  <meta charset="UTF-8" />
5
5
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
6
6
  <title>LinkApp</title>
7
+
8
+ <!-- Linktree theme variables will be injected here -->
9
+ <style id="linktree-theme"></style>
10
+
11
+ <script>
12
+ /**
13
+ * Helper function to convert CSS variables object to CSS string
14
+ * @param {Record<string, string>} vars - Object with CSS variable names as keys
15
+ * @returns {string} CSS string like "--var1: value1; --var2: value2;"
16
+ */
17
+ function renderCssVariables(vars) {
18
+ return Object.entries(vars)
19
+ .map((entry) => entry.join(': '))
20
+ .join('; ') + ';'
21
+ }
22
+
23
+ /**
24
+ * Listen for theme updates from parent window
25
+ * Applies CSS variables to the document root
26
+ */
27
+ window.addEventListener('message', function(event) {
28
+ // Only process messages with the correct structure
29
+ if (
30
+ event.data &&
31
+ typeof event.data === 'object' &&
32
+ event.data.type === 'THEME_UPDATE'
33
+ ) {
34
+ const themeUpdate = event.data
35
+
36
+ // Get the style element where theme variables are injected
37
+ const themeStyle = document.getElementById('linktree-theme')
38
+
39
+ if (!themeStyle) {
40
+ console.warn('linktree-theme style element not found')
41
+ return
42
+ }
43
+
44
+ // Inject CSS variables into :root
45
+ themeStyle.textContent = ':root { ' + renderCssVariables(themeUpdate.payload.variables) + ' }'
46
+
47
+ // Remove any existing theme classes
48
+ const classesToRemove = []
49
+ document.documentElement.classList.forEach((className) => {
50
+ if (className.startsWith('linktree-theme-')) {
51
+ classesToRemove.push(className)
52
+ }
53
+ })
54
+ classesToRemove.forEach((className) => {
55
+ document.documentElement.classList.remove(className)
56
+ })
57
+
58
+ // Add theme class for additional styling hooks
59
+ if (themeUpdate.payload.name && themeUpdate.payload.name !== 'legacy') {
60
+ document.documentElement.classList.add('linktree-theme-' + themeUpdate.payload.name)
61
+ }
62
+ }
63
+ }, false)
64
+ </script>
7
65
  </head>
8
66
  <body>
9
67
  <div id="root"></div>