@elytracms/core 0.0.7 → 0.0.9

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 (199) hide show
  1. package/dist/clipboard/build.js.map +1 -1
  2. package/dist/clipboard/clipboard.js.map +1 -1
  3. package/dist/clipboard/fragment.js.map +1 -1
  4. package/dist/clipboard/html.js.map +1 -1
  5. package/dist/clipboard/index.js.map +1 -1
  6. package/dist/clipboard/references.js.map +1 -1
  7. package/dist/clipboard/serialize.js.map +1 -1
  8. package/dist/cms-core/collection-shape.d.ts +43 -0
  9. package/dist/cms-core/collection-shape.js +129 -0
  10. package/dist/cms-core/collection-shape.js.map +1 -0
  11. package/dist/cms-core/collections.d.ts +5 -6
  12. package/dist/cms-core/collections.js +26 -13
  13. package/dist/cms-core/collections.js.map +1 -1
  14. package/dist/cms-core/documents.d.ts +1 -0
  15. package/dist/cms-core/documents.js +10 -0
  16. package/dist/cms-core/documents.js.map +1 -1
  17. package/dist/cms-core/envelopes.js.map +1 -1
  18. package/dist/cms-core/fields.js.map +1 -1
  19. package/dist/cms-core/fixtures.js.map +1 -1
  20. package/dist/cms-core/hierarchy.js.map +1 -1
  21. package/dist/cms-core/index.d.ts +2 -0
  22. package/dist/cms-core/index.js +2 -0
  23. package/dist/cms-core/index.js.map +1 -1
  24. package/dist/cms-core/infer.js.map +1 -1
  25. package/dist/cms-core/issues.d.ts +10 -0
  26. package/dist/cms-core/issues.js +13 -0
  27. package/dist/cms-core/issues.js.map +1 -1
  28. package/dist/cms-core/json-schema.js.map +1 -1
  29. package/dist/cms-core/localization.js.map +1 -1
  30. package/dist/cms-core/nesting-depth.d.ts +44 -0
  31. package/dist/cms-core/nesting-depth.js +50 -0
  32. package/dist/cms-core/nesting-depth.js.map +1 -0
  33. package/dist/cms-core/routes.js.map +1 -1
  34. package/dist/cms-core/self-type.js.map +1 -1
  35. package/dist/cms-core/url-for-document.js.map +1 -1
  36. package/dist/cms-core/validate-document.d.ts +8 -0
  37. package/dist/cms-core/validate-document.js +35 -0
  38. package/dist/cms-core/validate-document.js.map +1 -1
  39. package/dist/cms-core/versions.d.ts +1 -0
  40. package/dist/cms-core/versions.js.map +1 -1
  41. package/dist/collaboration/approval.js.map +1 -1
  42. package/dist/collaboration/collaboration.js.map +1 -1
  43. package/dist/collaboration/comments.js.map +1 -1
  44. package/dist/collaboration/core.js.map +1 -1
  45. package/dist/collaboration/index.js.map +1 -1
  46. package/dist/collaboration/presence.js.map +1 -1
  47. package/dist/collaboration/publishing.js.map +1 -1
  48. package/dist/collaboration/versions.js.map +1 -1
  49. package/dist/component-registry/index.js.map +1 -1
  50. package/dist/component-registry/issues.js.map +1 -1
  51. package/dist/component-registry/manifest.js.map +1 -1
  52. package/dist/component-registry/registry.js.map +1 -1
  53. package/dist/content/__fixtures__/filterable-collections.js.map +1 -1
  54. package/dist/content/__fixtures__/sample-accessor-types.js.map +1 -1
  55. package/dist/content/__fixtures__/sample-delivery-types.js.map +1 -1
  56. package/dist/content/assets.js.map +1 -1
  57. package/dist/content/binding-sources.js.map +1 -1
  58. package/dist/content/client.js.map +1 -1
  59. package/dist/content/codegen.js.map +1 -1
  60. package/dist/content/context.js.map +1 -1
  61. package/dist/content/cursor.js.map +1 -1
  62. package/dist/content/index.js.map +1 -1
  63. package/dist/content/locale.js.map +1 -1
  64. package/dist/content/perspective.js.map +1 -1
  65. package/dist/content/populate.js.map +1 -1
  66. package/dist/content/query.js.map +1 -1
  67. package/dist/content/raw.js.map +1 -1
  68. package/dist/content/resolve.js.map +1 -1
  69. package/dist/content/serialize.js.map +1 -1
  70. package/dist/content/tags.js.map +1 -1
  71. package/dist/data-binding/fixtures.js.map +1 -1
  72. package/dist/data-binding/index.js.map +1 -1
  73. package/dist/data-binding/issues.js.map +1 -1
  74. package/dist/data-binding/resolve.js.map +1 -1
  75. package/dist/data-binding/sample.js.map +1 -1
  76. package/dist/data-binding/sources.js.map +1 -1
  77. package/dist/data-binding/tokens.js.map +1 -1
  78. package/dist/design-tokens/css.js.map +1 -1
  79. package/dist/design-tokens/index.js.map +1 -1
  80. package/dist/design-tokens/style-guide.js.map +1 -1
  81. package/dist/design-tokens/tokens.js.map +1 -1
  82. package/dist/export-sync/builder-source.d.ts +1 -0
  83. package/dist/export-sync/builder-source.js.map +1 -1
  84. package/dist/export-sync/check.js.map +1 -1
  85. package/dist/export-sync/cli.js.map +1 -1
  86. package/dist/export-sync/core.js.map +1 -1
  87. package/dist/export-sync/eject.js.map +1 -1
  88. package/dist/export-sync/fixtures.js.map +1 -1
  89. package/dist/export-sync/generate.js.map +1 -1
  90. package/dist/export-sync/index.js.map +1 -1
  91. package/dist/export-sync/init.js.map +1 -1
  92. package/dist/export-sync/manifest-host.js.map +1 -1
  93. package/dist/export-sync/node.js.map +1 -1
  94. package/dist/export-sync/push.js.map +1 -1
  95. package/dist/export-sync/registry-sync-client.js.map +1 -1
  96. package/dist/export-sync/sync.js.map +1 -1
  97. package/dist/export-sync/typegen.js.map +1 -1
  98. package/dist/export-sync/validate.js.map +1 -1
  99. package/dist/export-sync/watch.js.map +1 -1
  100. package/dist/operations/assets.js.map +1 -1
  101. package/dist/operations/authorization.js.map +1 -1
  102. package/dist/operations/changesets.js.map +1 -1
  103. package/dist/operations/client.js.map +1 -1
  104. package/dist/operations/core.js.map +1 -1
  105. package/dist/operations/documents.d.ts +21 -0
  106. package/dist/operations/documents.js.map +1 -1
  107. package/dist/operations/graph.js.map +1 -1
  108. package/dist/operations/index.js.map +1 -1
  109. package/dist/operations/members.js.map +1 -1
  110. package/dist/operations/publishing.js.map +1 -1
  111. package/dist/operations/references.js.map +1 -1
  112. package/dist/operations/schema.d.ts +18 -0
  113. package/dist/operations/schema.js.map +1 -1
  114. package/dist/operations/tokens.js.map +1 -1
  115. package/dist/persistence/adapter.js.map +1 -1
  116. package/dist/persistence/assets.js.map +1 -1
  117. package/dist/persistence/backend-validation.js.map +1 -1
  118. package/dist/persistence/cli-tokens.js.map +1 -1
  119. package/dist/persistence/cms.d.ts +3 -0
  120. package/dist/persistence/cms.js.map +1 -1
  121. package/dist/persistence/contract-scenarios.js.map +1 -1
  122. package/dist/persistence/core.js.map +1 -1
  123. package/dist/persistence/graph.js.map +1 -1
  124. package/dist/persistence/index.js.map +1 -1
  125. package/dist/persistence/members.js.map +1 -1
  126. package/dist/persistence/publishing.js.map +1 -1
  127. package/dist/persistence/reference-extraction.js.map +1 -1
  128. package/dist/persistence/reference-indexing.js.map +1 -1
  129. package/dist/persistence/references.js.map +1 -1
  130. package/dist/persistence/seed.js.map +1 -1
  131. package/dist/persistence/self-maintaining-adapter.js.map +1 -1
  132. package/dist/plugins/asset-storage.js.map +1 -1
  133. package/dist/plugins/component-package.js.map +1 -1
  134. package/dist/plugins/data-sources.js.map +1 -1
  135. package/dist/plugins/examples.js.map +1 -1
  136. package/dist/plugins/export-targets.js.map +1 -1
  137. package/dist/plugins/field-types.js.map +1 -1
  138. package/dist/plugins/hooks.js.map +1 -1
  139. package/dist/plugins/index.js.map +1 -1
  140. package/dist/plugins/marketplace.js.map +1 -1
  141. package/dist/plugins/plugin.js.map +1 -1
  142. package/dist/plugins/templates.js.map +1 -1
  143. package/dist/project-graph/binding.js.map +1 -1
  144. package/dist/project-graph/container.js.map +1 -1
  145. package/dist/project-graph/edit.js.map +1 -1
  146. package/dist/project-graph/fixtures.js.map +1 -1
  147. package/dist/project-graph/ids.js.map +1 -1
  148. package/dist/project-graph/index.js.map +1 -1
  149. package/dist/project-graph/issues.js.map +1 -1
  150. package/dist/project-graph/json.js.map +1 -1
  151. package/dist/project-graph/node.js.map +1 -1
  152. package/dist/project-graph/normalize.js.map +1 -1
  153. package/dist/project-graph/serialize.js.map +1 -1
  154. package/dist/project-graph/structure.js.map +1 -1
  155. package/dist/project-graph/validate.js.map +1 -1
  156. package/dist/rich-text/adapter.js.map +1 -1
  157. package/dist/rich-text/dom-editor.js.map +1 -1
  158. package/dist/rich-text/embed.js.map +1 -1
  159. package/dist/rich-text/fixtures.js.map +1 -1
  160. package/dist/rich-text/html.js.map +1 -1
  161. package/dist/rich-text/index.js.map +1 -1
  162. package/dist/rich-text/markdown.js.map +1 -1
  163. package/dist/rich-text/portable-text.js.map +1 -1
  164. package/dist/rich-text/registry.js.map +1 -1
  165. package/dist/rich-text/render.js.map +1 -1
  166. package/dist/rich-text/schema.js.map +1 -1
  167. package/dist/rich-text/test-support.js.map +1 -1
  168. package/dist/runtime-renderer/client.js.map +1 -1
  169. package/dist/runtime-renderer/condition.js.map +1 -1
  170. package/dist/runtime-renderer/content-client.js.map +1 -1
  171. package/dist/runtime-renderer/context.js.map +1 -1
  172. package/dist/runtime-renderer/fallback.js.map +1 -1
  173. package/dist/runtime-renderer/index.js.map +1 -1
  174. package/dist/runtime-renderer/primitives.js.map +1 -1
  175. package/dist/runtime-renderer/render.d.ts +14 -1
  176. package/dist/runtime-renderer/render.js +126 -126
  177. package/dist/runtime-renderer/render.js.map +1 -1
  178. package/dist/runtime-renderer/rich-text.js.map +1 -1
  179. package/dist/starter-kits/index.js.map +1 -1
  180. package/dist/starter-kits/instantiate.js.map +1 -1
  181. package/dist/starter-kits/kit.js.map +1 -1
  182. package/dist/starter-kits/kits.js.map +1 -1
  183. package/dist/starter-kits/manifests.js.map +1 -1
  184. package/dist/starter-kits/upgrade.js.map +1 -1
  185. package/dist/starter-kits/validate.js.map +1 -1
  186. package/dist/studio-core/context.js.map +1 -1
  187. package/dist/studio-core/errors.js.map +1 -1
  188. package/dist/studio-core/fixtures.js.map +1 -1
  189. package/dist/studio-core/ids.js.map +1 -1
  190. package/dist/studio-core/index.js.map +1 -1
  191. package/dist/studio-core/issues.js.map +1 -1
  192. package/dist/studio-core/metadata.js.map +1 -1
  193. package/dist/studio-core/repository.js.map +1 -1
  194. package/dist/studio-core/sections.d.ts +1 -1
  195. package/dist/studio-core/sections.js.map +1 -1
  196. package/dist/studio-core/validate.js.map +1 -1
  197. package/dist/studio-core/workspace-config.d.ts +4 -0
  198. package/dist/studio-core/workspace-config.js.map +1 -1
  199. package/package.json +1 -1
@@ -41,8 +41,21 @@ export declare function createBlocksRenderer(ctx: RenderContext): (value: unknow
41
41
  * would resolve). Bound asset props resolve via bindings, and document asset FIELDS
42
42
  * resolve separately — neither uses the baked asset list, so neither is collected.
43
43
  * Lets a delivery host page-scope the baked assets to exactly what a page uses.
44
+ *
45
+ * Transclusion-aware (EC-270) via the shared {@link walkComposition} (EC-281): a
46
+ * reusable's transcluded `content` images are page-scoped too. Exactly like its
47
+ * relation sibling
48
+ * {@link collectReferencedRelations}: when `resolveRelation` is supplied, a static
49
+ * `relation` prop is followed into its populated target and the asset ids inside
50
+ * that target's composition-shaped fields (a `reusable`'s `content` blocks, which a
51
+ * component renders inline via `renderBlocks`) are collected too — otherwise a
52
+ * transcluded reusable block's image, baked nowhere in the page tree, resolves to
53
+ * null on the host and renders empty. Cycle-safe: a target already walked is never
54
+ * re-walked, so a self-referencing reusable terminates. Without `resolveRelation`
55
+ * (a host with no relation populate) the walk stays page-local, the same graceful
56
+ * degradation the relation collector gives.
44
57
  */
45
- export declare function collectReferencedAssetIds(node: ComponentNode, registry: ComponentRegistry, into?: Set<string>): Set<string>;
58
+ export declare function collectReferencedAssetIds(node: ComponentNode, registry: ComponentRegistry, into?: Set<string>, resolveRelation?: ResolveRelation, seen?: Set<string>): Set<string>;
46
59
  /**
47
60
  * Walk a composition (a page's blocks + its layout root) and POPULATE every static
48
61
  * `relation` prop it references into a serializable `{ "collection:id": target }`
@@ -244,6 +244,70 @@ function isUrlLike(value) {
244
244
  value.startsWith('data:') ||
245
245
  value.startsWith('blob:'));
246
246
  }
247
+ /**
248
+ * The one composition walk every page-scoping collector shares (EC-281). It
249
+ * traverses a node tree exactly as the renderer resolves it — each node, its
250
+ * composition-host composed blocks (`props[valueProp]`), its slot children, AND a
251
+ * populated relation target's composition-shaped fields (transclusion via
252
+ * `renderBlocks`) — crossing the transclusion boundary in EXACTLY ONE place,
253
+ * cycle-guarded by `seen` (`collection:id`).
254
+ *
255
+ * Before this, the asset / relation / listing collectors each re-implemented this
256
+ * skeleton, and a resolution concern that forgot to follow transclusion silently
257
+ * stopped at a reference — the recurring EC-262 / EC-256 / EC-270 bug class. Now a
258
+ * collector supplies a {@link CompositionWalkHooks} and cannot reintroduce that
259
+ * gap: if it walks at all, it transcludes. `resolveRelation` is injected (never
260
+ * imported), so this stays free of the content/persistence packages.
261
+ */
262
+ function walkComposition(nodes, registry, hooks, seen) {
263
+ for (const node of nodes) {
264
+ const manifest = registry.getManifest(node.componentId);
265
+ if (manifest) {
266
+ hooks.visitNode?.(node, manifest);
267
+ // Transclusion: follow each static `relation` prop into its populated target
268
+ // and recurse the target's composition-shaped fields. Only when a populate is
269
+ // wired — else relation props pass through raw at render (no inlined content).
270
+ if (hooks.resolveRelation) {
271
+ for (const [name, value] of Object.entries(node.props ?? {})) {
272
+ if (value.kind !== 'static')
273
+ continue;
274
+ const spec = manifest.props[name];
275
+ if (spec?.type !== 'relation')
276
+ continue;
277
+ const refs = spec.cardinality === 'many' ? (Array.isArray(value.value) ? value.value : []) : [value.value];
278
+ for (const raw of refs) {
279
+ const ref = relationRefOf(raw);
280
+ if (!ref)
281
+ continue;
282
+ const key = relationKey(ref);
283
+ hooks.onRelationRef?.(key, ref); // tag every pick, even an unresolved one
284
+ if (seen.has(key))
285
+ continue; // already walked → also terminates cycles
286
+ seen.add(key);
287
+ const target = hooks.resolveRelation(ref);
288
+ if (!target)
289
+ continue;
290
+ hooks.onRelationTarget?.(key, target);
291
+ for (const fieldValue of Object.values(target)) {
292
+ walkComposition(compositionRoots(fieldValue), registry, hooks, seen);
293
+ }
294
+ }
295
+ }
296
+ }
297
+ // A composition host stores its composed blocks in `props[valueProp]` (a blocks
298
+ // VALUE), not `node.slots`, so the slot recursion below misses them — walk them.
299
+ if (manifest.composition) {
300
+ const composed = node.props?.[manifest.composition.valueProp];
301
+ if (composed?.kind === 'static') {
302
+ walkComposition(compositionRoots(composed.value), registry, hooks, seen);
303
+ }
304
+ }
305
+ }
306
+ for (const children of Object.values(node.slots ?? {})) {
307
+ walkComposition(children, registry, hooks, seen);
308
+ }
309
+ }
310
+ }
247
311
  /**
248
312
  * Collect the asset ids a node tree resolves through `resolveAsset` (EC-205): the
249
313
  * STATIC `asset`-typed props holding a real asset id (not a passthrough URL/path).
@@ -252,30 +316,41 @@ function isUrlLike(value) {
252
316
  * would resolve). Bound asset props resolve via bindings, and document asset FIELDS
253
317
  * resolve separately — neither uses the baked asset list, so neither is collected.
254
318
  * Lets a delivery host page-scope the baked assets to exactly what a page uses.
319
+ *
320
+ * Transclusion-aware (EC-270) via the shared {@link walkComposition} (EC-281): a
321
+ * reusable's transcluded `content` images are page-scoped too. Exactly like its
322
+ * relation sibling
323
+ * {@link collectReferencedRelations}: when `resolveRelation` is supplied, a static
324
+ * `relation` prop is followed into its populated target and the asset ids inside
325
+ * that target's composition-shaped fields (a `reusable`'s `content` blocks, which a
326
+ * component renders inline via `renderBlocks`) are collected too — otherwise a
327
+ * transcluded reusable block's image, baked nowhere in the page tree, resolves to
328
+ * null on the host and renders empty. Cycle-safe: a target already walked is never
329
+ * re-walked, so a self-referencing reusable terminates. Without `resolveRelation`
330
+ * (a host with no relation populate) the walk stays page-local, the same graceful
331
+ * degradation the relation collector gives.
255
332
  */
256
- export function collectReferencedAssetIds(node, registry, into = new Set()) {
257
- const manifest = registry.getManifest(node.componentId);
258
- if (manifest) {
259
- for (const [name, value] of Object.entries(node.props ?? {})) {
260
- if (value.kind !== 'static')
261
- continue;
262
- const spec = manifest.props[name];
263
- if (spec?.type === 'asset') {
264
- const assetId = assetIdOfProp(value.value);
265
- if (assetId !== undefined)
266
- into.add(assetId);
267
- }
268
- else if (spec?.type === 'object') {
269
- // EC-253: a gallery/repeater prop nests asset ids — collect them too, so the
270
- // delivery host bakes every referenced asset and no nested image is missed.
271
- collectObjectPropAssetIds(spec.fields, spec.cardinality, value.value, into);
333
+ export function collectReferencedAssetIds(node, registry, into = new Set(), resolveRelation, seen = new Set()) {
334
+ walkComposition([node], registry, {
335
+ resolveRelation,
336
+ visitNode: (visited, manifest) => {
337
+ for (const [name, value] of Object.entries(visited.props ?? {})) {
338
+ if (value.kind !== 'static')
339
+ continue;
340
+ const spec = manifest.props[name];
341
+ if (spec?.type === 'asset') {
342
+ const assetId = assetIdOfProp(value.value);
343
+ if (assetId !== undefined)
344
+ into.add(assetId);
345
+ }
346
+ else if (spec?.type === 'object') {
347
+ // EC-253: a gallery/repeater prop nests asset ids collect them too, so
348
+ // the host bakes every referenced asset and no nested image is missed.
349
+ collectObjectPropAssetIds(spec.fields, spec.cardinality, value.value, into);
350
+ }
272
351
  }
273
- }
274
- }
275
- for (const children of Object.values(node.slots ?? {})) {
276
- for (const child of children)
277
- collectReferencedAssetIds(child, registry, into);
278
- }
352
+ },
353
+ }, seen);
279
354
  return into;
280
355
  }
281
356
  /**
@@ -301,66 +376,30 @@ export function collectReferencedAssetIds(node, registry, into = new Set()) {
301
376
  * pick that should appear the moment it publishes.
302
377
  */
303
378
  export function collectReferencedRelations(nodes, registry, resolveRelation, into = {}, refKeys) {
304
- for (const node of nodes) {
305
- const manifest = registry.getManifest(node.componentId);
306
- if (manifest) {
379
+ // Seed the cycle guard with what `into` already holds, preserving the old
380
+ // "a key already in the map is never re-walked" semantics for accumulating callers.
381
+ walkComposition(nodes, registry, {
382
+ resolveRelation,
383
+ onRelationRef: (key) => refKeys?.add(key), // tag every pick, even an unresolved one
384
+ onRelationTarget: (key, target) => {
385
+ into[key] = target;
386
+ },
387
+ visitNode: (node, manifest) => {
388
+ // EC-256: a `relation` nested in an `object` prop (a link object's `page` ref)
389
+ // is baked + tagged like a top-level pick, so renaming the target page
390
+ // invalidates the embedding page. Depth-1, NO transclusion — a link target is
391
+ // read for its path, not inlined (else link-following bakes the whole linked
392
+ // relation graph). The walk handles top-level relation props (transcluded).
307
393
  for (const [name, value] of Object.entries(node.props ?? {})) {
308
394
  if (value.kind !== 'static')
309
395
  continue;
310
396
  const spec = manifest.props[name];
311
- if (spec?.type === 'relation') {
312
- const refs = spec.cardinality === 'many'
313
- ? Array.isArray(value.value)
314
- ? value.value
315
- : []
316
- : [value.value];
317
- for (const raw of refs) {
318
- const ref = relationRefOf(raw);
319
- if (!ref)
320
- continue;
321
- const key = relationKey(ref);
322
- refKeys?.add(key); // tag every pick, even an unresolved one (negative dependency)
323
- if (key in into)
324
- continue; // already populated → also terminates cycles
325
- const target = resolveRelation(ref);
326
- if (!target)
327
- continue;
328
- into[key] = target;
329
- // Transclusion: recurse into the target's composition-shaped fields so a
330
- // reusable's inlined `content` blocks get their own relations populated.
331
- for (const fieldValue of Object.values(target)) {
332
- const childNodes = compositionRoots(fieldValue);
333
- if (childNodes.length > 0) {
334
- collectReferencedRelations(childNodes, registry, resolveRelation, into, refKeys);
335
- }
336
- }
337
- }
338
- }
339
- else if (spec?.type === 'object' && value.value != null) {
340
- // EC-256: a `relation` nested in an `object` prop (a link object's `page`
341
- // ref) is baked + tagged like a top-level pick, so renaming the target page
342
- // invalidates the embedding page. Depth-1, NO transclusion — a link target
343
- // is read for its path, not inlined (else link-following bakes the whole
344
- // linked-site relation graph).
397
+ if (spec?.type === 'object' && value.value != null) {
345
398
  collectObjectPropRelations(spec.fields, spec.cardinality, value.value, resolveRelation, into, refKeys);
346
399
  }
347
400
  }
348
- // A composition host stores its composed blocks in `node.props[valueProp]` (a
349
- // blocks VALUE), NOT `node.slots` — and `manifestSlots` excludes the valueProp
350
- // — so the slot recursion below misses them. Walk those composed nodes too, so
351
- // a relation prop on a block nested inside a composition is collected (and thus
352
- // baked for the host), matching what the render path resolves at depth.
353
- if (manifest.composition) {
354
- const composed = node.props?.[manifest.composition.valueProp];
355
- if (composed?.kind === 'static') {
356
- collectReferencedRelations(compositionRoots(composed.value), registry, resolveRelation, into, refKeys);
357
- }
358
- }
359
- }
360
- for (const children of Object.values(node.slots ?? {})) {
361
- collectReferencedRelations(children, registry, resolveRelation, into, refKeys);
362
- }
363
- }
401
+ },
402
+ }, new Set(Object.keys(into)));
364
403
  return into;
365
404
  }
366
405
  /**
@@ -434,58 +473,19 @@ export function serializeListingQuery(query) {
434
473
  * already visited is never re-walked, so a reference cycle terminates.
435
474
  */
436
475
  export function collectReferencedListings(nodes, registry, runListing, resolveRelation, into = {}, visitedRelations = new Set()) {
437
- for (const node of nodes) {
438
- const manifest = registry.getManifest(node.componentId);
439
- if (manifest?.listing) {
476
+ walkComposition(nodes, registry, {
477
+ resolveRelation,
478
+ visitNode: (node, manifest) => {
479
+ if (!manifest.listing)
480
+ return;
440
481
  const query = listingQueryOf(node, manifest.listing);
441
- if (query) {
442
- const key = serializeListingQuery(query);
443
- if (!(key in into))
444
- into[key] = runListing(query);
445
- }
446
- }
447
- if (manifest) {
448
- // Transclusion: a static `relation` prop (e.g. `Reusable.element`) inlines its
449
- // target's composition-shaped fields via `renderBlocks` at render — walk them
450
- // so a listing nested in a transcluded reusable's content is baked too (the
451
- // listing analog of `collectReferencedRelations`' transclusion recursion).
452
- for (const [name, value] of Object.entries(node.props ?? {})) {
453
- if (value.kind !== 'static')
454
- continue;
455
- const spec = manifest.props[name];
456
- if (spec?.type !== 'relation')
457
- continue;
458
- const refs = spec.cardinality === 'many' ? (Array.isArray(value.value) ? value.value : []) : [value.value];
459
- for (const raw of refs) {
460
- const ref = relationRefOf(raw);
461
- if (!ref)
462
- continue;
463
- const relKey = relationKey(ref);
464
- if (visitedRelations.has(relKey))
465
- continue; // already walked → terminates cycles
466
- visitedRelations.add(relKey);
467
- const target = resolveRelation(ref);
468
- if (!target)
469
- continue;
470
- for (const fieldValue of Object.values(target)) {
471
- const childNodes = compositionRoots(fieldValue);
472
- if (childNodes.length > 0) {
473
- collectReferencedListings(childNodes, registry, runListing, resolveRelation, into, visitedRelations);
474
- }
475
- }
476
- }
477
- }
478
- }
479
- if (manifest?.composition) {
480
- const composed = node.props?.[manifest.composition.valueProp];
481
- if (composed?.kind === 'static') {
482
- collectReferencedListings(compositionRoots(composed.value), registry, runListing, resolveRelation, into, visitedRelations);
483
- }
484
- }
485
- for (const children of Object.values(node.slots ?? {})) {
486
- collectReferencedListings(children, registry, runListing, resolveRelation, into, visitedRelations);
487
- }
488
- }
482
+ if (!query)
483
+ return;
484
+ const key = serializeListingQuery(query);
485
+ if (!(key in into))
486
+ into[key] = runListing(query);
487
+ },
488
+ }, visitedRelations);
489
489
  return into;
490
490
  }
491
491
  /** Collect the asset ids nested inside an `object` prop value (mirrors {@link resolveObjectProps}). */
@@ -1 +1 @@
1
- {"version":3,"file":"render.js","sourceRoot":"","sources":["../../src/runtime-renderer/render.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"render.js","sourceRoot":"","sources":["../../src/runtime-renderer/render.tsx"],"names":[],"mappings":"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","sourcesContent":["import { createElement, Fragment } from 'react'\nimport type { ReactNode } from 'react'\nimport type { ComponentNode, ProjectGraph, PropValue } from '@elytracms/core/project-graph'\nimport { DEFAULT_SLOT, OUTLET_SLOT } from '@elytracms/core/project-graph'\nimport type {\n ComponentManifest,\n ComponentRegistry,\n CompositionSpec,\n IterateSpec,\n ListingSpec,\n} from '@elytracms/core/component-registry'\nimport { manifestSlots, propValueValidator } from '@elytracms/core/component-registry'\nimport { isAssetNode, readDocumentRef } from '@elytracms/core/cms-core'\nimport type { FieldDef } from '@elytracms/core/cms-core'\nimport type {\n ItemContext,\n ListingQuery,\n RelationTarget,\n RenderContext,\n ResolveRelation,\n} from './context'\nimport { getImplementation } from './context'\nimport type { RichTextEmbedRenderer } from '@elytracms/core/rich-text'\nimport { ContentClientProvider } from './content-client'\nimport { evaluateCondition } from './condition'\nimport {\n MissingComponentFallback,\n MissingSlotPlaceholder,\n RenderErrorBoundary,\n RenderErrorFallback,\n} from './fallback'\n\n/** Resolved props plus the node's slot children, ready to hand to an implementation. */\ninterface ResolvedRender {\n props: Record<string, unknown>\n slotProps: Record<string, ReactNode>\n children: ReactNode\n}\n\n/**\n * Render a single component node to React. Never throws on a node: missing components,\n * invalid props, missing required slots, and resolver errors all degrade to visible\n * fallbacks (brief §4.11).\n */\nexport function renderNode(node: ComponentNode, ctx: RenderContext): ReactNode {\n // Condition gate — render nothing when false.\n if (node.condition && !evaluateCondition(node.condition, ctx.resolveBinding, ctx.item)) {\n return null\n }\n\n const manifest = ctx.registry.getManifest(node.componentId)\n const implementation = getImplementation(ctx.implementations, node.componentId)\n\n // Missing component: no manifest OR no implementation.\n if (!manifest || !implementation) {\n return decorate(\n ctx,\n node,\n <MissingComponentFallback nodeId={node.id} componentId={node.componentId} />,\n )\n }\n\n let resolved: ResolvedRender\n try {\n resolved = resolveRender(node, manifest, ctx)\n } catch (error) {\n // A thrown resolver (binding/prop) error yields a fallback, not a crash.\n return decorate(ctx, node, <RenderErrorFallback nodeId={node.id} message={messageOf(error)} />)\n }\n\n const element = createElement(\n implementation,\n { ...resolved.props, ...resolved.slotProps, key: node.id },\n resolved.children,\n )\n\n // Wrap each node so a throw during the implementation's own render degrades on the client.\n return decorate(\n ctx,\n node,\n <RenderErrorBoundary key={node.id} nodeId={node.id}>\n {element}\n </RenderErrorBoundary>,\n )\n}\n\n/** Apply the host's optional per-node decorator (Builder selection markers). */\nfunction decorate(ctx: RenderContext, node: ComponentNode, rendered: ReactNode): ReactNode {\n return ctx.decorateNode ? ctx.decorateNode(node, rendered) : rendered\n}\n\n/**\n * Bind a `RichTextEmbedRenderer` (EC-189) to a `RenderContext`: each embedded\n * composition node renders through `renderComposition` with the SAME context, so an\n * embed reuses the EC-015 visible fallbacks, the injected binding resolver, the\n * content client, and any active item scope exactly as on a page.\n *\n * The bound renderer is a FUNCTION closed over `ctx`, so it is injected into the\n * consuming component as a **prop** (see `resolveRender`), never through a\n * `'use client'` React-context provider: a function cannot cross the RSC\n * server→client boundary into a client component, so the provider approach\n * 500s a server-rendered (host) page. A server→server prop is fine, and the\n * studio's client render injects the identical prop the same way.\n */\nexport function createEmbedRenderer(ctx: RenderContext): RichTextEmbedRenderer {\n return (node: ComponentNode) => renderComposition(node, ctx)\n}\n\n/** Whether a manifest declares a `richText` prop — i.e. it may render embeds (EC-189). */\nfunction manifestConsumesEmbeds(manifest: ComponentManifest): boolean {\n return Object.values(manifest.props).some((field) => field.type === 'richText')\n}\n\n/**\n * Bind a blocks renderer to a `RenderContext` (EC-254 transclusion): renders a\n * populated relation target's `blocks` field value as a composition through the\n * SAME `renderComposition` pipeline (EC-015 fallbacks, the injected resolvers, any\n * active item scope), so a referenced document's sub-blocks compose inline exactly\n * like a page's. Like {@link createEmbedRenderer}, it is a FUNCTION closed over\n * `ctx` injected as a PROP (`renderBlocks`), never a `'use client'` context\n * provider — a function cannot cross the RSC boundary into a client component.\n */\nexport function createBlocksRenderer(ctx: RenderContext): (value: unknown) => ReactNode {\n return (value: unknown) => renderComposition(value, ctx)\n}\n\n/** Whether a manifest declares a `relation` prop — i.e. it populates/transcludes (EC-254). */\nfunction manifestConsumesRelations(manifest: ComponentManifest): boolean {\n return Object.values(manifest.props).some((field) => field.type === 'relation')\n}\n\n/**\n * A `{ collection, id }` relation reference, or `null` when the value is not one.\n * EC-277: accepts the self-typed envelope (`{ type:'reference', collection, id }`)\n * and legacy bare `{ collection, id }` via the shared tolerant reader.\n */\nfunction relationRefOf(value: unknown): { collection: string; id: string } | null {\n return readDocumentRef(value) ?? null\n}\n\n/**\n * The asset id a prop value points at, or `undefined`. EC-277: a self-typed asset\n * envelope (`{ type:'asset', id }`) OR a legacy bare id string — but NOT a literal\n * URL string, which the renderer passes through as a direct src (URL-passthrough).\n */\nfunction assetIdOfProp(value: unknown): string | undefined {\n if (isAssetNode(value)) return value.id\n if (typeof value === 'string' && value !== '' && !isUrlLike(value)) return value\n return undefined\n}\n\n/** Stable cycle-guard key for a relation target. */\nfunction relationKey(ref: { collection: string; id: string }): string {\n return `${ref.collection}:${ref.id}`\n}\n\n/** The cycle-guard keys (`collection:id`) of a node's static relation props (EC-254). */\nfunction nodeRelationKeys(node: ComponentNode, manifest: ComponentManifest): string[] {\n const keys: string[] = []\n for (const [name, value] of Object.entries(node.props ?? {})) {\n if (value.kind !== 'static') continue\n const spec = manifest.props[name]\n if (spec?.type !== 'relation') continue\n const refs =\n spec.cardinality === 'many' ? (Array.isArray(value.value) ? value.value : []) : [value.value]\n for (const raw of refs) {\n const ref = relationRefOf(raw)\n if (ref) keys.push(relationKey(ref))\n }\n }\n return keys\n}\n\n/**\n * Populate a static `relation` prop's stored value to delivery shape (EC-254).\n * `one` → the single populated target, or `undefined` (omit the prop) when the\n * ref is malformed, unresolved (missing/invisible target), or cyclic. `many` →\n * the array of populated targets with such entries dropped. A ref already on the\n * transclude path is skipped — the cycle guard. Mirrors the asset branch's\n * \"resolved object or graceful omission\" contract; the caller only assigns a\n * defined result.\n */\nfunction resolveRelationProp(\n cardinality: 'one' | 'many',\n value: unknown,\n ctx: RenderContext,\n): unknown {\n const resolveOne = (raw: unknown): RelationTarget | null => {\n const ref = relationRefOf(raw)\n if (!ref) return null\n if (ctx.transcludePath?.includes(relationKey(ref))) return null // reference cycle\n return ctx.resolveRelation?.(ref) ?? null\n }\n\n if (cardinality === 'many') {\n const refs = Array.isArray(value) ? value : []\n const out: RelationTarget[] = []\n for (const raw of refs) {\n const target = resolveOne(raw)\n if (target) out.push(target)\n }\n return out\n }\n return resolveOne(value) ?? undefined\n}\n\n/**\n * Wrap a composite render in the `ContentClientProvider` when a content client is\n * injected (EC-191), so self-fetching components reach it via `useContentClient()`.\n * Nested wraps are harmless (inner provider wins with an equivalent value).\n *\n * Note (EC-189): the rich-text embed renderer is NOT wrapped here — it is a\n * function and a `'use client'` provider cannot receive it across the RSC\n * boundary (it threw \"Functions cannot be passed directly to Client Components\"\n * on every server-rendered page). It is injected as a prop in `resolveRender`.\n */\nfunction withContent(ctx: RenderContext, rendered: ReactNode): ReactNode {\n if (ctx.content)\n return <ContentClientProvider client={ctx.content}>{rendered}</ContentClientProvider>\n return rendered\n}\n\n/** Resolve a node's props and slot children. Throws only if a resolver throws (caught upstream). */\nfunction resolveRender(\n node: ComponentNode,\n manifest: ComponentManifest,\n ctx: RenderContext,\n): ResolvedRender {\n const props = resolveProps(node, manifest, ctx)\n\n // EC-189: a component with a `richText` prop (the RichText primitive) renders\n // `componentEmbed` nodes through the renderer. Inject the embed renderer as a\n // prop — server-safe (a server→server function prop), unlike a `'use client'`\n // context provider, which cannot receive a function across the RSC boundary.\n if (manifestConsumesEmbeds(manifest)) props.renderEmbed = createEmbedRenderer(ctx)\n\n // EC-254: a component with a `relation` prop may transclude a populated target's\n // `blocks` field (e.g. `project.Reusable` rendering the referenced `reusable`'s\n // `content`). Inject a composition renderer — server-safe like `renderEmbed` —\n // closed over a context whose cycle-guard path includes THIS node's relation\n // targets, so a transcluded sub-block that references an ancestor target degrades\n // instead of looping. Population above ran with `ctx` (the un-extended path), so\n // the node's OWN targets are populated, never pre-blocked.\n if (manifestConsumesRelations(manifest)) {\n props.renderBlocks = createBlocksRenderer({\n ...ctx,\n transcludePath: [...(ctx.transcludePath ?? []), ...nodeRelationKeys(node, manifest)],\n })\n }\n\n // EC-255: a component whose manifest declares a `listing` renders documents from\n // a LIVE query (a dynamic grid), not a static pick. Build the query from its\n // filter-source prop and inject the resolved documents as the declared prop — the\n // host runs the query (Next bakes it, the studio runs it live); the renderer never\n // executes one. No resolver wired, or no usable pick, yields an empty array, so the\n // block shows its own empty state rather than listing the whole collection.\n if (manifest.listing) {\n const query = listingQueryOf(node, manifest.listing)\n props[manifest.listing.prop] = (query && ctx.resolveListing?.(query)) || []\n }\n\n // Repeater nodes iterate their items prop over the item slot template.\n if (manifest.iterate) {\n return resolveRepeater(node, manifest, manifest.iterate, props, ctx)\n }\n\n // Composition hosts render a block-field value (a ComponentNode tree) as children.\n if (manifest.composition) {\n return resolveComposition(manifest.composition, props, ctx)\n }\n\n const { children, slotProps } = renderSlots(node, manifest, ctx)\n return { props, slotProps, children }\n}\n\n/**\n * Render a composition host: the resolved `valueProp` holds a stored composition\n * (a `ComponentNode` tree), which becomes the component's children via\n * `renderComposition` — so a `blocks` field value composes inside a page/template\n * exactly like authored nodes (EC-188, AD-12). Mirrors `resolveRepeater`: the raw\n * value stays in `props` (harmless; the implementation typically ignores it) and the\n * rendered tree is handed over as `children`.\n */\nfunction resolveComposition(\n spec: CompositionSpec,\n props: Record<string, unknown>,\n ctx: RenderContext,\n): ResolvedRender {\n return { props, slotProps: {}, children: renderComposition(props[spec.valueProp], ctx) }\n}\n\n/** Resolve every prop of a node into a concrete runtime value. */\nfunction resolveProps(\n node: ComponentNode,\n manifest: ComponentManifest,\n ctx: RenderContext,\n): Record<string, unknown> {\n const out: Record<string, unknown> = {}\n const entries = Object.entries(node.props ?? {})\n const isSpread = (value: PropValue): boolean =>\n value.kind === 'binding' && value.binding.mode === 'spread'\n // Apply spread bindings first, then explicit props — so a named static/value prop always wins\n // over a same-named spread key, predictably and independent of authoring order (EC-089).\n for (const [name, value] of entries)\n if (isSpread(value)) resolveProp(name, value, manifest, ctx, out)\n for (const [name, value] of entries)\n if (!isSpread(value)) resolveProp(name, value, manifest, ctx, out)\n return out\n}\n\n/**\n * A value an `asset` prop can carry verbatim instead of an asset id: an absolute\n * URL (`https://…`, protocol-relative `//…`), a root-relative path (`/…`), or an\n * inline `data:`/`blob:` source. Lets the Image primitive keep accepting plain\n * URLs (back-compat: `Image.src` was a free `text` prop before EC-195) and keeps\n * the renderer usable with no asset store wired.\n */\nfunction isUrlLike(value: string): boolean {\n return (\n /^(https?:)?\\/\\//.test(value) ||\n value.startsWith('/') ||\n value.startsWith('data:') ||\n value.startsWith('blob:')\n )\n}\n\n/**\n * Hooks for {@link walkComposition} — a collector declares only WHAT to gather at\n * each node; the walk owns HOW the composition is traversed (EC-281).\n */\ninterface CompositionWalkHooks {\n /** Called once per node that has a manifest — collect the node-local payload. */\n visitNode?: (node: ComponentNode, manifest: ComponentManifest) => void\n /** Called for every static `relation`-prop ref seen, resolved or not (cache-tag keys). */\n onRelationRef?: (key: string, ref: { collection: string; id: string }) => void\n /** Called for each relation ref that populated to a target (the relations map). */\n onRelationTarget?: (key: string, target: RelationTarget) => void\n /**\n * Populate a relation ref to depth-1. Its presence ENABLES transclusion: the\n * walk follows each static relation prop into its target and recurses the\n * target's composition-shaped fields (a `reusable`'s `content` rendered inline\n * via `renderBlocks`). Omitted → the walk stays page-local (no transclusion),\n * the graceful degradation a host without a relation populate already gets.\n */\n resolveRelation?: ResolveRelation\n}\n\n/**\n * The one composition walk every page-scoping collector shares (EC-281). It\n * traverses a node tree exactly as the renderer resolves it — each node, its\n * composition-host composed blocks (`props[valueProp]`), its slot children, AND a\n * populated relation target's composition-shaped fields (transclusion via\n * `renderBlocks`) — crossing the transclusion boundary in EXACTLY ONE place,\n * cycle-guarded by `seen` (`collection:id`).\n *\n * Before this, the asset / relation / listing collectors each re-implemented this\n * skeleton, and a resolution concern that forgot to follow transclusion silently\n * stopped at a reference — the recurring EC-262 / EC-256 / EC-270 bug class. Now a\n * collector supplies a {@link CompositionWalkHooks} and cannot reintroduce that\n * gap: if it walks at all, it transcludes. `resolveRelation` is injected (never\n * imported), so this stays free of the content/persistence packages.\n */\nfunction walkComposition(\n nodes: readonly ComponentNode[],\n registry: ComponentRegistry,\n hooks: CompositionWalkHooks,\n seen: Set<string>,\n): void {\n for (const node of nodes) {\n const manifest = registry.getManifest(node.componentId)\n if (manifest) {\n hooks.visitNode?.(node, manifest)\n // Transclusion: follow each static `relation` prop into its populated target\n // and recurse the target's composition-shaped fields. Only when a populate is\n // wired — else relation props pass through raw at render (no inlined content).\n if (hooks.resolveRelation) {\n for (const [name, value] of Object.entries(node.props ?? {})) {\n if (value.kind !== 'static') continue\n const spec = manifest.props[name]\n if (spec?.type !== 'relation') continue\n const refs =\n spec.cardinality === 'many' ? (Array.isArray(value.value) ? value.value : []) : [value.value]\n for (const raw of refs) {\n const ref = relationRefOf(raw)\n if (!ref) continue\n const key = relationKey(ref)\n hooks.onRelationRef?.(key, ref) // tag every pick, even an unresolved one\n if (seen.has(key)) continue // already walked → also terminates cycles\n seen.add(key)\n const target = hooks.resolveRelation(ref)\n if (!target) continue\n hooks.onRelationTarget?.(key, target)\n for (const fieldValue of Object.values(target)) {\n walkComposition(compositionRoots(fieldValue), registry, hooks, seen)\n }\n }\n }\n }\n // A composition host stores its composed blocks in `props[valueProp]` (a blocks\n // VALUE), not `node.slots`, so the slot recursion below misses them — walk them.\n if (manifest.composition) {\n const composed = node.props?.[manifest.composition.valueProp]\n if (composed?.kind === 'static') {\n walkComposition(compositionRoots(composed.value), registry, hooks, seen)\n }\n }\n }\n for (const children of Object.values(node.slots ?? {})) {\n walkComposition(children, registry, hooks, seen)\n }\n }\n}\n\n/**\n * Collect the asset ids a node tree resolves through `resolveAsset` (EC-205): the\n * STATIC `asset`-typed props holding a real asset id (not a passthrough URL/path).\n * Mirrors {@link resolveProp}'s asset branch exactly, so the set is COMPLETE (no\n * referenced asset is missed → no broken image) and MINIMAL (only ids the renderer\n * would resolve). Bound asset props resolve via bindings, and document asset FIELDS\n * resolve separately — neither uses the baked asset list, so neither is collected.\n * Lets a delivery host page-scope the baked assets to exactly what a page uses.\n *\n * Transclusion-aware (EC-270) via the shared {@link walkComposition} (EC-281): a\n * reusable's transcluded `content` images are page-scoped too. Exactly like its\n * relation sibling\n * {@link collectReferencedRelations}: when `resolveRelation` is supplied, a static\n * `relation` prop is followed into its populated target and the asset ids inside\n * that target's composition-shaped fields (a `reusable`'s `content` blocks, which a\n * component renders inline via `renderBlocks`) are collected too — otherwise a\n * transcluded reusable block's image, baked nowhere in the page tree, resolves to\n * null on the host and renders empty. Cycle-safe: a target already walked is never\n * re-walked, so a self-referencing reusable terminates. Without `resolveRelation`\n * (a host with no relation populate) the walk stays page-local, the same graceful\n * degradation the relation collector gives.\n */\nexport function collectReferencedAssetIds(\n node: ComponentNode,\n registry: ComponentRegistry,\n into: Set<string> = new Set(),\n resolveRelation?: ResolveRelation,\n seen: Set<string> = new Set(),\n): Set<string> {\n walkComposition(\n [node],\n registry,\n {\n resolveRelation,\n visitNode: (visited, manifest) => {\n for (const [name, value] of Object.entries(visited.props ?? {})) {\n if (value.kind !== 'static') continue\n const spec = manifest.props[name]\n if (spec?.type === 'asset') {\n const assetId = assetIdOfProp(value.value)\n if (assetId !== undefined) into.add(assetId)\n } else if (spec?.type === 'object') {\n // EC-253: a gallery/repeater prop nests asset ids — collect them too, so\n // the host bakes every referenced asset and no nested image is missed.\n collectObjectPropAssetIds(spec.fields, spec.cardinality, value.value, into)\n }\n }\n },\n },\n seen,\n )\n return into\n}\n\n/**\n * Walk a composition (a page's blocks + its layout root) and POPULATE every static\n * `relation` prop it references into a serializable `{ \"collection:id\": target }`\n * map (EC-254) — the relation analog of {@link collectReferencedAssetIds}. A\n * delivery host bakes this into its (serializable) render outcome and rebuilds\n * `RenderContext.resolveRelation` from the map inside the RSC, exactly as it does\n * with the page-scoped asset list — because a function (the content client) can\n * ride neither the data cache nor the RSC server→client boundary.\n *\n * Transclusion-aware + cycle-safe: a populated target's composition-shaped fields\n * (a `reusable`'s `content` blocks, which a component renders inline via\n * `renderBlocks`) are recursively walked so those blocks' own relations are\n * populated too; a target already in the map is never re-walked, so a reference\n * cycle terminates. `resolveRelation` is the injected populate (depth-1) — passed\n * in, never imported, so this stays free of the content/persistence packages.\n *\n * Optional `refKeys` records the `collection:id` of EVERY referenced pick — even\n * one that resolved to `null` (an unpublished/missing target) — so a delivery host\n * can cache-tag the page by it (EC-254/EC-146): editing or publishing a referenced\n * document then invalidates the embedding page, including a previously-unpublished\n * pick that should appear the moment it publishes.\n */\nexport function collectReferencedRelations(\n nodes: readonly ComponentNode[],\n registry: ComponentRegistry,\n resolveRelation: ResolveRelation,\n into: Record<string, RelationTarget> = {},\n refKeys?: Set<string>,\n): Record<string, RelationTarget> {\n // Seed the cycle guard with what `into` already holds, preserving the old\n // \"a key already in the map is never re-walked\" semantics for accumulating callers.\n walkComposition(\n nodes,\n registry,\n {\n resolveRelation,\n onRelationRef: (key) => refKeys?.add(key), // tag every pick, even an unresolved one\n onRelationTarget: (key, target) => {\n into[key] = target\n },\n visitNode: (node, manifest) => {\n // EC-256: a `relation` nested in an `object` prop (a link object's `page` ref)\n // is baked + tagged like a top-level pick, so renaming the target page\n // invalidates the embedding page. Depth-1, NO transclusion — a link target is\n // read for its path, not inlined (else link-following bakes the whole linked\n // relation graph). The walk handles top-level relation props (transcluded).\n for (const [name, value] of Object.entries(node.props ?? {})) {\n if (value.kind !== 'static') continue\n const spec = manifest.props[name]\n if (spec?.type === 'object' && value.value != null) {\n collectObjectPropRelations(\n spec.fields,\n spec.cardinality,\n value.value,\n resolveRelation,\n into,\n refKeys,\n )\n }\n }\n },\n },\n new Set(Object.keys(into)),\n )\n return into\n}\n\n/**\n * Build the {@link ListingQuery} a node's `listing` manifest declares (EC-255),\n * or `null` when its filter-source prop carries no usable pick — the block then\n * renders empty rather than listing the whole collection. Reads the `fromProp`\n * STATIC pick (a relation value `{ collection, id }` reduced to its id, or a bare\n * id string) and binds it to the listed collection's filter `field`. Pure (node\n * props + manifest only; no content import), so the Next bake and the studio live\n * resolver build the IDENTICAL query — and thus agree on the baked cache key.\n */\nexport function listingQueryOf(node: ComponentNode, spec: ListingSpec): ListingQuery | null {\n const pick = node.props?.[spec.filter.fromProp]\n if (!pick || pick.kind !== 'static') return null\n const ref = relationRefOf(pick.value)\n const id = ref ? ref.id : typeof pick.value === 'string' && pick.value !== '' ? pick.value : null\n if (id === null) return null\n const query: ListingQuery = { collection: spec.collection, where: { [spec.filter.field]: id } }\n if (spec.sort) query.sort = spec.sort\n if (spec.limit !== undefined) query.limit = spec.limit\n return query\n}\n\n/**\n * Deterministic cache key for a {@link ListingQuery} (EC-255): a stable JSON shape\n * (where-keys sorted, sort/limit normalized) so the Next host can key its baked\n * `query → docs` map and the rebuilt resolver looks the listing up by the SAME key\n * the renderer's {@link listingQueryOf} produces. Mirrors `@elytracms/core/content`'s\n * `serializeListQuery`, kept local so the renderer takes no content dependency.\n */\nexport function serializeListingQuery(query: ListingQuery): string {\n const where: Record<string, string | number | boolean> = {}\n for (const key of Object.keys(query.where).sort()) {\n const value = query.where[key]\n if (value !== undefined) where[key] = value\n }\n return JSON.stringify({\n collection: query.collection,\n where,\n sort: query.sort ? { field: query.sort.field, direction: query.sort.direction ?? 'asc' } : null,\n limit: query.limit ?? null,\n })\n}\n\n/**\n * Walk a composition (a page's blocks + its layout root) and resolve every\n * `listing` a node declares into a serializable `{ serializedQuery: docs[] }` map\n * (EC-255) — the listing analog of {@link collectReferencedRelations}. A delivery\n * host bakes this into its (serializable) render outcome and rebuilds\n * `RenderContext.resolveListing` from the map inside the RSC, exactly as it does\n * with relations and the page-scoped asset list, because the content client (which\n * runs the query) can ride neither the data cache nor the RSC server→client\n * boundary.\n *\n * `runListing` is the injected query executor (the host's `listDocuments`) — passed\n * in, never imported, so this stays free of the content/persistence packages. The\n * key is {@link serializeListingQuery}, so two nodes with the same query share a\n * single execution.\n *\n * Transclusion-aware + cycle-safe, exactly like {@link collectReferencedRelations}:\n * a composition host's composed blocks, child slots, AND a populated relation\n * target's composition-shaped fields (a `reusable`'s `content` a block transcludes\n * via `renderBlocks`) are all walked — so a listing nested inside a transcluded\n * reusable is baked too, matching what the render path resolves at depth. Without\n * this the Next host would render such a grid empty (the studio's live resolver\n * still works) AND drop its collection-membership cache tag. `resolveRelation` is\n * the injected populate (depth-1) used to reach those transcluded fields; a target\n * already visited is never re-walked, so a reference cycle terminates.\n */\nexport function collectReferencedListings(\n nodes: readonly ComponentNode[],\n registry: ComponentRegistry,\n runListing: (query: ListingQuery) => RelationTarget[],\n resolveRelation: ResolveRelation,\n into: Record<string, RelationTarget[]> = {},\n visitedRelations: Set<string> = new Set(),\n): Record<string, RelationTarget[]> {\n walkComposition(\n nodes,\n registry,\n {\n resolveRelation,\n visitNode: (node, manifest) => {\n if (!manifest.listing) return\n const query = listingQueryOf(node, manifest.listing)\n if (!query) return\n const key = serializeListingQuery(query)\n if (!(key in into)) into[key] = runListing(query)\n },\n },\n visitedRelations,\n )\n return into\n}\n\n/** Collect the asset ids nested inside an `object` prop value (mirrors {@link resolveObjectProps}). */\nfunction collectObjectPropAssetIds(\n fields: readonly FieldDef[],\n cardinality: 'one' | 'many',\n value: unknown,\n into: Set<string>,\n): void {\n const items = cardinality === 'many' ? (Array.isArray(value) ? value : []) : [value]\n for (const item of items) {\n if (!item || typeof item !== 'object' || Array.isArray(item)) continue\n const record = item as Record<string, unknown>\n for (const sub of fields) {\n const sv = record[sub.name]\n if (sub.type === 'asset') {\n const assetId = assetIdOfProp(sv)\n if (assetId !== undefined) into.add(assetId)\n } else if (sub.type === 'object' && sv != null)\n collectObjectPropAssetIds(sub.fields, sub.cardinality, sv, into)\n }\n }\n}\n\n/**\n * Populate (depth-1) the `relation` refs nested inside an `object` prop value into\n * the relations bake map + refKeys (EC-256) — the relation analog of\n * {@link collectObjectPropAssetIds}, so a `page` ref inside a link object\n * (`buttons[].link.page`) is baked and cache-tagged exactly like a top-level pick.\n * Recurses into nested `object` subfields. UNLIKE the top-level relation walk it\n * does NOT transclude the target's composition-shaped fields: a link's target page\n * is read for its path (depth-1), never inlined — following it would bake the whole\n * linked-site relation graph into every embedding page. `refKeys` tags every pick\n * (even an unresolved one) so publishing/renaming the target invalidates the page.\n */\nfunction collectObjectPropRelations(\n fields: readonly FieldDef[],\n cardinality: 'one' | 'many',\n value: unknown,\n resolveRelation: ResolveRelation,\n into: Record<string, RelationTarget>,\n refKeys: Set<string> | undefined,\n): void {\n const items = cardinality === 'many' ? (Array.isArray(value) ? value : []) : [value]\n for (const item of items) {\n if (!item || typeof item !== 'object' || Array.isArray(item)) continue\n const record = item as Record<string, unknown>\n for (const sub of fields) {\n const sv = record[sub.name]\n if (sub.type === 'relation' && sv != null) {\n const refs = sub.cardinality === 'many' ? (Array.isArray(sv) ? sv : []) : [sv]\n for (const raw of refs) {\n const ref = relationRefOf(raw)\n if (!ref) continue\n const key = relationKey(ref)\n refKeys?.add(key)\n if (key in into) continue\n const target = resolveRelation(ref)\n if (target) into[key] = target // depth-1 only — never transclude a link target\n }\n } else if (sub.type === 'object' && sv != null) {\n collectObjectPropRelations(sub.fields, sub.cardinality, sv, resolveRelation, into, refKeys)\n }\n }\n }\n}\n\n/**\n * Resolve the `asset` and `relation` subfields nested inside an `object` / repeater\n * prop value to delivery shape (EC-253 assets, EC-256 relations). The top-level\n * branches of {@link resolveProp} only resolve a TOP-LEVEL `asset`/`relation` prop,\n * so an asset nested in an `object` (a gallery's `images[].image`) or a relation\n * nested in one (a link object's `buttons[].link.page`) would otherwise reach the\n * implementation as a raw id/ref. This walks the prop's declared subfields:\n *\n * - `asset` → `ctx.resolveAsset` (url-like values pass through; an unresolved id\n * drops the subfield), exactly as the top level does.\n * - `relation` → `ctx.resolveRelation` depth-1 via {@link resolveRelationProp}, so\n * the implementation reads the target's fields (e.g. a link's `page.slug` → a live\n * path). No resolver → the raw ref passes through (graceful degradation); an\n * unresolved `one` drops the subfield. Depth-1 only — a nested relation is never\n * transcluded (a link target is read, not inlined).\n *\n * and recurses into nested `object` subfields. Pure; non-object items pass through.\n */\nfunction resolveObjectProps(\n fields: readonly FieldDef[],\n cardinality: 'one' | 'many',\n value: unknown,\n ctx: RenderContext,\n): unknown {\n const items = cardinality === 'many' ? (Array.isArray(value) ? value : []) : [value]\n const resolvedItems = items.map((item) => {\n if (!item || typeof item !== 'object' || Array.isArray(item)) return item\n const next: Record<string, unknown> = { ...(item as Record<string, unknown>) }\n for (const sub of fields) {\n const sv = next[sub.name]\n if (sub.type === 'asset') {\n const assetId = assetIdOfProp(sv)\n if (assetId === undefined) continue // URL string / empty / not an asset → leave as-is\n const resolved = ctx.resolveAsset?.(assetId)\n if (resolved) next[sub.name] = resolved\n else delete next[sub.name]\n } else if (sub.type === 'relation' && sv != null) {\n if (!ctx.resolveRelation) continue // no resolver → leave the raw ref (degrade)\n const resolved = resolveRelationProp(sub.cardinality, sv, ctx)\n if (resolved !== undefined) next[sub.name] = resolved\n else delete next[sub.name] // unresolved `one` → drop the subfield\n } else if (sub.type === 'object' && sv != null) {\n next[sub.name] = resolveObjectProps(sub.fields, sub.cardinality, sv, ctx)\n }\n }\n return next\n })\n return cardinality === 'many' ? resolvedItems : resolvedItems[0]\n}\n\n/** Resolve a single prop into `out`, applying invalid-static-prop fallbacks and spread. */\nfunction resolveProp(\n name: string,\n value: PropValue,\n manifest: ComponentManifest,\n ctx: RenderContext,\n out: Record<string, unknown>,\n): void {\n const spec = manifest.props[name]\n\n if (value.kind === 'static') {\n // Validate against the prop's field-def (EC-190); on failure use the field's\n // `default` or omit — the EC-015 invalid-static-prop visible fallback.\n const validate = propValueValidator(manifest, name)\n if (validate && !validate(value.value)) {\n if (spec?.default !== undefined) out[name] = spec.default\n // else: omit the prop entirely and continue.\n return\n }\n // EC-195: an `asset`-typed prop stores an asset id; resolve it to a usable\n // asset (url + intrinsic dimensions + alt) so an uploaded image renders\n // optimized. A raw URL/path value passes through (back-compat, and so the\n // renderer never *requires* an asset store). A missing asset omits the prop\n // — the implementation shows its own empty/fallback state, never a crash.\n if (spec?.type === 'asset') {\n // EC-277: an asset id arrives self-typed (`{ type:'asset', id }`) or as a legacy\n // bare id; a literal URL/path string passes through unchanged (back-compat).\n const assetId = assetIdOfProp(value.value)\n if (assetId === undefined) {\n if (typeof value.value === 'string') out[name] = value.value\n return\n }\n const resolved = ctx.resolveAsset?.(assetId)\n if (resolved) out[name] = resolved\n // else omit — unresolved asset id → visible fallback in the implementation.\n return\n }\n // EC-253/EC-256: an `object` / repeater prop may nest `asset` subfields (a\n // gallery's `images[].image`) or `relation` subfields (a link object's\n // `buttons[].link.page`); resolve those to delivery shape so the implementation\n // reads `item.image.url` / `link.page.slug`, mirroring the top-level branches at\n // every depth.\n if (spec?.type === 'object' && value.value != null) {\n out[name] = resolveObjectProps(spec.fields, spec.cardinality, value.value, ctx)\n return\n }\n // EC-254: a `relation` prop stores a `{ collection, id }` ref (or an array for\n // `many`) — the editor's document pick on a block. Populate it to the target's\n // depth-1 delivery shape so the implementation reads resolved fields, not a raw\n // ref. Mirrors the asset branch: unresolved → omit (`one`) / drop (`many`); no\n // resolver wired → the raw ref passes through (the same graceful degradation).\n if (spec?.type === 'relation') {\n if (!ctx.resolveRelation) {\n out[name] = value.value\n return\n }\n const resolved = resolveRelationProp(spec.cardinality, value.value, ctx)\n if (resolved !== undefined) out[name] = resolved\n return\n }\n out[name] = value.value\n return\n }\n\n // Bound prop — resolve through the injected resolver (may throw; caught by caller).\n // NB (EC-254): relation population is intentionally STATIC-only — a relation prop\n // is the editor's document pick (v1 props are static, AD-12; prop bindings are\n // parked). A bound value passes through as the resolver returns it, never through\n // `resolveRelationProp`, so a relation prop should not be bound until prop bindings\n // and their population are designed together.\n const resolved = ctx.resolveBinding(value.binding, ctx.item)\n if (value.binding.mode === 'spread') {\n if (resolved && typeof resolved === 'object' && !Array.isArray(resolved)) {\n Object.assign(out, resolved as Record<string, unknown>)\n }\n return\n }\n out[name] = resolved\n}\n\n/** Render the named slots of a node: `children` maps to React children, others to props. */\nfunction renderSlots(\n node: ComponentNode,\n manifest: ComponentManifest,\n ctx: RenderContext,\n): { children: ReactNode; slotProps: Record<string, ReactNode> } {\n const slots = node.slots ?? {}\n const slotProps: Record<string, ReactNode> = {}\n let children: ReactNode = renderSlotChildren(slots[DEFAULT_SLOT], ctx)\n\n // EC-190: `blocks` props are slots too (named child regions); `manifestSlots`\n // folds them in (a no-op for manifests without blocks props).\n const declaredSlots = manifestSlots(manifest)\n for (const slotSpec of declaredSlots) {\n if (slotSpec.name === DEFAULT_SLOT) continue\n const nodes = slots[slotSpec.name]\n if ((!nodes || nodes.length === 0) && slotSpec.required) {\n // Missing required named slot — visible placeholder in that slot position.\n slotProps[slotSpec.name] = <MissingSlotPlaceholder nodeId={node.id} slot={slotSpec.name} />\n continue\n }\n slotProps[slotSpec.name] = renderSlotChildren(nodes, ctx)\n }\n\n // Pass through any node slots not declared on the manifest (e.g. a Switch's dynamic\n // `case:*` slots), so dynamic-slot components receive their children as props.\n const declared = new Set(declaredSlots.map((s) => s.name))\n for (const [name, nodes] of Object.entries(slots)) {\n if (name === DEFAULT_SLOT || declared.has(name)) continue\n slotProps[name] = renderSlotChildren(nodes, ctx)\n }\n\n // Missing required default slot — placeholder as children.\n const defaultSpec = declaredSlots.find((s) => s.name === DEFAULT_SLOT)\n const defaultNodes = slots[DEFAULT_SLOT]\n if (defaultSpec?.required && (!defaultNodes || defaultNodes.length === 0)) {\n children = <MissingSlotPlaceholder nodeId={node.id} slot={DEFAULT_SLOT} />\n }\n\n return { children, slotProps }\n}\n\n/**\n * Render an ordered list of slot child nodes (array order preserved). Each\n * entry is wrapped in a Fragment keyed by the node id: `renderNode`'s return\n * value may be an unkeyed fallback element (missing component, render error)\n * or have its key stripped by a host `decorateNode`, and unkeyed entries in\n * this array would trigger React's `unique \"key\" prop` warning on every page.\n */\nfunction renderSlotChildren(nodes: ComponentNode[] | undefined, ctx: RenderContext): ReactNode {\n if (!nodes || nodes.length === 0) return null\n return (\n <Fragment>\n {nodes.map((child) => (\n <Fragment key={child.id}>{renderNode(child, ctx)}</Fragment>\n ))}\n </Fragment>\n )\n}\n\n/**\n * Render a repeater: resolve `itemsProp` to an array and render the `itemSlot` template\n * once per item, with `ItemContext` set so `repeaterItem`-mode bindings resolve against\n * the item. The repeater implementation receives the rendered items as `children`.\n */\nfunction resolveRepeater(\n node: ComponentNode,\n manifest: ComponentManifest,\n iterate: IterateSpec,\n props: Record<string, unknown>,\n ctx: RenderContext,\n): ResolvedRender {\n const itemsValue = props[iterate.itemsProp]\n const items = Array.isArray(itemsValue) ? itemsValue : []\n const template = node.slots?.[iterate.itemSlot]\n\n const slotSpec = manifest.slots.find((s) => s.name === iterate.itemSlot)\n if ((!template || template.length === 0) && slotSpec?.required) {\n // No item template but the slot is required — visible placeholder, no iteration.\n return {\n props,\n slotProps: {},\n children: <MissingSlotPlaceholder nodeId={node.id} slot={iterate.itemSlot} />,\n }\n }\n\n const rendered = items.map((item, index) => {\n const itemCtx: RenderContext = { ...ctx, item: { item, index } satisfies ItemContext }\n return (\n <Fragment key={index}>\n {(template ?? []).map((child) => (\n // Keyed per template node for the same reason as renderSlotChildren.\n <Fragment key={child.id}>{renderNode(child, itemCtx)}</Fragment>\n ))}\n </Fragment>\n )\n })\n\n return { props, slotProps: {}, children: <Fragment>{rendered}</Fragment> }\n}\n\n/**\n * Render a composition FIELD VALUE (EC-188, AD-12): one `ComponentNode` root or an\n * ordered list of them — a `blocks` field's stored value. Each root renders through\n * `renderNode` with the SAME `RenderContext`, so the EC-015 visible fallbacks, the\n * injected binding resolver, and any active item scope all apply exactly as on a\n * page. An empty/absent value renders nothing (the host component owns its own empty\n * state). Roots are keyed by id — `renderNode` may return an unkeyed fallback —\n * mirroring `renderSlotChildren`.\n *\n * This is the shared delivery primitive for every composition surface: the block\n * field (here), and later the page collection (EC-187) and rich-text embeds (EC-189).\n */\nexport function renderComposition(value: unknown, ctx: RenderContext): ReactNode {\n const roots = compositionRoots(value)\n if (roots.length === 0) return null\n return withContent(\n ctx,\n <Fragment>\n {roots.map((root) => (\n <Fragment key={root.id}>{renderNode(root, ctx)}</Fragment>\n ))}\n </Fragment>,\n )\n}\n\n/** Coerce a stored composition value (one node, many, or absent) to a root list. */\nfunction compositionRoots(value: unknown): ComponentNode[] {\n if (Array.isArray(value)) return value.filter(isComponentNode)\n if (isComponentNode(value)) return [value]\n return []\n}\n\n/** Structural ComponentNode guard — the stored value is opaque at the type level. */\nfunction isComponentNode(value: unknown): value is ComponentNode {\n return (\n typeof value === 'object' &&\n value !== null &&\n typeof (value as { id?: unknown }).id === 'string' &&\n typeof (value as { componentId?: unknown }).componentId === 'string'\n )\n}\n\n/**\n * Render a composition (`blocks`) field value composed INTO a graph layout\n * (EC-187): the page collection's delivery primitive. The composition renders\n * via `renderComposition` (the same per-node pipeline + EC-015 fallbacks), and\n * the result is injected into the layout root's `outlet` slot — so a\n * page-collection document's `body` composes inside its layout chrome.\n *\n * Degrades, never crashes: an `undefined`/unknown `layoutId`, or a graph with no\n * matching layout, renders the bare composition (no layout chrome) rather than\n * blanking the page. `withContent` wraps the output so a `ContentClient` on\n * `ctx` propagates to self-fetching blocks (EC-191).\n */\nexport function renderCompositionInLayout(\n graph: ProjectGraph,\n layoutId: string | undefined,\n value: unknown,\n ctx: RenderContext,\n): ReactNode {\n const layout = layoutId ? graph.layouts.find((l) => l.id === layoutId) : undefined\n // No layout selected, or the selected layout is absent from the graph: render\n // the bare composition rather than blanking the page.\n if (!layout) return withContent(ctx, renderComposition(value, ctx))\n\n // With a layout, inject the composition's roots into the layout root's outlet\n // slot, so the composition renders through the layout's chrome via the\n // identical per-node pipeline. `compositionRoots` coerces the stored value\n // (one node, many, or absent) to the outlet's `ComponentNode[]`.\n const root = injectNodesIntoOutlet(layout.root, compositionRoots(value))\n return withContent(ctx, renderNode(root, ctx))\n}\n\n/**\n * Produce a layout tree with `nodes` inserted into the layout root's `outlet`\n * slot. The original graph is never mutated.\n */\nfunction injectNodesIntoOutlet(root: ComponentNode, nodes: ComponentNode[]): ComponentNode {\n return {\n ...root,\n slots: {\n ...(root.slots ?? {}),\n [OUTLET_SLOT]: nodes,\n },\n }\n}\n\nfunction messageOf(error: unknown): string {\n return error instanceof Error ? error.message : String(error)\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"rich-text.js","sourceRoot":"","sources":["../../src/runtime-renderer/rich-text.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"rich-text.js","sourceRoot":"","sources":["../../src/runtime-renderer/rich-text.tsx"],"names":[],"mappings":"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","sourcesContent":["import type { ReactNode } from 'react'\nimport { defineComponent } from '@elytracms/core/component-registry'\nimport {\n parseRichTextValue,\n renderRichTextValue,\n sampleRichTextRegistry,\n} from '@elytracms/core/rich-text'\nimport type { RichTextValue, RichTextEmbedRenderer } from '@elytracms/core/rich-text'\nimport type { JsonValue } from '@elytracms/core/project-graph'\n\n/**\n * RichText — the rich-text content primitive (EC-159). Its `content` prop is a\n * stored `@elytracms/core/rich-text` value (the versioned, ProseMirror-shaped storage\n * JSON); rendering goes through the package's server-safe renderer with the\n * project's custom block/inline registry, so custom blocks render identically\n * on the canvas, in fixtures, and in an exported app. Unknown node types\n * degrade to the renderer's visible fallback — never a crash, never silent.\n *\n * The prop is flagged `inlineEditable`: the builder canvas edits the rendered\n * element in place (EC-158 semantics extended to rich text), committing back\n * to the same storage format.\n */\n\n/**\n * The custom block/inline registry the primitive renders with. The sample\n * registry (callout block + mention inline) stands in for project-registered\n * blocks, mirroring how `project.*` components stand in for project code.\n */\nexport const richTextPrimitiveRegistry = sampleRichTextRegistry\n\n/**\n * Stored rich-text values are plain JSON by construction (Zod-validated, no\n * runtime handles), but `RichTextNode` is an interface without an index\n * signature, so the structural `JsonValue` assignment needs this one cast.\n */\nfunction asJson(value: RichTextValue): JsonValue {\n return value as unknown as JsonValue\n}\n\n/** Default content for a freshly inserted RichText node. */\nexport const RICH_TEXT_DEFAULT_VALUE: RichTextValue = {\n version: 1,\n doc: {\n type: 'doc',\n content: [\n {\n type: 'paragraph',\n content: [{ type: 'text', text: 'Rich text. Select to format, double-click to edit.' }],\n },\n ],\n },\n}\n\n/** A fixture document exercising marks, a link, a list, and the custom blocks. */\nconst RICH_TEXT_FIXTURE_VALUE: RichTextValue = {\n version: 1,\n doc: {\n type: 'doc',\n content: [\n { type: 'heading', attrs: { level: 3 }, content: [{ type: 'text', text: 'Rich text block' }] },\n {\n type: 'paragraph',\n content: [\n { type: 'text', text: 'Formatted ' },\n { type: 'text', text: 'bold', marks: [{ type: 'bold' }] },\n { type: 'text', text: ' and ' },\n { type: 'text', text: 'italic', marks: [{ type: 'italic' }] },\n { type: 'text', text: ' copy with a ' },\n { type: 'text', text: 'link', marks: [{ type: 'link', attrs: { href: 'https://example.com' } }] },\n { type: 'text', text: '.' },\n ],\n },\n {\n type: 'callout',\n attrs: { tone: 'info' },\n content: [{ type: 'text', text: 'A custom block, rendered by the project registry.' }],\n },\n ],\n },\n}\n\nexport function RichText(props: Record<string, unknown> & { children?: ReactNode }): ReactNode {\n // The embed renderer (EC-189), injected by the renderer as a prop (bound to\n // `renderComposition`). A prop — not a `'use client'` React context — keeps this\n // server-safe: the renderer runs in the host's RSC pass, and a function cannot\n // cross the server→client boundary into a context provider. When present,\n // `componentEmbed` nodes render through the same pipeline as a page/block field;\n // when absent (a bare render), embeds degrade to the visible fallback.\n const renderEmbed =\n typeof props.renderEmbed === 'function'\n ? (props.renderEmbed as RichTextEmbedRenderer)\n : undefined\n // Unset content renders the manifest default (the renderer omits unset\n // props rather than applying defaults — mirrors Heading/Text fallbacks).\n const parsed = parseRichTextValue(props.content ?? RICH_TEXT_DEFAULT_VALUE)\n if (!parsed.ok) {\n // Schema-invalid static values are normally replaced by the manifest\n // default before render; this guards bound values — visibly.\n return (\n <div data-ec-primitive=\"RichText\" className=\"rich-text-invalid\" role=\"note\">\n Invalid rich-text content.\n </div>\n )\n }\n return (\n <div data-ec-primitive=\"RichText\">\n {renderRichTextValue(parsed.value, { registry: richTextPrimitiveRegistry, renderEmbed })}\n </div>\n )\n}\n\nexport const RichTextManifest = defineComponent({\n id: 'base.primitives.RichText',\n namespace: 'base.primitives',\n title: 'Rich Text',\n category: 'content',\n description: 'Formatted long-form content stored in the rich-text format.',\n props: {\n content: {\n // The structured @elytracms/rich-text storage value (EC-159); validated by\n // the renderer's parse guard rather than a scalar string check.\n type: 'richText',\n context: 'prop',\n default: asJson(RICH_TEXT_DEFAULT_VALUE),\n // Rich-text content prop, editable in place on the canvas (EC-159).\n form: { label: 'Content', inlineEditable: true },\n },\n },\n slots: [],\n fixtures: [\n { name: 'Default' },\n { name: 'Formatted', props: { content: asJson(RICH_TEXT_FIXTURE_VALUE) } },\n ],\n})\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/starter-kits/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,MAAM,CAAC,MAAM,OAAO,GAAG,8BAA8B,CAAA;AAErD,cAAc,OAAO,CAAA;AACrB,cAAc,aAAa,CAAA;AAC3B,cAAc,YAAY,CAAA;AAC1B,cAAc,eAAe,CAAA;AAC7B,cAAc,WAAW,CAAA;AACzB,cAAc,QAAQ,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/starter-kits/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,MAAM,CAAC,MAAM,OAAO,GAAG,8BAA8B,CAAA;AAErD,cAAc,OAAO,CAAA;AACrB,cAAc,aAAa,CAAA;AAC3B,cAAc,YAAY,CAAA;AAC1B,cAAc,eAAe,CAAA;AAC7B,cAAc,WAAW,CAAA;AACzB,cAAc,QAAQ,CAAA","sourcesContent":["/**\n * @elytracms/starter-kits — versioned, importable project seeds (brief Phase 9A, EC-114–121). A kit\n * bundles a page graph, project settings, CMS schemas + seed content, the component registry it\n * uses, and a brand token palette, so \"start from a kit\" is one validated, deterministic step.\n * Seeds are the INPUT to a new project — distinct from export output (generated FROM a project).\n */\nexport const PACKAGE = '@elytracms/core/starter-kits'\n\nexport * from './kit'\nexport * from './manifests'\nexport * from './validate'\nexport * from './instantiate'\nexport * from './upgrade'\nexport * from './kits'\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"instantiate.js","sourceRoot":"","sources":["../../src/starter-kits/instantiate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAA;AA2B7D,SAAS,KAAK,CAAI,KAAQ;IACxB,OAAO,eAAe,CAAC,KAAK,CAAC,CAAA;AAC/B,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,cAAc,CAAC,GAAe;IAC5C,MAAM,KAAK,GAAiB,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;IAC5C,KAAK,CAAC,QAAQ,GAAG,EAAE,GAAG,KAAK,CAAC,QAAQ,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,CAAA;IAEtD,OAAO;QACL,KAAK,EAAE,GAAG,CAAC,EAAE;QACb,UAAU,EAAE,GAAG,CAAC,OAAO;QACvB,WAAW,EAAE,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,QAAQ,EAAE,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE;QAC9D,KAAK;QACL,WAAW,EAAE,KAAK,CAAC,GAAG,CAAC,WAAW,CAAC;QACnC,SAAS,EAAE,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC;QAC/B,SAAS,EAAE,GAAG,CAAC,SAAS;QACxB,YAAY,EAAE,GAAG,CAAC,YAAY;QAC9B,SAAS,EAAE,aAAa,CAAC,GAAG,CAAC,cAAc,CAAC;KAC7C,CAAA;AACH,CAAC"}
1
+ {"version":3,"file":"instantiate.js","sourceRoot":"","sources":["../../src/starter-kits/instantiate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAA;AA2B7D,SAAS,KAAK,CAAI,KAAQ;IACxB,OAAO,eAAe,CAAC,KAAK,CAAC,CAAA;AAC/B,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,cAAc,CAAC,GAAe;IAC5C,MAAM,KAAK,GAAiB,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;IAC5C,KAAK,CAAC,QAAQ,GAAG,EAAE,GAAG,KAAK,CAAC,QAAQ,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,CAAA;IAEtD,OAAO;QACL,KAAK,EAAE,GAAG,CAAC,EAAE;QACb,UAAU,EAAE,GAAG,CAAC,OAAO;QACvB,WAAW,EAAE,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,QAAQ,EAAE,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE;QAC9D,KAAK;QACL,WAAW,EAAE,KAAK,CAAC,GAAG,CAAC,WAAW,CAAC;QACnC,SAAS,EAAE,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC;QAC/B,SAAS,EAAE,GAAG,CAAC,SAAS;QACxB,YAAY,EAAE,GAAG,CAAC,YAAY;QAC9B,SAAS,EAAE,aAAa,CAAC,GAAG,CAAC,cAAc,CAAC;KAC7C,CAAA;AACH,CAAC","sourcesContent":["import { emitTokensCss } from '@elytracms/core/design-tokens'\nimport type { ComponentManifest } from '@elytracms/core/component-registry'\nimport type { CmsDocument, CollectionDef, LocaleConfig } from '@elytracms/core/cms-core'\nimport type { ProjectGraph } from '@elytracms/core/project-graph'\nimport type { CreateProjectInput } from '@elytracms/core/studio-core'\nimport type { StarterKit } from './kit'\n\n/**\n * A kit instantiated into the parts a new project consumes (EC-114). Deterministic: the same kit\n * always yields the same parts (deep-cloned so the source kit is never mutated). The host creates\n * the project with `createInput`, then seeds the Builder graph, CMS collections/documents, and\n * the registry from the rest.\n */\nexport interface InstantiatedKit {\n kitId: string\n kitVersion: string\n /** Input for the project repository's `create`. */\n createInput: CreateProjectInput\n graph: ProjectGraph\n collections: CollectionDef[]\n documents: CmsDocument[]\n manifests: ComponentManifest[]\n localeConfig: LocaleConfig\n /** Export-ready token CSS with the kit's brand palette applied (EC-117). */\n tokensCss: string\n}\n\nfunction clone<T>(value: T): T {\n return structuredClone(value)\n}\n\n/**\n * Instantiate a kit deterministically. Provenance (kit id + version) is returned on the result so\n * the project can record which kit/version it came from (used by the upgrade flow, EC-120).\n */\nexport function instantiateKit(kit: StarterKit): InstantiatedKit {\n const graph: ProjectGraph = clone(kit.graph)\n graph.metadata = { ...graph.metadata, name: kit.name }\n\n return {\n kitId: kit.id,\n kitVersion: kit.version,\n createInput: { name: kit.name, settings: clone(kit.settings) },\n graph,\n collections: clone(kit.collections),\n documents: clone(kit.documents),\n manifests: kit.manifests,\n localeConfig: kit.localeConfig,\n tokensCss: emitTokensCss(kit.tokenOverrides),\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"kit.js","sourceRoot":"","sources":["../../src/starter-kits/kit.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAOvB;;;;;GAKG;AAEH,qDAAqD;AACrD,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAA;AAGnE,uGAAuG;AACvG,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,CAAC,MAAM,CAAC;IACpC,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACrB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACvB,OAAO,EAAE,gBAAgB;IACzB,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE;IACvB,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE;IACpB,+EAA+E;IAC/E,cAAc,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;CAC1H,CAAC,CAAA;AAoCF,oDAAoD;AACpD,MAAM,UAAU,YAAY,CAAC,GAAe;IAC1C,OAAO;QACL,EAAE,EAAE,GAAG,CAAC,EAAE;QACV,IAAI,EAAE,GAAG,CAAC,IAAI;QACd,OAAO,EAAE,GAAG,CAAC,OAAO;QACpB,WAAW,EAAE,GAAG,CAAC,WAAW;QAC5B,QAAQ,EAAE,GAAG,CAAC,QAAQ;QACtB,QAAQ,EAAE;YACR,kEAAkE;YAClE,KAAK,EAAE,GAAG,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,KAAK,MAAM,CAAC,CAAC,MAAM;YAClE,UAAU,EAAE,GAAG,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,KAAK,iBAAiB,CAAC,CAAC,MAAM;YACjF,WAAW,EAAE,GAAG,CAAC,WAAW,CAAC,MAAM;YACnC,SAAS,EAAE,GAAG,CAAC,SAAS,CAAC,MAAM;SAChC;KACF,CAAA;AACH,CAAC"}
1
+ {"version":3,"file":"kit.js","sourceRoot":"","sources":["../../src/starter-kits/kit.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAOvB;;;;;GAKG;AAEH,qDAAqD;AACrD,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAA;AAGnE,uGAAuG;AACvG,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,CAAC,MAAM,CAAC;IACpC,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACrB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACvB,OAAO,EAAE,gBAAgB;IACzB,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE;IACvB,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE;IACpB,+EAA+E;IAC/E,cAAc,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;CAC1H,CAAC,CAAA;AAoCF,oDAAoD;AACpD,MAAM,UAAU,YAAY,CAAC,GAAe;IAC1C,OAAO;QACL,EAAE,EAAE,GAAG,CAAC,EAAE;QACV,IAAI,EAAE,GAAG,CAAC,IAAI;QACd,OAAO,EAAE,GAAG,CAAC,OAAO;QACpB,WAAW,EAAE,GAAG,CAAC,WAAW;QAC5B,QAAQ,EAAE,GAAG,CAAC,QAAQ;QACtB,QAAQ,EAAE;YACR,kEAAkE;YAClE,KAAK,EAAE,GAAG,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,KAAK,MAAM,CAAC,CAAC,MAAM;YAClE,UAAU,EAAE,GAAG,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,KAAK,iBAAiB,CAAC,CAAC,MAAM;YACjF,WAAW,EAAE,GAAG,CAAC,WAAW,CAAC,MAAM;YACnC,SAAS,EAAE,GAAG,CAAC,SAAS,CAAC,MAAM;SAChC;KACF,CAAA;AACH,CAAC","sourcesContent":["import { z } from 'zod'\nimport type { ComponentManifest } from '@elytracms/core/component-registry'\nimport type { CmsDocument, CollectionDef, LocaleConfig } from '@elytracms/core/cms-core'\nimport type { TokenOverrides } from '@elytracms/core/design-tokens'\nimport type { ProjectGraph } from '@elytracms/core/project-graph'\nimport type { ProjectSettings } from '@elytracms/core/studio-core'\n\n/**\n * A starter kit (EC-114/119): a versioned, self-contained bundle that instantiates a working\n * project. It bundles everything a new project needs — the page graph, project settings, CMS\n * schemas + seed content, the component registry it uses, and a brand token palette — so import\n * is one validated, deterministic step (no per-part wiring).\n */\n\n/** Semantic version string (`major.minor.patch`). */\nexport const kitVersionSchema = z.string().regex(/^\\d+\\.\\d+\\.\\d+$/)\nexport type KitVersion = z.infer<typeof kitVersionSchema>\n\n/** The envelope metadata, validated structurally. The bundled parts are validated by `validateKit`. */\nexport const kitMetaSchema = z.object({\n id: z.string().min(1),\n name: z.string().min(1),\n version: kitVersionSchema,\n description: z.string(),\n category: z.string(),\n /** Brand palette overrides applied on top of the canonical tokens (EC-117). */\n tokenOverrides: z.record(z.string(), z.object({ light: z.string().optional(), dark: z.string().optional() })).default({}),\n})\nexport type KitMeta = z.infer<typeof kitMetaSchema>\n\n/** A full starter kit. */\nexport interface StarterKit extends KitMeta {\n /** Project settings (locales, environments, export target, section availability). */\n settings: ProjectSettings\n localeConfig: LocaleConfig\n /** The layout graph the project opens with (EC-187: layouts-only; pages are\n * `page`-collection documents in `documents`). */\n graph: ProjectGraph\n /** CMS schemas (EC-118). */\n collections: CollectionDef[]\n /** Seed content (EC-115). */\n documents: CmsDocument[]\n /** Component manifests the graph references (base + project) (EC-116). */\n manifests: ComponentManifest[]\n tokenOverrides: TokenOverrides\n}\n\n/** A lightweight summary for a kit gallery (no heavy graph/content). */\nexport interface StarterKitSummary {\n id: string\n name: string\n version: KitVersion\n description: string\n category: string\n /** Counts of the bundled parts, for the gallery preview. */\n contents: {\n pages: number\n components: number\n collections: number\n documents: number\n }\n}\n\n/** Build a {@link StarterKitSummary} from a kit. */\nexport function summarizeKit(kit: StarterKit): StarterKitSummary {\n return {\n id: kit.id,\n name: kit.name,\n version: kit.version,\n description: kit.description,\n category: kit.category,\n contents: {\n // EC-187: pages are `page`-collection documents, not graph pages.\n pages: kit.documents.filter((d) => d.collection === 'page').length,\n components: kit.manifests.filter((m) => m.namespace !== 'base.primitives').length,\n collections: kit.collections.length,\n documents: kit.documents.length,\n },\n }\n}\n"]}