-
dc8610b: Add support for setting Media fields from query entities.
Add
RcPropValueEntityPropertyfor query-bound prop values — a new variant on theRcPropValueunion that lets a single prop read its value from a property of a query-result entity (e.g.{ type: 'entity-property', queryId: 'q1', path: ['components', 'base', 'image'] }). The compositepathuses the samecomponents.*/links.*form as string-template references.Lifted
RenderQueryReference.queryPathfromstringtostring[]and added anentity-propertyvariant to theRenderQueryReferenceandRenderQueryLoadSpecSeedunions (internal render-pipeline types, consumed only by@laioutr-core/frontend-core).Add
installedApps: Record<string, AppRuntimeMeta>toProjectFrontendContext— apps registered in the deployed frontend viaregisterLaioutrApp(including frontend-core itself). Used by the cockpit to gate features that require a specific framework/app version. -
cbce272: Fix silent registry eviction in
applyZodFixthat caused id-less reflection output (e.g.MediaImage,MoneyAmount,Link) on Vercel-deployed Nuxt apps.applyZodFixpreviously evicted the existing registry entry when a schema with the same id was registered a second time. In the dual-bundle case (server bundle +@vercel/nft-traced.output/server/node_modules/copy of@laioutr-core/core-types), the first-loaded instance is the one consumers like@laioutr-core/canonical-typesreference. Evicting it leftzodToJSONSchemaunable to find the schema's metadata, so reflection inlined canonical schemas without anidor$ref. Studio consumers that branch onschema.idthen misclassified Media/Money/Link properties as plainobject.New behavior: merge the new meta into the existing entry and store the merged record against both schema instances.
_idmapstill points at the first-registered instance. HMR additive edits todescription/title/examplesstill take effect; removing a meta field requires a dev-server restart (rare).
-
dc8610b: Render-pipeline support for
RcPropValueEntityProperty: gather seeds, resolve query paths via the new sharedresolveEntityPathhelper, coerce the resolved value throughcoerceFieldValueso e.g. a string URL bound to a media field becomes a Media object. The dynamic-string render branch now also goes throughresolveEntityPath, unifying the two query-bound paths.Renamed
queryStringReferencesToLoadSpectoqueryPathsToLoadSpecwith signature(paths: string[][]) => RenderQueryLoadSpec. The previous helper was internal; external consumers are not expected to be affected.rcPropValueToRendernow treats unknownRcPropValue.typevalues as "no value" (returnsundefined) and emits a deduplicatedconsole.warn, instead of leaking the raw value object to downstream renderers. Lets newer studio configs degrade gracefully on older frontend-core deployments rather than crashing.Reflect endpoint now exposes
installedApps: Record<string, AppRuntimeMeta>— everyregisterLaioutrAppcaller (including frontend-core itself) keyed by name, with itsversionandpageWrapper. Backed by a new server-only virtual file#laioutr/installed-apps, populated lazily fromlaioutrAppRegistry.getAllMetas()so apps registered later in module setup are still captured. -
a82dbb0: Fix
frontend-core:link-resolver:*andfrontend-core:page-renderer:select-page-varianthooks: handler-setresult.valueis now read synchronously, so hook results actually take effect. Previously the result was read before Nuxt's deferred handlers ran, so every registered handler's output was silently dropped.frontend-core:link-resolver:resolveis now a filter hook: it runs after a link is resolved, withresult.valuepre-seeded with the resolved URL/path. Handlers receive the resolved value and may transform it (e.g. append query params) for any link type; the value is threaded across multiple handlers. Existing handlers that overwriteresult.valuekeep working unchanged.
- a81154c:
PriceInfo,ProductTileBasic, andCartListItemnow render their unit price via the new$unitPriceformatter instead of inlining$money(...) / $measurement(...). No visual change — the rendered string and each component's BEM classes are unchanged.
- e406b05: Use shared now in OpeningStatus components and composables
- a81154c: Add a
$unitPricei18n formatter that renders aUnitPriceas a localizedprice / referencestring (e.g.13.99 € / 100 ml), composing the existing$moneyand$measurementformatters. Available as a template global alongside$money/$measurement, and used internally byVariantSelectionCardso the unit-price string is produced in one place. - 7f1182a: Fix
.radius-containedcollapsing to square corners on tall elements. Inset banners (BannerBasic,BannerShowcase,BannerIntegrated,BrandHero) now keep their rounded corners regardless of height — previously a banner taller than the viewport width (common at mobile widths) lost its rounding entirely. Full-bleed, edge-to-edge banners still render square as before. No action required.