@se-studio/hubspot 0.0.0-next16-20260822103555
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +509 -0
- package/README.md +146 -0
- package/dist/external/createHubspotFormExternalRenderer.d.ts +23 -0
- package/dist/external/createHubspotFormExternalRenderer.d.ts.map +1 -0
- package/dist/external/createHubspotFormExternalRenderer.js +26 -0
- package/dist/external/createHubspotFormExternalRenderer.js.map +1 -0
- package/dist/forms/client/HubspotDynamicForm.d.ts +27 -0
- package/dist/forms/client/HubspotDynamicForm.d.ts.map +1 -0
- package/dist/forms/client/HubspotDynamicForm.js +113 -0
- package/dist/forms/client/HubspotDynamicForm.js.map +1 -0
- package/dist/forms/client/dependentFields.d.ts +11 -0
- package/dist/forms/client/dependentFields.d.ts.map +1 -0
- package/dist/forms/client/dependentFields.js +39 -0
- package/dist/forms/client/dependentFields.js.map +1 -0
- package/dist/forms/client/getCookieValue.d.ts +2 -0
- package/dist/forms/client/getCookieValue.d.ts.map +1 -0
- package/dist/forms/client/getCookieValue.js +8 -0
- package/dist/forms/client/getCookieValue.js.map +1 -0
- package/dist/forms/client/marketingParams.d.ts +28 -0
- package/dist/forms/client/marketingParams.d.ts.map +1 -0
- package/dist/forms/client/marketingParams.js +164 -0
- package/dist/forms/client/marketingParams.js.map +1 -0
- package/dist/forms/client/navigateAfterSubmit.d.ts +8 -0
- package/dist/forms/client/navigateAfterSubmit.d.ts.map +1 -0
- package/dist/forms/client/navigateAfterSubmit.js +20 -0
- package/dist/forms/client/navigateAfterSubmit.js.map +1 -0
- package/dist/forms/client/renderHubspotField.d.ts +11 -0
- package/dist/forms/client/renderHubspotField.d.ts.map +1 -0
- package/dist/forms/client/renderHubspotField.js +61 -0
- package/dist/forms/client/renderHubspotField.js.map +1 -0
- package/dist/forms/client/useHubspotSubmit.d.ts +25 -0
- package/dist/forms/client/useHubspotSubmit.d.ts.map +1 -0
- package/dist/forms/client/useHubspotSubmit.js +97 -0
- package/dist/forms/client/useHubspotSubmit.js.map +1 -0
- package/dist/forms/server/getFormDefinition.d.ts +7 -0
- package/dist/forms/server/getFormDefinition.d.ts.map +1 -0
- package/dist/forms/server/getFormDefinition.js +24 -0
- package/dist/forms/server/getFormDefinition.js.map +1 -0
- package/dist/forms/server/hubspotFormTag.d.ts +3 -0
- package/dist/forms/server/hubspotFormTag.d.ts.map +1 -0
- package/dist/forms/server/hubspotFormTag.js +5 -0
- package/dist/forms/server/hubspotFormTag.js.map +1 -0
- package/dist/forms/server/mapApiResponse.d.ts +4 -0
- package/dist/forms/server/mapApiResponse.d.ts.map +1 -0
- package/dist/forms/server/mapApiResponse.js +105 -0
- package/dist/forms/server/mapApiResponse.js.map +1 -0
- package/dist/forms/server/submitForm.d.ts +8 -0
- package/dist/forms/server/submitForm.d.ts.map +1 -0
- package/dist/forms/server/submitForm.js +30 -0
- package/dist/forms/server/submitForm.js.map +1 -0
- package/dist/forms/types.d.ts +102 -0
- package/dist/forms/types.d.ts.map +1 -0
- package/dist/forms/types.js +2 -0
- package/dist/forms/types.js.map +1 -0
- package/dist/index.d.ts +11 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +7 -0
- package/dist/index.js.map +1 -0
- package/dist/server.d.ts +7 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +6 -0
- package/dist/server.js.map +1 -0
- package/dist/tracking/HubSpotAnalyticsAdapter.d.ts +23 -0
- package/dist/tracking/HubSpotAnalyticsAdapter.d.ts.map +1 -0
- package/dist/tracking/HubSpotAnalyticsAdapter.js +84 -0
- package/dist/tracking/HubSpotAnalyticsAdapter.js.map +1 -0
- package/dist/tracking/createHubSpotBootstrapScript.d.ts +9 -0
- package/dist/tracking/createHubSpotBootstrapScript.d.ts.map +1 -0
- package/dist/tracking/createHubSpotBootstrapScript.js +17 -0
- package/dist/tracking/createHubSpotBootstrapScript.js.map +1 -0
- package/docs/llms.md +46 -0
- package/package.json +76 -0
package/CHANGELOG.md
ADDED
|
@@ -0,0 +1,509 @@
|
|
|
1
|
+
# @se-studio/hubspot
|
|
2
|
+
|
|
3
|
+
## 0.0.0-next16-20260822103555
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- eeed547: Support Next.js 16.3 while remaining compatible with Next.js 15.5 (peer `>=15.5.0 <17`). CMS webhooks call `revalidateTag(tag, { expire: 0 })` so published content is not served stale. Template apps use `proxy.ts` on Next 16.
|
|
8
|
+
|
|
9
|
+
### Patch Changes
|
|
10
|
+
|
|
11
|
+
- Updated dependencies [eeed547]
|
|
12
|
+
- @se-studio/core-ui@0.0.0-next16-20260822103555
|
|
13
|
+
|
|
14
|
+
## 16.0.4
|
|
15
|
+
|
|
16
|
+
### Patch Changes
|
|
17
|
+
|
|
18
|
+
- Updated dependencies [f8a2ec2]
|
|
19
|
+
- @se-studio/core-ui@1.24.7
|
|
20
|
+
|
|
21
|
+
## 16.0.3
|
|
22
|
+
|
|
23
|
+
### Patch Changes
|
|
24
|
+
|
|
25
|
+
- Updated dependencies [b6434f7]
|
|
26
|
+
- @se-studio/core-ui@1.24.6
|
|
27
|
+
|
|
28
|
+
## 16.0.2
|
|
29
|
+
|
|
30
|
+
### Patch Changes
|
|
31
|
+
|
|
32
|
+
- Updated dependencies [dbfb662]
|
|
33
|
+
- @se-studio/core-ui@1.24.5
|
|
34
|
+
|
|
35
|
+
## 16.0.1
|
|
36
|
+
|
|
37
|
+
### Patch Changes
|
|
38
|
+
|
|
39
|
+
- Updated dependencies [2c479e7]
|
|
40
|
+
- @se-studio/core-ui@1.24.4
|
|
41
|
+
|
|
42
|
+
## 16.0.0
|
|
43
|
+
|
|
44
|
+
### Patch Changes
|
|
45
|
+
|
|
46
|
+
- Updated dependencies [f6a7b89]
|
|
47
|
+
- @se-studio/core-data-types@1.12.0
|
|
48
|
+
- @se-studio/core-ui@1.24.3
|
|
49
|
+
|
|
50
|
+
## 15.0.2
|
|
51
|
+
|
|
52
|
+
### Patch Changes
|
|
53
|
+
|
|
54
|
+
- Updated dependencies
|
|
55
|
+
- @se-studio/core-ui@1.24.2
|
|
56
|
+
|
|
57
|
+
## 15.0.1
|
|
58
|
+
|
|
59
|
+
### Patch Changes
|
|
60
|
+
|
|
61
|
+
- Updated dependencies
|
|
62
|
+
- @se-studio/core-ui@1.24.1
|
|
63
|
+
|
|
64
|
+
## 15.0.0
|
|
65
|
+
|
|
66
|
+
### Patch Changes
|
|
67
|
+
|
|
68
|
+
- Updated dependencies [50d02a0]
|
|
69
|
+
- @se-studio/core-data-types@1.11.0
|
|
70
|
+
- @se-studio/core-ui@1.24.0
|
|
71
|
+
|
|
72
|
+
## 14.0.2
|
|
73
|
+
|
|
74
|
+
### Patch Changes
|
|
75
|
+
|
|
76
|
+
- @se-studio/core-ui@1.23.2
|
|
77
|
+
|
|
78
|
+
## 14.0.1
|
|
79
|
+
|
|
80
|
+
### Patch Changes
|
|
81
|
+
|
|
82
|
+
- Updated dependencies
|
|
83
|
+
- @se-studio/core-data-types@1.10.1
|
|
84
|
+
- @se-studio/core-ui@1.23.1
|
|
85
|
+
|
|
86
|
+
## 14.0.0
|
|
87
|
+
|
|
88
|
+
### Patch Changes
|
|
89
|
+
|
|
90
|
+
- Updated dependencies
|
|
91
|
+
- @se-studio/core-data-types@1.10.0
|
|
92
|
+
- @se-studio/core-ui@1.23.0
|
|
93
|
+
|
|
94
|
+
## 13.0.1
|
|
95
|
+
|
|
96
|
+
### Patch Changes
|
|
97
|
+
|
|
98
|
+
- Updated dependencies [5b69ac6]
|
|
99
|
+
- @se-studio/core-ui@1.22.1
|
|
100
|
+
|
|
101
|
+
## 13.0.0
|
|
102
|
+
|
|
103
|
+
### Patch Changes
|
|
104
|
+
|
|
105
|
+
- Updated dependencies [760c9c4]
|
|
106
|
+
- @se-studio/core-data-types@1.9.0
|
|
107
|
+
- @se-studio/core-ui@1.22.0
|
|
108
|
+
|
|
109
|
+
## 12.0.0
|
|
110
|
+
|
|
111
|
+
### Patch Changes
|
|
112
|
+
|
|
113
|
+
- Updated dependencies
|
|
114
|
+
- @se-studio/core-data-types@1.8.0
|
|
115
|
+
- @se-studio/core-ui@1.21.0
|
|
116
|
+
|
|
117
|
+
## 11.0.0
|
|
118
|
+
|
|
119
|
+
### Patch Changes
|
|
120
|
+
|
|
121
|
+
- Updated dependencies [928562f]
|
|
122
|
+
- @se-studio/core-ui@1.20.0
|
|
123
|
+
|
|
124
|
+
## 10.0.11
|
|
125
|
+
|
|
126
|
+
### Patch Changes
|
|
127
|
+
|
|
128
|
+
- Updated dependencies
|
|
129
|
+
- @se-studio/core-ui@1.19.10
|
|
130
|
+
|
|
131
|
+
## 10.0.10
|
|
132
|
+
|
|
133
|
+
### Patch Changes
|
|
134
|
+
|
|
135
|
+
- Updated dependencies
|
|
136
|
+
- @se-studio/core-ui@1.19.9
|
|
137
|
+
|
|
138
|
+
## 10.0.9
|
|
139
|
+
|
|
140
|
+
### Patch Changes
|
|
141
|
+
|
|
142
|
+
- 908141d: Map HubSpot `dependentCondition` values to plain objects so form definitions are safe to pass from Server Components to Client Components (React Flight rejects SDK class instances such as `DependentFieldFilter`).
|
|
143
|
+
|
|
144
|
+
## 10.0.8
|
|
145
|
+
|
|
146
|
+
### Patch Changes
|
|
147
|
+
|
|
148
|
+
- Updated dependencies [bfb7eb4]
|
|
149
|
+
- @se-studio/core-data-types@1.7.1
|
|
150
|
+
- @se-studio/core-ui@1.19.8
|
|
151
|
+
|
|
152
|
+
## 10.0.7
|
|
153
|
+
|
|
154
|
+
### Patch Changes
|
|
155
|
+
|
|
156
|
+
- @se-studio/core-ui@1.19.7
|
|
157
|
+
|
|
158
|
+
## 10.0.6
|
|
159
|
+
|
|
160
|
+
### Patch Changes
|
|
161
|
+
|
|
162
|
+
- Fix HubSpot form post-submit redirects for external URLs and treat `onSuccess` as a side-effect.
|
|
163
|
+
|
|
164
|
+
- Preserve full `redirectUri` from the Forms Submit API (no longer strip host to path-only)
|
|
165
|
+
- Navigate external absolute URLs with `window.location.assign`; same-origin with `router.push`
|
|
166
|
+
- Call `onSuccess` without suppressing thank-you or redirect handling
|
|
167
|
+
- Add optional `redirectUrlOverride` for CMS overrides (`externalUrl` / `successRedirectUrl`)
|
|
168
|
+
- Export `navigateAfterSubmit` helper
|
|
169
|
+
|
|
170
|
+
## 10.0.5
|
|
171
|
+
|
|
172
|
+
### Patch Changes
|
|
173
|
+
|
|
174
|
+
- @se-studio/core-ui@1.19.5
|
|
175
|
+
|
|
176
|
+
## 10.0.4
|
|
177
|
+
|
|
178
|
+
### Patch Changes
|
|
179
|
+
|
|
180
|
+
- @se-studio/core-ui@1.19.4
|
|
181
|
+
|
|
182
|
+
## 10.0.3
|
|
183
|
+
|
|
184
|
+
### Patch Changes
|
|
185
|
+
|
|
186
|
+
- Updated dependencies
|
|
187
|
+
- @se-studio/core-ui@1.19.3
|
|
188
|
+
|
|
189
|
+
## 10.0.2
|
|
190
|
+
|
|
191
|
+
### Patch Changes
|
|
192
|
+
|
|
193
|
+
- Updated dependencies [14aeb6d]
|
|
194
|
+
- @se-studio/core-ui@1.19.2
|
|
195
|
+
|
|
196
|
+
## 10.0.1
|
|
197
|
+
|
|
198
|
+
### Patch Changes
|
|
199
|
+
|
|
200
|
+
- Updated dependencies [d9ddfa0]
|
|
201
|
+
- @se-studio/core-ui@1.19.1
|
|
202
|
+
|
|
203
|
+
## 10.0.0
|
|
204
|
+
|
|
205
|
+
### Patch Changes
|
|
206
|
+
|
|
207
|
+
- Updated dependencies [e716d0e]
|
|
208
|
+
- @se-studio/core-ui@1.19.0
|
|
209
|
+
|
|
210
|
+
## 9.0.0
|
|
211
|
+
|
|
212
|
+
### Patch Changes
|
|
213
|
+
|
|
214
|
+
- Updated dependencies [f909658]
|
|
215
|
+
- @se-studio/core-ui@1.18.0
|
|
216
|
+
|
|
217
|
+
## 8.0.2
|
|
218
|
+
|
|
219
|
+
### Patch Changes
|
|
220
|
+
|
|
221
|
+
- Updated dependencies [d54f872]
|
|
222
|
+
- @se-studio/core-ui@1.17.2
|
|
223
|
+
|
|
224
|
+
## 8.0.1
|
|
225
|
+
|
|
226
|
+
### Patch Changes
|
|
227
|
+
|
|
228
|
+
- Updated dependencies [6984d10]
|
|
229
|
+
- @se-studio/core-ui@1.17.1
|
|
230
|
+
|
|
231
|
+
## 8.0.0
|
|
232
|
+
|
|
233
|
+
### Patch Changes
|
|
234
|
+
|
|
235
|
+
- Updated dependencies [0bc1e24]
|
|
236
|
+
- @se-studio/core-ui@1.17.0
|
|
237
|
+
|
|
238
|
+
## 7.0.0
|
|
239
|
+
|
|
240
|
+
### Patch Changes
|
|
241
|
+
|
|
242
|
+
- Updated dependencies [a01b598]
|
|
243
|
+
- @se-studio/core-data-types@1.7.0
|
|
244
|
+
- @se-studio/core-ui@1.16.0
|
|
245
|
+
|
|
246
|
+
## 6.0.13
|
|
247
|
+
|
|
248
|
+
### Patch Changes
|
|
249
|
+
|
|
250
|
+
- Updated dependencies
|
|
251
|
+
- @se-studio/core-ui@1.15.3
|
|
252
|
+
|
|
253
|
+
## 6.0.12
|
|
254
|
+
|
|
255
|
+
### Patch Changes
|
|
256
|
+
|
|
257
|
+
- Updated dependencies [b211635]
|
|
258
|
+
- @se-studio/core-ui@1.15.2
|
|
259
|
+
|
|
260
|
+
## 6.0.11
|
|
261
|
+
|
|
262
|
+
### Patch Changes
|
|
263
|
+
|
|
264
|
+
- Updated dependencies [cded864]
|
|
265
|
+
- @se-studio/core-ui@1.15.1
|
|
266
|
+
|
|
267
|
+
## 6.0.10
|
|
268
|
+
|
|
269
|
+
### Patch Changes
|
|
270
|
+
|
|
271
|
+
- Updated dependencies
|
|
272
|
+
- @se-studio/core-ui@1.15.0
|
|
273
|
+
|
|
274
|
+
## 6.0.9
|
|
275
|
+
|
|
276
|
+
### Patch Changes
|
|
277
|
+
|
|
278
|
+
- Updated dependencies [748ba92]
|
|
279
|
+
- @se-studio/core-ui@1.14.9
|
|
280
|
+
|
|
281
|
+
## 6.0.8
|
|
282
|
+
|
|
283
|
+
### Patch Changes
|
|
284
|
+
|
|
285
|
+
- Updated dependencies
|
|
286
|
+
- @se-studio/core-ui@1.14.8
|
|
287
|
+
|
|
288
|
+
## 6.0.7
|
|
289
|
+
|
|
290
|
+
### Patch Changes
|
|
291
|
+
|
|
292
|
+
- Updated dependencies [2ebf4f2]
|
|
293
|
+
- @se-studio/core-ui@1.14.7
|
|
294
|
+
|
|
295
|
+
## 6.0.6
|
|
296
|
+
|
|
297
|
+
### Patch Changes
|
|
298
|
+
|
|
299
|
+
- @se-studio/core-ui@1.14.6
|
|
300
|
+
|
|
301
|
+
## 6.0.5
|
|
302
|
+
|
|
303
|
+
### Patch Changes
|
|
304
|
+
|
|
305
|
+
- Updated dependencies [90358cb]
|
|
306
|
+
- @se-studio/core-ui@1.14.5
|
|
307
|
+
|
|
308
|
+
## 6.0.4
|
|
309
|
+
|
|
310
|
+
### Patch Changes
|
|
311
|
+
|
|
312
|
+
- 6438b49: Auto-fill empty HubSpot form hidden fields from UTM/query params and first-touch sessionStorage (exported helpers for site forks).
|
|
313
|
+
- @se-studio/core-ui@1.14.4
|
|
314
|
+
|
|
315
|
+
## 6.0.3
|
|
316
|
+
|
|
317
|
+
### Patch Changes
|
|
318
|
+
|
|
319
|
+
- @se-studio/core-ui@1.14.3
|
|
320
|
+
|
|
321
|
+
## 6.0.2
|
|
322
|
+
|
|
323
|
+
### Patch Changes
|
|
324
|
+
|
|
325
|
+
- @se-studio/core-ui@1.14.2
|
|
326
|
+
|
|
327
|
+
## 6.0.1
|
|
328
|
+
|
|
329
|
+
### Patch Changes
|
|
330
|
+
|
|
331
|
+
- @se-studio/core-ui@1.14.1
|
|
332
|
+
|
|
333
|
+
## 6.0.0
|
|
334
|
+
|
|
335
|
+
### Patch Changes
|
|
336
|
+
|
|
337
|
+
- Updated dependencies
|
|
338
|
+
- @se-studio/core-ui@1.14.0
|
|
339
|
+
|
|
340
|
+
## 5.0.4
|
|
341
|
+
|
|
342
|
+
### Patch Changes
|
|
343
|
+
|
|
344
|
+
- @se-studio/core-ui@1.13.4
|
|
345
|
+
|
|
346
|
+
## 5.0.3
|
|
347
|
+
|
|
348
|
+
### Patch Changes
|
|
349
|
+
|
|
350
|
+
- Updated dependencies [c02a950]
|
|
351
|
+
- @se-studio/core-ui@1.13.3
|
|
352
|
+
|
|
353
|
+
## 5.0.2
|
|
354
|
+
|
|
355
|
+
### Patch Changes
|
|
356
|
+
|
|
357
|
+
- @se-studio/core-ui@1.13.2
|
|
358
|
+
|
|
359
|
+
## 5.0.1
|
|
360
|
+
|
|
361
|
+
### Patch Changes
|
|
362
|
+
|
|
363
|
+
- Updated dependencies
|
|
364
|
+
- @se-studio/core-ui@1.13.1
|
|
365
|
+
|
|
366
|
+
## 5.0.0
|
|
367
|
+
|
|
368
|
+
### Patch Changes
|
|
369
|
+
|
|
370
|
+
- Updated dependencies
|
|
371
|
+
- @se-studio/core-ui@1.13.0
|
|
372
|
+
|
|
373
|
+
## 4.0.4
|
|
374
|
+
|
|
375
|
+
### Patch Changes
|
|
376
|
+
|
|
377
|
+
- @se-studio/core-ui@1.12.4
|
|
378
|
+
|
|
379
|
+
## 4.0.3
|
|
380
|
+
|
|
381
|
+
### Patch Changes
|
|
382
|
+
|
|
383
|
+
- Updated dependencies
|
|
384
|
+
- @se-studio/core-ui@1.12.3
|
|
385
|
+
|
|
386
|
+
## 4.0.2
|
|
387
|
+
|
|
388
|
+
### Patch Changes
|
|
389
|
+
|
|
390
|
+
- Updated dependencies
|
|
391
|
+
- @se-studio/core-ui@1.12.2
|
|
392
|
+
|
|
393
|
+
## 4.0.1
|
|
394
|
+
|
|
395
|
+
### Patch Changes
|
|
396
|
+
|
|
397
|
+
- Updated dependencies
|
|
398
|
+
- @se-studio/core-ui@1.12.1
|
|
399
|
+
|
|
400
|
+
## 4.0.0
|
|
401
|
+
|
|
402
|
+
### Patch Changes
|
|
403
|
+
|
|
404
|
+
- Updated dependencies
|
|
405
|
+
- @se-studio/core-ui@1.12.0
|
|
406
|
+
|
|
407
|
+
## 3.0.8
|
|
408
|
+
|
|
409
|
+
### Patch Changes
|
|
410
|
+
|
|
411
|
+
- Updated dependencies
|
|
412
|
+
- @se-studio/core-ui@1.11.8
|
|
413
|
+
|
|
414
|
+
## 3.0.7
|
|
415
|
+
|
|
416
|
+
### Patch Changes
|
|
417
|
+
|
|
418
|
+
- @se-studio/core-ui@1.11.7
|
|
419
|
+
|
|
420
|
+
## 3.0.6
|
|
421
|
+
|
|
422
|
+
### Patch Changes
|
|
423
|
+
|
|
424
|
+
- Bulk version bump: patch for all packages
|
|
425
|
+
- Updated dependencies
|
|
426
|
+
- @se-studio/core-data-types@1.6.1
|
|
427
|
+
- @se-studio/core-ui@1.11.6
|
|
428
|
+
|
|
429
|
+
## 3.0.5
|
|
430
|
+
|
|
431
|
+
### Patch Changes
|
|
432
|
+
|
|
433
|
+
- @se-studio/core-ui@1.11.5
|
|
434
|
+
|
|
435
|
+
## 3.0.4
|
|
436
|
+
|
|
437
|
+
### Patch Changes
|
|
438
|
+
|
|
439
|
+
- Updated dependencies
|
|
440
|
+
- @se-studio/core-ui@1.11.4
|
|
441
|
+
|
|
442
|
+
## 3.0.3
|
|
443
|
+
|
|
444
|
+
### Patch Changes
|
|
445
|
+
|
|
446
|
+
- @se-studio/core-ui@1.11.3
|
|
447
|
+
|
|
448
|
+
## 3.0.2
|
|
449
|
+
|
|
450
|
+
### Patch Changes
|
|
451
|
+
|
|
452
|
+
- bc538fd: chore: dependency updates (contentful-management, live-preview, hubspot api-client, js-yaml, biome js-api)
|
|
453
|
+
- Updated dependencies [bc538fd]
|
|
454
|
+
- @se-studio/core-ui@1.11.2
|
|
455
|
+
|
|
456
|
+
## 3.0.1
|
|
457
|
+
|
|
458
|
+
### Patch Changes
|
|
459
|
+
|
|
460
|
+
- @se-studio/core-ui@1.11.1
|
|
461
|
+
|
|
462
|
+
## 3.0.0
|
|
463
|
+
|
|
464
|
+
### Patch Changes
|
|
465
|
+
|
|
466
|
+
- Updated dependencies
|
|
467
|
+
- @se-studio/core-data-types@1.6.0
|
|
468
|
+
- @se-studio/core-ui@1.11.0
|
|
469
|
+
|
|
470
|
+
## 2.0.3
|
|
471
|
+
|
|
472
|
+
### Patch Changes
|
|
473
|
+
|
|
474
|
+
- Updated dependencies [a9600c8]
|
|
475
|
+
- @se-studio/core-ui@1.10.2
|
|
476
|
+
|
|
477
|
+
## 2.0.2
|
|
478
|
+
|
|
479
|
+
### Patch Changes
|
|
480
|
+
|
|
481
|
+
- @se-studio/core-ui@1.10.1
|
|
482
|
+
|
|
483
|
+
## 2.0.1
|
|
484
|
+
|
|
485
|
+
### Patch Changes
|
|
486
|
+
|
|
487
|
+
- Make `createHubSpotBootstrapScript()` SSG-safe by default: no-arg variant uses `window.location.pathname` instead of requiring a server pathname.
|
|
488
|
+
|
|
489
|
+
## 2.0.0
|
|
490
|
+
|
|
491
|
+
### Patch Changes
|
|
492
|
+
|
|
493
|
+
- Updated dependencies
|
|
494
|
+
- @se-studio/core-ui@1.10.0
|
|
495
|
+
|
|
496
|
+
## 1.0.0
|
|
497
|
+
|
|
498
|
+
### Minor Changes
|
|
499
|
+
|
|
500
|
+
- Add `@se-studio/hubspot` shared package for HubSpot tracking (`HubSpotAnalyticsAdapter`) and API-driven form rendering with CMS external component support.
|
|
501
|
+
|
|
502
|
+
Add `CompositeAnalyticsAdapter` and `AnalyticsPageTracker` to core-ui for multi-provider analytics (GTM + HubSpot SPA Mode B).
|
|
503
|
+
|
|
504
|
+
Update `AbTestReporter` to route experiment impressions through `useAnalytics`, including `hubspot_event` for HubSpot behavioural events.
|
|
505
|
+
|
|
506
|
+
### Patch Changes
|
|
507
|
+
|
|
508
|
+
- Updated dependencies
|
|
509
|
+
- @se-studio/core-ui@1.9.0
|
package/README.md
ADDED
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
# @se-studio/hubspot
|
|
2
|
+
|
|
3
|
+
HubSpot tracking and API-driven form rendering for Next.js marketing sites.
|
|
4
|
+
|
|
5
|
+
## Features
|
|
6
|
+
|
|
7
|
+
- **`HubSpotAnalyticsAdapter`** — `AnalyticsAdapter` for HubSpot tracking code (SPA Mode B page views, custom behavioural events)
|
|
8
|
+
- **`HubspotDynamicForm`** — React renderer from HubSpot Marketing Forms API definitions
|
|
9
|
+
- **UTM / marketing hidden fields** — auto-fills empty hidden form fields from URL query params and first-touch `sessionStorage` (`utm_source`, `utm_medium`, `utm_campaign`, `utm_term`, `utm_content`, plus any query key that matches a hidden field name)
|
|
10
|
+
- **`createHubspotFormExternalRenderer`** — CMS external component factory (`externalComponentType: "Hubspot form"`)
|
|
11
|
+
- **Per-form fetch** — `GET /marketing/v3/forms/{formId}` with Next.js `unstable_cache` (no bulk form download)
|
|
12
|
+
|
|
13
|
+
## Installation
|
|
14
|
+
|
|
15
|
+
```bash
|
|
16
|
+
pnpm add @se-studio/hubspot
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
## Environment variables
|
|
20
|
+
|
|
21
|
+
| Variable | Purpose |
|
|
22
|
+
|----------|---------|
|
|
23
|
+
| `HUBSPOT_PORTAL_ID` | Portal ID for tracking script and form submissions |
|
|
24
|
+
| `HUBSPOT_PAT` | Private app token with `forms` scope (server-only, form definition fetch) |
|
|
25
|
+
|
|
26
|
+
## Analytics (with GTM)
|
|
27
|
+
|
|
28
|
+
```tsx
|
|
29
|
+
import { AnalyticsPageTracker, AnalyticsProvider, CompositeAnalyticsAdapter, ConsentAwareAdapter, GoogleTagManagerAdapter } from '@se-studio/core-ui';
|
|
30
|
+
import { AbTestReporter } from '@se-studio/ab-testing/components';
|
|
31
|
+
import { HubSpotAnalyticsAdapter, createHubSpotBootstrapScript } from '@se-studio/hubspot';
|
|
32
|
+
import Script from 'next/script';
|
|
33
|
+
|
|
34
|
+
const adapter = new ConsentAwareAdapter(
|
|
35
|
+
new CompositeAnalyticsAdapter([
|
|
36
|
+
new GoogleTagManagerAdapter({ containerId: process.env.GTM_TAG! }),
|
|
37
|
+
new HubSpotAnalyticsAdapter({ portalId: process.env.HUBSPOT_PORTAL_ID! }),
|
|
38
|
+
]),
|
|
39
|
+
'analytics',
|
|
40
|
+
hasConsent,
|
|
41
|
+
);
|
|
42
|
+
|
|
43
|
+
// layout.tsx — before HubSpot script loads (no args = SSG-safe; uses window.location.pathname)
|
|
44
|
+
<Script id="hubspot-bootstrap" strategy="beforeInteractive"
|
|
45
|
+
dangerouslySetInnerHTML={{ __html: createHubSpotBootstrapScript() }} />
|
|
46
|
+
|
|
47
|
+
<AnalyticsProvider adapter={adapter}>
|
|
48
|
+
<AnalyticsPageTracker />
|
|
49
|
+
<AbTestReporter />
|
|
50
|
+
{children}
|
|
51
|
+
</AnalyticsProvider>
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
## CMS external component
|
|
55
|
+
|
|
56
|
+
Add `"Hubspot form"` to your `externalComponent` enum. `data` JSON:
|
|
57
|
+
|
|
58
|
+
```json
|
|
59
|
+
{
|
|
60
|
+
"formId": "hubspot-form-guid",
|
|
61
|
+
"portalId": "optional-override",
|
|
62
|
+
"submitButtonText": "Optional label",
|
|
63
|
+
"hiddenFields": { "campaign": "value" }
|
|
64
|
+
}
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
```tsx
|
|
68
|
+
import { defineExternalComponent } from '@se-studio/core-ui';
|
|
69
|
+
import { createHubspotFormExternalRenderer } from '@se-studio/hubspot/external';
|
|
70
|
+
import { Section } from '@/framework/Section';
|
|
71
|
+
|
|
72
|
+
export const HubspotFormRegistration = defineExternalComponent({
|
|
73
|
+
name: 'Hubspot form',
|
|
74
|
+
renderer: createHubspotFormExternalRenderer({
|
|
75
|
+
wrap: ({ information, children, componentName }) => (
|
|
76
|
+
<Section information={information} componentName={componentName}>
|
|
77
|
+
{children}
|
|
78
|
+
</Section>
|
|
79
|
+
),
|
|
80
|
+
}),
|
|
81
|
+
});
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
### Hidden UTM / campaign fields
|
|
85
|
+
|
|
86
|
+
If the HubSpot form defines **hidden** fields whose internal names match query params (e.g. `utm_source`, `utm_medium`, `utm_campaign`, `utm_term`, `utm_content`), `HubspotDynamicForm` fills them on mount from:
|
|
87
|
+
|
|
88
|
+
1. HubSpot form defaults (if any)
|
|
89
|
+
2. First-touch `sessionStorage` + current URL (URL wins for keys present on the form page)
|
|
90
|
+
3. CMS `data.hiddenFields` / `data.initialValues` (**highest** — static overrides win)
|
|
91
|
+
|
|
92
|
+
First-touch is stored under `sessionStorage` key `se_studio_marketing_params` so a visitor who lands with UTMs on `/` and submits on `/contact-us/` still attributes correctly.
|
|
93
|
+
|
|
94
|
+
Sites that fork the form renderer should call the same helpers (do not reimplement):
|
|
95
|
+
|
|
96
|
+
```tsx
|
|
97
|
+
import {
|
|
98
|
+
applyMarketingParamsToHiddenFields,
|
|
99
|
+
buildDefaultValues,
|
|
100
|
+
captureMarketingParams,
|
|
101
|
+
} from '@se-studio/hubspot';
|
|
102
|
+
|
|
103
|
+
// Optional: call once in a root client provider so multi-page capture runs before the form mounts
|
|
104
|
+
captureMarketingParams();
|
|
105
|
+
|
|
106
|
+
// When seeding form state (same order as HubspotDynamicForm):
|
|
107
|
+
setFormData(buildDefaultValues(formDefinition, hiddenFields, initialValues));
|
|
108
|
+
// or applyMarketingParamsToHiddenFields(formDefinition, baseDefaults)
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
Submissions already send Forms API `context` (`hutk`, `pageUri`, `pageName`) via `useHubspotSubmit`.
|
|
112
|
+
|
|
113
|
+
## Post-submit behaviour
|
|
114
|
+
|
|
115
|
+
These forms are **not** HubSpot’s native embed script — the package rebuilds fields from the Marketing Forms API and posts via the Forms Submit API. Redirect / thank-you must be handled in our client:
|
|
116
|
+
|
|
117
|
+
| Priority | Source | Behaviour |
|
|
118
|
+
|----------|--------|-----------|
|
|
119
|
+
| 1 | `redirectUrlOverride` prop | CMS override (e.g. Contentful `externalUrl` or `data.successRedirectUrl`) |
|
|
120
|
+
| 2 | Submit API `redirectUri` | Includes HubSpot conditional redirects when returned |
|
|
121
|
+
| 3 | Form definition `postSubmitAction` type `redirect_url` | Configured in HubSpot form editor |
|
|
122
|
+
| 4 | `inlineMessage` / `thank_you` | Inline message on the form |
|
|
123
|
+
|
|
124
|
+
**Navigation:** external absolute URLs use `window.location.assign`; same-origin paths use Next.js `router.push`. Full redirect URLs are preserved (hosts are not stripped).
|
|
125
|
+
|
|
126
|
+
**`onSuccess`:** side-effect only (analytics, swap to CMS `extraCopy`). It does **not** suppress thank-you or redirect. When a redirect is configured, navigation wins after the callback.
|
|
127
|
+
|
|
128
|
+
```tsx
|
|
129
|
+
<HubspotDynamicForm
|
|
130
|
+
portalId={portalId}
|
|
131
|
+
formDefinition={formDefinition}
|
|
132
|
+
redirectUrlOverride={cmsExternalUrl} // optional CMS override
|
|
133
|
+
onSuccess={() => setShowExtraCopy(true)} // optional; redirect still runs if set
|
|
134
|
+
/>
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
## Cache revalidation
|
|
138
|
+
|
|
139
|
+
When a form changes in HubSpot, revalidate:
|
|
140
|
+
|
|
141
|
+
```ts
|
|
142
|
+
import { revalidateTag } from 'next/cache';
|
|
143
|
+
import { hubspotFormTag } from '@se-studio/hubspot/server';
|
|
144
|
+
|
|
145
|
+
revalidateTag(hubspotFormTag(formId), { expire: 0 });
|
|
146
|
+
```
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import type { ITyped } from '@se-studio/core-data-types';
|
|
2
|
+
import type { ExternalComponentRenderer } from '@se-studio/core-ui';
|
|
3
|
+
import type { ReactNode } from 'react';
|
|
4
|
+
import type { HubspotFormClassNames } from '../forms/types';
|
|
5
|
+
export interface HubspotFormExternalRendererOptions<TExternal extends ITyped> {
|
|
6
|
+
/** Wrap the form in the project's Section/layout component. */
|
|
7
|
+
wrap: (params: {
|
|
8
|
+
information: TExternal;
|
|
9
|
+
children: ReactNode;
|
|
10
|
+
componentName: string;
|
|
11
|
+
}) => ReactNode;
|
|
12
|
+
/** Resolve portal ID from env when not set in CMS data. */
|
|
13
|
+
getPortalId?: () => string | undefined;
|
|
14
|
+
/** Optional Tailwind/class overrides for form fields. */
|
|
15
|
+
classNames?: HubspotFormClassNames;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Factory for a CMS external component renderer (`externalComponentType: "Hubspot form"`).
|
|
19
|
+
*/
|
|
20
|
+
export declare function createHubspotFormExternalRenderer<TExternal extends ITyped & {
|
|
21
|
+
data?: unknown;
|
|
22
|
+
}>(options: HubspotFormExternalRendererOptions<TExternal>): ExternalComponentRenderer<TExternal>;
|
|
23
|
+
//# sourceMappingURL=createHubspotFormExternalRenderer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"createHubspotFormExternalRenderer.d.ts","sourceRoot":"","sources":["../../src/external/createHubspotFormExternalRenderer.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAC;AACzD,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,oBAAoB,CAAC;AACpE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAGvC,OAAO,KAAK,EAAE,qBAAqB,EAA2B,MAAM,gBAAgB,CAAC;AAErF,MAAM,WAAW,kCAAkC,CAAC,SAAS,SAAS,MAAM;IAC1E,+DAA+D;IAC/D,IAAI,EAAE,CAAC,MAAM,EAAE;QACb,WAAW,EAAE,SAAS,CAAC;QACvB,QAAQ,EAAE,SAAS,CAAC;QACpB,aAAa,EAAE,MAAM,CAAC;KACvB,KAAK,SAAS,CAAC;IAChB,2DAA2D;IAC3D,WAAW,CAAC,EAAE,MAAM,MAAM,GAAG,SAAS,CAAC;IACvC,yDAAyD;IACzD,UAAU,CAAC,EAAE,qBAAqB,CAAC;CACpC;AAED;;GAEG;AACH,wBAAgB,iCAAiC,CAAC,SAAS,SAAS,MAAM,GAAG;IAAE,IAAI,CAAC,EAAE,OAAO,CAAA;CAAE,EAC7F,OAAO,EAAE,kCAAkC,CAAC,SAAS,CAAC,GACrD,yBAAyB,CAAC,SAAS,CAAC,CA+BtC"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { HubspotDynamicForm } from '../forms/client/HubspotDynamicForm';
|
|
3
|
+
import { getHubspotFormDefinition } from '../forms/server/getFormDefinition';
|
|
4
|
+
/**
|
|
5
|
+
* Factory for a CMS external component renderer (`externalComponentType: "Hubspot form"`).
|
|
6
|
+
*/
|
|
7
|
+
export function createHubspotFormExternalRenderer(options) {
|
|
8
|
+
const getPortalId = options.getPortalId ?? (() => process.env.HUBSPOT_PORTAL_ID);
|
|
9
|
+
return async function HubspotFormExternalRenderer({ information }) {
|
|
10
|
+
const data = (information.data ?? {});
|
|
11
|
+
const portalId = data.portalId ?? getPortalId();
|
|
12
|
+
if (!data.formId || !portalId) {
|
|
13
|
+
return null;
|
|
14
|
+
}
|
|
15
|
+
const formDefinition = await getHubspotFormDefinition(data.formId);
|
|
16
|
+
if (!formDefinition) {
|
|
17
|
+
return null;
|
|
18
|
+
}
|
|
19
|
+
return options.wrap({
|
|
20
|
+
information,
|
|
21
|
+
componentName: 'Hubspot form',
|
|
22
|
+
children: (_jsx(HubspotDynamicForm, { portalId: portalId, formDefinition: formDefinition, submitButtonText: data.submitButtonText, classNames: options.classNames, hiddenFields: data.hiddenFields, initialValues: data.initialValues })),
|
|
23
|
+
});
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=createHubspotFormExternalRenderer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"createHubspotFormExternalRenderer.js","sourceRoot":"","sources":["../../src/external/createHubspotFormExternalRenderer.tsx"],"names":[],"mappings":";AAGA,OAAO,EAAE,kBAAkB,EAAE,MAAM,oCAAoC,CAAC;AACxE,OAAO,EAAE,wBAAwB,EAAE,MAAM,mCAAmC,CAAC;AAgB7E;;GAEG;AACH,MAAM,UAAU,iCAAiC,CAC/C,OAAsD;IAEtD,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,IAAI,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;IAEjF,OAAO,KAAK,UAAU,2BAA2B,CAAC,EAAE,WAAW,EAAE;QAC/D,MAAM,IAAI,GAAG,CAAC,WAAW,CAAC,IAAI,IAAI,EAAE,CAA4B,CAAC;QACjE,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,IAAI,WAAW,EAAE,CAAC;QAEhD,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAC;YAC9B,OAAO,IAAI,CAAC;QACd,CAAC;QAED,MAAM,cAAc,GAAG,MAAM,wBAAwB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACnE,IAAI,CAAC,cAAc,EAAE,CAAC;YACpB,OAAO,IAAI,CAAC;QACd,CAAC;QAED,OAAO,OAAO,CAAC,IAAI,CAAC;YAClB,WAAW;YACX,aAAa,EAAE,cAAc;YAC7B,QAAQ,EAAE,CACR,KAAC,kBAAkB,IACjB,QAAQ,EAAE,QAAQ,EAClB,cAAc,EAAE,cAAc,EAC9B,gBAAgB,EAAE,IAAI,CAAC,gBAAgB,EACvC,UAAU,EAAE,OAAO,CAAC,UAAU,EAC9B,YAAY,EAAE,IAAI,CAAC,YAAY,EAC/B,aAAa,EAAE,IAAI,CAAC,aAAa,GACjC,CACH;SACF,CAAC,CAAC;IACL,CAAC,CAAC;AACJ,CAAC"}
|