@prenta/sections-react 0.15.0

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 (76) hide show
  1. package/CHANGELOG.md +1037 -0
  2. package/LICENSE +21 -0
  3. package/README.md +36 -0
  4. package/dist/PrentaForm.d.ts +22 -0
  5. package/dist/PrentaForm.d.ts.map +1 -0
  6. package/dist/PrentaForm.js +203 -0
  7. package/dist/PrentaForm.js.map +1 -0
  8. package/dist/PrentaFormHtml.d.ts +19 -0
  9. package/dist/PrentaFormHtml.d.ts.map +1 -0
  10. package/dist/PrentaFormHtml.js +18 -0
  11. package/dist/PrentaFormHtml.js.map +1 -0
  12. package/dist/Sections.d.ts +40 -0
  13. package/dist/Sections.d.ts.map +1 -0
  14. package/dist/Sections.js +80 -0
  15. package/dist/Sections.js.map +1 -0
  16. package/dist/SiteNav.d.ts +38 -0
  17. package/dist/SiteNav.d.ts.map +1 -0
  18. package/dist/SiteNav.js +38 -0
  19. package/dist/SiteNav.js.map +1 -0
  20. package/dist/attribution.d.ts +31 -0
  21. package/dist/attribution.d.ts.map +1 -0
  22. package/dist/attribution.js +66 -0
  23. package/dist/attribution.js.map +1 -0
  24. package/dist/components/WidgetEmbedSection.d.ts +9 -0
  25. package/dist/components/WidgetEmbedSection.d.ts.map +1 -0
  26. package/dist/components/WidgetEmbedSection.js +113 -0
  27. package/dist/components/WidgetEmbedSection.js.map +1 -0
  28. package/dist/components/defaults.d.ts +34 -0
  29. package/dist/components/defaults.d.ts.map +1 -0
  30. package/dist/components/defaults.js +170 -0
  31. package/dist/components/defaults.js.map +1 -0
  32. package/dist/forms.d.ts +103 -0
  33. package/dist/forms.d.ts.map +1 -0
  34. package/dist/forms.js +217 -0
  35. package/dist/forms.js.map +1 -0
  36. package/dist/image.d.ts +17 -0
  37. package/dist/image.d.ts.map +1 -0
  38. package/dist/image.js +14 -0
  39. package/dist/image.js.map +1 -0
  40. package/dist/index.d.ts +51 -0
  41. package/dist/index.d.ts.map +1 -0
  42. package/dist/index.js +44 -0
  43. package/dist/index.js.map +1 -0
  44. package/dist/lcp.d.ts +30 -0
  45. package/dist/lcp.d.ts.map +1 -0
  46. package/dist/lcp.js +34 -0
  47. package/dist/lcp.js.map +1 -0
  48. package/dist/primitives.d.ts +14 -0
  49. package/dist/primitives.d.ts.map +1 -0
  50. package/dist/primitives.js +18 -0
  51. package/dist/primitives.js.map +1 -0
  52. package/dist/registry.d.ts +40 -0
  53. package/dist/registry.d.ts.map +1 -0
  54. package/dist/registry.js +62 -0
  55. package/dist/registry.js.map +1 -0
  56. package/dist/sizes.d.ts +30 -0
  57. package/dist/sizes.d.ts.map +1 -0
  58. package/dist/sizes.js +34 -0
  59. package/dist/sizes.js.map +1 -0
  60. package/dist/testing.d.ts +95 -0
  61. package/dist/testing.d.ts.map +1 -0
  62. package/dist/testing.js +159 -0
  63. package/dist/testing.js.map +1 -0
  64. package/dist/types.d.ts +130 -0
  65. package/dist/types.d.ts.map +1 -0
  66. package/dist/types.js +2 -0
  67. package/dist/types.js.map +1 -0
  68. package/dist/utils.d.ts +21 -0
  69. package/dist/utils.d.ts.map +1 -0
  70. package/dist/utils.js +65 -0
  71. package/dist/utils.js.map +1 -0
  72. package/dist/webmcp.d.ts +6 -0
  73. package/dist/webmcp.d.ts.map +1 -0
  74. package/dist/webmcp.js +18 -0
  75. package/dist/webmcp.js.map +1 -0
  76. package/package.json +69 -0
package/CHANGELOG.md ADDED
@@ -0,0 +1,1037 @@
1
+ # @actuate-media/sections-react
2
+
3
+ ## 0.15.0
4
+
5
+ ### Minor Changes
6
+
7
+ - 5eea995: Product rename: ActuateCMS is now **Prenta**. Every package moves from the
8
+ `@actuate-media/*` scope to `@prenta/*` with simplified names (`@prenta/core`,
9
+ `@prenta/admin`, `create-prenta`), and version numbers continue from where the
10
+ old scope left off.
11
+
12
+ This is a clean break — no backwards-compat aliases:
13
+ - **npm packages**: `@actuate-media/cms-core` → `@prenta/core`,
14
+ `@actuate-media/cms-admin` → `@prenta/admin`, all other packages keep their
15
+ suffix under `@prenta/*`. `create-actuate-cms` → `create-prenta`
16
+ (`npm create prenta`), `create-actuate-astro` → `create-prenta-astro`.
17
+ CLI bins: `actuate`/`actuate-cms` → `prenta`/`prenta-cms`; `actuate-mcp` →
18
+ `prenta-mcp`.
19
+ - **Database**: migration `0012_rename_to_prenta` renames all 36 `actuate_*`
20
+ tables to `prenta_*` in place (plus prefixed constraints, indexes, and
21
+ sequences). Run `prisma migrate deploy` when upgrading.
22
+ - **Runtime identifiers**: `getActuateConfig` → `getPrentaConfig`,
23
+ `handleActuateAPI` → `handlePrentaAPI`, `ActuateClient` → `PrentaClient`,
24
+ `ActuateDB` → `PrentaDB`, config file `actuate.config.ts` →
25
+ `prenta.config.ts`, CSS scopes `.actuate-admin`/`.actuate-canvas` →
26
+ `.prenta-admin`/`.prenta-canvas`, preview protocol `actuate-preview:*` →
27
+ `prenta-preview:*`, webhook headers `X-Actuate-*` → `X-Prenta-*`, session
28
+ cookie `actuate_session` → `prenta_session`, env vars `ACTUATE_*` →
29
+ `PRENTA_*`, purge route `/api/actuate/purge` → `/api/prenta/purge`.
30
+ - **Sessions and webhooks**: all sessions reset on upgrade (cookie + JWT issuer
31
+ changed); webhook consumers must re-verify signatures against the new
32
+ `X-Prenta-*` headers.
33
+
34
+ The old `@actuate-media/*` packages are deprecated on npm and will receive no
35
+ further releases.
36
+
37
+ ### Patch Changes
38
+
39
+ - Updated dependencies [5eea995]
40
+ - @prenta/core@0.118.0
41
+
42
+ ## 0.14.0
43
+
44
+ ### Minor Changes
45
+
46
+ - 56ebbb9: New `assertSectionCoverage` export in `@actuate-media/sections-react/testing` (issue #775) — the real implementation behind the `verify:sections` check the docs describe. Asserts the three-layer section contract agrees: every declared `sections.types` id has an entry in the shared renderer map, every renderer corresponds to a declared type (catches schema renames that leave a stale renderer), and intentionally renderer-less types are declared via an `allowDataOnly` opt-out list that fails when stale. Aggregates all problems into one actionable error.
47
+
48
+ ## 0.13.1
49
+
50
+ ### Patch Changes
51
+
52
+ - 02be20a: Visual editing Stage 3: path-aware section content updates, preview bridge edit/mode/request-media protocol with suppress-echo for canvas text edits, and media field-kind annotations on default section renderers.
53
+ - Updated dependencies [02be20a]
54
+ - @actuate-media/cms-core@0.117.0
55
+
56
+ ## 0.13.0
57
+
58
+ ### Minor Changes
59
+
60
+ - abce7a5: Visual editing Phase 2: field selection via `data-cms-field`, unified `insp-field-*` inspector ids, and canvas `fieldPath` → inspector focus.
61
+
62
+ ## 0.12.0
63
+
64
+ ### Minor Changes
65
+
66
+ - 1216ee7: Visual editing Phase 1: annotate `<Sections>` with `data-cms-section-id` / `data-cms-section-type`, and wire an origin-pinned `actuate-preview:*` postMessage bus so Site preview can select sections into the inspector and highlight the selection.
67
+
68
+ ## 0.11.0
69
+
70
+ ### Minor Changes
71
+
72
+ - 6ff80a6: Add `@actuate-media/sections-react/testing` (`assertSectionRenderParity`, canvas render options) and wire an Astro-split starter `test:parity` gate so canvas and public orchestrators can't drift into a WYSIWYG lie.
73
+
74
+ ## 0.10.25
75
+
76
+ ### Patch Changes
77
+
78
+ - Updated dependencies [73854fc]
79
+ - @actuate-media/cms-core@0.116.0
80
+
81
+ ## 0.10.24
82
+
83
+ ### Patch Changes
84
+
85
+ - Updated dependencies [576f076]
86
+ - @actuate-media/cms-core@0.115.0
87
+
88
+ ## 0.10.23
89
+
90
+ ### Patch Changes
91
+
92
+ - Updated dependencies [dfffe08]
93
+ - @actuate-media/cms-core@0.114.0
94
+
95
+ ## 0.10.22
96
+
97
+ ### Patch Changes
98
+
99
+ - Updated dependencies [38aa813]
100
+ - @actuate-media/cms-core@0.113.0
101
+
102
+ ## 0.10.21
103
+
104
+ ### Patch Changes
105
+
106
+ - Updated dependencies [cf97a40]
107
+ - @actuate-media/cms-core@0.112.0
108
+
109
+ ## 0.10.20
110
+
111
+ ### Patch Changes
112
+
113
+ - Updated dependencies [90f9801]
114
+ - Updated dependencies [90f9801]
115
+ - @actuate-media/cms-core@0.111.0
116
+
117
+ ## 0.10.19
118
+
119
+ ### Patch Changes
120
+
121
+ - Updated dependencies [56c1309]
122
+ - @actuate-media/cms-core@0.110.2
123
+
124
+ ## 0.10.18
125
+
126
+ ### Patch Changes
127
+
128
+ - Updated dependencies [f4766d4]
129
+ - @actuate-media/cms-core@0.110.1
130
+
131
+ ## 0.10.17
132
+
133
+ ### Patch Changes
134
+
135
+ - Updated dependencies [46ea4a7]
136
+ - @actuate-media/cms-core@0.110.0
137
+
138
+ ## 0.10.16
139
+
140
+ ### Patch Changes
141
+
142
+ - Updated dependencies [e4e55de]
143
+ - @actuate-media/cms-core@0.109.0
144
+
145
+ ## 0.10.15
146
+
147
+ ### Patch Changes
148
+
149
+ - Updated dependencies [6eaffa5]
150
+ - @actuate-media/cms-core@0.108.0
151
+
152
+ ## 0.10.14
153
+
154
+ ### Patch Changes
155
+
156
+ - Updated dependencies [1c2afa5]
157
+ - @actuate-media/cms-core@0.107.3
158
+
159
+ ## 0.10.13
160
+
161
+ ### Patch Changes
162
+
163
+ - Updated dependencies [b305f0c]
164
+ - @actuate-media/cms-core@0.107.2
165
+
166
+ ## 0.10.12
167
+
168
+ ### Patch Changes
169
+
170
+ - Updated dependencies [a26f61a]
171
+ - @actuate-media/cms-core@0.107.1
172
+
173
+ ## 0.10.11
174
+
175
+ ### Patch Changes
176
+
177
+ - Updated dependencies [f676bcc]
178
+ - @actuate-media/cms-core@0.107.0
179
+
180
+ ## 0.10.10
181
+
182
+ ### Patch Changes
183
+
184
+ - Updated dependencies [9d5dad3]
185
+ - @actuate-media/cms-core@0.106.1
186
+
187
+ ## 0.10.9
188
+
189
+ ### Patch Changes
190
+
191
+ - Updated dependencies [3d1a79f]
192
+ - @actuate-media/cms-core@0.106.0
193
+
194
+ ## 0.10.8
195
+
196
+ ### Patch Changes
197
+
198
+ - Updated dependencies [78671c4]
199
+ - @actuate-media/cms-core@0.105.0
200
+
201
+ ## 0.10.7
202
+
203
+ ### Patch Changes
204
+
205
+ - Updated dependencies [258cbc3]
206
+ - @actuate-media/cms-core@0.104.0
207
+
208
+ ## 0.10.6
209
+
210
+ ### Patch Changes
211
+
212
+ - Updated dependencies [2f2fe29]
213
+ - @actuate-media/cms-core@0.103.0
214
+
215
+ ## 0.10.5
216
+
217
+ ### Patch Changes
218
+
219
+ - Updated dependencies [f8a2c07]
220
+ - @actuate-media/cms-core@0.102.0
221
+
222
+ ## 0.10.4
223
+
224
+ ### Patch Changes
225
+
226
+ - Updated dependencies [afceb12]
227
+ - @actuate-media/cms-core@0.101.2
228
+
229
+ ## 0.10.3
230
+
231
+ ### Patch Changes
232
+
233
+ - Updated dependencies [81aa012]
234
+ - @actuate-media/cms-core@0.101.1
235
+
236
+ ## 0.10.2
237
+
238
+ ### Patch Changes
239
+
240
+ - Updated dependencies [58f3ca1]
241
+ - @actuate-media/cms-core@0.101.0
242
+
243
+ ## 0.10.1
244
+
245
+ ### Patch Changes
246
+
247
+ - Updated dependencies [cc6ad93]
248
+ - Updated dependencies [cc6ad93]
249
+ - Updated dependencies [cc6ad93]
250
+ - @actuate-media/cms-core@0.100.0
251
+
252
+ ## 0.10.0
253
+
254
+ ### Minor Changes
255
+
256
+ - 80d4e5f: Marketing attribution tracking for forms — captures where every lead came from, automatically.
257
+
258
+ **cms-core**: rebuilt `forms/attribution` (now also published at `@actuate-media/cms-core/forms/attribution`) with a first-touch (30-day) / last-touch (24-hour) model merged at submit, the full ad click-ID registry (gclid, fbclid, msclkid, ttclid, li_fat_id, dclid, twclid, rdt_cid + long-tail IDs in `extraIds`), and referrer classification into marketing channels (paid / organic search / social / email / **ai** / referral / direct) with friendly source names ("ChatGPT" instead of "chat.openai.com"). Form entry payloads now expose the full `attribution` blob, CSV exports gained Source / Medium / Campaign / Channel / Referrer / Landing Page columns, and `form.submitted` webhooks forward the merged attribution to CRM consumers. Note: `AttributionData` gained required fields (`channel`, `referrerName`, `extraIds`, `firstTouchAt`, `lastTouchAt`, `version`) and `clickIds` grew from 5 to 8 networks.
259
+
260
+ **sections-react**: `<ActuateForm>` now records an attribution touch on mount and attaches the merged first/last-touch payload to every submission — no setup required. Capture is consent-gated when `@actuate-media/plugin-consent` is installed (waits for an analytics grant; proceeds when the plugin is absent). New `<AttributionTracker />` component for the site layout improves first-touch fidelity across multi-page journeys.
261
+
262
+ **cms-admin**: the form entry detail pane now shows the full attribution picture — channel with friendly source name, source/medium/campaign/term/content, landing page, referrer, device type, first-touch date, and any ad click IDs — with graceful fallback to the legacy UTM columns for older entries.
263
+
264
+ ### Patch Changes
265
+
266
+ - Updated dependencies [80d4e5f]
267
+ - Updated dependencies [80d4e5f]
268
+ - @actuate-media/cms-core@0.99.0
269
+
270
+ ## 0.9.0
271
+
272
+ ### Minor Changes
273
+
274
+ - 21aa417: Consolidate the two form-editing surfaces onto the typed Forms API and make GA4 form analytics work end-to-end.
275
+
276
+ **cms-admin** — The Edit Form page is rebuilt as the canonical full-page form editor, backed by the same typed Forms API as the Forms list's inline Schema pane (no more legacy `/collections/forms` writes that bypassed schema versioning). It now covers everything in one place: Details (name/description/status + post-submit confirmation), Fields (versioned schema editor), **Notifications** (previously only reachable from the Schema pane), Analytics (GA4), Embed, and Integrations (webhooks). Confirmation settings now persist to `successMessage` / `redirectUrl` — the fields the public submission pipeline actually reads (the old editor wrote a `confirmation` object the runtime ignored). New forms are created through `POST /forms`, gaining slug generation, an initial schema version, and notification defaults, then route into the full editor.
277
+
278
+ **cms-core** — `FormDefinition` gains a sanitized `analytics` (GA4) config, persisted via the forms service (`createForm` / `updateForm` / `duplicateForm`) and exposed on the public form schema only when tracking is enabled. New `normalizeAnalyticsConfig` export and a client-safe `@actuate-media/cms-core/forms/analytics` subpath export.
279
+
280
+ **sections-react** — `<ActuateForm>` now fires GA4 `form_start` / `form_submit` / `form_error` events (with optional conversion value) when the form has analytics enabled. Also fixes the success state to read the submit endpoint's `confirmation` _object_ (`{ type, message, redirectUrl }`) — previously it was treated as a string, which broke the success message and ignored server-driven redirects. New `resolveSubmitOutcome` helper with regression coverage.
281
+
282
+ **plugin-forms** — The `forms` collection field map now declares every key the typed forms service persists (`description`, `notificationSettings`, `embedSettings`, `spamSettings`, `successMessage`, `redirectUrl`, `analytics`, `activeSchemaVersionId`, …). The data layer strips undeclared keys on write, so consumer apps registering this plugin would previously drop notification/embed/spam settings silently. Status options now match the typed `FormStatus` (`active` / `draft` / `archived`).
283
+
284
+ ### Patch Changes
285
+
286
+ - Updated dependencies [c6b006c]
287
+ - Updated dependencies [21aa417]
288
+ - @actuate-media/cms-core@0.98.0
289
+
290
+ ## 0.8.29
291
+
292
+ ### Patch Changes
293
+
294
+ - Updated dependencies [fb89234]
295
+ - @actuate-media/cms-core@0.97.0
296
+
297
+ ## 0.8.28
298
+
299
+ ### Patch Changes
300
+
301
+ - Updated dependencies [fdfae4c]
302
+ - @actuate-media/cms-core@0.96.0
303
+
304
+ ## 0.8.27
305
+
306
+ ### Patch Changes
307
+
308
+ - Updated dependencies [2ccc0a7]
309
+ - @actuate-media/cms-core@0.95.1
310
+
311
+ ## 0.8.26
312
+
313
+ ### Patch Changes
314
+
315
+ - Updated dependencies [0bd5153]
316
+ - @actuate-media/cms-core@0.95.0
317
+
318
+ ## 0.8.25
319
+
320
+ ### Patch Changes
321
+
322
+ - Updated dependencies [d9096d9]
323
+ - @actuate-media/cms-core@0.94.0
324
+
325
+ ## 0.8.24
326
+
327
+ ### Patch Changes
328
+
329
+ - Updated dependencies [fe2b661]
330
+ - @actuate-media/cms-core@0.93.11
331
+
332
+ ## 0.8.23
333
+
334
+ ### Patch Changes
335
+
336
+ - Updated dependencies [78c6d0f]
337
+ - @actuate-media/cms-core@0.93.10
338
+
339
+ ## 0.8.22
340
+
341
+ ### Patch Changes
342
+
343
+ - Updated dependencies [06e7fbc]
344
+ - @actuate-media/cms-core@0.93.9
345
+
346
+ ## 0.8.21
347
+
348
+ ### Patch Changes
349
+
350
+ - Updated dependencies [28dd310]
351
+ - @actuate-media/cms-core@0.93.8
352
+
353
+ ## 0.8.20
354
+
355
+ ### Patch Changes
356
+
357
+ - Updated dependencies [ac2cf04]
358
+ - @actuate-media/cms-core@0.93.7
359
+
360
+ ## 0.8.19
361
+
362
+ ### Patch Changes
363
+
364
+ - Updated dependencies [886238a]
365
+ - @actuate-media/cms-core@0.93.6
366
+
367
+ ## 0.8.18
368
+
369
+ ### Patch Changes
370
+
371
+ - Updated dependencies [430ae43]
372
+ - @actuate-media/cms-core@0.93.5
373
+
374
+ ## 0.8.17
375
+
376
+ ### Patch Changes
377
+
378
+ - Updated dependencies [899ca9a]
379
+ - @actuate-media/cms-core@0.93.4
380
+
381
+ ## 0.8.16
382
+
383
+ ### Patch Changes
384
+
385
+ - Updated dependencies [77b3922]
386
+ - @actuate-media/cms-core@0.93.3
387
+
388
+ ## 0.8.15
389
+
390
+ ### Patch Changes
391
+
392
+ - Updated dependencies [4421c32]
393
+ - @actuate-media/cms-core@0.93.2
394
+
395
+ ## 0.8.14
396
+
397
+ ### Patch Changes
398
+
399
+ - Updated dependencies [898ec8b]
400
+ - @actuate-media/cms-core@0.93.1
401
+
402
+ ## 0.8.13
403
+
404
+ ### Patch Changes
405
+
406
+ - Updated dependencies [c231dd0]
407
+ - @actuate-media/cms-core@0.93.0
408
+
409
+ ## 0.8.12
410
+
411
+ ### Patch Changes
412
+
413
+ - Updated dependencies [cc18833]
414
+ - @actuate-media/cms-core@0.92.0
415
+
416
+ ## 0.8.11
417
+
418
+ ### Patch Changes
419
+
420
+ - Updated dependencies [f9513f3]
421
+ - @actuate-media/cms-core@0.91.1
422
+
423
+ ## 0.8.10
424
+
425
+ ### Patch Changes
426
+
427
+ - 041a228: Add the MIT `license` field to every published package (previously missing) and correct `repository.url` to `github.com/actuate-media/actuatecms` (13 packages carried the wrong org).
428
+ - Updated dependencies [041a228]
429
+ - Updated dependencies [b53b4a4]
430
+ - Updated dependencies [041a228]
431
+ - Updated dependencies [de419f2]
432
+ - Updated dependencies [898a3f8]
433
+ - Updated dependencies [4198920]
434
+ - Updated dependencies [d6665dd]
435
+ - @actuate-media/cms-core@0.91.0
436
+
437
+ ## 0.8.9
438
+
439
+ ### Patch Changes
440
+
441
+ - Updated dependencies [3b6d7b3]
442
+ - @actuate-media/cms-core@0.90.1
443
+
444
+ ## 0.8.8
445
+
446
+ ### Patch Changes
447
+
448
+ - Updated dependencies [4afb589]
449
+ - Updated dependencies [4afb589]
450
+ - Updated dependencies [4afb589]
451
+ - Updated dependencies [4afb589]
452
+ - Updated dependencies [4afb589]
453
+ - Updated dependencies [4afb589]
454
+ - Updated dependencies [4afb589]
455
+ - @actuate-media/cms-core@0.90.0
456
+
457
+ ## 0.8.7
458
+
459
+ ### Patch Changes
460
+
461
+ - Updated dependencies [41bd56a]
462
+ - @actuate-media/cms-core@0.89.0
463
+
464
+ ## 0.8.6
465
+
466
+ ### Patch Changes
467
+
468
+ - Updated dependencies [9046381]
469
+ - @actuate-media/cms-core@0.88.0
470
+
471
+ ## 0.8.5
472
+
473
+ ### Patch Changes
474
+
475
+ - Updated dependencies [163ae1d]
476
+ - @actuate-media/cms-core@0.87.0
477
+
478
+ ## 0.8.4
479
+
480
+ ### Patch Changes
481
+
482
+ - Updated dependencies [7c105f0]
483
+ - @actuate-media/cms-core@0.86.0
484
+
485
+ ## 0.8.3
486
+
487
+ ### Patch Changes
488
+
489
+ - Updated dependencies [685958f]
490
+ - @actuate-media/cms-core@0.85.3
491
+
492
+ ## 0.8.2
493
+
494
+ ### Patch Changes
495
+
496
+ - Updated dependencies [6a6101a]
497
+ - @actuate-media/cms-core@0.85.2
498
+
499
+ ## 0.8.1
500
+
501
+ ### Patch Changes
502
+
503
+ - Updated dependencies [6d254f3]
504
+ - @actuate-media/cms-core@0.85.1
505
+
506
+ ## 0.8.0
507
+
508
+ ### Minor Changes
509
+
510
+ - 1a3cf91: Agent-ready public forms (WebMCP): declarative tool metadata on public form schemas, zero-JS `renderPublicFormHtml` / `ActuateFormHtml`, urlencoded submit parsing, HTML confirmation responses, scaffold form prefetch, `actuate doctor` check, and docs.
511
+
512
+ ### Patch Changes
513
+
514
+ - Updated dependencies [1a3cf91]
515
+ - @actuate-media/cms-core@0.85.0
516
+
517
+ ## 0.7.1
518
+
519
+ ### Patch Changes
520
+
521
+ - a6360cc: Forms launch kit (Batch 7): Integrations tab with Zapier Catch Hook helper and webhook CRUD in the form schema drawer; marketing seed contact form + /contact page; ActuateForm success focus; actuate doctor forms/CRM checks; forms-and-integrations docs.
522
+
523
+ ## 0.7.0
524
+
525
+ ### Minor Changes
526
+
527
+ - 6592e09: Add the `widget-embed` section type for lazy-loaded Elfsight, Trustpilot, and Calendly widgets with reserved min-height (CLS-safe) and optional cookie-consent gating via plugin-consent.
528
+
529
+ ### Patch Changes
530
+
531
+ - Updated dependencies [e1ad198]
532
+ - Updated dependencies [a59a501]
533
+ - Updated dependencies [e1ad198]
534
+ - Updated dependencies [6592e09]
535
+ - @actuate-media/cms-core@0.84.0
536
+
537
+ ## 0.6.17
538
+
539
+ ### Patch Changes
540
+
541
+ - Updated dependencies [3983016]
542
+ - @actuate-media/cms-core@0.83.0
543
+
544
+ ## 0.6.16
545
+
546
+ ### Patch Changes
547
+
548
+ - Updated dependencies [c4c41f3]
549
+ - Updated dependencies [b22a7bc]
550
+ - @actuate-media/cms-core@0.82.0
551
+
552
+ ## 0.6.15
553
+
554
+ ### Patch Changes
555
+
556
+ - Updated dependencies [b8b930b]
557
+ - @actuate-media/cms-core@0.81.0
558
+
559
+ ## 0.6.14
560
+
561
+ ### Patch Changes
562
+
563
+ - Updated dependencies [af18915]
564
+ - @actuate-media/cms-core@0.80.1
565
+
566
+ ## 0.6.13
567
+
568
+ ### Patch Changes
569
+
570
+ - Updated dependencies [5fce703]
571
+ - @actuate-media/cms-core@0.80.0
572
+
573
+ ## 0.6.12
574
+
575
+ ### Patch Changes
576
+
577
+ - Updated dependencies [8229d94]
578
+ - @actuate-media/cms-core@0.79.3
579
+
580
+ ## 0.6.11
581
+
582
+ ### Patch Changes
583
+
584
+ - Updated dependencies [2966293]
585
+ - @actuate-media/cms-core@0.79.2
586
+
587
+ ## 0.6.10
588
+
589
+ ### Patch Changes
590
+
591
+ - Updated dependencies [0ad67c9]
592
+ - @actuate-media/cms-core@0.79.1
593
+
594
+ ## 0.6.9
595
+
596
+ ### Patch Changes
597
+
598
+ - Updated dependencies [39e2419]
599
+ - @actuate-media/cms-core@0.79.0
600
+
601
+ ## 0.6.8
602
+
603
+ ### Patch Changes
604
+
605
+ - Updated dependencies [bc51a1d]
606
+ - @actuate-media/cms-core@0.78.0
607
+
608
+ ## 0.6.7
609
+
610
+ ### Patch Changes
611
+
612
+ - Updated dependencies [9d4e24c]
613
+ - Updated dependencies [869620b]
614
+ - @actuate-media/cms-core@0.77.3
615
+
616
+ ## 0.6.6
617
+
618
+ ### Patch Changes
619
+
620
+ - Updated dependencies [9875fa3]
621
+ - @actuate-media/cms-core@0.77.2
622
+
623
+ ## 0.6.5
624
+
625
+ ### Patch Changes
626
+
627
+ - Updated dependencies [4dafd90]
628
+ - @actuate-media/cms-core@0.77.1
629
+
630
+ ## 0.6.4
631
+
632
+ ### Patch Changes
633
+
634
+ - Updated dependencies [d97e388]
635
+ - Updated dependencies [d97e388]
636
+ - Updated dependencies [d97e388]
637
+ - Updated dependencies [d97e388]
638
+ - @actuate-media/cms-core@0.77.0
639
+
640
+ ## 0.6.3
641
+
642
+ ### Patch Changes
643
+
644
+ - Updated dependencies [7a6a140]
645
+ - @actuate-media/cms-core@0.76.3
646
+
647
+ ## 0.6.2
648
+
649
+ ### Patch Changes
650
+
651
+ - Updated dependencies [90b5826]
652
+ - @actuate-media/cms-core@0.76.2
653
+
654
+ ## 0.6.1
655
+
656
+ ### Patch Changes
657
+
658
+ - Updated dependencies [4899af9]
659
+ - Updated dependencies [df1176a]
660
+ - @actuate-media/cms-core@0.76.1
661
+
662
+ ## 0.6.0
663
+
664
+ ### Minor Changes
665
+
666
+ - c656ddc: Add an `embed` (video) section type for YouTube, Vimeo, and Loom.
667
+ - **cms-core:** new `embed` section in the registry (`url`, `title`, `ratio`, `caption`) plus a shared, deterministic `parseEmbed()` provider allowlist (`@actuate-media/cms-core/page-sections`). Section validation rejects any URL that isn't a recognised YouTube/Vimeo/Loom link, so an arbitrary URL can never reach an iframe.
668
+ - **sections-react:** `EmbedSection` renderer — a lazy-loaded provider iframe inside a fixed aspect-ratio box (16:9 / 4:3 / 1:1 / 9:16) so the embed reserves its space and never causes layout shift (CLS). The URL is re-parsed through the same allowlist at render time.
669
+ - **cms-admin:** matching editor-canvas body for `embed` (provider + ratio placeholder) so the page/post editors preview the section instead of showing a generic "custom section" placeholder.
670
+ - **mcp-server:** `list_section_types` description now lists `embed`.
671
+
672
+ ### Patch Changes
673
+
674
+ - Updated dependencies [c656ddc]
675
+ - @actuate-media/cms-core@0.76.0
676
+
677
+ ## 0.5.1
678
+
679
+ ### Patch Changes
680
+
681
+ - Updated dependencies [5446671]
682
+ - @actuate-media/cms-core@0.75.0
683
+
684
+ ## 0.5.0
685
+
686
+ ### Minor Changes
687
+
688
+ - 2b61b66: Core Web Vitals: give the `hero` section an optional image rendered as the page LCP, and serve AVIF in scaffolded sites.
689
+ - **Hero image (LCP):** the canonical `hero` section now has an optional `imageUrl`/`imageAlt` field. When set, the renderer draws it below the copy as the page's single priority (eager, `fetchpriority=high`) image with a full-width `sizes` hint and intrinsic dimensions — the explicit, dimensioned LCP element the best-practice spec calls for (rather than leaving the LCP to chance). Alt text is required when an image is set (existing accessibility rule). Dimensions are backfilled by the `/resolve` enrichment (hero is now enriched like `feature`).
690
+ - **AVIF delivery:** `create-actuate-cms` now sets `images.formats: ['image/avif', 'image/webp']` so scaffolded sites serve AVIF (≈50% smaller than JPEG) first, then WebP — a direct LCP win via `next/image` format negotiation.
691
+
692
+ ### Patch Changes
693
+
694
+ - Updated dependencies [2b61b66]
695
+ - @actuate-media/cms-core@0.74.0
696
+
697
+ ## 0.4.1
698
+
699
+ ### Patch Changes
700
+
701
+ - Updated dependencies [7b7f0be]
702
+ - @actuate-media/cms-core@0.73.0
703
+
704
+ ## 0.4.0
705
+
706
+ ### Minor Changes
707
+
708
+ - 8a64a6e: Core Web Vitals: enforce the single-priority-image (LCP) policy and ship responsive `sizes` by default.
709
+
710
+ The section renderer now guarantees the key LCP/CLS image rules automatically, so an editor (or AI author) can't ship a slow page:
711
+ - **One priority image per page.** A new `LcpController` (exported `createLcpController`) grants the eager, `fetchpriority="high"` slot to the first image on the page; every other image lazy-loads. This replaces `PostHeader`'s hard-coded `priority` (which could collide with a section image). Pass one shared controller via `options.lcp` to both `PostHeader` and `Sections` to share the budget.
712
+ - **Responsive `sizes` everywhere.** Built-in renderers emit contextual `sizes` (full-width header, half-width feature, column-aware gallery via the exported `gallerySizes`) so mobile stops over-downloading the desktop image. `defaultRenderImage` now forwards `sizes` and sets `fetchPriority`.
713
+ - **No raw `<img>`.** The author-bio avatar now renders through `renderImage` (dimensioned, lazy) like every other image.
714
+ - `PostContext` gains `featuredImageWidth`/`featuredImageHeight` so the post header featured image can be dimensioned (CLS).
715
+
716
+ `create-actuate-cms`: the generated catch-all creates a per-request shared `LcpController` for the post header + body and forwards `sizes`/`fetchPriority` in its `next/image` fallback.
717
+
718
+ Note: `ResolvedRenderOptions` now includes a required `lcp` field — only affects code that constructs that internal type directly; consumers passing `RenderOptions` are unaffected (`lcp` is optional there).
719
+
720
+ ## 0.3.2
721
+
722
+ ### Patch Changes
723
+
724
+ - Updated dependencies [2fa4ebb]
725
+ - @actuate-media/cms-core@0.72.1
726
+
727
+ ## 0.3.1
728
+
729
+ ### Patch Changes
730
+
731
+ - Updated dependencies [6f140bc]
732
+ - @actuate-media/cms-core@0.72.0
733
+
734
+ ## 0.3.0
735
+
736
+ ### Minor Changes
737
+
738
+ - ab216f8: Export the `Img` helper for admin-safe image rendering in section components. Section components that `import next/image` directly break the post/page editor canvas (the admin runs the same components in a plain client bundle with no Next image pipeline). `Img` renders through `options.renderImage` — a `next/image`-backed optimizer on the public site, and Actuate's plain `<img>` renderer in the admin canvas — so one component works in both. Docs gain a "Rendering images in section components" section with the rule and pattern.
739
+
740
+ ## 0.2.25
741
+
742
+ ### Patch Changes
743
+
744
+ - Updated dependencies [1c81772]
745
+ - Updated dependencies [9e0d82b]
746
+ - @actuate-media/cms-core@0.71.1
747
+
748
+ ## 0.2.24
749
+
750
+ ### Patch Changes
751
+
752
+ - Updated dependencies [9f5e5dc]
753
+ - @actuate-media/cms-core@0.71.0
754
+
755
+ ## 0.2.23
756
+
757
+ ### Patch Changes
758
+
759
+ - Updated dependencies [0bcc567]
760
+ - @actuate-media/cms-core@0.70.0
761
+
762
+ ## 0.2.22
763
+
764
+ ### Patch Changes
765
+
766
+ - Updated dependencies [a889054]
767
+ - @actuate-media/cms-core@0.69.0
768
+
769
+ ## 0.2.21
770
+
771
+ ### Patch Changes
772
+
773
+ - Updated dependencies [4bf16c4]
774
+ - Updated dependencies [47bed20]
775
+ - @actuate-media/cms-core@0.68.0
776
+
777
+ ## 0.2.20
778
+
779
+ ### Patch Changes
780
+
781
+ - Updated dependencies [3ab0649]
782
+ - Updated dependencies [5545bfd]
783
+ - Updated dependencies [3f7fbf3]
784
+ - Updated dependencies [bf00622]
785
+ - Updated dependencies [f05c89b]
786
+ - Updated dependencies [eb3786d]
787
+ - Updated dependencies [88161e8]
788
+ - Updated dependencies [2f1f398]
789
+ - Updated dependencies [a3c5904]
790
+ - Updated dependencies [ee53cfc]
791
+ - Updated dependencies [218c5b0]
792
+ - Updated dependencies [df5d0de]
793
+ - @actuate-media/cms-core@0.67.0
794
+
795
+ ## 0.2.19
796
+
797
+ ### Patch Changes
798
+
799
+ - Updated dependencies [a6a17e9]
800
+ - @actuate-media/cms-core@0.66.0
801
+
802
+ ## 0.2.18
803
+
804
+ ### Patch Changes
805
+
806
+ - Updated dependencies [3e2daa4]
807
+ - @actuate-media/cms-core@0.65.0
808
+
809
+ ## 0.2.17
810
+
811
+ ### Patch Changes
812
+
813
+ - Updated dependencies [135d0c7]
814
+ - @actuate-media/cms-core@0.64.0
815
+
816
+ ## 0.2.16
817
+
818
+ ### Patch Changes
819
+
820
+ - Updated dependencies [e3da3bc]
821
+ - @actuate-media/cms-core@0.63.0
822
+
823
+ ## 0.2.15
824
+
825
+ ### Patch Changes
826
+
827
+ - Updated dependencies [d6b21e7]
828
+ - @actuate-media/cms-core@0.62.0
829
+
830
+ ## 0.2.14
831
+
832
+ ### Patch Changes
833
+
834
+ - Updated dependencies [0c3a6eb]
835
+ - @actuate-media/cms-core@0.61.0
836
+
837
+ ## 0.2.13
838
+
839
+ ### Patch Changes
840
+
841
+ - 854152d: Developer experience improvements from external-consumer feedback:
842
+ - Every published package now ships its `CHANGELOG.md` in the npm tarball, and packages that were missing a `README.md` (cli, cms-admin, cms-core, import, platform-vercel, all plugins, sections-react) now have one — so release notes and usage docs are visible on npmjs.com and in `node_modules`.
843
+ - New client-safe form validation entry point: `@actuate-media/cms-core/forms/client` exports `validateFormFieldClient()`, `validateFormValuesClient()`, visibility/conditional helpers, and the exact `FORM_EMAIL_RE` / `FORM_PHONE_RE` regexes the server enforces — zero Node dependencies, so public-site forms can mirror server rules without reimplementing them. The server validator now imports the same primitives, so client and server can never drift.
844
+
845
+ - Updated dependencies [854152d]
846
+ - Updated dependencies [bf5f857]
847
+ - @actuate-media/cms-core@0.60.0
848
+
849
+ ## 0.2.12
850
+
851
+ ### Patch Changes
852
+
853
+ - Updated dependencies [15b3f45]
854
+ - @actuate-media/cms-core@0.59.1
855
+
856
+ ## 0.2.11
857
+
858
+ ### Patch Changes
859
+
860
+ - Updated dependencies [f962e2d]
861
+ - Updated dependencies [73a117a]
862
+ - @actuate-media/cms-core@0.59.0
863
+
864
+ ## 0.2.10
865
+
866
+ ### Patch Changes
867
+
868
+ - Updated dependencies [363bb3e]
869
+ - @actuate-media/cms-core@0.58.0
870
+
871
+ ## 0.2.9
872
+
873
+ ### Patch Changes
874
+
875
+ - Updated dependencies [a5f8bc0]
876
+ - @actuate-media/cms-core@0.57.1
877
+
878
+ ## 0.2.8
879
+
880
+ ### Patch Changes
881
+
882
+ - Updated dependencies [8e73cf5]
883
+ - @actuate-media/cms-core@0.57.0
884
+
885
+ ## 0.2.7
886
+
887
+ ### Patch Changes
888
+
889
+ - Updated dependencies [99565a1]
890
+ - @actuate-media/cms-core@0.56.0
891
+
892
+ ## 0.2.6
893
+
894
+ ### Patch Changes
895
+
896
+ - Updated dependencies [74662c0]
897
+ - @actuate-media/cms-core@0.55.0
898
+
899
+ ## 0.2.5
900
+
901
+ ### Patch Changes
902
+
903
+ - Updated dependencies [29f32ba]
904
+ - @actuate-media/cms-core@0.54.0
905
+
906
+ ## 0.2.4
907
+
908
+ ### Patch Changes
909
+
910
+ - Updated dependencies [aa4bd1a]
911
+ - @actuate-media/cms-core@0.53.0
912
+
913
+ ## 0.2.3
914
+
915
+ ### Patch Changes
916
+
917
+ - Updated dependencies [01eef99]
918
+ - @actuate-media/cms-core@0.52.0
919
+
920
+ ## 0.2.2
921
+
922
+ ### Patch Changes
923
+
924
+ - Updated dependencies [aeee3a4]
925
+ - @actuate-media/cms-core@0.51.2
926
+
927
+ ## 0.2.1
928
+
929
+ ### Patch Changes
930
+
931
+ - Updated dependencies [f88a406]
932
+ - @actuate-media/cms-core@0.51.1
933
+
934
+ ## 0.2.0
935
+
936
+ ### Minor Changes
937
+
938
+ - 204da7a: WS-E (E3): media resolution + responsive images in the public render path.
939
+ - **sections-react:** new pluggable `renderImage` `RenderOptions` hook (with
940
+ exported `RenderImage`/`RenderImageProps` types and a `defaultRenderImage`).
941
+ The default emits a lazy, `decoding="async"` `<img>` and forwards intrinsic
942
+ `width`/`height` when known; a Next.js consumer can pass a `next/image`-backed
943
+ renderer for responsive `srcset` + optimization. The `feature`, `gallery`, and
944
+ post-header images now route through it (`<PostHeader>` gains an optional
945
+ `options` prop). The package stays React-only — no `next` dependency.
946
+ - **cms-core:** the `/resolve` endpoint now enriches section images with
947
+ intrinsic `width`/`height` and library `altText`, matched from `actuate_media`
948
+ by stored URL (`storageKey`/`publicUrl`). Additive and best-effort — the
949
+ stored document is never mutated and a lookup failure never breaks resolve.
950
+ `feature` sections gain `imageWidth`/`imageHeight` (+ backfilled `imageAlt`);
951
+ `gallery` rows gain `width`/`height` (+ backfilled `alt`).
952
+ - **create-actuate-cms:** the generated catch-all page renders CMS images via a
953
+ `next/image`-backed `renderImage` (falling back to a fluid `<img>` when the
954
+ CMS doesn't know dimensions), and `next.config` now allow-lists the storage
955
+ host under `images.remotePatterns` so optimization works out of the box.
956
+
957
+ - 2f18c56: WS-E (E2): public form rendering — a built site can now render and submit a CMS form end to end.
958
+ - **sections-react:** new `<ActuateForm>` Client Component fetches the public form
959
+ schema (`GET /api/cms/public/forms/:slug`), renders the fields (text/email/
960
+ url/tel/number/date, textarea, select, checkbox, radio), and submits to the
961
+ schema's `submitPath`. Spam protection is wired automatically: a hidden
962
+ honeypot (keyed from `spam.honeypotFieldKey`), an `elapsedMs` "time to submit"
963
+ timer, and an optional consumer-supplied `captchaToken`. Pre-fetch a schema via
964
+ the `form` prop to skip the round-trip (SSR/streaming). Adds a `baseUrl`
965
+ `RenderOptions` field (defaults to same-origin). Exposes pure, tested helpers
966
+ (`coercePublicForm`, `buildSubmitBody`, `fieldControl`, `firstMissingRequired`).
967
+ - **cms-core:** new canonical `form` section type. Set `content.formSlug` (plus
968
+ optional heading/intro) on any page or post and the matching renderer embeds
969
+ the form. The registry-drift guard now covers it (renderer ↔ type).
970
+ - **cms-admin:** the form Embed panel now shows the real public endpoints
971
+ (`/api/cms/public/forms/:slug` + `/submit`) and a copy-paste `<ActuateForm>`
972
+ snippet, replacing the previously-advertised `/api/forms/*`, iframe, and
973
+ `embed.js` routes that were never implemented. Adds a `mail` section icon.
974
+
975
+ - e2e0bd7: WS-E (E4): public navigation endpoint + navigation rendering in the scaffold.
976
+ - **cms-core:** new unauthenticated `GET /api/cms/public/navigations/:slug` that
977
+ returns a clean `{ name, slug, location, items }` tree. Like globals it is site
978
+ chrome — not status-gated — and safe when the navigation plugin isn't installed
979
+ (no match → 404). A shared, pure `coercePublicNavItems` helper sanitizes the
980
+ open `data.items` JSON: drops unlabeled nodes, strips internal `id`s, caps
981
+ recursion depth, and only passes through `_blank`/`_self` targets. Both
982
+ `createSiteClient` and `createServerSiteClient` gain `getNavigation(slug)`
983
+ returning `PublicNavigation | null`, and `PublicNavigation` / `PublicNavItem`
984
+ are now exported types.
985
+ - **sections-react:** new presentational `<SiteNav>` — an accessible `<nav>`
986
+ landmark whose submenus use native `<details>`/`<summary>` disclosure
987
+ (keyboard-operable, no client JS). New-tab links get
988
+ `rel="noopener noreferrer"`; an empty menu renders nothing. Exports `SiteNav`
989
+ plus `SiteNavProps`/`SiteNavItem`.
990
+ - **create-actuate-cms:** `lib/cms.ts` re-exports `getNavigation`, and the
991
+ generated site layout fetches the `main` menu and renders a header with the
992
+ site name + `<SiteNav>`, degrading gracefully to just the name when no menu
993
+ exists yet.
994
+
995
+ ### Patch Changes
996
+
997
+ - Updated dependencies [a413616]
998
+ - Updated dependencies [204da7a]
999
+ - Updated dependencies [2f18c56]
1000
+ - Updated dependencies [e2e0bd7]
1001
+ - @actuate-media/cms-core@0.51.0
1002
+
1003
+ ## 0.1.2
1004
+
1005
+ ### Patch Changes
1006
+
1007
+ - Updated dependencies [d7a144c]
1008
+ - @actuate-media/cms-core@0.50.0
1009
+
1010
+ ## 0.1.1
1011
+
1012
+ ### Patch Changes
1013
+
1014
+ - Updated dependencies [9ba332c]
1015
+ - @actuate-media/cms-core@0.49.0
1016
+
1017
+ ## 0.1.0
1018
+
1019
+ ### Minor Changes
1020
+
1021
+ - 989bd09: New package: a public React renderer for Actuate's canonical page-content
1022
+ contract (ADR 0001 — `data.sections: PageSection[]`).
1023
+ - `<Sections sections={...} ctx={...} />` renders all 10 built-in section types
1024
+ (hero, text, feature, stats, cta, article-body, quote, author-bio,
1025
+ related-posts, gallery) with zero hand-written mapper. SSR-first (safe in
1026
+ React Server Components).
1027
+ - `<PostHeader config={...} ctx={...} />` renders a post header from its
1028
+ template config + the post's own fields.
1029
+ - Consumer-controlled renderer registry: override any section type per-render
1030
+ via the `renderers` prop, or app-wide via `registerSectionRenderer()`.
1031
+ Resolution precedence: prop > global registry > built-in default > skip.
1032
+ - Rich-text fields go through an injectable `options.sanitizeHtml` hook
1033
+ (default identity; Actuate sanitizes on write, pass a sanitizer for
1034
+ defense-in-depth or third-party HTML).
1035
+ - A registry-drift guard test keeps the renderer map in lockstep with the
1036
+ cms-core section registry, so no section type can ship without a renderer
1037
+ (and vice-versa).