Changelogs
Core Types Changelog
Changelog for Laioutr Core Types (@laioutr-core/core-types) following Keep a Changelog and Semantic Versioning.
All notable changes to Laioutr Core Types (@laioutr-core/core-types, the shared TypeScript types for the Laioutr platform) are documented here, following Keep a Changelog and Semantic Versioning.
0.31.0
Added
CalendarDatevalue type — an ISOYYYY-MM-DDcalendar date (no time, no timezone), exported from@laioutr-core/core-types/common. Use it for whole-day values such as a location's opening/reopening date.
Changed
- Aligned
RcGlobalSectionslots and queries toRcDictionary, and added an optionalstudio.description.
0.30.3
Added
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.installedApps: Record<string, AppRuntimeMeta>onProjectFrontendContext— 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.
Changed
- Lifted
RenderQueryReference.queryPathfromstringtostring[]and added anentity-propertyvariant to theRenderQueryReferenceandRenderQueryLoadSpecSeedunions (internal render-pipeline types, consumed only by@laioutr-core/frontend-core).
Fixed
- Fixed 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 copy of@laioutr-core/core-types) this leftzodToJSONSchemaunable to find the schema's metadata, so reflection inlined canonical schemas without anidor$refand Studio consumers 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. HMR additive edits todescription/title/examplesstill take effect; removing a meta field requires a dev-server restart (rare).
0.30.1
Added
- Expanded the
Mediatype family with audio support and richer video metadata:MediaAudio(type: 'audio') — new variant ofMediafor playable audio assets, withsources: MediaSourceAudio[], optionalcover?: MediaImage(album art / podcast cover), and optionaltracks?: MediaTextTrack[](chapters, transcripts).MediaSourceAudio— single audio source withprovider,src, optionalformat(MIME),length, andstreaming.MediaTextTrack— timed text track (subtitles, captions, descriptions, chapters, metadata) forMediaVideoandMediaAudio, mapping to the HTML<track>element.MediaSourceVideo.streaming?: 'progressive' | 'hls' | 'dash'— delivery-format discriminator.progressiveis assumed when omitted.MediaVideo.tracks?: MediaTextTrack[]— subtitle/caption/chapter tracks for the video.- Studio
mediafields can now useallowedTypes: ['audio'], which narrows the field value toMediaAudio.
Changed
- Breaking:
MediaVideo.previewrenamed toMediaVideo.poster, matching the HTML<video poster="…">attribute and the customer-facing terminology used in Studio.// Before const video: MediaVideo = { type: 'video', sources: [...], preview: posterImage, }; // After const video: MediaVideo = { type: 'video', sources: [...], poster: posterImage, }; - Breaking: the
Mediaunion was widened to includeMediaAudio. Code that exhaustively switches onmedia.typewithout a default branch will need to handle'audio':switch (media.type) { case 'image': return renderImage(media); case 'video': return renderVideo(media); case 'audio': return renderAudio(media); // new — handle or fall through to default }
0.30.0
Added
- Optional
if?: SchemaConditiononStudioFieldDefinitionandStudioFieldsetDefinition.SchemaConditionis a JSON expression (typed via@laioutr/expression) that conditionally hides a field or fieldset in the Studio sidebar based on the section/block's current values. Example:customBackgroundFieldis hidden unless['==', ['get', 'background'], 'custom'].
0.29.0
Changed
- Breaking: Updated
Media,Swatch, andcoerceFieldValueto align with the surface-tone type changes in the UI family (BackgroundBrightness→SurfaceTone). Consumers reading these types should treat the colour-mode field as'light' | 'dark' | 'bright'.
0.28.15
Changed
- Use
z.object({ ...base.shape, ... })instead ofbase.extend({ ... })for schema composition so the JSDoc zod-meta plugin resolves field descriptions correctly.
0.28.14
Changed
- Wired
urlAliasandisRootend-to-end from RC page config through the orchestr store to client-side URL generation. RefactoredQueryParamssoisRootis the single source of truth for root-level URL params — callers no longer need to pass an empty prefix.
0.28.2
Fixed
- Replaced the wildcard
./*exports pattern with explicit subpath exports. The wildcard pattern was not properly traced by@vercel/nft, causingERR_MODULE_NOT_FOUNDfordist/orchestr/index.jsat runtime on Vercel even though the build succeeded.
0.28.0
Added
- Multi-market render types:
RenderLanguage,RenderMarket,RenderI18nConfig, pluslocalizedPathsandmarketIdsonMetaPage.
Changed
- Breaking: Removed the
ALL_LOCALES('*') wildcard. ThelocaleChainno longer includes'*'as a tail element, andnormalizeLocalizedPathsno longer prefers the'*'key as fallback. All localized values must use concrete BCP 47 locale codes.
0.27.0
Added
createEntityComponentTokenFactoryhelper.
0.26.0
Added
- JSON field type.
Changed
- Implemented the most common types as proper TypeScript types.
0.25.0
Added
- Optional
descriptionfield onpageTypeToken. WellKnownComponentTagvalue'Blog'.
0.24.0
Changed
- Separated
core-typesfrom thecanonical-typespackage.