@linktr.ee/linkapp 0.0.48 → 0.0.49

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 (203) hide show
  1. package/README.md +1 -1
  2. package/dev-server/components/form/array-field.tsx +115 -0
  3. package/dev-server/components/form/file-field.tsx +48 -0
  4. package/dev-server/components/form/form-element.tsx +304 -0
  5. package/dev-server/components/form/link-behavior-field.tsx +68 -0
  6. package/dev-server/components/form/location-field.tsx +60 -0
  7. package/dev-server/components/settings-preview.tsx +138 -302
  8. package/dev-server/components/ui/checkbox.tsx +29 -0
  9. package/dev-server/components/ui/dialog.tsx +2 -10
  10. package/dev-server/components/ui/field.tsx +24 -49
  11. package/dev-server/components/ui/input.tsx +20 -21
  12. package/dev-server/components/ui/label.tsx +4 -4
  13. package/dev-server/components/ui/radio-group.tsx +37 -0
  14. package/dev-server/components/ui/select.tsx +153 -0
  15. package/dev-server/components/ui/switch.tsx +31 -0
  16. package/dev-server/components/ui/tabs.tsx +1 -1
  17. package/dev-server/components/ui/textarea.tsx +18 -19
  18. package/dev-server/env.d.ts +4 -1
  19. package/dev-server/expanded/main.tsx +20 -22
  20. package/dev-server/expanded.html +0 -1
  21. package/dev-server/featured/main.tsx +29 -36
  22. package/dev-server/featured-carousel.html +0 -1
  23. package/dev-server/featured.html +0 -1
  24. package/dev-server/index.html +1 -7
  25. package/dev-server/lib/utils.ts +3 -3
  26. package/dev-server/package.json +3 -3
  27. package/dev-server/postcss/tailwind-source-fallback.js +2 -7
  28. package/dev-server/postcss.config.mjs +2 -2
  29. package/dev-server/preview/Preview.tsx +310 -350
  30. package/dev-server/preview/main.tsx +8 -8
  31. package/dev-server/preview/preview.css +0 -1
  32. package/dev-server/public/site.webmanifest +1 -1
  33. package/dev-server/rsbuild.config.ts +1 -1
  34. package/dev-server/shared/dev-parent-simulator.ts +219 -0
  35. package/dev-server/shared/theme-presets.ts +71 -75
  36. package/dev-server/shared/theme-utils.ts +11 -11
  37. package/dist/cli.js +18 -12
  38. package/dist/cli.js.map +1 -1
  39. package/dist/commands/add.d.ts.map +1 -1
  40. package/dist/commands/add.js +27 -42
  41. package/dist/commands/add.js.map +1 -1
  42. package/dist/commands/build.d.ts.map +1 -1
  43. package/dist/commands/build.js +26 -16
  44. package/dist/commands/build.js.map +1 -1
  45. package/dist/commands/deploy.d.ts +1 -11
  46. package/dist/commands/deploy.d.ts.map +1 -1
  47. package/dist/commands/deploy.js +3 -13
  48. package/dist/commands/deploy.js.map +1 -1
  49. package/dist/commands/dev.d.ts.map +1 -1
  50. package/dist/commands/dev.js +132 -388
  51. package/dist/commands/dev.js.map +1 -1
  52. package/dist/commands/login.d.ts.map +1 -1
  53. package/dist/commands/login.js +17 -29
  54. package/dist/commands/login.js.map +1 -1
  55. package/dist/commands/logout.d.ts.map +1 -1
  56. package/dist/commands/logout.js +6 -11
  57. package/dist/commands/logout.js.map +1 -1
  58. package/dist/commands/rollback.d.ts +10 -0
  59. package/dist/commands/rollback.d.ts.map +1 -0
  60. package/dist/commands/rollback.js +148 -0
  61. package/dist/commands/rollback.js.map +1 -0
  62. package/dist/commands/status.d.ts +8 -0
  63. package/dist/commands/status.d.ts.map +1 -0
  64. package/dist/commands/status.js +96 -0
  65. package/dist/commands/status.js.map +1 -0
  66. package/dist/commands/test-url-match-rules.d.ts.map +1 -1
  67. package/dist/commands/test-url-match-rules.js +20 -26
  68. package/dist/commands/test-url-match-rules.js.map +1 -1
  69. package/dist/lib/auth/device-flow.d.ts +1 -1
  70. package/dist/lib/auth/device-flow.d.ts.map +1 -1
  71. package/dist/lib/auth/device-flow.js +3 -3
  72. package/dist/lib/auth/device-flow.js.map +1 -1
  73. package/dist/lib/auth/token-storage.d.ts.map +1 -1
  74. package/dist/lib/auth/token-storage.js +14 -37
  75. package/dist/lib/auth/token-storage.js.map +1 -1
  76. package/dist/lib/build/detect-layouts.d.ts.map +1 -1
  77. package/dist/lib/build/detect-layouts.js +27 -13
  78. package/dist/lib/build/detect-layouts.js.map +1 -1
  79. package/dist/lib/config/load-config.d.ts.map +1 -1
  80. package/dist/lib/config/load-config.js +0 -2
  81. package/dist/lib/config/load-config.js.map +1 -1
  82. package/dist/lib/deploy/deploy-output.d.ts +2 -1
  83. package/dist/lib/deploy/deploy-output.d.ts.map +1 -1
  84. package/dist/lib/deploy/deploy-output.js +9 -1
  85. package/dist/lib/deploy/deploy-output.js.map +1 -1
  86. package/dist/lib/deploy/deploy-phases.d.ts +2 -0
  87. package/dist/lib/deploy/deploy-phases.d.ts.map +1 -1
  88. package/dist/lib/deploy/deploy-phases.js +9 -23
  89. package/dist/lib/deploy/deploy-phases.js.map +1 -1
  90. package/dist/lib/deploy/deploy-utils.d.ts +15 -7
  91. package/dist/lib/deploy/deploy-utils.d.ts.map +1 -1
  92. package/dist/lib/deploy/deploy-utils.js +49 -36
  93. package/dist/lib/deploy/deploy-utils.js.map +1 -1
  94. package/dist/lib/deploy/generate-manifest-files.d.ts.map +1 -1
  95. package/dist/lib/deploy/generate-manifest-files.js +13 -39
  96. package/dist/lib/deploy/generate-manifest-files.js.map +1 -1
  97. package/dist/lib/deploy/pack-project.d.ts.map +1 -1
  98. package/dist/lib/deploy/pack-project.js +34 -20
  99. package/dist/lib/deploy/pack-project.js.map +1 -1
  100. package/dist/lib/deploy/slot-manager.d.ts +54 -0
  101. package/dist/lib/deploy/slot-manager.d.ts.map +1 -0
  102. package/dist/lib/deploy/slot-manager.js +72 -0
  103. package/dist/lib/deploy/slot-manager.js.map +1 -0
  104. package/dist/lib/deploy/test-url-match-rules.d.ts +10 -2
  105. package/dist/lib/deploy/test-url-match-rules.d.ts.map +1 -1
  106. package/dist/lib/deploy/test-url-match-rules.js +1 -1
  107. package/dist/lib/deploy/test-url-match-rules.js.map +1 -1
  108. package/dist/lib/deploy/upload.d.ts +1 -0
  109. package/dist/lib/deploy/upload.d.ts.map +1 -1
  110. package/dist/lib/deploy/upload.js +15 -24
  111. package/dist/lib/deploy/upload.js.map +1 -1
  112. package/dist/lib/deploy/validation.d.ts.map +1 -1
  113. package/dist/lib/deploy/validation.js +43 -48
  114. package/dist/lib/deploy/validation.js.map +1 -1
  115. package/dist/lib/rsbuild/config-factory.d.ts.map +1 -1
  116. package/dist/lib/rsbuild/config-factory.js +10 -17
  117. package/dist/lib/rsbuild/config-factory.js.map +1 -1
  118. package/dist/lib/rsbuild/plugins/asset-versioning.d.ts.map +1 -1
  119. package/dist/lib/rsbuild/plugins/asset-versioning.js +4 -14
  120. package/dist/lib/rsbuild/plugins/asset-versioning.js.map +1 -1
  121. package/dist/lib/rsbuild/plugins/brotli-compression.d.ts.map +1 -1
  122. package/dist/lib/rsbuild/plugins/brotli-compression.js +4 -4
  123. package/dist/lib/rsbuild/plugins/brotli-compression.js.map +1 -1
  124. package/dist/lib/rsbuild/plugins/copy-public.d.ts.map +1 -1
  125. package/dist/lib/rsbuild/plugins/copy-public.js.map +1 -1
  126. package/dist/lib/rsbuild/postcss/tailwind-source-fallback.d.ts.map +1 -1
  127. package/dist/lib/rsbuild/postcss/tailwind-source-fallback.js +1 -3
  128. package/dist/lib/rsbuild/postcss/tailwind-source-fallback.js.map +1 -1
  129. package/dist/lib/utils/console.d.ts +8 -0
  130. package/dist/lib/utils/console.d.ts.map +1 -0
  131. package/dist/lib/utils/console.js +10 -0
  132. package/dist/lib/utils/console.js.map +1 -0
  133. package/dist/lib/utils/filesystem.d.ts +9 -0
  134. package/dist/lib/utils/filesystem.d.ts.map +1 -0
  135. package/dist/lib/utils/filesystem.js +30 -0
  136. package/dist/lib/utils/filesystem.js.map +1 -0
  137. package/dist/lib/utils/formatters.d.ts +8 -0
  138. package/dist/lib/utils/formatters.d.ts.map +1 -0
  139. package/dist/lib/utils/formatters.js +22 -0
  140. package/dist/lib/utils/formatters.js.map +1 -0
  141. package/dist/lib/utils/index.d.ts +7 -0
  142. package/dist/lib/utils/index.d.ts.map +1 -0
  143. package/dist/lib/utils/index.js +7 -0
  144. package/dist/lib/utils/index.js.map +1 -0
  145. package/dist/lib/utils/setup-runtime.d.ts.map +1 -1
  146. package/dist/lib/utils/setup-runtime.js +22 -63
  147. package/dist/lib/utils/setup-runtime.js.map +1 -1
  148. package/dist/schema/config.schema.d.ts +9 -48
  149. package/dist/schema/config.schema.d.ts.map +1 -1
  150. package/dist/schema/config.schema.js +119 -120
  151. package/dist/schema/config.schema.js.map +1 -1
  152. package/dist/sdk/hooks/mocks.d.ts +9 -0
  153. package/dist/sdk/hooks/mocks.d.ts.map +1 -0
  154. package/dist/sdk/hooks/mocks.js +17 -0
  155. package/dist/sdk/hooks/mocks.js.map +1 -0
  156. package/dist/sdk/hooks/use-audience-manager.d.ts +44 -0
  157. package/dist/sdk/hooks/use-audience-manager.d.ts.map +1 -0
  158. package/dist/sdk/hooks/use-audience-manager.js +109 -0
  159. package/dist/sdk/hooks/use-audience-manager.js.map +1 -0
  160. package/dist/sdk/hooks/use-ip.d.ts +45 -0
  161. package/dist/sdk/hooks/use-ip.d.ts.map +1 -0
  162. package/dist/sdk/hooks/use-ip.js +46 -0
  163. package/dist/sdk/hooks/use-ip.js.map +1 -0
  164. package/dist/sdk/hooks/use-sdk-request.d.ts +46 -0
  165. package/dist/sdk/hooks/use-sdk-request.d.ts.map +1 -0
  166. package/dist/sdk/hooks/use-sdk-request.js +65 -0
  167. package/dist/sdk/hooks/use-sdk-request.js.map +1 -0
  168. package/dist/sdk/hooks/use-theme.d.ts +45 -0
  169. package/dist/sdk/hooks/use-theme.d.ts.map +1 -0
  170. package/dist/sdk/hooks/use-theme.js +97 -0
  171. package/dist/sdk/hooks/use-theme.js.map +1 -0
  172. package/dist/sdk/hooks/use-visitor.d.ts +41 -0
  173. package/dist/sdk/hooks/use-visitor.d.ts.map +1 -0
  174. package/dist/sdk/hooks/use-visitor.js +42 -0
  175. package/dist/sdk/hooks/use-visitor.js.map +1 -0
  176. package/dist/sdk/hooks/validation.d.ts +8 -0
  177. package/dist/sdk/hooks/validation.d.ts.map +1 -0
  178. package/dist/sdk/hooks/validation.js +13 -0
  179. package/dist/sdk/hooks/validation.js.map +1 -0
  180. package/dist/sdk/index.d.ts +17 -5
  181. package/dist/sdk/index.d.ts.map +1 -1
  182. package/dist/sdk/index.js +16 -5
  183. package/dist/sdk/index.js.map +1 -1
  184. package/dist/sdk/message-bus.d.ts +59 -0
  185. package/dist/sdk/message-bus.d.ts.map +1 -0
  186. package/dist/sdk/message-bus.js +152 -0
  187. package/dist/sdk/message-bus.js.map +1 -0
  188. package/dist/sdk/messages.d.ts +121 -0
  189. package/dist/sdk/messages.d.ts.map +1 -0
  190. package/dist/sdk/messages.js +9 -0
  191. package/dist/sdk/messages.js.map +1 -0
  192. package/dist/sdk/send-message.d.ts +1 -1
  193. package/dist/sdk/send-message.js +18 -18
  194. package/dist/sdk/send-message.js.map +1 -1
  195. package/dist/sdk/use-expand-link-app.d.ts +3 -3
  196. package/dist/sdk/use-expand-link-app.d.ts.map +1 -1
  197. package/dist/sdk/use-expand-link-app.js +9 -5
  198. package/dist/sdk/use-expand-link-app.js.map +1 -1
  199. package/dist/types.d.ts +235 -55
  200. package/dist/types.d.ts.map +1 -1
  201. package/dist/types.js +8 -3
  202. package/dist/types.js.map +1 -1
  203. package/package.json +3 -9
@@ -1,24 +1,30 @@
1
- import { z } from "zod";
1
+ import { z } from 'zod';
2
+ import { KEBAB_CASE_ID_ERROR_MESSAGE, KEBAB_CASE_ID_REGEX } from '../lib/deploy/deploy-utils.js';
2
3
  /**
3
4
  * Zod schema for LinkApp configuration
4
5
  * Uses snake_case naming to match API requirements
5
6
  */
6
7
  const urlSchema = z.string().url();
7
8
  const emailSchema = z.string().email();
8
- const versionSchema = z
9
+ const versionSchema = z.string().regex(/^\d+\.\d+\.\d+$/, 'Must be semver format (e.g., 1.0.0)');
10
+ // Kebab-case ID schema for explicit LinkApp ID
11
+ const kebabCaseIdSchema = z
9
12
  .string()
10
- .regex(/^\d+\.\d+\.\d+$/, "Must be semver format (e.g., 1.0.0)");
13
+ .min(1, 'ID must be at least 1 character')
14
+ .max(64, 'ID must be at most 64 characters')
15
+ .regex(KEBAB_CASE_ID_REGEX, KEBAB_CASE_ID_ERROR_MESSAGE)
16
+ .describe('The explicit LinkApp ID in kebab-case format');
11
17
  // Supporting Links Schema
12
18
  const supporting_links_schema = z.object({
13
- terms_of_service: urlSchema.describe("The URL of the terms of service"),
14
- privacy_policy: urlSchema.describe("The URL of the privacy policy"),
15
- documentation: urlSchema.optional().describe("The URL of the documentation"),
16
- website: urlSchema.optional().describe("The URL of the website"),
19
+ terms_of_service: urlSchema.describe('The URL of the terms of service'),
20
+ privacy_policy: urlSchema.describe('The URL of the privacy policy'),
21
+ documentation: urlSchema.optional().describe('The URL of the documentation'),
22
+ website: urlSchema.optional().describe('The URL of the website'),
17
23
  });
18
24
  // Author Schema
19
25
  const authorSchema = z.object({
20
- name: z.string().min(1, "Author name is required"),
21
- accounts: z.array(z.string()).min(1, "At least one account is required"),
26
+ name: z.string().min(1, 'Author name is required'),
27
+ accounts: z.array(z.string()).min(1, 'At least one account is required'),
22
28
  contact: z.object({
23
29
  url: urlSchema,
24
30
  email: emailSchema,
@@ -26,102 +32,71 @@ const authorSchema = z.object({
26
32
  });
27
33
  // Link Type Category V2 Schema
28
34
  const linkTypeCategoryV2Schema = z.enum([
29
- "tours-and-shows",
30
- "social-media",
31
- "text",
32
- "audio",
33
- "document",
34
- "video",
35
- "promotions",
36
- "communities",
37
- "digital-products",
38
- "physical-products",
39
- "fundraising",
40
- "details",
41
- "forms",
42
- "scheduling",
35
+ 'tours-and-shows',
36
+ 'social-media',
37
+ 'text',
38
+ 'audio',
39
+ 'document',
40
+ 'video',
41
+ 'promotions',
42
+ 'communities',
43
+ 'digital-products',
44
+ 'physical-products',
45
+ 'fundraising',
46
+ 'details',
47
+ 'forms',
48
+ 'scheduling',
43
49
  ]);
44
50
  // Manifest Schema
45
51
  const manifestSchema = z.object({
52
+ id: kebabCaseIdSchema
53
+ .optional()
54
+ .describe('Explicit LinkApp ID in kebab-case. If omitted, derived from kebab-cased name. Cannot be changed after first deployment.'),
46
55
  name: z
47
56
  .string()
48
- .min(3, "Name must be at least 3 characters")
49
- .max(50, "Name must be at most 50 characters")
50
- .describe("The name of the link type (will be kebab-cased to generate the LinkApp ID)"),
57
+ .min(3, 'Name must be at least 3 characters')
58
+ .max(50, 'Name must be at most 50 characters')
59
+ .describe("The display name of the LinkApp. Used to derive ID if 'id' field is not specified."),
51
60
  tagline: z
52
61
  .string()
53
- .min(3, "Tagline must be at least 3 characters")
54
- .max(200, "Tagline must be at most 200 characters")
55
- .describe("A short tagline for the link type"),
62
+ .min(3, 'Tagline must be at least 3 characters')
63
+ .max(200, 'Tagline must be at most 200 characters')
64
+ .describe('A short tagline for the link type'),
56
65
  description: z
57
66
  .array(z.string())
58
- .min(1, "At least one description paragraph is required")
59
- .describe("Array of description paragraphs"),
60
- manifest_version: versionSchema.describe("The manifest schema version"),
61
- version: versionSchema.describe("The version of the linkapp"),
67
+ .min(1, 'At least one description paragraph is required')
68
+ .describe('Array of description paragraphs'),
69
+ manifest_version: versionSchema.describe('The manifest schema version'),
70
+ version: versionSchema.describe('The version of the linkapp'),
62
71
  supporting_links: supporting_links_schema,
63
- category: z
64
- .enum(["grow", "sell", "share", "learn"])
65
- .describe("The category of the link type"),
66
- categoryV2: linkTypeCategoryV2Schema
67
- .optional()
68
- .describe("The version 2 category of the link type"),
69
- categoryV2Order: z
70
- .number()
71
- .optional()
72
- .describe("The sort order for categoryV2"),
73
- search_terms: z
74
- .array(z.string())
75
- .min(1, "At least one search term is required"),
72
+ category: z.enum(['grow', 'sell', 'share', 'learn']).describe('The category of the link type'),
73
+ categoryV2: linkTypeCategoryV2Schema.optional().describe('The version 2 category of the link type'),
74
+ categoryV2Order: z.number().optional().describe('The sort order for categoryV2'),
75
+ search_terms: z.array(z.string()).min(1, 'At least one search term is required'),
76
76
  author: authorSchema,
77
77
  });
78
78
  // Enums matching the backend types
79
- const settingsIconSchema = z.enum([
80
- "file",
81
- "settings",
82
- "text_and_media",
83
- "question",
84
- ]);
85
- const featuredChinPositionSchema = z.enum([
86
- "minimal",
87
- "above",
88
- "below",
89
- "overlayBelow",
90
- "overlayAbove",
91
- ]);
92
- const sheetBehaviorSchema = z.enum([
93
- "none",
94
- "expandGeneric",
95
- "expandVideo",
96
- "default",
97
- ]);
98
- const featuredHeadClickBehaviorSchema = z.enum([
99
- "linkOff",
100
- "expand",
101
- "custom",
102
- "inlineVideoPlayer",
103
- "default",
104
- ]);
79
+ const settingsIconSchema = z.enum(['file', 'settings', 'text_and_media', 'text', 'coupon', 'question-mark', 'reviews']);
105
80
  const settingsElementInputSchema = z.enum([
106
- "button",
107
- "text",
108
- "textarea",
109
- "number",
110
- "radio",
111
- "checkbox",
112
- "select",
113
- "password",
114
- "switch",
115
- "linkBehavior",
116
- "file",
117
- "url",
118
- "integration",
119
- "embedOption",
120
- "array",
81
+ 'button',
82
+ 'text',
83
+ 'textarea',
84
+ 'number',
85
+ 'radio',
86
+ 'checkbox',
87
+ 'select',
88
+ 'switch',
89
+ 'linkBehavior',
90
+ 'file',
91
+ 'url',
92
+ 'email',
93
+ 'integration',
94
+ 'array',
95
+ 'location',
121
96
  ]);
122
- const integrationCapabilitySchema = z.enum(["MANAGE_EMAIL_SUBSCRIBERS"]);
123
- const interactionEventSchema = z.enum(["click"]);
124
- const actionTypeSchema = z.enum(["update-link"]);
97
+ const integrationCapabilitySchema = z.enum(['MANAGE_EMAIL_SUBSCRIBERS', 'MANAGE_CALENDAR_BOOKINGS', 'SEARCH']);
98
+ const interactionEventSchema = z.enum(['click']);
99
+ const actionTypeSchema = z.enum(['update-link']);
125
100
  // Supporting schemas
126
101
  const settingsElementActionSchema = z.object({
127
102
  on: interactionEventSchema,
@@ -137,15 +112,23 @@ const settingsElementValidationSchema = z.object({
137
112
  maxLength: z.number().optional(),
138
113
  min: z.number().optional(),
139
114
  max: z.number().optional(),
115
+ // Array item limits (legacy names - deprecated)
116
+ minSize: z.number().optional(),
140
117
  maxSize: z.number().optional(),
118
+ // Array item limits (preferred names)
119
+ minItems: z.number().optional(),
120
+ maxItems: z.number().optional(),
121
+ // File size limit in bytes
122
+ maxFileSize: z.number().optional(),
141
123
  });
142
124
  const settingsOverviewSchema = z.object({
143
125
  title: z.string().optional(),
144
- description: z.string().min(1, "Overview description is required"),
126
+ description: z.string().min(1, 'Overview description is required'),
127
+ supportLink: z.string().url().optional(),
145
128
  });
146
129
  const setupInstructionsSchema = z.object({
147
130
  title: z.string().optional(),
148
- description: z.string().min(1, "Setup instructions description is required"),
131
+ description: z.string().min(1, 'Setup instructions description is required'),
149
132
  });
150
133
  const settingsElementOptionSchema = z.object({
151
134
  value: z.string(),
@@ -155,10 +138,22 @@ const settingsElementLinkBehaviorLabelSchema = z.object({
155
138
  linkOffLabel: z.string(),
156
139
  embedLabel: z.string(),
157
140
  });
141
+ // Conditional visibility (preferred format)
142
+ const conditionalSchema = z.object({
143
+ fieldId: z.string(),
144
+ values: z.array(z.union([z.string(), z.boolean()])),
145
+ });
146
+ // Conditional display (deprecated legacy format)
158
147
  const conditionalDisplaySchema = z.object({
159
148
  dependsOn: z.string(),
160
149
  value: z.union([z.string(), z.boolean()]),
161
- operator: z.enum(["equals", "notEquals", "contains"]).optional(),
150
+ operator: z.enum(['equals', 'notEquals', 'contains']).optional(),
151
+ });
152
+ // Enhanced radio element with title and description
153
+ const radioElementSchema = z.object({
154
+ id: z.string(),
155
+ title: z.string(),
156
+ description: z.string().optional(),
162
157
  });
163
158
  const arrayOptionsSchema = z.object({
164
159
  add_item_button_text: z.string().optional(),
@@ -169,20 +164,34 @@ const arrayOptionsSchema = z.object({
169
164
  min: z.number().optional(),
170
165
  max: z.number().optional(),
171
166
  });
167
+ // Place Value Schema - for location input type
168
+ const placeValueSchema = z.object({
169
+ placeId: z.string().min(1, 'Place ID is required'),
170
+ name: z.string().min(1, 'Place name is required'),
171
+ address: z.string().min(1, 'Address is required'),
172
+ lat: z.number().min(-90).max(90),
173
+ lng: z.number().min(-180).max(180),
174
+ photos: z.array(z.string()).optional(),
175
+ rating: z.number().min(0).max(5).optional(),
176
+ userRatingsTotal: z.number().min(0).optional(),
177
+ types: z.array(z.string()).optional(),
178
+ website: z.string().url().optional(),
179
+ phoneNumber: z.string().optional(),
180
+ });
172
181
  // Settings Element Schema
173
182
  const settingsElementSchema = z
174
183
  .object({
175
- id: z.string().min(1, "Element ID is required"),
184
+ id: z.string().min(1, 'Element ID is required'),
176
185
  inputType: settingsElementInputSchema,
177
186
  title: z.string().optional(),
178
187
  description: z.string().optional(),
179
- defaultValue: z
180
- .union([z.string(), z.array(z.string()), z.boolean()])
181
- .optional(),
188
+ defaultValue: z.union([z.string(), z.array(z.string()), z.boolean(), placeValueSchema]).optional(),
182
189
  label: z.string().optional(),
183
190
  placeholder: z.string().optional(),
184
191
  validation: settingsElementValidationSchema.optional(),
185
192
  options: z.array(settingsElementOptionSchema).optional(),
193
+ // Enhanced radio options with title and description
194
+ radio_elements: z.array(radioElementSchema).optional(),
186
195
  linkBehaviorLabels: settingsElementLinkBehaviorLabelSchema.optional(),
187
196
  accept: z.array(z.string()).optional(),
188
197
  multiple: z.boolean().optional(),
@@ -191,12 +200,15 @@ const settingsElementSchema = z
191
200
  vendor: z.string().optional(),
192
201
  array_options: arrayOptionsSchema.optional(),
193
202
  array_elements: z.lazy(() => z.array(settingsElementSchema)).optional(),
203
+ // Conditional visibility (preferred format)
204
+ conditional: conditionalSchema.optional(),
205
+ // Legacy conditional display (deprecated)
194
206
  conditionalDisplay: conditionalDisplaySchema.optional(),
195
207
  })
196
208
  .strict();
197
209
  // Settings Schema
198
210
  const settingsSchema = z.object({
199
- title: z.string().min(1, "Settings title is required"),
211
+ title: z.string().min(1, 'Settings title is required'),
200
212
  icon: settingsIconSchema.optional(),
201
213
  uses_url: z.boolean().optional(),
202
214
  has_url: z.boolean().optional(),
@@ -205,24 +217,20 @@ const settingsSchema = z.object({
205
217
  setup_instructions: setupInstructionsSchema.optional(),
206
218
  elements: z.array(settingsElementSchema).min(0),
207
219
  has_settings: z.boolean().optional(),
208
- // supports_featured_layout is auto-detected based on app/featured.tsx presence
220
+ // Explicitly specify if LinkApp supports featured layout (both iframe and headless modes)
209
221
  supports_featured_layout: z.boolean().optional(),
210
- featured_chin_position: featuredChinPositionSchema.optional(),
211
- featured_head_allow_unlocked_aspect_ratio: z.boolean().optional(),
212
- sheet_behavior: sheetBehaviorSchema.optional(),
213
- featured_head_click_behavior: featuredHeadClickBehaviorSchema.optional(),
214
222
  });
215
223
  // URL Match Rules Schema
216
224
  const urlMatchRulesSchema = z.object({
217
- hostnames: z.array(z.string()).min(1, "At least one hostname is required"),
225
+ hostnames: z.array(z.string()).min(1, 'At least one hostname is required'),
218
226
  patterns: z
219
227
  .array(z.object({
220
- pathname: z.string().min(1, "Pathname pattern is required"),
228
+ pathname: z.string().min(1, 'Pathname pattern is required'),
221
229
  }))
222
230
  .optional(),
223
231
  notPatterns: z
224
232
  .array(z.object({
225
- pathname: z.string().min(1, "Pathname pattern is required"),
233
+ pathname: z.string().min(1, 'Pathname pattern is required'),
226
234
  }))
227
235
  .optional(),
228
236
  });
@@ -254,19 +262,10 @@ const preview_props_schema = z
254
262
  __linkUrl: z.string().optional(),
255
263
  __thumbnail: z.string().optional(),
256
264
  __linkParams: z.record(z.string(), z.unknown()).nullable().optional(),
257
- __layout: z.enum(["classic", "featured"]).optional(),
258
- groupLayoutOption: z
259
- .enum([
260
- "stack",
261
- "grid",
262
- "featured",
263
- "carousel",
264
- "featuredSubscribe",
265
- "showcase",
266
- ])
267
- .optional(),
268
- displayType: z.enum(["none", "accordion", "dialog"]).optional(),
269
- linkTitle: z.string().optional(),
265
+ __layout: z.enum(['classic', 'featured']).optional(),
266
+ groupLayoutOption: z.enum(['stack', 'grid', 'featured', 'carousel', 'featuredSubscribe', 'showcase']).optional(),
267
+ displayType: z.enum(['none', 'accordion', 'dialog']).optional(),
268
+ linkTitle: z.string(),
270
269
  // Extension environment
271
270
  __environment: z
272
271
  .object({
@@ -279,7 +278,7 @@ const preview_props_schema = z
279
278
  })
280
279
  .optional(),
281
280
  // Layout and theme
282
- layout: z.enum(["stack", "grid", "carousel", "featured"]).optional(),
281
+ layout: z.enum(['stack', 'grid', 'carousel', 'featured']).optional(),
283
282
  theme: themeSchema.optional(),
284
283
  })
285
284
  .catchall(z.unknown());
@@ -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":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AACvB,OAAO,EAAE,2BAA2B,EAAE,mBAAmB,EAAE,MAAM,+BAA+B,CAAA;AAEhG;;;GAGG;AAEH,MAAM,SAAS,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAA;AAClC,MAAM,WAAW,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,CAAA;AACtC,MAAM,aAAa,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,iBAAiB,EAAE,qCAAqC,CAAC,CAAA;AAEhG,+CAA+C;AAC/C,MAAM,iBAAiB,GAAG,CAAC;KACxB,MAAM,EAAE;KACR,GAAG,CAAC,CAAC,EAAE,iCAAiC,CAAC;KACzC,GAAG,CAAC,EAAE,EAAE,kCAAkC,CAAC;KAC3C,KAAK,CAAC,mBAAmB,EAAE,2BAA2B,CAAC;KACvD,QAAQ,CAAC,8CAA8C,CAAC,CAAA;AAE3D,0BAA0B;AAC1B,MAAM,uBAAuB,GAAG,CAAC,CAAC,MAAM,CAAC;IACvC,gBAAgB,EAAE,SAAS,CAAC,QAAQ,CAAC,iCAAiC,CAAC;IACvE,cAAc,EAAE,SAAS,CAAC,QAAQ,CAAC,+BAA+B,CAAC;IACnE,aAAa,EAAE,SAAS,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,8BAA8B,CAAC;IAC5E,OAAO,EAAE,SAAS,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,wBAAwB,CAAC;CACjE,CAAC,CAAA;AAEF,gBAAgB;AAChB,MAAM,YAAY,GAAG,CAAC,CAAC,MAAM,CAAC;IAC5B,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,yBAAyB,CAAC;IAClD,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,kCAAkC,CAAC;IACxE,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC;QAChB,GAAG,EAAE,SAAS;QACd,KAAK,EAAE,WAAW;KACnB,CAAC;CACH,CAAC,CAAA;AAEF,+BAA+B;AAC/B,MAAM,wBAAwB,GAAG,CAAC,CAAC,IAAI,CAAC;IACtC,iBAAiB;IACjB,cAAc;IACd,MAAM;IACN,OAAO;IACP,UAAU;IACV,OAAO;IACP,YAAY;IACZ,aAAa;IACb,kBAAkB;IAClB,mBAAmB;IACnB,aAAa;IACb,SAAS;IACT,OAAO;IACP,YAAY;CACb,CAAC,CAAA;AAEF,kBAAkB;AAClB,MAAM,cAAc,GAAG,CAAC,CAAC,MAAM,CAAC;IAC9B,EAAE,EAAE,iBAAiB;SAClB,QAAQ,EAAE;SACV,QAAQ,CACP,yHAAyH,CAC1H;IACH,IAAI,EAAE,CAAC;SACJ,MAAM,EAAE;SACR,GAAG,CAAC,CAAC,EAAE,oCAAoC,CAAC;SAC5C,GAAG,CAAC,EAAE,EAAE,oCAAoC,CAAC;SAC7C,QAAQ,CAAC,oFAAoF,CAAC;IACjG,OAAO,EAAE,CAAC;SACP,MAAM,EAAE;SACR,GAAG,CAAC,CAAC,EAAE,uCAAuC,CAAC;SAC/C,GAAG,CAAC,GAAG,EAAE,wCAAwC,CAAC;SAClD,QAAQ,CAAC,mCAAmC,CAAC;IAChD,WAAW,EAAE,CAAC;SACX,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;SACjB,GAAG,CAAC,CAAC,EAAE,gDAAgD,CAAC;SACxD,QAAQ,CAAC,iCAAiC,CAAC;IAC9C,gBAAgB,EAAE,aAAa,CAAC,QAAQ,CAAC,6BAA6B,CAAC;IACvE,OAAO,EAAE,aAAa,CAAC,QAAQ,CAAC,4BAA4B,CAAC;IAC7D,gBAAgB,EAAE,uBAAuB;IACzC,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,+BAA+B,CAAC;IAC9F,UAAU,EAAE,wBAAwB,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,yCAAyC,CAAC;IACnG,eAAe,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,+BAA+B,CAAC;IAChF,YAAY,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,sCAAsC,CAAC;IAChF,MAAM,EAAE,YAAY;CACrB,CAAC,CAAA;AAEF,mCAAmC;AACnC,MAAM,kBAAkB,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,EAAE,QAAQ,EAAE,eAAe,EAAE,SAAS,CAAC,CAAC,CAAA;AAEvH,MAAM,0BAA0B,GAAG,CAAC,CAAC,IAAI,CAAC;IACxC,QAAQ;IACR,MAAM;IACN,UAAU;IACV,QAAQ;IACR,OAAO;IACP,UAAU;IACV,QAAQ;IACR,QAAQ;IACR,cAAc;IACd,MAAM;IACN,KAAK;IACL,OAAO;IACP,aAAa;IACb,OAAO;IACP,UAAU;CACX,CAAC,CAAA;AAEF,MAAM,2BAA2B,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,0BAA0B,EAAE,0BAA0B,EAAE,QAAQ,CAAC,CAAC,CAAA;AAE9G,MAAM,sBAAsB,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAA;AAEhD,MAAM,gBAAgB,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,aAAa,CAAC,CAAC,CAAA;AAEhD,qBAAqB;AACrB,MAAM,2BAA2B,GAAG,CAAC,CAAC,MAAM,CAAC;IAC3C,EAAE,EAAE,sBAAsB;IAC1B,IAAI,EAAE,gBAAgB;IACtB,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC;QACb,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE;KACtB,CAAC;CACH,CAAC,CAAA;AAEF,MAAM,+BAA+B,GAAG,CAAC,CAAC,MAAM,CAAC;IAC/C,QAAQ,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;IAChC,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC9B,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAChC,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAChC,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC1B,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC1B,gDAAgD;IAChD,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC9B,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC9B,sCAAsC;IACtC,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC/B,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC/B,2BAA2B;IAC3B,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CACnC,CAAC,CAAA;AAEF,MAAM,sBAAsB,GAAG,CAAC,CAAC,MAAM,CAAC;IACtC,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC5B,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,kCAAkC,CAAC;IAClE,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE;CACzC,CAAC,CAAA;AAEF,MAAM,uBAAuB,GAAG,CAAC,CAAC,MAAM,CAAC;IACvC,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC5B,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,4CAA4C,CAAC;CAC7E,CAAC,CAAA;AAEF,MAAM,2BAA2B,GAAG,CAAC,CAAC,MAAM,CAAC;IAC3C,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE;IACjB,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE;CAClB,CAAC,CAAA;AAEF,MAAM,sCAAsC,GAAG,CAAC,CAAC,MAAM,CAAC;IACtD,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE;IACxB,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE;CACvB,CAAC,CAAA;AAEF,4CAA4C;AAC5C,MAAM,iBAAiB,GAAG,CAAC,CAAC,MAAM,CAAC;IACjC,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE;IACnB,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;CACpD,CAAC,CAAA;AAEF,iDAAiD;AACjD,MAAM,wBAAwB,GAAG,CAAC,CAAC,MAAM,CAAC;IACxC,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE;IACrB,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;IACzC,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,WAAW,EAAE,UAAU,CAAC,CAAC,CAAC,QAAQ,EAAE;CACjE,CAAC,CAAA;AAEF,oDAAoD;AACpD,MAAM,kBAAkB,GAAG,CAAC,CAAC,MAAM,CAAC;IAClC,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE;IACd,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE;IACjB,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CACnC,CAAC,CAAA;AAEF,MAAM,kBAAkB,GAAG,CAAC,CAAC,MAAM,CAAC;IAClC,oBAAoB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC3C,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACrC,2BAA2B,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAClD,eAAe,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACtC,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAClC,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC1B,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CAC3B,CAAC,CAAA;AAEF,+CAA+C;AAC/C,MAAM,gBAAgB,GAAG,CAAC,CAAC,MAAM,CAAC;IAChC,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,sBAAsB,CAAC;IAClD,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,wBAAwB,CAAC;IACjD,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,qBAAqB,CAAC;IACjD,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC;IAChC,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC;IAClC,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;IACtC,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;IAC3C,gBAAgB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;IAC9C,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;IACrC,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE;IACpC,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CACnC,CAAC,CAAA;AAEF,0BAA0B;AAC1B,MAAM,qBAAqB,GAAmB,CAAC;KAC5C,MAAM,CAAC;IACN,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,wBAAwB,CAAC;IAC/C,SAAS,EAAE,0BAA0B;IACrC,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC5B,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAClC,YAAY,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE,EAAE,gBAAgB,CAAC,CAAC,CAAC,QAAQ,EAAE;IAClG,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC5B,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAClC,UAAU,EAAE,+BAA+B,CAAC,QAAQ,EAAE;IACtD,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,2BAA2B,CAAC,CAAC,QAAQ,EAAE;IACxD,oDAAoD;IACpD,cAAc,EAAE,CAAC,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC,QAAQ,EAAE;IACtD,kBAAkB,EAAE,sCAAsC,CAAC,QAAQ,EAAE;IACrE,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;IACtC,QAAQ,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;IAChC,MAAM,EAAE,2BAA2B,CAAC,QAAQ,EAAE;IAC9C,UAAU,EAAE,2BAA2B,CAAC,QAAQ,EAAE;IAClD,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC7B,aAAa,EAAE,kBAAkB,CAAC,QAAQ,EAAE;IAC5C,cAAc,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC,CAAC,QAAQ,EAAE;IACvE,4CAA4C;IAC5C,WAAW,EAAE,iBAAiB,CAAC,QAAQ,EAAE;IACzC,0CAA0C;IAC1C,kBAAkB,EAAE,wBAAwB,CAAC,QAAQ,EAAE;CACxD,CAAC;KACD,MAAM,EAAE,CAAA;AAEX,kBAAkB;AAClB,MAAM,cAAc,GAAG,CAAC,CAAC,MAAM,CAAC;IAC9B,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,4BAA4B,CAAC;IACtD,IAAI,EAAE,kBAAkB,CAAC,QAAQ,EAAE;IACnC,QAAQ,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;IAChC,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;IAC/B,kBAAkB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACzC,QAAQ,EAAE,sBAAsB,CAAC,QAAQ,EAAE;IAC3C,kBAAkB,EAAE,uBAAuB,CAAC,QAAQ,EAAE;IACtD,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IAC/C,YAAY,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;IACpC,0FAA0F;IAC1F,wBAAwB,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;CACjD,CAAC,CAAA;AAEF,yBAAyB;AACzB,MAAM,mBAAmB,GAAG,CAAC,CAAC,MAAM,CAAC;IACnC,SAAS,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,mCAAmC,CAAC;IAC1E,QAAQ,EAAE,CAAC;SACR,KAAK,CACJ,CAAC,CAAC,MAAM,CAAC;QACP,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,8BAA8B,CAAC;KAC5D,CAAC,CACH;SACA,QAAQ,EAAE;IACb,WAAW,EAAE,CAAC;SACX,KAAK,CACJ,CAAC,CAAC,MAAM,CAAC;QACP,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,8BAA8B,CAAC;KAC5D,CAAC,CACH;SACA,QAAQ,EAAE;CACd,CAAC,CAAA;AAEF,eAAe;AACf,MAAM,WAAW,GAAG,CAAC,CAAC,MAAM,CAAC;IAC3B,cAAc,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;IACtC,YAAY,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC;IAC9C,yEAAyE;IACzE,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE;IACrB,eAAe,EAAE,CAAC,CAAC,MAAM,EAAE;IAC3B,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE;IACxB,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE;IACvB,eAAe,EAAE,CAAC,CAAC,MAAM,EAAE;IAC3B,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE;IACzB,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE;CAC3B,CAAC,CAAA;AAEF,MAAM,cAAc,GAAG,CAAC,CAAC,MAAM,CAAC;IAC9B,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE;IACjB,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE;CACnB,CAAC,CAAA;AAEF,MAAM,cAAc,GAAG,CAAC,CAAC,MAAM,CAAC;IAC9B,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE;IACpB,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE;CACtB,CAAC,CAAA;AAEF,8CAA8C;AAC9C,MAAM,oBAAoB,GAAG,CAAC;KAC3B,MAAM,CAAC;IACN,iBAAiB;IACjB,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAChC,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAClC,YAAY,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;IACrE,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC,CAAC,QAAQ,EAAE;IACpD,iBAAiB,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,UAAU,EAAE,mBAAmB,EAAE,UAAU,CAAC,CAAC,CAAC,QAAQ,EAAE;IAChH,WAAW,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,WAAW,EAAE,QAAQ,CAAC,CAAC,CAAC,QAAQ,EAAE;IAC/D,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE;IACrB,wBAAwB;IACxB,aAAa,EAAE,CAAC;SACb,MAAM,CAAC;QACN,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;QACrC,kBAAkB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;QACzC,mBAAmB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;QAC1C,sBAAsB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;QAC7C,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;QACnC,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;KAC/B,CAAC;SACD,QAAQ,EAAE;IACb,mBAAmB;IACnB,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC,CAAC,QAAQ,EAAE;IACpE,KAAK,EAAE,WAAW,CAAC,QAAQ,EAAE;CAC9B,CAAC;KACD,QAAQ,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAA;AAExB,iDAAiD;AACjD,MAAM,mBAAmB,GAAG,CAAC,CAAC,MAAM,CAAC;IACnC,QAAQ,EAAE,cAAc;IACxB,QAAQ,EAAE,cAAc;IACxB,eAAe,EAAE,mBAAmB,CAAC,QAAQ,EAAE;IAC/C,aAAa,EAAE,oBAAoB,CAAC,QAAQ,EAAE;CAC/C,CAAC,CAAA"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Mock data for SDK hooks in dev mode (when not running in iframe)
3
+ */
4
+ import type { IPData, VisitorData } from '../messages.js';
5
+ /** Mock visitor data for dev mode */
6
+ export declare const MOCK_VISITOR: VisitorData;
7
+ /** Mock IP data for dev mode */
8
+ export declare const MOCK_IP: IPData;
9
+ //# sourceMappingURL=mocks.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mocks.d.ts","sourceRoot":"","sources":["../../../src/sdk/hooks/mocks.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AAEzD,qCAAqC;AACrC,eAAO,MAAM,YAAY,EAAE,WAO1B,CAAA;AAED,gCAAgC;AAChC,eAAO,MAAM,OAAO,EAAE,MAGrB,CAAA"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Mock data for SDK hooks in dev mode (when not running in iframe)
3
+ */
4
+ /** Mock visitor data for dev mode */
5
+ export const MOCK_VISITOR = {
6
+ mobileDetected: typeof navigator !== 'undefined' &&
7
+ /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent),
8
+ userAgent: typeof navigator !== 'undefined' ? navigator.userAgent : 'Unknown',
9
+ isFollowing: false,
10
+ followerEmail: undefined,
11
+ };
12
+ /** Mock IP data for dev mode */
13
+ export const MOCK_IP = {
14
+ countryCode: 'US',
15
+ city: 'san francisco',
16
+ };
17
+ //# sourceMappingURL=mocks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mocks.js","sourceRoot":"","sources":["../../../src/sdk/hooks/mocks.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,qCAAqC;AACrC,MAAM,CAAC,MAAM,YAAY,GAAgB;IACvC,cAAc,EACZ,OAAO,SAAS,KAAK,WAAW;QAChC,gEAAgE,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC;IAC5F,SAAS,EAAE,OAAO,SAAS,KAAK,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS;IAC7E,WAAW,EAAE,KAAK;IAClB,aAAa,EAAE,SAAS;CACzB,CAAA;AAED,gCAAgC;AAChC,MAAM,CAAC,MAAM,OAAO,GAAW;IAC7B,WAAW,EAAE,IAAI;IACjB,IAAI,EAAE,eAAe;CACtB,CAAA"}
@@ -0,0 +1,44 @@
1
+ /**
2
+ * useAudienceManager hook - Subscribe visitors to the profile owner's audience
3
+ *
4
+ * @example
5
+ * ```tsx
6
+ * import { useAudienceManager } from '@linktr.ee/linkapp/sdk'
7
+ *
8
+ * function SubscribeForm() {
9
+ * const [email, setEmail] = useState('')
10
+ * const { subscribe, isSubscribing, error } = useAudienceManager()
11
+ *
12
+ * const handleSubmit = async (e: React.FormEvent) => {
13
+ * e.preventDefault()
14
+ * const result = await subscribe(email)
15
+ * if (result.success) {
16
+ * setEmail('')
17
+ * }
18
+ * }
19
+ *
20
+ * return (
21
+ * <form onSubmit={handleSubmit}>
22
+ * <input type="email" value={email} onChange={(e) => setEmail(e.target.value)} />
23
+ * <button disabled={isSubscribing}>{isSubscribing ? 'Subscribing...' : 'Subscribe'}</button>
24
+ * {error && <p>{error}</p>}
25
+ * </form>
26
+ * )
27
+ * }
28
+ * ```
29
+ */
30
+ import type { SubscribeResult } from '../messages.js';
31
+ export interface UseAudienceManagerResult {
32
+ subscribe: (email: string) => Promise<SubscribeResult>;
33
+ isSubscribing: boolean;
34
+ error: string | null;
35
+ clearError: () => void;
36
+ }
37
+ /**
38
+ * Hook to manage audience subscriptions
39
+ *
40
+ * Flow: validate email → request captcha → submit subscription
41
+ * In dev mode, simulates successful subscription.
42
+ */
43
+ export declare function useAudienceManager(): UseAudienceManagerResult;
44
+ //# sourceMappingURL=use-audience-manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-audience-manager.d.ts","sourceRoot":"","sources":["../../../src/sdk/hooks/use-audience-manager.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAIH,OAAO,KAAK,EAA0B,eAAe,EAA0B,MAAM,gBAAgB,CAAA;AAGrG,MAAM,WAAW,wBAAwB;IACvC,SAAS,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,eAAe,CAAC,CAAA;IACtD,aAAa,EAAE,OAAO,CAAA;IACtB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;IACpB,UAAU,EAAE,MAAM,IAAI,CAAA;CACvB;AASD;;;;;GAKG;AACH,wBAAgB,kBAAkB,IAAI,wBAAwB,CA6E7D"}
@@ -0,0 +1,109 @@
1
+ /**
2
+ * useAudienceManager hook - Subscribe visitors to the profile owner's audience
3
+ *
4
+ * @example
5
+ * ```tsx
6
+ * import { useAudienceManager } from '@linktr.ee/linkapp/sdk'
7
+ *
8
+ * function SubscribeForm() {
9
+ * const [email, setEmail] = useState('')
10
+ * const { subscribe, isSubscribing, error } = useAudienceManager()
11
+ *
12
+ * const handleSubmit = async (e: React.FormEvent) => {
13
+ * e.preventDefault()
14
+ * const result = await subscribe(email)
15
+ * if (result.success) {
16
+ * setEmail('')
17
+ * }
18
+ * }
19
+ *
20
+ * return (
21
+ * <form onSubmit={handleSubmit}>
22
+ * <input type="email" value={email} onChange={(e) => setEmail(e.target.value)} />
23
+ * <button disabled={isSubscribing}>{isSubscribing ? 'Subscribing...' : 'Subscribe'}</button>
24
+ * {error && <p>{error}</p>}
25
+ * </form>
26
+ * )
27
+ * }
28
+ * ```
29
+ */
30
+ import { useCallback, useState } from 'react';
31
+ import { messageBus } from '../message-bus.js';
32
+ import { devDelay, isValidEmail } from './validation.js';
33
+ /** Create error result and set error state */
34
+ const createError = (error, errorCode) => ({
35
+ success: false,
36
+ error,
37
+ errorCode,
38
+ });
39
+ /**
40
+ * Hook to manage audience subscriptions
41
+ *
42
+ * Flow: validate email → request captcha → submit subscription
43
+ * In dev mode, simulates successful subscription.
44
+ */
45
+ export function useAudienceManager() {
46
+ const [isSubscribing, setIsSubscribing] = useState(false);
47
+ const [error, setError] = useState(null);
48
+ const clearError = useCallback(() => setError(null), []);
49
+ const subscribe = useCallback(async (email) => {
50
+ // Validate email
51
+ if (!email || !isValidEmail(email)) {
52
+ const result = createError('Please enter a valid email address', 'INVALID_EMAIL');
53
+ setError(result.error);
54
+ return result;
55
+ }
56
+ // Dev mode: simulate success
57
+ if (!messageBus.isInIframe()) {
58
+ setIsSubscribing(true);
59
+ await devDelay();
60
+ setIsSubscribing(false);
61
+ setError(null);
62
+ return { success: true };
63
+ }
64
+ try {
65
+ setIsSubscribing(true);
66
+ setError(null);
67
+ // Step 1: Get captcha token
68
+ const captchaResponse = await messageBus.request({
69
+ source: 'linkapp',
70
+ type: 'REQUEST_CAPTCHA',
71
+ payload: {
72
+ requestId: messageBus.generateRequestId(),
73
+ action: 'subscribe',
74
+ },
75
+ }, 'CAPTCHA_RESPONSE', 15000);
76
+ if (!captchaResponse.payload.success || !captchaResponse.payload.token) {
77
+ const result = createError(captchaResponse.payload.error || 'Failed to verify you are human', 'CAPTCHA_FAILED');
78
+ setError(result.error);
79
+ return result;
80
+ }
81
+ // Step 2: Submit subscription
82
+ const subscribeResponse = await messageBus.request({
83
+ source: 'linkapp',
84
+ type: 'SUBMIT_SUBSCRIBE',
85
+ payload: {
86
+ requestId: messageBus.generateRequestId(),
87
+ email,
88
+ captchaToken: captchaResponse.payload.token,
89
+ },
90
+ }, 'SUBSCRIBE_RESULT', 10000);
91
+ const { success, error: respError, errorCode } = subscribeResponse.payload;
92
+ if (!success && respError)
93
+ setError(respError);
94
+ else
95
+ setError(null);
96
+ return { success, error: respError, errorCode };
97
+ }
98
+ catch (err) {
99
+ const errorMessage = err instanceof Error ? err.message : 'Subscription failed';
100
+ setError(errorMessage);
101
+ return createError(errorMessage);
102
+ }
103
+ finally {
104
+ setIsSubscribing(false);
105
+ }
106
+ }, []);
107
+ return { subscribe, isSubscribing, error, clearError };
108
+ }
109
+ //# sourceMappingURL=use-audience-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-audience-manager.js","sourceRoot":"","sources":["../../../src/sdk/hooks/use-audience-manager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,45 @@
1
+ /**
2
+ * useIP hook - Request and access IP/geolocation data from the parent profile page
3
+ *
4
+ * @example
5
+ * ```tsx
6
+ * import { useIP } from '@linktr.ee/linkapp/sdk'
7
+ *
8
+ * function MyComponent() {
9
+ * const { ip, isLoading, error } = useIP()
10
+ * const timezone = Intl.DateTimeFormat().resolvedOptions().timeZone
11
+ *
12
+ * if (isLoading) return <div>Loading...</div>
13
+ * if (error) return <div>Error: {error.message}</div>
14
+ *
15
+ * return (
16
+ * <div>
17
+ * <p>Country: {ip?.countryCode}</p>
18
+ * <p>City: {ip?.city}</p>
19
+ * <p>Timezone: {timezone}</p>
20
+ * </div>
21
+ * )
22
+ * }
23
+ * ```
24
+ */
25
+ import type { IPData } from '../messages.js';
26
+ export interface UseIPResult {
27
+ /** IP/geolocation data, null if not yet loaded or error */
28
+ ip: IPData | null;
29
+ /** Whether the request is in progress */
30
+ isLoading: boolean;
31
+ /** Error if the request failed */
32
+ error: Error | null;
33
+ /** Manually refetch IP data */
34
+ refetch: () => Promise<void>;
35
+ }
36
+ /**
37
+ * Hook to request and access IP/geolocation data from the parent profile page
38
+ *
39
+ * Sends REQUEST_IP message on mount and stores the response.
40
+ * In dev mode (not in iframe), returns mock data.
41
+ *
42
+ * Note: For timezone, use `Intl.DateTimeFormat().resolvedOptions().timeZone` directly.
43
+ */
44
+ export declare function useIP(): UseIPResult;
45
+ //# sourceMappingURL=use-ip.d.ts.map