@linktr.ee/linkapp 0.0.9 → 0.0.11

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 (82) hide show
  1. package/dev-server/classic/main.tsx +46 -8
  2. package/dev-server/classic.html +58 -0
  3. package/dev-server/components/ui/dialog.tsx +19 -42
  4. package/dev-server/components/ui/tabs.tsx +6 -6
  5. package/dev-server/featured/main.tsx +46 -8
  6. package/dev-server/featured.html +58 -0
  7. package/dev-server/lib/utils.ts +2 -2
  8. package/dev-server/preview/Preview.tsx +428 -15
  9. package/dev-server/vite.config.ts +11 -11
  10. package/dist/cli.js +5 -7
  11. package/dist/cli.js.map +1 -1
  12. package/dist/commands/add.d.ts.map +1 -1
  13. package/dist/commands/add.js +3 -3
  14. package/dist/commands/add.js.map +1 -1
  15. package/dist/commands/deploy.d.ts.map +1 -1
  16. package/dist/commands/deploy.js +10 -4
  17. package/dist/commands/deploy.js.map +1 -1
  18. package/dist/commands/dev.d.ts.map +1 -1
  19. package/dist/commands/dev.js +15 -1
  20. package/dist/commands/dev.js.map +1 -1
  21. package/dist/commands/login.d.ts.map +1 -1
  22. package/dist/commands/login.js.map +1 -1
  23. package/dist/components/ThemeStyle.d.ts +30 -0
  24. package/dist/components/ThemeStyle.d.ts.map +1 -0
  25. package/dist/components/ThemeStyle.js +33 -0
  26. package/dist/components/ThemeStyle.js.map +1 -0
  27. package/dist/components/index.d.ts +2 -0
  28. package/dist/components/index.d.ts.map +1 -0
  29. package/dist/components/index.js +2 -0
  30. package/dist/components/index.js.map +1 -0
  31. package/dist/lib/build/detect-layouts.d.ts +2 -2
  32. package/dist/lib/build/detect-layouts.d.ts.map +1 -1
  33. package/dist/lib/build/detect-layouts.js +14 -25
  34. package/dist/lib/build/detect-layouts.js.map +1 -1
  35. package/dist/lib/config/load-config.d.ts +9 -0
  36. package/dist/lib/config/load-config.d.ts.map +1 -0
  37. package/dist/lib/config/load-config.js +31 -0
  38. package/dist/lib/config/load-config.js.map +1 -0
  39. package/dist/lib/deploy/generate-manifest-files.d.ts.map +1 -1
  40. package/dist/lib/deploy/generate-manifest-files.js +20 -35
  41. package/dist/lib/deploy/generate-manifest-files.js.map +1 -1
  42. package/dist/lib/deploy/pack-project.d.ts.map +1 -1
  43. package/dist/lib/deploy/pack-project.js +32 -5
  44. package/dist/lib/deploy/pack-project.js.map +1 -1
  45. package/dist/lib/deploy/upload.d.ts +1 -0
  46. package/dist/lib/deploy/upload.d.ts.map +1 -1
  47. package/dist/lib/deploy/upload.js +17 -7
  48. package/dist/lib/deploy/upload.js.map +1 -1
  49. package/dist/lib/deploy/validation.d.ts.map +1 -1
  50. package/dist/lib/deploy/validation.js +4 -61
  51. package/dist/lib/deploy/validation.js.map +1 -1
  52. package/dist/lib/utils/setup-runtime.d.ts.map +1 -1
  53. package/dist/lib/utils/setup-runtime.js +46 -19
  54. package/dist/lib/utils/setup-runtime.js.map +1 -1
  55. package/dist/lib/vite/config-factory.d.ts.map +1 -1
  56. package/dist/lib/vite/config-factory.js +2 -2
  57. package/dist/lib/vite/config-factory.js.map +1 -1
  58. package/dist/lib/vite/plugins/asset-versioning.d.ts.map +1 -1
  59. package/dist/lib/vite/plugins/asset-versioning.js +4 -2
  60. package/dist/lib/vite/plugins/asset-versioning.js.map +1 -1
  61. package/dist/schema/config.schema.d.ts +126 -99
  62. package/dist/schema/config.schema.d.ts.map +1 -1
  63. package/dist/schema/config.schema.js +140 -20
  64. package/dist/schema/config.schema.js.map +1 -1
  65. package/dist/sdk/index.d.ts +21 -0
  66. package/dist/sdk/index.d.ts.map +1 -0
  67. package/dist/sdk/index.js +21 -0
  68. package/dist/sdk/index.js.map +1 -0
  69. package/dist/sdk/send-message.d.ts +16 -0
  70. package/dist/sdk/send-message.d.ts.map +1 -0
  71. package/dist/sdk/send-message.js +34 -0
  72. package/dist/sdk/send-message.js.map +1 -0
  73. package/dist/sdk/use-open-popup.d.ts +23 -0
  74. package/dist/sdk/use-open-popup.d.ts.map +1 -0
  75. package/dist/sdk/use-open-popup.js +29 -0
  76. package/dist/sdk/use-open-popup.js.map +1 -0
  77. package/dist/types.d.ts +162 -30
  78. package/dist/types.d.ts.map +1 -1
  79. package/dist/types.js +41 -1
  80. package/dist/types.js.map +1 -1
  81. package/package.json +11 -3
  82. package/runtime/index.html +58 -0
@@ -3,11 +3,11 @@ declare const manifestSchema: z.ZodObject<{
3
3
  name: z.ZodString;
4
4
  tagline: z.ZodString;
5
5
  description: z.ZodArray<z.ZodString>;
6
- manifestVersion: z.ZodString;
6
+ manifest_version: z.ZodString;
7
7
  version: z.ZodString;
8
- supportingLinks: z.ZodObject<{
9
- termsOfService: z.ZodString;
10
- privacyPolicy: z.ZodString;
8
+ supporting_links: z.ZodObject<{
9
+ terms_of_service: z.ZodString;
10
+ privacy_policy: z.ZodString;
11
11
  documentation: z.ZodOptional<z.ZodString>;
12
12
  website: z.ZodOptional<z.ZodString>;
13
13
  }, z.core.$strip>;
@@ -15,9 +15,9 @@ declare const manifestSchema: z.ZodObject<{
15
15
  grow: "grow";
16
16
  sell: "sell";
17
17
  share: "share";
18
- other: "other";
18
+ learn: "learn";
19
19
  }>;
20
- searchTerms: z.ZodArray<z.ZodString>;
20
+ search_terms: z.ZodArray<z.ZodString>;
21
21
  author: z.ZodObject<{
22
22
  name: z.ZodString;
23
23
  accounts: z.ZodArray<z.ZodString>;
@@ -27,51 +27,28 @@ declare const manifestSchema: z.ZodObject<{
27
27
  }, z.core.$strip>;
28
28
  }, z.core.$strip>;
29
29
  }, z.core.$strip>;
30
- declare const settingsElementSchema: z.ZodObject<{
31
- id: z.ZodString;
32
- inputType: z.ZodEnum<{
33
- number: "number";
34
- text: "text";
35
- switch: "switch";
36
- select: "select";
37
- color: "color";
38
- textarea: "textarea";
39
- }>;
40
- title: z.ZodString;
41
- description: z.ZodOptional<z.ZodString>;
42
- defaultValue: z.ZodOptional<z.ZodUnknown>;
43
- label: z.ZodOptional<z.ZodString>;
44
- options: z.ZodOptional<z.ZodArray<z.ZodObject<{
45
- label: z.ZodString;
46
- value: z.ZodUnknown;
47
- }, z.core.$strip>>>;
48
- }, z.core.$strip>;
30
+ declare const settingsElementSchema: z.ZodType<any>;
49
31
  declare const settingsSchema: z.ZodObject<{
50
32
  title: z.ZodString;
51
- overview: z.ZodObject<{
52
- title: z.ZodString;
33
+ icon: z.ZodOptional<z.ZodEnum<{
34
+ file: "file";
35
+ settings: "settings";
36
+ text_and_media: "text_and_media";
37
+ question: "question";
38
+ }>>;
39
+ uses_url: z.ZodOptional<z.ZodBoolean>;
40
+ settings_tab_title: z.ZodOptional<z.ZodString>;
41
+ overview: z.ZodOptional<z.ZodObject<{
42
+ title: z.ZodOptional<z.ZodString>;
43
+ description: z.ZodString;
44
+ }, z.core.$strip>>;
45
+ setup_instructions: z.ZodOptional<z.ZodObject<{
46
+ title: z.ZodOptional<z.ZodString>;
53
47
  description: z.ZodString;
54
- supportLink: z.ZodString;
55
- }, z.core.$strip>;
56
- elements: z.ZodArray<z.ZodObject<{
57
- id: z.ZodString;
58
- inputType: z.ZodEnum<{
59
- number: "number";
60
- text: "text";
61
- switch: "switch";
62
- select: "select";
63
- color: "color";
64
- textarea: "textarea";
65
- }>;
66
- title: z.ZodString;
67
- description: z.ZodOptional<z.ZodString>;
68
- defaultValue: z.ZodOptional<z.ZodUnknown>;
69
- label: z.ZodOptional<z.ZodString>;
70
- options: z.ZodOptional<z.ZodArray<z.ZodObject<{
71
- label: z.ZodString;
72
- value: z.ZodUnknown;
73
- }, z.core.$strip>>>;
74
48
  }, z.core.$strip>>;
49
+ elements: z.ZodArray<z.ZodType<any, unknown, z.core.$ZodTypeInternals<any, unknown>>>;
50
+ has_settings: z.ZodOptional<z.ZodBoolean>;
51
+ supports_featured_layout: z.ZodOptional<z.ZodBoolean>;
75
52
  }, z.core.$strip>;
76
53
  declare const urlMatchRulesSchema: z.ZodObject<{
77
54
  hostnames: z.ZodArray<z.ZodString>;
@@ -88,11 +65,11 @@ export declare const linkAppConfigSchema: z.ZodObject<{
88
65
  name: z.ZodString;
89
66
  tagline: z.ZodString;
90
67
  description: z.ZodArray<z.ZodString>;
91
- manifestVersion: z.ZodString;
68
+ manifest_version: z.ZodString;
92
69
  version: z.ZodString;
93
- supportingLinks: z.ZodObject<{
94
- termsOfService: z.ZodString;
95
- privacyPolicy: z.ZodString;
70
+ supporting_links: z.ZodObject<{
71
+ terms_of_service: z.ZodString;
72
+ privacy_policy: z.ZodString;
96
73
  documentation: z.ZodOptional<z.ZodString>;
97
74
  website: z.ZodOptional<z.ZodString>;
98
75
  }, z.core.$strip>;
@@ -100,9 +77,9 @@ export declare const linkAppConfigSchema: z.ZodObject<{
100
77
  grow: "grow";
101
78
  sell: "sell";
102
79
  share: "share";
103
- other: "other";
80
+ learn: "learn";
104
81
  }>;
105
- searchTerms: z.ZodArray<z.ZodString>;
82
+ search_terms: z.ZodArray<z.ZodString>;
106
83
  author: z.ZodObject<{
107
84
  name: z.ZodString;
108
85
  accounts: z.ZodArray<z.ZodString>;
@@ -114,32 +91,27 @@ export declare const linkAppConfigSchema: z.ZodObject<{
114
91
  }, z.core.$strip>;
115
92
  settings: z.ZodObject<{
116
93
  title: z.ZodString;
117
- overview: z.ZodObject<{
118
- title: z.ZodString;
94
+ icon: z.ZodOptional<z.ZodEnum<{
95
+ file: "file";
96
+ settings: "settings";
97
+ text_and_media: "text_and_media";
98
+ question: "question";
99
+ }>>;
100
+ uses_url: z.ZodOptional<z.ZodBoolean>;
101
+ settings_tab_title: z.ZodOptional<z.ZodString>;
102
+ overview: z.ZodOptional<z.ZodObject<{
103
+ title: z.ZodOptional<z.ZodString>;
104
+ description: z.ZodString;
105
+ }, z.core.$strip>>;
106
+ setup_instructions: z.ZodOptional<z.ZodObject<{
107
+ title: z.ZodOptional<z.ZodString>;
119
108
  description: z.ZodString;
120
- supportLink: z.ZodString;
121
- }, z.core.$strip>;
122
- elements: z.ZodArray<z.ZodObject<{
123
- id: z.ZodString;
124
- inputType: z.ZodEnum<{
125
- number: "number";
126
- text: "text";
127
- switch: "switch";
128
- select: "select";
129
- color: "color";
130
- textarea: "textarea";
131
- }>;
132
- title: z.ZodString;
133
- description: z.ZodOptional<z.ZodString>;
134
- defaultValue: z.ZodOptional<z.ZodUnknown>;
135
- label: z.ZodOptional<z.ZodString>;
136
- options: z.ZodOptional<z.ZodArray<z.ZodObject<{
137
- label: z.ZodString;
138
- value: z.ZodUnknown;
139
- }, z.core.$strip>>>;
140
109
  }, z.core.$strip>>;
110
+ elements: z.ZodArray<z.ZodType<any, unknown, z.core.$ZodTypeInternals<any, unknown>>>;
111
+ has_settings: z.ZodOptional<z.ZodBoolean>;
112
+ supports_featured_layout: z.ZodOptional<z.ZodBoolean>;
141
113
  }, z.core.$strip>;
142
- urlMatchRules: z.ZodOptional<z.ZodObject<{
114
+ url_match_rules: z.ZodOptional<z.ZodObject<{
143
115
  hostnames: z.ZodArray<z.ZodString>;
144
116
  patterns: z.ZodOptional<z.ZodArray<z.ZodObject<{
145
117
  pathname: z.ZodString;
@@ -148,6 +120,37 @@ export declare const linkAppConfigSchema: z.ZodObject<{
148
120
  pathname: z.ZodString;
149
121
  }, z.core.$strip>>>;
150
122
  }, z.core.$strip>>;
123
+ preview_props: z.ZodOptional<z.ZodObject<{
124
+ linkUrl: z.ZodString;
125
+ layout: z.ZodOptional<z.ZodEnum<{
126
+ featured: "featured";
127
+ stack: "stack";
128
+ grid: "grid";
129
+ carousel: "carousel";
130
+ }>>;
131
+ theme: z.ZodObject<{
132
+ isOutlineStyle: z.ZodBoolean;
133
+ cssVariables: z.ZodRecord<z.ZodString, z.ZodString>;
134
+ textColor: z.ZodString;
135
+ backgroundColor: z.ZodString;
136
+ borderRadius: z.ZodString;
137
+ borderColor: z.ZodString;
138
+ backgroundHover: z.ZodString;
139
+ contrastColor: z.ZodString;
140
+ textHoverColor: z.ZodString;
141
+ }, z.core.$strip>;
142
+ locale: z.ZodString;
143
+ currency: z.ZodString;
144
+ username: z.ZodString;
145
+ viewport: z.ZodObject<{
146
+ width: z.ZodNumber;
147
+ height: z.ZodNumber;
148
+ }, z.core.$strip>;
149
+ position: z.ZodOptional<z.ZodObject<{
150
+ latitude: z.ZodNumber;
151
+ longitude: z.ZodNumber;
152
+ }, z.core.$strip>>;
153
+ }, z.core.$catchall<z.ZodUnknown>>>;
151
154
  }, z.core.$strip>;
152
155
  export type LinkAppConfig = z.infer<typeof linkAppConfigSchema>;
153
156
  export type LinkAppManifest = z.infer<typeof manifestSchema>;
@@ -172,16 +175,16 @@ export declare function safeLyValidateLinkAppConfig(config: unknown): z.ZodSafeP
172
175
  name: string;
173
176
  tagline: string;
174
177
  description: string[];
175
- manifestVersion: string;
178
+ manifest_version: string;
176
179
  version: string;
177
- supportingLinks: {
178
- termsOfService: string;
179
- privacyPolicy: string;
180
+ supporting_links: {
181
+ terms_of_service: string;
182
+ privacy_policy: string;
180
183
  documentation?: string | undefined;
181
184
  website?: string | undefined;
182
185
  };
183
- category: "grow" | "sell" | "share" | "other";
184
- searchTerms: string[];
186
+ category: "grow" | "sell" | "share" | "learn";
187
+ search_terms: string[];
185
188
  author: {
186
189
  name: string;
187
190
  accounts: string[];
@@ -193,25 +196,22 @@ export declare function safeLyValidateLinkAppConfig(config: unknown): z.ZodSafeP
193
196
  };
194
197
  settings: {
195
198
  title: string;
196
- overview: {
197
- title: string;
199
+ elements: any[];
200
+ icon?: "file" | "settings" | "text_and_media" | "question" | undefined;
201
+ uses_url?: boolean | undefined;
202
+ settings_tab_title?: string | undefined;
203
+ overview?: {
198
204
  description: string;
199
- supportLink: string;
200
- };
201
- elements: {
202
- id: string;
203
- inputType: "number" | "text" | "switch" | "select" | "color" | "textarea";
204
- title: string;
205
- description?: string | undefined;
206
- defaultValue?: unknown;
207
- label?: string | undefined;
208
- options?: {
209
- label: string;
210
- value: unknown;
211
- }[] | undefined;
212
- }[];
205
+ title?: string | undefined;
206
+ } | undefined;
207
+ setup_instructions?: {
208
+ description: string;
209
+ title?: string | undefined;
210
+ } | undefined;
211
+ has_settings?: boolean | undefined;
212
+ supports_featured_layout?: boolean | undefined;
213
213
  };
214
- urlMatchRules?: {
214
+ url_match_rules?: {
215
215
  hostnames: string[];
216
216
  patterns?: {
217
217
  pathname: string;
@@ -220,6 +220,33 @@ export declare function safeLyValidateLinkAppConfig(config: unknown): z.ZodSafeP
220
220
  pathname: string;
221
221
  }[] | undefined;
222
222
  } | undefined;
223
+ preview_props?: {
224
+ [x: string]: unknown;
225
+ linkUrl: string;
226
+ theme: {
227
+ isOutlineStyle: boolean;
228
+ cssVariables: Record<string, string>;
229
+ textColor: string;
230
+ backgroundColor: string;
231
+ borderRadius: string;
232
+ borderColor: string;
233
+ backgroundHover: string;
234
+ contrastColor: string;
235
+ textHoverColor: string;
236
+ };
237
+ locale: string;
238
+ currency: string;
239
+ username: string;
240
+ viewport: {
241
+ width: number;
242
+ height: number;
243
+ };
244
+ layout?: "featured" | "stack" | "grid" | "carousel" | undefined;
245
+ position?: {
246
+ latitude: number;
247
+ longitude: number;
248
+ } | undefined;
249
+ } | undefined;
223
250
  }>;
224
251
  /**
225
252
  * Type guard to check if a value is a valid LinkAppConfig
@@ -1 +1 @@
1
- {"version":3,"file":"config.schema.d.ts","sourceRoot":"","sources":["../../src/schema/config.schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AA8BvB,QAAA,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAqBlB,CAAA;AAGF,QAAA,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;iBAQzB,CAAA;AAGF,QAAA,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;iBAQlB,CAAA;AAGF,QAAA,MAAM,mBAAmB;;;;;;;;iBAgBvB,CAAA;AAGF,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAS9B,CAAA;AAGF,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAA;AAC/D,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,cAAc,CAAC,CAAA;AAC5D,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,cAAc,CAAC,CAAA;AAC5D,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAA;AAC/D,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAA;AAEnE;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,OAAO,GAAG,aAAa,CAEpE;AAED;;;;GAIG;AACH,wBAAgB,2BAA2B,CAAC,MAAM,EAAE,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAE1D;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,aAAa,CAEtE"}
1
+ {"version":3,"file":"config.schema.d.ts","sourceRoot":"","sources":["../../src/schema/config.schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AA8BvB,QAAA,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAqBlB,CAAA;AAqFF,QAAA,MAAM,qBAAqB,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,CAqB/B,CAAA;AAGX,QAAA,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;iBAWlB,CAAA;AAGF,QAAA,MAAM,mBAAmB;;;;;;;;iBAgBvB,CAAA;AAyCF,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAU9B,CAAA;AAGF,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAA;AAC/D,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,cAAc,CAAC,CAAA;AAC5D,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,cAAc,CAAC,CAAA;AAC5D,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAA;AAC/D,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAA;AAEnE;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,OAAO,GAAG,aAAa,CAEpE;AAED;;;;GAIG;AACH,wBAAgB,2BAA2B,CAAC,MAAM,EAAE,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAE1D;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,aAAa,CAEtE"}
@@ -1,15 +1,15 @@
1
1
  import { z } from 'zod';
2
2
  /**
3
3
  * Zod schema for LinkApp configuration
4
- * Based on manifest.schema.json with TypeScript-friendly camelCase naming
4
+ * Uses snake_case naming to match API requirements
5
5
  */
6
6
  const urlSchema = z.string().url();
7
7
  const emailSchema = z.string().email();
8
8
  const versionSchema = z.string().regex(/^\d+\.\d+\.\d+$/, 'Must be semver format (e.g., 1.0.0)');
9
9
  // Supporting Links Schema
10
- const supportingLinksSchema = z.object({
11
- termsOfService: urlSchema.describe('The URL of the terms of service'),
12
- privacyPolicy: urlSchema.describe('The URL of the privacy policy'),
10
+ const supporting_links_schema = z.object({
11
+ terms_of_service: urlSchema.describe('The URL of the terms of service'),
12
+ privacy_policy: urlSchema.describe('The URL of the privacy policy'),
13
13
  documentation: urlSchema.optional().describe('The URL of the documentation'),
14
14
  website: urlSchema.optional().describe('The URL of the website'),
15
15
  });
@@ -38,32 +38,117 @@ const manifestSchema = z.object({
38
38
  .array(z.string())
39
39
  .min(1, 'At least one description paragraph is required')
40
40
  .describe('Array of description paragraphs'),
41
- manifestVersion: versionSchema.describe('The manifest schema version'),
41
+ manifest_version: versionSchema.describe('The manifest schema version'),
42
42
  version: versionSchema.describe('The version of the linkapp'),
43
- supportingLinks: supportingLinksSchema,
44
- category: z.enum(['grow', 'sell', 'share', 'other']).describe('The category of the link type'),
45
- searchTerms: z.array(z.string()).min(1, 'At least one search term is required'),
43
+ supporting_links: supporting_links_schema,
44
+ category: z.enum(['grow', 'sell', 'share', 'learn']).describe('The category of the link type'),
45
+ search_terms: z.array(z.string()).min(1, 'At least one search term is required'),
46
46
  author: authorSchema,
47
47
  });
48
+ // Enums matching the backend types
49
+ const settingsIconSchema = z.enum(['file', 'settings', 'text_and_media', 'question']);
50
+ const settingsElementInputSchema = z.enum([
51
+ 'button',
52
+ 'text',
53
+ 'textarea',
54
+ 'number',
55
+ 'radio',
56
+ 'checkbox',
57
+ 'select',
58
+ 'password',
59
+ 'switch',
60
+ 'linkBehavior',
61
+ 'file',
62
+ 'url',
63
+ 'integration',
64
+ 'embedOption',
65
+ 'array',
66
+ ]);
67
+ const integrationCapabilitySchema = z.enum(['MANAGE_EMAIL_SUBSCRIBERS']);
68
+ const interactionEventSchema = z.enum(['click']);
69
+ const actionTypeSchema = z.enum(['update-link']);
70
+ // Supporting schemas
71
+ const settingsElementActionSchema = z.object({
72
+ on: interactionEventSchema,
73
+ type: actionTypeSchema,
74
+ data: z.object({
75
+ link_type: z.string(),
76
+ }),
77
+ });
78
+ const settingsElementValidationSchema = z.object({
79
+ required: z.boolean().optional(),
80
+ pattern: z.string().optional(),
81
+ minLength: z.number().optional(),
82
+ maxLength: z.number().optional(),
83
+ min: z.number().optional(),
84
+ max: z.number().optional(),
85
+ maxSize: z.number().optional(),
86
+ });
87
+ const settingsOverviewSchema = z.object({
88
+ title: z.string().optional(),
89
+ description: z.string().min(1, 'Overview description is required'),
90
+ });
91
+ const setupInstructionsSchema = z.object({
92
+ title: z.string().optional(),
93
+ description: z.string().min(1, 'Setup instructions description is required'),
94
+ });
95
+ const settingsElementOptionSchema = z.object({
96
+ value: z.string(),
97
+ label: z.string(),
98
+ });
99
+ const settingsElementLinkBehaviorLabelSchema = z.object({
100
+ linkOffLabel: z.string(),
101
+ embedLabel: z.string(),
102
+ });
103
+ const conditionalDisplaySchema = z.object({
104
+ dependsOn: z.string(),
105
+ value: z.union([z.string(), z.boolean()]),
106
+ operator: z.enum(['equals', 'notEquals', 'contains']).optional(),
107
+ });
108
+ const arrayOptionsSchema = z.object({
109
+ add_item_button_text: z.string().optional(),
110
+ add_item_title: z.string().optional(),
111
+ add_second_item_button_text: z.string().optional(),
112
+ edit_item_title: z.string().optional(),
113
+ item_format: z.string().optional(),
114
+ min: z.number().optional(),
115
+ max: z.number().optional(),
116
+ });
48
117
  // Settings Element Schema
49
- const settingsElementSchema = z.object({
118
+ const settingsElementSchema = z
119
+ .object({
50
120
  id: z.string().min(1, 'Element ID is required'),
51
- inputType: z.enum(['text', 'number', 'switch', 'select', 'color', 'textarea']),
52
- title: z.string().min(1, 'Element title is required'),
121
+ inputType: settingsElementInputSchema,
122
+ title: z.string().optional(),
53
123
  description: z.string().optional(),
54
- defaultValue: z.unknown().optional(),
124
+ defaultValue: z.union([z.string(), z.array(z.string()), z.boolean()]).optional(),
55
125
  label: z.string().optional(),
56
- options: z.array(z.object({ label: z.string(), value: z.unknown() })).optional(),
57
- });
126
+ placeholder: z.string().optional(),
127
+ validation: settingsElementValidationSchema.optional(),
128
+ options: z.array(settingsElementOptionSchema).optional(),
129
+ linkBehaviorLabels: settingsElementLinkBehaviorLabelSchema.optional(),
130
+ accept: z.array(z.string()).optional(),
131
+ multiple: z.boolean().optional(),
132
+ action: settingsElementActionSchema.optional(),
133
+ capability: integrationCapabilitySchema.optional(),
134
+ vendor: z.string().optional(),
135
+ array_options: arrayOptionsSchema.optional(),
136
+ array_elements: z.lazy(() => z.array(settingsElementSchema)).optional(),
137
+ conditionalDisplay: conditionalDisplaySchema.optional(),
138
+ })
139
+ .strict();
58
140
  // Settings Schema
59
141
  const settingsSchema = z.object({
60
142
  title: z.string().min(1, 'Settings title is required'),
61
- overview: z.object({
62
- title: z.string().min(1, 'Overview title is required'),
63
- description: z.string().min(1, 'Overview description is required'),
64
- supportLink: urlSchema,
65
- }),
143
+ icon: settingsIconSchema.optional(),
144
+ uses_url: z.boolean().optional(),
145
+ settings_tab_title: z.string().optional(),
146
+ overview: settingsOverviewSchema.optional(),
147
+ setup_instructions: setupInstructionsSchema.optional(),
66
148
  elements: z.array(settingsElementSchema).min(0),
149
+ has_settings: z.boolean().optional(),
150
+ // supports_featured_layout is auto-detected based on app/featured.tsx presence
151
+ supports_featured_layout: z.boolean().optional(),
67
152
  });
68
153
  // URL Match Rules Schema
69
154
  const urlMatchRulesSchema = z.object({
@@ -79,6 +164,40 @@ const urlMatchRulesSchema = z.object({
79
164
  }))
80
165
  .optional(),
81
166
  });
167
+ // Preview Props Schema - for development mode
168
+ // Note: Uses camelCase to match LinktreeContext interface
169
+ const themeSchema = z.object({
170
+ isOutlineStyle: z.boolean(),
171
+ cssVariables: z.record(z.string(), z.string()),
172
+ // Legacy properties (deprecated - maintained for backward compatibility)
173
+ textColor: z.string(),
174
+ backgroundColor: z.string(),
175
+ borderRadius: z.string(),
176
+ borderColor: z.string(),
177
+ backgroundHover: z.string(),
178
+ contrastColor: z.string(),
179
+ textHoverColor: z.string(),
180
+ });
181
+ const viewportSchema = z.object({
182
+ width: z.number(),
183
+ height: z.number(),
184
+ });
185
+ const positionSchema = z.object({
186
+ latitude: z.number(),
187
+ longitude: z.number(),
188
+ });
189
+ const preview_props_schema = z
190
+ .object({
191
+ linkUrl: z.string().url(),
192
+ layout: z.enum(['stack', 'grid', 'carousel', 'featured']).optional(),
193
+ theme: themeSchema,
194
+ locale: z.string(),
195
+ currency: z.string(),
196
+ username: z.string(),
197
+ viewport: viewportSchema,
198
+ position: positionSchema.optional(),
199
+ })
200
+ .catchall(z.unknown()); // Allow additional user-defined settings
82
201
  // Main LinkApp Config Schema
83
202
  export const linkAppConfigSchema = z.object({
84
203
  id: z
@@ -88,7 +207,8 @@ export const linkAppConfigSchema = z.object({
88
207
  .describe('Unique identifier for the linkapp'),
89
208
  manifest: manifestSchema,
90
209
  settings: settingsSchema,
91
- urlMatchRules: urlMatchRulesSchema.optional(),
210
+ url_match_rules: urlMatchRulesSchema.optional(),
211
+ preview_props: preview_props_schema.optional(),
92
212
  });
93
213
  /**
94
214
  * Validates a LinkApp configuration object
@@ -1 +1 @@
1
- {"version":3,"file":"config.schema.js","sourceRoot":"","sources":["../../src/schema/config.schema.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"config.schema.js","sourceRoot":"","sources":["../../src/schema/config.schema.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ /**
2
+ * LinkApp SDK for iframe communication with parent Linktree window
3
+ *
4
+ * @example
5
+ * ```tsx
6
+ * import { useOpenPopup } from '@linktr.ee/linkapp/sdk'
7
+ *
8
+ * function FeaturedLayout() {
9
+ * const openPopup = useOpenPopup()
10
+ *
11
+ * return (
12
+ * <button onClick={() => openPopup({ itemId: '123' })}>
13
+ * View More
14
+ * </button>
15
+ * )
16
+ * }
17
+ * ```
18
+ */
19
+ export { useOpenPopup } from './use-open-popup.js';
20
+ export { sendMessage } from './send-message.js';
21
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/sdk/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAA;AAClD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA"}
@@ -0,0 +1,21 @@
1
+ /**
2
+ * LinkApp SDK for iframe communication with parent Linktree window
3
+ *
4
+ * @example
5
+ * ```tsx
6
+ * import { useOpenPopup } from '@linktr.ee/linkapp/sdk'
7
+ *
8
+ * function FeaturedLayout() {
9
+ * const openPopup = useOpenPopup()
10
+ *
11
+ * return (
12
+ * <button onClick={() => openPopup({ itemId: '123' })}>
13
+ * View More
14
+ * </button>
15
+ * )
16
+ * }
17
+ * ```
18
+ */
19
+ export { useOpenPopup } from './use-open-popup.js';
20
+ export { sendMessage } from './send-message.js';
21
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/sdk/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAA;AAClD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Sends a postMessage from the LinkApp iframe to the parent window
3
+ *
4
+ * @param type - The message type (e.g., 'OPEN_POPUP')
5
+ * @param payload - The message payload
6
+ *
7
+ * @example
8
+ * ```ts
9
+ * sendMessage('OPEN_POPUP', { data: { itemId: '123' } })
10
+ * ```
11
+ *
12
+ * Note: This only works when the LinkApp is embedded in an iframe within Linktree.
13
+ * The parent window must implement a message listener to handle these messages.
14
+ */
15
+ export declare function sendMessage(type: string, payload: unknown): void;
16
+ //# sourceMappingURL=send-message.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"send-message.d.ts","sourceRoot":"","sources":["../../src/sdk/send-message.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;GAaG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,IAAI,CAqBhE"}
@@ -0,0 +1,34 @@
1
+ /**
2
+ * Sends a postMessage from the LinkApp iframe to the parent window
3
+ *
4
+ * @param type - The message type (e.g., 'OPEN_POPUP')
5
+ * @param payload - The message payload
6
+ *
7
+ * @example
8
+ * ```ts
9
+ * sendMessage('OPEN_POPUP', { data: { itemId: '123' } })
10
+ * ```
11
+ *
12
+ * Note: This only works when the LinkApp is embedded in an iframe within Linktree.
13
+ * The parent window must implement a message listener to handle these messages.
14
+ */
15
+ export function sendMessage(type, payload) {
16
+ // Check if running in an iframe
17
+ if (typeof window === 'undefined') {
18
+ console.warn('[LinkApp SDK] sendMessage called in non-browser environment');
19
+ return;
20
+ }
21
+ if (window === window.parent) {
22
+ console.warn('[LinkApp SDK] sendMessage called outside of iframe context');
23
+ return;
24
+ }
25
+ const message = {
26
+ source: 'linkapp',
27
+ type: type,
28
+ payload: payload,
29
+ };
30
+ // Send to parent window
31
+ // Using '*' as targetOrigin for now - parent should validate message.source
32
+ window.parent.postMessage(message, '*');
33
+ }
34
+ //# sourceMappingURL=send-message.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"send-message.js","sourceRoot":"","sources":["../../src/sdk/send-message.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,WAAW,CAAC,IAAY,EAAE,OAAgB;IACxD,gCAAgC;IAChC,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE,CAAC;QAClC,OAAO,CAAC,IAAI,CAAC,6DAA6D,CAAC,CAAA;QAC3E,OAAM;IACR,CAAC;IAED,IAAI,MAAM,KAAK,MAAM,CAAC,MAAM,EAAE,CAAC;QAC7B,OAAO,CAAC,IAAI,CAAC,4DAA4D,CAAC,CAAA;QAC1E,OAAM;IACR,CAAC;IAED,MAAM,OAAO,GAAmB;QAC9B,MAAM,EAAE,SAAS;QACjB,IAAI,EAAE,IAA8B;QACpC,OAAO,EAAE,OAAoC;KAC9C,CAAA;IAED,wBAAwB;IACxB,4EAA4E;IAC5E,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,OAAO,EAAE,GAAG,CAAC,CAAA;AACzC,CAAC"}